company_banner

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

    Мы писали о фронтендерах и бэкендерах, о мобильной разработке и о тестировании, но это были частные случаи. Когда человек подходит к первой или очередной профессии, он редко говорит, что станет разработчиком под iOS или проктологом, как правило это звучит «программистом» и «врачом». Специализация приходит позже, с опытом. Но чтобы твёрдо заявить, что ты хочешь стать программистом, врачом, архитектором, геологом и т.д., нужно избавиться от романтизации профессии и подойти к ней здраво и осмысленно. Даже если вы вдруг решили стать программистом, чтобы «войти в айти после 35-ти». Если говорить о программистах с позиций романтики, то это люди, которые превращают наши замыслы в код и делают жизнь лучше, проще, удобнее. Если говорить прямо, то работа программиста — напряжённый, зачастую рутинный труд с множеством плюсов и минусов. Об этом и поговорим.

    Художник — Надежда Коткина, позировал — cyber_roach

    Кто это?


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

    Вам стоит задуматься, не будущий ли программист вы, если…

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

    … вы не ожидаете бешеных доходов и не думаете о том, что программирование — новый рок-н-ролл, первично именно желание творить магию: превращать идеи в код.

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

    Где нужен?


    Сегодня программисты нужны везде и я не думаю, что этот тренд изменится в ближайшие 10-15 лет. Программисты нужны в промышленности, науке, космосе, бизнесе, медицине, транспорте и даже не в ИТ-компаниях (шутки шутками, а вы знаете, как трудно найти отличного программиста 1С или разработчика для интернет-магазина на 1С-Битрикс?!). В общем, даже в институте церкви и благотворительности есть спрос на программистов. И это здорово, потому что вы можете не просто выбрать профессию программиста, но и соотнести её со своим увлечением: химией, биологией, механикой, связью и даже историей и лингвистикой. Более того, если вы будете сочетать в себе навыки разработки ПО и основы профильной деятельности, ваша цена на рынке здорово вырастет, а конкуренция изменится.

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

    • Мобильная разработка — создание приложений для мобильных устройств (смартфоны, планшеты, носимая электроника, научное оборудование, датчики IoT и т.д.). Отличается непрерывным развитием и постоянным интенсивным самообучением.
    • Веб-разработка (фронтенд и бэкенд или фуллстек) — создание всевозможных веб-приложений для любых целей и задач, разработка сайтов, интернет-магазинов и проч. Весь мир сейчас в WEB, поэтому вы можете найти абсолютно любую задачу.
    • Системное программирование — разработка низкоуровневого ПО, взаимодействие с железом. Требует исключительной логики, инженерного склада мышления, внимания и досконального подхода к мелочам.
    • Научная работа — широкая сфера для развития, когда на первый план выходит базовая специальность, на второй — программирование (телемедицина, медицинская кибернетика, аналитические системы для химиков и биологов и т.д.). Крайне перспективное направление с большим заделом возможности работы в лучших международных компаниях и командах.
    • Анализ данных, статистика и математика — для тех, кто любит покопаться в больших данных и найти большие идеи. Для тех, кто усидчив, умеет видеть взаимосвязи и закономерности. В общем, если вы пытались построить свой прогноз по COVID-19, вам сюда :-)
    • Нейронные сети и компьютерное зрение (распознавание образов и элементов) — растущее направление, которое требует исключительного понимания математики. Нейронные сети скоро будут едва ли не на каждом утюге, спрос на специалистов будет только расти. 
    • DevOps/DevSecOps — для тех, кому скучно в рутинном программировании и кто тяготеет к системному администрированию и управлению разработкой. На данный момент на рынке труда ситуация «девопсов много, ни одного не найти», потому что к настоящему DevOps путь не так прост, как его видят любители Докера.
    • Прикладная разработка и бизнес ПО — отдельный мир разработки, где можно писать десктоп на Delphi и зарабатывать миллионы, знать COBOL и быть самым сманиваемым специалистом на рынке, прошариться в Java и быть на главных ролях в коммьюнити и т.д. Это рисковый путь развития, в основном, для опытных разработчиков, но если вам случилось влюбиться в С/С++/Java или какой-то из «латыней от программирования» — почему нет? 

    Опять же, я перечисляю основные направления, но на самом деле на их стыке образуются новые перспективные сферы, например, обработка естественных языков (NLP), AR/VR, разработка игр, автоматизация тестирования и проч. 

    Важно понимать ещё одно разделение.

    1. Программисты в ИТ-компании решают сложные технические задачи, связанные с адаптацией к разным платформам, работой под нагрузкой, рефакторингом и оптимизацией, удобством UI/UX и т.д. Это сложные профессиональные задачи, без решения которых невозможен ни один релиз на продакшене (кому я вру?:-))
    2. Программисты в не-ИТ-компании решают все задачи сразу, но основные сводятся к автоматизации процессов и работы с чужим прикладным ПО: работа с корпоративным порталом, доработка CRM, ERP, биллинга, формирование отчётов по запросу, настройка и поддержка сайта, интернет-магазина, 1С и т.д. И, кстати, иногда программист-многостаночник из неайтишной компании может развить больше скиллов за счёт того, что он работает в комплексе, с системами целиком. 

    В ходе обучения программированию вы обязательно столкнётесь со всеми сферами и задачами понемногу, поэтому буквально спустя полгода с начала обучения у вас сформируется представление о том, в какую сторону вы собираетесь двигаться. Например, у меня есть знакомый, который не хотел заниматься ничем, кроме того, что связано с программной начинкой читалок. В итоге он прошёл Barnes&Noble, работал с проектами Google и сейчас работает в Китае (доволен, здоров, фанатеет от жизни в стране). У каждого свой путь.

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


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

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

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

    • Умение работать в команде — программист никогда не работает один и нужно уметь вписаться как в команду, так и в правила управления разработкой, методологии и code style вашей компании.
    • Потребность в самообучении — именно потребность. Вы должны непрерывно и осознанно изучать новые фреймворки, библиотеки, SDK, API, языки программирования и прочие инструкции и материалы. Остановитесь — через 6-12 месяцев отстанете от поезда.
    • Ответственность — программист всегда отвечает за качество кода, который он создал, за работу программы, за её стабильность и быстродействие. Если вы склонны валить вину на тестировщика, заказчика или коллегу-разработчика, вам лучше пойти в менеджеры проекта (очень злая шутка, простите). А если серьёзно, программист отвечает за программу не меньше, чем хирург за операцию или строитель за мост или здание. 

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

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


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

    Однако — что даёт знание иностранного языка?

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

    На Хабре было много дискуссий по поводу достаточного комфортного уровня владения английским языком для работы в ИТ-отрасли. По моему убеждению, для того, чтобы не быть глухонемым, нужен минимум Upper-intermediate либо Intermediate с активным говорением (например, вы туговаты в грамматике, но хорошо прокачали язык на учебной программе, в личном общении или на стажировке).

    Где учиться


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

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

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


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

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

    Лучшие книги и средства обучения


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

    • «Искусство программирования», Дональд Кнут
    • «Жемчужины программирования», Джон Бентли
    • «Путь программиста», Джон Сонмез
    • «Чистый код. Создание, анализ и рефакторинг», Роберт К. Мартин
    • «Алгоритмы. Построение и анализ», Томас Х. Кормен
    • «Сам себе программист. Как научиться программировать и устроиться в Ebay?», Кори Альтхофф
    • «Карьера программиста», Г. Лакман Макдауэлл
    • «Идеальный программист. Как стать профессионалом разработки ПО», Роберт Мартин
    • «Рефакторинг. Улучшение существующего кода», Мартин Фаулер и другие
    • «Совершенный код», Стив Макконнелл
    • «Кодеры за работой. Размышления о ремесле программиста», Питер Сейбел
    • «Мифический человеко-месяц», Фредерик Брукс
    • «Программист-прагматик. Путь от подмастерья к мастеру», Дейв Томас, Энди Хант

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

    Из любимых ресурсов:

    • Codecademy — универсальная интерактивная платформа для обучения языкам программирования. Лычки, ачивки, геймификация — сплошная мотивация.
    • Udacity — англоязычный ресурс для обучения программированию.
    • Codewars — огромный сборник тестовых задач для тренировки навыков по любому языку программирования.
    • Coursera — без комментариев, просто лучшая лекционная «солянка».
    • MIT OpenCourseware — море курсов от Массачусетского технологического института.

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

    Ещё одна огромная и свежая подборка полезного онлайна для программистов.

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


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


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


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

    Поэтому я разберу четыре самых популярных мифа.

    1. Программисты гребут деньги лопатой. Нет. С одной стороны, заработные платы в ИТ-сфере действительно выше других отраслей и, как показала эта чумачечая весна, ИТ ещё и более защищена, приспособлена к активной удалённой работе. Однако чтобы пройти путь до зарплаты выше рынка, нужно получить более низкую зарплату, а иногда так даже пройти бесплатную стажировку — не ради денег, а ради знаний, навыков и связей. На высоких позициях заработные платы действительно могут достигать 500 тыс. рублей в месяц, и к этому нужно стремиться. Но если вы на первом своём собеседовании на должность программиста пренебрежительно закидываете ногу за ногу и просите «сотню на руки» в столице или «сороковник» в регионах, вы проиграли. Лучше устроиться, показать результат и попросить повышение: эффективным программистам редко отказывают. 
    2. Программисты часто болеют. Увы, отчасти это правда. Сидячая работа, руки на мышке и клавиатуре, ненормированные режимы сна и питания зачастую играют злую шутку и вместе с опытом и карьерным ростом приходят лишний вес, одышка, сахарный диабет, гипертония, заболевания ЖКТ, заболевания опорно-двигательной системы, туннельный синдром и даже психические расстройства. Но это случается только с теми, кто полностью погружается в работу и забывает о себе. Регулярный спорт, правильное и регулярное питание, перерывы (не перекуры и не перекусы!), грамотно организованное рабочее место, подобранные добавки и витамины, активное общение с коллегами, сообществом, друзьями и семьёй, чтение — полезные привычки, которые сохранят ваше здоровье и, что немаловажно, обеспечат отличное функционирование мозга.
    3. Программист имеет низкий потолок в карьере. Нет, любой программист имеет возможности горизонтального и вертикального роста. Программист может расти как внутри программирования, так и в управлении разработкой до тимлида, CTO, CIO и т.д. При наличии хорошей идеи талантливый программист и хороший управленец может открыть своё дело и расширить горизонт навыков на максимальную величину. 
    4. Программистов заменят роботы. Буду краток. А кто роботов будет программировать? ;-)

    Главный совет


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

    Желание бросить — первый признак того, что вы идёте верным путём, что вы действительно напрягаетесь, а не мастрячите какой-то код методом копипаста из Google (даже не с GitHub!). Только когда вы настолько натренируетесь на простых задачах, что они вам станут противно скучными, вы сможете уверенно перейти на новый этап с отличной базой знаний. 

    Совет простой: не бросайте. Отвлекитесь, переспите с этими мыслями, забросьте обучение на неделю и вернитесь. Вы сами не заметите, как в голове что-то «щёлкнет» и всё встанет на свои места и вот он, первый мерж, первое код ревью, первый коммит в open source, первое выступление на митапе, свой пет-проект, первые задачи на должности миддла. Не останавливайтесь — всё будет!

    RUVDS.com
    RUVDS – хостинг VDS/VPS серверов

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

      +3
      отличная статья! Спасибо, Автор!
        +13
        Если хотите быть интровертом, вы быстро упрётесь в потолок профессионального развития

        А разве быть программистом имеет смысл только тогда, когда потолок недостижим? Что такого, ечли человек упёрся в потолок? Если ему с этим потолком платят достаточно, то зачем менять профессию? Да и на что её менять? Вариант с "засуньте интроверсию себе..." я даже не рассматриваю.
        И не нужно путать интровертов и социофобов, интроверты могут общаться с коллегами наравне с экстравертами, особенно по деловым вопросам, а не личным.

          +1
          мода с девяностых-двухтысячных «программист как рок звезда»
            +1
            Никто и не говорил что обязательно не упираться. Упретесь — да. А решать вам.
            +5
            Программисты в ИТ-компании [...]
            Программисты в не-ИТ-компании [...]


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

            Отличие от обычной «ИТ-компании» в том, что там все ориентировано на конкретные бизнеспроцессы и конкретную платформу (т.е. в целом круг задач может быть немного уже). В остальном же все как в «ИТ-компании».

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

            Еще один момент по «вхождению в профессию», которого тут не увидел (пропустил?) — стажировки. У нас (Альфабанк) есть практика набирать стажеров из числа студентов старших курсов или выпускников. Обычно это или профильные специальности (информатика, информатика-экономика) или просто технические специальности.

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

            Очень неплохой вариант — стажер сразу получает рабочее место, оплату, наставника (или наставников) и достаточно быстро переходит на уровень решения боевых задач (сначала несложных, потом «полноразмерных»).
              +1
              По моему убеждению, для того, чтобы не быть глухонемым, нужен минимум Upper-intermediate либо Intermediate с активным говорением (например, вы туговаты в грамматике, но хорошо прокачали язык на учебной программе, в личном общении или на стажировке)
              Полностью согласен, хотя это наверно потому, что сам с грамматикой не очень дружу
                +1

                Хм, ну, пол статьи точно напоминает нулевую главу книги Страуструпа по С++.
                Не мешало бы её тоже в список литературы.

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

                  спасибо автору! так мало вдохновения, а тут эта статья)))
                    +3
                    Забавно. Листаю хабру и вижу картинку. Печенька падает из раскрытого рта. «Это ж Ден». Чувак, который изображен на КДПВ. Знаю его лично и того, кто рисовал :)
                      +3
                      Собственно, здрасте )
                      Действительно, забавно видеть в шапке картинку, которую когда-то давно с меня рисовали)
                      Где и откопали-то )
                      +3
                      буквально спустя полгода с начала обучения у вас сформируется представление о том, в какую стороны вы собираетесь двигаться

                      10 лет уже код пишу, еще со школы, до сих пор не могу определиться, куда "двигаться", интересно все, лезу в сурсы всех инструментов, с которыми работаю, если они есть, а времени все это изучать хватает все меньше и меньше :(


                      Жизнь фулстека непонятна и сложна

                        0
                        до сих пор не могу определиться, куда «двигаться», интересно все


                        Дайте знать, пожалуйста, если вдруг когда-нибудь поймёте, как во всём этом интереснейшем многообразии выбрать что-то одно. Хочется попробовать все языки, освоить десятки предметных областей, раскусить все фреймворки, а жизнь одна и так коротка.
                        Если сам пойму для себя, как нужно выбирать раз и навсегда, на чём стоит остановиться и чему посвятить свою жизнь — обещаю рассказать в ответ.
                        +6
                        В 35 я задумался как выйти из айти. И не нашел выхода, хехе.
                          0
                          > программист
                          А у автомобилистов как? А у трамвайнистов? А у лечистов? Причина больше в непонимании профессии подавляющим большинством. Программу устанавливаешь? Значит программист.
                          Есть уже разбиение на: программный инженер (Software Engineer), Информатик (Computer scientist), Mobile Developer, Web Developer. У каждого свои поверхностные и глубокие знания. Пишут везде программист для тупа простоты.
                            +2
                            Приятная статья. Признавайтесь, граждане программисты, напрягают вас «войтишники» или вы уже забили?)
                              +3
                              Ну лет семь назад, когда я еще только поступил и только узнал, что такое Хабр, помню зашел и удивился, насколько все сложно и непонятно. Тогда я подумал «вот бы начать понимать, что написано на хабре — тогда я уж точно буду классным программистом». И вот теперь Хабр забит новостями и всякими статьями от и для вайтишников. И сразу мысль в голове «эээ, когда я говорил, что хочу понимать Хабр, я не совсем это имел ввиду...».

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

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


                                Тем не менее, все еще считаю что один отличный эксперт может заменить 5-10 "вайтишников", так что работа всегда найдется :)

                                  +1
                                  напрягают вас «войтишники» или вы уже забили?


                                  Приток дешевой рабочей силы на галеры во все времена развития человечества приветствовался. Без «войтишников» было бы невозможно открыть «новый свет» и путь в индию :)
                                  +2
                                  хорошая статья, спасибо автору.

                                  А еще фраза
                                  Желание бросить — первый признак того, что вы идёте верным путём
                                  меня очень порадовала, т.к. я совсем начинающий и порой рили бывают подобные моменты)
                                    +2

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


                                    В этом смысле, те, кто хочет созидать в новой эпохе, должны понимать что программирование это Ваш "one-stop shop", будь Вы хирург, инженер, маркетолог, дизайнер и много чего еще.


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

                                      0
                                      Подборка книг забавная Сонмез с Кнутом. Я вот не видел никого кто прочитал Кнута, но правда и алгоритмы разрабатывал только в институте.
                                      Сам недавно прочитал Джона Сонмеза «The Complete Software Developer's Career Guide», вот это могу порекомендовать каждому, подойдет на любом уровне. Единственная мысль — почему я не прочитал книгу раньше
                                        0

                                        Переехав в начале 2000х в Питер, получил тестовое задание с алгоритмической направленностью. С интернетом (и деньгами) плохо было — купил третий том Кнута (и ещё какую-то книгу) и успешно сделал задание (и получил работу). Всего Кнута конечно не читал. И выбор книг сейчас больше конечно — есть из чего выбрать.

                                          +2
                                          А, ну кстати да, для собеседований надо. А вот на этой работе потом приходилось открывать Кнута?
                                            0

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

                                        0

                                        Не претендую на истину — просто наблюдения из жизни программиста:
                                        В начале 2000-х были мысли: приходится постоянно писать велосипеды, что-то с программированием «не так». И тут «повезло» — прочитал «Мифический человеко-месяц» и «Программист-прогматик» (эти книги перевернули мое понимание о программировании). Затем — присоединился на месяц к команде, работающей по XP (eXtream Programming) — работа парами, гибкая разработка (которая сейчас известна как “agile/scrum/kanban/...”), TDD, standup-ы, Smalltalk/Java/C#, узнал о рефакторинге, шаблонах дизайна (design-patterns). Тогда я понял, что это не с «программированием что-то «не так»», а со моим отношением к нему. И недостаточно просто «увлекаться» программированием (к тому времени профессионально работая программистом уже 7 лет) и читая книги про Linux/C++/JavaScript/TCP/IP/SQL/“Невесту программиста» и т.д. Нужно профессионально расти, в том числе регулярно признавая (себе и коллегам), что «я дурак и был не прав» (а значит — «узнал что-то новое, и стал немного умнее или профессионально лучше»). Выше по тексту — я поставил слово «повезло» в кавычках, поскольку убедился, что везение — происходит значительно более часто, чем мы его замечаем, поскольку к нему нужно быть готовым (точнее — нужно себя к нему подготовить) — чтобы в нужный момент увидеть удачную возможность и быть в состоянии воспользоваться ей. Например — нужно достаточно хорошо освоить какой-то фреймворк, что бы суметь получить оффер на «работу-мечту» (для которого этот фреймворк требуется), а для этого хотя-бы быть в состоянии (и хотеть) рассматривать такие позиции на рынке труда. В общем «лучше день потерять, чтобы затем за пять минут долететь» (С). Оцениваю удачу как 90% успеха, но часто только несколько процентов удач многие в состоянии использовать (или даже просто — заметить).
                                        Также приходится смотреть не только «в-глубь» (прокачивая один определенный скил или фреймворк или технологию), но и «в-ширь» — регулярно оглядываясь по сторонам, оценивая тренды и их возможную перспективу на 2-5-10 лет, изучая другие направления (метафора: не фокусироваться только на конной тяге, когда уже мимо начали ездить автомобили и трамваи). И это больше всего мне нравится в современном программировании — не только необходимость постоянно учиться, но и широкие возможности для этого (и да, знание английского минимум upper-intermediate — это «must have»).

                                          +1
                                          Крутая статья, спасибо автору)
                                            +1

                                            Есть пара моментов, довольно спорных.


                                            Вам стоит задуматься, не будущий ли программист вы, если…
                                            … вы не ожидаете бешеных доходов

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


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

                                            Неправда. Программист работает в тепличных условиях. Здоровье программиста расходуется гораздо медленнее, чем здоровье каменщика или шахтёра. Какая-нибудь шахта вместе с перерабатывающим комбинатом, например, может съедать подобно Молоху 0.1-0.4% от числа сотрудников в год только на несчастных случаях, плюс давать всем не-ИТР сотрудникам хронические заболевания годам к 40. Невозможно сорвать спину, двигая мышку. Конечно, заботиться о своём здоровье надо, но профессия программиста в этом плане мало отличается от других офисных профессий.
                                            Психические расстройства? Покажите статистику (я когда-то искал, там в лидерах няньки и персональные помощники, если я правильно помню). Психическая профдеформация, опять же, свойственна людям, работающим с людьми (учителя, врачи, милиционеры).
                                            Туннельный синдром? Для этого надо очень много печатать. Программист — не машинистка и не геймер, он больше думает, чем печатает.


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

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

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

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

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

                                                Знакомы ли вы с произведениями Кнута?
                                                (этот вопрос — примитивный и неточный мини-тест, насколько вы хорошо программируете)

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

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

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

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

                                                  В программировании? Маловероятно. Вы даже юным падаваном, если не кинетесь в первую встречную контору, а потратите немного времени на поиск работодателя, легко найдёте зарплату значительно выше рынка для молодых специалистов. Ну а так да, если вы хотите стажироваться бесплатно, никто вам не запретит.
                                                    0
                                                    Уважаемые хабровчане, возможно, кто-то сможет поделиться опытом по схожей ситуации:
                                                    Работаю системным аналитиком 3 года. В целом — все интересно. Нравятся задачи по верхнеуровневому проектированию системы, планирование ее развития, интерпретация хотелок бизнеса во что-то техническое, проектирование модели БД.
                                                    Но сколько себя помню, все время тянуло что-то покодить. Мелкие поделки на VBA (взял данные из БД и нарисовал отчет), простенькая CRUD-система по учету товара на складе (первый опыт написать что-то на flask, даже стыдно теперь открывать), недавно вот нарисовал api в паре с человеком, который делал фронт для этой же системы. И прям даже немного гордость берет, за то, что уже не так все плохо, как было раньше.
                                                    И вот хотел бы спросить у вас, может кто поделиться опытом перехода в программисты из смежного направления? Насколько это было для вас сложным?
                                                      0
                                                      И вот хотел бы спросить у вас, может кто поделиться опытом перехода в программисты из смежного направления? Насколько это было для вас сложным?

                                                      У меня, например, такое было лет 20 назад. Но я слабо представляю, чем мой или чей-либо другой опыт вам поможет. Легкость/сложность перехода в разработку — это совершенно индивидуальная штука, и никаких полезных рекомендаций, кроме тех, что исходят от Капитана Очевидности, никто вам не даст.
                                                      0

                                                      Ох… Ага. "Не все так однозначно"...


                                                      1993-й (или еще 92-й год был? Не помню точно уже… Но зима с 92 на 93-й). Оболочка с компилятором C. Прямой предок очень популярных сейчас оболочек с компиляторами...


                                                      Ситуация:
                                                      Одна из девушек в нашей конторе решила в дополнение к Basic и Pascal освоить C, ибо прогрессивно и модно. Задача и текст программы были взяты из учебника, с одной из первых страниц: "открыть файл на запись, записать в файл значение, закрыть файл на запись, открыть файл на чтение, прочитать значение, закрыть файл на чтение, выйти из программы."


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


                                                      Добавляем кучу "printf", чтобы понять, где вешается: "собираемся открывать файл, открыли файл для записи, записали в файл собираемся закрывать файл..." и т.д. Компилируем. Запускаем программу… Все открывается, закрывается, открывается снова для чтения. Т.е. работает… Комментим "printf-ы". Компилируем без вывода диагностики — все снова работает. Удаляем комментарии с printf-ами из программы. Компилируем — все опять работает. Сравниваем с "исходником" исходника, после компиляции которого все вешалось — побитовое полное совпадение. Но результат компиляции того — черный экран и хард-резет, а этот компилируем — все работает… Но тут случились 90-е в полный рост, и стало не до особенностей работы всяких странных компиляторов...


                                                      PS: кто-то рассказал бы — я бы не поверил. Я материалист (почти) детерминистского толка :-) Но я сидел за соседним компьютером и подсказывал, куда вставить printf'ы для диагностики...

                                                        +1

                                                        На языке с "сырыми" указателями получить недетерминированное поведение, да ещё под DOS, — раз плюнуть. Опечатка в книжке — и программа делает немного не то, что должна. Иногда — незаметно, иногда — вешает систему.

                                                          0
                                                          Язык с «сырыми указателями» быстро приучает думать, а не просто копипастить чужой код.
                                                            +2

                                                            Меня это приучило не работать с сырыми указателями) Но всё равно приходится, это довольно-таки фундаментальная вещь и встречается часто.

                                                              0
                                                              Вот именно что фундаментальная и часто встречается. Тут просто надо привукнуть держать это в голове на интуитивном уровне.
                                                            0

                                                            Там было интереснее… Исходник, который по результатом опытов начал компилироваться в работающую программу, побитово совпадал с исходником, который исходно в скомпилированном виде приводил к мервому зависанию.
                                                            Сама программа, извините, fopen, fwrite, fclose, fopen, fread, fclose, printf. Переменная, кажется, вообще одна была, глобальная, статическая — в которую байт из файла читали.

                                                              +1

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


                                                              Если у вас вдруг сохранился исходник, вы, вероятно, найдёте в нем баг.


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

                                                                0
                                                                По моему опыту, в простых случаях баг в программе более вероятен, чем баг в компиляторе.

                                                                Если мы говорим про компиляторы тридцатилетней давности, ещё когда TDD не изобрели, то там можно встретить что угодно
                                                                  +1

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

                                                          0
                                                          «вы знаете, как сделать лучше любую программу, любой сайт, любое мобильное приложение.» Вот это прям про меня. Но я не могу переписать десяток уже существующих программ.
                                                            +2
                                                            Большое спасибо за статью! Как раз на пути к IT-индустрии, и материал оказался интересным и полезным.

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

                                                            Самое читаемое