«Я бесполезный дурак и хочу уволиться» — 10 вопросов программисту, пилотный выпуск
Привет, Хабр!
Помните историю про Стива Джобса и Денниса Ритчи? Не хотим снова устраивать споры и читать морали, но правда остается правдой — тысячи крутых технарей сидят в тени, а их истории запрятаны в чулан.
Мы в редакции Хабра намерены это исправлять. Отныне будем регулярно брать интервью у людей, про которых не пишут в СМИ и за которыми не гоняются в соцсетях. Так что если вам есть что о себе рассказать — готовьтесь.
Чтобы вы поняли, как оно будет выглядеть, начнем со своего примера. Под катом 10 общих вопросов, которые мы будем задавать всем. Для пилота на них ответил fillpackart. (В этом месяце я брал вместе с ним несколько, кажется, неплохих интервью: раз, два, три). Почитайте, и если хотите рассказать о себе таким же образом, пишите сообщения мне или baragol.
Филипп Ранжин, сын инженера из Иванова. Начал писать на С++ в 16 лет в университете, затем изучил .net. Сейчас Senior software development engineer в неплохой зарубежной конторе. Помимо распространенных языков пишет на F# и OCaml.
1. Расскажи о фиче, которую ты реализовал и которой гордишься.
— Я не сделал ничего, чем могу гордиться. Всю свою профессиональную жизнь я решал очень тривиальные проблемы. Поэтому горжусь тем, что я способен сделать, но не тем, что делал.
Думаю, я мог бы гордится, получись у меня реализовать хороший ИИ.
2. А теперь — про самый лютый факап.
— Однажды я весь день безуспешно пытался завести OCaml под виндой (не пытайтесь повторить). С работой это никак не было связано, и на следующее утро на митинге нужно было что-то соврать. Смотрю — на мне заасайнен баг, в который я даже не заглядывал. Ну думаю, «не может же быть бага, который я не исправлю за два дня!». На митинге сказал, что работал над ним, и через два дня будет PR.
В итоге я работал над ним три месяца.
Баг был связан с взаимодействием двух огромных систем. Он воспроизводился постоянно. Я реально три месяца строил различные гипотезы и проверял их, снова и снова ошибаясь — даже забросил стройку дома в скайриме. Это были худшие три месяца в моей жизни.
В итоге я закрыл его как «No repro». Пришёл к директору, сказал: «я — бесполезный дурак, и хочу уволиться, чтобы не мучить вас». Но в ответ мне сильно подняли з/п.
3. Опиши свое рабочее пространство: от кресла и монитора до сред программирования и любимых утилит.
— Я работаю с использованием операционных систем семейства Windows, потому что у меня .net стек и потому что у Windows лучший UI. Сижу за столом, который сам себе сделал. Он огромный, влезет человек пять.
У меня не самый плохой девбокс, но с одним значимым минусом — я попытался сэкономить и купил проц от амд. Это был страшный провал. Не смотря на высокую заявленную мощность, этот кусок говна прогоняет мои тесты в 5!!! раз медленнее, чем его интеловский аналог.
Сейчас у меня только один монитор. Планирую прикупить ещё парочку, чтобы не позориться. Моя любимая IDE — Visual Studio 2017 в связке с Resharper. Любимый текстовый редактор — Visual Studio Code в связке с миллиардом расширений. Скачивать их и наблюдать, как VSCode эволюционирует — одно из моих хобби.
Я люблю git, но Visual Studio Team Services, пожалуй, нравится мне больше, чем GitHub.
4. По какому принципу ты выбираешь работу? Стек, продукт, бытовые условия, деньги?
— На текущий момент ключевые факторы для меня — оплата и возможность работать на треть своих способностей. Мне кажется, я выгорел, и больше не готов работать на бизнес идейно. Даже страх быть уволенным и лишиться привычного образа жизни не может заставить меня глубоко погружаться в проект. А я отец полутора детей — страх очень серьезный. Но однотипность и бессмысленность всего, что я делал, сейчас причиняет мне почти физическую боль.
Мне иногда кажется, что с таким подходом у меня нет морального права искать себе работу. Я оправдываю себя тем, что по отношению к системе нельзя быть моральным или аморальным. Абстрактность корпораций помогает дистанцироваться от мысли, что можешь навредить реальным людям — поэтому я беру работу только от больших компаний.
При этом меня смущает, насколько огромные для своего города деньги я получаю за один пулл реквест. Как будто высокий скилл разработчика даёт мне право жить в десять раз лучше чем куча людей, которые в поте лица делают полезное дело по восемь часов в день.
Иногда кажется, раз я смог переиграть бизнес на собесе, то я в какой-то мере достоин того, что имею. Из-за этого я утрачиваю связь с реальностью, и мне начинает казаться, что так всё и должно быть.
Не знаю, как это можно совмещать, но я обожаю разрабатывать и ненавижу работать разработчиком. Я пытаюсь успокоить себя тем, что просто мне ещё не попался интересный проект, но в то же время сам в это не верю. С этим действительно тяжело жить.
5. Что в технологиях и языках, которые ты используешь, ты бы хотел исправить?
— Я бы хотел:
- Вывод типов и компайл-тайм иммутабельность для typescript и C#. Тогда я бы мог создать метод, который принимает что-то гарантированно иммутабельное, а не как сейчас — ReadonlyDictionary, которая на самом деле не ридонли (передал обычную дикшнари в ее конструктор, оставил на неё ссылку и спокойно мутируешь).
- Чтобы разработчики C# послали, наконец, к чертям собачьим обратную совместимость, дурацкие using-и, которые работают только внутри одного файла и сделали ЯП более современным. Серьёзно, в языке, для которого весьма нередок код в стиле IDictionnary
Foo (Func не сделать норм алиасы типов — это оооочень странное решение.reallyStrangeCallback - Автоматические backing fields в C#, какой-нибудь сахар над Func
. - Контракты для C# из коробки (например в Roslyn) вместо сторонних решений, которые превращают мою IDE в тормозящее нечто.
- Аналог jsx для языка F#. Если никто из вас не сделает его в ближайшую неделю, так и быть — займусь.
- Чтобы сообщество пришло к пониманию, что юнит-тесты — бесполезный мусор, а языки с динамической типизацией (не путать со слабой) — самый крупный провал в истории индустрии.
- Чтобы архитектура процессоров была больше рассчитана на функциональный подход.
- Оптимизация хвостовой рекурсии в js/ts, чтобы я мог фигачить свои tail-рекурсии повсюду, не упираясь спиной в размер стека. В спецификации она есть, но парни, которые пилят v8, просто решили, что не так уж и важно следовать спеке языка, когда разрабатываешь для него рантайм.
- Опциональная возможность статической типизации в js из коробки, но не в противовес typescript. Я, в отличие от создателей тайпскрипта, считаю его самостоятельным ЯПом с очень современным и мощным мультипарадигменным дизайном.
- Чтобы штуки вроде web-assembly прочно заняли своё место в практиках и стандартах фронтенд разработки.
- Значимого усовершенствования web-клиентов гитхаба и ему подобных. В идеале возможность комфортно работать с кодом серьёзного проекта в браузере.
- Больше конвенций по совместимости. Насколько бы всё было бы проще, если бы jvm умела интерпретировать и jit-ить дотнетный cil.
6. Где лучше перенимать чужой опыт — в вузе, на конфах, на хабре? Еще где-то?
— Я учился в вузе, но меня отчисляли несколько раз. Бывал на конфах, постоянно читаю хабр. Мне не кажется, что я почерпнул хоть что-то полезное от этих источников. Ну или мне приятно так думать.
Мой поинт — читать книги и заводить себе друзей-разработчиков. Думаю, наибольшее влияние именно на мой скилл оказало общение с умными людьми, которые занимаются разработкой.
7. Будь у тебя неограниченные ресурсы (время, деньги, мощности, люди), каким проектом ты бы занялся?
— Было бы здорово сделать максимально возможно точную симуляцию человеческого мира, что бы потестить в ней, как привести общество к наиболее счастливому состоянию. Да и вообще как оно себя поведёт в разных случаях.
8. Как ты отдыхаешь? Что делаешь кроме работы?
— Я гуляю по лесу и думаю, иногда с пивом, поигрываю на гитаре и временами в видеоигры. Я бы сказал, что моё хобби — думать и мечтать.
У меня несколько своих проектов с друзьями. Люблю специально делать им пассивно-агрессивные код-ревью («не мог бы ты предложить мотивацию для использования столь непродуманного решения?») и наблюдать, как это меняет наши взаимоотношения.
Иногда занимаюсь всякой гуманитарной хренью, вроде интервью. Постоянно начинаю писать книги, хотя ни одной еще не дописал.
9. Расскажи про 3 любимые книги — учебную, научно-популярную и художественную.
Учебная — «clr via C#» Джеффри Рихтера. Столько знаний про то, как устроен дотнетный рантайм в одном труде — настоящая находка. Если заучить эту книгу, пройдёшь любой собес на дотнетера. Ещё бы отметил «Функциональные структуры данных» Криса Окасаки. Не очень полезная с практической точки зрения, но мне она вернула веру в программирование — реализация структур данных вызывает у меня метафизический трепет.
Научпоп — не знаю, можно ли считать таковой «Code Complete», но мне очень нравится перечитывать ее. Автор пишет невероятно очевидные вещи, и на всех проектах, где я работал, этим простым принципам никто почему-то не мог следовать в достаточной мере.
Художественная — «Американская трагедия» Драйзера. Никогда бы не подумал, что такое прагматичное цифровое чудовище, как я, способно сопереживать брошенной, а потом ещё и убитой девушке. Но я сопереживал, и меня это очень сильно задело.
10. Если прямо у тебя на глазах в ИИ проснется сознание, что ты ему скажешь?
— Я бы предложил ему спроектировать искусственный интеллект, а потом сравнил бы, какой из них лучше. Если бы лучше был новый, я бы попросил его спроектировать искусственный интеллект, а потом…
Если бы из ИИ получился мощный кодер, я бы использовал его для создания железной аргументации, что golang — тупиковая ветвь развития программирования. Потому что таких холиваров в моей жизни много, а бюджета на изучение golang для создания хорошей аргументации у меня нет.
Бонус: задай любой вопрос другому разрабу.
— Изучение какой технологии вызвало у тебя наибольшее удовольствие в процессе?