«Я бесполезный дурак и хочу уволиться» — 10 вопросов программисту, пилотный выпуск

emy3phbmabvseg-cy7ndp9hkoc0.jpeg

Привет, Хабр!

Помните историю про Стива Джобса и Денниса Ритчи? Не хотим снова устраивать споры и читать морали, но правда остается правдой — тысячи крутых технарей сидят в тени, а их истории запрятаны в чулан.

Мы в редакции Хабра намерены это исправлять. Отныне будем регулярно брать интервью у людей, про которых не пишут в СМИ и за которыми не гоняются в соцсетях. Так что если вам есть что о себе рассказать — готовьтесь.

Чтобы вы поняли, как оно будет выглядеть, начнем со своего примера. Под катом 10 общих вопросов, которые мы будем задавать всем. Для пилота на них ответил fillpackart. (В этом месяце я брал вместе с ним несколько, кажется, неплохих интервью: раз, два, три). Почитайте, и если хотите рассказать о себе таким же образом, пишите сообщения мне или baragol.

qb7jxgodiqa7s7p2tp-3e_irjdm.jpeg

Филипп Ранжин, сын инженера из Иванова. Начал писать на С++ в 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 для создания хорошей аргументации у меня нет.

Бонус: задай любой вопрос другому разрабу.


— Изучение какой технологии вызвало у тебя наибольшее удовольствие в процессе?

© Habrahabr.ru