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

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

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

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

Как я стал программистом

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

Первый шаг - резюме

Первая и основная проблема, с которой сталкиваются новички, - резюме. Без адекватного, цепляющего резюме тебя не будут приглашать на собеседования. Но как быть тем, у кого совсем нет опыта работы? Для того чтобы «не с пустыми руками» идти к HR, мы с другом вписали мне в резюме целый год опыта работы над его проектом, над которым якобы вместе трудились.

Зарплатная политика

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

Позор и стыд

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

Первая работа

В конце концов меня пригласили на собеседование в филиал одной датской компании, где я ответил на фундаментальные вопросы и приятно удивил всех своим английским. Меня взяли на должность Junior Java developer с одним условием - первые три месяца я буду проходить курс SCJP (Sun Certified Java Programmer), который восполнил бы мои пробелы и выковал бы из меня более подготовленного специалиста. Что может быть лучше, чем оплачиваемая стажировка без нужды работать (выдавать свою некомпетентность)? В этой компании я проработал полгода, чтобы через несколько месяцев пойти на повышение в компанию покрупнее.

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

  1. Резюме. Оно должно быть правильно отформатированным и написанным исключительно на английском. Если не хватает опыта, то его можно (и нужно) придумать, но следует подготовиться отвечать за каждое написанное в резюме слово. Например, если у тебя там написано JMS (Java Message Service), то как минимум следует пройти хоть одну обучалку и поиграться с JMS, поделать какие-нибудь примеры, пускай это и будет банальное «Hello, world!». Теперь будет удобнее пускать пыль в глаза, вы ты и правда «работал с JMS».
  • Выучи азбуку программирования. Если ты ещё можешь позволить себе «плавать» на глубоких уровнях каких-нибудь комплексных технологий вроде Struts и Spring, то неправильные ответы на элементарные вопросы тебе никогда не простят. Если тебя ночью разбудить, то ты должен уметь рассказать про ООП, наследование, инкапсуляцию, полиморфизм и другие базовые концепции, а также суметь объяснить это всё на примерах.
  • Практика. Научиться программировать можно, только лишь программируя. Это больно и неприятно (если ты не программист), но другого пути нет. Единственный способ перестать бояться задачек на собеседованиях - порешать их дома самостоятельно.
  • Читай книги и проходи туториалы по Java только на английском Абсолютно все термины программирования проще понимать на языке оригинала, то есть на английском. Читать техническую литературу по Java на русском - себя не уважать. Почему? Потому что, чтобы понимать что-нибудь в духе «…модуль таблицы во многих смыслах представляет собой промежуточный вариант, компромиссный по отношению к сценарию транзакции и модели предметной области», нужно быть поистине гением, которым ты вряд ли являешься.
  • Выучи, наконец, английский! В первую очередь это касается разговорного английского. Сложно сосчитать то огромное количество толковых программистов, которых на моей памяти забраковали по одной единственной причине - неудовлетворительный уровень разговорного английского. Нет, если ты, конечно, собираешься работать программистом где-нибудь в отечественной компании, то твой уровень языка не будет играть важной роли. Но если ты хочешь попасть на работу в международную компанию, то сам бог велел выучить язык. Уровень твоего английского будет конвертироваться в дополнительные сотни долларов прибавки к зарплате.
  • Знай рынок. Походи по вакансиям, почитай требования, поспрашивай друзей-программистов, сколько они получают. Используй сервисы, которые позволят составить более полную картину о рынке IT. Ты был бы удивлён, узнав о том, насколько велико количество талантливых программистов, которые получают в два раза меньше, чем могли бы, только лишь по причине своей лени и нежелания держать нос по ветру.
  • Торгуйся. Нет ничего предосудительного в том, чтобы торговаться за зарплату. Твоим аргументом в споре может быть как хороший английский, так и предложение о работе в другой компании. Последний аргумент особенно хорошо работает: «Да, но мне в Luxoft предлагают на 300 долларов больше, почему я должен соглашаться на ваши условия? Может, мы могли бы найти компромиссный вариант?». В своё время мне пару раз удалось выторговать дополнительную сотню долларов к своей зарплате, и через год эта сотня долларов дала мне дополнительные 1 800 долларов дохода на ровном месте. Ты должен понимать, что даже для небольших зарубежных IT-компаний лишняя сотня баксов как капля в море.
  • Найди себе ментора. Хорошо, если у тебя будет более опытный товарищ, который сможет помочь советом и ответить даже на самые глупые вопросы. Благодаря его опыту и моральной поддержке ты будешь продвигаться в программировании быстрее, чем в одиночку. Если нет ментора, то неплохо сходить на какие-нибудь курсы по программированию, которые не только дадут более полную картинку того, чем занимается программист, но и позволят познакомиться с более опытными людьми. Кто знает, может быть, кто-нибудь из них захочет стать твоим ментором.
  • Начни свой проект. Даже если он будет образцом самых худших практик кодинга и ты его никогда не закончишь, по крайней мере, у тебя будет то дело, ради которого захочется разбираться в программировании и изучать новые технологии. Кроме того, у тебя появится дополнительная тема для задушевных бесед на собеседованиях.
  • Ищи работу летом. Во-первых, когда все в отпусках, в компаниях более остро ощущается нехватка кадров и повышается вероятность того, что тебя позовут на собеседование. Во-вторых, поскольку твои конкуренты-соискатели тоже на отдыхе, у тебя опять-таки повышаются шансы быть замеченным HR.
  • Никогда не сдавайся. Даже если кажется, что ты заваливаешь собеседование, важно проявить стойкость и продолжить попытки решить задачу, какой бы сложной она ни казалась. Кто знает, может быть, тебя именно в этот момент проверяют на усердие в работе!
  • Избегай заданий на компьютере. Нет способа быстрее раскусить непрофессионала, чем сразу же бросить его в пекло программирования. Твоя задача - постараться перевести все беседы на высокий уровень, где обсуждаются общие подходы и концепции, но никак не конкретная реализация в решении той или иной задачи. Если тебе дали бумагу и ручку и попросили записать решение, то попроси возможность нарисовать его схематически. Таким образом, удалившись от синтаксиса конкретного языка, ты не только убережёшь себя от каких-нибудь режущих глаз ошибок, но и покажешь, что способен мыслить абстрактно, не вдаваясь так уж сильно в детали.
  • Начинай говорить первым. Избегай ситуаций, когда в воздухе виснет пауза, во время которой в мозгу у интервьюера может созреть очередной коварный вопрос. Как только происходит какая-либо заминка, начинай рассказывать что-нибудь из того, что ты хорошо знаешь. Постарайся навязать интервьюеру свою игру.
  • Старайся говорить правду. Если ты никогда не писал PL/SQL процедуры, то лучше об этом сказать прямо. Возможно, в этом для тебя будет минус, однако ты убережёшь себя от нужды выкручиваться, отвечая на вопрос, в котором ничего не смыслишь. Опытный интервьюер за версту почувствует твои пробелы в знаниях.
  • Бойся маленьких компаний. В небольших компаниях, как правило, небольшие команды. Чем меньше в команде людей, тем быстрее тебя раскусят. Твоя цель - большая и неповоротливая корпорация, где ты сможешь выиграть для себя немного времени.
  • Соблюдай дресс-код. Если ты придёшь на собеседование на должность программиста в шикарном костюме, то это вызовет больше подозрения, чем если ты явишься в шортах или потёртом свитере. Не лишним будет также нацепить очки, мол, «эдакий я книжный червь».
  • Конечно, кто-то знающий может отметить, что приведённый выше рецепт - это скорее способ стать кодером, чем программистом, и он где-то будет прав. Однако дело всё в том, что вы никогда не найдёте вакансию с заголовком «Требуется плохой кодер». Всем нужны программисты. Желательно senior. У которых более пяти лет опыта работы на корпоративных проектах и которые одинаково хорошо владеют сразу несколькими языками программирования, при этом досконально разбираются в СУБД, умеют писать bash-скрипты, хранимые процедуры, знают в совершенстве Linux, TCP/IP, обладают лидерскими качествами, стрессоустойчивостью, коммуникабельностью и ещё массой навыков, «без которых никак».

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

Практически ежедневно, находясь за своим компьютером или ноутбуком, мы пользуемся различными разработками в сфере 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, известного программиста Джоэла Спольски, основная разница между относительно неплохими и действительно выдающимися программистами заключается не в количестве изученных ими языков программирования и не в том, какому из них они отдают предпочтение, а в умении убеждать других и грамотно доносить до них собственные идеи. В этом и заключается их основное мастерство. Программисты подобного уровня пишут доступные для понимания комментарии и технические спецификации, поэтому создаваемый ими код достаточно понятен другим программистам, которые смогут впоследствии использовать и развивать его без особых трудностей.

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

«Как понять, смогу ли я стать программистом?»

За разъяснениями мы обратились к нашим экспертам, а полученные ответы предоставляем вашему вниманию.

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

Переходим на следующую стадию. Поставь среду разработки для С++ или С# или еще какого-нибудь языка. Справился и каждый успешно пройденный шаг тебе доставлял удовольствие — хороший признак. Двигайся дальше.

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

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

Повысить Понизить

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

Повысить Понизить

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

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

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

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

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

В конце спроси себя: «Смогу ли я стать программистом»? Если твой ответ «Да, смогу», то ничто тебя не остановит.

Повысить Понизить

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

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

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

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

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

Повысить Понизить

Для начала вам нужно понять, что считать профессией программиста. Программирование давно перестало быть уделом избранных, способных мыслить байт-кодами и в уме следить за аллоцированной памятью. Сегодня в мире есть много современных языков, синтаксис которых максимально близок к простому английскому. К примеру, User.find_by(name: "Вася").destroy в Ruby (on rails). Знания этих команд достаточно для того, чтобы писать небольшие сайты, блоги, интернет-магазины. Если вы хотите работать на этом уровне, то вам достаточно выбрать понравившийся динамический объектно-ориентированный язык (Ruby, Python) и пройти курс по нему, или прочитать книгу, их достаточно много для каждого языка. Также можно попробовать себя в фронтенд-разработке, выучить JavaScript а затем освоить фреймворки к нему.

Если вы хотите писать более сложные системы, необходимы знания абстрактной логики, их можно получить изучая высшую математику в институте (в идеале дискретную, но, на самом деле, матанализ тоже весьма неплохо развивает мозги). Можно читать книги по дискретной математике и алгоритмам (Стивен Скиена «Алгоритмы. Руководство по разработке», Томас Кормен «Алгоритмы. Построение и анализ», Род Хаггарти «Дискретная математика для программистов», Дж. Андресон «Дискретная математика и комбинаторика») и просто практиковаться в программировании. Также очень полезно было бы выучить низкоуровневый язык, например С (Керниган, Ритчи «Язык программирования С») — для общего понимания принципов работы программ.

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

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

Если говорить про простейшую разработку web сайтов, то тут не должно быть никаких сомнений, справится каждый. Если же вы хотите пойти дальше, но при этом считаете, что математика и логика это совсем не про вас, то можете попробовать игровые сайты для разработки алгоритмов:
https://www.codingame.com/
https://www.codewars.com/
На них надо решать простейшие (и не очень) алгоритмические задачи на любом понравившемся вам языке программирования. Не могу сказать, что это очень полезно для обучения реальному программированию, но если вам понравятся эти игры, то вам точно понравится заниматься серьезной разработкой.

Повысить Понизить

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

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

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

Повысить Понизить

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

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

Профессиональный «голод» обретает новые характеристики. Чтобы преуспеть, нужно владеть фундаментальной базой: качественным алгоритмическим фундаментом, сильной математикой, быть ответственным и готовым постоянно учиться. Если все это у вас есть – Google, Amazon, Facebook и Attack Killer готовы пригласить вас на собеседование прямо сейчас!

Повысить Понизить

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

Но лучше переформулировать вопрос в «смогу ли я стать хорошим программистом?» На мой взгляд, хорошим программистом можно стать, если:
1. Любите программирование и испытываете удовлетворение от самого процесса продумывания и написания кода.
2. Вам нравятся качественные и удобные программные продукты, и вы хотите разрабатывать именно такие.
3. Испытываете интерес к развитию IT, даже если не все тренды вам нравятся.
4. Обладаете развитым критическим мышлением и способностями к анализу.
5. Можете работать в состоянии потока и концентрироваться на одной задаче часами.
6. Вам не все равно, чем вы занимаетесь и с какими людьми работаете.
7. Готовы работать в команде для достижения общей цели, даже если не любите общаться с людьми.

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

Первый шаг

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

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

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

Тут в самом низу вы можете увидеть то, что будете изучать, если оплатите обучение.

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

Что должен знать веб-программист?

Итак, как видите, это:

  1. HTML/CSS — базовые языки разметки и оформления веб-страниц, без них невозможно представить себе сайтостроение. Это — основа, самые простые технологии, которые вы должны изучить в первую очередь.
  2. PHP — основное оружие веб-программиста. С помощью этого языка создаются социальные сети, интернет-магазины, фреймворки, движки и много чего другого. Именно благодаря нему работает большинство онлайн-сервисов, формы комментариев, регистрации на сайтах и т.д.
  3. JavaScript — язык программирования специально для веб, с его помощью страницу можно программировать так, чтобы при различных событиях ее дизайн менялся. Например, при клике по окну оно расширялось и т.д. Примеров можно привести очень много.

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

Где все это выучить?

В моем понимании есть 3 основных способа обучаться на веб-программиста:

  1. Читать бесплатные статьи и материалы в интернете, смотреть бесплатные видеоуроки и курсы. Так вы можете получить базу, но дальше начального уровня не продвинетесь!
  2. Покупать платные курсы. Этот вариант избрал я, так как сайтостроение я изучаю не для работы на компанию, а на самого себя, поэтому меня устраивает обучение по курсам. 1 толковый курс в рунете стоит от 3 до 7 тысяч рублей. Лично я потратил на курс всего около 40-50 тысяч рублей и не жалею, т.к. уже получил много знаний, которые смог применить на практике и начать зарабатывать.
  3. Купить полноценное удаленное обучение с наставником. Это самый дорогой вариант, который обойдется в 40-150 тысяч рублей. Конечно, в плане эффективности он является самым лучшим. Такое обучение, к примеру, можно купить в онлайн университете Geekbrains .

Хорошими площадками для получения базовых знаний по html, css, php и js будут Magisters.org , HtmlAcademy.ru и премиум раздел Web4myself.com (хоть он и платный, но доступ в него всего 500+ рублей в месяц, а уроков там тьма).

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


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

По итогу можно получить такое приличное резюме:


И такие навыки:

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

Например, за одиннадцать месяцев Geekbrains обещает вас обучить таким технологиям: HTML/CSS, PHP, JS, NodeJS, AngularJS, Yii . С другой стороны, для того, чтобы найти простую работу или начать делать сайты для себя, вам необязательно знать все это. Я уже говорил, что является базой. Это html, css, php, javascript. Но дело в том, что с каждым годом требования к веб-разработчикам растут и если вы хотите серьезных результатов, так или иначе придется изучать современные технологии и тенденции.

Курсы по PHP и фреймворкам


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

Книги тоже имеют право на жизнь. Для расширения своих знаний в любой сфере читать их полезно. И по php почитать можно много чего. Например, такое.

Необязательно знать все

Если вы изучили только javascript (а php — нет), то сможете работать front-end разработчиком, а если наоборот — попробуете свои силы в back-end . В общем-то, даже имея небольшие знания, уже можно что-то заработать на сайтостроении, но чем больше вы будете знать, тем больше ваш потенциал.

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

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

В уме я всегда держал, что буду работать программистом. Так в итоге и получилось.

Объявление о работе я нашел в

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

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

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

Я прочитал всего одну книгу по программированию

Можно сказать, что я самоучка.

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

До того как я начал серьезно учиться программировать на Java, я прочитал всего одну книжку о программировании. Это был курс «С++ за 21 день».

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

Почему я выбрал Java?

  • На мой взгляд, Java – едва ли не единственный язык программирования, от начала изучения которого до получения конечного продукта проходит не так много времени. Возможно, я такой человек, которому хочется поскорее «пощупать» результат. Чистая теория меня не очень привлекает.
  • Передо мной стояла определенная цель. Я понимал, что работу программиста мне получить будет крайне сложно, необходимо на будущем собеседовании показать хоть что-то и сказать: «Опыта работы нет, диплом тоже – не совсем то, что нужно, но зато есть вот это – посмотрите». Но, к счастью, я получил работу через стажировку.
  • Сейчас есть огромное количество разнообразных руководств для разработки приложений для ОС . Так что здесь у меня буквально все сходилось: и материалов для обучения достаточно, и существовала возможность сравнительно быстрого получения легко осязаемого результата.

Одним словом, после короткого курса C++ я взялся за какое-то руководство по Java для начинающих. Не помню, как оно называлось, помню только, что я бросил его читать, не добравшись и до середины. Мне хотелось поскорее «прогать».

Потом я видел очень много руководств для начинающих и могу сказать точно: принципиальной разницы между ними нет. Они примерно одинаковые. Чтобы что-то найти, нужно просто забить в запрос «book for java starter» – и в путь.

Много ответов на свои вопросы я нашел в этом телеграм-канале.

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

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

Конечно, в программировании без знания английского на хорошем уровне – просто никуда. Так что тем, кто знаком с английским на уровне Google.Переводчика, я могу посоветовать только одно: сначала прокачайте свой английский. Все остальное – потом.

Конечно, не все так грустно: на русском языке есть «Инструменты для разработчика Google». Но начинать в любом случае нужно не с этого.

Я знаю, что существуют разнообразные онлайн-курсы по программированию – платные и бесплатные, – но так вышло, что у меня получилось обойтись без них. Что еще раз говорит в пользу моего изначального аргумента, что программировать можно научиться без чьей-либо помощи.

С чего я начал «прогать»

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

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

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

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

  • Stackoverflow.com.

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

  • Репозитарий с исходниками Github.com.

Он очень помог учиться на чужих примерах.

  • YouTube

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

Свое первое приложение я разработал за месяц

Короче говоря, приложение я сделал буквально за месяц. Самыми полезными источниками знаний стали Developer.android.com и все тот же Stackoverflow.com. Самое интересное, что рутинный процесс выкладывания приложения в Google Play занял целых два месяца. Хотя, может быть, все продолжалось так долго, потому что после разработки мой запал немного подостыл. А немного позже я разработал веб-версию приложения, прочитав книгу Beginning Java EE 7.

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

Вдобавок я не хочу ни в коем случае умалять значение университетского образования и говорить: «Зачем все это нужно? Вот, посмотрите, все получилось и так». Нужно. Университет на самом деле дает очень много и, может, самое главное – воспитывает привычку учиться.

И все же: программировать можно научиться самому. Теперь я это точно знаю.