Thu 22 Mar 2007
О вреде изучения высокоуровневых языков
Posted by Alex Lebedev under программирование, python, менеджмент, инструменты, ruby
Где-то с месяц назад наткнулся на пост Why learning Haskell/Python makes you a worse programmer. Люк Плант (Luke Plant) поднимает крайне актуальную для многих из нас проблему — изучение продвинутых языков не делает вас лучшим программистом на том, что приходится использовать, а, напротив, деморализует и снижает качество работы.
Точка зрения сотрудника
Очень рекомендую прочитать как статью, так и комментарии. Если кратко, приводятся два основных аргумента:
После того, как ты понял и полюбил Python, писать на C# неприятно. Код громоздок и некрасив. Процедурный подход вызывает кучу потенциальных глюков. Кроме того, начав думать на Python, приходится работать “живым компилятором”, переводя эти мысли в C#.
Начав использовать функциональное программирование, пытаешься использовать его везде где только можно. C# не поддерживает многие концепции функционального программирования, в результате чего попытки применять функциональный стиль выглядят уродливо и непонятно. Многие задачи проще решать процедурно.
Люк делает вывод, что нет смысла заниматься самосовершенствованием, если потом не сможешь использовать обретенные навыки.
С изменением среды, на самом деле, все плохо. Шансы рядового программиста или проджект-менеджера изменить политику и стандарты компании, как правило, асимптотически приближаются к нулю. Исключения, когда проектная команда обладает высокой степенью автономности и может использовать какие угодно инструменты, редки как девственность.
В свое время это было одним из факторов, побудивших меня покинуть моего предыдущего работодателя и начать работать на себя.
Добавлю еще, что все относительно. Можно заменить языки в обсуждаемом примере на другие, но проблема останется той же. Есть языки лучше, чем Python и Haskell, есть и множество языков, куда хуже C#. В реальной жизни все еще сложнее, потому что важно не столько качество языка, сколько пригодность его и связанной с ним платформы для решения конкретной задачи.
Точка зрения компании
С другой стороны, компания существует не для того, чтобы развлекать сотрудников. Компания существует для того, чтобы получать прибыль. Соответственно, инструменты выбираются в первую очередь по влиянию их использования на прибыль.
Ряд задач требуют использования неоптимальных с точки зрения эстетики и уровня абстракции языков. Драйвера и embedded-приложения пишутся на C. Windows-приложения — на том, что поставляет в данный момент Microsoft (сейчас это C#). SAP кастомизируется с помощью ABAP, недалеко ушедшего в своем развитии от COBOL. Можете продолжать до бесконечности.
Кроме того, есть ниши, где выбор языка может повлиять на маркетинговую привлекательность продукта. Java продается. C# продается. Hashkell… — а что это такое? Думаю, логика выбора языка в таком случае будет очевидна.
Что думаете по этому поводу, коллеги?

March 22nd, 2007 at 9:01 am
Насчет того что высокоуровневые языки расслабляют - это точно, по себе знаю. Однако, это совсем не повод от них отказываться. Если нужно уметь писать и на Python, и на C# - это надо делать, вне зависимости от того, нравится тебе язык или нет. Если не хочешь писать на C# - ищи себе работу где будет исользоваться только Python, но в этом случае будь специалистом высшего класса. Тут уж надо для себя выбрать что-то одно - либо крутые языки и крутые возможности, либо универсальность.
March 22nd, 2007 at 10:46 am
Хех… Вообще, та статья была задумана скорее как стеб
. На мой взгляд вопрос “совершенствоваться или нет” просто не стоит…
Еще несколько моментов хочу прокомментировать:
Есть компании, в которых менеджмент понял, что это не взаимоисключающие вещи. Это Google и Microsoft. Если программист доволен и ему хорошо, то он будет хорошо работать. Поэтому его надо облизывать. Правда, это работает только в отношении хороших, грамотных программистов
.
И программисты знают это обычно даже лучше своих менеджеров. Опять таки, хорошие, грамотные программисты.
Ну это-то исправляемо. В частности, на грядущей РИТ я собираюсь “продавать” менеджерам мысль о том, что веб-разработка на Питоне с Django — это очень хорошо и выгодно. Традиционно многие менеджеры больше любят слушать людей на конференциях, чем собственных программистов. Даже если они хорошие, грамотные программисты.
March 22nd, 2007 at 2:57 pm
Иван, я согласен, но отнюдь не всегда можно выбирать язык, который сделает всех программистов максимально счастливыми. Из-за всех тех факторов, которые я перечислил.
То, что неудобный язык выбран не по тупости менеджмента, а по “политическим соображениям”, конечно, несколько облегчает страдания разработчика, но не снимает их полностью.
March 22nd, 2007 at 3:01 pm
Ах да, встречается еще такая милая вещь как “моноязычный стандарт”: “Мы все пишем на Java и только на Java”. Повбывав бы!
К счастью, никогда не работал в компаниях с таким стандартом. Но с носителями этой идеи сталкивался…
March 22nd, 2007 at 3:07 pm
To: DEkart
Писать на C# И на Python — еще приемлемо. Люк пишет про ситуацию, в которой нет возможность использовать Python на работе вообще.
Я считаю, что если это не компенсируется какими-то серьезными плюсами, то такую работу надо менять. Впрочем, каждая ситуация уникальна…
March 22nd, 2007 at 3:45 pm
Я сталкивался. Пишем на Python и только на Python. Знакомо?
March 22nd, 2007 at 4:00 pm
Конечно. Заметь, для конкретной задачи — автоматизированного тестирования. И в конкретном проекте.
March 22nd, 2007 at 5:55 pm
Я к тому - что суть та же, объемы меньше.
IMHO, Питон не сильно отличаеться от JavaScript. В JS нет только нормальной поддержки объектов. Но все функциональное программирование, Map & Reduce и т.п. на нем реализуеться в лет. Естественно я не говорю про ввод/вывод (операции с файлами там и т.п.)
Нет смысла на каком языке писать. Главное что бы не было фанатизма (ака Intel vs AMD и т.п.) Каждый язык чем то лучше/чем то хуже для конкретной задачи - и исходя из задачи имеет смысл выбирать язык, а не предпочтения.
March 22nd, 2007 at 6:55 pm
Задаваться вопросом, что лучше — Haskell или C, это как спрашивать, что лучше — молоток или отвертка? Пост Люка Планта не имеет никакого смысла, увы.
March 22nd, 2007 at 6:56 pm
То есть, все языки одинаковы, потому что обладают практически одинаковым функционалом?
Paul Graham очень убедительно проехался по этой точке зрения в своей статье Beating the Avagaves.
Кроме того, рекомендую почитать на Википедии про Turing Tarpit.
В общем, давайте переходить на Brainfuck — он обладает Тьюринг-полнотой, а значит на нем можно написать что угодно.
March 23rd, 2007 at 12:20 am
У меня встречный вопрос.
Вот ты пишешь:
Вопрос: почему в собственной компании, свободно выбирая язык, человек зарабатывает деньги, а компания не может этим воспользоваться и предоставить ему выбор языка, чтобы он мог зарабатывать деньги для нее?
March 23rd, 2007 at 3:02 am
Иногда компания может этим воспользоваться. Но не всегда.
Как правило, потенциальные проекты выбираются исходя из предполагаемой прибыли. Затем, для построения отношений с перспективным заказчиком, что, в свою очередь, тоже должно вести к повышению прибыли. Всякие технологические изыски принимаются в учет только после денежных факторов.
Пока все нормально и логично. Но есть одна проблема.
Заключается она в том, что стимулы сотрудников отличаются от стимулов владельцев компании. Если сотрудник окупает свое существование, то ему глубоко наплевать, сколько именно денег он приносит. Увеличение прибыли от его работы в четыре раза, вероятно, выразится только в премии по окончании проекта. Или в большом пшике. Понятно, что стимула использовать старье, чтобы принести компании, у разработчика нету (как, кстати, и у проджект менеджера).
Ну а когда работаешь на себя, все очень просто: хочешь — занимаешься интересными проектами, хочешь — денежными. Получая во втором случае не только геморрой от использования неудобных инструментов, но и материальную компенсацию.
March 23rd, 2007 at 3:23 am
Offtopic:
А вообще, какие ожидания есть от этого мероприятия? Есть какие-нибудь предположения по поводу полезности посещения его?
March 23rd, 2007 at 3:26 am
Эх… еще бы научиться определять проекты, которые и не денежные и не интересные и не браться за них. А также поддерживать какую-нибудь разумную пропорцию между ними
March 25th, 2007 at 11:49 am
Понял, спасибо большое!
March 30th, 2007 at 8:29 pm
Хм…. а мне вот питон нравится….. и нехочу я заниматься с шарпом….. поэтому пойду туда где разрабатывают на питоне….. например в гугл….. а в микрософт пусть идут фанатики с шарпа….. для меня первично получить не столько деньги сколько удовлетворение от работы….. деньги же идут как расходный материал на еду, жильё и прочие вещи без которых трудно прожить…… главная моя ценность - жизнь, информация и знания… всё остальное вторично, а следовательно во многом бесполезно лично для меня…..
October 29th, 2007 at 12:27 am
Гм.. точно. На собственном опыте могу подтвердить все положения статьи. Например использование J позволило отказаться от массы
инструментов и извращенных методик в достаточно сложном производственном проекте.Но ето как раз
случай девственности:).А в общем при всеобщем
мэйнстриме трудно сказать когда мы прийдем к ситуации в которой используемый инструмент будет адекватен решаемым задачам.
February 2nd, 2008 at 2:23 am
Тут все зафисит от спецификации, хочеш узкоспециализированным быть учиш один язык, многоуровневым много,я например работаю только с С# меня пока устраивает.
May 6th, 2008 at 2:27 pm
-1 статье
Я использую PHP и Ruby. Вряд ли я когда-нибудь буду писать на PHP полноценный сайт, НО так же я никогда не буду писать парсер или простой админ-интерфейс к Flash-сайту на RoR