О кодерах, программистах и инженерах-программистах

    На этот пост меня натолкнули недавние статьи на Хабре "Кто такой программист?" и "Почему Python так хорош в научных вычислениях".

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

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

    image

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

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

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

    image

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

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

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

    image

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

    image

    и в итоге появилась такая отдельная профессия как UI/UX-дизайнер. Чуть позже все поняли, что требовать совмещать в одном лице как профессионала в области разработки ПО, так и профессионала в какой-то предметной области — это сложно и дорого. Как пример, посмотрите на 1С'ников (заранее извините, никого не хочу обидеть, у меня родной брат бывший 1С'ник) — по идее это должен быть программист-бухгалтер, а по факту получается недобухгалтер и недопрограммист.

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

    В плюсе оказались все. И это хорошо, и по этой модели сейчас работает все большее и большее количество компаний. Достаточно посмотреть на резюме на хедхантеровских сайтах — ищут именно «Senior-разработчиков микросервисного Java-бэкенда» или «ReactJS Middle developer», а «знание специфики банковской сферы» или «опыт в отрасли XXX» в хотелках указывается в лучшем случае как «будет плюсом».

    image

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

    Именно поэтому можно сказать, что разделение на «кодеров» и «программистов» устарело лет 20 так назад, сейчас эти понятия размылись и разделение не имеет смысла.

    Но тут все-таки хочется как-то разделить тех, кто просто «придумал алгоритм и излагает его в виде кода» и тех кто занимается «разработкой ПО».
    И вот тут старое разделение снова пригождается. Того, кто просто придумал алгоритм и пишет по нему код, достаточно корректно будет считать "кодером", а вот того, кто занимается не только придумыванием алгоритма и кодированием, а еще написанием тестов, документации, проработкой архитектуры и API, заботится о читаемости и надежности кода, и принимает участие во многих других процессах, можно считать "программистом".

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

    А учитывая, как часто обстоят дела в разработке ПО в сфере инжиниринга:
    «Открою ужасающий секрет — embedded-софт тестируют как минимум на порядок меньше и хуже, чем любой зачуханный веб-сервер. И пишут его зачастую динозавры, отладчик — это для слабаков, а «если код компилируется, значит, все работает».
    … Я не шучу, к сожалению.» [из комментариев]

    «Ничего удивительного. По моим наблюдениям, многие «железячники» считают, что производство устройства — это искусство, подвластное избранным, а вот написать к нему код он сможет сам, так, на коленке. Это ж вообще мелочь. Получается работающий тихий ужас. Они очень обижаются, когда им на пальцах объясняют, почему их код дурно пахнет, потому что… ну… они ж железку сделали, че тут, программа какая-то.» [из комментариев]

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

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

    Ну. И что?
    Реклама
    Комментарии 125
    • +18
      Если кто-то хочет предложить другие варианты толкований и наименований

      А я хочу наоборот, предложить перестать придумывать варианты толкований и наименований кодеров, программистов и инженеров-программистов. Потому что все они — субъективное мнение их придумавшего человека, но все они сводятся к одному и тому же — мерянию, кто круче. О, Вася кодер, Вася — отстой. О, Петя инжЫнер, Петя крут!
      • 0
        О, Вася кодер, Вася — отстой. О, Петя инжЫнер, Петя крут!

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


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

        • +5
          На практике хороший кодер может быть гораздо полезнее бестолкового инженера.

          Вы забыли ещё поведать, чем кодер отличается от инженера.
          • –1

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

        • 0

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


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

        • +7

          Вопросы, поднятые в статье не имеют значения. "что тебе в имени моём?"
          Но (shut up and take my money) где взять такую футболку?!? ;)

        • 0
          Инженер-программист — это специальность и квалификация, которая формализована (более-менее) в рамках образовательного стандарта (если мы говорим о России). Зачем выдумаывать новые определения и градации?
          • +2

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

            • 0

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


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

              • 0
                Инженерная графика (начертательная геометрия), например, как минимум. Плюс физика, экология, электротехника, и прочее. Короче говоря, то, что относится к «техническим дисциплинам», но не относится к разработке ПО.
                • 0
                  Математика и философия — самое главное… а остальное — по ситуации.

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

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

                  Физика — фундаментальная и естественная наука (относится к 01.00.00 группе в классификаторе ВАК). Хз, с ней много вариантов, можно читать и отдельными курсами, или обобщенным (например, КСЕ, куда все естественнонаучные дисциплины можно включить), а можно включать в другие — физика нормально включается в математические курсы и в философию, хотя это и спорно. Но её все равно в подавляющем большинстве вузов (кроме физических специальностей и навороченных инженерных) читают отвратно — на уровне повторения школьного материала (профит стремится к 0). Но сейчас стали появляться смежные курсы, например,
                  Киберфизические системы
                  — туда все в кучу собирается: и физика, и электроника с электротехникой, и программирование, и еще чего-нибудь (хотя лучше бы её действительно изучать после физики, химии и электротехники).

                  Ну а экология — это вообще не техническая наука, а как дисциплина — она является общеобразовательной. Группа в калссификаторе — 03.00.00, т.е. биологические науки, а кодом технических специальностей является 05.00.00, список наук вот:
                  05.01.00 — инженерная и компьютерная графика
                  05.01.00 — инженерная геометрия и компьютерная графика
                  05.02.00 — машиностроение и машиноведение, мехатроника, роботы, сварка
                  05.03.00 — обработка материалов
                  05.04.00 — энергетическое машиностроение, атомные реакторы, турбомашины
                  05.05.00 — транспортное горное и строительное машиностроение
                  05.07.00 — авиационная техника, летательные аппараты
                  05.08.00 — кораблестроение.
                  05.09.00 — электротехника, светотехника.
                  05.11.00 — приборостроение
                  05.12.00 — радиотехника, радиолокация, радионавигация.
                  05.13.00 — информатика, системный анализ.
                  05.14.00 — энергетика, электростанции.
                  05.15.00 — разработка и эксплуатация полезных ископаемых
                  05.16.00 — металлургия и материаловедение, нанотехнологии
                  05.17.00 — химические технологии, полимеры и композиты
                  05.18.00 — пищевая промышленность, консервирование.
                  05.19.00 — лёгкая промышленность
                  05.20.00 — агроинженерные системы.
                  05.21.00 — деревообработка.
                  05.22.00 — транспорт, железные дороги, навигация, судовождение
                  05.23.00 — строительство
                  05.24.00 — геодезия
                  05.25.00 — документалистика
                  05.26.00 — безопасность труда
                  05.27.00 — электроника
                  • +1
                    Её уже давно массово не преподают — я только несколько человек знаю, кто её проходил, а уж погроммистам она точно не нужна. А так у большинства она уже давно заменена инженерной и компьютерной графикой (как было у меня, например), думаю на «Программной инженерии» компьютерную графику точно должны преподавать.

                    Как раз наоборот, ее до сих пор преподают массово, посмотрите учебные планы.
                    «Компьютерная графика» — это отдельная дисциплина, и она бывает обычно уже на втором курсе, а «инженерная графика» — на первом, и пользоваться CAD'ами там часто запрещено (в зависимости от маразма кафедры и конкретного преподавателя) — только от руки.
                    • 0
                      «инженерная графика» — на первом, и пользоваться CAD'ами там часто запрещено (в зависимости от маразма кафедры и конкретного преподавателя) — только от руки.

                      У нас в ПГТУ можно было переходить с карандаша на CAD после особого разрешения препода, когда тот увидит, что через руки дошло))) И это правильно, IMHO.
                      • +2
                        Правильно для людей, которые учатся на разработчиков ПО и в жизни потом карандашом ничего чертить не будут? :)
                        • 0
                          И всё-таки правильно. Вспомним хрестоматийный пример с рыбкой от Лебедева.
                          Должно именно что дойти «через руки».
                          Потому что разработчик ПО это тоже инженер, особенно если он заканчивает по этой специальности ВУЗ.
            • +2
              Кроме того, есть профессиональный стандарт «программист», который включает типовые названия должностей " программист", «техник- программист», " инженеры программист" и различные из вариации типа старший/младший/ведущий
            • +8

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


              И ещё каждый раз читатая такую статью, мне так и преставляется тру-инженер-ни-в-коем-случае-не-кодер в какой-нибудь компании по установке пластиковых окон, который написал самопальный алгоритм сортировки и, считая, что уж он точно занимается true computer science, садится писать трактат "о программистах и кодерах". Почему? Потому что от хороших специалистов и просто талантливых людей я никогда не слышал подобной ереси про разделение и тому подобное.

              • –2
                Ну хоть в то, что есть люди, которым можно доверить проектирование архитектуры ИТ-проекта, а есть те, которых нужно бить по рукам, когда они отступают прописанных архитекторами правил, — вы верите?

                А в то, что существуют начинающие программисты — джуны?
                • +3

                  Я считаю, что все эти баронские титулы — потешить ЧСВ да зарплату поурезать. Сениор-помидор в одной компании будет "джуном" в другой и наоборот. То же самое касательно кого бить по рукам, а кого не бить. И если уж подходить формально, то бить надо всех, потому что уже давно никто не пишет качественное программное обеспечение — времена не те. Но если всех бить, то кто будет программировать?

                  • –1
                    Это индустрия.
                    Просто удобная маркировка.
                    Индивидуально подходить к каждому в промышленных масштабах невозможно.

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

                    Но ведь вы, будучи круто-спецем, не хотели бы ждать, пока вас оценят спустя 2 недели испытательного и начнут платить полную зарплату? А хотите полную зарплату сразу?

                    Для этого и нужны формальности.

                    Жизнь показывает, что даже не являясь 100% гарантированными маркерами — все равно эти формальности существенно упрощают «кого на какую работу поставить и что от него ожидать»
                    • –2

                      Это не титулы. Это уровни квалификации.


                      Область ответственности Software Developer ограничена исключительно написанием кода в соответствии с заданными требованиями. В общем ему нужно концентрироваться исключительно на технологиях программирования. А вот границы ответственности Software Engineer куда больше — это тот, кто должен проектировать и разрабатывать новое решение, применяя инженерный подход и математические методы и одновременно с этим Software Engineer (в отличии от Software Developer) еще несет еще и юридическую ответственность, так что в ряде забугорных стран (например, в Канаде и в некоторых случаях в США, в зависимости от штата и отрасли) для того что бы занимать эту должность необходимо пройти лицензирование. В перспективе Software Engineer — личинка архитектора, а архитекторов кстати тоже много разных, я встречал Enterprise Architect, Solution Architect и Application Architect.


                      Разница между sd и se — как между строителем и инженером-строителем, или как между слесарем и инженером-конструктором. Улавливайте?


                      Также в эту замечательную кучку еще добавляется Algorithm Engineer — грубо, это тот, кто разрабатывает алгоритмы — человек-мостик между алгоритмами и программной инженерией, что уже подразумевает наличие академической квалификации (в Северной Америке для sd уже достаточно пройти курсы, se — подразумевает наличие степени бакалавра или хотябы специалиста, иногда еще и специальной лицензии, ну а ae — это как минимум магистр, хотя большинство из тех кого я видел имели PhD, хз насколько моя выборка репрезентативная).

                      • 0
                        потому что уже давно никто не пишет качественное программное обеспечение
                        Хм, можете пояснить на примерах, когда писали качественно?)
                        • 0

                          По личным ощущениям — до кризиса 2008/2009. На примерах это будет тяжело показать.

                          • +1
                            На примерах это будет тяжело показать.

                            Понятно. Но обычно в таких случаях перед утверждением употребляют фразу «по моим субъективным ощущениям»)
                    • +1
                      По личному опыту, дедовщина встречается везде. Так уж устроен человек, что хочется себя любимого считать лучше других. Вне зависимости от реального положения дел.
                      Яркий пример тому — всякие старшие/младшие менеджеры, старшие/младшие помощники младших/старших уборщиков и иже с ними.
                      Полностью согласен, что надоели эти бесконечные споры о том, кто есть кто. «Ты просто быдло, делающее сайты на ПХП». «Ты просто динозавр, считающий свои байты на ассемблере». Ах если бы только вместо этих пустых разговоров люди просто пошли бы и прогали, прогали, прогали…
                    • +2
                      1) Нет ни кодеров, ни инженеров-программистом (хотя у меня в дипломе именно так и написано), ни кого еще-нибудь. Есть программист — человек, которой пользуясь своей головой в состоянии решить поставленную задачу (спроектировать архитектуру, придумать алгоритм), и при помощи набора инструментом (IDE, блокнот+компилятор, прочие редакторы чего-нибудь) выдать решение (ПО, код/скрипт).
                      А вот кто есть, так это:
                      — хреновый программист;
                      — нормальный программист;
                      — ну и крутой, наверное, программист (ну по крайне мере 2 первых точно есть).
                      2) И хватит уже про 1С. Сам сейчас занимаюсь 1С.
                      Во-первых, 1С-ник не должен знать бухгалтерию.
                      Во-вторых, если кто-то думает, что 1С-ники недопрограммисты, зайдите на infostart.ru и почитайте статьи чуваков с высоким рейтингом, либо найдите публикации с высоким рейтингом. Если 1С-ники недопрограммисты, то какого черта 1С стоит практически в каждой конторе. Как можно пользоваться ПО, которое делают недопрограммисты.
                      В-третьих: 1С — это инструмент, не более! Особо упоротым ненавистинкам прошу это помнить — каждому инструменту свое место. А то что там буквы русские надо писать, ООП нет — так это не проблема. Если надо быстро развернуть учетную систему, либо написать ее с нуля, 1С вне конкуренции — это будет быстрее и дешевле.
                      3) Спасибо за внимание.
                      • –3
                        спроектировать архитектуру, придумать алгоритм

                        Это называется «программная инженерия». При этом тут в двух словосочетаниях перечислено две должности: Software Architect и Algorithm Engineer :-)
                        И еще
                        и при помощи набора инструментом (IDE, блокнот+компилятор, прочие редакторы чего-нибудь) выдать решение (ПО, код/скрипт)

                        Software Developer

                        Нет ни кодеров, ни инженеров-программистом

                        Угу, в 2018 году все напрочь забыли про разделение труда…

                        Есть программист

                        Программист — слишком резиновое слово если честно. Из того же ряда, что и работник, гражданин, человек…
                        • 0
                          По поводу ваших иноземных терминов — все это должен уметь программист.
                          Software Architect — любая программа имеет архитектуру и структуру, даже самая кривая, даже когда человек написал свой первый «Hello world.» Вопрос качества — это отдельный вопрос.
                          Algorithm Engineer — блин, да без алгоритма нельзя написать ни одной строки кода. Любая строка кода — это часть алгоритма.
                          Software Developer — я так понимаю вы отнесли использование инструментов к Software Developer. Немного не туда.
                          А кто такой программист, я написал выше, и вовсе это не резиновое понятие, у меня оно заняло одно предложение (длинное правда).
                          • 0
                            Об этом я и писал в статье.
                            без «создания алгоритмов» работать нельзя в принципе, т.к. уже никто не формулирует задания вида «аллоцируй массив, сделай цикл для прохода поэлементно, и т.д.» (такое только в школе на уроках информатики встречается), сейчас разработчик оперируя информацией о том «что есть и что должно получится» разрабатывает последовательность действий. По сути дела, даже элементарный SQL-запрос — это уже алгоритм.
                            • 0

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

                              • +1
                                Про архитектуру, кстати, не соглашусь. Можно вообще о ней не думать, наплодить божественных объектов и супер-методов на двадцать экранов, логику писать сразу в обработчик UI-событий, все зависимости наглухо прибить гвоздями и кучу всего захардкодить. И это даже будет работать.
                                И самое смешное что это очень часто встречается именно в производственной сфере, где все именно "_инженеры_-программисты".
                                Собственно, об этом и шла речь в последней части статьи.
                                • 0
                                  Software Architect — любая программа имеет архитектуру и структуру, даже самая кривая, даже когда человек написал свой первый «Hello world.» Вопрос качества — это отдельный вопрос.

                                  Действительно, ведь разработать архитектуру
                                  #include <iostream>
                                  
                                  using namespace std;
                                  
                                  int main()
                                  {
                                      cout << "Hello, world!" << endl;
                                      return 0;
                                  }

                                  и вот такую — это одинаково просто, любой кто только-что написал Hellow World, следом и такое напишет. Зовите сюда Васю-программист с 3-мя классами церковно-приходской школы — он все умеет, он все нам сейчас быстро напишет.

                                  Algorithm Engineer — блин, да без алгоритма нельзя написать ни одной строки кода. Любая строка кода — это часть алгоритма.

                                  Кто разрабатывает алгоритмы и объясняет как их имплементировать? А имплементация алгоритмов != разработке алгоритмов и методов решения задач. И это будет не сортировка пузырьком :-) А что-нибудь что-то типа такого а на выходе из этого получить что-то типа такого

                                  А кто такой программист, я написал выше, и вовсе это не резиновое понятие, у меня оно заняло одно предложение (длинное правда).

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

                                  Программист — это специалист, занимающийся разработкой программного обеспечения для различного рода вычислительно-операционных систем (С) Т.е. все, кто хоть как-то занят на производстве и сопровождении софта. В Оракле, например, таких погроммистов 100+ тысяч человек, вот только специализация и должности у каждого будет своя, будут там и Sofdtware Engineer, и QA Engineer, и Filed Application Engineer, и Solution Archtect, и Application Architect… тысячи их!
                                  • +2
                                    Кто разрабатывает алгоритмы и объясняет как их имплементировать?

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

                                    • 0

                                      И? Что Вы этим хотите сказать?
                                      Тут алгоритм в одну строчку: Condition =>Action. Детерминированный конечный автомат с одним входом и двумя состояниями :-) в детстве была такая игрушка — Луноход… ну там памяти программ хватало на более сложные последовательности действий :-)


                                      Что Вы этим хотите сказать? Выше уде приводили другой пример достойной задачи для программиста: разработать архитектуры ПО выводящего в консоль Hello World. Теперь конечный автомат. Вы все хотите меня убедить в том, что программисты могут разрабатывать только самые примитивные алгоритмы и простейшие архитектуры?


                                      Но вообще тема не раскрыта, внутри обработчика может быть зашито что-нибудь жуткое типа обхода графа в ширину, как и сам обработчик может быть частью какого-нибудь большого дерева принятия решений.
                                      А еще это совсем общее — у меня тоже такой простой алгоритм: От пользователя на сервис А приходить запрос "оптимизируй мне механическую структуру [censored]" после чего совершается действие B "структурная оптимизация [censored]", даже еще проще Вашего: У меня вообще ошибок нет — должна быть успешная [censored][censored] в 100% случаях без [censored], т.е. Совсем примитив: Событие => всегда одно действие :-)

                                      • +1

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

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

                                          Замечательно. А зачем? Какое это имеет отношение к корневому комментарию:
                                          спроектировать архитектуру, придумать алгоритм


                                          Это называется «программная инженерия». При этом тут в двух словосочетаниях перечислено две должности: Software Architect и Algorithm Engineer :-)
                                          И еще
                                          и при помощи набора инструментом (IDE, блокнот+компилятор, прочие редакторы чего-нибудь) выдать решение (ПО, код/скрипт)


                                          Software Developer
                                          Нет ни кодеров, ни инженеров-программистом


                                          Угу, в 2018 году все напрочь забыли про разделение труда…


                                          который все кинулись кинулись комментировать и рассказывать про Hellow World? И к этому, который Вы прокомментировали:

                                          Кто разрабатывает алгоритмы и объясняет как их имплементировать? А имплементация алгоритмов != разработке алгоритмов и методов решения задач. И это будет не сортировка пузырьком :-) А что-нибудь что-то типа такого а на выходе из этого получить что-то типа такого


                                          • +2

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

                              • +3
                                Если 1С-ники недопрограммисты, то какого черта 1С стоит практически в каждой конторе. Как можно пользоваться ПО, которое делают недопрограммисты.

                                Тут нужно разделять «разработчиков самой 1С-платформы», и тех, кто делает что-то уже на ее основе (конфигурации и т.д.).
                                По аналогии с браузерами: учитывая сложность современных движков, их разработка и поддержка требует недюжей квалификации и тонкой оптимизации всего что можно. Зато в веб-фронтенд порог вхождения низкий, и говнокод там можно встретить на каждом шагу, что не мешает миллионам людей ежедневно серфить по WWW.
                                • 0
                                  Ой. Тут люди высказываются за то, что бы вообще всех обзывать программистами и не парится, а Вы так вообще крамолу страшную предлагайте — вводить цветовую дифференциацию штанов в рамках одной платформы/одного языка :-)
                              • +1
                                Объясните, какой смысл об этом всём рефлексировать? Просто делайте свою работу (ну или не делайте), jeez.
                                • 0
                                  Мне коллеги из КБ Королева рассказали историю, как проектировали лунник. И у них была лишняя масса на возврат и никак не могли найти решение.
                                  Был объявлен штурм ( килограмм экономии возвращаемого веса — 80 руб премии. Это месячный оклад просто инженера). И вот товарищ один придумал и сэкономил тонну, полет стал возможен.
                                  Сразу после утверждения решения он получил премию 80 000 руб. Это квартира машина дача в двух экземплярах по тем временам.
                                  Так вот он кто? Мидл, джуниор?
                                  Если он сеньор, то кто тогда Королев?

                                  Ерунду придумали HH.RU и все стали тиражировать.
                                  У токарей, слесарей, монтажников и т.п. 6 разрядов и не нужно придумывать всякие заумные слова.
                                  Питонщик 5 разряда — всё сразу ясно. А строил он «Днепрогэс» или «Байконур» — какая разница. Он классный мастер своего дела по python и может сваять любой проект по хорошим чертежам.

                                  Еще байка:
                                  Как то Капица старший проходил практику у Круппа и у того супер пупер пресс не выдавал нужного усилия. Крупп объявил 10 000 марок тому кто починит. Ну и Петр Леонидович осмотрел, посмотрел и одним ударом кувалды всё поправил. А Круппу неохота платить за 3 мин работы 10 000 и он запроси смету, мол если там будет один удар, то заплачу по тарифу 30 пфеннингов. И Петр Леонидович составил ( кажется в химииижизни было факсимиле) 1. Один удар кувалдой 0.3 марки
                                  2. За то, что знал куда ударить — 9999,7 марок.

                                  • +2
                                    Еще байка:

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

                                    • 0
                                      А что, кроме Джуниор-Мидл-Синьор Developer'ов никого нет больше?
                                      Team Lead, Tech Lead, Solution Architect, Application Architect, Enterprise Architect…
                                      В отличие от абстрактного «инженер-программист», эти понятия как раз более точно описывают позицию, зону ответственности и решаемые задачи.
                                      Это не хх.ру придумали, подобные специализации десятки лет в цивилизованном мире существуют, а у нас только в недавние годы использоваться начали.
                                      • 0
                                        Будьте так добры поясните смысл этих слов.
                                        Мой пост, я извиняюсь, но это как анекдоты комментировать, о грани умения и творчества.
                                        Есть дело где не нужно придумывать новое, есть дело, где без нового никак не получается.
                                        Разве «Team Lead» предполагает всегда создание нового? Или это административная должность?
                                        • 0

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

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


                                        Вы реально верите цитатам в интернете настолько, что цитируете их?

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

                                        В тоже время встречаются сайты вообще без тестирования.
                                        • 0
                                          Не стал бы репостить, если сам своими глазами не видел подобное. У меня опыт не то чтобы огромный, всего 6 лет в сфере АСУТП и встраиваемых систем в фирмах разной величины + полтора года фриланса (шабашек) около + плюс рассказы бывших коллег и однокурсников о своих проектах, и по всему этому могу сказать, что ваш случай, скорее всего, очень большое исключение из общей картины в отрасли.
                                          И да, даже на хабре подобных комментариев довольно много встречается, значит, не я один так думаю :)
                                          • 0
                                            Я 12 лет, уже: оптоэлектронника, авионика, системы управления и навигации, цифровая обработка сигналов и разработка ASIC'ов, сейчас вроде бы углубился в сторону исследований в области САПР'ов.
                                            То что Вы описывайте — это называется кустарщиной. В РФ (есть с чем сравнивать), к большому сожалению кустарщина процветает повально и чувствует себя вольготно, но это не значит, что это нормально. Меня периодами привлекают корпеть на СБИС и embedded — ну там алгоритм, который я выдумаю за 2-3 недели, потом будет еще прототипироваться и тестироваться на протяжении нескольких месяцев, и это только на нашей стороне — потом он улетает в заморские страны и там над ним продолжают измываться и это только на этапе разработки… ну где-то в общем только через год выпекается ASIC
                                            • 0
                                              То что Вы описывайте — это называется кустарщиной. В РФ (есть с чем сравнивать), к большому сожалению кустарщина процветает повально и чувствует себя вольготно, но это не значит, что это нормально.

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

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


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


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

                                                • 0
                                                  правда заметил отраслевую зависимость

                                                  Вот отраслевая зависимость как раз интересна в данном контексте.
                                            • +2
                                              Работал в проекте, который пишет операционку для смартТВ.
                                              Почему-то очень многие под embedded воспринимают собранные на коленке умные розетки, ардуины, и другую кустарщину.

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

                                              В общем, на самом деле массовый embedded продукт, который есть в каждом доме, обычно проверяется и тестируется чаще, чем сайты.
                                              • 0
                                                Работал в проекте, который пишет операционку для смартТВ.
                                                Почему-то очень многие под embedded воспринимают собранные на коленке умные розетки, ардуины, и другую кустарщину.

                                                Ну, скажем так, встраиваемый софт на базе Linux или QNX все-таки ближе к миру «большого программирования», и методы перенимает оттуда, и там все получше.
                                                Я же имел основной опыт, и рассказываю именно о программировании под ПЛК и микроконтроллеры, и там уровень далеко не «ардуин», а вполне сложных промышленных систем — в моем случае это были сферы нефтегазодобычи и автоматизации зданий — тоже, согласитесь, довольно ответственная отрасль. И там все часто обстоит довольно грустно, почти как в трактате "о простых и непростых программистах". То есть подход «главное, запилить проект и изделие, а программу написать — это фигня» там распространен довольно плотно.
                                                в которых есть прошивка и работает она надежно (понятно что везде могут встречаться баги).

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

                                                К слову сказать, нашумевшая история с Тойотой в этом плане очень показательна: www.viva64.com/ru/a/0083
                                                • 0

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

                                                  • 0
                                                    К слову сказать, «написано криво» — не значит, что оно будет работать ненадежно.


                                                    Конечно не значит — потому что оно проходит тестирование — о чем собственно вся эта ветка.
                                                    • 0

                                                      Так я говорил, что тестирование часто только ручное (никаких автоматических регрессионных тестов), и часто весьма поверхностное (по принципу "херак, херак и в продакшен).

                                            • +3

                                              Я обычный php/laravel + js/react быдлокодер. И вот читаю это все и мне жутко.


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


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


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


                                              Плюс еще холивар западной и пост-советской терминологии и идеологии.


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

                                              • 0

                                                Жуль Верн, Обитаемый Остров?


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


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


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


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


                                                Что касается западной и пост-советской: То идеология одинаковая, у них даже жестче чем у нас (родственнику за бугром как-то ради заветной приставки "инженегр" в должности пришлось пойти учиться в магистратуру, а после еще несколько месяцев ушло на лицензирование, в итоге чойт втянулся и захотел стать PhD). Терминология — только буквами по большей части отличается. Все стандарты у нас имеют международное происхождение, вплоть до сокращенного перевода буржуйских (и с этим у нас кстати туго, метрология и стандартизация у нас переживает не самые лучшие времена). Ну т.е. вся разница только в том, что инженерное дело у нас деградирует, а число инженегров постепенно стремится к 0, а у нас повально процветает кустарщина, везде (возможно в этом и кроется причина холивара).


                                                А хипстеры, не хипстеры… в общем настал момент позвать Кота Леопольда :-)

                                                • 0

                                                  На тему кстати холивара различий западной и нашей терминологии — ИМХО буквоедство чистой воды

                                                • 0
                                                  У меня вот язык не поворачивается назвать себя программистом, хотя работаю в области системного программирования. Базовые алгоритмы давно написаны и выложены в виде исходников. Как правило требуется разобраться в документации\чужом коде и вкрячить готовое решение со значительными или незначительными доработками. Т.е требуется связывать сущности, а не писать новые алгоритмы. Может программист-комбинатор или программист-комбайнёр (combiner)?
                                                  • +1
                                                    А зря вы так. Инженеры, проектирующие системы промышленной автоматики, не изобретают сами реле, пускатели, и логические контроллеры, и не занимаются научными исследования алгоритмов регулирования. Но разве они от этого перестают быть инженерами?
                                                    Инженеры, проектирующие здания, не изобретают новые марки бетона, формы несущих панелей и технологии заливки фундаментов — все уже давно изобретено и проверено. Но разве они от этого перестают быть инженерами?
                                                    Очень часто задача правильной адаптации и интеграции уже существующих изделий и идей бывает сложнее и ценнее, чем велосипедостроения с нуля.
                                                    • –2
                                                      Может программист-комбинатор или программист-комбайнёр (combiner)?


                                                      — слесарь-монтажник или чесальщик-мотальщик кода ))

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

                                                      • 0

                                                        Вы связываете сущности по алгоритму связи, придуманному вами (наверное).

                                                      • +2
                                                        Я просто оставлю старую добрую статью Ершова здесь:
                                                        «Программирование — вторая грамотность»

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

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

                                                        • +1
                                                          Точнее — тот кто умеет решать задачи с помощью эвм.

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

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

                                                          • 0
                                                            Да, у меня такое тоже было. Могу сказать, что это по всей видимости зависит от величины самой компании, и от того, на какой рынок она работает.
                                                            Откройте любой сайт с вакансиями, выберите сферу связанную с разработкой ПО и вбейте в поиск «бизнес-аналитик» (business-analyst), и увидите, что такие компании есть, и более того, за прошедшие 10 лет в отрасли их стало ощутимо больше, и это радует.

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

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