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

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

16.04.2019

С чего начать учится программированию с нуля чайнику?
В этой статье я постарался подробно разобрать, можно ли стать программистом с нуля самостоятельно и какие варианты есть для того, чтобы освоить программирование самостоятельно и начать зарабатывать на этом.
UPD : Тем, кто ищет, с чего начать изучать программирование с нуля в 2018 (или пока только собирается и приступит в 2019:)), сильно повезло благодаря книге Якова Крамаренко «Введение в разработку программного обеспечения». Я искренне рекомендую с ней ознакомится — она стоит того, чтобы обновить статью №1 по рейтингу Google и отзывам читателей для тех, кто изучает программирование самостоятельно.

Постарался дать самый лучший — на мой взгляд — путь. Предупреждаю — он не из легких! Дальнейшее прочтение может стоить вам многих часов интересных занятий:)

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

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

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

Книга по веб-программированию для начинающих

Версия 2016 года есть в переводе: https://courses.prometheus.org.ua/courses/Prometheus/CS50/2016_T1/about .

Лучше пройти курс на английском. И язык прокачаете, и информация посвежее. Хотя сильно курс не менялся — только в 2017 вместо PHP начал использоваться Python.

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

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

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

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

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

1. Разобраться в HTML и CSS

Хороший курс для базового освоения HTML и CSS: https://learn.shayhowe.com/html-css/ (English) или https://webref.ru/layout/ learn-html-css (перевод).

После этого стоит посмотреть на возможности Bootstrap, который стал стандартом де-факто для ускоренной разработки веб-приложений: http://getbootstrap.com/

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

На этом тоже можно зарабатывать — как на фрилансе, так и работая в ИТ-компании, которая специализируется на веб-разработке.

Но раз мы решили стать программистом — двигаемся дальше!

2. Познакомиться с jQuery

Если понравилось — можно продолжить разбираться с frontend и начать изучать Javascript .

Если следом пойдет https://angularjs.org/ или http://backbonejs.org/ — то это путь во фронт-енд разработку. Хорошая специальность, тем более, что такие знания пригодятся любому программисту, который выбрал веб-разработку.

Мой совет — пока остановиться на jQuery и двигаться дальше.

3. Освоить серверный язык программирования

Тут выбор большой. Самые перспективные языки программирования — Ruby, Java, Python, Node.JS (Javascript для сервера).

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

Хороший вариант — язык программирования Python и Django

Плюс — Python и Django научат вас «правильному» программированию. Python стабильно входит в ТОП5-10 самых востребованных языков, а хорошие специалисты в Python одни из самых высокооплачиваемых программистов. Python одновременно простой и понятный для начинающих программистов язык программирования, и при этом используется во многих крупных компаниях и на больших проектах.

Для самостоятельного освоения прочтите «Python для детей» Джейсона Бриггса или посмотрите:

Среди других материалов рекомендую Learn Python The Hard Way . книгу «Простой Python. Современный стиль программирования». И, конечно The Python 2 Tutorial и The Python 3 Tutorial .

Django — возможно лучший фреймворк для веб-разработки

Лучший инструмент на все случаи жизни очень сложно найти. Django имеет все шансы стать таким инструментом для веб-разработки.

С чего начать для изучения Django:

Начните с официальной документации, там очень хороший tutorial: https://docs.djangoproject.com/en/2.1/intro/

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

Вариант №2 — PHP и WordPress

Другой путь — начать с PHP и работы с популярными CMS. Если вы изучаете программирование сами и хотите быстро начать работать — начните с PHP.

Многие считают PHP «не совсем настоящим» языком программирования и для этого есть основания. PHP редко используется в крупных веб-приложениях и заточен только для веб — использовать его в других областях не получится.

С другой стороны — PHP лидирует по количеству запущенных в мире сайтов. На нем основаны самые популярные CMS (системы управления сайтами).

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

Хорошо разобравшись с этим, уже можно найти работу. Под PHP и WordPress очень много сайтов, поэтому работы хватит всем.

Как начать зарабатывать программистом

Многие представляют работу программиста-фрилансера так:

На самом деле это выглядит примерно так:

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

Уже после пункта 2 — освоив HTML, CSS и jQuery — можно идти на фриланс биржи и брать несложные заказы, нарабатывая профиль.

Знаете английский? https://www.upwork.com/

Совсем нет, даже со словарем? http://freelance.ru/

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

Быстрый путь в веб-разработчики

Исходя из моего опыта, на изучение программирования с нуля уйдет от 6 до 12 месяцев в лучшем случае, при этом 6 месяцев — это если вам кто-то помогает.

Чтобы ускорить процесс входа в ИТ — ищите возможность пойти на тренинг (возможно понадобится не один) или найдите человека, который будет заниматься с вами. Реально без человека, который передаст вам свои знания — очень сложно, можно просидеть год за книгами и так и не начать. А со знающим человеком, который может просто рассказать о сложных вещах — намного легче.

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

У меня есть , которые серьезно приняли решение начать карьеру программиста, и хотят ускорить этот процесс. Есть много других курсов. Если вы найдёте себе ментора — человека, который проведёт вас за руку — это заметно сократит ваш путь в разработчики.

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

HTML, CSS, Python и Javascript — это только базовые знания, первый этап. Дальше очень важна практика, изучение алгоритмов и инструментов для разработки.

Если есть вопросы — задавайте в комментариях! Надеюсь эта статья поможет вам сделать первый шаг. Успехов!

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

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

Виды программирования

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

Например…

  1. Веб-программисты. Люди, которые создают различные сайты и продающие страницы. Благодаря этой категории разработчиков в сети появляется множество различных полезных ресурсов с различной полезной или развлекательной информацией. Интернет-магазины, доски объявлений, социальные сети - дело рук этой категории программистов.
  2. Разработчики операционных систем и приложений без привязки к какой-либо конкретной платформе. Эти люди делают то, без чего не будет работать ни один компьютер или гаджет в мире. «Виндовсы», «Линуксы», «Андроиды» и другие системы появляются на свет благодаря этой категории граждан.
  3. Разработка и программирование прикладных распределенных систем и СУБД. Примером такого вида программирования может служить вся выводимая информация отправления и прибытия поездов на вокзале, а также данные о регистрации на авиарейс в аэропорту и наличии свободных мест.
  4. Программинг фреймворков, библиотек dll, платформ и ядер. Проще говоря, создание вспомогательных средств для дальнейшей разработки различных программ, софта, игр и т. п.
  5. Еще одно направление для разработки вспомогательного софта - системное программирование. Программисты этой отрасли создают программное обеспечение с привязкой к той или иной операционной системе. Драйверы для компьютерного «железа», игры, различные компиляторы, программирование ядер системы и многое другое и не менее интересное.
  6. Если все вышеперечисленное для вас не представляет интереса, можете уйти с головой в сферу научного программирования и разрабатывать искусственные интеллекты, системы виртуальной реальности в более глубоком понимании, нежели компьютерные игры; разработка интерфейсов и систем автоматизации для биологов, космонавтов, ученых наполнит вашу жизнь новыми красками.

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

Как стать программистом. С чего начать?

Начинать никогда не поздно. Как уже говорилось выше, сегодня способов для изучения программирования предлагается достаточно много, важно лишь выбрать направление и начинать его изучение. Но, говоря о самообучении, данный вид подойдет не для каждой сферы деятельности. Допустим, самообучение поможет стать разработчиком сайтов или получить поверхностные знания в других сферах. Одно из наиболее выгодных решений - все-таки поступить хотя бы на курсы, благодаря которым вы будете иметь более полное понятие о логике работы различных систем и приложений, изучите нужный вам язык программирования (к примеру C++, Java, Perl, Core и т. п.) и сможете применять его на практике, а также получите знания по дискретной математике.

Изучите различные таблицы, концепции выполнения запросов к ним и алгоритм их выполнения. Хорошими примерами могут служить Exel, MySQL, Paradox.

Веб-программирование

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

Говоря научным языком, веб-программирование - это все приложения и компоненты программ, надстраивающиеся над структурой глобальной сети интернет, и доступ к ним обеспечиваются только с помощью веб-обозревателей (браузеров). Причем соединение обозревателя с интернетом не является обязательным условием, но только в том случае, когда приложение должно быть открыто локально (грубо говоря, с компьютера, на котором оно находится или разрабатывается). Для примера - HTML-разметка страницы или локальный сервер (Denver) позволяют работать с приложениями при отсутствии соединения с сетью.

Все веб-документы работают на основе простейших технологий, таких как:

  • HTTP - протокол передачи гипертекста;
  • HTML -язык гипертекстовой разметки;
  • PHP - один из основных языков программирования;
  • SMTP - почтовый сервер для обмена текстовыми сообщениями между другими серверами и клиентами, включая офисные программы от «Майкрософт»;
  • различные IP-протоколы;
  • FTP - клиент для обмена данными между локальным сервером и хостингом.

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

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

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

  • Изучите алгоритм сайтостроения. С помощью каких инструментов и вспомогательных инструментов они создаются, что такое карта сайта и зачем она нужна, что такое навигация и что такое веб-диаграмма.
  • Детально ознакомьтесь с инфраструктурой сети интернет. Получите базовые знания и первоначальные навыки использования веб-протоколов (HTTP, SSL, POP3, FTP) платформы, на которой вы будете работать основную часть своей деятельности, ознакомьтесь с почтовыми серверами электронных сообщений.
  • Поймите принцип работы основных браузеров (IE, «Опера», «Хром», «Мозилла»).

  • На первых порах выучите язык гипертекстовой разметки HTML и каскадной таблицы стилей CSS (обратите внимание на пакет WYSIWYG).
  • Необходимо иметь представление об XSL и связанных с ним технологиях.
  • Получив навыки работы с гипертекстом, начинайте понемногу применять это на практике, постепенно усложняя задачу.
  • Еще вам понадобятся скриптовые языки, которые работают на стороне как клиента, так и сервера (Java Script, JQuery). На VBScript, который любят советовать всем начинающим из-за его простоты, не обращайте внимания, его не видят современные версии всех браузеров. На эти языки, кстати, обратите особое внимание. С их помощью создаются все современные необычные 3D-эффекты, работающие на сайтах. Но будьте внимательны, этот язык довольно сложен, поэтому начинайте с чего-нибудь самого простенького и, как и в других случаях, постепенно следуйте к более сложным процедурам.
  • Выучите способы внедрения сторонних модулей на сайт, допустим, платежного агрегатора в интернет-магазин.

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

Разработка программ для ПК

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

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

Никогда не стесняйтесь браться за начальный уровень, который преподают еще в школе на уроках информатики. Да, вы давно из этого выросли, но вряд ли вы все это помните, и уж точно спустя много лет (если, конечно, не было соответствующей практики) не сможете применить это на деле. Начните с элементарных языков Stratch или Basic. Это действие не столько обязательно, сколько желательно для того, чтобы облегчить дальнейший процесс обучения. Помните, как у вас в классе по монитору бегал маленький паучок, после того как мы в редакторе прописали необходимый алгоритм действий? Вот и вспомните это еще разок. Повторение - мать учения!

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

Продолжайте практику изучением систем продвинутого моделирования (UML, ORM).

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

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

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

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

Знаете уже два языка? Прекрасно! Теперь пробуйте сравнить их, для выявления плюсов и минусов для себя, чтобы выбрать наиболее практичный. Обычно это делают таким образом…

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

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

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

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

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

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

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

Разработка и программирование прикладных распределенных систем и СУБД

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

Для начала обратите внимание на ваше домашнее сетевое окружение. Каким образом компьютер подключен сети? Это может быть прямое соединение через сетевую карту, модем, свитч или Wi-Fi-маршрутизатор. Каким сетевым протоколом выполняется подключение?

Узнайте, что такое Open System Interconnection (даем подсказку - это международный формат стандартизации обмена данными между различными устройствами. Т. н. OSI). Далее ознакомьтесь с терминами TCP, IP, Ethernet, LAN, WAN, UDP и двигайтесь дальше.

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

И поехали изучать язык распределенного программирования. Если вы планируете писать код под OS Windows, подойдет любой язык, который поддерживает WSH. Под «Линуксом» же используют Perl и Bash.

Также для работы вам будет необходим JavaScript. Почему? На это есть несколько причин.

  1. Его поддерживают все скрипт-хосты всех операционных систем. «Виндовс» поддерживает пакеты по умолчанию, а модификации Linux имеются дополнения для поддержки JavaScript.
  2. Этот скрипт является самым простым из всех существующих.
  3. Основой Java является синтаксис ALGOL, что позволит в дальнейшем изучить другие языки и выбрать второй язык для упрощения работы.
  4. С помощью JavaScript можно ближе познакомиться с программированием веб-документов на стороне клиента.

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

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

Переходите на языки программирования для стационарных ПК. Выбирайте тот язык, который позволяет работать с разными парадигмами (к примеру, Pyton), усвойте его основы. В последнее время популярна связка JavaScript + C#. По утверждению тех же специалистов, эта связка имеет следующие преимущества.

  • Эти языки освобождают исполнителей, работающих в большом коллективе, от необходимости внедрения кода иногда трудно совместимых языков. Связка Ява + Си имеет готовые, уже объединенные блоки кода, позволяющие выполнить поставленные задачи в других программах.
  • Ими поддерживается событийно-управляемые, объектно-ориентированные и процедурные методы программирования.
  • Надстройка фреймворка, распределенная по умолчанию.
  • Можно пользоваться готовыми пакетами открытого исходного кода и встроенных фреймов, вследствие чего есть возможность использования «шаблонного» кода.

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

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

Изучите, как происходит разработка сервиса и компонентов на вашем языке.

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

Библиотеки dll, платформы и ядра

Это каста программистов, которые уже переросли программирование приложений и перешли к более сложному формату разработок. Они создают все платформы, включая веб, и различные вспомогательные библиотеки. Наверняка при установке софта на свой компьютер вы наблюдали установку таких приложений, как Microsoft Visual C++ Redistributable, MS Framework и им подобных. Как раз такие программисты и разрабатывают эти приложения, также они занимаются программированием различных CMS и хостингов для сайтов.

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


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

Системное программирование


  1. Для начала необходимо чётко разобраться в том, что именно включает в себя системное программирование. Системные программисты преимущественно имеют дело не с определёнными задачами, а с научной областью программирования, поэтому не следует зацикливаться на конкретной платформе.
  2. Будет целесообразным придерживаться рекомендаций в начальных трёх пунктах для программистов приложений для компьютеров стационарного типа.
  3. Имеет смысл также пройти хотя бы начальный курс по линейной алгебре.
  4. Обязательно стоит освоить курс по расчётным методам.

  5. Дополнительно изучите курс по дискретной математике и/или логике.
  6. Ознакомьтесь с операционными системами различного характера при отсутствии надстроек. Подобное знакомство можно осуществить таким способом:
  7. Ознакомьтесь с учебной литературой, содержащей основы архитектуры компьютерного оборудования либо пройдите соответствующий тематический курс.
  8. Проанализируйте характерные различия разнообразных аппаратных платформ.
  9. Освойте начальные основы языка ассемблера предпочитаемой вами аппаратной платформы либо операционной системы. Спустя некоторое время вам необходимо будет изучить язык ассемблера иных систем и платформ.
  10. Пройдите курс по изучению языков ANSI C и C++, наряду с этим освойте базовые принципы процедурного программирования.
  11. Ознакомьтесь с основными библиотеками на C и C++ и начинайте использовать их на выбранной платформе. Следует уделить повышенное внимание при этом библиотеке активных шаблонов (ATL) и библиотеке стандартных шаблонов (STL).
  12. Чтобы основательно разобраться в том, как именно C и C++ станет работать на выбранной вами платформе, следует обратиться за необходимой информацией к интернет-источникам, литературе и соответствующим тематическим курсам.
  13. Начинайте создавать более высокий по уровню сложности код на C/C++.
  14. Ознакомьтесь с нюансами Assembly более сложного уровня.
  15. Проштудируйте курс разработки операционных систем.
  16. Разыщите и изучите документацию, соответствующую выбранной вами платформе. Вам будет значительно легче использовать операционную систему, базирующуюся на Unix. Но для этого необходимо достаточно хорошо разобраться в данной системе.
  17. Начинайте использовать приобретённые знания. Для начала сделайте небольшие системные утилиты. Для этого будет целесообразно осуществить следующее:
  18. Осваивайте языки в наиболее логическом порядке. Только в этом случае будет иметь значение, какой из языков программирования является у вас первым. Для начала желательно освоить ANSI C, а не C#, Java или D. После этого можно приступать к C++. Системный программист обязан владеть такими умениями:

Научное программирование


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

  1. Не бойтесь обращаться за советом к более опытным коллегам. Если самостоятельные поиски решения возникшей проблемы не приносят ожидаемых результатов и вы в течение продолжительного времени не можете из-за этого двинуться с места, целесообразно обратиться за помощью к более опытным коллегам. Возможность учиться у своих коллег трудно переоценить. Самое главное: как можно более чётко формулируйте вопрос, нередко бывает и так, что в нём заключается необходимая подсказка.
  2. Цените собственный труд. Не стоит относиться к поставленной задаче как к одолжению или малоприятной, но неизбежной необходимости, пользы от этого не будет. Скрупулёзно подходите к оформлению кода, структурируйте его, делая понятным и читабельным не только для себя, не забывая при этом согласовывать его с принятыми в команде либо компании стандартами. Педантично вычищайте полученный результат, исправляя даже малейшие, не особо заметные недочёты. Например, если в процессе работы интерфейс сместился на несколько пикселей влево сверх нормы, не пожалейте времени на то, чтобы вернуть его на полагающееся место. Обязательно проводите полную проверку итогового результата работы. В итоге ваши усилия будут непременно замечены и оценены по достоинству.
  3. Постоянно развивайтесь. Для того чтобы стать действительно востребованным в этой сфере специалистом, вам необходимо будет постоянно развиваться, следить за новинками в инновационных технологиях, постоянно анализировать новые тенденции. Поскольку подрастающее поколение развивается достаточно быстро и создаёт ощутимую конкуренцию, необходимо постоянно оттачивать собственное мастерство для быстрого и эффективного освоения технологий.
  4. Учитесь чётко формулировать мысли и правильно доносить свои идеи. По мнению основателя Fog Greek Software, известного программиста Джоэла Спольски, основная разница между относительно неплохими и действительно выдающимися программистами заключается не в количестве изученных ими языков программирования и не в том, какому из них они отдают предпочтение, а в умении убеждать других и грамотно доносить до них собственные идеи. В этом и заключается их основное мастерство. Программисты подобного уровня пишут доступные для понимания комментарии и технические спецификации, поэтому создаваемый ими код достаточно понятен другим программистам, которые смогут впоследствии использовать и развивать его без особых трудностей.

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

По утверждению опытных компьютерщиков, чтобы стать программистом и овладеть всеми нюансами профессии, нужно постоянно программировать. Много, долго и порой даже нудно. Ведь, как известно, написание кода занимает у программиста 30% времени, остальные 70% уйдут на поиск ошибок, а затем их устранение. Потому подумайте как следует, а стоит ли оно того?

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

7. Для мотивации изучения и становления вами программистом, может послужить высокая заработная плата. Зарплата зависит от , в которой вы собираетесь работать. Но если вы квалифицированный специалист знающий свое дело, то любой работодатель не пожалеет высокой зарплаты. Знайте это. Например, в Москве средний по знаниям специалист – программист базы данных может получать от 1000$ до 2000$. У высококвалифицированных специалистов максимальный уровень зарплат не подсчитать.

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

Чтобы стать хорошим программистом нужно не жалеть свободного времени и эволюционировать постоянно на этом поприще (в этом вам помогут специализированные форумы, к примеру mastertalk.ru). Удачи и успехов вам.

Видео по теме

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.

Теги:

  • программирование
  • карьера программиста
  • учеба в it
  • самостоятельное изучение
  • самообразование
  • стажировка в it
Добавить метки

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

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

Что необходимо учить, чтобы овладеть этой профессией?

Эти и многие другие вопросы мы рассмотрим в этой статье. Отдельное спасибо за создание этой статьи отправляется в фонд Галины, которая задала их в конкурсе «Задай вопрос и выиграй приз».

Программист - кто это?

Поговорим немного о самой профессии программиста.

Программист - это человек, который пишет программы. Это если максимально просто упростить данное понятие.

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

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

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

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

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

Каким школьным предметам стоит уделить пристальное внимание?

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

Для программиста математика и информатика - основополагающие предметы, но не единственные нужные программистам.

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

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

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



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows