Страницы

четверг, 17 марта 2011 г.

Уровень мастерства программистов

Недавно думал о программистах и вот что пришло в голову.

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

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

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

4-ый уровень: Работают над сложными алгоритмами, комплексным ПО, проектируют архитектуру, пишут 3d графику, сложные шаблоны в C++, понимают паттерны проектирования, иногда для интереса осваивают функциональные языки, помогают другим, иногда пишут статьи, любят автоматизировать. В геймдеве это, например, разработчики больших игр, особенно на консолях.

3-ий уровень: Работают над простыми приложениями, реализуют подсистемы и таски, заданные программистами более высокого уровня. В геймдеве это разработчики казуальных игр, flash игр. В вебдеве - это общая масса php программеров, делающие простые сайты, индусы.

2-ой уровень: Работают на упрощенных языках (Visual Basic, Delphi), иногда не используют средства командной разработки, не владеют работой с указателями, часто спрашивают помощи на форумах, с трудом осваивают новую область без пошагового руководства, сэмплов. Обычно этому уровню учат в школах. Если попадают в геймдев, то выполняют рутинные задачи, пишут UI, заполняя xml данными, скриптуют игровую логику в редакторах.

Так-же есть зачатки программирования низшего уровня, это программирование путем создания блок схем в редакторах. Пример: программирование робота для детей, logo. Но я не рассматриваю этот уровень.

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

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

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

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

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

Пожалуйста, вносите свои поправки.

3 комментария:

Anonymous комментирует...

Народ в таких вот случаях говорит – Ахал бы дядя, на себя глядя. :)

Крутой сайт! Все красиво сделано.

ext_891084 комментирует...

а ты к какому уровню относишься?

just3r комментирует...

к 3-му, наверное =)