Почему хороший программист никогда не напишет хорошую программу
|
Хм… Спорно, правда?
Давайте для начала посмотрим кто такой «хороший программист».
Профи от программирования
- досконально знает все конструкции языка программирования,
- великолепно разбирается в алгоритмах и приемах написания кода,
- постоянно изучает и применяет новые технологии,
- всё время совершенствуется и придумывает что-то новое,
- горит энтузиазмом,
- обладает острым умом и изобретательностью.
Несомненно, такой профи достоин уважения и даже зависти. Неужели он не сможет написать хорошую программу?
Да, это так. И именно из-за перечисленных выше причин хороший программист этого не сделает.
Бред? Ничуть! Ответьте, пожалуйста, на простой вопрос: для кого пишут программы?
Ответ, вобщем-то, хорошо известен: для пользователей. Для пользователей, которым совсем нет дела до тонкостей реализации; которым не интересны алгоритмы, и совершенно всё равно как записаны конструкции языка и современные технологии.
Пользователям нужна только их конкретная, узко специализированная задача. Причем решить эту задачу они хотят приложив минимальное количество усилий.
«Простота решения задачи» – вот основной критерий «хорошести» программы с точки зрения пользователя.
А теперь скажите, какому хорошему программисту интересно разбираться бизнес-процессах и задачах пользователя? Никакому! Гораздо интереснее разобраться в тонкостях программирования, чем думать над тем, где лучше расположить кнопку, как минимизировать количество кликов или какие колонки лучше вывести в таблице со списком клиентов.
И не надо в этом разбираться. Задача программиста – блестяще закодировать. А замечательные решения для пользователя пусть придумывает бизнес-аналитик. Тогда и только тогда созданная программа будет совершенной!
Именно поэтому хороший программист никогда не сделает в одиночку хорошую программу для пользователя. Он сделает её хорошей внутри, но при всём своём желании не сделает её хорошей «снаружи».
Вместо послесловия
В один прекрасный момент хороший программист вдруг понимает, что изучил всё самое интересное в программировании, и начинает двигаться вперед, постигать новые вершины, получать новые знания, делать программы не для себя, а для тех людей, которым они в реальности предназначены. И тогда программист становится аналитиком…
Две замечательные книги для программистов и аналитиков, совершенствующих свои знания:
Современные методы описания функциональных требований к системам
Алистер Коберн
Как писать «правильные» технические задания
Крэг Ларман
Как делать «правильную» архитектуру программ
Выскажите свое мнение прямо на этой странице
Подпишитесь на новые публикации
Если Вы хотите получать новые публикации этого блога мгновенно при их появлении, добавьте RSS блога в свой rss-reader или подпишитесь на получений новых сообщений по e-mail.
Мой блог находят по следующим фразам
- бизнес с нуля
- мозговой штурм
- интересные сайты
- цель
- как я раскрутил сайт
- не могу найти в интернете -работу
Popularity: 17% [?]









Вы забыли еще пару необходимых условий, после выполнения которых программиста можно считать хорошим:
- Выполнение всех требований указанных спецификациях на разработку, минимальный процент не выполненных требований
- Высокая скорость кодирования (это в общем вытекает из пунктов перечисленных вами)
- Способность критически оценить полученное задание на
- Передача задач на тестирование с минимальным количеством багов
Ну это вообще супер-программист получится
Алексей, неужели вы так и не поняли, что задача была не про хороших программистов рассказать, а продать им чудо-книги?
не знаю как насчет супер… но вот когда отдельные товарищи, супер разбирающиеся в языках, в курсе последних технологий и т.д. выдают на тестирование задачи, где половина требований не реализована или реализована «частично», то их крутость меня как постановщика не интересует абсолютно, а есть и обратные примеры, когда вроде «средний» программер, может и повозится подольше, но все реализует как просили и при тестировании минимум багов. Так вот гордым словом «хороший» я бы назвал именно второго.
Кстати, на рекламу книжек я и правда как то не обратил внимания
)))
2Сергей Третьяк: Да, а еще я продаю рекламу на этом блоге. И скоро буду всякие другие фенечки ставить для монетизации. И, кстати, другим владельцам блога тоже советую так сделать. Хотя бы будет хостинг окупаться.
2Алексей: Аккуратность и исполнительность – редко встречающиеся качества профессионала. Я работал со многими профи, но все они были не супер какими исполнительными. Думаю это всё по той же причине – им было интересно покопаться в новой технологии, а не пересиливать себя и делать нудную и неинтересную задачу для пользователя. Потому я и говорю, что истинный программист, знающий технологии и разные чудеса, никогда хорошо не напишет программу для пользователя.
С Алексеем согласен насчёт второго типа программистов.
Евгений, удачи в монетизации. Мой блог за счёт партнёрок не одному проекту хостинг окупает. Контекстная реклама, кстати, вообще гроши приносит, по не совсем очевидной причине (когда узнал, был в шоке).
Сергей, поделитесь инфой про контекстную рекламу. интересно
У кого не стоят баннерорезки, тот привык на подсознательном уровне фильтровать рекламу на страницах. Вторая категория пользователей баннерорезки активно использует. Третья категория использует, но не занет об этом (спасибо, господин Касперский). Ну, и наконец, релевантность объявлений иногда оставляет желать лучшего (особенно у Бегуна с Вебальтой). Вебальта вообще слёзы. Я не говорю, что на контексте нельзя заработать. Нужно уметь готовить, да и тематика не всякая подходит. А про контекст и блоги очень хорошо Денис Болтиков сформулировал: аудитория одна и та же, объявления особенным разнообразием не блещут, глаз замыливается, а ещё многие читают через RSS-читалку. Как-то так. В общем, не всякий трафик хорош для контекста.
[...] каждый ? В “Бизнес с нуля” появился пост про то, почему хороший программист никогда не напишет хорошую… правда я думаю, что плохой – тем более не напишет А в [...]
[...] Почему хороший программист никогда не напишет хорошую… [...]
Честно, думал, что статья о том, что хороший программист будет думать как сделать каждую строчку программы идеальной. Максимально оптимизированной.
То, есть будет думать больше о стиле написания, производительности, красивых решениях.
Вместо того, чтобы прежде всего просто добиться решения задачи.
А здесь…
Ну так об этом и идет речь! Именно о том, что хороший программист думает скорее над оптимизацией программы, новых технологиях и т.п.
Другими словами – разделение труда программиста, аналитика и дизайнера GUI – очень хорошая идея.
Я говорил о технологиях в самой программе, в коде.
Дизайн интерфейсов, сайтов – для крупных проектов должен быть и так разделён. И, кстати, делаться до написания кода (даже если 1 человек)
И я говорю о коде. Именно о нем.
Хороший программист пишет хороший код, правда?
имхо, не так все.
Хороший программист – это как раз тот, к которому никаких претензий не будет. Глупо полагать, что нет таких которые без «требований указанных спецификациях на разработку» не могут сделать четкий продукт.
Какое-то злодвижение пошло последнее время в тему того, что программеры – только тупые исполнители без фантазии и с узким мышлением.
Да, с большинством так и есть, но хороший программист – это другое.
Хороший программист напишет хорошую программу. По следующим причинам:
1. при промышленной разработке (и в небольших командах, стартапах по 2-3 человека тоже) проектированием интерфейса обычно занимаются специалисты именно по интерфейсам.
2. А ведь именно интерфейс, а не способ его реализации (программист только реализует), гарантирует «программу для пользователя, а не программиста».
3. Тысяча причин, по которым хороший программист реализует интерфейс лучше плохого, а отличный лучше хорошего добивают гвоздь в цепь ваших рассуждений.
О производительности и качестве работы отличных, хороших и плохих программистов, если интересно, читайте у Джоэля: http://russian.joelonsoftware.com/Articles/HighNotes.html .
Это волшебство. Такие программисты бывают? Я хотел бы познакомиться с ними и взять к себе на работу
Евгений, Андрей правильно про Джоэля вспомнил.
Вы рассматриваете «хороших программистов» исключительно как кодеров, причем прикладных,которые кодят исключительно то, что написано в ТЗ. И рассматриваете вы их «хорошесть» со стороны заказчика и конечного пользователя. Однобоко так сказать.
А как насчет системных программеров, знание которых не ограничиваются расположением красивой кнопки на форме. Программеры, созидающие вещи которые возможно никто и никогда не увидит,…
хороший такой драйвер или руткит, например
Враки. Хороший программист ВСЕГДА напишет хорошую программу, если он конечно этого захочет!
«Задача программиста – блестяще закодировать» – это называется кодер
«разбираться бизнес-процессах и задачах пользователя» – это как раз и есть одна из задач программиста. У моих программистов это всегда это было одной из основных обязаностей.
А с такими програмистами, как тут описываются никакой бизнес с нуля не возможен
bum:
Про ВСЕГДА несогласен категорически. Просто по причине того, что «хорошесть» программы — категория субъективная до крайности. Поэтому (и в качестве примера) то, что нравится парню, который сидит под мандривой и драйвера пишет, не понравится массе «обычных» пользователей.
Ну и сразу хочется сказать, что не имеет по-моему в контексте этого поста говорить о написании драйверов etc. Потому как основная претензия к программисту: «не интересно разбираться бизнес-процессах и задачах пользователя». Т.е. к драйверам не относится.
Теперь сразу-же автору
.
По моим (как человека из soft-бизнеса) наблюдениям вот эти ваши выдуманные «бизнес-аналитики» слишком часто справляются с задачей хуже среднего программиста. А хорошие «аналитики» и «специалисты по юзабилити» etc. часто получаются как-раз из «внятных» (не аутичных, общительных, любознательных) тех. специалистов, в том числе и программистов.
Alex Dybenko,
только в качестве «нуля» принимается N тыс. зелененьких на «бизнес-(пардон)-аналитиков».
Почему-же, возможен
хороший програмист никогда не напишет хорошую программу, после того как он ее уже ниписал.
Статья – хрень. Говорю это как тот, о ком она типа написана.
Сначала заинтересовала, хотел даже шефу переслать. А потом понял, что пересылать то и нечего. Написало просто, чтобы было что написать.
и писал видимо не программист. или программист по образованию, но… короче фигня это.
Просто для информации.
Уж если обо мне зашла речь… Я начал программировать примерно в 1987 году (ну или в 1986-м)
Так что хоть немножко, но разбираюсь в том, о чем пишу.
А я, кстати, протестую не против того, что в статье (по сути) сказано, а против того как оно написано.
По сути, сыграл только провокационный заголовок, в статье же — не сказано не только ничего нового, но и вообще почти ничего!
Мысль статьи: «один специалист (программист) не может создать хорошую программу». Я правильно понимаю?
Если да, то, простите (кроме того, что это НЕПРАВДА. есть примеры известного софта, которые опровергают то, что вы говорите.), не стоил пост того, чтобы его писали. Объясняю:
1. Хороший капитан не доведет корабль до точки назначения! (один, конечно не доведет)
2. Хороший футболист не забьет гола! (один на поле — конечно не забьет)
Примеры достаточно абсурдные, но по-моему достаточно явно показывают бредовость заголовка и заявления в целом. И еще
хорошие программисты пишут хорошие программы. Даже в одиночку.
зы: буду рад ответу автора на вопрос правильно ли я понял основную мысль статьи.
2 Alex Dybenko:
«… блестяще закодировать» – это задача криптографа. Хотя знаю парочку таких кодеров-шифровальщиков, как, закодируют фиг потом разберешься
2 Андрей:
Про драйвера я утрирую. Просто программистам немного обидно читать такие сабжи.
Если не придираться к отдельным словам, не пытаться дать исчерпывающее описание понятию «хороший программист», а «кушать» пост целиком, то я почти во всем согласен с автором.
Собственно, так оно и есть. Для человека, пишущего хороший (оптимальный, безглючный, быстрый итд) код, да и вообще для человека, всерьез увлеченного программированием, процесс написания выглядит как игра, головоломка, гимнастика для мозга – как угодно называйте. Лично у меня так было: обыграть машину, заставить ее делать то, что мне надо, так, как мне надо. Так вот, в этот момент заморачиваться внешними красивостями и кнопочками совсем не хочется. Настоящий программист и так знает, когда программа красивая/хорошая, а когда – нет…
Никогда не замечали, что из под пера отличных кодеров часто выходят мощнейшие утилиты, часто малопригодные для боевого использования из-за чудовищного интерфейса? Т.е. они работают, но чтобы с ними разобраться, нужно зарыться на неделю в описание. Кто когда-нибудь делал хоть одну попытку разобраться с ОС Linux или BSD – тот поймет
Короче, кодер всегда заморачивается технологической частью процесса. А рядовому юзеру нужно, чтобы было «просто», чтобы «не настраивать» и чтобы «окошки полупрозрачные как в MacOS». Поэтому кодер и юзер без посредничества аналитика редко когда найдут общий язык.
Что же до аналитиков, то хорошо, когда они вырастают из программистов. Хуже, когда аналитиками становятся, минуя программирования, после прослушивания 3-х недельного курса.
Ура! Наконец-то нашелся человек, который меня понял.
Кстати, я тоже делал попытку разобраться с Linux/BSD. Сидел на них несколько лет и писал всякие интересные штучки-дрючки.
Дык, видно, что статью писал человек с хорошей практикой
jeka911: это не последнее время такая тенденция, это всегда. В больших проектах (фабриках софта) давным давно используется разделение труда. Не будь его, и ни один проект не завершился бы успехом. Слишком уж люди разные, чтобы в больших количествах работать одной командной ради достижения цели. Поэтому труд разделяют. И при этом получают результат гораздо лучший, нежели при работе программиста-универсала.
Тема, на которую я очень часто натыкаюсь.Хоть что со мной делайте, но не могу я слышать про хорошего веб-программиста, который вдобавок еще и «хорошо рисует дизайн». С 1994 года, когда я впервые вышел в Интернет и когда не было никакого веба, я не видел ни одного универсала, профессионально умеющего совмещать два дела – делать дизайн и программировать.
Профессиональный дизайнер – супер! Молится на такого надо. Профессиональный программист – клёво! Но чтобы и то и другое сразу! Обычно такой человек очень быстро уходит из конторы. Это лично мой опыт. Вероятно, у других людей всё по-другому.
Андрей:мы говорим о том, что код этой программы будет хорошим, или о том, что программой будут довольны пользователи?
Я не спорю, что программист напишет хороший код, наоборот именно про это я и говорю.
А еще я говорю про то, что при этом он совершенно не будет думать о том, что созданную им программу можно будет использовать простым людям.
И Джоэль молодец. Я с удовольствием прочитал его книгу. Но он, по моему мнению, пишет скорее о повышении качества кода. И да, в этом случае для разработки лучше брать хороших программистов. Только руководить разработкой должны совсем не они, а аналитики.
Тему этой статьи замечательно раскрыл Алан Купер в своей книге
Психбольница в руках Пациентов.
Хороший программист всегда напишет хороший код, но далеко не каждый хороший программист умеет сделать хороший интерфейс. Есть, конечно, исключения. Поэтому я бы перефразировал заголовок поста: «Почему большинство хороших программистов никогда не напишут хорошую программу».
kvazix:
pr-респект автору, создавшему разгон на пустом месте совершенно. я даже повелся
.
Разница (смысл заголовков: вашего и авторского) принципиальная.
зы: но ясно и откуда она берется
в действительности Хороший Програмист это тот которого ненавидят сертифицированные ослы считающие, что только они одни хорошие.
(BG например…)
А кто такой BG?
[...] Ежендевный провокатор: Zerostart – Почему хороший программист никогда не напишет хорошую… [...]
Хороший программист != Профессиональный программист
В большинстве случаев никому не нужен хороший программист, а именно нужен профессионал – человек решающий задачи других (а не выходящий из бадуна гений, программирующий сферического коня в вакуме). При этом профессионал может обладать качествами хорошего программиста
как женщина , честное слово, читать противно
Очевидно BG – это Билл Гейтс.
продолжил дискуссию на хабре:
http://habrahabr.ru/blog/arbeit/30587.html
[...] статьи: “http://www.zerostart.ru/archives/108“ 19 Ноября, 2007 в [...]
Да, на хабре прикольная дискуссия
если что-то несходится, пересмотри первичные условия. В этой статье крайне ошибочно первичное условие – определение хорошего программиста!
Хороший программист, как минимум, хороший исполнитель… Если развить вашу логику, то хороший хирург никогда не сделает хорошую операцию, хороший архитектор никогда не спроектирует хорошее здание, хороший …. никогда не …. хорош.. ……
Вместо многоточий впишите любую профессию и описание хорошего результата по этой профессии.
Хороший блогер НИКОГДА не сделает хороший БЛОГ. Может это про вас?
2 Денис Шаповаленко
Вы заблуждаетесь в одном: если у хирурга стоит задача хорошо оперровать, то задачей программиста не является создание программного продукта. Его задача – реализация функциональности.
можете утверждать что хотите. Но,
1. Хирург не ведет операцию в одиночку (анестеция, терапевты, ассистенты и т.д.)
2. Зайдите на любой сайт с архивами шаровар и посмотрите на список ПО. большая часть реализована одиночками, которые только называются всякими фирмами.
Можете меня не переубеждать
Я знаю, как пишутся хорошие программы.
Денис, да мне и не особо интересно Вас переубеждать. Это Ваше мнение и оно имеет право на жизнь. Зайдите на те же архивы и посмотрите на те программы, реализованные одиночками. 90% из них являются неудобоваримым никому не нужным отстоем а-ля «закрывалка CDROM’а». Кстати, я тоже знаю, как пишутся хорошие программы
У вас не хорошие програмисты, а дети малые.
[...] Почему одной программой пользоваться приятно, а друга
я тоже знаю – на кухне, с ящиком пива можно за вечер написать отличную программу. все зависит от употребляемого пива, если пиво хорошее, то и программа получиться хорошая.
удачи.
йо! Вот он, секрет написания супер-программ!
Все комменты не осилил.
Можно долго спорить с автором, придираться к словам, добиваться точного определения слов «хороший программист», но суть от этого не изменится – в статье написана правда.
Большая часть хороших, даже отличных программистов сосредотачивает 99% своих усилий на коде, конструкциях языка и прочих нюансов. ъ
Во-первых, это просто интересно хорошему программисту, это гораздо интереснее, чем скурпулезно выяснять у пользователя, что именно ему нужно, тем более обычно он это и сам точно не знает.
Во-вторых, создание кода, изучение новых компиляторов и т. д., позволяют хорошему программисту становиться ещё лучше и дороже продавать себя на рынке услуг.
В-третьих, решение какой-то сложной задачи при создании кода приносит программисту гораздо больше морального удовлетворения, чем удобная реализация интерфейса.
Говорю все это не просто так, сам много программировал и руководил программистами. Мои программы написанные когда-то в-одиночку, до сих пор широко используются у нас. А некоторые из-них даже продаются на другие предприятия. Сейчас, правда, ушел в ИТ-менеджмент.
Никогда не считал себя хорошим программистом в том смысле, что обычно вкладывают работадатели. Посмотрите требования в объявлениях о вакансиях: знать такие-то языки (чем больше, тем лучше), такие-то компиляторы (аналогично), разбираться в технологиях DCOM, NET и т. д. (до бесконечности) Такой человек должен постоянно осваивать новые продукты, новые технологии программирования, стремиться ввысь, гнаться за лидерами. Ему и программировать то некогда, не говоря уже о выслушивании требований пользователей.
Вот про что идет речь в статье. Надо читать целиком, а не придираться к отдельным фразам. Кстати, восприятие проблемы целиком, а не кусочно (вспоминаем декомпозицию) и отличает хорошего разработчика от хорошего программиста.
На этом заканчиваю. Хотел бы посоветовать всем хорошим программистам не зацикливаться на кодировании, а немножко задуматься о тех, для кого (или чего) все это делается. А еще неплохо бы познакомиться со старым программистом на КОБОЛе (Фортране) и задуматься о том что будет с Вами в таком возрасте, когда мозги уже не будут впитывать новые технологии стакой скоростью, с какой они образуются.
Именно так, Александр! Вы совершенно точно схватили суть статьи