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

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

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

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

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

Признаки плохого программиста


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

На «Хабре» в свое время был пост, в котором обсуждались признаки плохого программиста:

• наличие «волшебного», «вуду» кода или кода, который не имеет никакого отношения к целям программы, но всё равно тщательно поддерживается;

• исправление ошибок написанием избыточного кода, который замещает данные, полученные при исполнении неисправного кода;

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

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

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

Сложности с указателями


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

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

Сложности с рекурсией


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

Следование договоренностям


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

@victorb, автор упомянутого выше поста указывает следующие «симптомы», связанные с неумением следовать парадигме разработки:

• использование любого необходимого синтаксиса для того, чтобы «вырваться» из предлагаемой языком модели, и написание оставшейся части программы в императивном/процедурном стиле;

• (ООП) Попытки вызова не статических функций или присвоения переменных в неинстанциированных классах, проблемы с пониманием, почему такие конструкции не компилируются;

• (Реляционное) Обращение с базой данных как с хранилищем объектов, исполнение всех JOIN'ов и проверки целостности на клиентской стороне;

• (Функциональное) Создание многих версий одного и того же алгоритма для обработки разных типов или операторов вместо передачи функций высшего порядка обобщенному алгоритму;

• (Декларативное) Установление индивидуальных значений в императивном коде вместо использования связывания данных (data binding).

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

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

Максим Нальский, основатель сервиса Pyrus:




Какими качествами должен обладать хороший программист?

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

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

Каким образом непрограммист (менеджер, например) может отличить хорошего программиста от плохого?

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

Дайте, пожалуйста, «вредные советы», правила плохого тона для начинающих программистов.

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

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

Руслан Фазлыев, СЕО Ecwid:




Какими качествами должен обладать хороший программист?

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

Каким образом непрограммист (менеджер, например) может отличить хорошего программиста от плохого?

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

Может ли хороший программист быть перфекционистом? Почему?

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

Должны ли компании опасаться программистов-перфекционистов? Почему?

Их не нужно опасаться, ими нужно управлять. Частые промежуточные дедлайны – обязательно для перфекционистов, если у них не «рожается» код, нужно делать «кесарево».

Как вы относитесь к тому, что большую часть кода для решения задач разработчик берет из интернета?

Отлично, если это ускоряет результат.

Должен ли хороший программист использовать выражения return true или return false в циклах? Правда ли, что хороший программист обычно cтарается использовать меньше условных операторов? Правда ли, что хороший программист почти не использует оператор «else» и ему подобные?

Хорошему программисту нужно заниматься тем, чтобы сегодня же код работал у клиента. Игрок должен забивать голы, как он это делает – не важно. Опасайтесь слова «архитектура» от программистов. Говоря же о красоте кода – прекрасно, когда она есть естественно и по ходу дела, и да, море «if'ов» – не красиво и глюкоопасно. Но я не хочу это обсуждать с программистом: все, что я хочу знать – когда будет готов протестированный качественный релиз.

Дайте, пожалуйста, «вредные советы», правила плохого тона для начинающих программистов.

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

Евгений Потапов, гендиректор «Сумма АйТи»:




Какими качествами должен обладать хороший программист?

В отличнейшей книге Coders at work (серии интервью с известными разработчиками) — один из главных вопросов «каким образом вы изучаете чужой код?».

Хороший программист это тот, кто может поддерживать чужой проект, тот кто может после запуска продолжать дописывать свой код, тот, чей код могут поддерживать другие люди.

Каким образом непрограммист (менеджер, например) может отличить хорошего программиста от плохого?

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

Может ли хороший программист быть перфекционистом? Почему?

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

Должны ли компании опасаться программистов-перфекционистов? Почему?

Должны, но компании должны спрашивать отзывы с предыдущих мест работы, и если там все хорошо — сильно не бояться.

Как вы относитесь к тому, что большую часть кода для решения задач разработчик берет из интернета?

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

Позволительно ли хорошему программисту хронически не помнить некоторые алгоритмы и синтаксические конструкции языков, которыми он пользуется в работе? Почему?

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

Должен ли хороший программист использовать выражения return true или return false в циклах? Правда ли, что хороший программист обычно cтарается использовать меньше условных операторов? Правда ли, что хороший программист почти не использует оператор «else» и ему подобные?

Хороший программист это не тот, кто не пишет goto, делает return там, где это положено, и знает все паттерны ООП из Gang of Four на зубок.

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

Виктор Шабуров, технический директор Snapchat:




Какими качествами должен обладать хороший программист?

Smart and get things done.

Каким образом непрограммист (менеджер, например) может отличить хорошего программиста от плохого?

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

Может ли хороший программист быть перфекционистом?

Да, это очень хорошо.

Должны ли компании опасаться программистов-перфекционистов? Почему?

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

Должен ли хороший программист использовать выражения return true или return false в циклах?

Лет 10 назад, когда я еще кодировал, ответ был «нет».

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

Надо писать красивый код и использовать столько if, сколько нужно. В Java, например, пользоваться && и ||, чтобы сократить if.

Правда ли, что хороший программист почти не использует оператор «else» и ему подобные?

Я использовал else, когда было нужно, но есть тонкости.

Дайте, пожалуйста, «вредные советы», правила плохого тона для начинающих программистов.

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

Так же смотреть не столько на зарплату, сколько на перспективу проекта и выделяемые акции компании. В успешном проекте с сильной командой, как Looksery или Machine Learning Works, на акциях можно в десятки раз больше заработать, чем получить зарплатой за это период.



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

Комментарии (67)


  1. ittakir
    27.10.2016 19:48
    +20

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

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

    Вопросы про то, можно ли использовать else, return true и т.п. напомнили мне вопросы на quora.com, там тоже частенько спрашивают такую чушь. Ребята, пишите так, как вам удобно, главное чтобы ваши коллеги поняли код. Не нужно загонять себя в рамки только потому что вы где-то прочитали, что «хорошие программисты не используют else».


    1. M-A-XG
      27.10.2016 22:50
      -15

      Нужно код упрощать, а не искусственно плодить функции (уменьшать экраны). Купите себе больший монитор.
      Как их потом называть такие функции?
      doSmth[1-N]()? doOneandTwo()? authAndPrind()? :)
      Передавать в них 100500 параметров или использовать ООП, а потом ломать голову, где же еще используется член класса?


      1. ittakir
        28.10.2016 08:46
        +2

        Дело не в размере монитора, а в количестве информации, которую может усвоить человек. Гораздо проще разобраться в функции на несколько строк, а не на несколько сотен.


      1. alexander-shustanov
        28.10.2016 09:54
        +1

        Есть такое понятие, как Кошелек Миллера. Человек может одновременно держать в голове от 5 до 9 объектов. Иногда приходится писать длинные функции, и лучше разбить ее на некоторые логические куски, которые будут «разгружать» внимание.


        1. M-A-XG
          28.10.2016 13:01
          -6

          Меня, видимо, заминусовали олени.

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


          1. Temirkhan
            28.10.2016 13:26
            +1

            Не усложнит. Если огромный кусок лапши под(к примеру) методом

            specificUserRegistration(..)

            разбить на составляющие(опять же, к примеру)

            registerUserViaSocialNetwork(...);
            attachManagerInSpecificway(..);
            sendNotificationsTouserAfterRegistration(..);
            sendNotificationsToManagerAfteRegistration(..);

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


  1. poxu
    27.10.2016 19:59
    +8

    Те, кого менеджеры считают хорошим программистом и те, кого программисты считают хорошим программистом это часто разные люди. Вот прекрасный пример.


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


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


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


    1. vadimr
      27.10.2016 23:43
      -3

      Это не программист, а любитель программирования.


      1. asdf87
        28.10.2016 04:51
        +3

        А программист — это тот кто китайский файрвол делает?


        1. vadimr
          28.10.2016 05:14
          -4

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


          1. Areso
            28.10.2016 07:01
            +6

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


            1. vadimr
              28.10.2016 09:12
              -2

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

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


              1. wing_pin
                28.10.2016 10:29
                +2

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


                1. vadimr
                  28.10.2016 11:05
                  -1

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


                  1. poxu
                    28.10.2016 11:28
                    +3

                    Это пока что. Дело с Фольксвагеном думаю только первый звоночек.


              1. bigfatbrowncat
                28.10.2016 10:56
                +4

                «Неприятная работа» — это сутки-двое дебага с целью найти один хитрый SEGFAULT.

                То, о чем здесь идет речь — это моральная дилемма.

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

                Это касается не только программистов, а любых специалистов вообще.

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

                Нравственность можно отменить. Но результат для общества бывает плачевным.

                Добрый совет. Не берите на работу людей, которые готовы совершить любую мерзость просто при наличии задачи от менеджера. Потому что эти люди, например, могут осуществить промышленный шпионаж. Или что-то еще, что им выгодно. А на вас им наплевать, как и на ваших заказчиков/клиентов и т.д…


          1. poxu
            28.10.2016 09:07

            Спецназовцы тоже решают поставленные профессиональные задачи. И сантехники. И даже менеджеры решают. У вас слишком широкое определение.


            1. vadimr
              28.10.2016 09:22
              +2

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


              1. poxu
                28.10.2016 09:41

                Ну вот допустим есть 2 программиста — один решает задачи, поставленные работодателем, а второй решает их хуже. Но код первого раз в 10 медленнее кода второго. Какой из них лучше?


                1. kloppspb
                  28.10.2016 10:00
                  +4

                  А что в ТЗ сказано про скорость работы?


                  1. poxu
                    28.10.2016 10:05

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


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


                    1. vadimr
                      28.10.2016 11:02
                      +1

                      Если медленный код устраивает, то в быстроте нет никакой ценности. Поэтому в современной практике редко используется ассемблер.

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


                      1. poxu
                        28.10.2016 11:23

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


                        1. vadimr
                          28.10.2016 11:31
                          +1

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


                          1. poxu
                            28.10.2016 11:47

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


                            1. vadimr
                              28.10.2016 13:01

                              Дык, смотря у кого какие требования бизнеса.


                              1. poxu
                                28.10.2016 13:08

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


                        1. kloppspb
                          28.10.2016 11:50

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


                          1. poxu
                            28.10.2016 12:01

                            Очевидно, что при урезаных вводных и применительно к данному случаю — первый.

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


                            1. kloppspb
                              28.10.2016 12:13

                              Это выявление выглядит как совершенно инфантильное докапывание уровня «а кого ты больше любишь, папу или маму?».

                              Интересен ответ — спросите у того самого работодателя, никто, кроме него ответа вам не даст.


                              1. poxu
                                28.10.2016 12:20

                                Тут целая статья посвящена такому докапыванию, так что оно в тему :).


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


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


                      1. mata
                        31.10.2016 04:32

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


                        1. vadimr
                          31.10.2016 04:56
                          +1

                          Windows тоже непереносимо, однако, используется часто.


                          1. mata
                            31.10.2016 23:18
                            -1

                            windows как раз таки переносимо
                            не знаю как сейчас но раньше было :)


                    1. bigfatbrowncat
                      28.10.2016 11:14

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


                      1. poxu
                        28.10.2016 11:26

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


                        1. bigfatbrowncat
                          28.10.2016 11:30

                          Никакой. Информации недостаточно.

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

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


                          1. poxu
                            28.10.2016 11:46

                            Вы написали, что второй делает что-то хуже. Но не объяснили, что и почему.

                            Один в сроки закрывает задачи, другой пишет более быстрый код.


                            Тот кто пишет более быстрый код делает это потому что ему позволяет квалификация.


                            1. bigfatbrowncat
                              28.10.2016 14:12
                              +1

                              У опытного менеджера сроки всегда с запасом. Но заказчик может потребовать срочную хотелку «вчера».

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

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

                              Лично я стараюсь начальнику всегда предложить два варианта — быстрый и правильный. Объяснить Pros & cons. Пусть он выбирает. А я сделаю, как он считает правильным.


                1. dsdr
                  28.10.2016 12:50

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


  1. amaksr
    27.10.2016 21:02
    +11

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

    Эх, а я вот частенько гуглю базовые функции, например поиск подстроки в строке.
    А все потому, что в голове конкретная каша из Java, JavaScript, PL/SQL, PHP, MS SQL, MySQL и т.д. и т.п.: где-то подсчет символов идет с 0, где-то с 1; по-разному обрабатываются NULLs, у всех разные параметры и разные допустимые значения.
    Про все это можно сказать «базовые вещи», но например в мою память уже не помещаются.


    1. nazarpc
      27.10.2016 23:06
      -1

      Такое обычно подсказывает IDE. В JS всё сложнее, там подсказки паршиво работают, но вот для PHP всё очень даже хорошо, в Java есть типизация, тоже должно быть отлично.


    1. 3aicheg
      28.10.2016 03:39
      +6

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

      Я, например, сколько лет программирую на Питоне, никогда не помнил, как добавляется элемент в set. Это add()? Это append()? Это insert()? Это +=? |=? «Базовой вещью» в данном случае является знание того, что set вообще существует, для чего нужен, что его не надо писать самому или использовать array/list там, где лучше всего подойдёт set. А детали не грех загуглить.


  1. bagiroff777
    27.10.2016 21:33
    +13

    Все, кто приводит обобщения, — огурцы


    1. Durimar123
      28.10.2016 12:50
      +2

      Вы обобщаете…


  1. M-A-XG
    27.10.2016 22:41
    -3

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

    Имитация бурной деятельности — наше все. :)

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

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

    > Если разработчик пишет код по принципу «работает, и ладно», его вряд ли можно считать профессионалом высокого уровня.

    Хм, почему вы тогда дальше доколупывались до интервьюируемых, стоит ли избегать перфекционистов? :)

    > «симптомы», связанные с неумением следовать парадигме разработки

    А зачем следовать этим парадигмам? Ради того, чтобы следовать? Культ карго? :) PHP, JS — мультипарадигменные.

    > и написание оставшейся части программы в императивном/процедурном стиле;

    Основа моего кода — продедурный стиль — понятный всем. А не широкопальцевая ИБД.

    > Установление индивидуальных значений в императивном коде вместо использования связывания данных

    Шойта?

    > насколько быстро решает простые задачи

    В представлении менеджера — да че ты вые, там всего одну строчку добавить.
    А то, что потом все из-за нее падает, то ему пох. :)

    Но да, простые задачи нужно решать простыми способами. :)

    >Первейший способ быть плохим программистом – искать сложных решений там, где есть простые.

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

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

    > Хороший программист это тот, кто может поддерживать чужой проект

    Любой говнокодер это может :)

    > тот кто может после запуска продолжать дописывать свой код

    А в чем проблема? :)

    > тот, чей код могут поддерживать другие люди.

    +1

    > Должен ли хороший программист использовать выражения return true или return false в циклах?

    А в чем проблема?

    > Правда ли, что хороший программист обычно cтарается использовать меньше условных операторов?

    Хороший программист старается писать понятный код…

    > Дать задачек на кодирование. Например, мини проект на вечер — и посмотреть как быстро сделает, качество кода и как обрабатывает крайние случаи.

    Это менеджер оценить не сможет… :)

    > Как и любой специалист, он должен уметь общаться с коллегами, и когда нужно, с клиентами.

    Я человек простой. Вижу дебила, шлю найух. :)


    1. M-A-XG
      28.10.2016 13:10

      Я услышу контраргументы минусующих говнокодеров или нет?
      Или я раскрыл чей-то секрет? :)


      1. bigfatbrowncat
        28.10.2016 14:28

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

        >> Хороший программист это тот, кто может поддерживать чужой проект
        >Любой говнокодер это может :)

        Если по-честному, то поддерживать — это:
        1. Долго чинить ошибки,
        2. Добавляя новую функциональность.

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

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

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

        >> Дать задачек на кодирование. Например, мини проект на вечер — и посмотреть как быстро сделает, качество кода и как обрабатывает крайние случаи.
        >Это менеджер оценить не сможет… :)

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

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

        >> тот, чей код могут поддерживать другие люди.
        >+1

        Вы же сказали, что поддерживать любой «говнокодер» может. Так в чем проблема? Или «говнокодер» может поддерживать только код, написанный «крутокодером»? А чтобы поддерживать код слабого программиста, кто нужен?..

        >Я человек простой. Вижу дебила, шлю найух. :)
        Думаю, что вы лукавите. Или работаете в одиночку над инди-проектом.


        1. M-A-XG
          28.10.2016 16:36

          >наделает плохих «костылей», которые не починят ошибку, а доломают систему окончательно

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

          >Менеджер, во-первых, иногда сам в прошлом — кодер.

          Тогда это не менеджер, а замаскированный программист…

          >А если он не разбирается, то найдет доверенного эксперта и заручится его поддержкой.

          То есть все же сам менеджер не может этого определить…

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

          Перечитайте, что говорилось в статье и что я цитировал.

          Улавливаете разницу:
          «поддерживает говнокодер после кого-то»
          и
          «кто-то поддерживает после говнокодера»
          ? :)


          1. bigfatbrowncat
            28.10.2016 17:30
            +1

            >Но поддержит же.

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

            >Тогда это не менеджер, а замаскированный программист

            Я видел в жизни порядка 10 хороших манагеров. Больше половины в прошлом были девелоперами. Это с трудом укладывается в молодой голове, но годам к 35-40 многим вполне себе талантливым людям надоедает писать код. Устают. Внимание не то, память не та. Но при этом они не прекращают пониимать, как это делать хорошо и правильно.

            >То есть все же сам менеджер не может этого определить…

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

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

            >«кто-то поддерживает после говнокодера»

            Я-то разницу улавливаю. Но вы ее в своем комментарии не делали. Вы просто написали «любой говнокодер может». Это — ложное утверждение.

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


  1. Antervis
    28.10.2016 05:57
    +11

    Я как перфекционист и любитель early return крайне возмущен шовинизмом в свой адрес!


    1. VioletGiraffe
      28.10.2016 13:43
      +1

      Я вот тоже не понял, что не так с return в цикле. Типа, количество точек возврата нужно снижать? Нигде ещё не встречал такой рекомендации. Пишу по-разному — как понятнее и красивее получается.


      1. bigfatbrowncat
        28.10.2016 14:30

        Есть такая рекомендация, есть. В гайдлайнах крупных компаний.

        Она имеет некоторый смысл в C/C++ (например, не пропустить return — это может привести к беде). В Java, например, она совершенно бессмысленна.


  1. AlexPu
    28.10.2016 09:40

    Я плохой программист — вы меня убедили… И я согласен получать тот доход, что я получаю сейчас и больший доход через год


  1. ServPonomarev
    28.10.2016 09:46

    Начинающий программист — пишет код как умеет,
    Опытный программист — использует паттерны, методологии и прочая,
    Гуру — пишет код, как умеет.

    До понимания некоторых вещей просто дорасти нужно.


    1. 3aicheg
      28.10.2016 09:53
      +6

      Настоящий программист — пишет код блеать!


      1. KlimovDm
        28.10.2016 10:10

        Настоящий программист не использует Паскаль! © Ed Post


      1. AlexPu
        28.10.2016 11:14
        -3

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


        1. 3aicheg
          28.10.2016 11:24
          +4

          Приносит он прибыль или нет — вопрос отдельный, весьма малое отношение имеющий к тому, какой он программист и программист ли вообще.


          1. AlexPu
            28.10.2016 11:56

            Но так бывает, что тот кто приносит прибыль именно программист — Ну хотябы потому, что его наняли на жту должность… Хотя он может не соответствовать высоким критериям духовности, которые вы предъявляете к носителю этого титула


        1. KlimovDm
          28.10.2016 12:27

          Простите, но это полный бред. Пример — программист в ВПК, в космической программе etc.


          1. AlexPu
            29.10.2016 12:33

            Ну бред так бред — сосите лапу дальше


  1. Pashehon
    28.10.2016 12:50

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

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


  1. lisitsynalex
    28.10.2016 12:50

    «Опасайтесь слова «архитектура» от программистов»

    Ой, а объясните почему? Пожалуйста.


    1. VioletGiraffe
      28.10.2016 13:49
      +2

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


    1. KlimovDm
      28.10.2016 14:00

      Потому что Руслан Фазлыев, СЕО Ecwid, сказал это либо не подумав, либо он сильно не в теме. imho.


  1. vadimr
    28.10.2016 15:13
    +1

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