Разбираясь в том что отличает просто программиста от хорошего программиста, мы вспомнили о старой, но интересной статье опубликованной еще в 2011 году, но не потерявшей своей актуальности. Вольный перевод этой статьи мы и представляем вашему вниманию.
Помню, как будто это было вчера. Это был 2000 год, доктор Паргас стоял перед нашим курсом и рассказывал о структурах данных, пока на стену перед нами проецировалась SSH-сессия. Кто-то задал вопрос, и он ответил что-то вроде: «Ну, если вы хотите стать настоящим специалистом, вам стоит начать использовать vi».
Думаю, он улыбался, когда говорил это, и в ретроспективе несколько лукавил, но будучи молодым и восприимчивым, каким я был тогда, я вернулся в общежитие и сразу же взялся за изучение vi. Это был грубый ход, но как только я начал работать с vi, я нашел кучу вещей, которые можно было делать быстрее.
Перенесемся вперед на шесть лет, когда я был очарован TextMate. Я занимался разработкой на Java, и одновременно изучал Rails и работал над проектами на Rails в свободное время. У меня было ощущение, что каждая статья и каждый скринкаст показывал дзен редактирования текста в TextMate. Тот факт, что я был вынужден работать в Eclipse каждый день, приводил меня в ярость. Так что я купил Мак и через десять минут после включения купил TextMate.
Могу честно сказать, что не смена текстового редактора сделала меня как программиста лучше.
Фото espensorvik
Хорошие инструменты не делают вас намного лучше. Инструменты важны. Они замечательны, правда. Но Тайгер Вудс побьет нас всех с набором дешевых клюшек, Месси переиграет каждого из нас даже без обуви, а Рафаэль Надаль скорее всего обыграет любого из нас на теннисном корте с классической ракеткой из 60-х. Черт, да он обыграет меня с веслом вместо ракетки! Умения, знания и опыт, которые вы приобрели — вот важнейшая часть уравнения.
Итак, инструменты не делают программиста. Тогда что делает? Думаю, это зависит от того, над чем вы работаете, с кем вы работаете, но есть и общие качества у людей, которые успешно разрабатывают ПО. Я не уверен, можете ли вы развить в себе эти качества, или они должны быть врожденными, но я точно знаю, что был бы лучше, если бы работал над этими качествами вместо того, чтобы выбирать текстовый редактор.
Для людей
Лучшие программисты, которых я знал, всегда ставили людей на первое место. Они понимали, что ПО, которое они пишут — для людей, даже если это внутренности сложной системы или протокол, который будут использовать только другие программисты. Они пишут документацию, потому что она важна. Они помогают другим использовать их код. Они готовы поработать побольше и разобраться со сложностями, чтобы помочь людям, использующим их ПО, принять верное решение.
Аппетит к знаниям
Удивительные программисты до смешного жаждут знаний. Они всегда рассказывают вам что-нибудь новое или интересное. Они много читают, как в сети, так и вне ее, и любят пробовать новые вещи и учиться на собственном опыте. Они никогда не боятся пробовать новые языки или новые платформы.
Умение разобраться в проблеме
С опытом написания ПО вы начинаете видеть проблемы, похожие на те, что вы уже видели. Ценный навык — уметь видеть схожесть проблемы и использовать старое решение для новой проблемы, каждый раз улучшая его.
Однако это не значит, что вы можете слепо использовать старое решение просто потому что оно сработало один раз. Вот где нужно использовать умение разбираться в проблеме. Смотрите внимательно, чтобы понять, где можно применять старый подход, а где нет.
Немного безумия
Мой брат пошел на курс по Python, и когда я спросил, как ему это понравилось, он сказал мне, что программистом может быть только безумный, и это одна из скучнейших вещей, которыми ему приходилось заниматься. В некотором смысле он был прав. Я общаюсь с компьютерами гораздо больше, чем с людьми.
Мне доставляет удовольствие собирать строчки кода в рабочую программу. Не каждый человек будет в восторге от такого занятия, но лучшие программисты, которых я знаю, любят создавать программы.
Настойчивость
Разработка программ — процесс более медленный, чем хотелось бы. Он занимает время. Нужно быть достаточно терпеливым, чтобы механически писать код. Иногда мы, как разработчики, пишем действительно интересный код, но иногда мы вынуждены писать много кода, который писали уже сто раз до этого. Я думаю, что лучшие разработчики продолжают работать, потому что они видят общую картину того, над чем работают, и им нравится сам процесс построения программы часть за частью.
Вот черты, которые я считаю важными для действительно хороших программистов. А что думаете вы насчет того, что важно? Рассказывайте.
Комментарии (25)
malinichev
13.05.2016 18:28+2Согласен! Настоящий программист должен учить всё новое, но и старое не забывать!
Scf
13.05.2016 19:35+1Первая картинка хорошая — наконец-то внятное объяснение, что такое "программрировать на HTML".
А вообще перечисленные качества — работать для людей, аппетит к знаниям, умение разобраться в проблеме, немного безумия и настойчивость — это 100% надежный рецепт успеха в любой сфере. Так может если есть желание к 40 бросить всё и подасться в высооплачиваемые программисты, начать не с изучения HTML, а с развития этих качеств?
Avaja
13.05.2016 21:13Согласен, нужен интерес, сам в жизни встречал людей, который ради престижа и денег пошли, но интереса нет вообще.
kloppspb
13.05.2016 22:07+3>каждая статья и каждый скринкаст
ЩИТО?
Первые программы для HP-шного биохимического анализатора мы писали, помнится, на на бумажных листках, с обратной стороны. Карандашом, вручную. При полном отсутствии интернета как явления. Сеансы UUCP были расписаны на недели вперёд, а уж доступ к единственной не-XP (аж 386 с сишной IDE!!!111) — поминутно.
Вот тогда и нарабатывался навык «сначала думай, потом по кнопкам лупась». Ну и прочее, типа «прогоняй программу сначала в голове, пооператорно».stardust_kid
13.05.2016 23:57-2Вы знаете, программы написанные сейчас эффективнее и применяются намного шире, чем в прошлом. Я не отрицаю заслуг прошлого поколения (хотя тут надо смотреть), но нынешний сферический программист в вакууме пишет код лучше чем в 70-80х. И не только благодаря более мощному железу и новым языкам, но и благодаря смене парадигмы восприятия. А из написанного вами гордиться особо нечем. Это называется, извините, лаптем щи хлебать.
kloppspb
14.05.2016 00:02+2>нынешний сферический программист в вакууме пишет код лучше чем в 70-80х
Категорически не согласен. Достаточно посмотреть на уровень вопросов того же SO. Современный «сферический программист» не знает ничего о железе, для которого пишет. Не знает базовых алгоритмов. Не знает ничего про устройство компиляторов (а вопрос про ++i + ++i вообще ему не знаком). Не имеет элементарных навыков отладки собственного кода.
>А из написанного вами гордиться особо нечем. Это называется, извините, лаптем щи хлебать.
Эх, молодёжь, молодёжь… Даже выводы делает не те что нужно :-)stardust_kid
14.05.2016 00:07-4Я не буду пытаться вас переубедить. Просто запощу боянистую картинку. А вы сами решайте, насколько она релевантна.
Картинкаgricom
14.05.2016 12:46Я, кстати, склонен считать, что это не старческое брюзжание, а просто раз в 3-4 поколения молодежь действительно вырастает никудышная, теряет большинство достижений своих предшественников, которые создали им благоприятную среду, наслаждается жизнью, плюет на сложившиеся порядки, а следующие поколения, попавшие в более тяжелые условия, двигают общество вперед.
Alexeyslav
15.05.2016 16:57+1Выборка на SO нерепрезентативна. Те кто знают ответы на эти вопросы просто их не задают.
Вы бы привели процентное соотношение задавших глупый вопрос и сколько участников всего. А потом узнали бы сколько программистов отсутствует вообще на SO…
Всё это ничтожные капли. И долго такие кадры как правило не работают, или до конца жизни работают за копейки на самом нижнем уровне.
Carduelis
14.05.2016 00:44+6Я не спорю, что раньше трудно было писать программы. Отсутствие интернета. Чуть раньше — доступа к компьютеру. Еще раньше — не было «бесплатной проверки» кода (я про перфокарты — зафакапился, начинаешь заклеивать дырки, а то и новую берешь — отец рассказывал).
Но почему это стоит преподносить, как достоинство? Типа, я вот, в свои года настрадался, вот я молодец. А нынче — все в айфоны тыкают, да на javascript микроконтроллеры программируют.
И тот факт, что раньше нужно было прогонять программу в голове обусловлен лишь чем? Правильно, либо нехваткой времени, либо денег. Прямая аналогия — раньше нужно было писать пером по бересте (поди в лес, надери коры березок), а сейчас нажал backspace + автокомплит + спеллчекер. И что? Получается, что вот тогда были писатели, а этот, ваш Пушкин… пф… даже в лес за берестой не ходил…
Смешно? И stardust_kid тоже смешно.
Отсюда, вместо того, чтобы тратить время на проверку программы в голове из-за нехватки времени и денег на расходный материал (интернет/ время за компьютером/ перфокарты) программисты пишут развивают все новые и новые инструменты, языки и фреймворки, у них больше времени на написание бизнес-логики.
Ну а бездари были и будут всегда.solver
14.05.2016 13:21+4Надеюсь это у вас обычный тролинг)
Вы же понимаете, что дело не в перфокартах, бересте и страданиях?
kloppspb говорит о том, что раньше «сначала думали, потом кнопки давили». Т.е. у программиста не было под рукой справочника готовых решений, например в виде SO. Поэтому программисты просто вынуждены были продумывать свой код. Да, тогда не было развитых средств отладки, как сейчас. Поэтому отлаживали в голове. Ну суть высказывания не в этом.
А она в том, что нынешнее поколение программистов, это поколение готовых решений. Т.е. вместо того, чтобы почитать доки по используемому фреймворку/компилятору/библиотеке/что-то-еще, тупо гуглят готовый ответ. Они не могут объяснить как работает код, который они пишут. Часто даже простейшие правки в скопированный код внести не могут, чтобы он у них заработал. И это неизменно сказывается на качестве решений выдаваемых такими программистами. Это просто бич современной разработки. Поверхностное отношение ко всему. А в разработке это очень критично.
P.S. Даже картинка stardust_kid является хорошей иллюстрацией к этому. Он абсолютно не разобрался о чем речь (мы же тут не о культурном воспитании молодежи говорим, а о технических знаниях и навыках), нашел что-то похожее поиском в гугле и выдал за решение. И, что характерно, эта картинка при первом взгляде вроде как и в тему. Поэтому толпа, которая тоже не хочет вникать в суть, воспринимает ее как релевантную. И поэтому его камент будет заплюсован.
Зачем разбираться, ведь можно высмеять человека, а толпа это любит и точно подхватит… так ведь?4ertovo4ka
14.05.2016 17:26Профессионализм и желание развиваться и разбираться — критично в любой области жизни.
А на счет картинки — вполне релевантна к комментарию, к которому ее присоединили — стенания о том, что раньше трава была зеленее, небо синее, солнце ярче, а специалисты умнее и профессиональнее, молодежь устремленнее — неистребимы ни в одном веке.solver
14.05.2016 18:22Вы сейчас хорошо проиллюстрировали другой аспект того о чем я говорил)
А именно — штампы.
Стоит только начать словами «А вот раньше» и у людей почему-то выключается мозг и включается штамп «нытье по старым временам». Хотя никто не ныл по старым временам и не укорял молодежь за непослушание.
Просто человек описал, что в силу различных причин, например лимиты на машинное время, программисты вынуждены были хорошо думать прежде чем делать. Плюс отсутствие гугла и т.д. и т.п.
Это обычная констатация фактов. Где тут нытье про невоспитанную молодежь?
Но ведь так тяжело немного подумать над словами, гораздо проще включить штамп и не заморачиваться…4ertovo4ka
15.05.2016 00:02:) почему-то у вас не иметь возможностей = хорошо думать.
А отсутствие возможности экспериментировать в силу ограниченного ресурса будь то время или деньги совсем не делает человека хорошо думающим. По мне так наоборот. Один раз надумали и дальше поехали по накатанному пути. Потому, что так безопаснее, не потребует отсутствующих ресурсов.
И прогресс остановился.
Так, что уж не знаю у кого из нас штампы в голове засели и кто ими мыслит.solver
15.05.2016 20:01>почему-то у вас не иметь возможностей = хорошо думать.
Это не у меня, а у вас) Я этого не говорил.
>По мне так наоборот. Один раз надумали и дальше поехали по накатанному пути. Потому, что так безопаснее, не потребует отсутствующих ресурсов.
И прогресс остановился.
Даже не знаю, что вам на это сказать…
И при чем тут штампы?
creker
14.05.2016 22:03Какая ирония. Вы точно так же не разобрались в сути вещей и пошли делать далеко идущие выводы. Нынешнее поколение ничем не отличается от того, в котором писали все на листочке. Все эти программисты никуда не исчезли, они остались, все так же пишут наверное даже куда более качественный код в особо требовательных областях. Но сама индустрия стала несоизмеримо больше, чем тогда, потому что в нее пришли программисты, которые эту индустрию и подняли, которые делают быстро и с минимальными вложениями продукт, который потом зарабатывает миллионы. И им для этого не нужно знать все на свете. Но вы зачем-то этими программистами измеряете целое поколение.
А та картинка к тому посту вполне в теме, потому что человек именно так понял это нытье о сферических программистах — непонимание поколений. И оно действительно наблюдается. Поколение старое почему-то все еще считает, что каждый программист обязан знать все на свете, чтобы быть достойным похвалы и титула «хороший программист». Что для разработки обязательно вдумчиво относиться ко всему и вся. Нет нет и нет. Наша индустрия выросла совсем не из такого подхода к разработке и никуда бы не уехала, если бы все так и сидели и думали по пол дня, прежде чем написать что-то. Предметная область стала намного шире, поэтому в подавляющем большинстве случаев это не требуется. Как написано в статье, программист должен думать о людях. И людям плевать, сколько и как тщательно он продумывал свой код. Людям нужно приложение и сейчас. Когда нужно будет разобраться, тогда сферический программист разберется. А до тех пор это только во вред.solver
15.05.2016 00:16+2Смешались в кучу кони, люди…
Вы походу из тех кто считает, что разбираться ни в чем не надо. За это не платят.
А платят за приложение. И не важно как оно работает.
Ну что же, это тоже вариант. Это ваш выбор. Выбор большинства.
Только потом не удивляйтесь, что коробка в вашей машине, на трассе, на скорости 120 вдруг врубит заднюю передачу. Или самолет на котором вы будете лететь, промахнется мимо посадочной полосы. Или аппарат в больнице неправильную дозу лекарства введет или наоборот не введет в нужный момент.
Ведь «людям плевать, сколько и как тщательно программист продумывал свой код», они платят за приложение…
P.S.
> Когда нужно будет разобраться, тогда сферический программист разберется. А до тех пор это только во вред.
Человек умеет то, что тренирует. Если такой программист много лет тренирует копипасту со SO, то…
Нет, не разберется, просто не сможет. Не учился он разбираться. Если только на SO не будет готового обсуждения его темы.
spmbt
13.05.2016 22:31-11Что делает хорошим… Может, это?
Скрытый текстdom1n1k
14.05.2016 12:54По моему мнению, это умение и желание разбираться в предметной области. А просто программисты сейчас слишком зациклены за фреймворках и инструментах. А бизнес-логика происходит через пень колоду, приблизительно.
aezhko
«Мой брат пошел на курс по Python, и когда я спросил, как ему это понравилось, он сказал мне, что программистом может быть только безумный, и это одна из скучнейших вещей, которыми ему приходилось заниматься.»
Я часто скептически отношусь к затеям а-ля «научу сорокалетнего друга писать код, чтобы начал зарабатывать», так как мне кажется, что любовь и интерес к написанию кода (и не только) так или иначе проявляются уже в юношестве, а без этих качеств, имхо, программистом не вырасти.
andrew-tifon
Ну почему же, есть масса примеров когда города брались упорством. Да и к тому же, сорокалетние друзья просто могли не знать о том, что такое программирование и почему это дико интересно)
aezhko
Будет ли программист, который через силу и без интереса, «упорством» освоил профессию хорошим работником?
andrew-tifon
Ни кто же не говорит об отсутствии интереса. Скорее наоборот.