понедельник, 24 мая 2010 г.

[prog.work] Что такое “профессиональный программист” по мнению Роберта Мартина

Мой пересказ главы “The Professional Programmer” из книги “97 Things Every Programmer Should Know”. Главу написал Роберт Мартин.

Что такое профессиональный программист?

Единственным основным качеством профессионального программиста является персональная ответственность. Профессиональные программисты берут на себя ответственность за свою карьеру, за свои экспертные оценки, за свои календарные планы, за свои ошибки и за свое мастерство. Профессиональный программист не перекладывает свою ответственность на других.

  • Если вы профессионал, то вы отвечаете за свою карьеру. Вы отвечаете за собственное обучение. Вы отвечаете за то, чтобы идти в ногу с индустрией и технологией. Слишком много программистов считают, что их обучение является задачей их работодателей. Извините, но это совершенно не так. Как вы думаете, поступают ли так врачи? Как вы думаете, поступают ли так юристы? Нет, они занимаются собственным образованием, тратя на это свое время и собственные деньги. Они тратят изрядную часть своего свободного времени на изучение журналов и судебных решений. Они сами поддерживают собственный уровень. Тоже самое должны делать и мы. Отношения между вами и вашим работодателем четко прописаны в вашем контракте. Вкратце: ваш работодатель обещает вам платить, а вы обещаете хорошо делать свою работу.
  • Профессионалы отвечают за код, который они пишут. Они не отдают код до тех пор, пока они не убедятся, что он работает. Задумайтесь об этом на минуту. Можете ли вы представить себя профессионалом, если вы собираетесь зарелизить код, в котором вы сами не уверены? Профессиональные программисты ожидают, что отдел тестирования ничего не обнаружит, потому, что они не отдают код до тех пор, пока тщательнейшим образом не оттестируют его. Конечно, отдел тестирования найдет какие-нибудь проблемы, поскольку никто не совершенен. Но у вас, как у профессионала, должно быть стремление к тому, чтобы ничего не оставлять отделу тестирования.
  • Профессионалы являются командными игроками. Они берут на себя ответственность за результат работы всей команды, а не только за свою собственную часть. Они помогают друг другу, они учат друг друга, они даже прикрывают друг друга, если это необходимо. Если кто-то из команды срывается и выпадает, то остальные делают его работу, зная о том, что в один прекрасный день им самим потребуется прикрытие коллег.
  • Профессионалы не могут мириться с большими списками багов. Большущий список багов – это небрежность. Системы с тысячами багов в баг-трекерах – это трагические следствия недобросовестности. В самом деле, в большинстве проектов сама необходимость баг-трекера – это симптом недобросовестности. Только очень громадные системы могут иметь настолько большие списки дефектов, что для их обслуживания требуются автоматизированные инструменты.
  • Профессионалы не производят беспорядок. Они гордятся своим мастерством. Они поддерживают свой код чистым, хорошо структурированным и простым для изучения. Они следуют общепринятым стандартам и устоявшимся best practices. Они никогда не суетятся. Представьте себе, что вы можете наблюдать за тем, как врач проводит хирургическую операцию на открытом сердце – вашем сердце. У этого врача есть дедлайн (в прямом смысле слова). Он должен закончить операцию до того, как аппарат искусственного кровообращения уничтожит слишком много клеток вашей крови. Как вы хотите, чтобы врач вел себя? Хотите ли вы, чтобы он действовал как типичный разработчик софта – суетясь и производя дерьмовый код? Хотите ли вы, чтобы он сказал: “Я исправлю это попозже”? Или же вы хотите, чтобы он аккуратно следовал правилам, не торопясь, будучи уверенным в том, что он тщательно выбрал наилучший способ проведения операции. Хотите ли вы беспорядка или профессионализма?

Профессионалы ответственны. Они отвечают за собственную карьеру. Они отвечают за то, что их код работает так, как нужно. Они отвечают за качество своего мастерства. Они не отбрасывают свои принципы даже в условиях дедлайнов. Более того, именно под прессом сроков они еще строже следуют правилам, в правильности которых они уверены.

PS. Свое мнение по поводу этого описания профессиональных программистов я выскажу в комментарии.

8 комментариев:

  1. Под многими словами Роберта Мартина я бы с удовольствием подписался. В частности, в полный восторг меня приводят пункты об ответственности за код (который должен быть оттестированым самим программистом), о больших списках багов, о суете и о командной работе.

    Имхо, пример с самообразованием врачей для нашей белорусской сельской местности (да и российской, подозреваю) не очень актуальный. Насколько я знаю, у нас врачей принудительно раз в несколько лет отсылают на переподготовку и курсы повышения квалификации.

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

    ОтветитьУдалить
  2. А еще профессионал должен обладать упорством в достижении поставленных перед ним целей.
    Вот недавно прочитал интересную статью про мотивацию:
    А.А. Шалыто "Заметки о мотивации" (http://is.ifmo.ru/belletristic/_zametki_o_motivacii.pdf). Полностью с ним согласен: не будет мотивации и упорства - ничего не добьешься в жизни.

    ОтветитьУдалить
  3. >>> Насколько я знаю, у нас врачей принудительно раз в несколько лет отсылают на переподготовку и курсы повышения квалификации.

    И это правильно, а то вдруг они начнут лениться сами, и вследствии этого будут плохо лечить больных.

    Можно и программистов также отправлять, ведь пока его не уволили очень важно как он работает, ведь от этого зависит бизнес компании.

    ОтветитьУдалить
  4. >Можно и программистов также отправлять, ведь пока его не уволили очень важно как он работает, ведь от этого зависит бизнес компании.

    Тут интересно: программисту нужно повышать свой уровень, чтобы проще было работать (т.е. работать меньше). Тогда как работодателю нужно повышать уровень программистов, чтобы получать от них большую отдачу (т.е. чтобы сильнее их эксплуатировать). :)))

    ОтветитьУдалить
  5. 2Quaker:

    >А еще профессионал должен обладать упорством в достижении поставленных перед ним целей.

    Когда профессионализм начинают смешивать с упорством, это мне напоминает замечательную фразу из рассказа Ашманова "Жизнь внутри пузыря": «Игорь, что вы всё время просите денег на технику? Вы же известный специалист, вас и взяли потому, что вы должны делать эффективные программы, которым нужно меньше техники, а не больше»

    Упорство, безусловно, нужно в большом спорте, в науке, возможно, в бизнесе. В своих собственных увлечениях. Но вот упорство, которое требуется наемному профессионалу -- это для меня выглядит как желание "выдоить побольше" за те же деньги.

    >Вот недавно прочитал интересную статью про мотивацию:
    А.А. Шалыто "Заметки о мотивации"


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

    ОтветитьУдалить
  6. Quaker за пдфку спасибо очень интересно.

    Мне понравилось "принуждение к творчеству" :)

    ОтветитьУдалить
  7. Упорство, безусловно, нужно в большом спорте, в науке, возможно, в бизнесе.
    Шалыто - ученый, преаодаватель, заведующий кафедрой технологий программирования СПбГУ ИТМО. Если рассматривать с позиций науки и образования, то думаю, что он прав. С другой стороны, всем известна страсть отечественных руководителей различного уровня к высококвалифицированному низкооплачиваемому труду. Так что "выдаивание побольше за те же деньги" также имеет место быть.

    ОтветитьУдалить
  8. >Шалыто - ученый, преаодаватель, заведующий кафедрой технологий программирования СПбГУ ИТМО.

    Я знаю, читал когда-то о его SWITCH технологии. Насколько я помню, он с Бертрандом Мейером в хороших отношениях.

    >Если рассматривать с позиций науки и образования, то думаю, что он прав.

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

    Но сейчас времена изменились. Это следовало бы понять. А не аппелировать к кому, какая сейчас некреативная и ленивая молодежь пошла, что мерилом успеха стали деньги, что никто не хочет вкалывать сейчас, чтобы получить что-то потом. Мол, ракеты некому делать будет. В США, Англии и Франции делают. В условиях рыночной экономики. Значит и нам нужно научиться делать их в новых условиях. А не стонать о том, насколько сейчас все плохо и как всех нужно мотивировать.

    ОтветитьУдалить