"----"-ками помечены изменения. ...
Л: Поэтому, кстати, на кодерских должностях руководители часто вводят очень жесткие ограничения, начиная от используемых языков программирования (если требовался "программист на Java" - то только Java, если "программист на PHP" - то только PHP) и вплоть до стиля оформления кода и используемых конструкций языка (у Кента Бека, одного из основателей экстремального программирования, например, был случай, когда его попросили: 1) написать программу на Java; 2) не использовать объекты). Полноценных программистов же в этом смысле никак не ограничивают; максимум, в тексте вакансии может быть написано, например, что "в проекте используется F#". Но, повторюсь, право (пере-)выбора средства работы остается за специалистом.
----
Л: Отдельно я бы хотел отметить вакансии, в которых требуется "умение разбираться в чужом коде". Вообще говоря, это вакансии для высококвалифицированных программистов, но предприниматель поначалу (то ли по незнанию, то ли из жадности) нанял людей с улицы. Скупой платит дважды: нанятые кодеры, естесственно, просрали весь бюджет, сорвали все сроки и вместо программы написали сочинение на тему "как я провел зиму и лето за офисным компьютером" - короче, говно. И предприниматель теперь сидит без денег, с куском говна в файлохранилище и в панике пытается сделать из этого куска нечто хоть немного похожее на изначальную задумку. Но вместо того чтобы нанять, наконец, специалистов, он продолжает нанимать кого попало, да подешевле. В результате такой скупец платит трижды, четырежды, пятикратно; кадры текут, сроки срываются, а в файловом хранилище как был кусок говна, так и остается по сей день. Ну, думаю, понятно, на чем бизнес таких контор держится.
Л: То есть, резюмирую: вакансия, в которой требуется "умение разбираться в чужом коде" - это вакансия для квалифицированного программиста (!), но занимаются там копанием в говне (в переносном смысле) и платят как кодерам.
Л: Третий признак кодерских вакансий - аутсорсинг. ---- Если компания занимается аутсорсингом, то это однозначно кодерская контора, и, скорее всего, сами работодатели тоже являются кодерами. Поясню: вот поставьте себя на место компании, производящей ПО - что бы вы как директор этой компании отдали бы на аутсорсинг? Что бы вы доверили сторонней фирме?
Пауза X23: Ну, если у меня какой-то супер-сложный проект, какие-то сложные алгоритмы, которые я патентовать собираюсь, то я бы вообще ничего не доверил. Накосячат еще или вообще налево продадут.
X23: А так... Ну, наверно, какие-то несложные части, где трудно накосячить. Самые легкие, так скажем.
Л: Именно! Ни одна уважающая себя компания не отдаст ПО на аутсорсинг, если не будет на 100% уверена в сторонней компании и в том, что она справится с разработкой. А значит, никакие сверх-сложные алгоритмы, требующие неординарного мышления, она не отдаст. Максимум, что сейчас идет на аутсорсинг - это интерфейсы: веб-, автономные графические, текстовые и прочие. Лепка интерфейсов - это сейчас одна из самых простых (проще только грамматический разбор текста) и в то же время одна из самых объемных задач. Иногда "аутсорсят" серверные приложения, но, как правило, они идут как часть интерфейса - так называемые front-end-ы.
Л: Сами понимаете, квалификация в таком деле нафиг не сдалась. Поэтому одно время многие софтверные гиганты аутсорсили индийским, китайским фирмам, иногда даже "странам третьего мира" - квалификация у них такая же, как и у фирм в других странах (читай: никакая), а рабочая сила дешевле. Потом, правда, до всех дошло, что программы там пишет совсем уж быдло, и сейчас переключились на гастарба... то есть, подрядчиков из России и Европы.
ОП3: это потому что в России самое лучшее образование. Многих наших ученых за границу приглашают работать. Самая умная страна в мире хуле)
----
Л: Предупреждение за необоснованный мат. Я разрешал материться, но не разрешал применять его бесконтрольно.
ОП3: а где это я сматерился по-вашему?
Л: Приехали! Знаете, с такими вопросами идите-ка вы сначала в школу или, там, в детский сад. Подучитесь немного там, а потом на такие вот лекции приходите.
ОП3: хуле не является матерным словом
Л: [facepalm.jpg]
Л: Является. И если вам в детстве не рассказали, какие слова являются матерными, и что это вообще означает, то лучше молчите. Если хотите и дальше мои лекции читать, конечно.
Л: Ну так вот, насчет образования. ---- Образование в России давным-давно просрано. Осталась парочка приличных вузов: "бауманка", МАИ - и те сейчас просто выживают (скоро тоже загнутся). Мне из-за этого пришлось за рубеж ехать: в ЮУрГУ пробовал на "Приме" учиться - на первом курсе прошли B-деревья, так я из этих структур данных выучил одно только их название.
Л: А образование для программиста - штука жизненно необходимая. У моих знакомых коллег - по 2, по 3 "вышки". Причем не таких, как у нашего офисного планктона - инженерное какое-нибудь и экономическое (читай: бухгалтерское) - а полноценных: у меня, например, дипломы математика и биолога. Я еще хочу медицинское в/о получить, но там учиться долго. Без него во многих проектах по части медицины тяжеловато разбираться (это при том, что я профессиональный биолог, заметьте).
Л: В общем, аутсорсинговые компании - это почти всегда плантации "кодирующих обезьянок". Ни одна софтверная компания не доверит сторонним лицам что-то серьезнее лепки формочек.
----
Л: В-четвертых, в открытом доступе работу для настоящих программистов не найти. Я сам нахожу ее исключительно по связям да по знакомству.
X24: :D Это, наверно, самый главный признак. :D
Л: Да. Просто наша цивилизация еще слишком молода, не доросла еще до каких-то действительно сложных проблем. Все задачи, которые я решал - да, были сложными, с
c больше
c0max - но не намного больше. Как правило,
c крутилось где-то в районе
c0max (небольшой коллектив ученых мог бы справиться). А так, чтоб
c >> c0max... Нет, такого не было. Молода еще наша цивилизация. Не нужны никому мои комбинаторные нейронные сети.
Л: Есть такой шаблон проектирования, называется "инъекция зависимости". Примененный правильно, он позволяет отделить одну часть программы от другой полностью, таким образом уменьшая ее сложность минимум вдвое. Так вот, за всю свою карьеру я так его ни разу и не применил - не приходилось, обычно хватало банальной компонентной декомпозиции. Методом вырезания этих самых компонентов из бумаги и складывания из них аппликаций, да.
X24: Чего-чего? Это что еще за оригами? :D
Л: А что такого? Вполне нормальный способ разработки.
X24: Нет, ну, "компонентная декомпозиция" - и вдруг "вырезание из бумаги"... Как-то не вяжется! :)
Л: Почему?
Л: Вы что, думаете, программирование - это написание какого-то непонятного кода вида вот такого?
Л: [Рисунок 17.png]
Л: Или рисование непонятных диаграмм наподобие этих?
Л: [Рисунок 18.png]
Л: Да ничего подобного. Так только кодеры делают. Они не умеют управлять сложностью, поэтому часто во время кодинга перетружают свой мозг до такой степени, что входят в некое измененное состояние сознания, в результате рождаются такие перлы, как контейнеры C++ STL (попробуйте походить по их исходникам и понять хотя бы, для чего они нужны); время изменения фрагмента таблицы в базе данных, равное "00:00:00 01.01.0000" (у меня на моей самой первой работе такое было, и народ на полном серьезе утверждал, что это абсолютно нормальное значение); "breeze user exits" в электронных архивариусах, опция "lookahead" в программах-секундомерах и т. п.
Л: Ну, примерно как при употреблении наркотиков. Автор STL вообще открыто признался, что идея написать эту библиотеку посетила его, когда он находился в состоянии бреда, вызванного отравлением то ли рыбой, то ли грибами.
Л: Так вот, ничего подобного, со стороны работа программиста вообще выглядит как тупое переписывание тех. задания в более строгой и однозначной форме. Если программист пишет систему учета пациентов, то с вероятностью 99% в его коде будет строчка "class Patient". Если он пишет генератор порно-рассказов, то будет что-то вот такое:
http://pastebin.com/9TwXR09X (см. последнюю секцию).
Л: Львиная доля программистских техник - это вообще банальная визуализация. Вы даже не представляете, насколько упрощается работа, если под рукой есть адекватная модель предметной области. Я в свое время на досуге написал скоростную файловую систему для флешек, используя одну только подставку для CD.
Л: [Рисунок 19.png]
Л: Просто представил, что диски - это фрагменты файлов, и сидел целыми днями перекладывал их с места на место.
Л: Поэтому я всегда говорю своим ученикам: если не получается составить алгоритм - нарисуй предметную область на бумаге. Причем именно на бумаге, а не на экране компьютера - долго объяснять, почему, но бумажный вариант воспринимается нашим мозгом лучше, чем компьютерный (и будет еще долго лучше восприниматься несмотря на все усилия промышленности ИТ). А лучше собери модель того, чем ты оперируешь, из подручных материалов. Ученик рисует или, там, собирает и: "Оп-па! Как же я сразу не догадался!"
Л: Ну, так вот, работу, требующую квалификации именно программиста, а не кодера, найти крайне сложно. Я один раз вообще целый год без работы сидел, пришлось на oDesk-е бомжевать. Пара российских НИИ приглашала на довольно интересные проекты, но я отказался - зарплату там предлагали совсем уж дворниковскую (25 000 в одном и 30 000 в другом). Я понимаю, что оплата труда часто не адекватна приносимой обществу пользе, но такую ее предлагать - это уже просто неприлично.
Л: Мало на свете действительно сложных задач, не доросла еще наша цивилизация до них. Но вот когда такие задачи появляются, справиться с ними может только программист. Не кодер, не электронщик, не даже инженер, а только программист. Так что программисты - это двигатели прогресса. Они работают на будущее.
Л: Не кодеры, повторюсь, а программисты. Кодеры вообще способны только перепечатывать готовый код. Большего я им не доверяю никогда.
Л: Однако ж, самомнения кодерью не занимать. Ну, оно и понятно: кому охота называться дилетантом-самоучкой? Все хотят быть убер-профессионалами с многолетним стажем.
Л: Вот и начинают: выучат какой-нибудь язычок программирования да пару библиотек к нему - и все, считают, что они теперь и в Google могут работать, и в Лаборатории Касперского, и вообще везде.
Л: Некоторые особо упёртые экземпляры начинают программистский жаргон употреблять. Всякими умными словечками бросаться: типа, "функтор", там, "хеш-таблица", "TDD"... Ладно еще, когда понимают значение этих слов, но чаще всего как раз наоборот: или не понимают смысла, или произносят неправильно. Вот тот мой знакомый веб-дизайнер, например, одно время лямбда-выражения называл "альфами" (пока я его не поправил), а все до одного, прошу прощения, плюсоблядки (фанаты языка C++) методы класса почему-то называют "статическими методами". Да я сам, что греха таить, когда молодым кодером работал, думал, что денотационная семантика - это качество языка программирования, а не способ его описания. Мол, вот у этого языка семантика очень денотационная, у этого - не очень денотационная.
Л: Вот, нахватаются умных слов, прочитают пару статей из Википедии и начинают пальцы гнуть - мол, мы теперь реально крутые прогеры.
Л: И работодатели верят им: нанимают таких вот болванов, берутся за сложные проекты... В результате самолеты бьются о скалы, АЭС взрываются и заражают все вокруг, пациентов режут на куски "электронные хирурги" - и никто ничего не может с этим поделать. Сколько раз уже было об этом говорено, всё это - уже давным-давно общеизвестные факты, и всё равно все продолжают наступать на одни и те же грабли.
Пауза Л: Да и как таким болванам не верить? Предприниматели, которые программистов нанимают - они же сами в программировании не разбираются. Они знают, как деньги считать и как товар эффективно продавать, а как программы писать - они и понятия не имеют. Они для того и нанимают специалистов, чтобы те с их задачей разобрались. Вот и дурят всякие недоучки свежую предпринимательскую голову: "здесь мы применим шаблон bridge", "данные будем передавать в XML" и т. д.
Л: Только вот все забывают о том, что программирование - это не только ведение бесед с умным видом о том, во что компилируются intrinsic-овые функии или, там, в какой момент инстанциируется шаблон статического метода, это еще и написание программ. Работающих. Понятно, что казаться специалистом куда проще, чем реально быть им, но обществу-то требуются именно настоящие специалисты.
Л: Вот так вот нанимаешь себе помощника - вроде и резюме объемистое, и опыта много, и знания какие-то есть; начинаешь спрашивать - и алгоритмы-то знает, и в современных технологиях разработки ПО ориентируется, и терминологию-то правильно употребляет; задаешь простейшую задачку: посчитать количество дырок в плоской детали по ее снимку - сидит, час тупит, насилует компьютер и интернет, потом выдает какой-то говнокод на C++ с пять экранов размером, который еще и не работает к тому же. Зато с виртуальным наследованием и вложенными шаблонами - у-у-у! Что ты!
Л: Это при том, что достаточно было просто сказать, сколько ж там дырок.
X25: :D
X25: Кхм. Так вы что, пользуетесь услугами кодеров?
Л: Конечно.
Л: А что? Они дешевые - я со своей зарплаты с проекта могу позволить себе нанять их пачку. Особенно пыхопидоров (фанатов PHP) - тех вообще можно нанимать целыми плантациями, и это почти никак не повредит бюджету проекта. Понятно, что так я меньше денег себе в карман кладу, но без этих помощников я могу не уложиться в сроки. Это как раз тот случай в экономике, когда самый простой вариант не является самым выгодным.
Л: Вот, и я вам скажу, работать с ними - то еще удовольствие. Ни черта не умеют, код пишут как попало, о культуре программирования вообще не имеют никакого понятия... Приходится буквально каждый шаг им расписывать, чуть ли не сам код за них писать, чтоб не накосячили. Ни навыков, ни знаний, ни даже элементарного логического мышления, зато самомнения - как у Дюка Нюкема.
Л: Некоторые еще спорить начинают, когда им говоришь, как писать надо. У меня как-то работал один плюсоблядок, который вместо связных списков везде массивы пытался совать. Делаешь ревизию кода, говоришь ему: "Поменяй на списки!" - он все равно продолжает массивы фигачить. Аргументация при этом такая, металлическая: "Ну, так же быстрее будет работать!" Показываешь ему расчеты, доказываешь, что класс сложности алгоритма получается недопустимый - он: "Да фигня это все! Все быстро будет работать! Я всегда так делал, и все работало!" По идее, надо было ему на реальных данных работу его говнокода продемонстрировать, но где я реальные данные возьму, если за ними надо на Сатурн лететь?
Л: Короче, я его уволил и нанял другого, по-сговорчивее. Благо, кодеры по своему определению взаимозаменяемы.
Пауза Л: Вот, в общем, не путайте кодеров и программистов. И сами не считайте себя умнее, чем вы есть на самом деле.
Л: Да-да, это относится в том числе и к сидящим здесь опытным программистам относится: проверьте себя, товарищи "опытные", действительно ли вы опытные программисты или просто называете себя таковыми. А то, говорю ж, приходят ко мне вот такие вот: и стаж-то у них под 50 лет, и знаний-то пол-Википедии, и слова-то умные знают - а на простейших задачах вянут, аки крепостные перед барином.
Л: Все хотят быть убер-профессионалами своего дела. Но далеко не у всех хватает смелости признать в себе банального неуча.
Л: Мне говорить об этом не надо, просто отметьте для себя. И да, не забудьте, что одно из личностных качеств, которыми по долгу службы обязан обладать любой программист - это так называемая профессиональная скромность. Я потом своим ученикам расскажу, что это значит.
Пауза Л: С кодерами, кстати, связан ряд мифов.
Л: Например, слыхали анекдот?
Л: Идет обезьяна по пустыне. Жаpко, пить хочется. Вдpуг видит: стоит пальма, а на ней - кокос. Hу, обезьяна начинает тpясти ее, а внутpенний голос говоpит: "Обезьяна, подумай!" Обезьяна подумала, взяла палку, сбила кокос и напилась.
Идет программист по пустыне, жаpко, пить хочется. Вдpуг видит: стоит пальма, а на ней - кокос. Hу, программист начинает тpясти ее, а внутpенний голос говоpит: "Программист, подумай!"
- Чего тут думать, тpясти надо!
Л: Так вот, это не про программиста, а про кодера. Задача программиста - придумать простой и изящный алгоритм, который другие до него не смогли придумать. Задача кодера - написать много-много кода быстро-быстро, пока Солнце еще высоко.
Л: Или другой анекдот:
Родители строят планы насчет будущего их сына. Отец:
- Окончит с отличием физико-математическую спецшколу, поступит в университет, потом в аспирантуру, серьезно займется наукой, будет выдвигать смелые гипотезы, ставить численные эксперименты, считать на компьютере, писать программы...
Мать:
- Что, будет программистом?! Ни за что!!! Он закончит музыкальную школу по классу фортепиано, будет выступать на конкурсах, будет развивать новые направления в музыке, искать свежее звучание, моделировать и обрабатывать треки на компьютере, писать программы...
Отец:
- Что, будет программистом?! Никогда!!!
Сын выходит из своей комнаты.
- Предки, кончайте кластеры забивать! Школу я бросил, из музыкалки выгнали...
Родители:
- И что же ты будешь делать?!
- Буду программистом...
X26: :D что-то я не слышал такого...
Л: Есть много шуток.
Л: Так вот, считается, что в программисты идут те, кто ничего больше не умеет делать. Это неверно. Правильно так: те, у кого руки золотые и голова работает как надо, идут в инженеры, архитекторы, дизайнеры, наконец (если склад ума гуманитарный); те, у кого руки растут из задницы, но голова работает еще лучше, чем у инженеров, идут в ученые, программисты и т. п.; те, у кого руки вроде бы на месте, но в голове есть только череп, идут в слесаря, в сантехники, электрики, токари, в военные и прочие нужные профессии; те же, у кого нет ни рук, ни мозгов, идут в проститутки, в порно-актёры (если природа наделила соответствующей внешностью), в дворники, в разнорабочие, в грузчики и тому подобные не менее нужные профессии. А те, у кого тоже нет ни рук, ни мозгов, но личные убеждения не позволяют заниматься чем-то полезным, идут в кодеры и веб-дизайнеры.
Пауза Л: Или есть еще такая фраза: "язык определяет мышление". Мол, программист мыслит терминами того языка программирования, на котором он пишет.
Л: Так вот, это тоже неверно. Программист и математик - чуть ли не единственные профессии, у представителей которых мышление определяет язык. Программист и математик сначала придумывают алгоритм/математический объект, а потом все оставшееся время думают, как же его выразить на бумаге или в коде. Поэтому программисты и напридумывали себе целый зоопарк языков программирования (более 8 500) - на одном языке лучше выражаются одни концепции, на другом - другие.
Л: "Язык определяет мышление" - это больше характерно для кодеров: они редко знают больше одного языка программирования, а компьютерные науки не знают вообще (многие даже не в курсе, что такие вообще есть), и все познания в этой области черпают из своего любимого языка.
Л: Поэтому, например, все Java-блядки, которых я встречал, какие-то туповатые туповаты и обладают крайне шаблонным мышлением: если "передача данных", то XML; если "распределенное приложение", то "IRequest-IResponse" или, в лучшем случае, "клиент-серверная архитектура"; если веб, то JSP, JSF, JPA, Apache Tomcat, Java Struts и прочие непонятные аббревиатуры, но никак не собственно веб.
Л: Просто Java - язык сам по себе простой, но... Как бы вам это сказать... "Деревянный". Негибкий. Отсюда и туповатость Java-сосов. Кроме того, изначально Sun Microsystems (создатель языка) побуждала Java-кодеров к повторному использованию стандартов, рекомендаций, готовых библиотек, решений и т. д., поэтому Java-пидоры не приучены мыслить самостоятельно.
X27: Да перестаньте вы их так называть! Они вполне нормальные люди! Просто они знают меньше вашего!
Л: Нет, они именно пидоры: одно дело, когда человек ничего не знает, но и не скрывает этого (как, например, Perl-офаны) - тогда это просто любитель; и совсем другое, когда он со своей экспертизой лезет в области, в которых ни черта не смыслит (как это обычно делают кодеры) - это уже самый настоящий пидарас. И это не я придумал, это весь интернет их так называет. Я уже говорил об этом.
Л: Вот, а плюсопидоры (фанаты C++), например, в подавляющем большинстве случаев похожи на наркоманов. Тоже красные глаза, и тоже вместо общепринятой терминологии используют какую-то свою, наркоманскую: полиморфные методы они называют "виртуальными", методы класса - "статическими методами", обобщенные классы - "шаблонами", строки они не конкатенируют, а "складывают" и т. д. Причем еще огрызаются, когда говоришь им, как правильно.
...
Рисунков много сделать не получилось и не получится. Программирование - это вам не дизайн интерьера и даже не электротехника. На Форчане тамошний /s/ вообще является текстовым разделом.