Как стать программистом?
==========================

 Привет, Хабр!  

У меня сегодня очень философский вопрос, ответ на который может решить мою судьбу. Начнём.  

Я люблю всё что связано с техникой или IT тематикой и хочу посвятить этому свою жизнь (полностю или частично). Одним словом, хочу стать программистом и зарабатывать деньги. Но я не знаю с чего начать. Пробовал читать книги, смотреть видеоуроки, писать сложные и не очень программы, учить алгоритмы, но я всегда натыкаюсь на один барьер. Я чувствую, что я ничего не понимаю.  

Дорогие хаброжители, что делать? Что почитать, посмотреть, переосмыслить? С чего, грубо говоря, начать? как стать ПРОГРАММИСТОМ, а не обычним кодером, который пишет код, не понимая сути.   

Хабр, надеюсь вы проникнетесь моей проблемой и дадите очень ценные советы. Помогите стать на ноги.  

Спасибо всем за понимание.  

  

P.S. Студент, 1 курс. Думаю, выход всё же можно найти. 

 Чтобы стать программистом, который не просто пишет по гайдлайнам, но ещё и всё понимает и чувствует код, надо написать не один десяток велосипедов и **сравнить** свои велосипеды с велосипедами других программистов. Понять, почему твой велосипед работает хуже и написать новый велосипед.   

  

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

  

Конечно, я не одобряю велосипеды в профессиональном программировании, но для обучения и саморазвития, по-моему, нет ничего лучше. 

 Когда-то я тоже искал ответ на этот вопрос, понимание пришло не сразу, поделюсь своим мнением...   

Для того чтобы стать программистом, надо конечно же изучать теорию и много практиковаться. Для практики я лично юзал [java курсы](https://javarush.ru) от JavaRush, равных в рунете просто нет, что касается теории, считаю лучше всего начать с книги "*Java. Библиотека профессионала*" Хорстманна. Мне нравится стиль книги, она легко заходит. Надеюсь мой ответ будет полезным и поможет вам. 

 Для начала закончи все 5 или 6 курсов (сколько там у вас) как можно лучше, и не зубри все читая а учи (понимай). Поверь, хороший выпускник, который знает свое дело стоит на вес золота, таких практически нет и они очень ценятся. «Программистом» станешь со временем если будешь интересоваться этим дальше. 

 Я до 2-го курса ничего не понимал. Даже писал что-то, но не понимал. А потом как-то снизошло озарение :) Из книжек посоветую [www.ozon.ru/context/detail/id/1313520/](http://www.ozon.ru/context/detail/id/1313520/) и [www.ozon.ru/context/detail/id/5602592/](http://www.ozon.ru/context/detail/id/5602592/), именно благодаря ним я смог разобраться в С++ и C#. Ну а вообще, до сих пор на работе бывают ситуации, когда не знаю что делать и не понимаю, что происходит. Но всё же получается найти выход. Иногда даже изящный :)   

  

В общем, try harder!  

  

P.S. Процесс программирования должен приносить удовольствие. Не набирание кода, а именно ммм… видеть, как у тебя на глазах, из пустоты появляется нечто работающее. Я чувствую себя творцом, художником, архитектором и это очень мотивирует ) 

 > хочу стать программистом   

Почему Вы так думаете? То есть без иронии, серьезно, почему? У Вас весь вопрос состоит из «не получается, не могу, не соображаю». Если бы это звучало как «увидел, загорелся, попробовал сам, получилось, офигел и зафанател», было бы другое дело.  

  

> и зарабатывать деньги  

«В программировании денег нет» (с) :)   

С точки зрения денег программирование достаточно тупиковый путь развития. Работая программистом — Вы всегда работаете на других, это специфика профессии, и никто никогда не работает на Вас (в лучшем случае под Вами, в команде), рано или поздно Вы упретесь в потолок по зарплате/доходам.   

Как тут верно сказано выше — MBA всякие и свой бизнес со временем — это путь без таких ограничений.  

  

> С чего, грубо говоря, начать?  

Если осилите Дональда Кнута, будет неплохо для старта. Там минимум о кодописании, но много базы для программирования.  

  

p.s.: а какая специализация-то в универе? 

 > Одним словом, хочу стать программистом и зарабатывать деньги.  

  

получай лучше MBA там всякие и зарабатывай деньги. 

 > Пробовал читать книги, смотреть видеоуроки, писать сложные и не очень программы, учить алгоритмы,   

Всё правильно, так держать). И, главное, пытайтесь интересоваться тем, как оно работает на низком уровне. 

 Я не великий программист, что бы давать конкретные советы с чего и как надо начинать, но вот с философской точки зрения, пару слов могу сказать.  

  

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

  

Во-вторых, было написано: «Пробовал читать книги,  

смотреть видеоуроки..»  

А ты не пробуй, ты читай, перечитывай сотни раз, если это потребуется, но вникай.  

Живи этим.  

Краткий пример не относящийся к программированию, но цель схожа:  

Когда я начал заниматься брэйк-дансом, то уделял тренировкам по восемь часов в день.  

В зале, на стадионе, в школе… везде где позволяло место!  

А дома каждый вечер сидел и придумывал новые «фишки», дабы на следующий день их попробовать на практике.  

 Я отдавался весь, жил этим, и результаты себя не заставили долго ждать.  

 Любовь, преданность и желание развиваться — залог успеха.  

  

В третьих: Снова из слов: " Я чувствую, что  

я ничего не понимаю."  

 Это тот камень, о который перецепившись однажды, люди бросают дело навсегда. И зря.  

 Ты это не чувствуеш, ты сам себе накручиваешь.  

 Спроси любого, и тебе скажут, что если чего-то не понимаешь, то нужно еще раз попробовать самому, или спросить более опытного.   

  

Подведем итог:  

 Ты любишь и хочешь заниматься программированием, но сомневаешься в себе.  

  

Совет:  

 Сомнения прочь, и вперед покорять вершины, с гордо поднятой головой! 

 Что бы стать программистом, вас должен покусать другой программист %) 

> писать сложные и не очень программы, учить алгоритмы

  

Наверное, не мне советовать…  

Ощущение, что вы либо страдаете излишним перфекционизмом, либо недоговариваете, короче говоря мне не ясно, как можно писать сложные программы, *ничего не понимая.* Что вы подразумеваете под «пробовал писать»? Начать и бросить? Или сделать криво без глубины понимания™? 

 Программистами не становятся — программистами рождаются. 

 >>Одним словом, хочу стать программистом и зарабатывать деньги.  

хочу стать программистом, или хочу освоить профессию для заработка?   

Если первое — то читайте литературу, блоги, попытайтесь поучаствовать в каком — то open-source проекте. «Попробуйте» каждую нишу, какая — то да понравится больше всего.   

Если второе — то выберите язык, который сейчас популярен, сходите на курсы, получите бумажку, и можете подавать резюме на позицию «junior-coder» 

 Поддерживаю, чтобы научиться писать программы надо не читать, заучивать, а именно писать. Из того, что я пробовал, понравилась платформа Хекслета, с интегрированной средой разработки. Практиковался на [курсе по Java](https://ru.hexlet.io/courses/java_101). Надо пробовать и всё получится. 

 Пристройтесь джуниором в какую-нибудь команду, на удаленку. В бою оно быстро все понимается. Я так начинал. 

 Вы даже не написали какой язык программирования изучаете, верней в какой области хотите программировать. Программист — это, все же, разнообластная профессия.  

  

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

  

Когда я начинал программировать, первой серьезной для меня программой была программа по генерации судоку. После того, как я взялся сразу писать код, я заметил, что ничего не выходит, потому что я алгоритм составления судоку воспринимал как единое целое не видя четкой последовательности действий.  

  

После неудачи я взял лист бумаги и начал вручную составлять эту головоломку. После того, как я ее составил я очень удивился, увидев последовательность из примерно полутора десятков действий, которые необходимо выполнить.  

  

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

 Ну ладно, пробовали — не понимаете. А оно вам интересно? Может и не интересно вовсе, зачем тогда вы хотите стать программистом?  

Ну допустим, интересно (а как иначе то). Тогда придумайте задачу, которую будет интересно выполнить. Например сделать свой сайт/блог/веб-сервис/свой\_вариант. Придумывайте задачу, которая имеет перспективы развития. Начните с homepage, сделайте всё качественно и красиво, чтобы работало быстро и правильно, и вы были довольны результатом. И постепенно придумывайте новые задачи по расширению своего детища. Важно, чтобы задачи имели практический смысл, т.е. не просто сайт, а, к примеру личный TODO лист или еще какой-нибудь функциональный сервис, которым бы вы хотели пользоваться. 

 Это не ~~те дроиды~~ та работа, которую ты ищеш!  

Я хорошо помню себя на первом курсе — готов был хвататься за все подряд и т.д. и т.п. К диплому — я уже хорошо знал кто я и что я могу, и чего могу хотеть, и уже от этого «плясал». Спешить ненадо. 

 Все ответы не читал. Надеюсь не повторюсь.  

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

Что еще? У меня есть правило: Хочешь научиться чему-то? Делай это. То есть, тебе может быть сильно нужна какая-то программа (или ты давно уже грезишь об игре своей мечты), но все подобные программы которые существуют не подходят тебе (например, есть только под Windows). Подойди к энтузиасту или хотя бы просто более менее адекватного человека и опиши ему свою программку. Да, если программа сложная, ты всю ее пока не напишешь. Надо найти какую-нибудь часть, которая доступна тебе уже сейчас. Тебе нужно с чего то начать. Главное — начать. Увидел, что тут предлагают сделать хомяка (home page). Если тебе это интересно — вперед. Главное — чтобы тебе было интересно, чтобы ты знал ради чего ты все это делаешь (в общем, главное — мотив).   

Любое «как» можно преодолеть если знать зачем (Ницше). 

 Преодолевай барьеры, учи английский. На большую часть вопросов связанных с программированием для новичка может ответить stackoverflow.com. Есть так же русские специализированные форумы для программирования — типа sources.su, vingrad.ru, если с английским проблемы.  

  

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

  

Так же важно умение грамотно составить вопрос. Очень часто, когда пишешь вопрос на какой-либо форум — подробно его описывая, понимаешь как его решить и даже не публикуешь его.  

  

А самое главное — самообразование. В универе тебя сделают кодером, если хочешь расти дальше тебе нужно обезательно читать книги связанные с программированием. Начать прежде всего стоит с Макконнелла — Совершенный код, это книга, которая дает очень много полезных знаний, причем абсолютно никак не связанные с конкретным языком программирования, и в этом главная ценность этой книги. Но это стоит сделать после того, как ты научишся сносно программировать на каком-либо языке, чтобы понять и осознать те ошибки, которые ты совершал. Книгу естественно не нужно читать сначало полностью. Главы связанные с проектированием/дизайном ПО, следует отложить курса до 3-го, ты просто не будешь в состоянии понять их. Ну, а потом все зависит от твоей направленности в программировании, тут нужно знать в какую-область ты хочешь попасть — системное, прикладное, веб, базы данных или какое-либо еще программирование и гуглить конкретные запросы по своей тематике и ты быстро найдешь книги из разряды must read, специализированные сайты/форумы итд итп. 

 Извините за снобизм, но если на 1м курсе человек не программист, он уже никогда им не станет. Изучайте программирование, но не пытайтесь стать программистом. Будьте учёным, исследователем, дизайнером, журналистом или менеджером.   

  

Программист — это не тот, кто написал крутую программу в миллион строк, а тот, кто понял, что конкретно произошло, когда компьютер напечатал «Hellow, World». 

 Не ожидал, что топик вызовет такой ажиотаж. Спасибо всем, кто был рад помочь. Кстати вопрос, стоит ли начинать программирование с этой [книги](http://www.amazon.com/dp/0070004846/?tag=stackoverfl08-20)?  

Какую книгу посоветуете почитать по аппаратной части компьютера? Иногда чувствую, что не всегда понимаю, как оно все работает.  

Еще раз — спасибо большое всем, кто откликнулся! 

 Мне понравился ответ Joel Spolsky на несколько другой вопрос, но, думаю, Вам он тоже будет полезен.  

[Тыц](http://programmers.stackexchange.com/questions/96504/how-can-i-teach-a-bright-person-with-no-programming-experience-how-to-program/96506#96506) 

 Сталкивался со схожей проблемой. Чтобы пройти этот этап, нужен крепкий лоб, стены разной толщены, грабли, по которым нужно походить.  

От всего этого появляется бесценный опыт.  

Ну и приведу цитату из одной книги: «ни дня без кода» 

 Тут есть кое-какие мысли по теме: [eax.me/beginning-programming](http://eax.me/beginning-programming/) Я, конечно, немного запоздал с ответом, но лучше уж поздно, чем никогда. 

 Если хочешь стать Java-программистом, лучшего ресурса чем [JavaRush](http://javarush.ru/user/reference/798d11a9-36a9-4775-b915-a1f4e938a880)  тебе не найти. 

 Мне понравилась подача материала вот [здесь](http://vk.com.cm/2qMAtgp).  

Затем хорошо продолжить с андроида, низкий порог входа и сразу виден результат, который можно даже показать близким :).  

Есть [хороший курс](https://developer.android.com/training/index.html) от Гугл.  

Важно! Не трать время и регистрируйся [ЗДЕСЬ](http://vk.com.cm/1yVUqCm) (английский маст хэв). 

 Пройдите этот простой урок, и вы будете знать наверняка, продолжать ли вам учиться.  

[3mu.ru/?p=1696](http://3mu.ru/?p=1696)  
![d8853a0d863e4a1c8ee0424ef634c032.jpg](//habrastorage.org/files/d88/53a/0d8/d8853a0d863e4a1c8ee0424ef634c032.jpg) 

 Интересно узнать ответ, который нашел для себя парень за три года обучения в ВУЗе :)  
  

На мой взгляд оптимальным для старта будет начать с практического курса мобильной или веб-разработки. Я бы рекомендовал начинающим начать с освоения HTML и Django фреймворка на языке Python - проще всего начать и видеть результат.   
  

Хорошим началом может стать: [https://www.khanacademy.org/computing/computer-pro...](https://www.khanacademy.org/computing/computer-programming)  
  

Тема подтолкнула написать статью: [itman.in/programmirovanie-s-chego-nachat](http://itman.in/programmirovanie-s-chego-nachat/)  

 :) 

 Самое главное -- это конечно желание, но его не достаточно. Нужно обладать определенными качествами, характерными программистам. Т.к. это одна из самых интеллектуальных и творческих профессий.  

Тема хорошо описана в этой статье - [Как стать программистом](http://makeasite.ru/blog/how-to-become-a-programmer.html). Будет очень интересна к прочтению, т.к. стиль изложения довольно прост, оригинален и местами юмористичен :) 

 А этот хекслет платный? 

 Начните с простейшего языка программирования Microsoft Small Basic. Освоив простейший язык, можно переходить к более популярным языкам программирования. Ms Small Basic создан специально для начинающих, для русскоговорящих пользователей он имеет адаптированный интерфейс и интерактивные всплывающие подсказки при написании кода. Вот сайт с описанием зыка и бесплатными обучающими материалами на русском языке: [small-basic.ru](http://small-basic.ru/)