Внимание новички! Настоятельно рекомендую заглянуть в комментарии - там аргументированно и понятно обсуждают этот пост, давая возможность посмотреть на данный план с разных сторон. Спасибо.
Приветствую, Хабрачитатели!
Я - человек имеющий странный ник SVPRA, и вот уже более двух лет я являюсь программистом на С#. Пришел к идее программировать на шарпе не сразу. Сначала пытался во фронтенд, но как-то не сложилось, потом решил создать игру, и выучил С#. И вот, я до сих пор на нем. Решаю очень многие и разные задачи.
Хотелось бы рассказать о моем алгоритме обучения языку, т.к. когда я был новичком, мне было очень сложно найти информацию о том, как правильно учится, где можно достать информацию и тому подобное. Поэтому вот: моя статья на эту тему. Ссылки тоже будут.
P.S. это статья для новичков, поэтому много фактов будут банальными для опытных разработчиков. Просьба не бить. Если что-то забыл - пишите в комментариях. Ну а теперь к статье :)
Итак, когда я начинал учится, я бродил по интернету в поиске нормального и вдохновляющего материала. Первое, что я нашел - уроки Гоши Дударя, но согласитесь, не самый лучший вариант для начала обучения, так как темы у него объясняются крайне обобщенно, и весьма разбросано, пропуская ключевые моменты.
Второй вариант заключался в прохождении курса Sololearn. Sololearn оказался действительно намного полнее уроков Дударя, но как говорится - всё познается в сравнении.
И самый нормальный вариант - книга Герберта Шилдта "Полное Руководство по С# 4.0". Действительно, самое полное, что может быть. 1000 страниц, и после этого, ты сможешь выучить язык. Но я вам скажу, этого мало. Кстати, ссылка на скачивание всех книг из этой статьи, находится тут (ссылка на Телеграм).
После прочтения этой книги вы можете считаться программистом. Но этого, как я уже говорил ранее, недостаточно. Почему? Потому что помимо основного языка, нужно знать алгоритмы, фреймворки, библиотеки, технологии, и иметь опыт, в конце концов. Но последнее приобретется, если вы будете оттачивать навыки, и решать задачи самостоятельно. А не тупо копировать код индусов со StackOverFlow. Ну а теперь к перечислению тех самых фреймворков и технологий.
Что кроме языка?
Первое, я бы советовал изучить устройство баз данных, и SQL на практике. Имеется очень много статей и книг по SQL, найти вы их сможете все на той же ссылке в начале.
Итак, SQL вы, предположим, изучили. Нужно как-то это все дело сортировать, верно? И тут нам помогут механизмы сортировки. Их тоже не помешало бы знать, начав, с самого просто - механизма сортировки пузырьком. Это как раз будет подходить для ваших маленьких массивов, и поможет понять, как оно работает, и как его применять. Далее можно будет перейти к более сложным сортировкам, и опять же практиковаться для закрепления знаний.
Дальше я бы советовал изучить технологию Git, потому что она точно будет полезна, при сохранении и откатки приложения, кода, структуры - чего угодно.
Но открою секрет, до этого, ваш код был не очень хорошим. Я понимаю, что много кто говорит, что идеального кода не существует, но все-таки к нему надо стремится, и в этом вам помогут следующие приемы:
Класс должен отвечать за одну задачу. Так код будет легче поддерживать, и не придется изменять всю архитектуру, ради добавления одной фичи, или исправления одного бага. Все будет решаться локально, в рамках одного класса.
Нужно использовать аксессоры для прописания логики доступа к типу.
Не должен выводится null
Проект должен быть потокобезопасным, да и в целом многопоточность- это отдельная тема, которую чтобы понять, недостаточно прочесть главу из книги Герберта Шилдта. Нужно постоянно изучать инструкции от Майкрософт или на Хабре.
Повышайте производительность программы, используйте garbage collector, и постоянно заботьтесь о том, как программа или система будет вести себя на маломощных компьютерах/серверах.
На самом деле, нюансов намного больше, чем описано в статье. Но для новичка, я думаю, будет полезно знать основные.
Изучайте устройство серверов, и пытайтесь создать свой
Так вы узнаете, как они устроены, и поймёте эту тему лучше. Опять же - нужно уметь находить информацию самостоятельно, поэтому если какая-то тема, или термин непонятны - идите и гуглите его. Если не понятно снова, углубитесь в эту тему, и практикуйтесь. И так, кстати, вы сможете узнать о других областях и технологиях, и следовательно найти что-то новое для себя, и изучить это.
Изучите нейросети
Но это уже если вы точно уверены в своих навыках и опыте. В создании нейросетей много математики, но не пугайтесь. Если разобраться во всем этом, то создание нейросетей даже будет доставлять вам удовольствие. Я, например, начал изучать нейросети с курсов Анатолия Карпова, даже несмотря на то, что примеры были написаны на Pandas для Пайтона. К тому же, есть мощнейший инструмент для машинного обучения, только на шарпе - ML.Net. И в целом, помимо нейросетей, полезно изучить физику в программировании и технологиях, чтобы понимать процесс программирования более детально.
Чуть не забыл. Изучайте алгоритмы, структуры данных и паттерны проектирования, это точно будет полезным. Ведь для конкретной задачи лучше будет не придумывать кривой велосипед, а взять уже готовое решение в виде паттерна. Ссылки на книги по алгоритмам и паттернам по первой ссылке.
А как же игры?
Для игр не нужно много навыков программирования, но если вы хотите их создавать - создавайте. Занимайтесь в тех областях, которые вам интересны, и мотивация и удовольствие от программирования никогда не покинут вас. Я например, признаюсь честно, учил язык только ради игр. Но потом мне понадобилось организовать работу своего сервера, и мне удалось это сделать на шарпе. Далее я понял, что все мои цели, вплоть до машинного обучения, можно делать на нем, и не уходить на другие языки программирования. Правда, сейчас я учу С++, но вы не должны воспринимать мои слова как закон, и можете начать с любого языка, хоть с Пайтона.
Помните, всё зависит от вас, и программирование - это очень интересно. Так что изучайте, читайте и стремитесь.
Ваш SVPRA.
Комментарии (31)
lair
04.11.2021 10:46+11План обучения С#
Первое, я бы советовал изучить устройство баз данных, и SQL на практике.
Изучите нейросетиГде план обучения C#-то? Или он вот этой конструкцией описывается:
После прочтения этой книги вы можете считаться программистом. Но этого, как я уже говорил ранее, недостаточно.
(я даже не буду спрашивать "какой этой", учитывая, что нет нормальной ссылки на книгу, и "почему именно этой, а не вон тех трех")
Нужно использовать аксессоры для прописания логики доступа к типу.
… это что вообще такое?
Проект должен быть потокобезопасным
Нет, не должен.
используйте garbage collector
Как можно писать на C# (в мейнстриме) и не использовать GC?
Короче говоря, извините за прямоту, не статья, а набор каких-то случайных утверждений, часть из которых бессмысленна.
Как вишенка на торте, обещанная ссылка никуда не ведет.
Tuwogaka
04.11.2021 11:29+1Если проникнуться мыслью, что не ссылка никуда не ведёт, а ссылка ведёт в никуда - всё становится на место и статья действительно интересна как конкретный, в смысле единичный, личный опыт.
svpra Автор
04.11.2021 12:44Ссылка работает. Исправил. Сам знаю, недочётов много. Это моя первая статья, которая где-либо есть, возможно, кривовато изложено, поэтому критике буду рад любой. Спасибо, что указали на недочёты. Буду исправляться. По поводу книги - я указал название выше. Да и дисклеймер в начале гласит, что это просто мой опыт, возможно, кто-то подчерпнёт для себя что-то полезное. Не судите строго. Спасибо за прочтение!
lair
04.11.2021 12:46+8Ссылка работает. Исправил.
Ссылка на тг-канал? Спасибо, нет, не надо.
По поводу книги — я указал название выше.
Где?
Не судите строго.
Но почему? Вы решили что-то советовать, причем людям, у которых еще нет навыков, чтобы оценить ваши советы критически — как раз наоборот, такие тексты нужн судить максимально строго, чтобы они приносили наименьший вред.
svpra Автор
04.11.2021 13:11книга Герберта Шилдта по С#. Действительно, самое полное, что может быть.
Вот книга. Абзацом выше.Ссылка на тг-канал? Спасибо, нет, не надо
Хорошо, укажу на Яндекс диск.чтобы оценить ваши советы критически — как раз наоборот, такие тексты нужн судить максимально строго, чтобы они приносили наименьший вред
Объективно. Соглашусь.lair
04.11.2021 13:12+1книга Герберта Шилдта по С#. [...] Вот книга. Абзацом выше.
Это не название. Вам никогда не приходило составлять библиографические указатели, я так понимаю?
Я могу найти какую-то книгу по C# какого-то Герберта Шилдта. Я никогда не могу быть уверен, что вы имеете в виду ту же самую книгу, пока вы не укажете точные выходные данные.
Казалось бы, дата саентист должен понимать важность провенанса.
svpra Автор
04.11.2021 13:20Исправил
lair
04.11.2021 13:28+4книга Герберта Шилдта "Полное Руководство по С# 4.0".
Угу. А вот теперь два разумных следующих вопроса:
Во-первых, она по четвертому C#. Ей одиннадцать лет. Она точно актуальна? В ней нет ни слова про async/await (понятно, почему), а это одна из ключевых функциональностей современного C#. Вы там что-то писали про многопоточность? Так вот, надо читать Клири (а не Шилдта), потому что сейчас важнее конкурентность и асинхрония, а не многопоточность. И это подводит нас к следующему пункту:
Во-вторых, почему именно эта книга, а не другие (в том числе — вышедшие после)? Почему не Скит? Почему не Рихтер (потому что не стоит изучать C# в отрыве от CLR)?
svpra Автор
04.11.2021 14:08Да, пожалуй надо добавить CLR via C#, C# для профессионалов Рихтера и книгу по новейшей версси С# 10.
lair
04.11.2021 17:08+1Я на этом фоне вообще перестал понимать, в чем же состоит ваш план обучения (у вас это словосочетание и в заголовке стоит, и в тегах). Рекомендацию книги — вижу. План обучения — нет.
acces969
04.11.2021 12:26Спасибо. Сейчас как раз учу большой язык после 1С. Читаю паттерны проектирования от HeadFirst, советую эту книгу новичкам. Вашу книгу скачаю тоже. Жаль ссылка не рабочая.
По поводу создания игр - интересно. Считал, что это сложная отрасль, куда новичку лучше не лезть. Где же истина? Разумеется, речь не про платформеры и три в ряд.
Жизнь требует писать энтерпрайз приложения, а душа хочет создать клон ex-machina с большим вниманием к технике.
tommyangelo27
06.11.2021 04:51+1По поводу игр у меня опыт такой был - разобраться с Unity и основами C# (в том числе async/await) вообще несложно было с 10 летним бекграундом программирования. А вот всякие графические вещи (модели, текстуры, анимация движения) для меня были абсолютно новыми вещами, и в данной области знаний ноль целых, ноль десятых.
Конечно, есть например в Unity готовые ассеты, в том числе бесплатные, но без знания как их правильно совместить друг с другом (и без малейшего опыта в Gimp и Blender) игра похожа на код, слепленный из кусков на Stackowerflow. Как-то работает, но это именно что уровень "3 в ряд".
Впрочем, в качестве хобби и "3 в ряд" неплохой опыт - если, конечно, довести до релиза, а не бросить после двух недель ????
svpra Автор
08.11.2021 23:36Ну три в ряд можно настолько круто реализовать, что по задумке простая игрушка превратиться в зверя)))
sad__maximka
04.11.2021 12:26Вышло достаточно познавательно. Мне кажется, можно было бы выпустить ещё ряд статей на эту тему с более углублённым рассматриванием конкретных областей языка. Но это уже, естественно, на усмотрение автора. Думаю новичкам будет в самый раз, спасибо :)
dopusteam
04.11.2021 15:23+5Не должен выводится null
Что это значит?
Новичку начать с потоков, GC, модификаторов доступа и SRP? Серьёзно?
На самом деле, абсолютно бестолковая статья с ссылкой на одну (!) субъективно выбранную книгу
xFFFF
04.11.2021 13:46+4Курс на Sololearn очень слаб, и в плане обучения почти бесполезен.
Книга Герберта Шилдта "Полное Руководство по С# 4.0" - сейчас устарела, нужно читать более современные издания.
svpra Автор
06.11.2021 18:09У меня в статье сказано, что все познается в сравнении. По сравнению с уроками Гоши Дударя, согласитесь, Sololearn лучше. А вот по сравнению с книгами (не только с Шилдтом), SoloLearn действительно слаб.
frkbvfnjh
04.11.2021 15:39Блин, какого черта нужно знать алгоритмы сортировки? Это нужно только школьнику что бы мозг тренировать. Сейчас же в любом языке программирования у массива есть какой-нибудь метод sort(), который отсортирует все что угодно используя самый идеальный алгоритм сортировки. В С# не так что ли?
lair
04.11.2021 17:10+4Сейчас же в любом языке программирования у массива есть какой-нибудь метод sort(), который отсортирует все что угодно используя самый идеальный алгоритм сортировки.
На самом деле, нет. Обычно метод
sort
использует какой-нибудь универсальный алгоритм (в разных языках еще и разный), который хорош, но не обязательно идеален.Но дело, конечно, не в этом, и в C# (точнее, во всем .net) рекомендуется использовать встроенную сортировку, если нет веских причин считать, что она ошибается. Дело в том, что изучение алгоритмов сортировки полезно для навыка анализа алгоритмов в целом.
ReaderReader
04.11.2021 16:27+3Статья «прекрасна» во всем :)
И самый нормальный вариант — книга Герберта Шилдта «Полное Руководство по С# 4.0»
Изучать C# 4.0, когда на дворе C# 9.0, и на подходе уже C# 10? Оригинальный совет, весьма оригинальный.Нужно использовать аксессоры для прописания логики доступа к типу.
Какого только я переводческого креатива не встречал, но чтобы так перевести properties…Итак, SQL вы, предположим, изучили.
Написанное в статье оставляет однозначное впечатление, что данная фраза переводится как «предположим вы изучили SELECT, DELETE, UPDATE в их самых простейших вариантах»Не должен выводится null
Куда не должен выводится?Проект должен быть потокобезопасным
Почему должен? Что вот прямо любой проект, даже тот, где многопоточность не предусматривается?Повышайте производительность программы, используйте garbage collector, и постоянно заботьтесь о том, как программа или система будет вести себя на маломощных компьютерах/серверах.
Но для начала прочтите и запомните правило за авторством Скотта Майерса: «Не оптимизируйте производительность кода в ущерб читабельности и поддержке, пока тесты явным образом не показали, где именно нужна оптимизация». Отдельный вопрос, как можно не использовать GC, программируя на C#. Если же речь про явные вызовы GC методов, то imho это тема уже не для начинающих.После прочтения этой книги вы можете считаться программистом.
Считаться вы конечно можете кем угодно, хоть программистом, хоть владельцем Интел. Но вот являться вы ни первым ни вторым при этом не будете.
Dekor238
05.11.2021 01:12+1Честно говоря, книга C#4 сильно устарела. Я не смог ее осилить всю...
А вот книга C# от Троелсона - лучше. Она как-то по иному написана. Более понятно с более понятными примерами... Лично мне она больше понравилась.
S-type
06.11.2021 02:13Есть большая разница между "научиться программировать на С#" уже умея программировать, и не умея программировать. Если человек уже умеет программировать, то IMHO, лучшая книга это "C# 9 Карманный справочник Албахари". В нём нет воды, каких либо историй из жизни, рецептов соусов и философских рассуждений. Весь синтаксис "от простого - к сложному", всё точно и только "по делу". По поводу "какую книгу читать тому, кто не умеет программировать, но хочет выучить C#" моё мнение "поступайте в ВУЗ". Нет, не говорю, что не возможно самостоятельно освоить программирование по книгам. Но, этот путь могут пройти очень не многие.
После прочтения книги вы не станете программистом. Что бы стать программистом, надо уметь программировать. И, как это не странно, для этого надо программировать, а не только книги читать.svpra Автор
06.11.2021 18:06Правильное замечание. У меня в статье тоже идёт упор на то, что постоянно нужно практиковаться и уметь применять все, что выучил. Без этого нет смысла. Опыт - это прежде всего умение решать какие-либо задачи, имхо
Mikluho
07.11.2021 10:34Вам бы, всё же, стоило сначала определиться с целью статьи и с целевой аудиторией. Потому как сейчас получилась каша из непонятных ингредиентов.
Если цель именно план изучения языка, то в статье не нужны SQL, ML и прочее. Далее, как тут уже подметили, важно определить, для кого статья. Для уже программистов, нужно рассказать, где и как изучить язык и платформу. Для совсем новичков в программировании добавить про структуры и алгоритмы.
И если уж вывели в заголовок "План", то уже предоставьте в тексте его, а не набор несвязанных тезисов сомнительного содержания.
И, в качестве итога, вы статье забыли самый важный навык для программиста - навык связно мыслить и связно излагать свои мысли в коде или тексте. Попробуйте, ради эксперимента, написать статью в виде программного кода.
Atreides07
"Я - SVPRA"
Из вежливости к читателям можно было бы написать, что SVPRA это ваше имя или ник. Гуглил думая это какая-то степень, звание, заболевание и т.д., пока нечаянно не увидел ваш ник :)
svpra Автор
Правильное замечание, исправил)))