Я в некотором роде попал в программирование благодаря смеси хитростей и обмана, а затем продолжал бежать на полной скорости. До 26 лет у меня почти не было опыта написания кода, однако после получения степени магистра я неожиданно выбрал стартап, который никак не мог обеспечить обучение. Я плыл против течения под тройным давлением: ежедневных переживаний о том, что компания обанкротится, страха быть уволенным и холодных взглядов коллег. Через полтора года, когда я уходил, я уже был ведущим бэкенд-инженером продукта с 5 миллионами пользователей. Раньше я боялся компьютерных технологий и считал, что технические мастера непременно окружены светом Будды, печатают день и ночь без отдыха, создавая десятки тысяч строк кода ежедневно. Теперь, когда я увидел мир немного шире, оглядываясь на тот тревожный процесс, похожий на первую ночь, я не нахожу его вдохновляющим вовсе, а считаю его чем-то само собой разумеющимся. Идеальный программист ничем не отличается от идеального архитектора, идеального бухгалтера или идеального массажиста; все они по сути ремесленники. Я верю, что любой может стать идеальным программистом.

За последние три года я вращался в интернет-кругах. Я встречал некоторых программистов, работал с некоторыми, руководил некоторыми и проводил собеседования с некоторыми. У них разное образование — кто-то из Пекинского университета, кто-то из тренинг-центров, у кого-то степень PhD, кто-то бросил старшую школу; и регалии у них разные — кто-то из BAT, кто-то из обанкротившейся инвестиционной компании (и даже работал продавцом). Их стаж варьируется от 0 до 15 лет. Но, по-моему, программистов нужно делить всего на три категории: гениальные программисты, идеальные программисты и посредственные программисты. Что касается гениальных программистов, осмелюсь сказать, что я сталкивался только с тремя. Это судьба. Семь баллов определяются ещё тогда, когда ты сперматозоид: обладание выдающимся математическим талантом, спокойная и скрупулёзная логика и страсть к технологиям, которая находит удовольствие в том, чтобы всю ночь напролёт решать сложные задачи. Три балла идут от раннего, раннего, раннего старта — хотелось бы, чтобы, пока сверстники играют в грязи, ты начинал играть с компьютерами и преодолевал правило 10,000 часов ещё до окончания колледжа. После этого это уже игра жизни.
Гениальных программистов редко встречаешь, и ещё труднее удержать их в большом количестве. Те 90%, кого я вижу, всё ещё посредственные программисты. Экспансия эпохи IT сделала программистов такими же обычными, как типографы в эпоху Возрождения. Большинство людей, приходящих в эту сферу, делают это только ради большей чашки риса, более высокой оплаты и лучшего быта. Посредственные программисты пишут гнилой код, без стандартов и последовательности, цепляясь за языки старого мира, но при этом любят рассуждать о великой архитектуре и производительности. Их слова красивее их дел. И все без исключения верят, что у технологий нет будущего, а продукт, маркетинг и управление — более высококлассные ремёсла. Что же до 99% из них, они, само собой, обнаружат, что у них как раз есть талант в этих областях, но при этом гнушаются разбираться в таких мелочах, как то, почему упал процесс.
Но больше всего я люблю быть вместе с идеальными программистами. Хотел бы я есть и жить вместе с ними. Если бы позволили, я бы хотел, чтобы моя команда была заполнена их знамёнами. Идеальные программисты добросердечны (они никогда не бывают баловнями офисной политики; это группа наивных, светлых и радостных ремесленников), обладают наивным любопытством (в их глазах часто загорается «Ух ты, как это делается!»), всегда стремятся к совершенству (их любимая фраза — «Дай-ка я изучу это ещё немного») и готовы делиться (они активны на GitHub, в сообществах вопросов и ответов и рядом с вами, готовы тратить драгоценное время на помощь новичкам). Да, ими не нужно управлять. Просто дайте им общее направление, и они всегда вернутся с неожиданными результатами.
Идеального программиста и посредственного программиста разделяет всего одна стена. Разница между ними — всего шесть маленьких деталей, и именно в этих накопленных со временем маленьких деталях разрыв между людьми безвозвратно увеличивается. Интересно, что я обнаружил: эти шесть маленьких деталей все связаны с осознанностью. То есть программисты, как и все другие профессии новых отраслей, могут достичь идеального уровня, если у них есть осознанность плюс закалка временем. Идеальный программист обязательно также отличный специалист по решению проблем.
Первая маленькая деталь: Фокус на настоящем
Я видел слишком много программистов с неугомонным умом, поэтому вынужден сделать «фокус на настоящем» первым правилом. У них часто есть всякие маленькие мечты, например стать мелким фермером-чаеводом, мелким торговцем гусями, заниматься продуктом, продажами или инвестициями, но их «сдерживают» высокая зарплата программистов или отсутствие смелости сменить профессию. Из-за отсутствия сосредоточенности они не заботятся о том, чтобы хорошо делать свою работу, не заботятся об оттачивании своих навыков и не заботятся об изучении новых технологий. Надо признать, в этом мире есть великие специалисты по продукту (как Джобс), великие продавцы (как Эллисон) и великие инвесторы (как Петерффи), и все они без исключения в какой-то момент были программистами. Но слышали ли вы высказывание Баффета о Гейтсе? Если бы Билл Гейтс сменил профессию и начал продавать собак, он был бы крупнейшим торговцем собаками в мире. Я твердо верю, что за исключением нескольких гениев обычные смертные могут добиться успеха в нескольких областях, если сохраняют достаточную сосредоточенность. И даже если вы захотите продавать собак в следующем году, ваш опыт программиста всё ещё может воспитать в вас сильную логику, осторожность и терпение, которые являются немалыми конкурентными преимуществами в любой отрасли.
Вторая маленькая деталь: Способность мыслить и движущая сила
Я считаю, что обработка неожиданных событий, таких как баги, сбои, тюнинг и вторжения, может лучше отражать разрыв между посредственными и идеальными программистами, чем само программирование. Когда сталкиваешься с неизвестной проблемой, как локализовать суть проблемы в сложных условиях, как слой за слоем докопаться до первопричин, как устранить помехи и восстановить минимальный проверяемый сценарий, а также как завладеть ключевыми данными, чтобы проверить свои догадки и эксперименты, — это лучшие сценарии для демонстрации мыслительных способностей программиста. Да, при оценке стандарта идеального программиста мыслительные способности важнее опыта.
Иногда приятель забегает и спрашивает меня: «Отправленная задача зависла; что мне делать?» Я всегда чувствую, что он мог бы сделать лучше. Например, он мог бы проверить или протестировать другие задачи, чтобы исключить сам код; он мог бы проверить наличие исключений через Web UI (если у него нет аккаунта, он может попросить меня предоставить его); он мог бы просмотреть логи хоста или очистить кэши. Как минимум, он должен предоставить мне ID задачи и логи консоли. Идеальные программисты никогда не ждут, пока дела сдвинутся с места; они используют все возможные методы, чтобы сдвинуть дела с места.
Третий небольшой момент: никогда не говори «нет»
Помню, перед уходом из предыдущей компании я поговорил с начальником. Он сказал, что моя сильнейшая сторона в том, что я никогда не говорил ему, что что-то невозможно сделать. Позже я обнаружил, что во многих командах есть противостояние между технологиями и продуктом. Программисты часто используют «технически невозможно», чтобы блокировать требования продукта, а продакты часто используют «Почему Facebook может, а мы не можем?», чтобы подколоть программистов. Эти две фразы должны быть запретными словами. По сути, они не способствуют взаимной симпатии между программистами-обезьянами и продактами-собаками.
Фразу «технически невозможно» легко произнести, но многие ли люди, говоря её, на 100% уверены в этом в глубине души? Если вы не уверены, почему бы не вернуться и не загуглить, прежде чем отвечать? Я изначально думал, что программисты полны воображения; именно благодаря воображению родилось столько программных и интернет-продуктов, которые меняют нашу жизнь. Увидев больше, я понял, что большинство программистов стали консервативными в борьбе с багами и не хотят рисковать, а многие команды также не готовы терпеть неудачи. Так «сказать нет» становится привычной формой сопротивления. Вы всё ещё помните, почему Цзэн Гофань расформировал Хунаньскую армию? Он сказал, что в этой армии «глубоко накопился вечерний дух», и она больше не могла сражаться. Чтобы быть идеальным программистом, нельзя давать себе возможности взрастить этот вечерний дух. Если вы сталкиваетесь с необоснованными требованиями, можете изложить временные затраты и показать обходной план спасения. Просто резко сказать «Нет» нежелательно.
Четвёртый небольшой пункт: инвестируйте в будущее
Программист — очень жестокая профессия. Языки, фреймворки и паттерны, которые вы изучаете и используете, могут через несколько лет стать вчерашним днём; другая группа программистов, над которой вы сейчас насмехаетесь, может вскоре обернуться и посмеяться над вами. Поэтому идеальные программисты, помимо хорошего выполнения своей работы, должны тратить время на инвестиции в будущее. Что такое «инвестиция»? Инвестиция означает, что время, вложенное сейчас, вернётся к вам в будущем в виде большего количества времени или денег (посмотрите на нынешние зарплаты программистов, которые выучили iOS несколько лет назад!). Возьмём мою собственную область — интеллектуальный анализ данных — в качестве примера. Примерно в 2008 году начал набирать обороты Hadoop, и концепция «больших данных» стала горячей; Hadoop-инженеров было трудно найти даже за целое состояние, и интернет-компании перевели свои бизнес-процессы по статистике данных, анализу данных и интеллектуальному анализу данных на распределённые платформы. В последние годы, пока Hadoop продолжает развиваться, Spark внезапно появился как новая сила, побив рекорд Hadoop по сортировке. Его преимущество в производительности за счёт хранения промежуточных данных в памяти и богатые структуры данных заставляют людей влюбляться в него бесконечно, а различные странные мелкие баги и крутая кривая обучения вызывают желание отступить. Поэтому любому человеку с ясными глазами понятно, что Spark — это тренд будущего (память будет становиться всё дешевле и дешевле). При условии, что основной бизнес остаётся на Hadoop, вы можете соответствующим образом перевести некоторые небольшие модули на Spark, одновременно следя за развитием сообщества Spark. Вскоре выгода в производительности, полученная от Spark, окупит время на обучение, вложенное ранее.
Пятый небольшой пункт: грамотно используйте инструменты
Грамотное использование инструментов можно разделить на четыре уровня:
- Поисковая система
- Не верьте в повторение
- Фрагменты кода
- Автоматизация
Когда я только пришёл в индустрию, друг, который учился на факультете компьютерных наук, но стал госслужащим, спросил меня: «Ты вообще никогда не учил программирование. Как ты обычно пишешь код?» Я сказал: Google, и был безжалостно высмеян, настолько, что мои имена аккаунтов везде — 2shou, говоря себе, что я бесстыдный программист-секонд-хенд. Это шутка, но если бы меня спросили сейчас, я всё равно ответил бы Google. Рост программиста похож на расширяющийся круг. Снаружи него — бескрайнее море; чем больше круг, тем больше поверхность соприкосновения с морем. Чем больше ты знаешь, тем больше ты не знаешь. Информатика также дисциплина, которая чрезвычайно быстро проходит смену поколений, и это дисциплина с лучшими знаниями в интернете. Трудно использовать традиционные формальные методы обучения с наставничеством и учёбой; наоборот, легко получать новейшие знания через поисковые системы.
Не верьте в повторение. Мастер называет это принципом DRY (не повторяйся). После написания большого количества кода у человека появляется интуитивное суждение о хорошем и плохом коде. Мои критерии — краткость и стандартизация. Краткость — не критерий эстетической красоты. Чем меньше повторений, тем меньше шансов допустить ошибку и тем ниже затраты на последующую поддержку.
Если вы, к сожалению, потеряете код трёхнедельной давности, вы, возможно, сможете воспроизвести фрагменты, задержавшиеся в вашем сознании, благодаря исключительной памяти, но если это код трёхмесячной давности, вам, вероятно, так не повезёт. Идеальный программист приложит все усилия, чтобы найти эффективные способы хранения информации, сохраняя короткие фрагменты — такие как код, скрипты, конфигурации и опыт, записанные в моменты озарения на работе, — чтобы их можно было пересматривать в любое время.
Идеальный программист должен быть ленивым. Для него повторяющиеся действия так же уродливы, как повторяющийся код. Если он понимает, что задача может повторяться в долгосрочной перспективе, то чем раньше она будет автоматизирована, тем лучше.
Шестой небольшой пункт: управляйте временем
Тайм-менеджмент особенно важен для профессии программиста, потому что при выполнении задач вам приходится идти в одиночку, как волку в дикой местности. Если вы сможете уверенно контролировать себя без внешних ограничений и обеспечивать эффективную работу и учёбу, то со временем вы наверняка станете способнее среднего человека.
Программисты занимаются высокоинтенсивным умственным трудом. Обычно 4–5 часов сосредоточенной работы над основной задачей каждый день достаточно, но вне работы вы должны выделять время на учёбу. Помимо учёбы, также необходимо оставлять немного времени, чтобы разгрузить голову. Используйте перерывы на заваривание чая или питьё кофе, чтобы сохранить это драгоценное время для себя: думайте о будущем и оглядывайтесь назад — так вы получите вдвое больший результат при половине усилий.
После всего сказанного некоторые могут спросить: какой смысл так стараться, чтобы стать идеальным программистом? Принесёт ли это высокую зарплату? Нет. Приведёт ли это к повышению? Не обязательно. Жениться на светлокожей, богатой и красивой женщине? Лучше уж пойти торговать собаками.
Кадзуо Инамори однажды рассказал историю: ремесленников эпохи Мэйдзи вызывал император. Хотя они были необразованными деревенскими жителями, они посвящали всю свою жизнь одному ремеслу и потому естественно обладали благородным характером. Идеальный программист, возможно, — это тот, кто следует этому благородному духу.
Автор: Сэнди
Оригинальная ссылка: http://mdsa.51cto.com/art/201511/496267.htm#topx