Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Приветствую, Хабрачитатели!
Я - SVPRA, и вот уже более двух лет я являюсь программистом на С#. Пришел к идее программировать на шарпе не сразу. Сначала пытался во фронтенд, но как-то не сложилось, потом решил создать игру, и выучил С#. И вот, я до сих пор на нем. Решаю очень многие и разные задачи.
Хотелось бы рассказать о моем алгоритме обучения языку, т.к. когда я был новичком, мне было очень сложно найти информацию о том, как правильно учится, где можно достать информацию и тому подобное. Поэтому вот: моя статья на эту тему. Ссылки тоже будут.
P.S. это статья для новичков, поэтому много фактов будут банальными для опытных разработчиков. Просьба не бить. Если что-то забыл - пишите в комментариях. Ну а теперь к статье :)
Итак, когда я начинал учится, я бродил по интернету в поиске нормального и вдохновляющего материала. Первое, что я нашел - уроки Гоши Дударя, но согласитесь, не самый лучший лучший вариант для начала обучения, так как темы у него объясняются крайне обобщенно, и весьма разбросано, пропуская ключевые моменты.
Второй вариант заключался в прохождении курса Sololearn. Sololearn оказался действительно намного полнее уроков Дударя, но как говорится - всё познается в сравнении.
И самый нормальный вариант - книга Герберта Шилдта по С#. Действительно, самое полное, что может быть. 1000 страниц, и после этого, ты сможешь выучить язык. Но я вам скажу, этого мало. Кстати, ссылка на скачивание всех книг из этой статьи, находится тут.
После прочтения этой книги вы можете считаться программистом. Но этого, как я уже говорил ранее, недостаточно. Почему? Потому что помимо основного языка, нужно знать алгоритмы, фреймворки, библиотеки, технологии, и иметь опыт, в конце концов. Но последнее приобретется, если вы будете оттачивать навыки, и решать задачи самостоятельно. А не тупо копировать код индусов со StackOverFlow. Ну а теперь к перечислению тех самых фреймворков и технологий.
Что кроме языка?
Первое, я бы советовал изучить устройство баз данных, и SQL на практике. Имеется очень много статей и книг по SQL, найти вы их сможете все на той же ссылке в начале.
Итак, SQL вы, предположим, изучили. Нужно как-то это все дело сортировать, верно? И тут нам помогут механизмы сортировки. Их тоже не помешало бы знать, начав, с самого просто - механизма сортировки пузырьком. Это как раз будет подходить для ваших маленьких массивов, и поможет понять, как оно работает, и как его применять. Далее можно будет перейти к более сложным сортировкам, и опять же практиковаться для закрепления знаний.
Дальше я бы советовал изучить технологию Git, потому что она точно будет полезна, при сохранении и откатки приложения, кода, структуры - чего угодно.
Но открою секрет, до этого, ваш код был не очень хорошим. Я понимаю, что много кто говорит, что идеального кода не существует, но все-таки к нему надо стремится, и в этом вам помогут следующие приемы:
Класс должен отвечать за одну задачу. Так код будет легче поддерживать, и не придется изменять всю архитектуру, ради добавления одной фичи, или исправления одного бага. Все будет решаться локально, в рамках одного класса.
Нужно использовать аксессоры для прописания логики доступа к типу.
Не должен выводится null
Проект должен быть потокобезопасным, да и в целом многопоточность- это отдельная тема, которую чтобы понять, недостаточно прочесть главу из книги Герберта Шилдта. Нужно постоянно изучать инструкции от Майкрософт или на Хабре.
Повышайте производительность программы, используйте garbage collector, и постоянно заботьтесь о том, как программа или система будет вести себя на маломощных компьютерах/серверах.
На самом деле, нюансов намного больше, чем описано в статье. Но для новичка, я думаю, будет полезно знать основные.
Изучайте устройство серверов, и пытайтесь создать свой
Так вы узнаете, как они устроены, и поймёте эту тему лучше. Опять же - нужно уметь находить информацию самостоятельно, поэтому если какая-то тема, или термин непонятны - идите и гуглите его. Если не понятно снова, углубитесь в эту тему, и практикуйтесь. И так, кстати, вы сможете узнать о других областях и технологиях, и следовательно найти что-то новое для себя, и изучить это.
Изучите нейросети
Но это уже если вы точно уверены в своих навыках и опыте. В создании нейросетей много математики, но не пугайтесь. Если разобраться во всем этом, то создание нейросетей даже будет доставлять вам удовольствие. Я, например, начал изучать нейросети с курсов Анатолия Карпова, даже несмотря на то, что примеры были написаны на Pandas для Пайтона. К тому же, есть мощнейший инструмент для машинного обучения, только на шарпе - ML.Net. И в целом, помимо нейросетей, полезно изучить физику в программировании и технологиях, чтобы понимать процесс программирования более детально.
Чуть не забыл. Изучайте алгоритмы, структуры данных и паттерны проектирования, это точно будет полезным. Ведь для конкретной задачи лучше будет не придумывать кривой велосипед, а взять уже готовое решение в виде паттерна. Ссылки на книги по алгоритмам и паттернам по первой ссылке.
А как же игры?
Для игр не нужно много навыков программирования, но если вы хотите их создавать - создавайте. Занимайтесь в тех областях, которые вам интересны, и мотивация и удовольствие от программирования никогда не покинут вас. Я например, признаюсь честно, учил язык только ради игр. Но потом мне понадобилось организовать работу своего сервера, и мне удалось это сделать на шарпе. Далее я понял, что все мои цели, вплоть до машинного обучения, можно делать на нем, и не уходить на другие языки программирования. Правда, сейчас я учу С++, но вы не должны воспринимать мои слова как закон, и можете начать с любого языка, хоть с Пайтона.
Помните, всё зависит от вас, и программирование - это очень интересно. Так что изучайте, читайте и стремитесь.
Ваш SVPRA.