Pull to refresh

Comments 137

Спасибо. Хорошо написано, легко читается.

Может быть, есть еще и четвертая «стадия»? Когда программист понимает, что программирование — это не цель, а средство для зарабатывания денег начальником и теми, кто приходят к нему с заказами. И тогда он стремится отойти от программирования и занять позицию, по другую сторону баррикад, где язык программирования уже не Java или C#, или С++, а деньги…
Я имел ввиду отход от программирования. И просто привел частный пример.
Если человек отошел от этого дела, значит это было не его призвание, или же он просто стал слишком старым для этого. Впрочем даже если он перестанет кодить, он может разрабатывать архитектуру в целом и весьма успешно.
А насчет зарабатывания, то боюсь в нашем безумном мире мы все являемся инструментами для других, к этому нужно относится философски. А деньги никогда не должны являться главной целью в жизни. Это просто слишком мелкая цель, на них невозможно купить всё.
Деньги не цель, а средство для достижения целей. Конечно, всё не купить, но очень многое. Поэтому и стремятся люди к денежному изобилию. Не знаю как за границей, а в нашей стране программист никогда не будет получать больше своего начальника. Вот и получается, перед ним живой пример более успешного человека. А людей, которые работают по призванию, в любой отрасли мало. Вот и получается, что большинство стремится занять место повыше…
Это вы про госконторы говорите? В частном бизнесе нет места гордыне, цель начальника заработать денег, прежде всего себе, и если специалист будет приносить столько денег, что будет хватать и ему, и его боссу, то только дурак с заниженной самооценкой будет мерится с ним зарплатами и упускать «курицу несущую золотые яйца» из-за своего тщеславия.
А насчет вашего спора с Алексеем, соглашусь с вами. Наверняка есть 4 стадия, может и пятая. И по моему Алексея эта статья должна прежде всего научить тому, что нельзя так категорично решать какое у человека призвание, и что есть суть настоящий «тру» программер. Пройдет время, и как и автор статье перейдете на следующую стадию и с улыбкой вспоминать свой «юношеский максимализм»:)
Деньги — всего лишь одно из возможных средств. И не должны становиться фетишем. Не надо получать много — надо получать достаточно.
Гмм… А что есть «достаточность денег»?

Я думаю, достаточность денег оценивается не их количеством, а возможностью тратить их на то, что действительно нужно для жизни и духовного развития.
Знаете в чем смысл жизни? В чем смысл существования цивилизации на протяжении всей ее истории, от одноклеточной бактерии, до безволосой обезьяны перед монитором? Не_работать. Вот так все просто. И, ВНЕЗАПНО, это могут обеспечить только грязные зеленые бумажки. У человека есть потребность в самореализации, в «работе», но ближе всего к этому понятию слово «хобби», и с работой вообще, и с «работой на дядю» ©, в частности, это не имеет ничего общего — ибо это утилизация населения и цивилизованное рабство.
По-моему за статьей вы не увидели смысла — «никогда не считай, что твоя стадия — последняя».

И это относится не только к программированию. Ваш «смысл жизни» — тоже не последняя стадия, и отражает лишь ваш жизненный этап, а не является универсальной общечеловеческой истиной.
не работать — занятие далеко не для всех. Это скучно, например!
Кхм, кстати говоря некоторые качественные специалисты и не только программисты получают в разы больше своего начальства.
автор кагбе намекает — «спросите меня, как» :)
Некодирующий архитектор — плохой архитектор, так как гарантированно теряет квалификацию в отрыве от практики.
Конечно, архитектор пишет меньше, чем исполнитель, но пишет обязательно — прототипы, базовые интерфейсы и классы.
Похоже, отход от программирования по этой классификации — выздоровление…
«Частые ошибки:
  • Отказ от классов
  • Отказ от наследования
  • Отказ от статической-проверки типов
  • Отказ от программирования
  • »
    (Страуструп)
бывает 5 этап…

Сколько? и потом вопрос на чем сегодня пишем?
Это темная сторона силы.
и примерно в середине третей стадии пациент пишет статью о просветлении.

зыЖ у вас четвертая и пятая стадии из этой стати слиплись :)
У вас литературный талант. Особенно понравилось вот это:

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

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

По сути.
90% — «программисты», которые считают себя гуру, а на самом деле не умеют ничего, но гонору…
9% — программисты-«олимпиадники», стадия 1.
0.9% — программисты-разработчики, стадия 2.
0.09% — настоящие программисты, стадия 3.

Как-то так.
0.009 — еще более настоящие программисты, стадия 4.


0.00000001 — Дональд Кнут.
Я так и знал, что кто-то продолжит список и придет к одному-единственному программисту! Не уверен был лишь в том, кто это будет. :)
Если один программист — это 0.00000001%, то 100% — это 10'000'000'000 программистов. Хотя я с вами согласен. Все мы в душе хоть чуть-чуть, но программисты
Пойду скажу бомжу Васе, что он тоже немного программист. ;) Интересно, огребу или не огребу?
Ты кого тут за программиста вывел, фраерок? =)
О, елки, Вася, я не знал, что ты уже здесь!

Блин, даже как-то неудобно стало, у меня тоже Dell =)
(На правах юмора)
Не тушуйтесь, привыкайте. Скоро бомжей станет очень много, так много, что мы здесь, на Хабре, сможем сказать: «Бомжи среди нас».
и у них будет свой блог habrahabr/blogs/bums
а гуру у них будут сифон и борода
Это современный хакер. Какой же хакер без ноутбука.
Еще скажите — это Перельман. :))
UFO just landed and posted this here
Олимпиадников меньше, примерно столько же, сколько и программистов-разработчиков. Просто альтернативный начало в виде программиста начинающего, постепенно из говнокода начинающего писать супериерархии не описана в статье :)
> Просто альтернативный начало в виде программиста начинающего, постепенно из говнокода начинающего писать супериерархии не описана в статье.

О, боги, какими сложными конструкциями вы мыслите…
Первая и вторая стадия пройдена.

Урра, я 1 из 6,091,351 настоящих программистов!!! :)

P.S. Считал по данным из Вики за 2009ый год — 6,768,167,712
UFO just landed and posted this here
Все течет, все меняется. Все мы взрослеем и рано или поздно понимаем, что программирование ради программирования не должно быть целью. Но на каждой стадии, среди «пациентов» находятся те, что с яростью в глазах, пеной у рта и дымом из ушей готовы порвать кого угодно за инакомыслие. При переходе на следующую стадию — они таким же образом отстаивают новое мировоззрение. Это я к в вашему вопросу: «Впрочем, пациент ли?». Наверняка это не конец:) Жду описание следующей стадии, должно быть будет шедевр, как выше уже отметили — ваш литературный талант на лицо, так держать!
Холивар обычно характерен для начальной стадии любого из этапов. Каждый новый холивар пониже ростом (с учетом ранее пережитых).
Но, наверное, он нужен — как мотивация похоже.
Холивар за оптимальность, за структурность, за ротатабельность (ну пусть так, не нашел одного слова), за деньги, за место на кладбище (в раю, при перерождении...) :)

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

Непонятно о чем речь. Вы утверждаете, что профи знают используемые ЯП и технологии поверхностно? Возможно, что такие люди и есть, но я бы опасался с такими связываться. В любом случае назвать таких людей профессионалами нельзя.
Нельзя знать всего. Но на основании этого простого закона нельзя делать вывод, что человек непрофессионал.
Что за максимализм? Естественно, знать все нельзя, однако в своей профессиональной области надо пользоваться инструментами и технологиями со знанием дела, а не поверхностно. Взять тот же C++ — можно им пользоваться как Си с классами (без шаблонов, исключений и т.п), а можно — как полноценным ЯП с STL и Boost.

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

«Знать всего невозможно, — но сам этот факт не делает человека непрофессионалом. О профессионализме судят по другим критериям.»

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

Под инструментом я подразумеваю не конечную IDE (скажем, сам я в основном использую минимальный Emacs), а стек используемых технологий. А то, что его надо знать в своей области — это думаю, обсуждать не надо (можно ли назвать профессионалом веб-разработчика, который ни в зуб ногой в аяксе, или обратная противоположность — не может писать нормальные сайты без нагромождения скриптов?)

И результат результату рознь. Хотя здесь уже больше этический вопрос — некоторые разработчики специально пишут криво, чтобы потом поиметь бабки на поддержке, завязать клиента на себя (т.к. никто кроме него не сможет разобраться в коде) или просто из нежелания напрягаться (зачем нужны юнит-тесты, если все и так вроде работает, а если косяки выплывут потом, я буду уже не при делах). С какой-то точки зрения их можно назвать «профессионалами», но я бы не хотел иметь отношений с такими людьми, и увольняю их без зазрения совести.
он утверждает что профи знает то количество языков, которое необходимо. если бы он знал меньше — возможно он не смог бы решить какую то задачу. если бы он знал больше — он не смог бы изучить их достаточно глубоко. профи соблюдают баланс — они знают достаточно много языков чтобы решить все задачи и достаточно мало языков чтобы хорошо их изучить
Не понимаю фразы «знать достаточно мало языков чтобы хорошо их изучить». Можно расшифровать?
Ну если человек возьметься изучить на хорошем уровне все 100500 разновидностей языков то велика вероятность что у него на это уйдет вся жизнь, или большая ее часть, при этом на собственно работу времени и не останется.
Хороший специалист обычно знает некоторое ограниченное количество языков/инструментов, зато на хорошем уровне, при этом обучение не занимает у него значительную часть его времени. Кроме того, этот его набор инструментов обеспечивает ему весь комплекс необходимых средств для решения любой проблемы, с которой он может столкнуться в рамках своей профессиональной области.
А, ну с этим согласен, тут даже разговаривать не о чем. Просто изначальная фраза как-то не особо внятно выражала эту мысль.
> новый функционал практически невозможно вписать в монолит проекта
Ох как же вы надоели, математеке… ru.wikipedia.org/wiki/Функционал
Впиши мне это в «монолит проекта»?
Хинт, верным словом будет функциональность.
Под дурочка косишь что ли? Не понимаешь, что автор имел ввиду? Видимо понимаешь, раз правильный синоним привел. Что же получается, сказать по сути нечего, а сказать хочется? Отвечу тебе твоим же комментарием: «сюда не пишите, это же ваши мысли, что вы их всем подряд показываете?»
По сути есть что сказать?
Я не переношу людей пользующихся тем чем не умеют.
Использование термина «функционал» там где он, ну вообще ни как, не может быть использован, как раз говорит о том, что автор чего-то не понимает. Это ставит под сомнение вообще все написанное.
Если автор уверенно использует слово «функционал», значение которого ему неизвестно, почему я должен верить в то что он знает как пользоваться xslt, java и прочим или вообще знает, что это?
Да, мелочь наверное, но очень показательная, как по мне.
Больше не буду вам мешать, жуйте. :)
Функционал, в данном контексте, не термин, а программистский сленг
Вы тоже не постигли всей инвариантности термина «Функционал», Функционал, перечень обязанностей, выполняемых работником. Обычно Ф формально прописывается в должностных инструкциях. Но помимо формального Ф работник обычно выполняет и неформальный, который также имеет отношение к той позиции или должности, которую он занимает, при этом неформальный Ф может составлять большую часть работы. отсюда
Портал znanie.info
→ Энциклопедия Карьера
→→ Глосcарий терминов
→→→ Термины на букву «Ф»
→→→→ Функционал

Словарь неологизмов, криво заимствованных неологизмов. Там ещё много доставляющих названиями терминов. Например, «Фаворитизм» :)
>Я не переношу
вот после этого можно и не продолжать, уважаемый тролль
«Я не переношу» — это вы как девочка на высоких каблуках другой своей подруге в ночном клубе говорите
а здесь, в этой среде это неуместно
вам выражение grammar nazi знакомо?
вы намеренно надели эту шкуру?
или вы просто попали на этот сайт и забыли переключить контекст у себя в мозгу?
В математике функционал — то, чем пространство на число отображается. Классика — если у нас проведена вариационная постановка задачи, то из всех виртуальных полей реальным будет то, которое обеспечивает минимум функционала (для того цифирь и нужна).
Ну и что — это математический сленг. Именно сленг, несмотря на то, что на лекции по какому нибудь фану матану или другому ботану это выдается за истинное единственно возможное толкование (типа определения).
А почему ответил? Просто холивар — уровень восприятия, а не предметная область или грамотность.
Сдадия четвертая: понимание, что между написаным и ненаписанным кодом нет никакой разницы. :)
Угу, применим одно из правил ТРИЗ: программы нет, а функция ее — выполняется.
Есть небольшая разница: ненаписанный код проще отлаживать
ненаписанный код нет нужды отлаживать, ибо его даже не запускают
аминь
> Сдадия четвертая: понимание, что между написаным и ненаписанным кодом нет никакой разницы

Это больше на дзен похоже вне номеров, чем на тадию № такую-то :)
Для наибыстрейшего продвижения по стадиям рекомендуется участие в поддержке большого проекта…
Вторая стадия — «поборник абстракции», был еще один интересный пост на хабре где упоминался abstraction freak
Кажется я уже на подходе к третьей стадии…
Хотя по сути я не был олимпиадником и не слишком ударялся в быстрый код). Он просто был нечитабельным — самому стыдно за первый проект сейчас:)
А мне за первый проект не стыдно, я над ним просто ржу. :) Это как смотреть на фотографии десятилетней давности: даже психологи говорят, что смех — нормальная реакция.
а еще есть явление, которое я называю «программистский зуд». Это когда человек вместо того, чтобы использовать существующие готовые решения или библиотеки, непременно пишет свои тулзы и либы для любой задачи.
У этого явления несколько причин:
— недостаточная образованность человека как программиста;
— отсутствие этих библиотек: либо в природе, либо у программиста;
— а если они и есть, то нет документации и примеров;
— а если они и есть, то нет времени на освоение, — проще и быстрее написать свое, маленькое, понятное и работающее;
— недоверие к продуктам, вызванное так же разными причинами;
— желание проверить силы, повысить уровень, разобраться в механизмах, познать работу и философию библиотек исходя из собственного опыта.
Не согласен.

Кстати, иногда без умеренного ЧСВ ни жить, ни работать не получается. Тебе говорят: хрень делаешь, бездарь! А ты и соглашаешься, и ничего уже не хочется: ни философски воспринимать «критику» ни делать лучше, ни учиться. В итоге желаемое одних людей («хрень делаешь, бездарь») становится реальностью уже твоей.
Если пишешь нормально, а тебе говорят «хрень делаешь, бездарь» — значит манагер идиот, и надо или на другой проект или в другую компанию.
А если это говорят в Интернете в ответ на библиотеку, которую ты осмелился просто показать? В Интернете так бывает очень часто и не только с библиотеками. Человек трудится, что-то ему интересное создает, а тут приходит негативщик и говорит: «Ты идиот! Ничего у тебя не выйдет! КГ/АМ!». И количество таких выпадов сравнимо с количеством одобрений.
полностью проходил все три стадии именно так, как это описано у вас. Посмеялся над собой, спасибо.
Одно время тоже забивал себе голову мыслями о том что такое программист и чем от отличается от хорошего программиста (долго не мог понять почему идиотов не знающих даже базовых понятий берут на работу, а меня не берут) в итоге просто забил на всё это большой болт.

Не скажу за Россию, а в маленькой деревушке (но считающей себя Европейской страной) Эстонии (или как я её называю Ыстонии) всё примерно так…

Есть три типа программистов:
— Пишет едва работающий код
(На практике такие программеры к сожалению пользовались бешеным спросом, до определённого момента)
— Пишет хороший код, но долго
(Такие могли бы работать в хорошей компании и выпускать хорошие и неглючные продукты, но таких программеров много, а фирм которые способны финансировать качество мало, программирование в наше время бизнес, а стало быть короткие сроки и большой функционал, а глюки можно уже после релизов патчами залатать, мы живём в век «мягкого ввода» продуктов. Увы коробочные системы которые должны без обновлений работать годами остались в прошлом веке.)
— Действительно соображает
(Может на ассемблере реализовать то что школота и на РНР не напишет, знает разные алгоритмы и.т.д. но практически совершенно бесполезен в коммерческой среде, фирм где такие нужны единицы, впрочем программеров таких тоже.)

Результат?

Любая фирма теперь ищет программистов 2-3 типов, но переквалифицировавшихся в первый тип (т.е маскирующихся под «школоту», кушать то надо что-то) таким можно и платить мало, и качество будет сносным (в отличии от «настоящей школоты») в итоге не довольны ни программисты 2-3 типов, ни тем более «школота» первого типа (ибо в их нише на рынке труда образовалось засилье сильных конкурентов, требования работодателей завышены и.т.д.)
Я бы сказал, что это верно для веба, особенно для небольших проектов. Есть другие области, где серьезные, думающие программисты в цене. Всякие там портативные устройства, где ресурсы очень ограничены, а функциональность надо выдать «как у компьютера», медицинско-диагностическое оборудование, где ошибка вообще непростительна — стоит кучу денег и может повредить здоровью и вызвать шквал исков…
Думаю через описанные стадии надо пройти в этой жизни…
По этому я сделал оговорку что это применимо скорее только к Эстонии. У нас (сугубо количественно) намного меньше рабочих мест где требуется качество чем специалистов которые это качество могут обеспечить. В основном работа для «школокодеров» (хотя на эти места идут даже хорошие программеры которые просто не имеют возможности по тем или иным причинам умотать работать «за бугор»)
Описанный выше олимпиадник — идиот :-)
Нормальные олимпиадники такую чушь не пишут :-)
А какую чушь пишут? :)
более того, у меня есть знакомые олимпиадники, которые представляют наш вуз на всеросах и олимпиадах мирового уровня.
так они вообще ничего коммерческого не пишут, только решения задач на тренировках и решения задач на олимпиадах
Так рано еще )
На 4-м курсе начнуть писать так, что в печенках сидеть будет )
ну вот сейчас как раз 4 курс заканчивается :)
Ну я довольно сильно утрирую. К тому же, на практике им просто не разрешают ее писать, так как оставлять его бурную деятельность без присмотра чревато последствиями.
уже раз пять одно и тоже на хабре
По поводу «боянов».

Стоит относиться к этому так. Люди — существа смертные, и поколение сменяется поколением испокон веков. Точно так же и с профессионалами: одни уходят на пенсию или меняют род деятельности, другие приходят.

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

«если вы не читаете хабр дальше первой страницы».
ну а почему тогда вас удивляет что я поступаю точно также? :)
Извините, пожалуйста, что оскорбил ваши чувства. Специально для вас я написал первые два предложения в этой статье, но теперь вижу, что этого не достаточно. В следующий раз обязательно посоветуюсь с вами лично, прежде чем публиковать статью.
если пост вывели на главную, значит он людям понравился
Как в начале комментов сказали, программист в итоге должен перестать быть программистом, не совсем, но в том плане что когда программист осознает что у него в руках инструмент, он начинает искать что то СВОЕ яркие тому примеры Google, Facebook etc.

Впрочем это проблема не только программиста, но и всех отраслей. Многие просто копируют чужой бизнес «так как это уже точно принесет денег», в итоге открывается 10001 сайт, пишется 10001 программа,(открывается 10001 магазин одежды, продуктов итд итп) и каждый надеется что его то программа/бизнес точно принесет плоды. Это не развитие это топтание на одном месте. Оглянитесь вокруг мир/интернет не совершенны, сюда можно привнести просто огромное количество нового. По моему sneg писал уже, что когда сказал «дам 300 тысяч под стартап», он не увидел ни одной идеи, все сводилось к копированию существующего.

Ищите то чего нет, и вы найдете многое (с) я =)
Как бы смешно не звучало, но так оно и есть.

«Исхитрись ка мне добыть, то чего не может быть. Запиши себе название, что бы в спешке не забыть.» © Филатов.
UFO just landed and posted this here
кроме материала для размышления, получил простенькое казуальненькое удовольствие от чтения :) для эссе на такую тему — на радость приятно написано
У меня как-то первой стадии не было, сразу вторая наступила! Может это оттого, что я не олимпиадник? =)
Много патоки на третьем этапе. Автопортрет пытались писать? :)

И эта пирамида не заканчивается на 3м уровне. Наверху есть еще чисто технические спецы — евангелисты, создатели технологий, авторы книг и учебников. Ниже них есть рядовые архитекторы и дизайнеры решений, а также местные гуру в той или иной технологии или компании. И просто тим лидеры. А 3й уровень это «ведущий инженер-электроник» и это базовый уровень что бы называться профи :)
О нет, это не автопортрет, а скорее то, что только начинает получаться и чего хочется достичь. Да, я понимаю, что третий уровень не предел, но как описать то, до чего ты еще сам не дошел?
хм, на самом деле каждая стадия это Просветление
1. АААА я умею программировать!!! Я могу написать что угодно.
2. Ну вот теперь то я умею программировать. Я могу не только написать что угодно, но и заставить его работать.
3. Хо хо — наконец-то я могу писать код за который меня не убьют коллеги, и мои проекты живут годами.

Правда, ох почему-то уже нет того больного блеска в глазах. Увы с опытом начинает уходить желание творить, оно заменяется тем что ты знаешь что это ты сделаешь, а это не сделаешь. Лучше всего наверное себя постоянно перебрасывать по всем трем стадиям —
1. Для того чтобы стартануть новый проект
2. Написание значительной части кода
3. Приведение всего кода в порядок
4я стадия, это когда засидевшись в 3й стадии и насмотревшись на программистов в 1й и 2й, начинаешь им рассказывать о постигнутой тобою мудрости, надеясь предостеречь их от своих ошибок :)

5я стадия, это когда понимаешь, что люди не хотят твоих советов, им нужно всё испытать на собственном опыте. И чтобы не портить отношения с коллегами даёшь советы уже только тогда, когда их у тебя просят :)
6я стадия, это кода на всё пофигу :)
возможно, а заодно и пациент уже всем всем пофиг… Кто дошёл до этого уровня, расскажите :)

Хотя не, если они на этом уровне, то им всё пофиг, так что ответа мы не дождёмся :)
Прямо меня написано =) С той лишь поправкой, что «на поправку» пошел все в той же олимпиадной юнности из-за нехватки времени на вечеринки, компьютерные клубы и женский пол ( + учеба, иногда). Как следствие осталась только деятельность приносящая результат (в виде средств на существование и все ранее перечисленное), а перфекционизм был вылечен (хотя нет нет, а приходится себя одергивать, чтобы не сделать идеальную фундаментальную хренатень на века).
Ещё есть одна стадия между второй и третьей(бывает что люди из неё не выходят). Человек себя характеризует примерно так: я бог все вокруг лохи. возможно всё и всё можно сделать за 5 минут. я могу так всё делать с помощью непостижимых костылей. те кто не хочет ставить эти костыли когда я им говорю получают удар по карме :)

Короче говоря неимоверное тщеславие, часто наблюдается у менеджеров когда-то бывших программистами.
Вторая стадия напомнила систему magento) Очень грамотно, красиво, четко, но только ужасно тормознуто и тяжело для восприятия)
1) хеллоуворлдщик
3) быдлокодер
2) олимпиадник
3) разработчик
4) осознавший
5) Линус Торвальдс
UFO just landed and posted this here
«Я сам никогда не встречался с пациентом » — зачем тогда пишите?
Напишите о себе :)
любят люди поузнавать себя в разных классифицирующих текстах. как будто гороскоп читаю. этот знак отличается такими признаками, этот — другими…
Блин, я застрял на второй стадии…
Статья мотивирует, буду развиваться.
Спасибо за статью, поржали от души. Будем давать читать подрастающему поколению.
А четвёртая стадия — это осознание того, что на второй стадии программист взял за основу правильные идеи, но выстроил на их базе карго-культ. Думаете, зачем нужны все эти паттерны и слои абстракции? Ради красивости? Красота как раз в простоте и лаконичности. А нужны они как раз ради того, чтобы повысить гибкость этой системы. Если же результат оказывался совершенно противоположным, это может означать только то, что паттерны применялись неправильно и использовались неверные абстракции. И, кстати, как я понял, на второй стадии получались большие методы (в противовес третьей стадии). А это ну никак нельзя назвать «красивым кодом»…

И ещё про кодогенерацию. В теории оно конечно хорошо. А вот на практике… Из чего генерится код? Из XML? Из собственного языка? В первом случае ещё можно худо-бедно подсунуть IDE схему. Во втором — придётся писать «в блокноте». А поддержка со стороны IDE в разы повышает скорость кодирования, и на порядки — скорость внесения изменений.
Скорость кодирования важна на второй стадии. На третьей объём кода настолько мал, что скорость кодирования перестаёт иметь какое-либо значение. По сути все эти навороченные библиотеки, фреймворки и IDE нужны как раз для того, чтобы на второй стадии сохранить хоть какой-то контроль над громадными объёмами многослойного кода.
Пустая демагогия. Объём кода не снижается за счёт увеличения «профессионализма». Объём кода уменьшается за счёт
1) увеличения выразительности языка
2) использования готовых фреймворков и библиотек
тем не менее, даже на «выразительных» языках вроде Python, Ruby или
простите, случайно Enter нажался
Так вот, даже на таких «выразительных» языках объём кода в серьёзных проектах по-прежнему остаётся очень и очень немаленьким. Да, профессионал способен написать более выразительный код, но это отнюдь не означает, что объём кода стремится к нулю.

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

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

Объём кода очень сильно уменьшается благодаря использованию правильной архитектуры и при наличии высокой ясности мышления программиста. Например, в OS Inferno архитектура такова, что используя гораздо меньшее количество сущностей можно получить ту же функциональность, что и в других ОС. Прочитайте, например, вот эту статью чтобы понять, о чём речь. Эффект, который архитектура плюс ясность мышления оказывает на объём кода можно легко увидеть на примере команды cat — в Linux (coreutils) это 782 строчки, а в Plan9 это 35 строк кода. Да, помимо прочего они поддерживают разные фичи, и фич в версии Plan9 меньше, и можно попробовать возразить что кода меньше именно по причине отсутствия фич, а не за счёт какой-то магической архитектуры или ясности мышления… но дело в том, что вся необходимая пользователям функциональность есть в обоих случаях, просто в Plan9 сумели удовлетворить потребности пользователей избежав при этом переусложнения этой тривиальной утилиты — где-то за счёт архитектуры системы, где-то за счёт дополнения функциональности cat другими, столь же простыми утилитами, где-то за счёт изменения подходов к решению задач пользователя, etc. Здесь важен конечный результат, ведь задача не «реализовать N фич», а «решить проблему пользователя».

То же самое касается фреймворков и библиотек. Я не говорю, что они не нужны. Но большинство из них избыточно переусложнены, и использование их приводит к тому, что Ваш проект тоже оказывается переусложнённым. Повторное использование кода это вообще отдельная тема. Я был в ужасе несколько лет назад, обнаружив значительное количество копипаста в исходниках той же OS Inferno, и не мог понять, почему они не вынесли весь этот код в библиотеки. Ответ оказался достаточно не тривиальным, возможно я когда-нибудь напишу об этом статью на хабр. Если коротко, то одна из основных проблем подхода code reuse в универсальности. Библиотеки обычно пишут максимально универсально, и это вызывает значительное усложнение кода, без которого можно было бы обойтись, если решать конкретную задачу для конкретного проекта а не писать универсальную библиотеку для решения целого класса таких задач.

Между IDE и блокнотом существует множество других редакторов кода, например vim или acme. Да, с громадными переусложнёнными проектами легче работать в большой навороченной IDE, нежели в vim. Фокус в том, чтобы избегать переусложнённого кода, а когда код достаточно простой, даже в таких больших проектах как OS Plan9 и Inferno, то работать с ним в навороченной IDE становится сложнее и медленнее, чем в простых vim или acme. Вот такой парадокс.

Я думаю, третью стадию более корректно назвать «Профессионал», ибо эта стадия всё-таки достаточно далека от просветления.

Что касается четвёртой стадии, то я думаю что в этом направлении (профессионального программирования) её просто нет. Дальше надо куда-то сворачивать. Например, в сторону исследовательской работы и прочей «чистой науки» а-ля Bell Labs, но коммерческий спрос на это близок к нулю. И в этом направлении четвёртой стадией будет осознание вещей вроде «cat -v considered harmful» и вычитывания сорцов ОС Plan9 и Inferno.
Прочитав «Совершенный код» Маконнела я мысленно прошел все три стадии
Отличная книга, тоже прочел… пожалуй одна из немногих книг из которых можно столько почерпнуть
Первая и вторая стадия разделены напрасно: имеет место быть один и тот же синдром золотого молота — серебряной пули.
Более того, рядовой исполнитель может находиться на какой угодно стадии — рецензент и ведущий быстро приведут к общекомандному знаменателю.
Книга Искусство программирования для Unix (Эрик Рэймонд), на мой взгляд, подведет разработчика к третьей стадии, если его там еще нет, и великолепно систематизирует его навыки, даже если он уже излечился. А «Совершенный код» — он, имхо, хоть и совершенный, но какой-то уж очень неживой.
А вообще — спасибо, отличная и емкая статья.
Sign up to leave a comment.

Articles