Что делает программиста хорошим программистом?

Автор оригинала: Treehouse
  • Перевод
На бесплатном курсе «Основы программирования» мы стараемся в максимально доступной форме дать новичкам информацию, которая помогла бы им оценить свой интерес к разработке и правильно выбрать направление для развития. Каждый из нас хочет достичь высот в выбранной профессии, и к нам приходят ребята, которые хотят стать не просто программистами, но хорошими / лучшими программистами.



Разбираясь в том что отличает просто программиста от хорошего программиста, мы вспомнили о старой, но интересной статье опубликованной еще в 2011 году, но не потерявшей своей актуальности. Вольный перевод этой статьи мы и представляем вашему вниманию.

Помню, как будто это было вчера. Это был 2000 год, доктор Паргас стоял перед нашим курсом и рассказывал о структурах данных, пока на стену перед нами проецировалась SSH-сессия. Кто-то задал вопрос, и он ответил что-то вроде: «Ну, если вы хотите стать настоящим специалистом, вам стоит начать использовать vi».
Думаю, он улыбался, когда говорил это, и в ретроспективе несколько лукавил, но будучи молодым и восприимчивым, каким я был тогда, я вернулся в общежитие и сразу же взялся за изучение vi. Это был грубый ход, но как только я начал работать с vi, я нашел кучу вещей, которые можно было делать быстрее.

Перенесемся вперед на шесть лет, когда я был очарован TextMate. Я занимался разработкой на Java, и одновременно изучал Rails и работал над проектами на Rails в свободное время. У меня было ощущение, что каждая статья и каждый скринкаст показывал дзен редактирования текста в TextMate. Тот факт, что я был вынужден работать в Eclipse каждый день, приводил меня в ярость. Так что я купил Мак и через десять минут после включения купил TextMate.

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


Фото espensorvik

Хорошие инструменты не делают вас намного лучше. Инструменты важны. Они замечательны, правда. Но Тайгер Вудс побьет нас всех с набором дешевых клюшек, Месси переиграет каждого из нас даже без обуви, а Рафаэль Надаль скорее всего обыграет любого из нас на теннисном корте с классической ракеткой из 60-х. Черт, да он обыграет меня с веслом вместо ракетки! Умения, знания и опыт, которые вы приобрели — вот важнейшая часть уравнения.

Итак, инструменты не делают программиста. Тогда что делает? Думаю, это зависит от того, над чем вы работаете, с кем вы работаете, но есть и общие качества у людей, которые успешно разрабатывают ПО. Я не уверен, можете ли вы развить в себе эти качества, или они должны быть врожденными, но я точно знаю, что был бы лучше, если бы работал над этими качествами вместо того, чтобы выбирать текстовый редактор.

Для людей



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

Аппетит к знаниям



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

Умение разобраться в проблеме



С опытом написания ПО вы начинаете видеть проблемы, похожие на те, что вы уже видели. Ценный навык — уметь видеть схожесть проблемы и использовать старое решение для новой проблемы, каждый раз улучшая его.

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

Немного безумия



Мой брат пошел на курс по Python, и когда я спросил, как ему это понравилось, он сказал мне, что программистом может быть только безумный, и это одна из скучнейших вещей, которыми ему приходилось заниматься. В некотором смысле он был прав. Я общаюсь с компьютерами гораздо больше, чем с людьми.

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

Настойчивость



Разработка программ — процесс более медленный, чем хотелось бы. Он занимает время. Нужно быть достаточно терпеливым, чтобы механически писать код. Иногда мы, как разработчики, пишем действительно интересный код, но иногда мы вынуждены писать много кода, который писали уже сто раз до этого. Я думаю, что лучшие разработчики продолжают работать, потому что они видят общую картину того, над чем работают, и им нравится сам процесс построения программы часть за частью.

Вот черты, которые я считаю важными для действительно хороших программистов. А что думаете вы насчет того, что важно? Рассказывайте.
GeekBrains
ОБРАЗОВАТЕЛЬНАЯ ПЛАТФОРМА

Комментарии 35

    +10
    «Мой брат пошел на курс по Python, и когда я спросил, как ему это понравилось, он сказал мне, что программистом может быть только безумный, и это одна из скучнейших вещей, которыми ему приходилось заниматься.»

    Я часто скептически отношусь к затеям а-ля «научу сорокалетнего друга писать код, чтобы начал зарабатывать», так как мне кажется, что любовь и интерес к написанию кода (и не только) так или иначе проявляются уже в юношестве, а без этих качеств, имхо, программистом не вырасти.
      +2
      Ну почему же, есть масса примеров когда города брались упорством. Да и к тому же, сорокалетние друзья просто могли не знать о том, что такое программирование и почему это дико интересно)
        +5
        Будет ли программист, который через силу и без интереса, «упорством» освоил профессию хорошим работником?
          +1
          Ни кто же не говорит об отсутствии интереса. Скорее наоборот.
        0
        Мне почти сорок, и я только начал изучать программирование. Этим очень интересно заниматься, но, конечно, посещают мысли о том, что, может быть, поздновато для меня. Не опускаю руки, читаю книги, смотрю вебинары, прохожу курсы, завел блог, в котором описываю свой опыт на этом поприще. Посмотрим, что из этого выйдет и стану ли я «сорокалетним программистом».
        +2
        Согласен! Настоящий программист должен учить всё новое, но и старое не забывать!
          +35

          Ну какого хрена этот crap делает в блоге "Программирование"? На ГТ/ММ!

            +1

            Первая картинка хорошая — наконец-то внятное объяснение, что такое "программрировать на HTML".


            А вообще перечисленные качества — работать для людей, аппетит к знаниям, умение разобраться в проблеме, немного безумия и настойчивость — это 100% надежный рецепт успеха в любой сфере. Так может если есть желание к 40 бросить всё и подасться в высооплачиваемые программисты, начать не с изучения HTML, а с развития этих качеств?

              0
              Согласен, нужен интерес, сам в жизни встречал людей, который ради престижа и денег пошли, но интереса нет вообще.
                +3
                >каждая статья и каждый скринкаст

                ЩИТО?

                Первые программы для HP-шного биохимического анализатора мы писали, помнится, на на бумажных листках, с обратной стороны. Карандашом, вручную. При полном отсутствии интернета как явления. Сеансы UUCP были расписаны на недели вперёд, а уж доступ к единственной не-XP (аж 386 с сишной IDE!!!111) — поминутно.

                Вот тогда и нарабатывался навык «сначала думай, потом по кнопкам лупась». Ну и прочее, типа «прогоняй программу сначала в голове, пооператорно».
                  –2
                  Вы знаете, программы написанные сейчас эффективнее и применяются намного шире, чем в прошлом. Я не отрицаю заслуг прошлого поколения (хотя тут надо смотреть), но нынешний сферический программист в вакууме пишет код лучше чем в 70-80х. И не только благодаря более мощному железу и новым языкам, но и благодаря смене парадигмы восприятия. А из написанного вами гордиться особо нечем. Это называется, извините, лаптем щи хлебать.
                    +2
                    >нынешний сферический программист в вакууме пишет код лучше чем в 70-80х

                    Категорически не согласен. Достаточно посмотреть на уровень вопросов того же SO. Современный «сферический программист» не знает ничего о железе, для которого пишет. Не знает базовых алгоритмов. Не знает ничего про устройство компиляторов (а вопрос про ++i + ++i вообще ему не знаком). Не имеет элементарных навыков отладки собственного кода.

                    >А из написанного вами гордиться особо нечем. Это называется, извините, лаптем щи хлебать.

                    Эх, молодёжь, молодёжь… Даже выводы делает не те что нужно :-)
                      –4
                      Я не буду пытаться вас переубедить. Просто запощу боянистую картинку. А вы сами решайте, насколько она релевантна.
                      Картинка
                      image
                        +6
                        Вяло пожимая плечами: картинка просто не в тему, релевантность ноль.
                          0
                          А тем не менее где сейчас те самые Вавилон, Египет и Греция? Ведь действительно в упадке по сравнению с былым величием))
                          0
                          Я, кстати, склонен считать, что это не старческое брюзжание, а просто раз в 3-4 поколения молодежь действительно вырастает никудышная, теряет большинство достижений своих предшественников, которые создали им благоприятную среду, наслаждается жизнью, плюет на сложившиеся порядки, а следующие поколения, попавшие в более тяжелые условия, двигают общество вперед.
                            +1
                            Выборка на SO нерепрезентативна. Те кто знают ответы на эти вопросы просто их не задают.
                            Вы бы привели процентное соотношение задавших глупый вопрос и сколько участников всего. А потом узнали бы сколько программистов отсутствует вообще на SO…
                            Всё это ничтожные капли. И долго такие кадры как правило не работают, или до конца жизни работают за копейки на самом нижнем уровне.
                              0
                              а вопрос про ++i + ++i вообще ему не знаком
                              А должен быть?
                                0

                                сеньорному — да. От джава программиста ожидается правильный ответ, а от С++ — объяснение, что такое UB ^_^

                            +6
                            Я не спорю, что раньше трудно было писать программы. Отсутствие интернета. Чуть раньше — доступа к компьютеру. Еще раньше — не было «бесплатной проверки» кода (я про перфокарты — зафакапился, начинаешь заклеивать дырки, а то и новую берешь — отец рассказывал).
                            Но почему это стоит преподносить, как достоинство? Типа, я вот, в свои года настрадался, вот я молодец. А нынче — все в айфоны тыкают, да на javascript микроконтроллеры программируют.
                            И тот факт, что раньше нужно было прогонять программу в голове обусловлен лишь чем? Правильно, либо нехваткой времени, либо денег. Прямая аналогия — раньше нужно было писать пером по бересте (поди в лес, надери коры березок), а сейчас нажал backspace + автокомплит + спеллчекер. И что? Получается, что вот тогда были писатели, а этот, ваш Пушкин… пф… даже в лес за берестой не ходил…

                            Смешно? И stardust_kid тоже смешно.

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

                            Ну а бездари были и будут всегда.
                              +4
                              Надеюсь это у вас обычный тролинг)
                              Вы же понимаете, что дело не в перфокартах, бересте и страданиях?
                              kloppspb говорит о том, что раньше «сначала думали, потом кнопки давили». Т.е. у программиста не было под рукой справочника готовых решений, например в виде SO. Поэтому программисты просто вынуждены были продумывать свой код. Да, тогда не было развитых средств отладки, как сейчас. Поэтому отлаживали в голове. Ну суть высказывания не в этом.
                              А она в том, что нынешнее поколение программистов, это поколение готовых решений. Т.е. вместо того, чтобы почитать доки по используемому фреймворку/компилятору/библиотеке/что-то-еще, тупо гуглят готовый ответ. Они не могут объяснить как работает код, который они пишут. Часто даже простейшие правки в скопированный код внести не могут, чтобы он у них заработал. И это неизменно сказывается на качестве решений выдаваемых такими программистами. Это просто бич современной разработки. Поверхностное отношение ко всему. А в разработке это очень критично.

                              P.S. Даже картинка stardust_kid является хорошей иллюстрацией к этому. Он абсолютно не разобрался о чем речь (мы же тут не о культурном воспитании молодежи говорим, а о технических знаниях и навыках), нашел что-то похожее поиском в гугле и выдал за решение. И, что характерно, эта картинка при первом взгляде вроде как и в тему. Поэтому толпа, которая тоже не хочет вникать в суть, воспринимает ее как релевантную. И поэтому его камент будет заплюсован.
                              Зачем разбираться, ведь можно высмеять человека, а толпа это любит и точно подхватит… так ведь?
                                0
                                Профессионализм и желание развиваться и разбираться — критично в любой области жизни.
                                А на счет картинки — вполне релевантна к комментарию, к которому ее присоединили — стенания о том, что раньше трава была зеленее, небо синее, солнце ярче, а специалисты умнее и профессиональнее, молодежь устремленнее — неистребимы ни в одном веке.
                                  0
                                  Вы сейчас хорошо проиллюстрировали другой аспект того о чем я говорил)
                                  А именно — штампы.
                                  Стоит только начать словами «А вот раньше» и у людей почему-то выключается мозг и включается штамп «нытье по старым временам». Хотя никто не ныл по старым временам и не укорял молодежь за непослушание.
                                  Просто человек описал, что в силу различных причин, например лимиты на машинное время, программисты вынуждены были хорошо думать прежде чем делать. Плюс отсутствие гугла и т.д. и т.п.
                                  Это обычная констатация фактов. Где тут нытье про невоспитанную молодежь?
                                  Но ведь так тяжело немного подумать над словами, гораздо проще включить штамп и не заморачиваться…
                                    0
                                    :) почему-то у вас не иметь возможностей = хорошо думать.
                                    А отсутствие возможности экспериментировать в силу ограниченного ресурса будь то время или деньги совсем не делает человека хорошо думающим. По мне так наоборот. Один раз надумали и дальше поехали по накатанному пути. Потому, что так безопаснее, не потребует отсутствующих ресурсов.
                                    И прогресс остановился.
                                    Так, что уж не знаю у кого из нас штампы в голове засели и кто ими мыслит.
                                      0
                                      >почему-то у вас не иметь возможностей = хорошо думать.

                                      Это не у меня, а у вас) Я этого не говорил.

                                      >По мне так наоборот. Один раз надумали и дальше поехали по накатанному пути. Потому, что так безопаснее, не потребует отсутствующих ресурсов.
                                      И прогресс остановился.

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

                                  А та картинка к тому посту вполне в теме, потому что человек именно так понял это нытье о сферических программистах — непонимание поколений. И оно действительно наблюдается. Поколение старое почему-то все еще считает, что каждый программист обязан знать все на свете, чтобы быть достойным похвалы и титула «хороший программист». Что для разработки обязательно вдумчиво относиться ко всему и вся. Нет нет и нет. Наша индустрия выросла совсем не из такого подхода к разработке и никуда бы не уехала, если бы все так и сидели и думали по пол дня, прежде чем написать что-то. Предметная область стала намного шире, поэтому в подавляющем большинстве случаев это не требуется. Как написано в статье, программист должен думать о людях. И людям плевать, сколько и как тщательно он продумывал свой код. Людям нужно приложение и сейчас. Когда нужно будет разобраться, тогда сферический программист разберется. А до тех пор это только во вред.
                                    +2
                                    Смешались в кучу кони, люди…
                                    Вы походу из тех кто считает, что разбираться ни в чем не надо. За это не платят.
                                    А платят за приложение. И не важно как оно работает.
                                    Ну что же, это тоже вариант. Это ваш выбор. Выбор большинства.
                                    Только потом не удивляйтесь, что коробка в вашей машине, на трассе, на скорости 120 вдруг врубит заднюю передачу. Или самолет на котором вы будете лететь, промахнется мимо посадочной полосы. Или аппарат в больнице неправильную дозу лекарства введет или наоборот не введет в нужный момент.
                                    Ведь «людям плевать, сколько и как тщательно программист продумывал свой код», они платят за приложение…

                                    P.S.
                                    > Когда нужно будет разобраться, тогда сферический программист разберется. А до тех пор это только во вред.
                                    Человек умеет то, что тренирует. Если такой программист много лет тренирует копипасту со SO, то…
                                    Нет, не разберется, просто не сможет. Не учился он разбираться. Если только на SO не будет готового обсуждения его темы.
                                0
                                не-XT. /fix
                                  0
                                  Ага, спасибо.
                                  0
                                  И было это в конце 80-х — начале 90-х. И объем программ составлял десятки и сотни строк. Вполне можно было писать на бумажных листках и прогонять программу целиком в голове.
                                  Сегодняшний реальный проект это сотни классов объединенные в десятки пакетов, в которых содержатся десятки или даже сотни тысяч строк. Насколько реально такую программу прогонять в голове? Если только какие-то малые ее части…
                                    0
                                    Глупость. Не путайте теплое с мягким.
                                    Я работаю с IDE, я сразу пишу там код, работая с комментариями оформляю его и в итоге прихожу к хорошему результату. Зачем держать в голове то, что можно схематично набросать, а потом дополнить до рабочей версии?
                                    Ваши претензии к тем, кто не «лупасит по кнопкам, а думает потом», а к обычным трутням по знакомству/блату, которые в принципе не думают…
                                    –11
                                    Что делает хорошим… Может, это?
                                    Скрытый текст
                                      0
                                      По моему мнению, это умение и желание разбираться в предметной области. А просто программисты сейчас слишком зациклены за фреймворках и инструментах. А бизнес-логика происходит через пень колоду, приблизительно.
                                        –1
                                        В PHP (и в программировании) я 0, но горю желанием изучать. Прошу прощения, если влез не в ту тему, но требуется ответ специалиста. Код файла dex.php:

                                        Редирект
                                        Ввести число 1: Ввести число 2: Сумма двух чисел:

                                        Файл scrip.php:

                                        Программа одинаково успешно работает при команде echo $_GET[x]; // или echo $x = $_GET[x]; или echo $x. Это нормально для PHP, или у меня проблемы с Денвером?
                                          0
                                          Сейчас объем изучаемого материала много больше. И проблема не в ограничениях материала (отсутствие библиотеки или интернета), а в его огромном количестве. Так или иначе современное программирование требует больше исследований. Хотя то, что при этом фундаментальные знания все больше редеют — это, к сожалению, верно.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое