Дапамажыце dev.by 🤍
Падтрымаць

Как распознать хорошего программиста?

50 каментарыяў
Как распознать хорошего программиста?
Как нанимателю распознать насколько хорошим и талантливым окажется программист? Это не такое простое дело, как кажется. Описание опыта работы в резюме далеко не всегда может раскрывать полностью правду о программисте – с одной стороны опыт может быть обманчивым и существовать скорее только на бумаге, а не в реальности. С другой стороны далеко не всегда прекрасный программист в "официальном" резюме может указать толком и подробно, в чём, как и почему он действительно так хорош. Хотя и есть ряд тонкостей, благодаря которым можно почерпнуть даже из резюме полезную информацию, раскрывающую "качественность" программиста. Я считаю себя достаточно неплохим программистом. Кроме этого, мне довелось провести немало времени и с другой стороны – отбирая и интервьюируя кодеров при найме на работу. Поэтому я считаю, что я накопил неплохой опыт в "распознании" программиста и хочу поделиться им в этой статье, которая может оказать полезной для людей, которым доводится отбирать специалистов на работу. Хотя, кто знает, вполне вероятно эта статья поможет и хорошему программисту, который, несмотря на свои прекрасные профессиональные навыки, не умеет толком преподнести себя работодателю. Пол Грэм в своей популярной статье "18 ошибок, которые убивают стартапы " отмечает следующее: "Причиной смерти большинства e-commerce стартапов в девяностых стали плохие программисты. Большинство тех компании создавались бизнесмена, которые думали, что для успеха IT проекта нужно придумать хорошую идею, а потом просто нанять программистов, чтобы они её реализовали. Однако в реальности всё оказывается гораздо сложнее. Сложнее просто потому, что такие наниматели не могли определить хороший программист перед ними или нет. Кроме того, они толком и не видели хороших программистов, поскольку профессиональный и качественный кодер редко когда жаждал в качестве работы выбрать "реализацию видения проекта заказчиком", не разбирающимся в IT и программировании. В результате, такие бизнесмены нанимают тех программистов, которые им кажутся хорошими (написано у него в резюме Microsoft Certified Developer, значит, хороший кодер, по-любому). А потом удивляются, почему их проект пыхтит как бомбардировщик второй мировой, а конкуренты проносятся мимо на реактивных самолётах. Такое может и проходит в случае большой компании, но для стартапа смерти подобно. Так как нанять хорошего программиста, если вы сами не программист? Ответа на это нет, и вряд ли будет. Можно для начала нанять одного хорошего, чтобы потом с его помощью отсеивать остальных, но этого одного хорошего тоже надо как-то найти сначала…" Я совершенно не согласен с автором данного отрывка. Я считаю, что есть набор чётких индикаторов, по которым можно распознать хорошего программиста или же наоборот посредственного. Вот я и постарался изложить эти индикаторы качественности и некачественности в данной статье.

1. Увлечённость.

Во время работы мне довелось встретить доселе небывалый тип программистов: программист-карьерист. Представители данного типа кодеров пошли в программирования только потому, что считается, что именно в IT можно сделать хорошую карьеру. Они и пальцем не притронутся к кодированию в своё свободное время, они не понимают, зачем у одного человека дома может быть несколько компьютеров и зачем они объединены в сеть. Это только работа и заниматься всем этим стоит только на работе. Они не учат ничего нового по своей воле, программирование для них – это рутинная работа с девяти до шести. Они не обсуждают за пределами офиса какие-то технические вопросы, да и на работе обсуждают их без всякого энтузиазма. Я считаю, что хорошие программисты всегда увлечены программированием. Хороший программист будет программировать даже бесплатно – просто для себя. Хороший программист может проесть вам всю плешь разговорами о какой-то технической проблеме, с которой он столкнулся во время разработки, и как он её разрешил, полагая, что это действительно важно и интересно. Некоторые видят в этом определённую социальную закомплексованность – мол, нет у человека других тем для разговора, кроме как о каких-то там багах или функциях. Однако если вы хотите распознать хорошего кодера, подобная страсть к обсуждению программирования пусть даже и в ущерб каким-то другим навыкам общения, будет хорошим показателем качественности кодера. Если вы наняли человека, который способен на одном дыхании полчаса обсуждать технологию, которую он использует – вам определённо повезло.

2. Самообразование и интерес к обучению новому.

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

3. Интеллект

Некоторые люди из бизнеса и менеджмента считают, что недостаток тактичности в общении – это прямо свидетельство о необразованности и невысокой интеллектуальной развитости человека. Однако умственные способности человека имеют много проявлений и эмоционально-вербальное только одно из них. Хорошие программисты не тупые. В принципе. В реальности – они одни из умнейших людей из всех, кого я знаю. Причём у многих из них при этом ещё и прекрасные навыки общения с людьми. Клише о том, что настоящий программист в разговоре в компании не может толком и предложения вставить, это всего лишь клише. По моему опыту общения с лондонской Ruby юзергруппой, за небольшим исключением в ней собрались исключительно умные, общительные и разговорчивые люди. Глядя на них, вы не подумаете никогда "ну что за стадо гиков" по крайней мере до тех пор, пока вы не подойдёте поближе и услышите, что они с жаром обсуждают RESTful приложение со сложным пользовательским интерфейсом клиентской части. Это не значит, что они будут чувствовать себя как рыба в воде в любой обстановке. Но это значит, что если окружающие условия и социальный контекст комфортабелен вы сможете прекрасно побеседовать с ними как с самыми общительными людьми (а может даже и ещё лучше, поскольку по моему опыту программисты, если говорят о какой-то вещи, то это действительно интересно и полезно, а не просто изысканный, но пустой стёб). Даже не думайте нанимать "немого" программиста, который вроде как должен быть хорошим. Он им не будет. Если человек не может в обычной расслабленной обстановке подержать беседу, толку и на работе от него будет немного. С другой стороны, далеко не все те, кто умён и сообразителен имеет потенциал стать действительно хорошим программистом.

4. Скрытый опыт

Данный пункт можно было бы включить в пункт "увлёченность", но он является таким важным индикатором качества программиста, что лучше его было лишний раз подчеркнуть и раскрыть. Я начал программировать, когда мне было девять лет, на компьютере Commodore 64. Затем я перешёл на PC, где возился с Pascal. В четырнадцать лет я, потратив уйму времени, написал на C и Assembler небольшой движок для графических эффектов с обращением напрямую к видеокарте. Это было то, что я называю "стадией кокона". Когда я делал первые шаги на этой стадии, я был посредственным программистом, мне не хватало уверенности взяться за что-нибудь действительно сложное. По её окончанию, я как-раз-таки приобрёл эту уверенность и знал, что могу кодировать вполне себе хорошо практически всё что угодно. Отражено это всё каким-либо образом в моём резюме? Нет, конечно. Я искренне верю, что у любого хорошего программиста резюме представляет собой лишь только верхушку айсберга, а большая часть всего скрыто. Что-то кажется не совсем уместным, что-то не соответствует профилю вакансии, однако является при этом замечательным достижением и подтверждением профессионализма и увлечённости человека как программиста. Хороший вопрос который стоит задать на собеседовании – "Не могли бы вы рассказать что-нибудь о своём личном проекте, даже и наоборот, особенно, если он не связан с вашим рабочим профилем – что-нибудь, на что вы тратили своё свободное время и это не нашло отображения в резюме?". Если человек не может на этого ничего ответить (при том, что резюме у него на двадцать страниц), то он, скорее всего не самый хороший программист. Даже программист с наиболее исчерпывающим резюме, должен иметь пару-тройку проектов, которые остались за кадром.

5. Разнообразие технологий.

Здесь всё очень просто. Так как хороший программист всегда любит обучить и узнать и попробовать новую технологию, а также образно выражаясь "поиграться" с ней даже если он не имеет отношения к его профессиональной деятельности, любой хороший программист старше 22 лет должен разбираться в доброй дюжине различных технологий. Они могут быть и в каком-то смысле бесполезными, но для хорошего программиста изучение новой технологии – один из самых интересных способов провождения свободного времени. Чем они, собственно, со свойственной им увлечённостью и регулярно занимаются. Конечно, они не должны быть гуру во всём, но любой хороший специалист будет разбираться в целом перечне различных технологий. Но здесь необходимо учитывать одну тонкость. Любой Java программист средней руки перечислит вам в своем списке известным ему технологий, что-нибудь типа Java, J2EE, Ant, XML, SQL, Hibernate, Spring, Struts, EJB, Shell scripting и т.д. На самом деле это всё по сути ветви и части одной технологии. Непрограммисту это, наверное, понять сложно, но если спросить у программиста как все его перечисленные навыки коррелируют между собой, то всё станет ясным. Переспециализированность кодера на одной и той же технологии – это индикатор не самого лучшего программиста. Наконец, хороший знак, если технологии известные программисту представляют собой самые новые и продвинутые языки или там фреймворки. На момент написания статьи (Ноябрь 2007) это Merb, Flex, RSpec, HAML, UJS и многие другие. Они кстати, тоже связаны между собой и через несколько лет их перечисление будет таким же перечислением "одной и той же" технологии, как и в примере с Java. Правда, здесь надо упомянуть, что стоит разделять понятия разнообразности и прогрессивности. Знание разнообразных технологий за определённый промежуток времени это положительный индикатор, в независимости от того насколько они прогрессивны. Одновременно является положительным фактором и знание новых технологий программирования, в независимости от того, насколько впоследствии исчезнет их вариативность и разнообразность.

6. Формальность квалификации

Это как раз тот момент, когда "официальная" квалификация программиста не является индикатором его качественности. Хороший программист может иметь специализированное образование, а может и не иметь. Различные сертификаты типа MCSE или SCJP могут означать высокий уровень кодера, а могут и нет. Они призваны быть доступными и желательными для всех программистов, но не более того. Всё что они означают - это наличие у человека определённого набора знаний. Это, по сути, гарантия для нанимателей из больших компаний, что "вот этот вот парень знает Java, и у него есть официальное доказательство этому" без проведения всяких там интервью и собеседований. Если вы нанимаете программиста для стартапа или создаёте штурмовую команду для решения важнейших задач на уровне предприятия, вы должны игнорировать формальную "официальную" квалификацию программиста. Она ничего вам толком не расскажет о том, насколько хорош тот или иной специалист. Точно также нужно игнорировать и возрастной показатель – программист может быть хорош и прогрессивен и в 18 лет и в 40 лет. (Кроме разве что случая, когда вы подбираете команду одного возраста, для того чтобы создать лучшую кооперацию в коллективе, впрочем, возрастная дискриминация официально итак запрещена в большинстве стран). В завершение темы, по моим наблюдениям большинство посредственных программистов начинают кодировать только в университете, изучая соответствующие предметы. Большинство хороших программистов начинают программировать задолго до ВУЗа, и обучение в университете является лишь развитием их хобби, зародившимся ещё до него. Если ваш программист не занимался каким-либо кодированием до университета, а на практическом уровне начал участвовать в разработке только по его завершению на своей первой работе, то своре всего он вряд ли будет хорошим программистом.

Примечание:

Данные индикаторы не являются категоричными и единственно правильными. Вы можете найти хорошего программиста, который не будет отвечать каким-либо из вышеназванных показателей, но вряд ли он будет опровергать их все. Вы можете также найти и плохого программиста, который, наоборот, будет отвечать всем показателям. Но, так или иначе, я уверен, что если программист соответствует в хорошем смысле всем индикаторам, которые я перечислил, тем больше вероятность того, что он будет качественным специалистом, с которым стоит иметь дело. Итак, подведём итоги и тезисно по пунктам перечислим положительные и отрицательные индикаторы высокого уровня программиста. Положительные индикаторы:
  • Увлечённость технологиями
  • Программирование – не только работа, но и хобби
  • Способность прожужжать все уши о какой-то технической проблеме и методах её решения, если потребуется
  • Наличие достаточно серьёзных (а часто и не одного) своих персональных проектов
  • Изучает технологии по своему собственному желанию
  • Подтверждённое упорство о том, какую технологию лучше использовать в данном случае
  • Ощущает некомфортность, когда приходится работать с технологией, которую он не считает правильной
  • Очевидно умён и сообразителен, способен поддержать разговор на различные темы
  • Начал программировать задолго до поступления в университет
  • Располагает скрытыми знаниями и личными проектами неуказанными в резюме
  • Знание широкого набора технологий
Отрицательные индикаторы
  • Программирование для него – повседневная рутина, работа с 9 до 6
  • Нет стремления обсуждать технические проблемы, даже при их наличии
  • Изучает новые технологии только по принуждению
  • Готовность работать с любой технологией, с которой скажут, ему нет разницы и дела до этого.
  • Не выглядит особо быстросоображающим
  • Начал программировать только в университете
  • Весь опыт программирования укладывается в резюме
  • Сфокусирован исключительно на одной или двух технологиях и не знает ничего кроме них.
источник, оригинал
Чытайце таксама
Менеджарка Microsoft выгарэла, потым яе звольнілі. Яна ўжо тры гады без працы
Менеджарка Microsoft выгарэла, потым яе звольнілі. Яна ўжо тры гады без працы
Менеджарка Microsoft выгарэла, потым яе звольнілі. Яна ўжо тры гады без працы
3 каментарыя
Віншуем з паніжэннем: людзі ўсё часцей згаджаюцца на меншыя грошы дзеля працы
Віншуем з паніжэннем: людзі ўсё часцей згаджаюцца на меншыя грошы дзеля працы
Віншуем з паніжэннем: людзі ўсё часцей згаджаюцца на меншыя грошы дзеля працы
ШІ-інжынер не пісаў код уручную ўжо некалькі месяцаў. Падзяліўся адчуваннямі
ШІ-інжынер не пісаў код уручную ўжо некалькі месяцаў. Падзяліўся адчуваннямі
ШІ-інжынер не пісаў код уручную ўжо некалькі месяцаў. Падзяліўся адчуваннямі
Claude Code навучыўся сам выконваць задачы за праграміста
Claude Code навучыўся сам выконваць задачы за праграміста
Claude Code навучыўся сам выконваць задачы за праграміста

Хочаце паведаміць важную навіну? Пішыце ў Telegram-бот

Галоўныя падзеі і карысныя спасылкі ў нашым Telegram-канале

Абмеркаванне
Каментуйце без абмежаванняў

Рэлацыраваліся? Цяпер вы можаце каментаваць без верыфікацыі акаўнта.

Каментарыяў пакуль няма.