Что нужно знать любому начинающему программисту? Это должен знать каждый начинающий программист.

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

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

Что входит в должностные обязанности техника-программиста

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

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

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

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

Знание и понимание терминологии

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

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

Самое важное – обладать соответствующими знаниями в области информатики и владеть определенным терминологическим аппаратом.

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

Уровень владения языком программирования (ЯП)

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

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

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

Например, при написании кода на Java или C# он должен знать применяемые библиотеки, типовые ситуации программирования. Хорошего специалиста отличает способность избегать повторяющихся структур в коде и способность создавать собственные программы в соответствии с проблемами, которые решаются в разрабатываемом приложении.

Коммуникативные навыки

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

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

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

Востребованность профессии

Где учат ? Таким вопросом зачастую задаются выпускники общеобразовательных школ по мере приближения окончания обучения. И вопрос этот далеко не . Профессия действительно не только интересная, но и весьма востребованная как у нас в стране, так и в мире. Более того, именно профессия программиста, как никакая другая, позволяет работать в оптимальных условиях, т.е. удаленно и даже совсем не в той стране, где находится собственно офис компании.

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

Куда пойти учиться?

Естественно, от уровня учебного заведения зависит и степень глубины познания будущей профессии. Если по окончании колледжа (техникума) выпускник получает профессиональные знания на уровне техника-программиста, то выпускник института или университета квалифицируется как инженер-программист.

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

Так, в целом существует некий обязательный набор базовых языков программирования, это и С++, PHP, DELPHI. Но основой всего остаётся Ассемблер, который, в свою очередь, невозможно освоить без понимания логики микропроцессорной техники.

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

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

1.1 Зачем вам это надо

Будь писцом! Освободит она [эта должность] тебя от податей, защитит она тебя от работ всяких. Удалит она тебя от мотыги и… и не будешь ты носить корзину. Она отделит тебя от гребли и весла, удалит она тебя от хлопот. Не будешь ты под владыками многими и под начальниками многочисленными.
[...]
Сделайся писцом! Гладки его члены, и станут твои руки мягкими. Когда ты выходишь, ты разодет, тебя возвеличивают, тебя вопрошают придворные. Когда ищут умелого, - находят тебя. Ничего не знающие ищут ученого. Он [же] возвышается вплоть до получения им [звания] сера, восхваляемый за свое прекрасное поведение.

Папирус Апастаси II, Древний Египет

Времена проходят, а ничего не меняется. Главная причина в том, что программисты очень нужны на рынке труда. Востребованность является первопричиной всех остальных факторов. Хорошие условия труда, высокие зарплаты, лояльное начальство. Все это смотрится очень и очень привлекательно. Фактически профессия программиста единственный социальный лифт в наше время. Вам не нужны богатые родители, обширные связи со всякими «нужными людьми», престижное высшее образование и прочие атрибуты успешных людей в наше время. Всё, что вам нужно, это умение создавать компьютерные программы или web-сайты. Вы можете начать программировать, живя в самой далёкой и непрестижной провинции. И добиться фантастических успехов в жизни.

Ориентировочно, в самом плохом случае, ваша карьера может выглядеть так. Сначала полгода-год самостоятельной учёбы. Т.е. учёбы без широкой посторонней помощи. Максимум что вы сможете, что-то спросить на тематических форумах. Вам обязательно помогут. Но на 99% это будет чтение больших толстых книжек и выполнение упражнений оттуда, 3-4 часа каждый день. Потом вы сможете получать деньги за свои знания. И найти такую работу будет реально. Проработав так год, за самую обычную зарплату 300-400$. Вы получите опыт, открывающий перед вами все двери в жизни. Сможете получать от 1000$ удалённо и\или уехать туда, где вам больше нравится. Даже в другую страну. И жить там ничуть не хуже, чем местные. Я не поддерживаю дурацкий лозунг «свалить из...», но если вам очень охота сменить ПМЖ. Эта профессия самый короткий и лёгкий путь.

После того, как вы закончите свою стажировку, вы никогда не будете жить хуже. Это будет очень сложно. Даже чисто психологически профессия расслабляет. Вы не будете бояться кризисов, войн, стихийных бедствий и дурного начальства. Потому что в любой момент сможете переехать куда угодно и сменить работу на другую. Вам всегда хватит денег на «булку с маслом» и даже досрочное погашение ипотеки.

1.2 Кто может стать программистом?

Теперь немного дёгтя. Программистом может стать любой, кто может работать головой. По сути работа головой так же тяжела, как тяжёлый физический труд. Мозг при нагрузке потребляет много питательных веществ, энергии. Его надо заставлять работать усилием воли. Любителей работать головой можно встретить не чаще, чем людей которым нравятся физические нагрузки. Все мы знаем, сколько людей могут добровольно делать зарядку по утрам и ходить регулярно, годами в тренажёрный зал. Примерно столько же хотят добровольно нагружать свой мозг работой. Понадобятся воля и терпение. Если вы готовы решать сложные задачи, «неразрешимые» проблемы более года, вы сможете стать программистом.

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

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

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

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

Остальные знания, типа иностранных языков и даже математики, можно считать малозначительными на начальном этапе.
Конечно останутся люди, которые спросят: «Погодите!!! A что если я тупой (старый, инвалид и т.п.)??? Какой у меня должен быть IQ???»

На самом деле, нет 100% способа определить ваши способности к программированию по каким-то формальным признакам. Если верить одному популярному учёному - нейрофизиологу, мозг человека очень изменчив. Если вес, рост, размеры основных органом человека варьируются, условно +\-50% у основной массы взрослых людей, то размеры долей головного мозга варьируются в десятки раз. Поэтому понять, какая деятельность подойдёт вам больше всего, очень сложно. Для этого, надо сделать новый тип и без того безумно дорогого медицинского прибора. Потом нанять редких и дорогих специалистов, которые разберут показания прибора. И при этом не факт, что за ваши деньги, они просто не наделают ошибок. Как это бывает во всех сложных и дорогих проектах, на начальном этапе.

Конечно, все думают, всё можно свести к чему-то подобному вступительному экзамену в ВУЗ, где главным предметом будет математика. А вот и нет! Спешу всех расстроить. Математика снаружи похожа на программирование, но это только на первый взгляд. Помнится, 10 лет назад читал отрывок из книги, где автор опытный программист говорил, что программирование больше похоже на лингвистику. Да-да! По его мнению, профессиональные лингвисты могут быть лучшими программистами, чем профессиональные математики! Не могу согласиться на 100%. Но рациональное зерно в этом есть.

Давайте рассмотрим пример. Надо вам составить инструкцию ребёнку, чтобы он купил продукты в магазине. Типа: «Идёшь в магазин, ищешь тростниковый сахар, если его нет, покупаешь обычный. Потом покупаешь хлеб, буханку белого и чёрного. Если не будет чёрного, купи серого… » Вы удивитесь, но такого рода инструкции это чистое программирование. Причём, их вы можете написать на иностранных языках. А можете, используя синтаксис языка программирования так же, как иностранного. И другой программист сможет понять написанное.

Для тех, кто не верит, давайте рассмотрим простую логику, реализованную в сотнях программ. «Запросить количество строк, выделенных в таблице. Если количество больше нуля, сделать кнопку "Применить" активной. Иначе пассивной… » Вы так же можете записать данный алгоритм на естественном родном или иностранном языке или на языке программирования.
Вы так же удивитесь, но перевод алгоритмов с естественного языка на язык программирования это самая обычная работа. Когда программисту дают задание реализовать чёткую логику, придуманную другими. И наоборот, перевод запрограммированной логики на естественный язык тоже нужен. Когда этим «другим» надо описать, как точно работает программа. Да, всё верно, С++, PHP и другие языки программирования можно воспринимать, как особенные иностранные. Математика тоже бывает нужна, но, как правило, при выполнении каких-то узкоспециальных задач, с которыми вы, возможно, ни разу не столкнётесь. Начинать можно и без математической подготовки.

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

1.3 Три этапа на пути к профессии

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

1) Пробный период. Вы должны попробовать данный вид деятельности.
Дело в том, что освоение профессии - полгода или даже год учёбы. И вам надо, как можно раньше понять, сможете или нет. Стоит ли вам инвестировать своё время и даже деньги. Или ждёт разочарование.

В этот период необходимо освоить 2-3 технологии настоящего программирования. Но они не должны требовать много времени на освоение. Если справитесь, есть смысл тратить обещанные полгода-год на следующий этап.

2) Самостоятельная учёба.
Если прошли предыдущий этап, можно инвестировать своё время в овладение профессией.

3) Стажировка.
Ваша первая работа и первые деньги.

2 Пробный период

2.1 Что делать?!

На самом деле есть только один способ узнать сможете вы или нет. «Чтобы начать программировать, надо начать программировать. А чтобы начать программировать, надо начать программировать!»

Многие считают программирование сложным занятием, надо много чего знать для работы программистом. И это правда. Если бы это было просто, им не платили бы такие большие зарплаты. Но с другой стороны, есть много книг в свободном доступе. Причём большинство из них качественные. Профессионалы из больших компаний склонны писать огромные книги или статьи, где описывают свой бесценный опыт другим. Странные люди конечно. Вместо получения огромных денег за работу занимаются книгописательством, за которое платят меньше, а то и совсем ничего. Эти «странности» будут рассмотрены позднее. А сейчас надо чётко усвоить, секретов в данной профессии очень немного. Большинство вопросов решаются поиском в интернете. Поэтому несмотря на сложность, программирование одна из самых доступных профессий.

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

Лично моё мнение, это должны быть:

2.1.1 HTML
Очень простой язык программирования. Если быть точнее, это даже не язык программирования, к которым все привыкли. Процедурный и объектно-ориентированный, типа С++, PHP, Ruby и т.п. На нем невозможно написать, «что делать в магазине». Это язык разметки, который вы встретите в любой web-страничке. Инструкции этого языка выглядят примерно так: «Вот у этого параграфа должен быть наклонный шрифт», «Здесь отобразить картинку picture.png», «Размер шрифта данного куска текста 12 точек. Цвет красный».

Это очень полезный язык для начинающих. Даже если вы не собираетесь в web-разработку, эти знания вам пригодятся. Ориентировочное время освоения, 2-5 дней. При этом, необязательно запоминать обширные справочные данные. Достаточно научиться пользоваться этими самыми справочниками. Среди программистов, HTML не считается чем-то серьёзным и сложным. А вот незнание основ HTML, то в чём вы можете признаться только самым близким людям. Работодатели и коллеги будут вас воспринимать, как умственно-отсталого.

По мере изучения HTML вы будете постоянно сталкиваться с отсылками к технологии CSS. Изучение не обязательно на данном этапе. Но если увлечётесь СSS, эти знания не будут лишними.

2.1.2 JavaScript

Это уже «настоящий» язык программирования. Его изучение тесно связано с HTML. Вот тут вас ждут первые настоящие сложности. Хотя по языку огромное множество учебников, видеоуроков и всевозможных сайтов, где все разжёвано до самых мелких подробностей. Это будет реальным испытанием.

Наверняка кому-то не терпится начать изучать С, Python и даже Haskell. Но даже если вы собрались стать системным программистом. Скорее всего, рано или поздно столкнётесь с HTML и JS.

Одна из причин выбора JS как первого языка программирования, его применимость в разных областях. Начиная с логики web-страничек на стороне клиента. Кончая JS-подобным языком QML, куда нас тянут за уши разработчики фреймворка Qt.

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

Любой учебник содержит упражнения. И на начальном этапе вы должны делать эти упражнения. Чем больше, тем лучше!

Однако, есть две небольшие категории людей, которым можно заменить JS на что-то другое:

1) Те, кто имеет хороших наставников по другим технологиям программирования.
К примеру, брат\сват, работающий системным программистом С. И он готов вам помогать. В этом случае С может быть предпочтительней. Но насколько знаю, около 30% программистов, WEB-программисты. Так что с большой вероятностью JS будет правильным выбором.

2) Люди, которым какой-то другой язык нужен, прямо сейчас для работы. Системным администраторам, как правило, SQL и bash.

В случае SQL я бы не стал обольщаться. Это тоже «ненастоящий» язык. Сложность между HTML и JS. Его скорее всего, придётся учить в любом случае всем. Но со временем я бы советовал, всё равно попробовать что-то типа JS, поддерживающее процедурное и ООП парадигмы. Плюс в изучении SQL всё-таки есть. Если вы его не осилите, смысла продолжать нет.

А вот с bash всё по другому. Слышал, JS позволяет заменять bash через модуль в node.js. Так что, если надо написать скрипты с нуля, JS будет поинтереснее. Если исправлять написанное до вас, тогда другого выбора нет. Так же, как и с SQL, JS останется у вас на очереди.

2.2 Учебные пособия

Очень важный вопрос, какие учебные пособия использовать. Здесь перечислены варианты в порядке , которoм должны их проходить.
  1. Видеоуроки. Их стало очень много на любые темы. Youtube обязательно выдаст плейлисты по любым популярным технологиям. Даже на русском. Там всё наглядно, и начинать ваять свои первые «Hello, world!» надо именно с них. Недостаток только один. Они могут не покрывать всех глубин изучаемого языка. Но вам хватит проблем и без этого.
  2. Мультимедийные учебники. Скорее всего, это коллекции видеоуроков плюс ещё чего-то. Очень часто продаются за деньги.
  3. Книги. Самые тяжёлые для восприятия. Они как раз покрывают больше тонкостей различных технологий. Оставьте на потом. Когда исчерпаете возможности предыдущих вариантов.
Но только пожалуйста, здесь и далее. Не надо покупать никакие курсы и платить за чудо-учебники. Все «чудеса» уже давно лежат, максимум на торрентах. По моему мнению, запрещённый в России rutrracker, содержит самое лучшее собрание мультимедийных учебников и книг.

2.3 Решение технических проблем

Проявив силу воли и терпения, вы героически начали изучение предмета. И перед вами стали вставать всевозможные технические проблемы. Вы можете всё делать по инструкции. Но ваши примеры могут не работать. Хотя бы потому, что инструкции могут быть написаны для предыдущих версий программных инструментов. Самый сложный шаг может быть с первым запуском исходного кода, который вы просто переписали из учебного пособия.

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

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

Вам кажется, подробное описание использования кавычек с арифметическими операциями - какой-то сумасшедший бред, которым вы не будете никогда пользоваться? Вы может быть и нет. А вот автор считает это простым. Поэтому далее в учебнике, сложение символов с кавычками и без, будет встречаться повсюду. Но даже, если вы решите, что лучше взять учебник по другому языку программирования, на который вы возлагаете большие надежды. Он тоже будет мучать вас строками типа "5" + 3. Причём, с теми же «дурацкими» многословными объяснениями.

Неразрешимые проблемы, это часть жизни любого программиста. И как бы вы прилежно всё не делали, никуда от них не денетесь. Лично я, даже не смотря на 5 лет стажа, также смотрю в книги о чём-то малопонятном и сложном. И также иногда думаю: «Ваще ерунда какая-то. Как же я буду это решать?!» И абсолютно так же, как и у вас. У меня многое зависит от решения проблем, кажущихся совсем тупиковыми.

Если вы имеете проблемы, с которыми можно обратиться на форум или тематическую группу соцсети, то с моими проблемами, это бесполезно.

На самом деле, есть особый алгоритм для их решения:

1) Надо очень хорошо подумать над причинами. Анализ сообщений компилятора, среды выполнения или интерпретатора(JavaScript), связанные с ошибкой. Вы должны очень хорошо понимать, что вам пишет компьютер о проблеме. Если не понимаете, ищите в интернете по тексту или коду ошибки. Очень часто объяснения находятся, но на английском. Даже после перевода мало что можно понять. Но надо очень сильно стараться. На самом деле это не просто ситуация, где вы решаете конкретную проблему. Это ситуация, где вы получаете новый опыт. Не менее важный, чем знания из учебника. Наряду с этим, проводится анализ потенциально проблемного кода. Если вы переписали или скопировали код откуда то, надо досконально в нём разобраться.
Если за полтора-два часа вы, казалось бы, всё исследовали и поняли. Но так не нашли решение. Значит надо оставить проблему до завтра. Даже если есть ещё идеи.

2) Займитесь чем нибудь другим, что не зависит от вашей проблемы и получается. Можно даже продолжить изучать ваше текущее учебное пособие. Вы удивитесь, но со временем придут идеи, как решить вопрос. Если они не совсем ясные. Бросаться сразу на решение, не рекомендуется. Лучше записать и оставить на завтра.

3) На следующий или любой другой день. Пробуем все новые идеи, для решения проблемы. Повторяем первый этап.

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

Как правило, этого вполне достаточно для решения любых проблем.

2.4 Работа с наставниками

Небольшой свод правил по работе с различными опытными специалистами, наставниками, менторами и т.п.
  • Прежде чем спрашивать, надо попытаться найти решение самому.
  • Спрашивать старайтесь только то, что не описано в книгах, документации и интернете. В противном случае, вас пошлют туда.
  • Если вас куда-то послали, туда надо сходить. Иначе наставник пойдёт туда сам и найдёт решение. Это очень испортит его мнение о вас.
  • Что бы наставник не стоял у вашего стола часами и не смотрел за каждым вашим шагом, надо группировать вопросы. Задавать их «оптом», множество накопившихся за один раз. А не по мере возникновения.
  • Вопросы лучше задавать тогда, когда ваше движение вперед заблокировано. Если есть ещё чего делать кроме, делайте. Оно тоже может породить вопросы. Которые лучше задавать вместе.

3 Самостоятельная учёба

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

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

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

Мне говорят, что ты забрасываешь ученье, ты предаёшься удовольствиям, ты бродишь из улицы в улицу, где пахнет пивом. А пиво совращает людей, оно расстраивает твою душу. Ты похож на молельню без её бога, на дом без хлеба. Тебя учат петь под флейту. Ты сидишь перед девушкой и ты умащён благовонием. Твой венок из цветов висит на твоей шее.

Я свяжу твои ноги, если ты будешь бродить по улицам, и ты будешь избит гиппопотамовой плетью!
Наставления писцу. Древний Египет

После освоения основ JavaScript. Вы уже хорошо представляете себе, что такое писать код программ.

И вы готовы потратить полгода-год на овладение профессией. И что немаловажно, для вас это дело времени.

3.1 Что изучать?

Всех людей, стремящихся овладеть какой либо профессией, можно поделить на две категории: любителей и профессионалов.

Любители , люди которым нравится данное занятие. И они готовы делать его даже бесплатно. Жертвуя временем, которое можно потратить на развлечения, отдых и пр. Раз уж вы попробовали, то отлично понимаете, нравится вам программирование или нет. У любителей есть одно очень хорошее качество. Их не надо мотивировать. Они будут много, добросовестно работать и с удовольствием получать новые знания. Потом, они с таким же удовольствием будут делиться этими знаниями с коллегами и друзьями. Но самые любители из любителей пишут статьи и даже целые книги о своём опыте.

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

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

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

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

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

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

Технология (язык программирования, который будете изучать) обязана быть коммерчески востребованной. Из ТОП 10 популярных языков. Иначе, не сможете получать деньги за свой труд. Это значит, программистом вам не стать. Придётся отдельно зарабатывать деньги, отдельно программировать. Что, естественно, невозможно.

У вас впереди ещё стажировка. И на стажировку берут охотно только по дефицитным специальностям. Особенно удалённо. Поэтому думайте\решайте, чему хотите посвятить свою жизнь. Что будете изучать на данном этапе. Можно продолжить и JavaScript. Можно попробовать, что-нибудь другое. Никто не мешает передумать на середине пути. Вы уже испытали себя и есть определённое поле для экспериментов.

Единственное исключение я бы сделал для С++. Это сложный язык. Он, наверное, требует в два раза больше времени на освоение. Чем просто С или JS. При этом зарплата будет больше максимум на 20%. С++ это язык любителей С++.

Если вам не по нраву JS, и вы чувствуете в себе описанного выше «профессионала», наверное, лучшим выбором будет Java. Как-то раз я не смог даже запустить программу, написанную на этом языке(jar архив). Но, с другой стороны, разработчики Java в связке с Oracle(PL\SQL) из больших корпораций, возможно, самые высокооплачиваемые разработчики в IT. При том, что это технологии средней сложности. (Предполагаю, в мире Java платят уже только за умение запускать jar файлы.)

Ещё есть замечательный язык Python. Он будет очень полезен всевозможным математикам, статистикам, т.к. открывает им дверь в мир Data Science. С другой стороны, это язык web-разработки для всех остальных.

Учёба на данном этапе нацелена на повышение своей квалификации до максимума. Фактически, вы будете повышать рыночную цену своего труда. Будте уверены, всё, что потеряете из-за программирования на данном этапе, вернётся многократно.

Самостоятельная учёба имеет преимущество перед стажировкой. Можно получать более фундаментальные знания. На самом деле, большинство программистов профессионалы. Они выучили немного. Попали на работу. И эксплуатируют свои немногие знания. Большинство того, что они читают, небольшие статейки на тему, как состряпать чего-то быстро. Либо заткнуть какую-либо проблему. Им очень не хватает фундаментальных знаний. Вы удивитесь, но не всё можно
«нагуглить». Что-то надо знать и уметь изначально. Хотя бы потому, что придётся разбираться с тем, что вы «нагуглили». Код, который вы найдёте, может написать очень хороший специалист. При недостатке фундаментальных знаний вы просто не разберётесь в нём.

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

Выполнение учебных задач на данном этапе, тяжёлое, тоскливое занятие! Вам будет скучно, неинтересно, захочется всё бросить. Большинство так и делают. Мотивируйте себя, придумывайте интересные задачи, продолжайте учиться. И вы не будете этим самым большинством.

Кроме основного языка программирования типа С, Java, JS и т.п., необходимо изучить следующее:

Английский язык
Как известно, программисты такой народ, который умеет читать по английски, но не умеет говорить. Это тот язык, на котором вы будете искать решение своих проблем, общаться с заказчиками. Разговорный английский сильно расширяет круг поиска работы. Это очень хорошо сказывается на зарплате. Хотя, надо признать, времени на него можно потратить столько же, сколько и на язык программирования.

Технический английский, изучить проще. Просто переводите материалы нужные вам, в различных переводчиках. Запоминайте незнакомые слова.

SQL
В большинстве случаев эта технология вам понадобится рано или поздно. Необязательно изучать надстройки типа PL\SQL(кроме изучения Java). Но освоить создание таблиц, джойны и юнионы очень желательно. Самым полезным, пожалуй, будет изучение на примере PostgreSQL.

У SQL есть ещё один аспект. Этот язык, возможно, самое сложное, что спрашивают при приёме на работу тестировщиком. Поэтому если выучите только его, есть шанс попасть на работу очень близкую к программированию. На такой работе будет немного легче изучать само программирование. И вас очень легко переведут из тестировщиков в разработчики. Как только покажете, что способны писать хороший код.

Освоить «слепой» десятипальцевый метод печати на клавиатуре
Печатать предстоит очень много. Поэтому освойте обязательно. В сети достаточно бесплатных онлайн-тренажёров. Можете попробовать освоить его перед первым, «испытательным» этапом. Если у вас не хватит терпения на даже на это, двигаться дальше нет никакого смысла.

Системы контроля версий
Конечно же это будет Git. Обязательно изучите основы и попробуйте в деле, на своих учебных проектах. Но в последнюю очередь. Поначалу будет сложновато понять, что это такое, какие преимущества даёт.

Эти предметы хороши тем, что позволяют не терять темпа учёбы. Даже когда застряли с изучением основного языка. У вас наверняка будут описанные «неразрешимые» проблемы. Переключайтесь сюда и потихоньку ищите решение.

3.2 Общепринятые способы получения знаний

ВУЗ
Могу очень много поведать про высшее образование. Но это не имеет никакого практического значения. Если коротко. Лучше быть стажёром через год самостоятельной учёбы, чем через четыре года посещения ВУЗа. Те, кто начнёт заниматься по моим рекомендациям сейчас, через 4 года будут проводить технические тесты при приёме на работу тех, кто сейчас поступает в ВУЗы.

Платные курсы подготовки программистов
Тут всё очень непросто. Спрос рождает предложение. Но это предложение зачастую очень плохого качества. Вы можете попробовать какие-либо из них. Но, пожалуйста, не возлагайте никаких надежд. Постарайтесь пройти первые уроки бесплатно. И бегите оттуда, если ничего не понимаете на занятиях. Никакие бренды, под которыми делают эти курсы, не добавят вам понимания предмета. «Гарантия трудоустройства» там, как правило, обман.

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

Тут вас будут учить реально дорогие специалисты. И они будут делать это для своих внутренних нужд. Как правило, такие курсы имеют какие-то требования к кандидатам. Яндекс требовал математическую подготовку. EPAM требовал знание основ программирования. Просто так туда не попасть. Но если есть возможность посещать эти курсы, стремиться туда стоит однозначно! Даже если вы пробудете в «рабстве» у этих компаний за какие-то 400-500$ в месяц целый год. Большой плюс таких курсов. Там не требуют никакого образования.

3.3 Стратегия обучения

Большинство учащихся рассчитывает выучить программирование, просто учась. Типа сел за учебник незнающим предмет, а закончил его учить и стал всё понимать. Весь процесс начинающим представляется линейным. Двигаясь от главы к главе, проходя учебные задания, человек набирается знаний. Других моделей люди не представляют. Потому что никогда не делали сложных и долгих проектов. А на самом деле всё не так просто. Любой программист знает, в ходе выполнения проекта неизбежно открываются новые детали, которые мешают или наоборот помогают в его реализации. Как правило, чем больше проект, тем меньше он походит на то, что задумывалось вначале.

Простой пример. Вы заказали себе костюм в ателье. Оговорили все детали. Через неделю звонит мастер с известием, оговоренная форма швов очень плохо смотрится на костюме, надо менять. Потом выясняется, надо менять часть материала. Нужного нет. Вы меняете и меняете. В конце концов получаете примерно 2/3 от того, что задумали изначально. В случае с разработкой программного обеспечения. В проекте делового костюма может получится купальник. Причем за цену костюма. Если думаете это невероятно, cпросите потом толковых менеджеров проектов. А пока вам надо усвоить одно, в проекте вашей учёбы будет много неожиданного. И вы должны уметь работать с этими неожиданностями.

Если не углубляться в дебри управления проектами, вы должны развиваться в IT не линейно, как описано вначале. А «по спирали». Выглядит это примерно так. Если вы не знаете компьютер хорошо. Не надо загадывать, что через год будете программистом С++ или PHP. Сначала изучаете компьютер. Вам открываются новые возможности и препятствия. Например, стали больше понимать что хотите делать в итоге, сайты или десктопные приложения. Потом, на этапе пробного периода, попробуете программировать для web (html, js). Вы узнаете о программировании ещё больше. После пробного периода, можно уже загадывать своё основное направление. Какой язык будете изучать. Кто то в самом начале пути может не подозревал о системном программировании. Что есть отдельное направление, где разработчики пишут невидимые обычному пользователю программы. И возможно для вас это будет интереснее чем то, о чём мечтали вначале.

В процессе обучения совершенно точно будут чтение учебников и решение задач оттуда. Но вот сама последовательность и порядок прохождения учебных пособий должны подчиняться «спиральному» циклу. Чтобы каждый этап давал хорошую основу для следующего.

Вы должны быть менеджером самому себе и планировать достижимые цели, этапы. Прямо сейчас много молодых людей мечтают, как они будут создателям топового web-сайта или операционной системы. А кто-то мечтает написать калькулятор и получть с его помощью должность стажёра. Вы, надеюсь, догадываетесь, кто через год будет успешным программистом. Очень важно, чтобы ваши проекты и задумки имели своё успешное воплощение. Лучше синица в руках, чем журавль в небе.

Кроме этого, «менеджерские» качества очень пригодятся тем, кто считает себя «тупым». В IT очень легко быть умным и очень тяжко наоборот. Умный может запросто взять учебник, прочесть и тут же сделать что-то полезное. Тупые возьмут тот же учебник прочитают и ничего не поймут. Таким надо разбивать учебный материал на части и больше тренироваться (писать код) на основе этих частей. Можно разбить материал на такие части, чтобы дошло до кого угодно. Для тех, кто умеет планировать свой учебный процесс и решать «неразрешимые проблемы»(2.3) нет непреодолимых препятствий. Вы осилите абсолютно всё, вне зависимости от интеллекта. Пусть это займёт значительно больше времени. Но вам гораздо важнее иметь целостные и протестированные знания\опыт, чем скорость их приобретения.

Конечно вам будет очень сложно понять и, самое главное, применить на практике, такую модель. Но тех, у кого получится, ждёт приятный бонус в виде перспективы стать «менеджером проектов». Если сейчас вам просто хочется получать зарплату программиста, то зарплату менеджера проектов вам захочется настолько, что не сможете спать. Минус тут только один. Всё же для начала надо стать хорошим программистом.

3.4 Когда искать работу

Очень сложно сказать, когда надо искать свою первую работу по данной специальности. Фактически, вы можете начать поиски работы сразу после первого этапа. Подозреваю, многие так и сделают. Если вам до 23 - 25-ти лет и вы живёте там, где хорошо развита отрасль разработки ПО, у вас это получится. Может вы не станете хорошим специалистом. Но на жизнь заработаете точно.

С другой стороны. Есть люди живущие там, где разработкой ПО не занимается никто. И есть люди которым далеко за 25. Такие должны дольше учиться. Чтобы из низкоквалифицированных превратиться в высококвалифицированных. Ради получения в свои ряды высококвалифицированных программистов работодатель готов на многое. Вам могут предложить помощь в релокации. Или даже удалённую работу. Возраст за 30 или 40 лет, не будет иметь большого значения. Главное, показать свой высокий наработанный уровень.

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

У раннего поиска есть большой минус. После собеседования работодатель будет иметь о вас какое-то мнение. Которое не захочется менять со временем, если вы когда-то показали низкий уровень знаний. Через полгода, когда будете знать гораздо больше, ваше резюме, возможно, даже не будут рассматривать. Потому что мнение о вас останется прежним. Остаётся только надеяться, что про первое собеседование со временем забудут. Но это минимум полгода. Может так быть, что работодатель ведёт базу данных кандидатов. Чтобы не собеседовать их дважды. В этом случае всё будет очень печально.

3.5 «Что мне нужно знать, чтобы взяли Junior-ом?»

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

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

Ещё есть фактор возраста кандидата. Который немного снижает вашу привлекательность. Чем больше возраст, тем больше снижение. Есть фактор наличия хорошего портфолио, который повышает. Опыт, рекомендации и многое другое.

Вы можете много стоить, как программист C++, но очень немного, как программист PHP.
Самое «халявное», фактор вашей известности работодателям. Когда вы известны большему количеству работодателей. Больше шансов, что вас куда-то возьмут.

«Терпенье и труд всё перетрут!» Непрерывное самообразование - ваша гарантия получения работы!

4 Первая работа стажёром

4.1 Как искать первую работу?

4.1.1 Портфолио

Для начала написать портфолио. Это должна быть небольшая программа или скрипт для сайта, которая делает работу, похожую на полезную. Назначение должно быть понятно вашему потенциальному работодателю. Например, адресная книга. Если вы сделаете калькулятор для расчёта траекторий полёта спутников Земли, будет конечно круто. Но ваш будущий работодатель навряд ли в теме. Поэтому не сможет оценить результат. Желательно, чтобы программа как-то хранила настройки и данные пользователя. Должен быть какой-то небольшой и целостный кусок кода. Если вы, допустим, пришлёте свой патч к какому-то свободному проекту, работодателю, возможно, будет лень вникать в исходный код всего проекта. И оценивать, что вы там поменяли в этом контексте. Хорошо, если приложение будет пользоваться SQL базой данных, там где это имеет смысл.

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

Чтобы код в портфолио был хорош, ему надо дать «отлежаться» недельку. Т.е. написать и оставить на неделю. Потом провести ревизию всего кода. После исправления ошибок заливаете в какую-нибудь временную шару и создаёте тему на форуме с просьбой посмотреть исходный код более опытных программистов. C обязательным указанием, что это ваше портфолио.

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

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

Поверьте, создание портфолио и code review(проверка кода) более опытными коллегами добавит +30% к вашему опыту. Так же позволяет адекватно оценить, вашу текущую квалификацию. Ваш код, конечно, не будет идеальным. Приготовьтесь, там будут находить ошибки(бесплатно!) Это ещё полбеды. Но вот когда вы не знаете почему написали код вот так, а не по другому, настоящая беда. Значит это только то, что код писали не вы! В этом случае отфутболят с пожеланием придти через полгода со своим кодом.

4.1.2 Резюме

Вообще, по резюме можно многое сказать о человеке. Например, плохоструктурированное резюме. Скорее всего напишет разработчик, не особенно заботящийся о структуре исходного кода.
Скопированный из сети раздел, например, «Профессиональные качества». Говорит о том, что кандидат склонен приврать. Отсутствие достижений, которые не вспоминают даже на собеседовании, говорит, что человек «профессионал». И ещё много чего.

Как-то раз была забавная история. Взялся раскритиковать резюме одного коллеги. Выводы были неутешительными. Говорю: «У тебя такое плохое резюме, что я бы тебя взял на работу! Специалист ты хороший. Но вот со твоим резюме хорошей работы тебе не найти. Поэтому тебя можно будет держать на маленькой зарплате. И ты никуда не денешься!»

Чтобы такого не было. Резюме тоже желательно дать почитать специалистам HR и программистам на оценку.

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

Лучше иметь скромное резюме. Но быть уверенным, что ответите за любое слово в нём.
Если вы уже приобрели какой-то опыт работы и вам есть чем похвастаться. Можете добавить раздел «Портфолио», в самом конце. Подробно описать проекты, в которых участвовали. Интересные технические решения, достижения(подробно). Хоть 10 страниц. Но именно в конце.
Обязательно укажите, что готовы к релокации(переезду) и командировкам.
Также вам поможет заполненный профиль в LinkedIn, HeadHunter и других сайтах поиска работы.

4.1.3 Поиск работы

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

Поэтому вы должны рассылать резюме по всем вакансиям, подходящим под ваш профиль. Например, изучали JavaScript. Шлите резюме везде, где этот JavaScript требовался. Невзирая на минимальный требуемый стаж, наличие профильного высшего образования, то, что вакансия уже закрыта и многое другое. На «том конце провода» лучше знают, что делать с этим. Так же шлите во все фирмы, которые теоретически имеют или могут иметь специалистов вашего профиля. Почту обычно разбирают секретарши. Невелика беда, если они отправят ваше письмо в корзину. Мнение таких работодателей о вас значения не имеет. Даже если это самые престижные фирмы.

Сам поиск работы занимает от месяца до двух. Обычно, если вы откликаетесь на вакансию, с вами связываются через 2-3 дня. Потом, в течение недели собеседование и\или тестовое задание. И далее, в течение месяца работодатель будет думать над результатами. Прямые отказы, обычно, не присылают. Про вас просто забывают и всё. Так что приготовьтесь к множеству интервью, после которых вы забудете о них. Не надо возлагать надежды ни на какие варианты. Прошли собеседование и погружайтесь обратно в изучение программирования.

4.1.4 «Карма» программиста

Есть один очень любопытный момент при поиске работы. Предположим, вы изучали JavaScript. Добросовестно учили и изучили. Потом ищете работу программистом JavaScript. И вам внезапно предлагают стать, к примеру, системным программистом. Работодатель может сказать, ваш JavaScript хорош. Но вакансии стажёров у него только для системных программистов С. Поэтому можете пойти на стажёра С.

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

4.1.5 Собеседование

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

Если собеседование заочное, тут всё просто. Вам понадобиться хорошая связь, интернет и телефонная. И полтора-два часа времени, когда никто не будет мешать. Если тишина и хороший интернет у вас дома невозможен. Договоритесь с друзьями, что они дадут вам свою комнату с компьютером или квартиру на время собеседования. Видеосвязи обычно не требуется. Скорее всего понадобиться Skype и TeamViewer. Тяжёлые среды разработки, компиляторы, редакторы обычно не нужны. Простого редактора кода, типа Sublime или Notepad++ хватит. Работодатель сам напишет, что нужно иметь для собеседования.

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

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

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

Обычно, размер зарплаты у стажёра, с некоторым багажом знаний по теме, это размер зарплаты обычного офисного хомячка в том же городе. Но если предложили меньше, мой совет, соглашаться всё равно. Допустим работаете сисадмином. Получаете 500$. Думаю, 500$ для сисадмина в средней полосе России потолок. И вот вам предлагают должность программиста (фактически стажёра) за 300$. Если для вас это «отстой». Даже не начинайте ничего изучать. Закройте эту статью. И забудьте о программировании как о будущей профессии.

Ваша первая зарплата разработчика должна быть достаточной чтобы выжить. Дело в том, что вместе с 300$ будете получать опыт и знания на 1000$. Получите опыт коллективной разработки. Вашу работу будут оценивать более опытные коллеги. Получите безграничный доступ к их опыту. Скорее всего ваше портфолио будет прирастать реальными проектами. Всё это сделает вас настоящим и востребованным специалистом. Если не будете лениться и воспользуетесь всем этим. Уже через полгода, догоните свои 500$. И это будет только начало вашей карьеры.

Конечно, может так случиться, «Опыт и знания на 1000$» не получите. В этом случае, просто ищите другую работу.

Во время собеседования вам не стоит ничего боятся. Надо вести себя естественно, но иметь рабочий настрой. Собеседования ведут обычно вежливо. Задача вашего будущего начальника понять, что вы за человек и специалист. Они будут скорее очень внимательно наблюдать за вами.
Вам никто никогда не скажет правдивого мнения о вас. Плохое мнение может настроить вас против. Что не имеет никакого смысла. Вдруг вы ещё пригодитесь. А хорошее, может быть причиной просьб о более высокой зарплате.

Собеседование, это как первое свидание с девушкой. Всё всегда вежливо, культурно и хорошо. Только вот следующее может не состоятся.

4.2 Стажировка

Задача стажировки отшлифовать полученные знания.

4.2.1 Фриланс

Начинающие программисты могут начитаться статеек из интернета, где рассказывается, как здорово быть «фрилансером». Сидеть под пальмами, брать разовые заказы и «не работать на дядю».

Чтобы понять преимущества и недостатки фриланса, надо понимать, работодатель готов вкладываться в ваше обучение, только видя долгосрочную перспективу. Иначе ему проще переплатить готовому специалисту, чем ждать когда начинающие решат сложные задачи. Поэтому фриланс не даёт опыта вглубь. Вам просто никто не даст заказы, если вы не обладаете нужными компетенциями. С другой стороны, фриланс - это первая интересная практика и первые деньги. И за деньги заказчика одновременно можете создать себе портфолио.

Не надо возлагать больших надежд. Просто попробуйте найти заказы в конце самостоятельного обучения. Будет здорово, если у вас получится. Но не надо считать, что прошли стажировку и стали настоящим программистом. Это хорошее занятие, только когда вас ещё не берут серьёзные компании. Либо вы там уже отработали 3-5 лет.

4.2.2 Компании

Как то раз слышал про один экономический закон. Чем больше объединение работников, тем больший доход это объединение получает на каждого работника. Соответственно, в больших фирмах зарплаты у работников обычно выше. Чем у отдельных «фрилансеров». По крайней мере в IT. Именно известные гиганты индустрии платят самые топовые зарплаты и скупают лучшие умы. Поэтому «дядю», собирающего специалистов в кучку и дающего работу, надо любить. Потому что вместе можно заработать гораздо больше, чем по отдельности.

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

Как говорилось ранее, большинство людей «профессионалы». Попав на свою первую работу, они «успокоятся». И их стратегией будет «выживание». Они будут осваивать только знания, необходимые здесь и сейчас. Допустим, надо составлять SQL запросы для кода. Они быстро посмотрят в инете, как сделать запрос под конкретную задачу. И напишут код на этой основе. Потом код попадает на «сode review» к опытному коллеге. Там выясниться, что вместо двух запросов и кучки кода, можно написать один запрос, но с «джойнами». И вот стажёр лезет в инет. Читает там кусок какого-нибудь материала о «джойнах». Переделывает код. Так каждый день. Таким образом большинство стажёров накапливает знания.

Правильно было бы после 3-4 подобных вопросов, связанных с базой данных, взять руководство по этой СУБД и изучить полностью. Этим обычно заняты только «любители». Которым становиться любопытно, что кроме «джойнов», там ещё есть.

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

Стажировка плавно перетекает в обычную работу. Сложно выделить тот момент, когда вы можете считать себя полноценным разработчиком. Наверное когда на ваши вопросы коллегам, кончаются простые ответы. И вы понимаете, большинство проблем придётся решать самим. Обычно этот период полгода. Если хорошо потрудились на предыдущем этапе. Если же поторопились, устроились, дочитав книгу по основному языку наполовину. Значит продолжайте освоение книги и дополнительных технологий.

После стажировки вы вольны делать всё, что угодно. Фрилансить. Делать самостоятельные проекты и прочее. Но мой вам совет. Иногда почитывать связанную с вашей работой литературу. Для повышения квалификации. Если раньше вы читали, как вообще писать код. То сейчас вам можно прочитать, как это делать очень хорошо и правильно. Будьте уверены, вы всегда будете видеть новые горизонты профессиональной подготовки. Не ленитесь! Особенно, если хотите большую зарплату.

5 Заключение

Надеюсь данная статья поможет всем желающим освоить нашу замечательную профессию.
Если вам понравится данный труд. Есть идея рассказать о плюсах и минусах высшего образования в IT.

Теги:

Добавить метки

Комментарии 179

12 вещей, которые помогут вам в учебе и работе. Мы выбрали для вас дюжину лучших ответов со stackexchange на вопрос «Что должен знать программист?».

Если вы только начинаете кодить, то, вероятно, не раз задавались вопросом о необходимом уровне знаний. Мы постарались собрать для вас лучшие ответы со stackexchange, которые помогут вам определиться с базовым набором. Подборка является универсальной и не зависит ни от языка, ни от среды разработки, ни от ОС, в которых вы работаете.

Каждый программист должен знать:

1. Общие понятия и что они значат. Например, шаблоны проектирования, юзабилити, тестирование, стэк и пр.
2. Иметь понимание ООП.
3. Быть крутым хотя бы в одном языке. Ничего сверхъестественного, просто уметь инициализировать переменные, методы и т.д. С этого момента вы сможете учиться быстро.
4. Как читать чужой код.
5. Все время учиться. Учитесь правильно потреблять информацию. Книги, интернет, что угодно.
6. Системы контроля версий. Не обязательно все, главное знать основы, встречающиеся в каждой.
7. Когда нужно просить о помощи, а когда нет.
8. Какую проблему решать. Очень часто программисты тратят огромное количество времени на пустяки.
9. Иногда забывать о самолюбии и признавать ошибки, не принимая их на личный счет.
10. Как думать, как пользователь, а не просто техно-гик программист. Важно понимать, что вашим софтом пользуются люди, поэтому вы должны хотеть сделать их счастливыми.
11. Как отдыхать. Отдых – залог продуктивной работы. Силы воли и кофе недостаточно.
12. Как работать в команде. Успешная карьера программиста наполовину зависит от работы с людьми.

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

Хотите получать больше интересных материалов с доставкой?

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

Быть на «ты» с компьютером

Это самый простой и базовый навык, присущий каждому программисту. Он предусматривает живой интерес к компьютерным технологиям, который уже, в свою очередь, порождает те или иные вопросы у будущего специалиста: для начала - как поставить «винду»? Как найти и взломать модную игрушку? А что такое BIOS, хостинг, ядро системы, ООП? – и понеслось...

Затем тебя начинают дергать родственники, друзья, девушка, подружки девушки, мол, постав программу, почисть систему от вирусов, переставь Windows и т. д. Поначалу это даже нравиться: приятно же ощущать себя компетентным в той или иной области. Но потом появляется закономерный вопрос: почему бы не начать на этом зарабатывать? Конечно, брать деньги со знакомых как-то неохота, но вот продать свои знания и энтузиазм какой-то серьезной фирме – вполне реальная затея. Выбираешь тот или иной язык программирования, начинаешь учить и вновь ощущаешь себя полным нубом..

К чему все это? А к тому, что мир информационных технологий – это мир игрушек, с которыми должно хотеться играть. Именно с интереса к этим «игрушкам» все и начинается. Если его нет, нет и программиста.

Английский

Без английского не обойтись. Чтобы выучить язык программирования, продется перелопатить много литературы, видео-уроков и документации. Почти все (99%) первоисточники написаны на английском языке. Если его не знать, то спектр материалов для изучения сузиться в разы. Соответственно скорость изучения языка программирования значительно снизиться.

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

Разговорный уровень, понимание английского на слух – это дополнительные бонусы. Под словосочетанием «знать английский язык» иметься в виду знать так называемый «технический английский язык». То есть нужно понимать специализированные статьи и документацию, а это далеко не то же самое, что «живое» общение с иностранцами.

Математика

Математика – вопрос не столь однозначный, как изучение английского. Точнее будет сказать, что логическое и абстрактное мышление должны быть на довольно высоком уровне. Математика в ВУЗе или в школе развивает упомянутые навыки, поэтому математическое образование – это большой плюс. Но тем не менее есть множество программистов, которые не имеют математического образования. Есть даже такие, которые не имеют высшего образования вообще. Это говорит о том, что логику и абстрактное мышление можно выработать не только математическими конструкциями.

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

Общительность

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

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

Гибкий ум

Самого ума (умение оперировать нужными знаниями) мало, нужно чтобы он был гибким. Гибкий ум предусматривает умение учиться (пополнять знания, заменять устаревшую информацию на новую). Есть люди вроде бы умные, но очень консервативные. Они владеют неплохим логическим мышлением, высказываются внятно и последовательно, но вот выучить что-то новое, увы, не могут. А есть наоборот – голова очень пытливая, всем интересуется, все нужно, но в голове каша, то есть не может связать всю накопленную информацию в целостную позицию, структурировать ее.

В программировании нужно учиться всегда. Самой важной и тяжелой проверкой способностей начинающего специалиста будет изучение первого языка программирования. Далее будет проще, но нужно помнить, что полностью расслабиться во время профессиональной деятельности не удастся никогда.

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

Где получить образование?

Есть несколько путей к тому, как стать хорошим программистом. В первом случае родители-программисты учат своему ремеслу детей, которым для этого не нужно даже идти в ВУЗ. Во втором случае сказывается модность профессии программиста. После школы всем приходится выбирать свою будущую стезю, поэтому молодёжь особенно активно клюёт на модное направление, связанное с компьютерами. Есть ещё и третий вариант – когда первоначальное увлечение постепенно перерастает в профессию.

Существует несколько способов получения навыков программиста:

  • Самообразование. Способ, как стать программистом с нуля самостоятельно, можно использовать как в чистом виде, так и комбинируя его с другими способами. Есть множество книг, сайтов и компьютерных приложений, позволяющие изучать разнообразные технологии и компьютерные языки. Правда, для начинающих это самый трудный путь.
  • ВУЗ. Если, ещё учась в школе, ученик мечтает стать программистом, то ему лучше пойти в соответствующий ВУЗ, где можно получить не только знания, но и диплом, без которого трудно найти достойную работу. В процессе учёбы не следует пренебрегать и самообучением, ведь в ВУЗе может попросту не быть преподавателей со знаниями новых веяний в этой сфере. ВУЗ нужно выбирать очень ответственно – изучить предлагаемые им программы обучения, предпочитая лучшие технические учебные заведения.
  • Учитель. Отличным вариантом будет найти специалиста, который согласится научить новичка премудростям профессии. Он может порекомендовать лучшие ресурсы и книги, сможет дать множество полезных советов. Такого наставника можно искать в среде знакомых программистов, на их конференциях, онлайн-форумах и тусовках.
  • Специальные курсы с практикой. Можно поискать в своём городе курсы, на которых учат компьютерным языкам и технологиям. В больших городах таких может быть множество, иногда даже с последующим трудоустройством. Не пренебрегайте и онлайн-курсами, они также могут подтолкнуть вас к более глубокому изучению профессии.

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

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

  • Наличием вакансий на рынке труда. Если же на рынке вакансий разработчики на выученном соискателем языке востребованы не будут, то и работу будет сложнее найти. Для ориентирования в этой сфере полезно проштудировать сайты с вакансиями, определив десятку наиболее востребованных языков. После этого можно переходить к следующему моменту.
  • Поскольку языки – это первое, что нужно изучать, чтобы стать программистом, то слишком долгое изучение какого-либо языка может в принципе отбить охоту к освоению данной профессии. Поэтому стоит бегло просмотреть учебную литературу по ним и выбрать те из них, которые позиционируются как лёгкие или показались таковыми самому читателю. Чаще всего, речь идёт о Python, Ruby, PHP.
  • Удовольствие от учёбы. Если писать код на выбранном языке человеку не нравится, то он не сможет получать удовольствия и от последующей работы с ним. Стоит ли сразу загонять в себя в такую кабальную деятельность?

Ещё, что надо знать, чтобы стать программистом – определиться с направлением программирования, которое может быть:

  • Десктопным.
  • Мобильным.
  • Игровым.
  • Низкоуровневым.
  • WEB и прочим.

Относительно лёгкие и наиболее популярные направления – десктопные и мобильные клиенты, разработка под WEB. Каждое направление может работать с одним языком и не работать с другим, что необходимо будет учитывать ещё на стадии выбора языка программирования.

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

Следующим шагом должно стать изучение серверных языков (PHP, Python, Ruby и прочие) и соответствующих им WEB-фреймворков. Полезно также изучить базы данных, поскольку они востребованы почти в каждой вакансии программиста.

Видео о том, как стать программистом с нуля самостоятельно

Первый язык программирования следует выбирать из самых простых и востребованных на рынке. Одним из них является Python, его чаще всего рекомендуют в качестве начального языка программирования. В нём легко читается код программы. С ним не нужно даже быть программистом, чтобы догадаться, что происходит в программе. Несложный синтаксис Python потребует меньше времени, чтобы написать программу, чем та же Java. Сэкономить много времени и нервов поможет огромная база библиотек. Это язык высокого уровня, поэтому не требует заботы о том, что и как размещать в ячейках памяти.

Java может также стать для новичка неплохим выбором в качестве первого языка. Он популярнее «змеиного» языка, хотя и несколько сложнее его. Но инструменты для разработки на Java проработаны гораздо лучше (если сравнить IDLE и Eclipse). Изучение Java поможет легче перейти на работу с низкоуровневыми программными языками.

Очень популярен также язык PHP. С ним легко найти решение вопроса на форуме или найти себе наставника. Объясняется это обилием в мире РНР-программистов, работающих на разных уровнях. Здесь нет нормального импорта, зато одну и ту же задачу можно решить множеством способов, что, впрочем, усложняет обучение. Этот язык предназначен только для WEB.

А вот языки C и С# для новичка слишком сложны.

Ruby лучше изучать как второй язык.

Где и как получить начальный опыт?

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

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

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

Тем, кто пока только учит английский, помогут русскоязычные фриланс-биржи. Можно найти пару десятков небольших проектов, соответствующих текущему уровню знаний или чуть выше его, подать на них заявку. В основном будет много отказов, но если останется пара заявок, то можно получить первый опыт. Другим вариантом для получения практического опыта являются открытые источники, которым нужны новые люди, пусть и новички. Увидев в проекте на GitHub или иных сервисах для хостинга кода баги и заглянув в баг-трекер, можно предложить способы их решения.

Видео о том, как стать хорошим программистом

Что ещё нужно знать будущему программисту?

Что ещё изучать помимо английского и языков программирования – зависит от выбранного направления.

  • Так, WEB-программисту нужно знать JavaScript, CSS, HTML, программисту десктопов – различные фреймворки и API операционной системы, разработчикам мобильных предложений требуются фреймворки Windows Phone, iOS или Android.
  • Алгоритмы нужно изучать всем: найдя подходящую книгу по алгоритмам или отучившись на Coursera.
  • Кроме того, необходимо знание какой-либо базы данных, структуры данных, паттернов программирования.
  • Полезно изучить хотя бы один репозиторий кода. Знать обязательно систему версионного контроля (лучше выбрать наиболее популярный Git).
  • Программист должен знать операционную систему, рабочие инструменты и среду разработки, а так же уметь пользоваться Google.

А Вы бы хотели стать программистом, и почему? Расскажите об этом в