Придумал интересный методологический приём, назвал его 1-2-4-8. Применяется ко всему! Под катом по этой схеме отвечаю на частые вопросы (с чего начать программировать, как устроиться джуном на работу, как стратегически развивать карьеру...). Главная идея, что в процессе изучения чего угодно с околонуля есть последовательность целей, и вот на самом первом шаге цель всего одна.
Как освоил самое-самое важное, переходишь к двум более специфическим целям, и т. д. постепенно расширяешься внутрь темы. При этом соблюдается и последовательность обучения, и главное, не разбрасываешься на кучу второстепенных деталей. Я сейчас неспешно переделываю под этот принцип матрицу компетенций разработчика.
Сама последовательность не обязательно степень двойки, мне больше симпатична более мягкая Фибоначчи, недаром её в аджайлах применяют как story points для оценки сложностей задачек (1,1, 2, 3, 5, 8, 13). Но в любом случае всегда начинаем с одной самой первой цели. Причём этот приём отлично масштабируется и на разные уровни обучения/понимания!
Вообще, корректнее говорить не о цели (ну есть у меня цель, да и фиг с ней), а о движении к цели, действии, практике, задаче, которую решаем. Но формулировать её удобнее как цель.
===
Например, какая самая первая задача, главная (и пока единственная) цель человека, решившего стать программистом? Моя методика обучения построена на том, что программист прежде всего должен научиться хорошо программировать, владеть хорошим универсальным навыком классического императивного программирования. Ну, как врач должен хорошо лечить прежде всего, а строитель — хорошо строить.
Вроде бы очевидно? Однако много курсов, весьма авторитетных, начинают человека сразу попутно грузить конкретными технологиями, веб-фреймворками (дескать, "чтобы не было скучно, давайте сразу начнём делать реальный проект"). А давайте, пусть врач сразу же на первых шагах обучения начнёт экспериментально проверять первые разрозненные крохи знаний на живых человечках.
И получается, что например товарищ что-то может собрать на джанге, однако при этом не в состоянии написать поиск подстроки в строке с помощью двух циклов. В голове получается жуткая каша-мешанина конфликтующих, непонятных, неработоспособных, несовместимых пока понятий.
===
А какая самая первая и единственная цель должна быть у человека, который научился кодить и хочет устроиться на первую работу джуном?
Эта цель тоже очевидна, Кэп))) Он должен активно искать работу! Джуном, стажёром, не важно.
(хотя в общем, далеко не все цели очевидны; довольно часто они контринтуитивны)
Но удивительно, какие только отговорки люди не придумывают, ко мне с вопросом "как поскорее на работу?" постоянно обращаются, но при этом ничего делать, связанного с непосредственным её поиском, не хотят. В лучшем случае — "ну так и быть, я заброшу куда-нибудь своё резюме, написанное левой коленкой, и буду ждать, когда меня гениального схантят". То есть на самом деле хотят наоборот подсознательно убежать подальше, от боли и страданий реального мира ))) от пожизненного режима с 9 до 18, занудных коллег и тупых начальников, в аутичное изучение очередного фреймворка — дескать, сперва знаний надо поднакопить. Или даже в абсолютную иллюзию "кодить на пляже у океана с ноутбуком". Ребята почти с нуля устраивались на работу, вообще только после первого базового курса! (я такой подход не одобряю, но это факт :).
Как правильно искать и находить работу программисту, у меня большой курс, но в любом случае, самое первое — надо просто начинать её искать, то есть 100% свободного времени тратить только на это. Как конкретно, какие более детальные важные шаги тут лучше предпринимать, чтобы 80% усилий не уходило впустую, в какие две цели декомпозируется эта первая цель и т.д., это уже отдельный разговор, но всё равно, ищите как умеете, но занимайтесь именно и только поиском.
Если уж совсем не знаете как искать — гугл ит :)
===
Можно прочитать про 23 способа как быстро накачать бицуху или про 11 гарантированных методов быстрого похудения, но даже если все они крутые, мозг будет только путаться, не сможет сделать выбор, потому что не хватает информации, а как выбирать-то из того, о чём пока ничего не знаешь? Ну и не получится тоже, если нету сильной мотивации — а её практически ни у кого нету, если над ней не работать целенаправленно.
Гораздо лучше, продуктивнее практиковаться в одном, но долго.
"Я не боюсь того, кто изучает 10000 различных ударов. Я боюсь того, кто изучает один удар 10000 раз... Я всегда знал и соблюдал простое правило: если можешь, то всегда имей дело с узкой специализацией". И это про узкую(!) специализацию говорил Брюс Ли, который придумал универсальный мета-стиль, свободный от стилей, вобравший в себя всё лучшее.
===
— Как мне определить, готов ли я искать работу программистом?
Напиши и отладь программу с графическим интерфейсом (окна, менюшки, кнопки, ...) и поддержкой реального времени, объёмом в тысячу строк (например, игру) — так чтобы это был полностью законченный проект, найди для него хотя бы одного пользователя, и получи хотя бы один лайк :)
— С чего начать изучение баз данных?
С основ реляционной алгебры
https://habr.com/ru/post/145381/
— А SQL?
С оператора SELECT.
— Как стать независимым, инди-разработчиком?
Запилить в разные маркетплейсы 30-50 проектов с нулевым выхлопом (в темпе 1-2 проекта в месяц), после чего понимание придёт само.
— С чего начинать погружение в ООП?
С книг Дейкстры и структурного программирования.
— Как вообще строить стратегическую карьеру, на большую перспективу? Регулярно прокачивать и развивать свой GitHub.
— Как лучше развиваться в программировании, в computer science?
Прежде всего читать книги, причем начиная с книг классиков 1960-х годов. И, заниматься по прокачиваемой теме лучше одновременно на самых разных онлайн-курсах и у самых разных преподавателей :) Везде вы найдёте что-то оригинальное и необычное, так ваше понимание сформируется более целостным. Единственное исключение — это начальное обучение с околнуля, когда наоборот лучше полностью сосредоточиться только на одном курсе.
— Самый-самый общий совет по решению задач в программировании — как?
Не усложнять! Исходите из того, что всегда можно сделать ещё проще, короче и линейнее (это и есть истинный рефакторинг). Сперва упрощаете алгоритм, потом реализацию. Экономьте не 5 строчек, а 50, как говорил Михаил Донской. Просто каждый последующий порядок простоты будет даваться десятикратными усилиями, поэтому важен разумный баланс. Но, в вашем конкретном случае с вероятностью 90%, вы наоборот скорее всего просто ненужно усложнили нормальную логику :)
===
Кстати, напишите в комментах вопросы, по каким темам программирования вы хотели бы узнать самое первое важное действие/цель, я всё обобщу и отвечу.