Привет всем читающим! Здесь я хочу поведать вам о своей истории как я искал себя в IT — чем хочу заниматься, в каком направлении развиваться и все подобные вопросы.
Уже глядя на список литературы, который я прочитал за это время, можно понять, что я попробовал несколько, а может даже и много направлений (список есть в конце статьи).
Началось все в 2018 году, когда я поступал в универ. Я, думаю как и многие, начал с разработки сайтов. Я учился верстать странички, писать стили и какую-то логику на php. Этим я занимался все лето перед поступлением и это был мой первый опыт работы с каким-то кодом.
С началом первого курса интерес к сайтам начал пропадать, и я начал интересоваться C++ и программированием. Я начал учить синтаксис, возможности языка, какие-то базовые вещи по типу массивов, указателей, работы с файлами и прочим. Придумывал себе задачи и решал их. Одной из первых была подсчет и ранжирование слов в тексте. После того, как я хоть в какой-то степени понял что такое программирование, я полез в ООП. Но на C#.
На втором семестре универа меня завлекло машинное обучение. Но тогда я решил попробовать решить задачку так, как я это видел, вместо того, чтобы почитать книжки или посмотреть лекции. В общем, я хотел научить компьютер играть в крестики-нолики. Простая задача, но не для того, у кого 0 знаний и понимания как устроен ИИ. Мое решение выглядело как простой алгоритм с использованием файлов и статистики. После я все же прочитал книгу [12] и посмотрел некоторые видео, пообщался с преподом на эту тему. С преподавателем я начал дальше работу в сторону машинного обучения, он давал мне какие-то задачи на потренироваться, я строил глубокие нейросети, сверточные, читал про рекуррентные нейросети и т.д, даже написал НИР и курсовую на эти темы.
Параллельно с этим, во время локдауна мне было интересно как устроены библиотеки Keras и TensorFlow внутри (библиотеки для построения нейронных сетей). У меня было полно времени, поэтому я взялся гуглить. Прочитал книжку [11] о программировании на GPU. Решил написать с нуля простенькую нейронку с вычислениями на графических процессорах. Было сложно, но я это сделал, не знаю зачем, но сделал.

Еще в универе нам предподавали ассемблер, мне даже немного понравилось, темой курсача я выбрал «Вывод изображения формата TIFF на экран в OS Linux», с чем успешно справился. Но быстро понял, что у ассемблера будущего нет.
После этих двух случаев, я понял, что занимался чем-то, что не принесло мне реальной пользы. Ну да, я заимел представление как это делается, но четкого смысла в этом не было. Мне было интересно машинное обучение и нейросети, и можно было бы не тратить время на написание готовых библиотек с нуля для интереса.
Летом я подумал, что помимо умения строить и понимать работу нейронных сетей, нужно еще хотя бы иметь представления о разраобтке информационных систем. Я опять придумал себе задачу — электронная библиотека. Я взял в руки C# и его WPF для написания десктопного приложения, и EF Core для работы с бд. Эта работа потом пошла на написание курсача.
Я решил углубиться в C# и прочитал книгу [2]. В целом, она дала понимание как устроен C# и что происходит при вызове определенных функций или создания строки. Я подумал, что преуспел над остальными в своем универе и познал эту сферу и осталось только убедиться, что я красиво пишу код, поэтому я прочитал еще 2 книги [3,4].

Спустя еще год, был уже 4 курс, нам преподавали курс по микроконтроллерам. Не сказать, что мне сильно понравилось, но было интересно. Пары были на предприятии, предподавали молодые парни, которые работали там несколько лет. К концу семестра меня позвали к ним работать, на что я согласился, т.к. подумал, что неплохо было бы получить какой-то опыт решения реальных задач и может быть работы в команде. Впоследствии я понял, что это не мое. Писать на чистом C и работать со схемами это не мое, хотя и неплохо получалось. Я продолжал работать, но также стал интересоваться какой бы еще язык программирования можно рассмотреть, потому что писать на C и C# было уже не так интересно. И по всем моим требованиям идеально подошел Go — многопоточность, работа на производительность, простота.

Я написал пару пет проектов простых, чтобы понять синтаксис. Также я подумал, что было бы неплохо закрыть пробел с алгоритмами и структурами данных. Да-да, это базовые вещи, но нам в универе их не пропадавали (за исключением алгоритма сортировки пузырьком и стека с очередью), а я все это время периодически решал задачи на codewars, думая, что это алгоритмы… В общем, я прочитал [7] и осмелился попробовать пройти на стажировку в Яндекс. Меня позвали на интервью, где я решал алгоритмечкие задачки, после второго интервью мне отказали. Посоветовали порешать задачи на leetcode, что я потом 2 месяца бесперерывно и делал.

Спустя эти 2 месяца, я закончил универ, все еще работал на предприятии, но перестал писать под микроконтроллеры. Мне предложили писать код на C++ и решать задачки, в которых требовалось быстрое выполнение. Спустя еще 2 месяца я второй раз попробовал пройти на стажировку в Яндекс. Тут уже была одна АА секция, после которой меня позвали познакомиться с командами и меня взяли.
Вот так и начался мой путь в этот прекрасный мир!
TL; DR
Если бы я начинал этот путь с нуля, я бы порекомендовал себе:
-
Если тебе что-то интересно — занимайся этим. Будет куча вещей, которые будут появляться на твоем пути, это тоже может быть интересно, но иногда это не стоит твоего времени.
-
Проходи стажировки в крупных компаниях. Я всегда думал, что попасть с Яндекс это супер сложно, и я этого пока не достоин. Однако, стоит разок попробовать, пофиксить проблемы и дальше ты уже сможешь попасть в любую крупную компанию (ну или почти). На время универа можно просто проходить стажировки летом, либо устроиться на 0.5 ставки. Стажировки более эффективны, чем твой простой интерес решать свои задачки.
-
Постоянно пиши код и решай алгоритмы (они помогут в собесах).
Что я прочитал за этот период:
-
PHP 7. Дмитрий Котеров, Игорь Симдянов.
-
CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#. Джеффри Рихтер.
-
Совершенный код. Стив Макконнелл.
-
Чистый код. Создание, анализ, рефакторинг. Роберт Мартин
-
Чистая архитектура. Искусство разработки программного обеспечения. Роберт Мартин
-
Хакинг. Искусство эксплойта. Джон Эриксон
-
Алгоритмы. Теория и практическое применение. Род Стивенс
-
Грокаем алгоритмы. Адитья Бхаргана
-
Компьютерные сети. Виктор Олифер, Наталья Олифер
-
Паттерны объектно-ориентированного проектирования. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
-
Cuda by example. An introduction to General-Purpose GPU Programming. Jason Sanders, Edward Kandrot
-
Глубокое обучение. Погружение в мир нейронных сетей. С. Николенко, А. Кадурин, Е. Архангельская
ссылка на оригинал статьи https://habr.com/ru/articles/815445/
Добавить комментарий