воскресенье, 31 января 2016 г.

Несколько вещей, о которых стоит помнить программисту в возрасте

Источник
Если вы из тех, кто «работал ещё Там-То!» и «делал ещё То-То!», а сейчас счастливо отдыхаете на пенсии — эта статья не для вас. Просто спасибо за труд и примите мои поздравления. Но если же вы, как и я, даже став немного старше всё ещё ощущаете страсть к программированию, радуетесь виду кода и не можете устоять перед желанием написать ещё что-нибудь, тогда продолжайте читать.

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

Я смирился с мыслью, что мой лучший код уже написан — в прошлом. Мне было уже 54 года (немало!) и я, вероятно, уже не мог писать код так же хорошо, как и раньше. Кто знает — может быть у меня уже начала отказывать память, ну или я просто выучил всё, что был способен в жизни выучить. Мой настрой подкреплялся наблюдениями окружающей меня реальности. Все новые технологии выглядели для меня чудаковато. Я ненавидел Node.js. Я считал все фреймворки для веб-разработки ужасными. И я сетовал на то, что классические способы разработки ПО разрушились и превратились в набор клише, которые нынче впариваются под умными названиями типа Agile или «экстремальное программирование». Я скучал за днями, когда люди писали спецификацию на будущее ПО, программировали, а затем тщательно тестировали его. И когда в каждой статье не было тысячи жаргонных словечек.


Однажды вечером мы смотрели старый добрый Звёздный Путь и Джеймс Кирк сказал, что он становится старым и выдыхается. Ему тут же возразил Спок, как обычно, в своём уверенном и логичном стиле:

«Принимать повышение было Вашей ошибкой. Командование кораблём — Ваша единственная и лучшая из возможных судьба.»


Я пропустил остаток фильма — думал об этой фразе. А не сделал ли я той же вещи? Не зря ли я перешел к работе менеджера (в которой был лишь умеренно хорош), вместо того, чтобы отдаться своей судьбе и таланту? К счастью, вскоре я нашел ответ на этот вопрос и он был: «Да, зря». Я забыл, что написание кода и было той самоей моей «единственной и лучшей из возможных судьбой», а написанный мною код был самым важным моим творением в жизни. Моя первая компания была построена вокруг куска написанного мною кода, и даже сегодня кое-что из него всё-ещё работает. И вот после некоторого периода самокопания я выбросил все свои стереотипы о том, что «индустрия уже не та». Я начал учить новые языки программирования. Мне повезло и ещё до того, как мне стукнуло 57 я закончил разработку одного из лучших программных компонентов, который мне довелось написать в жизни. Это был продукт для небольшого местного стартапа. Он был хорош: в нём была идея, архитектура, реализация. Он, в конце концов, действительно что-то значил!
В итоге я решил написать несколько мыслей для тех людей, которые в силу своей профессии и возраста уже находятся со мной в одной лодке или окажутся там рано или поздно.

1. Вы знали, на что идёте


По мере того, как мы становимся старше, мы все устаём. Мы устаём от бесконечной траты времени с минимальным результатом. Мы устаём видеть одни и те же ошибки, случающиеся снова и снова. Мы начинаем говорить вещи вроде «жизнь слишком коротка для этого». И по мере того, как наши знакомые приближаются к выходу на пенсию, мы часто ловим себя на зависти по отношению к их надёжным, скучным работам, которые вскоре дадут им возможность выйти на заслуженный отдых. Сама идея начать всё заново, снова потратить следующие 20 лет на это путешествие кажется нелепой, не находит понимания у семьи (особенно если её члены не задействованы в разработке ПО).

Да, когда мы вспоминаем о временах, когда мы только начинали писать ПО, это было невероятно захватывающе. Технологии создавались и менялись на лету. Так много проблем ещё предстояло решить, новые вызовы возникали каждый день, приходилось что-то изобретать и переизобретать. Разработка программного обеспечения была новой границей познаний человечества, где постоянно происходили открытия и возникали возможности. Для многих из нас пребывание на этом сверкающем острие прогресса стало ярчайшим событием и переживанием в жизни. Нас это привлекало. А сейчас, друзья мои, мы приехали. Мы уже не молоды и у нас достаточно опыта, ошибок, а знаний о том, как работают компьютеры на низком уровне у нас значительно больше, чем в среднем у людей в нашей сфере. Чтобы оставаться на коне, вам нужно научиться мыслить иначе, чем вы привыкли это делать. Вас не должна пугать необходимость выбросить из головы всё, что вы знали до этого и выучить новый язык вроде Swift, Python или Go. Да, на это могут уйти годы. Вы будете делать ошибки, новые ошибки, какие вам до этого никогда не приходилось делать. Вам придётся задерживаться и разбираться, чтобы понять какой инструментарий на сегодняшний день является самым актуальным. И ещё вы будете наблюдать, как молодёжь обгоняет вас, не потому что она умнее или настойчивее, а потому, что не боится с головой окунуться в какую-нибудь новомодную технологию, которой 3 месяца назад и вовсе ещё не существовало. Но это именно та атмосфера, которая вам и нужна. Снова. Так же, как было тогда, когда вы только начинали.

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

2. Примите Хаос


Есть такая старая поговорка: «чем больше всё меняется, тем более очевидно, что всё остаётся неизменным». Программирование всё ещё остается программированием, так? На самом деле всё меняется не так кардинально, как многие из нас ожидали. Например, мы думали, что программирование к этому времени станет полностью понятным и детерминированным. Этот прогноз не исполнился. Мы думали, что время багов останется в прошлом, но баги всё ещё живут в современных программах. И ещё мы думали, что намного меньше придётся тратить времени на перебор возможных решений и отбрасывание тупиковых вариантов. Но всё это по-прежнему с нами.

Но с другой точки зрения, многое всё-таки изменилось. Когда я писал свои первые программы, запускались они на научном калькуляторе от HP, все программисты, которых можно было увидеть, носили белые лабораторные халаты, а операционная система Unix (новейшая на то время) состояла из 20 000 строк кода. Даже в середине 80-ых разработка ПО была довольно странной, редкой и изолированной предметной областью. Домашние компьютеры, хотя и получили уже достаточную для разработки ПО мощность, всё ещё не давали доступа к инструментам, знаниям и средствам, необходимым для эффективного обучения программированию.

Я не знаю, сколько в мире было программистов, когда я начинал этим заниматься в 80-е годы, но их точно было не так уж много. До 1988 года их количество даже не отражалось в статистике, собираемой Бюро Трудовой Статистики. К тому времени профессиональных программистов в США стало 100 000 человек, и только 7000 из них были уровня «senior».

Индустрия, к которой я присоединился, была индустрией специалистов. Обязательства и дисциплина были основными требованиями. Сегодня последнее исследование IDC насчитало в мире 18 миллионов программистов и примерно половина из них не являются профессиональными разработчиками. Ядро операционной системы Linux состоит из 9.8 миллионов строк, написанных боле чем 6000 авторов. А кроме него на Гитхабе есть ещё 10 миллионов репозиториев, в кодовой базе Google — 2 миллиарда строк кода. Сегодня пишется много кода. Ужасающе много кода.

Эти ошеломляющие цифры показывают общий уровень интереса к программированию и компьютерной грамотности. Stackoverflow рапортует о 32 миллионах активных пользователей в месяц, и только 26% из них из США. И знаете что? Только 5% из этих людей старше 55 лет. Когда-то доступ к миру разработки ПО требовал дисциплины, самоотдачи и дорогого оборудования, а сегодня 80% американцев имеют доступ ко всему необходимому прямо не выходя из дома. И этим пользуется молодое поколения, вытесняя из профессии своих родителей.

Сегодняшняя индустрия совершенно не похожа на ту, которую я помню. Сегодня разработка ПО — это что-то вроде экстремального вида спорта. Кто-угодно может начать этим заниматься, написать какой-то код, быть неосторожным, упасть со скалы и разбиться к чертям. Это не случайно, что в современном Agile используются термины вроде «спринт» и «схватка» (scrum). Вам лучше привыкать к ним, поскольку навыки кодинга становятся уже базовой грамотностью. Если каждая школа на планете учит детей программированию с 10 лет, вскоре сегодняшние 18 миллионов программистов станут каплей в море. Те из нас, кто имеет некоторый опыт, понимают, что это означает. В среднем каждое приложение, с которым вам придётся столкнуться, будет куском… будет не очень высокого качества. Как и в любом массовом спорте, большинство участников будет аматорами, лишь некоторые из них будут подавать надежды, а уж до уровня участников Олимпиады доберутся и вовсе единицы. Чтобы преуспеть сегодня, вам нужно отбросить все предубеждения о разработке ПО и принять хаос.

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

Но кроме того возникают и потрясающие новые идеи, придуманные людьми, которые мыслили вне общеизвестного базиса. Языки вроде Go устраняют целый ряд сложностей, привнесённых когда-то классическим ООП и открывают путь к новой, прекрасной простоте. Сопрограммы меняют саму парадигму того, как люди думают о многопоточности. Мы живём в золотой век разработки программного обеспечения и инструменты для работы доступны каждому.

Чтобы оставаться в игре, вам нужно прыгнуть на поле, схватить мяч и начать играть с остальными игроками, даже если они на 30 лет моложе. Я даже больше скажу: мы, старшее поколение, несём на себе обязанность добавить наш опыт и мудрость ко всем этим современным кодовым базам и новым проектам. Это может уменьшить хаос в некоторых локальных точках и повысить шанс успеха некоторых проектов. Может быть даже наших.

Таким образом, вместо того, чтобы в штыки воспринимать каждый новый термин и технологию, о которой вы услышите от молодого программиста, который только что переизобрёл нечто очевидное — обновите свои внутренние фильтры. Учитесь видеть будущих победителей и учитесь помогать тем, кто станет Олимпийским чемпионом — вы со своим опытом можете это сделать. Я уверен, что тема глупости молодого поколения программистов будет горячей на следующем съезде Старых Программистов, но лично я в этом съезде участвовать не собираюсь. И вам не советую.

3. То, что вы выбрасываете, более важно, чем то, что вы оставляете


Моя любимая программерская поговорка гласит: «Программное обеспечение чаще становится лучше от удаления кода, чем от его добавления». То же самое касается и жизни, особенно жизни программиста. Количество вещей, которые следовало бы изучить — умопомрачительно. Всё, что останавливает вас от того, чтобы это сделать, будь то ваша старая программа или старая идея — тормозит ваш прогресс.

Если вы уже опытный программист, в вашем инструментарии есть уже много вещей, которые проверены временем и точно работают. Это ваша удача и одновременно ваша огромная проблема. Часто я могу написать функцию для парсинга чего-нибудь быстрее, чем найти и подключить соответствующую библиотеку. А кроме того, даже если я решу использовать библиотеку, я захочу быть уверенным, что она делает свою работу правильно и под «правильно» здесь я имею в виду «так, как это сделал бы я». И вот постепенно я начал замечать, что мои инстинкты устаревают. Я должен импортировать опенсорсную библиотеку и попробовать её. И если окажется, что она что-то делает не верно, я должен попробовать улучшить её, чтобы создать некоторые артефакт переиспользуемого кода, чуть-чуть лучшего качества, чем он был до моего вмешательства.

Подход «это проверено временем и работает хорошо» чаще всего главный враг инноваций. Единственный настоящий путь вперёд — это подвергать всё, что вам известно, постоянному сомнению. Только после того, как вы попробуете какой-нибудь новый путь решения проблемы, узнаете его плюсы и минусы, можно будет решать брать ли старый проверенный способ или предпочесть новинку. Это создаёт в вашем мозгу эффективный и гибкий фильтр «знаю, потому что только что попробовал» вместо неэффективного бункера «знаю, потому что много лет так делал и работало».

Часто данный подход будет стоить вам времени и толкать вас назад, к старым привычкам и подходам. Часто новинки действительно будут менее стабильны или гибки и вы решите не отклоняться от классического пути. А иногда будет наоборот. И, как я уже говорил раньше, это то, на что вы подписывались, когда выбирали путь программиста. В конце концов при использовании данного подхода вы вдруг обнаружите, что в вашем привычном наборе инструментов вдруг прибавилось пару неплохих библиотек, несколько полезных утилит, то-сё, одно-другое-третье. А значит — всё было не зря.

4. Вы никогда не будете «слишком старым»


Представьте на секундочку, что вам снова 20 лет. Вы где-то на втором курсе университета, обнаруживаете, что вам не только нравится учиться писать программы, но вы уже даже кое-что можете написать. И иногда даже получается неплохо. Вокруг себя вы видите людей своего возраста, которые с восторгом смотрят в будущее. Некоторые из них даже начинают работать или создают собственные приложения, с надеждой, что из этого когда-нибудь вырастет бизнес. Когда Джону Мейеру было 19 лет, его компания TapMedia уже имела около 40-а приложений в Apple App Store.

Перематываем вперёд.

Что такого было у того 20-летнего парня, чего вы сегодня не имеете? Вот что: бесстрашие и безграничный энтузиазм. Но у вас ведь сегодня есть не менее полезные вещи: опыт, знания, все ваши ошибки и все ваши успехи — ценнейший базис!

Если 20-летний может выпуститься и иметь успешный стартап ещё до того, как ему стукнет 25, то вы это можете и подавно! Вам не надо проверять все возможные пути — часть из них вами уже пройдена и вы знаете, что там ждёт провал. У вас есть какое-никакое представление не только о программировании, но и о менеджменте, рисках, деньгах.

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

Достижения не только для молодых. Артур Рубинштейн, один из величайших в мире пианистов, радовал мир своей замечательной игрой 80 лет. Джулия Чайлд (шеф-повар, автор кулинарных книг и ведущая кулинарных телепередач) никогда не готовила до 40 лет. Роже создал свой знаменитый тезаурус только в 73 года.

Таким образом, если вы думаете, что создание компаний и написание программного обеспечения — только для молодых, вам следует осознать, что данный барьер лишь в вашей голове. Есть, правда, один момент, который с приходом возраста нельзя игнорировать. Что приводит нас к следующему пункту.

5. Ваше здоровье — ваш новый бизнес-партнёр


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

Такого больше не будет.

Ваша сегодняшняя работа не будет построена так, как это было тогда. Да, это было восхитительно, но тогда ваше тело вам это позволяло, а сейчас — уже нет. Сегодня ваш организм — он как партнёр в бизнесе: иногда помогает, а иногда и не позволяет сделать что-то опасное. Это фактор, который вам необходимо учесть в ваших планах.

Признаки этого очевидны для большинства из нас. Начинают болеть мышцы, о которых вы даже не знали, что они у вас есть. Доктор настаивает, чтобы вы сбросили вес и делали больше упражнений. И когда окулист впервые произносит слово «очки» время вокруг замедляется и вы видите движения его губ в slow motion, пока вы обдумываете услышанное.

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

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

Иногда серьёзным препятствием может стать необходимость снова брать на себя риски. Ведь на нас уже лежит такая ответственность — наши семьи, дети, финансовые обязательства. С возрастом всё это воспринимается всё серьёзнее и серьёзнее. Вернуться к тому, с чего ты начинал много лет назад может показаться безответственным. Но подумайте вот о чём: возвращение к истокам программирования в зрелом возрасте означает, что вам никогда не придётся уходить на покой. Никогда не будет «я слишком стар для всего этого» — всегда будет чему учиться, и всегда будет, что делать. То сияющее восхищение, с которым вы писали когда-то свои первые строки кода на своем первом языке, может снова быть у вас в будущем.

Выводы


Я надеюсь, вся эта пища для мозгов напомнила вам, что никогда не бывает слишком поздно. Не важно, что там у вас было в прошлом — на ниве программирование всегда будет чему поучиться, и всегда будет над чем поработать. Если вы бизнес-программист, то вам ли не знать, в каком хаосе нынче пребывает разработка всего бизнес-софта. Если вы веб-дизайнер, то я уверен, что даже в Web 8.0 всё будет всё-ещё неверно. А если вы iOS разработчик, так может быть напишете мне наконец нормальный почтовый клиент, а? Я бы с удовольствием на такой посмотрел.

Комментариев нет: