Как-то так вышло, что почти все восемь выпусков мы говорили с офисными разрабами, и не опрашивали, каково живется на фрилансе. Сегодня, наконец, исправляем. Рассказывает Денис Казаков (nrcpp). Он написал первую программу в 14 на Pascal, а в университете разработал свой С++ фронт-енд компилятор и сорвал статьей про это кармический куш на Хабре.
Куш пореалистичней он взял на Upwork — 60 выполненных проектов и кругленькие суммы (ну, для меня) в графе полученных денег. Но под катом никакого хвастовства и мотивашек в духе «вы тоже можете». Наоборот — рассказ про горький для опытного фрилансера офисный опыт.
1. Расскажи о фиче, которую ты реализовал и которой гордишься
Первой «фичей» был первый же семестр в универе. Я пришел в вуз уже подготовленным и сдал сессию автоматом. На экзамене мог не появляться, но одногруппники попросили остаться и постоять в коридоре, помочь если что. Спустя 15 минут от начала экзамена, практически вся группа, по очереди «захотела в туалет». А это порядка 25 человек.
Каждый выносил то по одному листику, то по два. Везде нервным почерком нацарапано что-то вроде «Сложить 2 максимальных элемента в массиве» или «Найти элемент в массиве больше X».
Спустя час это был целый конвейер. Рядом со мной росли две стопки — в одной все новые и новые листики, в другой — уже решенные задачи. Один человек выходил, выносил новую «партию» и забирал готовые решения. Таким образом вся группа сдала сессию на 4 и 5. С тех пор и дружим.
Вторая фича — это мой собственный компилятор С++, который я писал почти весь срок обучения в универе. С тех пор, у меня уже не получалось вытянуть в одиночку на одном энтузиазме собственный проект. Откуда люди силы берут на свои новые проекты?
И третий проект — обычный тест на зрение. Я создал его начиная с «File -> New Project» и заканчивая продажами. Но настоящий кайф в том, что ты видишь, как люди пользуются твоим детищем, и это помогает им выявить проблемы со здоровьем.
2. А теперь — про самый лютый факап
В Google я не работал, софт для хирургов и rocket science не писал, поэтому ярких факапов из-за моего кода не припомню. Расскажу лучше, как я профакапился быть тимлидом.
После многих лет на фрилансе из дома, черт меня дернул пойти работать в офис, в крупную аутсорс компанию, с еще более крупным заказчиком (один из мировых лидеров в отрасли). Ситуация для меня стрессовая, я раньше в офисе толком не работал, а тут еще толпу людей организовать. Сначала их было 6, потом 10, потом 18, а в конце стало 25! На такой вертеп я совершенно не рассчитывал. На удаленке ведь каждый сам за себя. Взял карточку в Jira и пилишь себе молча. А хочешь не пилишь.
Тут такое не пройдет. В 10 утра по стойке смирно и будь добр, скажи «Работаю над своей задачей» на стендапе. В 4 вечера созвон с заказчиком. Говоришь то же самое, только ему и на английском. В перерывах между этими двумя занятиями тебя дергают джуны, интерны, бухгалтера, уборщицы. Разумеется, ответственность за все на тебе.
В общем и целом, я начал чувствовать, что не справляюсь, и такая организация труда не для меня. Интерес к работе потерял, но держала зарплата и сила воли в духе «ты сможешь!» Не делайте так.
Когда у тимлида интереса нет — возникает хаос. Один джун брал на себя 50% задач, просто потому что сидел рядом со мной в опенспейсе. Другой интерн взял критичный автономный модуль, который доделывали почти всей командой.
Я выпал на месяц из-за проблем со здоровьем, а когда вернулся — проект приказал «долго жить». А команду раскидали по другим проектам того же заказчика. Спустя время, я вернулся в привычный для себя фриланс.
3. Опиши свое рабочее пространство: от кресла и монитора до сред программирования и любимых утилит. И скриншоты приложи, если можешь
Большой стол — залог продуктивности, я считаю.
Железо полностью меняю раз в 5-6 лет. Сейчас выжимаю максимум из i5 второго поколения, с SSD на 500 GB + старый HDD, и 16 GB RAM DDR2. Давно руки чешуться проапрегрейдиться, особенно когда проц перегревается. Но то ли жаба давит, то ли проще термопасту сменить. Этим летом со скрипом перешел с Windows 7 на десятку, так как под Xamarin на ней проще писать.
Есть еще MacBook Pro 2011 late, для iOS-проектов. Вредная сковородка из-за возраста. Опять же дилемма — то ли на квартиру денег отложить, то ли новый Макбук купить, который «не печет».
Из тулов — с 99-го года Visual Studio. Причем с каждой новой версией убеждаюсь, что больше ничего не нужно. Пару совсем маленьких расширений, вроде Ctrl+Click для перехода к объявлению метода, и в бой.
Для Git — SourceTree. Для тестирования на разных ОС — VmWare. Иногда просят инсталлер сделать — для этого Advanced Installer. Все остальное делается либо в вебе, либо в notepad.exe. Когда нужна была Java — то IntelliJ.
4. По какому принципу ты выбираешь работу? Стек, продукт, бытовые условия, деньги?
Если на фрилансе заказы есть — ты на коне, заказов нет — готов впрягаться за еду 24/7. Слава Богу, эти времена прошли лет пять назад. Но бывало, что и студентам из Индии курсачи делал, да и прочие стремные малвари просили написать. Сейчас работаю над тем, что интересно. Например, последние проекты — это веб-автоматизация и NLP.
Мне 32, и я сейчас с меньшим энтузиазмом вписываюсь в какие-то новомодные течения. Моя идеальная работа в офисе — где-нибудь в пяти метрах от дома, лучше на соседнем этаже. Свой отдельный кабинет, с удобным столом, креслом и железом. И технологии, которые я знаю. Может еще 10-20% рабочего времени, когда можно экспериментировать с новыми. Впрочем, я и описал то, как работаю сегодня.
Про продукт не всегда удается узнать, если речь об аутсорсе. Но если там зоопарк разных технологий, начиная от Fortran и заканчивая Go — то наверное нет.
Денег обычно прошу чуть выше рынка, но это не критично.
5. Что в технологиях и языках, которые ты используешь, ты бы хотел исправить?
Самое первое, что до скрежета зубов напрягает — это отсутствие кросс-платформ UI для .NET. Или для простоты — WPF для macOS. Второй момент это качество самого проекта Xamarin на сегодняшний день. Особенно быстрота сборки и деплоя Xamarin-приложений, постоянно отлетающий Xamarin XAML Previewer, по неведомым причинам появляющиеся ошибки, которые исчезают только после перезапуска IDE.
Как только я сел писать свое первое серьезное приложение на Xamarin Forms (Forms — дно, я знаю, но выбора не было), я просто офигел от количества бубнов, которые нужны, чтобы завести приложение из коробки под iOS/Android. Сейчас полностью обновив third-party софт от которого зависит Xamarin — ситуация поменялась.
Хотелось бы создавать скелет программы в несколько строчек. Вроде описал модель предметной области, а IDE тебе сгенерила ViewModel, мокап UI, классы для работы с конфигами, логами, перехватом исключений, DAL, BAL, SAL — то есть обертки вокруг API.
Это как бы есть, вроде scaffolding’a в ASP.NET MVC, или было похожее, в почившем LightSwitch. Но в комплексе, как я описал, чтобы все вместе генерилось — нет.
Каждый новый проект, в большинстве случаев — это копипаст кода из прошлого. Потом увязывание компонентов нового codebase между собой, через слои абстракций.
Думаю ситуация совсем скоро измениться, и мы в несколько строчек DSL будем генерить 90% кода приложения. Хотя попытки с «серебрянной пулей» не прекращаются со времен создания первой программы.
6. Где лучше перенимать чужой опыт — в вузе, на конференциях, на Хабре? Еще где-то?
Берись и делай. Просто пиши код. Но вообще каждому свое. Я, например, загорелся писать программы, как в фильмах про хакеров. Пошел на курсы по Turbo Pascal. Написал первую программу, которая складывает два числа. Запустил и меня протащило километров тридцать через все порталы вселенной. И тут я понял, что это мое.
Вторую и третью программы уже было сложнее осилить — там были if и while. И больше я на курсы не ходил. Но желание оставалось. И так как опытных коллег, и впоследствии преподов, вокруг не было, я просто покупал книжки. Переписывал листинги программ и снова покупал.
Потом начал выдумывать уже что-то свое. Додумался до написания своего компилятора С++. Прошло три года. И я уже был готов к проекту в реальных условиях, за который платят деньги. Проект за проектом, совершенствуясь по пути, дорос до Microsoft MVP, MCP и выполнил 60 проектов.
Но писать эксплойты, как в фильме «Хакеры» так и не научился.
7. Будь у тебя неограниченные ресурсы (время, деньги, мощности, люди), каким проектом ты бы занялся?
Знаете, мне бы хотелось создать такую систему, которая бы изменила подход к разработке в корне. Скорее к самому процессу написания кода.
Помните как главный герой из фильма «Пароль «Рыба-Меч» создавал свою Хидру? Аки шаман, махая руками и вертя кубик-рубик. Или как в фильме «Железный человек». Да, это голливудский стандарт — махать руками на полупрозрачном экране, складывая кубики. Вот такую штуку хотел бы создать и пустить в массы.
Кстати, на полном серьезе, я уже вкладывался в подобную тулзу для программистов, которая работала на iPad. Но видимо 3 фрилансера и 20,000$ — маловато для революции в программировании.
8. Как ты отдыхаешь? Что делаешь кроме работы?
Когда меня спрашивают о хобби и свободном времени — я впадаю в ступор. Сразу представляю собеседника в лыжном костюме, лихо спускающемся с альпийских гор. Или путешественника в лесах Амазонки.
Определенного хобби у меня нет. Раньше профессионально занимался футболом, до 16 лет был капитаном юношеской команды высшей лиги. А потом написал первую программу… Теперь люблю посмотреть качественные матчи, изредка выхожу побегать сам.
Люблю погулять в одиночестве по центру города. Выучить новую технологию, но запала хватает на две-три недели. Позалипать на какой-нибудь совершенно трешовый сайт, вроде лепры.
Последнее время, пытаюсь разобраться в создании видео. Создал ютуб канал, где рассказываю о фрилансе. Пока это больше эксперимент.
А так, у меня две малых спингрозы и жена, которые не дают соскучиться.
9. Расскажи про 3 любимые книги — учебную, научно-популярную и художественную
Учебная и научно-популярная — Дональд Кнут, «Искусство программирования» (1-ый и 3-ий том)
Художественная — Незнайка на Луне. Прочитал в 7 лет, после нее, ничего не припомню, чтобы самому взяться читать. Может биография Джобса еще сильно зашла. Из последнего, что прочитал — Sapiens. Краткая история человечества.
10. Если прямо у тебя на глазах в ИИ проснется сознание, что ты ему скажешь?
Ну во-первых, я верю, что разум и душа едины. А у груды железа не может быть души по определению. Хотя мой комп по разному реагирует, если на него кричать или хвалить, почему-то.
Но если представить гипотетически, что ИИ адаптируется к условиям жизни на Земле, будет перенимать поведенческие привычки людей, также как ребенок, когда учится ходить и говорить. Тогда, наверное я бы спросил, как излечить неизлечимые болезни и избежать войн, а потом перенаселения Земли.
Вопрос от предыдущего героя
Чем бы ты занимался в межгалактической экспедиции, длительностью в несколько поколений?
Разумеется буду кодить и автоматизировать нужды экспедиции.
А если помечтать, и допустить, что я не старею, временные и потребительские рамки отсутствуют, то я бы стремился посетить как можно больше планет пригодных для жизни. Обменяться контактами с жителями Глизе 581g, попить пивка на Марсе, запустить стартап на Андромеде, переспать с инопланетянкой.
Вопрос для следующего героя
Какие советы ты бы дал себе вернувшись на 10 лет назад?
- «Я бесполезный дурак и хочу уволиться»
- «Могу рассказать про общую боль всех iOS-разработчиков»
- «Кроме работы я еще работаю»
- «Думаю, JavaScript не подходит для веба»
- «Мы это решение сделали, блин, в срок!»
- «Любой уважающий себя айтишник занимается технологиями и в свободное время»
- «Я три года борюсь с синдромом самозванца»
- «Хочу уйти с завода в веб»
Автор: arttom