Какой хороший программист!
Какой хороший программист наш Вася! Всегда опрятно одет, вежлив и предупредителен, хороший семьянин и душа компании. Что? Как он, собственно говоря, программирует? Хм… Постойте… А мы и не знаем. Никто никогда толком результатов его работы и не видел-то. Получается, Вася — не очень хороший программист? Ну ладно.
Вот Петя — точно хороший спец. Его код реально существует, компилируется, что-то делает. Показатель? Показатель. Правда, работает Петя не над тем, что по проекту надо, а над тем, что ему в взбредет в голову. Иногда оно совпадает с общими целями, но чаще — нет. Выходит, и Петя наш — не идеал? Выходит так.
А кто у нас есть еще?
Ну вот Коля — Коля всегда предельно точно выполняет указания руководства, работает именно над тем, что ему поручили, никакого своеволия. Ну идеальный же разработчик, да? Правда, последнюю задачу на 50 строк элементарного кода делал он почему-то почти пол-года… Нет, это не образцово-показательный программист.
Сергей — он справляется с задачами быстро. Молодец. Его, пожалуй, и назначим победителем. Правда, получается у него это только при работе в одиночку. А в команде Серёжа наш мямлит, не может ни на вопрос ответить, ни свой задать. Не получается у него работать в больших проектах — а где же нынче маленький-то взять? Вычеркиваем из нашего списка и Сергея.
Но вот Маша — просто рождена для общения. Поговорит с кем угодно, когда угодно, всё обсудит , всех достанет. Молодец Маша! Правда, if от for не отличает. Хороша Маша, но не программистка она наша.
Антон прекрасно владеет кучей языков программирования, но усложняет горой паттернов самый элементарный код, делая его поддержку невероятно сложной.
Славик пишет исключительно простой и понятный код, избегая всего нового и навороченного. И в итоге не использует ничего из достижений программной индустрии последнего десятилетия.
Евгений наоборот порывается выбросить 90% существующего решения и за каких-то смешных пару лет переписать всё на Haskell/Lisp/Prolog.
Или вот, например… Что? Больше людей в нашей команде нет? Закончились?
А кто же у нас в итоге хороший программист?
Ни один критерий (или даже их совокупность) не может быть гарантией того, что человек будет работать нормально. На всяких там собеседованиях спрашивают чем один паттерн отличается от другого и почему множественное наследование — это плохо. Смешно, в самом деле. Хороший теоретик может быть плохим практиком, опытный программист — лентяем, обладатель кучи сертификатов — зубрилой без понимания сути вещей. Плюс специалист вообще любого уровня крутости может страдать манией величия, алкоголизмом, меланхолией и прочими малоприятными вещами.
Ближайшее, к чему я пришел, что мне кажется самым хорошим приближением к термину «хороший программист» — это ответ самого человека на вопросы: «Мне это нужно или нет? Для меня это важно или нет?».
Да или нет? Третьего не дано. Если человеку действительно важно и нужно, то, что он делает — всё остальное по-большому счету можно игнорировать. И не важно даже для чего и почему ему это нужно. Ради денег, славы, знаний, карьеры, покорения мира — всё-равно.
Если бы Васе был действительно важен его проект — он был бы не только хорошо одет и приветлив, но и делал бы что-то реальное. Если бы Петя считал свою работу нужной — он делал бы то, что приближает её к успеху, а не что взбредёт в голову. Если бы Коле было не пофигу — он нашел бы способы научиться работать с приемлемой скоростью. Сергей мог бы предложить какой-то удобный ему способ коммуникаций, Маша — выучить хотя бы основы программирования, Антон — перестать городить чехарду на ровном месте, а Славик с Евгением — вернуться в реальность и начать, наконец, делать что-то нужное правильными инструментами.
Человек, которому не по-барабану итог своей работы, всегда найдёт в себе силы измениться, выучить что-то новое, добить задачу до приемлемого состояния, побороть лень, выслушать и понять коллег, найти компромисс и т.д. Он менее подвержен хандре или скуке. Недостаток опыта, знаний или ресурсов всегда можно как-то восполнить, это решаемые задачи. Получить хороший результат от человека, которому наплевать на этот результат, нельзя будет никогда.
Посмотрите на себя, на своих коллег, спросите их или себя что-нибудь по работе (или представьте, что спросили). Как часто вы получите ответ «да мне вообще-то всё-равно», «подождём, как-то оно будет», «это не важно», «это не моя задача», «и так как-то работает», «я не знаю почему это сделано так». Следует ли за этими ответами продолжение в духе «но я разберусь и отвечу детальнее», «но я думаю что правильно будет сделать так», «я уточню», «но надо подумать как сделать лучше», «но мне бы хотелось изменить это вот-так», «я думал об этом и считаю, что …»?
Именно наличие/отсутствие таких ответов, мне кажется, и отделяет хорошего программиста от плохого. Именно это — то, что нужно понять в себе и коллегах в первую очередь. Именно это понимание нужности и важности своего труда нужно развивать всеми силами (пусть даже ценой смены проекта/работы/сферы деятельности). Всё остальное — не важно.
Автор: tangro