Какие бывают программисты, где деньги и на кого проще учиться. Объясняет программист

Всем привет! Я Лаптев Алексей, основатель и главный разработчик сервиса сквозной аналитики Utmstat и интеграций — ApiMonster. В этой статье расскажу какие бывают программисты, на чем программируют и как ими стать.

О чем статья

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

Ставьте лайк для охвата.

Типы программистов

Фронтенд-программист

Пишет на javascript продвинутый UI на сайтах, например прекрасный редактор статей на VC или ненавистные онлайн-чаты.

В последнее время в моде фреймворки React.js, Vue.js.

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

Backend-программист

Тут уже серьезней.

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

Серверная бизнес-логика это:

  1. Что показать на сайте, когда вы зайдете на его url
  2. API для мобильных приложений
  3. Какие-то внутрение процессы обработки данных

Пишет обычно на php/python/go/nodejs.

Нужно знать базы данных.

Бонусом может подменить фронтенд-программиста на не очень сложных задачах.

Backend-программист на CMS

Это программисты на Wordpress, 1C-Bitrix и прочих конструкторах.

Тут фокус на поднятии типовых сайтов на готовых движках.

Довольно скучно и слабое развитие.

1С-программист

Что-то пишет на 1С для бухгалтерии.

Прочие программисты таких программистов не считают программистами.

Что в целом справедливо, тк это по сути не программирование, а конфигурирование конкретного программного продукта.

Но возможно я уже не прав, не вникал глубоко.

Датасаинтист

Не совсем программист, но модная тема по работе с данными.

Строят графики на Python/R, ищут инсайты. Продвинутые работают с ML.

До программистов не дотягивают, но автоматизировать свою работу на Python/R могут.

Ценность данных специалистов не в самом программировании, а в способности автоматизированно обрабатывать и делать выводы на основе больших данных.

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

Пишет сложное ПО на C/C++ — драйверы, ОС, игры.

Если хочется быстро войти в профессию, то точно не здесь.

Какие есть языки и что они делают

JavaScript

Не путать с Java.

Весь интерактив что вы видите на сайте (лайки, лента справа) — это все пишется на javascript.

То есть его основная задача — это красивый и местами функциональный UI.

Есть еще серверная версия — NodeJs, но о ней позже.

PHP

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

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

На мой взгляд такой стереотип сложился лет 10-15 назад в php4, когда это язык был самый популярный, простой и в тоже время не было еще сформировавшихся подходов к разработке.

Энтузиасты методом тыка или по книжкам (невероятно!) на голом php что-то пытались делать не заморачиваясь с архитектурой. А те кто потом это поддерживали и сформировали стереотип.

Сейчас же PHP дорос до 8-й версии, обзавелся фреймворками — Yii2, Symfony, Laravel и на мой взгляд не имеет никаких серьезных недостатков, при этом имеет сильные преимущества — удобный язык, одна самых высоких скоростей разработки и доступность специалистов на рынке.

Python

Раньше это был аналог PHP для сайтов. Сейчас стал главным инструментом датасаинтистов.

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

К слову в аналитику прекрасно может и PHP.

Многие сервисы сквозной аналитики, в том числе и utmstat написаны на PHP, но там не требуется сложной математики и специфичных библиотек.

R

Не вникал в суть языка, но вроде он заточен для аналитики.

Если вы новичек — лучше учите python.

Go

Модный язык, на котором сейчас многие переписывают проекты через микросервисы!

Этот язык нужно учить третим после PHP и Javascript.

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

NodeJS

Не работал с этим языком, но по сути он похож на Go.

Быстро работает, но сложно писать большие проекты.

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

Swift/Objective-C

На них пишут приложения и игры под IOS (айфон).

Не самая простая штука, но несомненно актуальная.

Java

Делится на 2 части:

  1. Мобильная разработка для Android
  2. Enterprise-софт для банков и прочих аналогичных клиентов

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

Несмотря на относительную востребованность и что у всех стоит 1С, с точки зрения карьеры программиста — тупиковый путь.

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

Если между php/python/js/go можно довольно легко перескакивать, то с 1С вы туда не перескочите, оставшись весьма условным программистом с ограниченным выбором вакансий.

Но если нет амбиций на работу на международном рынке и нужна просто стабильная работа в IT — то возможно стоит учить.

C/C++

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

Где деньги?

Судя по предлагаемым вакансиям — в Go, Javascript, Java.

Чуть поменьше в PHP/Python.

Но стоит иметь ввиду, что много платят реально опытным спецам, новичкам будет удачей устроится хотя бы на x/5-10 зарплату для набора опыта.

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

Никак.

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

Без интереса вас не хватит на 3-5 лет постоянного обучения и ломания себе мозга, от силы на 1-2 месяца.

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

Но все же проще всего мне кажется через фронтенд/javascript. Там минимальный набор знаний — только js/html/css. Никаких баз данных, серверов, нагрузок и сложных языков.

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

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

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

Или в невероятном текстовом варианте, например learn.javascript.ru. У каждого языка есть какой-то официальный курс/мануал.

Лучше всего учится на своем pet-проекте.

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

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

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

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

Рекомендую учится у технологических компаний типа яндекса, mail.ru, сбера — они точно разбираются в разработке.

А если курс предлагает скидку 50% и зарплату в 200к, то он просто пытается вам продаться любыми способами. Я бы туда не ходил.

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

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

Куда пойти работать

В идеале, ваша задача попасть в следующие условия:

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

На рынке есть несколько типов контор.

Крупный сервис

Яндекс, Авито.

Это продуктовая разработка, то есть когда контора пилит свои проекты и продает какую-нибуть подписку, а не делает «сайты на заказ», продавая человеко-часы.

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

В идеале — сюда.

Малый сервис

Например utmstat.

Та же самая продуктовая разработка, только масштабы поменьше.

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

Но и тут не плохо, а возможно даже лучше.

Заказная разработка сложных проектов

Может быть как крупный epam, так и относительное мелкие, но известные агентства по разработке.

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

Сложные проекты — это известные клиенты типа банков, интернет-магазинов, телекома.

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

А большой штат и постоянная потребность в разработчиках увеличивают шанс быть нанятым на работу.

Терпимо

Заказная разработка простых проектов

Noname-контора делает проекты для noname-клиентов.

Иногда такие конторы называют «галерой», а разработчиков — «гребцами».

Начиная от региональных сайтов/приложений и заканчивая заказами из upwork.

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

Как станет скучно и несложно — надо менять место работы.

Если больше никуда не берут, то вариант неплохой.

Фриланс

Тут 3 минуса:

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

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

Вполне нормальный вариант, если сможете найти клиентов.

0
85 комментариев
Написать комментарий...
Игорь Косаринский

Настоящий программист на вопрос "На каком языке программируете?" отвечает "А на каком надо?". Все остальные просто кодеры.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Victor Pomortseff

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

Ну вот пример небольшой какие задачки приходится решать сейчас.
В банке есть служба комплаенса. Занимаются в том числе проверками клиентов (не дай бог какой игиловец попадет), контролем платежей (чтобы на счета талибана деньги не переводили через банк) и подобными вещами.
И есть списки подозреваемых в экстремизме, пособничеству терроризму, распространении оружия массового поражения. Списки эти регулярно приходят от росфинмониторинга. Наша задача принять их (а это огромные многоуровневые XML массивы), разложить по своей базе (порядка 25 таблиц, более 80-ти индексов) так чтобы потом их было возможно эффективно использовать. А потом, после загрузки очередной версии списка, провести "сверку клиентов" - проверку каждого активного клиента (несколько десятков миллионов) на совпадение со списком. Совпадения проверяются по ФИО, ДР, ДУЛ (документ удостоверяющий личность - их у клиента может быть несколько), ИНН, адресам (рождения, регистрации, местонахождения).
При этом, например, совпадение по ФИО+ДР+ДУЛ или ФИО+ИНН считается полным, только по ФИО+ДР, ДУЛ, ИНН - частичным.
И сделать это надо максимально быстро (тут используется распараллеливание обработки - головная задача запускает несколько однотипных "обработчиков", составляет список активных клиентов, разбивает их на пачки, скажем, по 100 штук и выкладывает пачки на конвейер откуда каждый обработчик берет пачку, обрабатывает, берет следующую и т.п. - этот подход называется batch machine).
И как подзадачка - функция поиска совпадений по заданному числу параметров (ФИО, ДР, ДУЛ, ИНН) которая возвращает результат - полное совпадение, частичное, нет совпадений. И есть там маленькая тонкость - у клиента может быть несколько ДУЛ И для каждого из них нужно вызвать функцию с набором параметров ФИО, ДР, ДУЛ(i), ИНН. И тут надо знать одну особенность платформы - наличие т.н. "группы активации" (некий subset задания - "job" - каждой программе указывается в какой группе активации она работает). И вот когда программ запускается не в первый раз в рамках группы активации, с прошлого раза сохраняются значений всех глобальных и статических переменных. Т.е. в данном случае у нас есть возможность проверить какой из параметров вызова изменился с прошлого раза и использовать прошлые результаты по тем параметрам, которые не менялись. Это значительно повышает эффективность работы модуля.
Но это одна из тонкостей платформы, которую надо просто знать и уметь использовать (или бывают ситуации когда это может наоборот навредить).

Просто ка пример того, с чем стакивается бэк и чем это отличается от фронта.

Ответить
Развернуть ветку
Victor Pomortseff

Вот на хабре из старого попалось: https://habr.com/ru/post/306046/
У нас, конечно, не все так страшно. Мы сидим на IBM i, у нас нет COBOL - вместо него RPG, и сразу DB2. Ну и IDE мы используем современные (во-первых есть очень мощная среда RDi - Rational Development for i - фактически это Eclipce с куче специфических расширений, во-вторых для Visual Studio Code есть плагины поддержки используемых нами языков). Т.е. работаем мы на локальном компе под виндой, макосью, линухом - что нравится.
Но. Ничего из того что мы пишем невозможно на локальном компе не то чтобы запустить, даже просто собрать. Т.е. сначала нужно все исходники забросить на сервер, затем собрать, а затем только запустить собранное.
А теперь представьте - основная "поставка" по задаче что описывал выше (разбор списков росфина и раскладка их по нашей базе - только разбор и раскладка, без проверок) - это более 800кб кода и более 160-ти исходных файлов. Понятно, что собирать все это руками нереально. Т.е. пишется программа-инсталлятор (на системном для IBM i языке CL - Control Language команды которого могут выполняться как интерактивно из командной строки, так и в виде скомпилированной программы) которая "собирает поставку" - компилирует все объекты. Т.е. выглядит это так - пишешь код, пишешь инсталлятор, забрасываешь все на сервер, компилируешь инсталлятор, запускаешь инсталлятор, он собирает поставку.
Запуск, тестирование, отладка - все это уже в терминале (точнее, программном эмуляторе терминала IBM5250 в котором у клавиатуры было 24 функциональных клавиши и все они активно используются - очень быстро привыкаешь считать что какая-нибудь F17 это просто Shift+F5)
Терминал выглядит примерно как на картинке. Т.е. текст 80х25 (есть режим 132х не помню точно сколько, редко пользуемся).
Но, слава нашим девопсам, - прикрутили gradle. Теперь просто пишем скрипты с описанием объектов в поставки и гредл берет на себя всю рутину - создание кода инсталлятора, заброску всего на сервер, сборку и запуск инсталлятора на сервере.
Но... все ошибки компиляции выводятся на сервере в т.н. "спульник" (spool file). Фактически это вывод на принтер, но не на сам принтер (напрямую на принтер там ничего не выведешь), а в специальный файл который можно просмотреть и при необходимости уже скачать к себе на комп с преобразованием в pdf, отправить на физический принтер и т.п.
Т.е. если сборка не удалась и оно сказало что не смогло - смотришь спульники. Последний спульник - на чем сломалось. Это листинг программы со всеми переменными, опциями сборки и т.д. и т.п. В том числе со списком ошибок - что где не понравилось...
Такой вот рабочий процесс.

Ответить
Развернуть ветку
Victor Pomortseff

И надо еще заметить, что IBM i не похожа ни на одну из других платформ. Это объектная система, где "все есть объект". У объекта есть имя, тип и аттрибуты. Тип и аттрибуты присваиваются при создании объекта и впоследствии не могут быть изменены. Для каждого типа объекта есть набор разрешенных с ним операций. Например, вы физически не сможете открыть программу (объект типа *PGM) в каком-нибудь hex редакторе и подправить там несколько байтиков - такое действие просто не предусмотрено для этого типа объекта.
Там нет файлов в привычном понимании. Там нет папок. Там есть библиотеки (которые тоже объект типа *LIB), содержащие внутри себя другие объекты. Вместо досового/виндового PATH там есть LIBL - Library List - список библиотек где система ищет объекту для которых явно не указана библиотека (только имя, или имя + *LIBL - "искать по либлу"). При этом LIBL может меняться как в интерактиве командой EDTLIBL позволяющей добавлять/удалять библиотеки из текущего либла (он существует в рамках текущего задания - "job"), так и командами добавления/удаления конкретной библиотеки.
Файлы в принципе есть, но это просто один из типов объектов - есть с аттрибутом "физический файл данных" - это таблица. "Физический файл исходных текстов" - это хранилище исходников,  каждый исходник есть "элемент" - "member" внутри него, для поставки. "Логический файл" - индекс, вью и т.п.
Есть огромное количество специфических типов объектов - *dtaq (data queue), *usrq (user queue), *dtaara (data area), *usrspc (user space) и еще много чего...
В общем, среда совершенно другая и абсолютно цельная - БД есть составная часть системы. Компиляторы языков CL, COBOL, RPG, C/C++ есть часть системы (т.е. компиляция делается просто командой на CL) SQL есть часть системы (в т.ч. интерактивный, позволяющий выполнять запросы фактически из командной строки). Отладчик есть часть системы (удаленная отладка в RDi впрочем тоже возможна).
Базовое понятие - "задание" - "job". Запустил терминальную сессию - ты работаешь в интерактивном задании. Можешь запускать фоновые задания из своего (но тогда сам отвечаешь за его корректное завершение). 
Мы работаем на тестовом сервере с одним 18-ядерным  SMT8 процессором и 1.8Тб оперативки из которой на каждое задание выделяется 16Гб. Для всех программ в рамках задания память общая. промышленный сервер на 16-ти 12-ядерных SMT8 процессорах (192 ядра, 1536 потоков в сумме) и 2.5Тб оперативки. Процессора серии IBM Power9 (недавно вот Power10 анонсировали, может и у нас когда появится).

Ответить
Развернуть ветку
82 комментария
Раскрывать всегда