Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Скурлатов В.И. Философско-политический дневник


Программисты, разработчики, кодеры

 

Изначально в языке как «доме бытия» присутствует код Архипрограммы бытия сущего. Магия заклинания и молитвы обычно увязает в сущем и буксует, нужна наука, которая ныне уже подступилась к программированию и прорывно выковывает ключи мироздания. Программист замещает шамана. И как в древности прорывались к коду не все камлающие, а лишь единицы, так и ныне не все программисты, называющие себя таковыми, а лишь избранные. И «подобный Сыну Человеческому», «Первый и Последний, Который был мертв, и се, жив» говорит святому Иоанну Богослову – «Знаю твои дела, и скорбь, и нищету (впочем ты богат), и злословие от тех, которые говорят о себе, что они Иудеи, а они не таковы, а сборище сатанинское» (Апокалипсис 1:13, 2:8-9). Этой весной в Живом Журнале [info]j_sheridan (commander of the Babylon 5 station) развернулась приводимая ниже дискуссия о таинстве Программирования.

Сначала блоггист А. Ильин [info]a_ilyin попытался постичь суть Программиста в заметке от 1 мая 2006 года «Программирование как средство самовыражения»:

«Я – разработчик программного обеспечения с более чем 25-летним стажем, а до этого – и параллельно с этим – был разработчиком электронной аппаратуры, как цифровой, так и аналоговой. Скажу очень кратко, что имел в том и другом некоторые успехи. До конца 80-х годов занимался, как, наверно, уже понятно – проектами реального времени, т. е. такими, где обработка события должна укладываться в отведенный интервал, а в противном случае можно расслабиться – типа, Польши теперь все равно уже нет. По этой же причине и сослаться на них не могу, сами понимаете. Достаточно сказать, что первым языком высокого уровня, который я тогда выучил, был Ада. Кстати, язык, несмотря на некоторые недостатки – очень хороший, по многим причинам. Превзойти его еще никому не удалось во всяком случае.

Но, тем не менее, первые несколько лет – было программирование в кодах (кросс-ассемблеров под кристаллы, с которыми работал, еще не было), несколько лет Дековского ассемблера. Позже, в 90-х годах – пошло-поехало: Паскаль, Модула-2, С, С++, Лисп, куча прикладных, позже – когда занялся Интернет-проектами – Java, JavaSсript, PHP, Python, ну и т.д.

Это к тому, что я – программист старой школы, со всеми вытекающими отсюда последствиями, и моя точка зрения – только одна из многих возможных. Но зато я прошел все мыслимые огни и воды – до медных труб только не дошло, хоть и получил какую-то там медаль, не помню уже, за что. Ну, например, программа промышленного робота, включающая BIOS, всю прикладную часть – например, пользовательский интерфейс – и собственно управляемый оператором автомат (который вертел движок в несколько квт) – в 2кб ПЗУ и 512б ОЗУ не укладывалась у меня на 12, кажется, байт, и приходилось эти 12 байт отбирать с бору по сосенке (бит-фиттинг называется, кто в курсе). Это при том, что всю электронику и даже механику верчения этого нехилого движка разрабатывал также я. И это не хвастовство, как вы можете подумать, а – use case.

Сам страшно не люблю, когда вечно всем недовольны и все осуждают. Это, как правило – признак тщательно скрываемого комплекса неполноценности или попросту дилетантизма. Но в данном случае я, вероятно, буду вынужден некоторое время побыть в роли брюзги, потому что ничего ободряющего сказать невозможно.

Итак, к теме дискуссии. Я такие слышу и по мере возможностей в них участвую уже второй десяток лет и совершенно согласен с мнением, что положение дел в отрасли – катастрофическое. Наблюдения при этом показывают, однако, что в полемическом задоре часто смешиваются некоторые вещи, и на этом я бы хотел для начала остановиться.

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

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

Да, любой разработчик должен быть программистом, в то время, как далеко не всякий программист способен быть разработчиком. Разница в том, что для первого «программирование» – средство, а для второго – цель. Примеры тех и других вы видите каждый день, поэтому не будем на них останавливаться.

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

С моей сугубо частной точки зрения, программирование – не искусство, и не должно им быть. И очень плохо, когда оно им становится. Дело в том, что результат искусства – непредсказуем, и в этом суть и необходимость искусства. Но я не хочу лечиться у врача, который оттяпает мне что-нибудь здоровое вместо чего-нибудь больного и заявит, что «он так видит»! Или «в следующий роз он сделает лучше». Я позабочусь о том, чтобы «следующего раза» у него не было. Ну, послушайте: это же разные профессии – художника, или музыканта, и парня, который разрабатывает как-никак инструмент, которым я буду пользоваться для дела (игры я не упоминаю в данном случае; я в них, как вы наверно догадываетесь, не играю).

Далее. С этой точки зрения – книги читать, конечно, нужно. Однако нужно читать и книги, которые были до тех, которые считается нужным читать. А так существует еще одна очень распространенная путаница понятий, особенно у дилетантов: «Ты на каком языке программируешь?» – «На VisualBasic».

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

Язык программирования – это набор формальных спецификаций. И все!

И создание нового языка (снова: если подходить затем к его использованию не с позиции «искусства для искусства», а для дела) должно быть предметом разработки, основанной на знании теории и тщательном выборе каждого решения. А не плодом озарения – например: «Тут нужна новая языковая конструкция – ну-ка поищем на клавиатуре... там много всяких значочков...»

Почему. А потому, что язык программирования нужен, как известно, не машине, а человеку; но человеку – не тому, кто на нем пишет, а тому – кто читает! Грамотная программа должна читаться, как текст. А не как шифр. Я по полчаса могу выбирать название процедуры или даже переменной, потому что знаю, что это многократно окупится после, когда я на хрен забуду, что я там писал, и придется разбираться. Отсюда происходит несколько важных следствий.

Исходный текст должен быть понятен с первого взгляда на него, что означает – он должен адекватно описывать решаемую задачу. И я имею в виду не выбор идентификаторов, а именно адекватность выразительных средств – например, если задача по своей природе решается конечным автоматом, то ее реализация в виде сплошного ельника «if … else» – неадекватна, профессионал использует табличную. Это необходимо не только для последующего сопровождения, но и попросту потому, что в понятном тексте раньше обнаруживаются ошибки. В заключение упомяну еще только такую характеристику, как модификабельность – исходник должен с первого символа разрабатываться в предположении, что его потом будут переписывать – под другую задачу, через несколько лет и, возможно, другие люди. Все это, к сожалению, встречается редко и именно это, а не приверженность «консоли», является надежным признаком настоящего профессионала, и «визуальное программирование», между прочим, скорее способствует этому, а не мешает.

Упоминаемая в дискуссии точка «no-return» скрыта от нас туманом времени, поскольку была пройдена в тот момент, когда не просто было забыто, что язык должен быть надежным. Было забыто, что существуют три разных аспекта надежности: верифицируемость, собственно надежность и ошибкоустойчивость – робастность. (Да, я говорю пока именно и только о языке, хотя два последних критерия должны применяться и при оценке все остальных компонент.)

Удивительно, но как-то быстро исчезло из виду (я имею в виду 70-е годы), что программа – это до некоторой степени математическая формула, только очень сложная. Вы можете представить себе математическую формулу, которую для того, чтобы она начала работать, нужно отлаживать? Потом писать test-cases? Потом проводить бета-тестирование?! А потом еще выпускать каждый месяц по две страницы патчей?!

То есть с верифицируемостью ясно. Робкие пионерские попытки (Хоара, например) провалились в силу своей непрактичности – то есть неприменимости для реальной разработки, которая неизмеримо сложнее разработки алгоритмов сортировки. С тех пор в эту область никто и не суется. Какие-то судорожные попытки время от времени делаются, но для практического применения они непригодны.

Осталась надежность. Но надежность языка всегда обратно пропорциональна его «удобству» для программиста. При условии, что язык разрабатывался вменяемыми специалистами в этой – и именно этой! – области, чем больше ограничений накладывает он на программера, тем результат будет надежнее. Просто потому, что тем большее число ошибок будет отловлено еще на стадии синтаксического и, говоря условно, семантического анализа. А не после того, как реактор уже пошел вразнос, или вы потеряли все свои активы на бирже.

На сегодняшний день главная беда в том, что надежные языки в практической разработке не используются. Совсем. А используются те, что «удобнее» – по этому поводу очень смешные вещи заявляются, на полном серьезе. Ну, я не имею в виду, например, Пентагон, хотя и там один из сертифицированных языков, кто не в курсе – Common LISP. Делаю акцент на «Common». Потому что он, сука, имеет такие мелкие особенности, введенные для удобства программистов (я не шучу), что когда я представляю, как у меня в данный момент над головой висит пентагоновский спутник, мозги которого набиты этим фаршем, у меня делается сердцебиение.

Да, настоящий программист способен написать фортрановскую программу на любом языке. Первоначально, у Вирта, это звучало несколько иначе «невозможно создать язык, который не позволял бы программисту писать плохие программы». Но он хотя бы не должен этому способствовать! И было бы неплохо, чтобы он хорошему программисту хорошие программы писать помогал, ну хоть немного.

В древних фолиантах, хоть и гусиным пером, но черным по белому написано: «программист не только не обязан, но по возможности и не должен иметь возможности знать детали реализации операционного окружения». Это разумный и эффективный способ создания надежных (устранение недоразумений), переносимых и легко сопровождаемых приложений.

Кто считается «крутым программером» сейчас? Тот, кто знает, как нужно, используя ассемблерную врезку, установить недокументированный бит в 5-м, черт бы его подрал, байте, чтобы обойти баг в Windows Подкидного Дурака 100-тысячной сборки. Не осознавая при этом, что баг этот именно потому до сих пор и существует, а каждый следующий «крутой программер» способствует тому, чтобы он существовал вечно. (Да, часто бывает так, что другого выхода и нет, а сроки поджимают – сам неоднократно бывал в такой ситуации. Но я просто отчетливо сознаю, что участвую в общем бардаке, и никакой чести в этом для меня нет.)

«В языке должен существовать по возможности единственный способ выражения необходимого действия». Лэрри Уолл (Perl): «идея, которая лежит в основе Perl – все может быть сделано более, чем одним способом». Следствие – нужно догадываться, что написанное на первый взгляд совершенно разными способами делает одно и то же. И наоборот.

Эффективность. Еще один миф. Как вы думаете, что ответит средний программер на вопрос – что эффективнее (в смысле производительности; при прочих равных условиях) – Паскаль или Си? В теории? Так вот, 9 из 10 человек ответят, презрительно выпятив губу – «конечно, Си!» Правильный ответ – Паскаль. Почему? Да потому, что его спецификация в несколько раз компактнее, правила строже и допускают поэтому значительно лучшую оптимизацию генерируемого кода. Классический Паскаль по причине всем известных ограничений невозможно использовать при разработке системных компонент, поэтому с ним пришлось попрощаться. Но значительная часть неофитов уверена, что это произошло из-за его «неэффективности», патамучта это «язык для обучения».

Есть факт – простой, как мычание: с той самой точки «no return» (а это примерно времена разработки первой версии Си, т.е., грубо, 1970 г.) программирование окончательно перестало быть дисциплиной прикладной математики и превратилось в ремесло. Появление первого интерактивного отладчика вбило в его могилу осиновый кол. Мы живем уже в другом мире, господа. Ну, можно, конечно выдвинуть такой лозунг и вернуться к программированию в машинных кодах – мне, например, не привыкать. Но – зачем?

Разработка – это прежде всего достижение определенной цели. Да, разработчик – рабочий. На мой взгляд это хорошо. Это – нормально. У разработчика есть только очень скучные вещи – конкретная задача, бюджет и сроки. Задачи – стали на три порядка сложнее, чем 20 лет назад. Сроки – короче. Если мне нужен алгоритм сортировки (и его нет в стандартной библиотеке, что вызовет у меня изумление, граничащее с болезненным) я совершенно спокойно возьму проверенный и уже отлаженный исходник из public domain и продолжу заниматься делом, а не изобретением велосипеда. Разработкой ПО и разработкой визуального дизайна, разработкой программного дизайна, юзабилити – раньше всем в одном флаконе занимался программист. Теперь всем должны заниматься специалисты, и я их приглашу или найму, иначе не уложиться ни в какие сроки и бюджеты. И средства для всего этого должны быть адекватны.

Почему я должен разрабатывать GUI ручками, как в недоброй памяти TurboVision? Зачем? От этого что – качество, что ли улучшится? Нет, качество дизайна – ухудшится. Или 4 мкс., которые я выиграю на цикле из трех итераций, выполняющихся раз в день, сильно разгрузят процессор? В то же время – если у меня руки обратным концом вставлены, я могу соорудить бесконечный цикл и пользуясь исключительно консолью.

Сейчас на меня выльется гневная волна, потому что я скажу, что Perl – чудовищно плохой язык, язык Bash – еще на порядок хуже, остальные скриптовые – еще на порядок, просто потому, что их плодил всякий, кому не лень. Я не вижу никакого профессионализма в интерактивном написании полуметровых командных строк, а когда мне нужно написать пакетное задание, я бы хотел, чтобы у них был внятный синтаксис, не вынуждающий меня ломать себе язык (даже мысленно) аббревиатурами типа «xzvb», или «iouaej» только потому, что так звали любимую кошку случайного патчера, имя которого неизвестно, но дело его живет.

Большая часть виденного мною софта – очень плоха, а при знакомстве с его исходниками оказывается еще хуже. Но большая часть виденного мною софта, тем более, в исходниках – написана отнюдь не в 5-м билдере. Windows – чудовично плохи изнутри, а последний опус Microsoft – так даже и снаружи. Но изнутри ничем особенно не блещет и Linux – за исключением, может быть, ядра. Почему? Просто потому, что навешивание балконов, фонтанов и бантиков – даже организованное – по-настоящему качественного кода породить не может: он будет немедленно изуродован неизбежными в таких случаях компромиссами.

Но так ли это важно для меня лично? Честно скажу: мне – плевать. Мне нужно решать определенные задачи, и если средство, которым я располагаю, их решает – меня оно вполне устраивает. Перестанет решать – найду другое.

Думаю, что никто не хочет писать бездарные программы. Есть объективное требование общества потребления – создание спроса в условиях, когда он без того уже удовлетворен так, что из ушей льется. Производители железа и софта взаимно заинтересованы во все большем и большем раздувании софта и железа. Заинтересованы объективно. Это давление на всех нас, как дилетантов, так и профессионалов «весит» сотни миллиардов долларов. Любители конспирологии могут найти здесь для себя много интересного.

Но какую альтернативу можно здесь предложить? Вернуться к «БЭСМ-6» с перфокарточным вводом? Когда «программист» располагался на социальной лестнице между физиком-ядерщиком и товароведом обувного отдела, причем значительно ближе к первому?

Но это невозможно. Программирование потеряло флер колдовства, как потеряла флер героизма космонавтика.

Чего же мы хотим?

А мы снова хотим его превращения – но не в ясную, всем понятную науку, а – в шаманство. С заклинаниями, священными и тщательно охраняемыми книгами недокументированных функций, «посвященными» и «непосвященными» итп. Нет?

Сейчас выльется вторая волна, поскольку я скажу, что в этой идиосинкразии к «визуальным средствам разработки», «managed systems», к тем, кому «некомфортно лезть в консоль», «пуляет кнопочки на формочки» итп., я, простите, усматриваю всего лишь косность взглядов, цеховой обскурантизм и ориентацию на процесс, а не на результат.

Есть задачи, для которых необходимы одни средства, и есть – другие, для которых другие и необходимы, и настоящий профессионализм заключается в том, чтобы правильно выбирать – для чего что. Было время, когда считалось очень круто – починить телевизор с помощью одной отвертки, и что? Это – профессионализм? Нет – это выпендреж.

Однако, подлинная суть дела не в этом. И решающую роль здесь играет не выпендреж, а смутное сознание, что с каждым годом – все больше возможностей и желающих отбить у нас хлеб. И мало этого, еще и опустить авторитет профессии – а значит жалование – еще ниже, чем это есть сейчас. Страшный образ «программирую на C++ за еду» преследует всех нас по ночам, и скоро начнет преследовать наяву. Иначе говоря, это современный IT-луддизм. Но такие проблемы, как известно из истории, решаются не разрушением машин и возвратом к ручному щелканью на счетах, а организацией, например, профсоюзов, забастовками итд.

Решаются профессионалами, а не клубами любителей Windows, Linux, Brainfuck, или чего бы то ни было еще. Ну и, разумеется, не дилетантами, только вчера нарисовавшими первый в жизни интерфейс с разноцветными карамельными кнопками и не способными внятно объяснить, в чем отличие компилируемой программы от интерпретируемой – тут я снова полностью согласен с ранее выступавшими ораторами. Им нужно просто учиться».

Блоггер j_sheridan 26 марта 2008 года в заметке «Новокодеры» как бы продолжает мысли А. Ильина:

«Общаясь на форумах rsdn, я понял тут одну вещь... Программисты вырождаются. С дикой скоростью превращаются из мастеров своего дело в кодеров. Современный программист уже не тот, который был даже 5 лет назад. Современный программист ленив. Ему лень настроить систему, ему лень читать документацию, не относящуюся к его языку программирования. Ему просто лень. Современный программист - просто рабочий. У него есть станок, у него есть рабдень, и у него нет интереса к работе. Нет, к программированию у него интерес еще может и быть, а вот с интересом к IT вообще уже туго.

Я, к сожалению, не попал во времена ассемблера, да и комп у меня появился довольно поздно, но я не могу понять - как можно программировать, не имея понятия об администрировании, о механизмах ОС? Как можно давать такому кодеру проект, когда этот кодер боится консоли как огня и все время ищет кнопку "Сделать мне песдато"?

Хреново в общем. Очень хреново. Я считаю, что волна пошла после появления новобэйсика, тобиш дотнета. Ну какже, они же не на бэйсике программируют! На сишарпе! А то, что что шарп, что бэйсик - суть одно и тоже - скрывается. Сборщики мусора, понимаеш, полуинтерпритатор-полукомпилятор, иногда производительнее явы, а еще иногдее производительнее с++, понимаеш... Тьфу!

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

Вот так вот. А мы потом деньги тратим не только на новый софт, но и на новое железо, потому что на старом софт почему-то начинает тормозить. Дальше хуже будет. Попомните мои слова. Я надеюсь только на одно - что со временем количество кода перерастет в качество, и начнет цениться не рюшечки, а производительность. Но чую пятой точкой - нескоро это будет. Из возможностей железа просто еще не все выжали..."

,lj user="lrn-alt.blogspot.com">:
Братан. Такая ситуация уже лет 10 как. Программисты выродились после выхода на рынок Visual Basic и Delphi. Каждый мудак , сумевший написать messagebox("Hello, World!'); мнит себя гениальным программистом. Отрасль получила то, к чему стремилась все эти годы - визуальные инструменты разработки резко повысили скорость работы, но сильно снизили качество кода.

[Bad username: >e_will]:
я к такому же выводу пришел лет 5 назад. тогда еще процессоры были одноголовыми, старались толщину пленки уменьшить, и уменьшали. думал что есть предел нанотехнологиям типа, скоро уменьшать будет некуда, начнут код оптимизировать... не тут то было... появились многоголовые процессоры, про код опять никто не вспоминает... сдается мне и не вспомнят еще долго, увы. Последние полгода примерно дома работал в убунте, пока инета небыло хорошего, но както не срослось. недавно вспомнил(!) что у меня же снова выделенка нормальная дома стала, можно опять генту ставить, да и время появилось. выходные потратил чтоб на буке флаги оптимизиации настроить и ядро с системой скомпилить. и что в итоге? система работает на порядок быстрее, прекрасно поддается тюнингу и т.д. и т.п. А если без лирики - производителям выгодны тормознутые программы - можно делать более быстрое железо, программерам выгодно быстрое железо, под него можно писать более бездарные программы. замкнутый круг.

[info]j_sheridan:
Мда... С многоядерностью конечно еще долго будем ждать очередного рубежа, к сожалению... Наверняка в итоге это будет процессор размером с ладонь и с обязательным фреонным охлаждением....

[info]e_will:
«640 килобайт должно хватить всем!» (с) Билл Гейтс

Анонимно:
Какой-то необоснованный наезд на с# кодеров. Быдлокодер - понятие не зависимое от языка программирования. И вообще какой-то странный подход, вы предлагаете, к примеру, в энтерпрайзе писать на С и ассемблере? И вообще смахивает на попытку самоутвердиться, типа я такой умный, а все остальные тупые. С уважением, mitix

[info]v4e_aka_v4e:
Согласен полностью с ответившими - процесс то застарел. Тенденция с того века заметная. И по наблюдениям - те кто застал Dos не утратили способности к самообучению. Друзей много которые из под виндовса ни-ни зато в виндовсе строчат на всем что могут - ява, шарп, пхп, с. Поколение виндовс 95 и дальше - гуи приспособленные - им некомфортно лезть в консоль. Считающие себя гуру банально порой services.msc не знают что такое - пробираються к службам через меню администрирования - как пример, и так в остальном. Не все но обычно стереотип подтверждение находит. Дома машина и висту потянет и после висты (просто железо люблю) - Debian + XP (для жены) - тут демократичен. На работе опять же XP (активирован вистовыми лицензиями). Корпоративный заказчик давит на мелкомягких - никому не выгодны дорогая свиста+дорогущее железо. Опять же медленно на некоторых рабочих местах линукс появляеться. Да и гонщики за железом ориентируються уже на любителей поиграть и энтузиастов оверклокеров. А знакомые программеры - виндузятники (я без злости) спокойно стучат себе на PIII, ранних PIV со встроенным видео и до 512 метров оперативки - им большего не надо. Причем зарплата спокойно позволяет и новое железо и легальный софт. Сам сейчас уже ничего почти не кодю (для себя
по мелочи), но ядрышко пересобрать - это ведь даже в кайф! Знать что твоя
операционка заточена так остро и видеть как все летает.
P.S. Виндовс даже икспи перегружена через чур. Попробуйте прогнать на оптимизированной винде СуперПи тест и сделать тоже самое на неоптимизированном линухе. Мой результат на вскидку (машина одна и та же) был 25 секунд в икспи и 16 в линуксе. Вот грубый тест - винда съела треть моего CPU - спрашиваеться куда? - задачи аналогичные решают обе операционки.

[info]krivye_ru4ki:
А опции компиляции какие были? Исходники под вин и под *nix одни и те же?
Со своей стороны, могу сказать, что на 64-х процессорах HP публикует результаты TPC на Oracle под HP-UX, а там где процессоров меньше - Oracle под Windows. Просто потому что под Win быстрее.

[info]feuerwehrmann:
Забей! Так всегда было и так всегда будет. И говно-кодеры были всегда, и производители железа всегда гнали вперед, и мэнеджеры гораздо больше заинтересованы в time-to-market чем в качестве. И никогда не прийдет тот рубеж, когда прийдется остановиться и пересмотреть подход к разработке софта.

[info]jackyf:
Термин "новокодеры" мне понравился. Вот так я теперь буду называть этих "программистов". Статью и большинстве камментов дваждую, ибо сам имел похожие мысли уже через год после выхода дотнета. Но началось оно всё раньше, имхо. Во времена этак 5-го Билдера, к примеру. Пуляй себе кнопочки на формочку, строчи 20 формочек с контролами, прописывай бизнес-логику прямо в обработчиках... дууублируй код по 5 раз в разных местах... А фиг ли? Про рефакторинг кода большинство новокодеров даже не задумываются. Книжек по проектированию кода они тоже не читали. Язык! Язык они тоже знают на уровне арифметика+контролы. Ну и что они могут написать?. Бороться надо. Хотя бы такими постами. Начальническими действиями, кому позволяет служебное положение. Революция - она в умах (с) хз кто.

[info]zero_bit:
Дык правильно всё, зачем им знать, как система работает. За них же фрэймворк всё делает. И авторы книг, кстати говоря, в большинстве своём поддерживают этот быдло-стиль. В духе "А вот щас мы кинем на форму конопочку, выведем мессагу, а через неделю пойдём писать какую-нибудь жёсткую энтерпрайз-систему" :(

[info]_agronom_:
А поделки web-страничек из под "пера" мс ворда как вам? Это все давно уже, формочки, кнопочки, мастерочки... Тенденция давнишняя и удручающая. Хотя, я хорошо знаю одного человека, который общается с довольно большим количеством програмистов, а не кодеров) И более того, призван по роду своей деятельности отбирать их из толп тех самых "новокодеров".

[info]jenyay:
Да ладно, не так уж все страшно. Это не программеры вырождаются, а просто программером стало быть легче. А в свое время запускал одну несложную прогу на .NET 1.0 на 133-м пне и она в принципе неплохо работала. У меня просто перед глазами есть два противоположных примера. Один пишет в билдере и делает вот такие глаза , когда я ему говорю, что в других средах гуй приходится делать ручками без дизайнера. Второй пример - "старый" фортранщик, который пишет под дос, под винду даже не думает переучиваться, но ворчит, когда ему дают на обработку файлы длиннее 8 символов. В общем эти два примера уравновешивают друг друга.

[info]feuerwehrmann:
Да нормальная реакция, вон некоторые гуры утверждают, что язык Си это тру(тм) только по тому что learning-curve не дает кому попало называть себя Си програмистом. ;)
Меня же ситуация устраивает хотя бы потому, что сейчас у меня есть куча работы. А состоит эта работа в изготовлении из говна, написаного такими "ново-кодерами", рабочего продукта. Ведь стандартный подход в нашей местности - набрать дешовеньких студентов без опыта, а потом, когда проект-таки прийдется сдавать, пригласить специалиста на совсем другие деньги. ;)
И вообще прелесть шарпа и явы для бизнес-"решений" заключается в байткоде и эксепшенах. Можно намутить какой нибудь левой фигни, залить-задеплоить ее в базу, и когда она рухнет - сервак останется стоять. :)
Осталось только засунуть редактор прямо в рантайм как в ABAP и будет прекрасное нишевое решение для "типа-бизнеса". :D

[info]dimasokol:
Ну да, отрасль давно опопсела. Помню, ещё лет несколько назад в существовавшем тогда журнале с незамысловатым названием «Программист» была поднята тема номера: а кого, собственно, считать программистом? Где тот «программистский минимум», на котором ты уже программист, а ниже которого — дилетант? Потом и по форумам обсуждение пошло, народ ломал копья что должен программист знать и уметь... Кто был снисходителен и говорил, что программистом может зваться любой дельфиец, а кто вполне обоснованно на это отвечал, что если человек для пузырьковой сортировки компонент в инете ищет, то программером его назвать трудно. Так и не договорились ни до чего.
Хорошие программисты, несомненно, есть. Потому как в некоторых отраслях без них как ни крутись, а никуда :) Думаю, их даже где-то столько же как и было раньше — что сейчас, что десять лет назад, приблизительно одно количество людей должно чувствовать программинг своим истинным призванием и увлечением... Думаю, в абсолютных числах величины те же. Но вот в процентном соотношении от всей кодящей массы настоящих программистов становится всё меньше. Потому что в дома массово пришли компьютеры, интернет, а с ними — мода и выбор специальности ради понтов и из убеждения «буду сидеть в инете и за просто так получать пару косарей зелени».
К счастью, подобные кадры идут ислючительно в проприетарную разработку, ведь сам процесс не доставляет им удовольствия ;)

[info]warfarewell:
Оно, конечно, грустно. Смотреть, как "они там прутся под рейв и чем-то пудрят носы", а ты весь из себя такой вылез из тьмы и тебе триста лет. Но очень уж субъективно. Это как предположить, что ты приедешь в автосервис, чтобы что-то там починить, а автосервисный люд вместо того, чтобы заглядывать тебе в рот и читать твои мысли, начнёт презрительно выпячивать губы и рассказывать тебе о том, что ты быдломеханик, быдловодитель и вообще, личность, заслуживающая не самого лучшего отношения. Любое положение дел может быть обосновано какими-либо обстоятельствами, и оптимально "здесь и сейчас". Даже если оно не нравится кому-то, кто "когда-то и откуда-то".
Если рассматривать быдлопрограммеров и их быдлосерды быдлопрограммирования не чисто с профессиональной точки зрения, а с более низкого, потребительского уровня, можно увидеть, что иногда мощное, всеобъемлющее средство в сочетании с низкоквалифицированным специалистом намного выгоднее, чем компилятор командной строки с мега-гига-монстром, профессиональная борода которого гордо волочится по полу на протяжении нескольких метров. Программисты должны были разделиться на уровни, потому как количество задач, выполняемых ими, за последние годы возрасло неимоверно и необходимый уровень исполнения этих задач имеет очень большую амплитуду. Производители средств разработки схавали эту тенденцию и успешно её используют и развивают.
Я, например, время от времени пописываю для одного предприятия на Delphi комплексные и низкоуровневые компоненты. На предприятии сидят деффачки и тыкают мышку в вормочки. Стоимость рабочего времени деффачек - 8000-10000 рублей в месяц. Стоимость моего рабочего времени - 400 рублей в час. Улавливаете разницу?
Такое положение устраивает меня (срубить бабосов, много и по-быстрому), деффачек (не надо много думать, не нужно ни за что отвечать), босса (прикиньте, он мне платил бы 64000 в месяц, если бы я там на полной ставке работал). А пользователи систем, разработанных деффачками, вообще не увидели бы разницу между тем, что сделал бы я и что делают деффачки.
Так что, бессмысленно отрицать наличие говнокодеров. Лучше принять как данность то, что есть кто-то, кто занимается примерно тем же, чем и ты, но делает это несколько хуже.

[info]migun:
Хмм.. три раза хмм... Попробую привести обратный пример. Мы занимаемся софтом - делаем игры. Сейчас 99% наработок на С++ (кое-где Си). Еще бывает некоторое кол-во скриптов на Lua. В этом году решили переносить часть разработки на managed среду (жабу или дотнет - пока до конца не определились). Разумеется, не все, только некритичную ко времени исполнения часть (движок остается на С++, на managed язык выносится непосредственно специфичная для конкретной игры часть). Спрашивается - почему? У нас есть программеры, которые могут х#$чить на плюсах, делают это вполне неплохо. Да просто потому, что от него будет больше толку - он реализует большее количество фичей за то же время, а разницу конечный пользователь не заметит. Да, ему не нужно будет задумываться о выравнивании адресов по границе линеек кэша и о фрагментации памяти. Ну дак это и замечательно! Правило 80\20(90\10) никто не отменял, поэтому такие языки очень даже имеют право на жизнь.

[info]j_sheridan:
Вот так и рождаются windows-only игры. А еще и директХрен свою лепту вносит. Скажи мне пожалуйста, почему вы не пишите кроссплатформенных игр?

[info]migun:
Не поверишь насколько проста причина :) Нерентабельно :) Да, понимаю что ситуация схожа с курицей и яйцом, но благотворительностью мало кому хочется заниматься. Проблема проста, вот например наш последний проект, сколько сорцов на плюсах -
движок - около 2Мб
тулсет - около 1Мб
игра - около 2Мб
Чтобы наколбасить 4Мб портабельного когда нужно _объективно_
a) Либо более крутые программеры, чтобы успеть в то же время. При этом бюджет на программинг будет выше - такие люди стоят дороже;
б) Либо больше времени для тех же программеров, как следствие - тоже больше бюджет.
В обоих случаях получаем благотворительность.
P.S. Я руками и ногами за кроссплатформенность. Но, увы, бесплатного ничего не бывает. А вот кстати если бОльшую часть сорцов перенести на managed среду (например жабу) - с кроссплатформенностью будет гораздо проще.

[info]shadow_aka_hf:
Про программистов: отрасль перестала быть искусством и стала производством. В этом есть ряд неприятных моментов, но умные и активные все равно поднимаются наверх. А остальные делают рутиную работу, которую все равно надо делать.
Про .net: собственно языки такого класса и позволют существовать предыдущей схеме, когда когда несколько начинающих под руководтвом ведущего разработчика выдают вполне качественный код. Даже при разработке достаточно сложных систем.
Про производительность: скорость разработки для большинства систем важнее падения скорости работы в 2-3 раза, производительность железа растет очень быстро.

[Bad username: shalnev.blogspot.com]:
Страшно не это! Страшно, что описанная ситуация актуальна не только для мира программистов, но и для всего остального профессионального мира. Пойди спроси и так называемых бухгалтеров как работать с 99 или 97 счетом. Будут мычать и ничего толком не скажут. Попытаются рассказать какие кнопки надо в 1С нажать для этого. А потому что 1С все делает, потому знать что внутри совсем не надо. А нафига мне этот 1С? В США такие "бухгалтеры" даже этим словом не называются. Это даже не счетоводы. Просто операторы ввода данных. У таких спецов в США просто лицензии отберут. А они такие же как у врачей или адвокатов.
А вы думаете с врачами иная ситуация?! Я ребенку анализы в 3 местах в разных городах делаю. И консультируюсь также. Заключения, порой, диаметрально противоположные. Так сказали бы просто - "Мужик, ну не знаем мы - дураки мы, учились плохо, книжек по профессии не читаем". Так нет же!!! И если плохая программа далеко не всегда смертельна, то мнение врача иногда стоит драгоценных дней жизни. И это уже совсем не повод для иронии.
Да, программист может пользоваться высокоуровневыми средствами программирования, но он ДОЛЖЕН ПОНИМАТЬ ПРИРОДУ ВЕЩЕЙ. А современные программисты предпочитают этим не заниматься. В нашей стране катастрофически деградировали мастера своего дела! Самое страшное и смешное, что именно эти псевдо-программисты, врачи, лаборанты, бухгалтеры, плиточники, сантехники и инженеры хотят хорошей жизни и хороших зарплат. А заслуживают ли они?

[Bad username: lrn-alt.blogspot.com]:
Однако, такая тенденция не только в нашей стране. Она - повсюду. Например в тех же Штатах есть курсы по подготовке налоговых консультантов. Знаете чем они занимаются? Они заполняют налоговые декларации. При этом они даже не знают налоговых законов федерального уровня и уровня штата.
Бич современно профессионала - узкая специализация. Настолько узкая, что он оказывается зашоренным,и, как следствие, неспособным для дальнейшего развития.

[Bad username: anch-m0rp0rk.blogspot.com]:
В последнее время тенденция такова, что для серьёзной работы достаточно закончить какие-нибудь курсы (программистов, стоматологов, управленцев, начинающих миллионеров и т.д.). И хотя реальные знания и практика ценятся на вес золота, многие просто хотят сэкономить, нанимая таких вот недоспециалистов. А предложение, как известно, рождает спрос.

[info]a_ilyin:
Текст при всем том крайне фрагментарный, поскольку сокращено все, что можно: главным образом -- разного рода обоснования, доказательства и примеры. Выглядит в силу этого несколько категорично, и к каждому абзацу можно найти 256 придирок (на которые, разумеется, есть ответы), поэтому надеюсь на ваше понимание. Вопрос доверия в общем-то. Если появится желание обсудить -- я к вашим услугам.


В избранное