Время от времени встречаю на форуме вопросы, какие уровни у программистов бывают, и что это означает. Предлагаю своё вольное переложение классических эзотерических архетипов применительно к IT
Итак, существует всего семь уровней развития программиста как специалиста:
1.
Apperentice programmer. Знает основы программирования и базовые понятия: "функция", "цикл", "переменная" и тд. Язык программирования и платформа реализации не важны — hello world одинаково легко пишется практически на всех языках, а дальше с помощью мануала к нему постепенно добавляется необходимое примитивное содержимое. (Человек, который не может из мануала скопировать программу hello world по природе не может являться программистом.)
2.
Juinior programmer. Знает основные особенности какого-то языка, умеет решать типовые задачи, не задумываясь, впрочем об эффективности и возможных изменениях. Верит, что с помощью проверенных временем технологий copy/paste и search/replace из пяти проектов с sourceforge.net можно сделать всё что угодно. Получившее назовут "индусским кодом", но это не признак национальности, а состояние сознания.
3.
Programmer. Очень хорошо знает какой-нибудь язык программирования, технологию и основные особенности одной или нескольких платформ. Частно с успехом применяет рефакторинг, но думает, что применение паттернов проектирования от GoF автоматически позволит добиться успеха в любой ситуации. Его девиз — "любая проблема может быть решена путём введения дополнительных абстрактных слоёв". Точка. Вторую часть пословицы он предпочитает не замечать. Но часто случается так, что сложная иерархическая структура из паттернов оказывается нежизнеспособной, и требуется вмешательство Team Lead'а с классическим KISS, чтобы вдохнуть жизнь в его программу.
4.
Senior programmer. Начинает
действительно чувствовать "запах кода". Часто интуитивно может принять или отвергнуть какое-то решение (и обычно оказывается прав). Перепробовав (возможно даже мысленно) несколько вариантов решения, может найти наилучший.
5.
Team Lead. Может разработать довольно сложное приложение, и в отличие от аналогичного решения programmer'а оно заработает с первого раза. Знает, какие паттерны в данной ситуации можно применять, а какие не стоит. Может написать понятную другим спецификацию на программу и объяснить Programmer'у, как проще (и лучше) по этой спецификации написать работающее приложение.
6.
System Architect. Разрабатывает не отдельные приложения, а сложные гетерогенные комплексы, самостоятельно решающие большую задачу в какой-то области. Описывает внутренние и внешние интерфейсы системы, предусматривая её изменение, расширение, интеграцию со сторонними приложениями и даже перенос на другую платформу. Может написать спецификацию на весь программынй комплекс. Может (действительно может) соединить пять произвольных проектов с sourceforge.net в один большой.
7.
Guru. Ему не важен язык программирования, платформа, технология и область применения. Для любой задачи он найдёт лучшее решение и реализует его (с помощью нижестоящих архетипов), применив наиболее подходящие инструменты.
Написанное является моим humble opinion, полушуткой, но в каждой шутке есть... ИМХО тема слишком серьёзная для КУ.... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Курица — это инструмент, с помощью которого одно яйцо производит другие.