Как правильно составить план самообучения?

Всем привет!

Сейчас заканчиваю первый курс по специальности "Компьютерные Науки". За год обучения понял, что ничему нормальному, в плане программирования, меня не научат, и, что нужно начинать учиться самому (до этого я и так занимался самообразованием, но в каких-то конкретных вопросах, а не в целом).

Цель - параллельно с учёбой в ВУЗе самостоятельно получить достаточный уровень теоретических знаний и практических навыков для того, чтобы устроиться хоть на какую-то адекватную работу по специальности и получить возможность заработать на оплату обучения на магистра где-нибудь за границей, попутно получая опыт и стаж работы.

На данный момент столкнулся с двумя проблемами:

  1. Выбрать направление, которому буду уделять наибольшее количество времени. Очень много языков и мнений касательно того, что стоить выбрать. Чего только стоят споры касательно Java vs C#.
  2. Что сейчас актуально и будет востребовано за рубежом? В строну WEB разработки я не смотрю, как я понял, там сейчас огромнейшая конкуренция, которая постоянно увеличивается желающими быстрого и простого заработка (поправьте меня, если я не прав).


В ходе учёбы познакомился с С/С++/С#, больше всего понравился С#. В целом, заинтересован в разработке приложений под Windows/Android/IOS и GameDev'e, но я думаю, последнее не самый лучший выбор для старта.

Как составить план обучения?

На каждом сайте разные рекомендации того, что нужно изучать, в каком порядке, разная рекомендованная литература и т.д. Везде разные требования к junior-разработчикам. Одним словом, очень быстро теряешься во всем этом.

  1. Как составить эффективный план обучения?
  2. Как контролировать свой прогресс?
  3. Как правильно выбрать литературу?
  4. Стоит ли, как можно быстрее, пытаться устроиться на работу "за бесплатно" (ради опыта) или лучше уделить время на самообразование и создание собственных проектов для портфолио?



Хотелось бы получить советы от опытных разработчиков. Спасибо за внимание.
  • Вопрос задан
  • 3920 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега IT-образование
software engineer
C# неплохой выбор. Углубляйтесь в него. Освойте типы данных, базовые библиотеки.

Напишите несколько простых приложений - стандартные простенькие калькуляторы чего-либо, с окошками, с менюшками. Какие-нить крестики нолики.

Подучите основы tcp, напишите несколько простых сервер-клиентских приложений - простой чатик, простой мессенджер.

Углубляйтесь в ООП и паттерны.

Парралельно почитывайте вакансии и требования к ним - там все что надо для работы указывают.
Ответ написан
Комментировать
@php65535
Для начала определись, чего хочешь на самом деле. Если твердо уверен в желании связать всю оставшуюся жизнь с программированием, советую пока сконцентрироваться на теории. Самостоятельно углубляйся в темы, которые дают в ВУЗе, подбирай дополнительную литературу. В качестве ориентира можешь взять программу одного из ведущих американских университетов, в интернете есть множество вариантов со ссылками на все необходимые материалы (пример). Всем этим стоит заниматься именно сейчас, потому что потом может банально не хватить времени и мотивации.

Если же пока хочется просто заработать денег, стоит уделить больше внимания прикладным знаниям и практике с прицелом на то, чтобы как можно скорее устроиться на работу. Для начала следует определиться с нишей. Она должна соответствовать как минимум двум критериям:
  • Достаточная широта. Чем больше в нише компаний, тем статистически больше твои шансы найти работу.
  • Минимальное время, за которое можно получить навыки, необходимые для работы в нише. От начала обучения до трудоустройства тебя должно отделять 12-18 месяцев. Чем быстрее сможешь устроиться на работу и начать зарабатывать, тем лучше. Это даст хороший толчок как мотивации, там и твоему профессиональному росту.


Я знаю только 2 ниши, удовлетворяющие этим критериям (заметь, это не значит, что других нет):
  • Мобильная разработка (Android, iOS).
  • Веб (фронтенд или бекенд). Ты правильно подметил, что в вебе большая конкуренция. Но конкурируют между собой в основном низкоквалифицированные работники. Минимально адекватных людей с базовыми знаниями отрывают с руками. Если потратишь год-полтора на правильное самообразование, то без проблем сможешь получить свои $1.5-2k (в Москве/на удаленке) на старте.


Мобильную разработку и веб совершенно точно можно освоить за полтора года, если голова соображает хоть сколько-то. Подтверждений тому множество, есть они и на Тостере (пример).

При выборе направления игнорируй безосновательные мнения задротов с их "настоящий мужик программист должен" и "X - плохо, пнятненько?". Все эти выпады - просто сезонное обострение синдрома вахтера.

Когда определился с нишей, выбирай самый популярный в этой нише язык. Критерий популярности - количество вакансий на этом языке. Для разработки под Android это будут Java и Kotlin, для iOS - Objective C и Swift, для веб бекенда - PHP, для веб фронтенда - JS и TypeScript. Как уже писали, первый язык программирования - не приговор. Если ты хорошо освоишь хотя бы один, то сможешь без проблем перейти на другой (в той же парадигме) за 3-6 месяцев.

Один из вариантов плана обучения такой:
  1. Заходишь на свой любимый сайт с вакансиями
  2. Ищешь 10 вакансий "middle %language% developer" (именно middle, это важно)
  3. Выписываешь все, что встречается хотя бы в 8 из 10 вакансий
  4. Гуглишь одну из тем по запросу "%topic% interview questions". Отмечаешь вопросы, на которые не знаешь ответа. Поначалу многое будет непонятно - это нормально, по мере изучения картина станет ясней.
  5. Гуглишь тему по запросу "%topic% introduction"
  6. Если попадаются книги, берешь первую попавшуюся и читаешь. Если книг нет, читаешь первые 5 статей. Как-то особенно заморачиваться с выбором книг на данном этапе вряд ли стоит: вводная литература вся примерно одинакова, и у тебя еще нет нужных знаний, чтобы отделить зерна от плевел. Если очень хочется, можешь попросить рекомендации на форумах/в чатах, где сидят программисты, работающие в выбранной тобой нише.
  7. Возвращаешься к пункту 4. Если еще остались какие-то непонятные вопросы, гуглишь их индивидуально.
  8. Повторяешь пункты 4-7 для каждой темы


Если изучаешь какой-то практический навык (например, работу с системой контроля версий или язык программирования), обязательно подкрепляй теорию решением небольших, но реальных задач. Один из хороших вариантов - сделать какой-то свой проект и экспериментировать на нем. Если совсем нет идей для проектов, можно выбрать что-то из https://eax.me/programming-language-learning/ .

Хорошо бы изучать темы в определенном порядке, но он будет сильно зависеть от направления, поэтому конкретных рекомендаций дать не могу. В любом случае, я бы не стал сильно фокусироваться на отборе самого эффективного плана. Эффективность наверняка будет разниться для разных людей, и лучше попробовать хоть что-то, чем пытаться найти идеал. Тем более, что темы во многих вводных планах пересекаются, и, если не пойдет один, всегда можно попробовать другой.

Контролировать прогресс в теоретических вопросах самостоятельно трудно, желательно иметь внешнюю обратную связь. Один из вариантов ее получения - собеседования. Если на следующем собеседовании смог ответить на вопросы, на которых завалился на предыдущем, значит, прогресс есть)

Практические задачи и проекты можно разбивать на небольшие завершенные шаги. Например, если делаешь мобильное приложение, которое выводит погоду в выбранном пользователем городе. Можно выделить следующие подзадачи:
  1. Создать проект в IDE
  2. Добавить главный экран
  3. Добавить на главный экран контрол выбора города
  4. ...

Делаешь каждый день несколько таких задач, это и будет метрикой прогресса. Опять же, будет здорово, если кто-то со стороны сможет дать оценку твоей работе. Как вариант, можешь попросить знакомых программистов или использовать специальные сервисы, чтобы заказать платное код-ревью.

Как только сможешь без подглядывания в Гугл отвечать на 80% вопросов с собеседований по всем темам своего направления, можешь начинать рассылать свое резюме. Лучше устроиться на работу как можно быстрее, но ни в коем случае не "за бесплатно". В компаниях, где платят мало, как правило, плохая инженерная культура, и никакого полезного опыта там все равно не получишь, а только потеряешь время.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise Куратор тега Карьера в IT
Solution Architect, AWS Certified, Serverless
1. Гуглить по тостеру никого не учили видимо, опять
2. Выбирай что хочешь - перспективны не технологии, а люди с головой, не задающие таких вопросов
3. Люди, идущие в IT за деньгами не зарабатывают
4. Нет универсальных или проверенных тропинок - пробуй, набивай шишки и учись на них. Будут конкретные затычки в процессе - задавай тут, не стесняйся
Ответ написан
@CasperIsNotAGoodGhost
Не тратьте время на составление плана. Если в ходе обучения, каких то знаний будет не хватать, подтянете при необходимости. Вообщем не парьтесь и делайте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы