OMarchenko
@OMarchenko
Random Expansion

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

Вводные данные: 40 лет, два высших образования - техническое (МАИ, давно) и гуманитарное (Лит).
Задача: смена сферы деятельности на программирование. Предполагаемая область - прикладное ПО. Предполагаемый основной язык - Python.
Планируется без отрыва от текущей работы освоить материал, достаточный для поступления на уровень Junior (да, "молодая была немолода"©) в российской компании, за три года (если получится - меньше). В день смогу выделять 3–4 часа на самостоятельное обучение. Учиться буду по книгам, видеокурсам, online-курсам, решая задачи, разрабатывая собственные мини-проекты etc.
Полагаю, что мне следует освоить следующие обширные темы: I. Алгоритмы (Вирт Н. - Алгоритмы и структуры данных; Кормен Т., Лейзерсон Ч., Ривест Р. - Алгоритмы. Построение и анализ; Седжвик Р. - Фундаментальные алгоритмы на C++ и т.д.); II. Общие основы программирования (структурного и ОО) (Абельсон Х., Сассман Дж.Дж. - Структура и интерпретация компьютерных программ; Вайсфельд М. - Объектно-ориентированное мышление; Макконнелл С. - Идеальный код; Мартин Р. - Чистый код. Создание, анализ и рефакторинг; Кнут Д. - Искусство программирования (не хотелось бы) и т.п.); III. Языки программирования (Python: Лутц М. - Изучаем Python; Лутц М. - Программирование на Python и др.); IV. Базы данных (PostgreSQL и MySQL: Форта, Хернандес, Молинаро, Грубер); V. Основы веб-разработки (Мейер, Муссиано и др., что-нибудь по Django).
Собственно, вопрос: как бы вы разделили время (в месяцах) между этими пятью темами, если изучать их последовательно? Или все-таки лучше продвигать их параллельно?
P.S. Такая длинная вводная часть написана в расчете на то, что кто-то, может быть, столкнется с похожей проблемой и, возможно, ему будет интересно, как ее пытались решать до него.
Спасибо.
  • Вопрос задан
  • 25249 просмотров
Пригласить эксперта
Ответы на вопрос 12
@danSamara
Мой ответ будет несколько груб и не типичен, однако: "Станьте говнокодером!"
Я не шучу - берите реальные задачи и решайте их как можете - по наитию, по кривым советам из гугла и stackoverflow, но главное - делайте законченные решения, получайте результат который работает.
Любую задачу сначала решайте сами - нужно сделать сортировку - пишите алгоритм и радуйтесь, что он работает. А уже потом - читайте как надо сделать, и только после этого (если почувствуете потребность!) - читайте теорию.
Все книги что вы написали безусловно волшебны и необходимы для отличного программиста, однако без практики они - пыль, которая развеется спустя неделю после прочтения. Поверьте мне, я их все читал :)
Кстати Кнута я бы вычеркнул без раздумий - для его чтения и понимания нужен очень хороший мат-базис и опыт в программировании. Если случиться, что вы будете писать оптимизированные библиотеки для обработки данных на С - тогда и начинайте его читать, очень пригодится, отвечаю )
Пример обучения:
1. Ставим задачу. Пример - написать приложение, которое выводит топ-10 вопросов на Тостере.
2. Разбиваем задачу на проблемы которые надо решить. Пример - развернуть рабочее окружение, понять как сделать "Hi world", как работать с сетью, как парсить HTML
3. Решаем проблемы. В лоб. Задание - на скорость, всё должно быть решено в кратчайшие скроки. Для каждой проблемы используем любое решение которое попалось под руку. Буквально - первое, это важно! То есть реально ковнокодим, забивая на всё - на красоту кода, на оформление, на скорость, лишь бы работало! Девиз этого этапа - херак, херак и в продакшен! Результат этапа - рабочее приложение.
4. Делаем поверхностный анализ. Задача решена? Есть ли косяки которые уже не нравятся? Как их можно решить, исходя из минимального опыта? Локализуем проблемные участки исходя из собственных взглядов. Результат этапа - опыт самостоятельного анализа кода.
5. Делаем глубокий анализ. Пытаемся для каждой задачи подобрать лучшее решение из тех что есть. Читаем теорию о том, как надо делать на самом деле. Изучаем и внедряем паттерны, пытаемся сделать код, который можно переносить в другой проект. Важно не менять условия задачи, вроде "а можно же ещё вывести ответы на вопросы". Не можно, задача должна оставаться прежней. Результат этапа - хороший код и выявленные пробелы в знаниях.
6. Отдыхаем, читая теорию в рамках решённых задача и около них. Результат - теория, подкреплённая практикой.
7. GOTO 1.
Ответ написан
Сначала найди человека, который ЗАХОЧЕТ тебя учить. Поставит реальные задачи и выстроит твое обучение в систему. Один ты не пройдешь этот путь.
Реальная разработка далека от тем, которые ты поднял. Эти темы хороший фундамент, для разработчика. Но освоить их дело не быстрое. И без ментора, 90% вероятность уйти в излишее углубление - а значит, потерять время и стать болтуном теоретиком, который все-равно не может писать код.
Лишнего времени у тебя нет вообще. Программистами 80% работают молодые, 20-28 летние ребята и возится с тобой они просто не захотят.
Поэтому тебе надо бить только в цель.
Так, что рвись за реальным опытом. За реальным пониманием - как это работает. Большая теория computer science пока не твой друг. Кстати как у тебя с английским? Скорее всего почти никак. Поэтому ближайшие год - полтора, ты будешь осваивать его, для беглого чтения. 90% полезной для разработчика информации, на английском, инет и книги.
Попробуй сейчас поискать фирму которая тебя возмет, когда ты станешь крут - и это будет очень сложно. Возраст и отсутствие опыта это весомый фактор.
Скорее всего, тебе надо найти узкую, востребованную специализацию и долбить ее все это время, не теорию!, а навыки. Понять какие есть несложные популярные задачи на фриланс бирже, и научиться с помощью ментора делать только их. Начать этим зарабатывать. А потом будет понятно, что дальше. Насколько ты вообще это способен делать.
Береги здоровье. Поддерживай и развивай его. Программирование очень затратная деятельность, особенно когда тебе за 36.
Мне сейчас 38, я сам несколько лет был любитель теории и академического самообразования для разработчика. Недавно пришло осознание, что это тупик. Программирование сейчас - это куча реальных процессов разработки, на многих уровнях, и темах. Им не обучишься самостоятельно. Недавно нашел удаленно хороших знакомых, которые ХОТЯТ помочь мне научиться. Стал видеть их глазами, и все наконец задвигалось. Мне сейчас срочно нужны не перечисленные тобой книги (хотя я их действительно частично изучил), а понимание web-протоколов, unix, принципов тестирования, ООП, кучи используемых библиотек, разговорного английского, частично frontend технологии и тп.
Так, что братан держись! И да, сопутствует нам удача.
Кстати, я практикую тайчи. Это поддержка на всех уровнях. Без этого я не сунулся бы в подобные авантюры.

--
Update 0:

Решил пойти коротким путем (в частности, после твоего вопроса) и выделить деньги на курсы Ruby On Rails. Записался вот сюда Ссылка удалена модератором.

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

Для курса требуется уже некоторый уровень знаний всего стека разработки (от Unix - до самого фреймворка RoR).

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

Важным, оказалось, что здесь есть сообщество единомышленников; тех кто хочет изучить Ruby On Rails и устроиться на работу. Это позволяет лучше понять себя - видя работу других. А также постановка задач куратором позволяет лучше фокусировать свои усилия при изучениии, что сложно самообучаясь.

Курсы будут идти три месяца.
Ответ написан
Jeiwan
@Jeiwan
Никто вам точно не ответит. Никто не знает ваших обстоятельств, способностей, желания учиться. Никто не знает насколько глубоко вы будете изучать эти темы и насколько тщательно прорабатывать их. Дать точные сроки вам смогут, только если вы будете следовать какой-то отработанной учебной программе. И то даже после таких программ люди выходят с разным уровнем знаний и умений. Все зависит от вас. Да и не нужно знать все эти темы для того, чтобы начать работать.
Главная ваша проблема (и проблема других таких же людей, которые решили научиться программировать) заключается в том, что вы почему-то считаете, что сможете обучиться программированию по книгам. Прочитал книжки и стал программистом! Это обманчивый путь, так как программирование — это чистая практика. Теория тут нужна только тогда, когда нужно решить какую-то практическую трудность. Чтобы читать книжки по алгоритмам, ООП и базам данных, нужен уже какой-то опыт, иначе всё, что там написано, пройдет мимо и забудется.
Еще часто бывает, что задачи, с которыми сталкиваешься, не описаны в книжках, которые ты прочитал или хотел бы прочитать. Довольно часто решение задачи находится в интернете, а не в книгах. Это я к тому, что нужно начинать с практики и прорабатывать теорию под конкретные задачи. Вот вы написали что-то, вот застряли в каком-то моменте с БД, не знаете, как правильно сделать. Ищете в интернете или в книге, как решается эта проблема и решаете её. В итоге получаете и знание, и опыт, который это знание закрепляет.
Если вы знаете, куда хотите пойти работать, узнайте, какие там задачи решают и цельтесь сразу туда: составьте себе список таких задач и попытайтесь решить их самостоятельно. И заодно сузите теоретический минимум. Умение решать конкретные задачи намного важнее горы теоретических знаний.
Ответ написан
@suslik2015
Современное прикладное и веб программирование низового уровня - типичное рутинное ремесло. И как в любом ремесле самое ценное -опыт. В своей работе программист использует большое количество инструментов - ide, редакторы, дебагеры, сборщики, svn и т.д. Программисту нужны навыки чтения кода, юнит тестирования, использования актуальных фреймворков и api, знания протоколов, форматов хранения и передачи данных, конвенций оформления и документирования кода.
Получить опыт и развить навыки можно только одним путем - написание кода. Идеально участие в опенсорс проектах или что-то свое. Сначала будет говнокод - это факт. Clean code, по терминологии упоминаемого вами Мартина Р. , приходит с опытом работы в проектах, в постоянном сравнении и оптимизации того или иного кода, тех или иных практик.
Ответ написан
Комментировать
God-emperor
@God-emperor
create a golden path
1) Алгоритмы + база языка
Вы изучаете/пишите реализацию алгоритмов, тем самым осваивая базовый синтаксис языка.
2) Определяете 2-3 более обширные задачки на бизнес-логику, решаете их с помощью базовых средств вашего основного языка (Учим язык на продвинутом уровне)
3) Решаем данные задачи с помощью парочки фреймворков, сравниваем.
4) Дальше в любом порядке (параллельно или последовательно тоже не важно) изучаете оставшийся материал, который вас интересует на ваших же примерах. Т.е. доделываете, переделываете и т.д.

Так бы сделал я. Читать что-то абсолютно абстрактно - бессмысленно. Поверьте, я пробовал. Так же пробовал в омут с головой в практику, как тут предлагают - тоже бессмысленно. Мне помог именно такой стиль изучения.
Ответ написан
Комментировать
Stroy71
@Stroy71
Век живи-век учись.
Из опыта:
1. Не пытайтесь изучать маловостребованные, но перспективные языки(Python, Perl и т.д.). Идеальный выбор- PHP или JavaScript. В первом случае, количество потенциальных работодателей падает в разы. Количество же претендентов("молодых-перспективных"), не так сильно, как хотелось бы.
2. Не "растекайтесь мыслию по древу". (Решите, какие навыки оттачивать в первую очередь: практические-по американской системе, или все сразу-по советской системе. далее об амер. сис-ме)Т.е. сосредоточьтесь на решении практических задач. После получения определенного уровня можно будет перейти к практике задач требующих знания теории алгоритмов и т.д и т.п.
ИМХО, лично я изучал(после знакомства с Паскалем в ВУЗе) в таком порядке: (нумерация исходя из Вашего списка):3(или его аналога)-до полного освоения. 4-по мере потребности 3.
4 и 2, ИМХО, излишни, и требуют особого изучения для "особо-продвнутых"
3. V желательно изучать на продвинутых ступенях, изучив 3 и, более-менее 4.
Время изучения(по порядку изучения,ИМХО):
1.3-20%(примерно)
2.4- 5-10%
3.5- 5-10%
4. 1- 60%
5..2(если оч. понадобится)-около 10%.
P. S. Из всех книг, указанных в разделе 2, особо тщательно рекомендую проштудировать Д.Кнута.
Ответ написан
SowingSadness
@SowingSadness
web-разработчик
Предполагаемая область - прикладное ПО. Предполагаемый основной язык - Python.

В основном для прикладного ПО используют C# и Java. Для поддержки legacy - C++
Советую вам пересмотреть язык и переключится на C#.
Освоить основные конструкции языка.
Понять что такое типы данных, какие они бывают и как с ними работать.
Разобраться с тем как строятся оконные приложения.
Разобраться как строить приложение, которое использует БД (MVC, MVVM и прочее)
Алгоритмы вам как прикладнику почти не понадобятся.
Ответ написан
un1t
@un1t
Алгоритмы это хорошо для общего развития. Но на данном этапе я бы рекомендовал более практический подход.
Т.е. изучение инструментов и решение прикладных задач. Я тут на подобный вопрос уже давал ответ
План обучения Python и дальнейшие перспективы. Кто подскажет?
Ответ написан
Комментировать
OMarchenko
@OMarchenko Автор вопроса
Random Expansion
Господа, пожалуйста, представьте на минуту, что перед вами абстрактная задача - например, о воде, втекающей и вытекающей из бассейна. Зачем туда втекает вода, куда она потом утекает, какой она температуры - это, конечно, интересно. Но давайте вместе с этими рассуждениями хотя бы пытаться ответить на четко поставленный в задаче вопрос.
Интересует соотношение времени, которое вы при заявленных условиях считаете оптимальным для изучения пяти тем. Можно в процентах.
Ответ написан
Комментировать
@woodapiary
Рекомендую: master.cmc.msu.ru/?q=ru/node/16.
В свое время когда там учился, были студенты, которым далеко за 40!
Ответ написан
Комментировать
@deltron
Теория хорошо, но практика - лучше. Можно знать много алгортимов, но не уметь писать ни строчки кода. Я бы начал с одной книги по выбранному языку и пытался писать реальные программы стараясь укладываться в конкретные сроки. В процессе написания возникали бы конкретные вопросы, которые пришлось бы решать. Со времнем накапливаются паттерны, как поступать в той или иной ситуации - это и есть практика. А вот потом можно почитать всякие алгортмы и т.д.
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Я бы сначала освоил минимально язык, чтобы на нем можно было реализовывать алгоритмы. Или вообще параллельно изучал: алгоритм и тут же реализация на выбранном языке. БД и Web - напоследок, может потребуется что-то совсем другое или не будет душа лежать...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы