Pull to refresh

5 стадий некомпетентности программиста

GTD *
Translation
Original author: coderoom
Раз за разом я вижу отблески самого себя в «молодых» программистах. Они сражаются с теми же концепциями, что и я когда-то, попадают в те же ментальные ловушки и, в общем-то, делают те же ошибки. Написав пост 4 wrong ways, я задумался, насколько распространены эти ошибки, и можем ли мы их категоризировать. Я попадался в каждую из этих ловушек хотя бы раз, в некоторые по нескольку и видел те же ошибки у других.


Новичок-энтузиаст


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

Отличительные особенности кода: Каждая программа — один файл, содержащий сотню глобальных переменных, ни одна из которых не длиннее четырех символов.
Ошибочное мнение: Программирование — это очень просто.
Подкупающая черта: Мелкий трепет каждый раз, когда он открывает IDE и пристально смотрит на пустой проект, полный потенциала.
Читает: Fan fiction.
Скорее всего скажет: «Вы только посмотрите на эту крутую флэш-игру, что я только что закончил!»

Подающий надежды гений


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

Отличительные особенности кода: Использует собственную реализацию класса Vector. Начинает имена классов со своих инициалов.
Ошибочное мнение: Всему миру нужно научиться гораздо большему от него, чем ему от всего мира.
Подкупающая черта: Его так просто обидеть и заставить уйти в глухую оборону, упомянув что-либо, в чем он плохо разбирается.
Читает: Свой собственный блог.
Скорее всего скажет: «Ха, ну конечно же, все знают что функциональные языки программирования бесполезны для решения *каких бы то ни было* *реальных* задач!»

Поборник абстракции (Abstraction Freak)


Через некоторое время все программисты начинают осознавать, что они начинают каждую новую flash-игру, копируя 90% старой. Неожиданно им кажется, что они могут написать «супер»-движок, и тогда создание новой игры станет вопросом подбора спрайтов и написания конфигурационного файла, содержащего правила! Воодушевленный успехом, программист начинает верить, что архитектура любой программы должна быть обобщена, потом обобщена и, наконец, обобщена еще раз… К несчастью, придерживаясь этого правила слишком долго, программисты превращаются в поборников абстракции.

Отличительные особенности кода: Добавляет пять новых классов каждый раз, когда реализует новую функцию программы, и каждый из этих классов содержит в названии примененный шаблон проектирования и никакой информации о том, к какой функции программы они относятся. Любая бизнес-логика приложения спрятана в каком-то конфигурационном xml-файле где-то в репозитории.
Ошибочное мнение: Написать программу, которая интерпретирует набор конфигурационных файлов, неуклюже и с кучей ошибок описывающих программу, лучше, чем написать программу, которую нужно написать.
Подкупающая черта: Выражение болезненной концентрации на его лице в то время, как он борется с параличом анализа кода, незадолго до того как переписать функцию входа в систему четвертый раз за месяц.
Читает: Шаблоны проектирования, от корки до корки, каждый день вместо обеда.
Скорее всего скажет: «Я думаю, что мы должны начать новый проект по учету рабочего времени с написания обобщенного фрэймворка для приложений...»

Ветеран


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

Отличительные особенности кода: Первые десять строк любой функции, даже геттера или сеттера, содержат исключительно assert'ы. Все исключительные ситуации и негативные сценарии тщательно обрабатываются, комментарии щедро раскиданы повсюду.
Ошибочное мнение: Делать вещи «правильно» — это то же самое, что и сделать то, что нужно, только лучше.
Подкупающая черта: Аура взвешенности и спокойствия, которая даёт понять что даже в случае жуткой необходимости он не будет работать быстрее, оставляющая ощущение что ему бы лучше работать мастером бонсай, а не программистом.
Читает: joelonsoftware.com (да, даже после того, как Джоел перестал писать)
Скорее всего скажет: «Ну, я не смогу назвать сроки, пока я не подготовлю должным образом оценку на следующей неделе, но это будет… будет… [втягивает воздух сжатыми губами]… В общем, на реализацию предпросмотра перед печатью потребуется не меньше четырех человеко-месяцев, без тестирования и документации, конечно же.»

«Гуру»


После десятка лет скаканий от одного стереотипа к другому, наш новичок вырос и чувствует себя пустой раковиной от того энтуазиаста, которым он когда-то был. Однажды утром он просыпается и осознает, что огромная куча unit-тестов, assertion'ов, проверок и навыков проектирования, которые выросли вокруг его стиля — просто костыли. Костыли, которые тяготят его и которые ему вовсе больше не нужны! Он отбрасывает их и начинает писать такой простой и «голый» код, какой он только может придумать, лишь бы сделать именно то, что ему нужно! Свобода для новых функций! Свобода кода! Свобода!

Отличительные особенности кода: Пишет только на динамически-типизированных языках с сильно выраженной функциональной составляющей. Его код сильно похож на код новичка, за исключением того, что самого кода меньше, да и наименования переменных имеют смысл.
Ошибочное мнение: Думает, что его просветленность делает из него гуру без кавычек.
Подкупающая черта: Небольшой трепет каждый раз, когда он видит интересную проблему, которую он мог бы решить «всего шестью строками» кода.
Читает: news.ycombinator.com/newest
Скорее всего скажет: «Вы знаете, полиморфное наследование, на самом деле — жалкая замена функциональным литералам и динамическому типизированию.»


И… Вот она, моя карьера программиста как она есть. Мне интересно — кто-нибудь прошел те же стадии?
Tags: программированиеошибкинекомпетентность
Hubs: GTD
Total votes 201: ↑158 and ↓43 +115
Comments 134
Comments Comments 134

Popular right now