Профессия: программист. не всё однозначно

Содержание:

Среда разработки

Код на python может быть помещен в файл с расширением .py и отправлен интерпретатору для выполнения. то классический подход, который обычно разбавляется использованием среды разработки, например pyCharm. Однако, для python (и не только) существует другой способ взаимодействия с интерпретатором — интерактивные блокноты jupyter, сохраняющие промежуточное состояние программы между выполнением различных блоков кода, которые могут быть выполнены в произвольном порядке. Этот способ взаимодействия позаимствован у блокнотов Mathematica, позже аналог появился и в MATLAB (Live script).

Таким образом вся работа с python-кодом переносится в браузер. Получившейся блокнот можно открыть с помощью nbviewer.jupyter.org, github (и gist) умеют самостоятельно показывать содержимое таких файлов (преобразовывать).

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

Николай Добровольский, вице-президент Parallels:

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

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

Подобные навыки можно получить на курсах product management, program management и других дисциплинах. Десять, двадцать, тридцать лет назад слово «программист» объединяло в себе все, что так или иначе было связано с компьютерами, системами связи, программированием и так далее. Сейчас же все очень быстро развивается. Огромное количество технологий появляются каждый день. Что-то появляется, что-то умирает достаточно быстро.

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

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

Правило «10 000 часов», предполагающее трансформацию специалиста из «чайника» в профессионала» через практический опыт никто не отменял. Если говорить о книгах, то, на мой взгляд, одна из интереснейших работ в области эргономики была написана Дональдом Норманом и называется «Дизайн привычных вещей» (Designer everyday things). Написанная в 1988 году, она и по сей день дает основные ответы на вопросы создания удобных вещей. 

Но чем конкретно занимаются программисты?

  • Разработка мобильных приложений — одна из топовых специальностей в программировании, в которой ежедневно открываются сотни вакансий. Всего есть три вида мобильной разработки:
  • iOS-разработка подразумевает создание приложений для iPhone. Работа с этой системой требует наличия MacBook или компьютера Mac, поэтому новичкам придется вложить на старте профессии от 100 000 рублей.
  • Android-разработка имеет низкий порог вхождения — для старта подойдет любой ноутбук на Windows. Выбор устройств для разработки гораздо шире: флагманские, средние и бюджетные линейки Samsung, Xiaomi, Honor и еще десятка производителей.
  • Кроссплатформенная разработка для двух операционных систем одновременно.

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

Веб-разработка

  • Frontend — программирование видимой части сервиса, с которой пользователь взаимодействует в браузере. Сюда входят, например, внешний вид сайта, выпадающее меню, взаимодействие с кнопками, формы обратной связи и многое другое.
  • Backend — работа с внутренней частью сайта или веб-приложения, невидимой для пользователя. Backend-разработчики отвечают за то, чтобы информация после заполнения формы на сайте попадала в базу данных, а при необходимости данные быстро подгружались из базы и передавались на фронтенд, видимую часть сайта. Например, когда вы просматриваете новости, код, написанный на бэкенде, извлекает из хранилища свежие публикации, передает их на фронтенд, и пользователь уже видит привычную ленту.
  • Fullstack — это работа со всем сразу. Термин придумали для программистов, знающих несколько языков и совмещающих навыки фронтенда и бэкенда. Некоторые fullstack-специалисты берут на себя мобильную разработку, работу с сервером или UX-дизайн. Их многофункциональность может стремиться к бесконечности.
  • Разработка игр или геймдев — игровые разработчики участвуют в создании компьютерных и мобильных игр разной сложности, от простых платформеров в 2D до крупных AAA-проектов уровня GTA, «Ведьмак» и Cyberpunk 2077.
  • Системное программирование — это создание программного обеспечения для операционных систем. Не самое популярное направление разработки, зато в нем меньше конкурентов. Например, системный программист занимается разработкой драйверов, которые помогают системе взаимодействовать с другими устройствами: подключить колонки к ноутбуку с помощью аудиодрайвера или принтер с помощью драйвера, разработанного под конкретную модель.

Александр Баталов, технический директор Zavento:

Особенно рекомендую книгу «Совершенный код» Стива Макконнелла, ее можно назвать азбукой программирования. В ней описаны многие аспекты разработки, начиная от именования переменных и заканчивая личностными качествами инженера. Они будет полезна для прочтения как новичкам, так и опытным разработчикам (об этом, кстати, пишет и сам автор). В своей работе я ее нередко использую, ссылаясь на отдельные главы при обучении молодых специалистов. Эту книгу надо штудировать от корки до корки, даже предисловие является интересным и полезным. Читается легко, информация представлена в структурированном виде. Кстати, глава 35 этой книги прекрасно ответит на вопрос: «Какие книги и ресурсы стоит изучать».

Ну, и кончено, нельзя обойтись без реального общения. Я сейчас говорю про профильные конференции, где можно пообщаться вживую, расширять свой профессиональный круг знакомств, а также найти потенциального работодателя (если это необходимо). Лично мне нравится it-конференция «Стачка», ежегодно проводимая в Ульяновске в апреле.

Роман Моисеенко, технический директор и сооснователь Мерката:

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

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

Не теорией единой

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

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

У вас математический склад ума

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

«Нужно дружить с математикой, как говорил один русский ученый, „она ум в порядок приводит“» — соглашается Сергей Стрелков, руководитель направления собственных разработок компании КРОК.

Любимый вопрос новичков или «насколько программисту нужно знать математику?»

«„Математический склад ума“ в контексте программирования вовсе не синонимичен типичному представлению об „ученом-математике“, которых обычно изображают в фильмах. Программист — это не Рассел Кроу в роли нобелевского лауреата Джона Нэша, погруженный в цифры и постоянную аналитику. В 90-95% своей работы программисты используют только базовый математический аппарат, и лишь в 5-10% задач необходимы глубокие знания математики. Поэтому, мне кажется, что нет особого требования к наличию чересчур глубоких познаний в теории графов или теории вероятности для программиста, но это всегда будет считаться плюсом» — считает Антон Енакиев, Вице-президент Acronis по разработке.

Какая именно нужна математика рассказывает Алексей Светлов, руководитель отдела разработки технического департамента ООО «Стрим»: «Основа программирования — дискретная математика. И хороший программист должен любить и понимать этот предмет. Это база для развития. Математика дисциплинирует человека и учит искать рациональный выход из любого положения. Иначе любая нестандартная ситуация поставит программиста в тупик и он, не найдя ответа на всех известных ресурсах, сложит руки и распишется в своей беспомощности».

«Можно не знать досконально теорию вероятностей и высшую математику, но линейная алгебра должна быть неотъемлемой частью мышления в решении большинства задач или „записана на подкорке мозга“ (как говорят некоторые учителя) — это врожденная грамотность, но в математическом смысле» — считает Воротников Денис, ведущий веб-программист Mercaux Inc. 

Базовые требования к профессионалу

  • Критическое мышление — умение выделять главное в требованиях, подходить к своему и чужому коду с точки зрения постоянной оптимизации и улучшения; навыки поиска лучших путей решения задач.
  • Ориентированность на работу с деталями — в программировании не бывает мелочей. Даже если вы не написали ни строчки кода, вы наверняка слышали шутки про то, как отступ или потерянная точка с запятой отнимают часы в поисках бага и причин ошибок при компиляции. Невнимательный программист — нонсенс.
  • Сосредоточенность, усилие, терпение — нередко приходится писать большие фрагменты кода, глубоко погружаться в поиск решения задачи. Любой отвлекающий момент растянет эти процессы надолго, поэтому программист должен иметь явно выраженный навык «свинцовой задницы», позволяющей дотошно разобраться в проблеме.
  • Склонность к переработкам — вас сейчас возмутит этот пункт, особенно если вы выпускник или студент. Как так, переработка?! Только платно, по ТК РФ и вообще! Но нет, поработав немного, особенно на удалёнке, вы заметите, что с радостью отдаёте работе гораздо больше часов жизни, чем ей положено. Кстати, не замечал, чтобы кто-то активно боролся с этим явлением. Например, я пишу эту статью, на моих часах 00:09, а впереди ещё много текста и размышлений + основная работа 😉
  • Навыки активного слушания и общения — вам придётся понимать, что вам хочет объяснить внешний или внутренний заказчик. Да, иногда их ТЗ звучат как описания товаров с Алиэкспресс, и вам придётся вытягивать детали в процессе тесного диалога и длительного обсуждения. 
  • Умение работать в команде — программист никогда не работает один и нужно уметь вписаться как в команду, так и в правила управления разработкой, методологии и code style вашей компании.
  • Потребность в самообучении — именно потребность. Вы должны непрерывно и осознанно изучать новые фреймворки, библиотеки, SDK, API, языки программирования и прочие инструкции и материалы. Остановитесь — через 6-12 месяцев отстанете от поезда.
  • Ответственность — программист всегда отвечает за качество кода, который он создал, за работу программы, за её стабильность и быстродействие. Если вы склонны валить вину на тестировщика, заказчика или коллегу-разработчика, вам лучше пойти в менеджеры проекта (очень злая шутка, простите). А если серьёзно, программист отвечает за программу не меньше, чем хирург за операцию или строитель за мост или здание. 

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

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

  • статистика и комбинаторика – основу этого раздела проходят в старших классах. Для каждого программиста must have;
  • логика и дискретная математика; раздел посвящен основам теории числе, множеств, база изучается в школе;
  • математический анализ – самостоятельно изучить раздел, который нужен для работы в Computer Science, довольно трудно;
  • теория алгоритмов, чтобы разобраться с эти разделом, нужно хорошо знать математику в целом. Знания раздела необходимы для анализа алгоритмов – основных понятий в программировании;
  • линейная алгебра поможет развить абстрактное мышление. Программистам в сфере графики, разработки игр и виртуальной реальности без нее никуда.

Константин Третьяков, руководитель отдела сопровождения санкт-петербургского филиала компании «1С-Рарус»:

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

Тем, кто, как я, решил связать свою деятельность с 1С, я рекомендовал бы начать с изучения возможностей платформы, прочесть книгу М. Радченко «Практическое пособие разработчика», а также воспользоваться материалами ресурса «курсы-по-1с.рф». Добавлю, что в среде 1С понадобится минимум 3-5 лет, чтобы выйти на приличный уровень, и программирование здесь далеко не единственный необходимый навык.

Алексей Смирнов, технический директор ИТ-компании «Нетрика»:

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

Большая часть разработчиков веб-приложений скажет, что им вполне достаточно школьной базы и самообразования — просто потому, что каких-то особенных математических навыков в этой сфере разработки ПО не требуется. Программистам, работающим на более сложном уровне, понадобятся более фундаментальные знания — например, в индустрии разработки компьютерных игр (Game Development) очень полезны знания алгоритмов, линейной алгебры и геометрии

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

Александр Баталов, технический директор Zavento:

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

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

Что почитать?

Онлайн-медиа — здесь обсуждаются нишевые события и более узкие темы.

  • Google Developers — надежный первоисточник, из которого можно узнавать актуальные новости о продуктах компании.
  • I Programmer — портал для программистов. Новости обо всех направлениях от UX до робототехники и всех языках программирования.
  • Smashing Magazine — статьи о веб-дизайне: разбор кода, свежие кейсы, советы по трудоустройству и общению с клиентами.
  • Хабр — универсальный русскоязычный ресурс, где можно найти гайды, обсуждения, код-ревью и кейсы от разработчиков разных компаний от IT-гигантов до небольших digital-агентств.
  • Вастрик — авторский инди-блог про IT и выживание в мире технологий. Тексты про машинное обучение, блокчейн, VR, вычислительную фотографию, машинный перевод и многое другое.
  • For Web — блог в Twitter с полезными материалами для фронтендеров: свежие статьи, доклады и инструменты от сибирского разработчика Андрея Романова.

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

  • Reddit — популярный форум на все темы подряд, на котором часто сидят опытные разработчики, выкладывают свои кейсы и комментируют другие публикации. Найти их можно по тегу «programming».
  • Stack Overflow — закрытый клуб для программистов без рецептов и котиков. Здесь можно запросить у опытных коллег code review, комментировать публикации и давать им оценку.
  • CyberForum — форум программистов, системных администраторов, где помогают в решении задач по программированию.
  • Game Dev — форум, на котором разбирают создание игр и все, что с ним связано.

Как наверстать упущенное

У меня была очень сильная школьная программа, в 11-м классе мы уже проходили элементы высшей математики. Но на факультете бизнес-информатики математический анализ и линейную алгебру мы закончили изучать уже в середине второго курса. Я основательно подзабыл материал и растерял навыки, в том числе и программирование: мы изучали только язык C#. Главная проблема заключалась в том, что мне очень не хватало навыков решения задач.

Так что для того, чтобы поступить на ФКН и в ШАД, мне пришлось самому на протяжении всего четвёртого курса вспоминать математику и заниматься ею в свободное от университета время. Помогла практика решения задач в онлайн-контестах, это подтянуло навыки C++. Но больше всего мне помогло то, что моя сильная сторона — это комбинаторика. Для неё не нужно много знаний, главное — развитая логика.

Выбор языка программирования

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

Давайте так. Мы будем описывать разные ситуации. Читайте каждый пункт по очереди. Если поймете, что этот пункт не про вас, переходите к следующему. И так пока не получите свой ответ.

  1. Хочу что-то предельно простое, может даже не самое практичное. Ваш язык: Ruby.
  2. Я хочу начать кодить для себя, из любопытства или в рамках самосовершенствования. У меня нет на примете проекта, который мне бы хотелось реализовать. Посоветуйте мне лучший способ начать. Ваш язык: Python.
  3. Я хочу начать кодить для себя, из любопытства или в рамках самосовершенствования. У меня нет на примете проекта, но я хотел бы выучить такой язык, чтобы после него было легко переключиться на любой другой (даже если изначально изучение первого языка будет трудным). Ваш язык: С++.
  4. Я хочу кодить для себя, и у меня на примете есть проект. Он связан с сайтами. Хочу выучить самый простой язык из тех, что позволит мне создавать сайты в интернете. Ваш язык: JavaScript.
  5. Я хочу кодить для себя, и у меня на примете есть проект. Он связан с сайтами, но в будущем я хотел бы работать не только с ними. Ваш язык: Python.
  6. Хочу стать программистом для себя, и есть идея проекта, связанного с приложениями на Android. Ваш язык: Java
  7. Хочу стать программистом для себя, и есть идея проекта, связанного с приложениями на iOS Ваш язык: Objective-C
  8. Хочу стать программистом для себя, и есть идея проекта, связанного с компьютерными играми или сложными программами в 3D. Ваш язык: C++
  9. Я иду в программирование ради денег, и хочу получить хорошую работу. Компания не имеет особого значения. Ваш язык: Java или Python.
  10. Я хочу устроиться на работу в компанию и работать с веб-интерфейами. Ваш язык: JavaScript.
  11. Хочу устроиться в компанию и работать с сайтами. Готов потрудиться чуть больше, но охватить при этом более широкий спектр знаний. Ваш язык: PHP.
  12. В будущем я хочу устроиться в крупную корпорацию вроде Google или Facebook. Ваш язык: Python.
  13. В будущем я хочу устроиться работать в Apple. Ваш язык: Objective-C.
  14. В будущем я хочу устроиться работать в Microsoft. Ваш язык: C#.

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

Андрей Хромышев, старший программист-разработчик ПО компании Acronis:

Я думаю, здесь будет вполне уместна цитата  великого Эдсгера Дейкстра: «Программирование — не набор пассов и заклинаний, не шаманство, не танцы с бубном, а математическая дисциплина. А всякая дисциплина, если она претендует на нечто большее, чем на внешний эффект, должна строиться на прочном фундаменте». Таким фундаментом для Дейкстры является математическая логика, а точнее — исчисление предикатов.

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

Стоит отметить, что многое зависит от задач, над которыми трудится программист: кто-то программирует сигнальные процессоры, а кто-то специфическое ПО для работы с ДНК.

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

Необходимость знания иностранных языков

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

Программирование ближе к математике или к иностранному языку

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

Скорее второй, чем первый. У компьютерных языков тоже есть своя лексика и грамматика. Они более точные и логичные, чем любой человеческий язык. По сути мы можем сравнить изучение языка программирования с изучением английского, и это не будет прям грубым сравнением. Нужно выучить слова (функции), грамматику (логику и правила написания кода), устойчивые фразы (часто используемые фрагменты кода). Можно даже сказать, что русскоговорящему выучить Python или JavaScript, к примеру, проще, чем арабский или корейский язык. А может даже проще, чем любимый нами английский.

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

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

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

Можно ли стать айтишником с нуля

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

Нужно ли высшее образование программисту?

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

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

Талантливые программисты нужны везде, но если у него еще будет профильный диплом об окончании вуза, то работу найти будет проще. При этом, анализируя ресурсы, где размещены вакансии для программистов, например, superjob.ru, stackoverjlow.com, hh.ru, получается, что больше 70% всех вакансий не требуют высшего профильного образования, а только опыт. Остальные 30% примерно наполовину разделяются между теми, кому нужно просто высшее образование, и теми, кому необходимо именно профильное.

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

Но раз вы все-таки ищете вузы программирования в России, то давайте будем разбираться с этим вопросом.

Мифы профессии

А если программист ещё и геймер… Всегда можно найти пару 😉

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

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

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

Программист имеет низкий потолок в карьере. Нет, любой программист имеет возможности горизонтального и вертикального роста

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

Программистов заменят роботы. Буду краток. А кто роботов будет программировать? 😉

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

Итак, вы определились с языком, теперь нужно придумать, как его выучить. А выучить его вам будет не так уж и сложно, как кажется на первый взгляд. У страха глаза велики. Нужно просто приложить усилия и потратить на обучение несколько месяцев. Это не так уж и много на самом деле. Специалисты уже подсчитали, что на изучение programming language нужно в среднем от 6 до 13 недель, если заниматься по 8 часов в день. Если предположить, что вы уже где-то работаете на полный рабочий день, и свободного времени у вас меньше, то это 2-6 месяцев.

Есть еще такая теория как «10,000 hours rule». Она гласит, что в любом ремесле можно стать профессионалом за 10 тысяч часов. Если поделить на 40 часов в неделю, то выйдет около пяти лет. Но это чтобы стать прям экспертом. А для первых серьезных проектов и первой работы достаточно, как мы уже сказали, от нескольких месяцев до полугода.

Где учиться?

  • Книги. У нас в блоге выходила подборка лучших книг для изучения программирования. Рекомендуем к прочтению.
  • Онлайн-курсы. В той же самой подборке о них тоже сказано несколько слов, но если вкратце, то можно заниматься в GeekBrains (рус), Яндекс Практикуме (рус), Codeacademy (англ), Coursera (в основном англ), Skillshare (в основном англ) и так далее.
  • Видеоуроки на YouTube. Есть много хороших бесплатных курсов. В том числе записи уроков из платных видеокурсов прошлых лет — слитых или выложенных самими школами. 
  • Оффлайн школы и тренинги. Это самый дорогой способ научиться программированию, но самый эффективный. Под личным руководством наставника вам будет гораздо проще, ведь не придется задерживаться на одном месте.

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

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

Бесплатные курсы и материалы для самостоятельного обучения

На площадке Coursera можно найти бесплатные программы по разным направлениям в IT на русском и английском языках:

  • Crash Course on Python, разработанный в партнерстве с Google;
  • Java Programming and Software Engineering Fundamentals от Duke University (США);
  • HTML, CSS, and Javascript for Web Developers от Johns Hopkins University (США);
  • iOS-разработка: Swift, UI и многопоточность от Московского физико-технического института;
  • Введение в язык Kotlin, курс Санкт-Петербургского политеха.

На площадке edX собраны бесплатные курсы Гарварда, Массачусетского университета, Беркли, Бостонского университета и других именитых учебных заведений. Например:

  • Python Basics for Data Science;
  • Programming for the Web with JavaScript;
  • Introduction to C++.

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

  • «Чистый код» Роберта Мартина;
  • «Совершенный код. Мастер-класс» Стива Макконнелла;
  • «Искусство программирования» Дональда Кнута;
  • «Паттерны проектирования» Эрика и Элизабет Фримен;
  • «Алгоритмы: построение и анализ» Томаса Кормена и Чарльза Лейзерсона.

Советы выпускницы SkillFactory:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector