Tuesday, December 2, 2008

Как стать хорошим программистом? (часть 2 из 3)

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

Да-да, как обычно, с персонального блога...

Для начала, поздравляю, вы уже удовлетворяете первому требованию к хорошему программисту. Вы не только пытаетесь что-то сделать, вы еще и критично все оценили, убедились, что вам это действительно нужно, и точно знаете причину. Хороший программист просто обязан выпить стакан-другой крови PM'а (менеджера, архитекта, аналиста, или кто там обьясняет вам, что надо делать). И вовсе не потому, что это вам или ему продлит жизнь, даже в полную луну. Скорее наоборот. Но зато вы будете ПОНИМАТЬ что же вы делаете и зачем. А это означает, что ваш код будет делать то, что нужно пользователю. Для справки, я уже писал, что происходит в обратном случае. То есть, когда программист не понимает, что надо. Посмотрите историю блога.

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

Что приводит нас ко второму обязательному университетскому курсу для профессии программиста, называемому «Как стать занудой». Да-да, вы уже догадались? Это шутка. Подчеркиваю, ШУТКА. Нет, не шутка в смысле статьи, для программирования это и правда нужно. Шутка, в том смысле, что такого курса не бывает. Не, правда. Ни в одном университете такого курса я не видал. Вот сходил на Гугл – и правда, нет таких курсов. И вообще, этому не учат в университетах...

Ладно, в тексте блога быть занудой на самом деле необязательно, но это все равно не знание, это – черта личности, которая будет переть из вас где надо, и где не надо. Вообще, вам приходилось слышать фразу «программист – это не профессия, это диагноз»? Упомянутое письмо включало примечание вроде: «Я даже могу принять такой ответ как «Стать программистом нельзя – им надо родиться!»» Так вот, стать программистом можно! Врожденная склонность, равно как и неаккуратные няньки, стукающие младенцев головой об перила, бывает помогают, но само программирование – это не врожденное, это благоприобретенное. Ну, как другие состояния психики, кончающиеся заботливыми руками санитаров. Хорошая новость в том, что состояние психики именуемое «программист» столь полезно обществу, что вместо санитаров и обитой войлоком комнаты вас сажают в обитый тканью кубик и используя особенность заболевания, приковывают вас к тихо шуршащему ящику, переливающемуся яркими красками монитором, мышке и прямоугольному устройству с множеством кнопочек, которые можно нажимать в таком разнообразном количестве комбинаций... Причем приковывают не буквально, а просто знают, что от этой игрушки вы никуда не денетесь. А подающим признаки выздоровления вроде меня всегда можно дать 3-4 таких ящика, желательно разных (пару под Вистой, один под Windows Server, один под XP, один Мак, и один Xbox в версии для разработчкиов – ну, да, обычный Xbox – это для программиста слишком скучно). Такое практически детерминированно заканчивается острым рецидивом весьма полезным для общества, фирмы, и даже счета в банке самого больного. Могу подтвердить. В общем, никто не в обиде.

Собственно, точность и занудность – это просто две стороны главной стороны личности программиста, которую я называю fidelity to reality – верность реальности. Не «правде», не «истине», а именно «реальности». Не тому, что написано на развевающемся знамени, а тому «как на самом деле». И опять же, это не университетский курс, это свойство личности. Не врожденное, благоприобретенное, но тем не менее свойство личности, которое будет видно и во всех остальных областях вашей деятельности. Во всех областях вашей ЖИЗНИ. И это будет мешать. Серьезно будет. Ваш единственный шанс вписаться в организации вроде Коммунистической Партии Советского Союза (а также менеджерской структуры любой американской корпорации) – это воспринять реальность как еще один восхитительный компьютер, который надо запрограммировать. Но добравшись до этого состояния вы, скорее всего, потеряны для программирования, поскольку программирование человеческих сообществ после программирования компьютеров – это как гоночный автомобиль или самолет после механической колымаги от Тойоты или General Motors. Количество адреналина и серотонина просто несравнимое. К слову, а макроэкономика (в рамках стран и мира), если вы не обращаетесь с ней как профессиональные экономисты (дойная корова, способ развести лохов в правительстве на вашу липовую модель), а как программист («как это на самом деле?») – это как космический корабль из StarWars, StarTrek или там Babylon 5.

Обращаясь к автору письма: вы, должно быть, разочарованы. Вы спросили меня о практических советах, а я тут о свойствах личности рассуждаю. Нет, чтобы по-простому, делай раз, делая два, делай три... Но в том-то и дело, что программист – это в первую очередь свойство психики, если вообще, не состояние психики. Я, конечно, говорю о хорошем программисте. Рисовать формочки все это не нужно. Берете месячный курс C# и .Net или там Visual Basic – и вперед. Ни одного настоящего программиста вы не обманете, но такие тоже нужны. В общем, никаких проблем. Даже не раз-два-три, а ррраз, и программист! В общем, если это то, что вам нужно – вперед, и дочитывать этот пост ни к чему. А пока вернемся к настоящему программисту.

Кстати, изменение своей собственной психики кажется далеко не простым делом, но трюк в том, что от вас и не требуется его делать самостоятельно. Нет-нет, никаких университетских курсов. Изменения происходят сами собой по мере того как программирование затягивает вас как наркотик. Fidelity to reality не воспитывается заботливыми гувернантками или профессорами, оно – результат вашего общения с компьютером в роли программиста. В реальной жизни есть много причин предать реальность, и обычно они все сопровождаются кратковременными наградами. В программировании каждый раз, когда вы предаете реальность, вы тут же получаете столом по морде. С полного размаха. Компьютер ляпов не прощает. Компьютер тупой и исполнительный, он делает ровно то, что вы сказали, даже если ваше махание ушами и хвостом не должно было это означать. И это происходит изо дня в день, из месяца в месяц, из года в год. И вы привыкаете к мысли, что ваша вера в то, что вы написали все правильно не имеет никакого значения, и каждый ваш ляп вылезает тут же и нелицеприятно. По крайней мере пока вы не приучились делать только ОЧЕНЬ мелкие ляпы. К чему компьютер и приучает вышеописанным методом очень и очень эффективно.

К слову, еще одна черта воспитываемая компьютером в программисте, это твердая вера, что КАЖДАЯ ПРОГРАММА ИМЕЕТ ХОТЯ БЫ ОДИН БАГ. Это означает знание, что сам ты тоже в чем-то неправ, о чем бы ни шел разговор, и способность продолжать действовать и не впадать в истерику по этому поводу. Правда, общение с простыми смертными часто приводит к убеждению, что они-то вообще почти во всем не правы. К этому вас приучает даже не компьютер, а сами простые смертные, компьютер лишь приучает вас это замечать. Тоже, как понимаете, не самая лучшая черта в плане социальных навыков. Хотя обычно помогает то, что вы в основном общаетесь почти исключительно в обществе программистов, на которых (после многолетнего мордобития со стороны компьютеров) это правило к вашему удовольствию не распространяется. В смысле, они не всегда неправы, а только так, изредка, баг проскакивает. В общем, выражение «тараканы в голове» приобретает несколько новую и очень конкретную форму.

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

Некоторые сравнивают программирование с сексом. И знаете, в этом есть изрядная доля правды. По крайней мере на стадии хакера. К слову, публика считает «хакеров» какими-то исключительными программистами. Это неправда. Хакер – это как раз начинающий программист. Своего рода личинка программиста. Освещение в прессе и инциденты с хакерами обычно связаны как раз с тем, что их квалификации еще не хватает, чтобы получить нормальную работу программиста, а программировать хочется, поскольку они от этого получают тонны удовольствия, вот и программируют что попало вплоть до компьютерных инфекций. С начинающими в сексе тоже такое случается. Это уже потом случайных dial-up'ов начинает нехватать, и приходится все-таки тратиться на DSL, а то и T1, кому как повезет. Кстати, заметили что от программирования и секса я перескочил на Интернет. К слову, того же поля ягода...

Можно неполткорректный анекдот? Луг, стадо коров, холм, на вершине холма старый здоровый бык и молодой бычок. Бык флегматично жует траву, а бычок прыгает вокруг и с интересом приглядывается к коровам у подножия холма. Подпрыгивает к быку и кричит: «Дядя бык, дяда бык, давай быстро-быстро сбежим с холма и проявим интерес к той ЧЕРНОЙ коровке?» Бык, продолжая жевать, флегматично отвечает: «Не-е-е...» Бычок прыгает вокруг еще и подскакивает с альтрернативным предложением: «Дядя бык, дяда бык, давай быстро-быстро сбежим с холма и проявим интерес к той РЫЖЕЙ коровке?» Бык, продолжая жевать, опять флегматично отвечает: «Не-е-е...» Так повторяется несколько раз. Наконец, бычок спрашивает: «Так, дядя бык, а что ж мы будем делать?» Бык перестает жевать, вздыхает, и отвечает: «Мы медленно-медленно сойдем с холма и проявим интерес ко всему стаду!»

Это к слову, о разнице между хакером и профи, если не поняли.

Ну, и теперь к самому конкретному вопросу в том письме. Какие курсы взять? Хотите честный ответ?

А НИКАКИХ!

Представляете себе такое письмо от бычка: «Дядя бык! Я тут листаю PlayBull и надеюсь когда-нибудь перейти к настоящему сексу. Какие курсы в местном университете и какие сертификации вы посоветуете?» Никаких. Начните общаться с коровками (в случае бычка), девушками (в случае секса) или с компьютером (в случае с программирования). И старайтесь каждый день чуть продвинуться вперед. Ну, там, сегодня пуговку расстегнуть, завтра руку куда засунуть... Если вы IT admin (это я о все о программировании, если вы запутались в моих сравнениях), напишите скрипт там на Питончике, shell или Перле. Потом крохотную программку на C# или C++, которую этот скрипт вызовет. Поучаствуйте в каком-нибудь конкурсе плагинов. Скачайте онлайн библиотеку для персональных нужд. Естественно, программой, которую сами написали. Походите по программистским форумам. Знаете, как начинающие ребята в баре, хвастающиеся своими постельными подвигами. Ну, и так далее. По ходу дела сами увидите какие университетские курсы или сертификации вам нужны. Заодно убедитесь, что как правило лучший способ выучить язык – это начать писать на нем. Ни один курс лучше этого не поможет.

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

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

Список Сергея:

Список Вадима (то же место):

No comments: