Monday 30 November 2015

подскажите как стать програмистом?

отвечу и я.
1. программирование - код писать надо каждый день, хоть в метро на бумажке, хоть на лекциях на задней парте, хоть на уроках. вы должны научиться думать алгоритмами. ну и понятное дело вы должны понимать все основные алгоритмические блоки - циклы, ветвления и т.д. а также понимать что такое данные, и иметь базовое Компьютерное образование (про битики-байтеги, файловую структуру, память и процессор, особенности выполнения программ в конктерной ОС, что такое ОС, что такое исполняемый файл и т.д.)
2. книги, мануалы, тренинги, видеоуроки и т.д. - любой подходящий для вас способ получения информации о новом ЯП на котором вы собрались писать
3. найти более опытного друга программиста, желательно незашоренного (если таких вообще можно найти) на какой то технологии, и желательно чтобы он хорошо знал или хотябы понимал ЯП на котором вы собрались писать - он будет отвечать на все вопросы. не донимайте его каждым вопросом, собирайте их и вываливайте раз в несколько дней, ещё лучше за пивом :)
4. далее изучаете ЯП, как по мне лучший выбор новичка на текущий момент - это или javascript или python, хотя конечно можно начать с чего то более "тяжелого" - Java, C#, C++, но можно конечно пойти по крутой дорожке - начать c Haskell или Ruby, Clojure, OCaml - там у вас не будет конкурентов в будущем, если Вы таки станете программистом на этом ЯП
5. изучив основы языка, начинаете читать и писать основные data structures & algorithms - желательно все таки взять книгу по этим структурам данным и алгоритмам, потому что структуры данных это отдельная статься и информация из местами глупого интернета может привести к печальным последствиям, а алгоритмы опять же - их множество и без книги будет сложно остановиться не имея четко обозначенной границы.
6. в процессе всего этого, пока вы пишете очередные свои "говняшки" (а пишете - то есть программируете Вы постоянно по 1-2 часа в день), вы думаете над тем, как бы программирование могло изменить Вашу жизнь или жизнь близких Вам людей - и когда найдете эту идею, начинаете её оформлять в виде ТЗ (поверьте, без ТЗ вам будет очень плохо).
7. все это время пока Вы пишете - вы дополнительно изучаете одну из систем контроля версий - git, subversion, mercurial - что предпочтёте - хоть старенький SVN - тоже бывает в этом мире полезно ещё на legacy-проектах, и активно её используете для своих извращений с кодом (git сейчас де-факто стандарт)
8. когда Вы закончите структуры данных и алгоритмы, вы читаете design patterns от Gang of 4 - это такая дань моде и вообще можно блеснуть на собеседованиях
9. потом вы читаете МакКонелла "Совершенный код" - это чтобы иметь вообще представление о том, чем вам прийдется заниматься, к этому моменту Вы будете уже иметь достаточно знаний чтобы понять о чем вообще "сыр-бор" в этой книге, и не засыпать на откровенно скучных моментах, хотя можно вообще начать с этой книги - но я не уверен что Вы много почерпнетё из неё, но правда эта книга дает общее представление о том, что такое программирование как профессия
10. можно прочитать Фаулера Рефакторинг
11. и да я давно не вставлял напоминание, что как только вы закончили написание своими ручками всех велосипедов из data structures & algorithms, вы про них напрочь забыли и взяли готовые из стандартных библиотек вашего языка или известных фреймворков, и уже с помощью них начали писать черновик черновика вашего проекта по улучшению жизни.
12. как только Вы почувствуете что Вам нужна помощь над проектом - идете искать работу - она для этого и нужна, чтобы обмениваться опытом. так и можете сказать на собеседовании.
13. английский, вы должны его знать. читать вы должны совершенно, особенно программерскую тематику, писать понятно и без ошибок. говорить начнете после курсов, на которые вы пойдете после испытательного срока в компании.
14. тестирование - Вы должны прочитать о методиках тестирования в современном software development-e в целом и общем, так же Вы должны знать что такое unittests, и что такое функциональные тесты. unittests на ЯП который Вы выучили - вы должны уметь писать для своего кода. автоматизации функциональных, перфоманс, интеграционных и прочих тестов Вас научат на Вашем проекте - учить какой либо фреймворк до проекта я бы не стал, потому что вероятно зря потратите время.
15. code style - разработайте его для себя, настройте в IDE и приучитесь писать в одном стиле, желательно дать его показать паре другой программистов на этом языке (на форумах тематических и т.д. легко можно пообсуждать тот или иной coding style) - и приучить себя писать именно так
после того что я указал выше - обычно если Вы своему другу будете хорошо выставлять пива, и у Вас будет отличная идея (тут не надо ограничивать свое воображение и думать "а можно ли?" - ответ "можно!") - или же Вы наняли себе ментора, или попали на хорошие курсы к толковому учителю , любой из которых будет Вас пинать - то это займет у Вас до 6 месяцев и около года-двух при собственном некотроллируемом графике по выходным. но если Вы строго следовали всем рекомендациям, - вы можете спокойно идти в любую ИТ компанию на собеседование (лучше всего через того же знакомого или ментора попросить заслать Ваше резюме нужным HR-ам, они же часто и помогут его оформить, заполнить профиль на LinkedIn, выложить свой говнокод на github), чаще всего вы сможете претендовать на позицию junior/middle в зависимости от компании (это в области 600-1500 у.е. в месяц в таких городах как Харьков, Киев, Львов, Одесса, Днепр - ну и раньше Донецк :( ), через 2-3 года Вы уже будете все знать о внутреней кухне software development и салом мазать лыжи за бугор.
и опять же не забывайте весь этот мануал только с учетом того, что Вы постоянно каждый день пишете код, каждый мать его божий день пишете код. в остальных случаях пустая трата своего времени.

в контексте вопроса, на который я отвечал, о ЗП ничего упомянуто не было
как человек работающий программистом более 10 лет, и сейчас зарабатывающий over €50000, могу сказать что хорошее знание математики не нужно, нужно просто знание математики, дружить с ней прост
но это по умолчанию проистекает из наличия аналитических и логических способностей, которые для программиста незаменимы, даже чтобы сайтеги ваять, не говоря уже о более серьёзной работе
и собственно при наличие двух вышеописанных способностей - знания математки + логики и аналитики: всегда можно подтянуть свои познания в нужной области математики повыше уже в процессе работы над задачей
точно также как поднимаешь знания о новом "любимом" фреймворке на котором надо писать, или о новом "любимом" языке, которыми приходится пользоваться на новом проекте
то есть исходя из вышесказанного, получаем то, что чтобы стать программистом хорошее знание математики не нужно
тут более вероятно обратная взаимосвязь - если человек не дружит с математикой то вероятнее всего у него есть проблемы с логикой и аналитическими умственными способностями, что по моему личному мнению, может лишь затруднить процесс освоения такой профессии как программирование. Но опять же, исходя из личного опыта, даже самые "упоротые" девочки-блондинки с, казалось бы, полным отсутсвием логики, которые мне встречались, вполне себе медленно но уверенно осваивали азы программирования под моим чутким руководством.

но не сложная, особенности оптимизации выполнения - разве что на уровне запросов к базе данных, зацепить очередную ORM за базу и в темплейты данные пихать - вот и вся основная задача back-end developer-а
версmка - хорошее знание фрейворка используемого + HTML+CCS3, это про фронт енд
адаптация под различные браузеры и т.д. - ну это рутина, которой хоть и становиться с каждым годом все меньше, но вроде и не становиться
архитектурных решений как таковых я бы не сказал что веб-программисты придумывают - (я подразумеваю под этим словом - full-stack програмистов, а не конкретно back или уже тем более front) - потому что все ваяется из готовых фреймворков и врядли с теми сроками что есть кому то дадут изобретать "велосипеды".
про сложность временнУю - я соглашусь, медиа порталы требуют уйму времени, но опять же все потому что там и список ого-го и растёт ещё в процессе, так как это визуальная компонента, и только увидев "конечный" результат, многие заказчики понимают что он нифига не конечный и вот тут подлатать и там подкрутить.
а разработка без четких требований и спецификаций, плюс отстусвие тестов часто ведут к косякам - хотя казалось бы как раз веб тестировать проще всего - но к сожалению тем code-monkeys (джунам), что фигачат большую часть функционала это никто не объяснил, что вначале надо тесты писать. потому и ваяется это все обычно крупной компанией за пол-полтора года командой из 15-50 человек, хотя 10 толковых спецов сделали бы это за теже деньги за 3-4 месяца - (я говорю теже деньги - это суммарная стоимость всего проекта - то есть только выкинув всех этих олухов, кучу ненужных менеджеров и технических "специалистов", которые изредка отвечают на твои вопросы "отличный вопрос!!!") - но кто же будет давать непонятным лохам с частной конторки такие задания, это ведь можно доверить только крупной корпорации с проверенным именем - вот за эту мысль вдолбленные сейлсами в головы манагеров заказчика, эти сейлсы и потом вся "пищевая цепочка" манагеров и получают своё лаве.
знаю об этом не по наслышке - а скажем с кухни разработки таких сайтов как Walt Disney и NBC...


Самое первое правило - никаких онлайн курсов. Справочники - да. Курсы - нет. Почему?
Курсы - это однобоко. Они не рассказывают как решить задачу разными способами.
Курсы - это долго. Нет смысла смотреть час видео там, где хватит одного абзаца.
Курсы - это непродуктивно. Нет смысла выполнять задания, которые они дают. Задания нужно придумывать себе самому.
Курсы - это мало. Они не охватывают сферу целиком.
И наконец...
Курсы - это г*внокод. Да. Настолько, что некоторые имена стали нарицательными.
Только книги. Только хардкор.


Книги учат структурировать и правильно использовать информацию. Учат выделять нужное и думать. Эти умения помогут при чтении тех.документации, которую как на курсах никто не разжевывает.
Я сам начал кодить с нуля. По книгам. Котеров, Флэнаган, Макфарланд, Макконелл. Сколько я их прочел - даже вспомнить страшно. Просто брал и читал как худ. литературу. И вполне успешно, знаете.
Считаете, что я неправ? Без проблем. Сколько людей столько и мнений. Советуете забить на книги и смотреть Попова? Ну что ж. Кто-то сочтет ваш совет более ценным. И чем больше таких людей, тем меньше у меня конкурентов :-)


Я считаю, что вы однобоко освещаете ситуацию, превознося книги и хая всё остальное.
Новичок не знает, какая книга хорошая, а какая - нет. А читать всё подряд – только тратить время и засорять мозги лишней информацией, подчас неправильной и даже опасной для дальнейшего развития.
По вашим примерам:
- Котерова я бы сразу в мусор выкинул, пусть бездомные погреются.
- Флэнаган – лучше The Good parts взять
- Макфарланд – я бы не стал в 2015 учить jQuery.
- Макконелл – когда человек реально сможет вынести пользу от него, он и сам будет знать, что ему читать, а что нет. Меня вообще напрягают эти "хороший программист должен читать Страуструпа, Саттера, Макконелла, Брукса этц". Хороший программист совершенствуется так, как ему удобно.
Вы же предлагаете зарыться в одну-две-десять книг со святой мечтой "вот дочитаю, выучу и стану крутым", а по сути, после окончания книги человек лезет в интернет и понимает, что всё очень поменялось.
По сути, нормальное обучение, которое будет идти в ногу с развитием области, в которую лезет неофит – это:
1) взять книгу, туториал, видеокурс, интерактивную академию и подучить основы, такие как синтаксис языка, понятия из этого языка (ООП/ФП, массив, цикл и т.п.)
2) пойти на HN/reddit/habr, подписаться на программистов в социалках и начать поглощать статьи/блогпосты по своей теме, узнавая что-то новое для себя, лучше всего – это best practices и текущие тренды
3) Периодически пробовать применять новые знания и набивать шишки.
4) Повторять 2-3 на продолжении N-дцати лет.
И довольно быстро начинаешь понимать, что книги банально не успевают, и что такие ненавистные вами видео, которые «можно уместить в 1 абзац» – это на самом деле один из главных источников информации. Потому что есть доклады с конференций, и при хорошем спикере (поставлю в пример Raymond Hettinger) такое видео принесет больше пользы, чем 100 страниц книги.


1. Котеров закладывает мощнейшие азы. Конечно, сейчас он устарел. Седьмая версия на носу.
2. Флэнаган - шикарная книга по JS. Это Библия. Конкурентов просто нет в природе.
3. Макфарланд - СSS, а не JQuery.
4. Макконнелл... Ну напрягает - не читайте. Я же говорю. Меньше мне конкурентов будет :-)
Забыл добавить Зандстру. Это вообще шедевр.
Со вторым пунктом согласен. Все остальное работает только если у вас есть N-дцать лет на просмотр видео и курсов. Смотрите часовые заунывные россказни, кликайте мышкой в бесконечных тестах. Без проблем. А я пробегусь по Амазону и прикуплю что-нибудь новенькое, которое проглочу за пару вечеров под чашечку кофе. Благо переиздания выходят ежегодно. А уж сколько новья появляется...

No comments:

Post a Comment