Глава 1. Антропология
Я давно не смотрю на резюме кандидатов; все резюме одинаковые. Длиной опыта тоже не интересуюсь, потому что годы опыта ни о чем не говорят. Есть полно кандидатов, у которых 5-10 лет опыта, но они не знают даже базовых вещей.
Как же это происходит? Как люди строят целые карьеры, ни черта толком не зная? Вот я теперь понял, на примере индийских программистов.
Порог входа в программирование очень низкий. Парень (назовем его Венкатеш) посмотрел пару онлайн уроков, попробовал пару примеров и УХВАТИЛ СУТЬ. Можно подаваться на работу. Народ в Индии валит в программисты массово, потому что это способ вырваться из совершенно беспросветной нищеты. Реально, в Индии есть большие страты людей, которые годами не видят никаких денег; пропитание добывают натуральным хозяйством, собирательством, а также оказывают мелкие услуги в обмен на еду или вещи. А программисты прям 3000 долларов в месяц получают, ого-го.
В начале карьеры Венкатеш просит совсем копейки, и его легко нанимает какой-нибудь стартап. У стартапа мало денег, но у них есть графический дизайн будущего продукта. Дизайнер нарисовал им красивые формочки и экранчики.
Сделать приложение, которое выводит такие формочки — это невеликого ума дело. Любой справится. В Интернете полно примеров, в Npm и Nuget есть дофига готовых пакетов, а на сайте StackOverflow есть ответы на сложные вопросы. В итоге получается приложение, которое внутри не выдерживает никакой критики,
но оно красиво выглядит, оно производит впечатление на инвесторов, и те дают 5-10 миллионов долларов. Отлично, теперь Венкатеш должен довести прототип до ума. Однако, он там уже нагородил говнокода; как делать лучше, он не знает, и чем дальше, тем труднее становится двигаться в этой разработке вперед.
Венкатеш честно пишет в резюме, что его разработка получила 10 миллионов долларов инвестиций — и теперь он опытный программист, с заслугами. Он находит новую работу, со старой он увольняется, и история повторяется снова.
При этом у Венкатеша нет никакой реальной мотивации повышать квалификацию. Какие-то новые вещи он учит, только если вплотную сталкивается с ними в работе, "на ходу", без погружения. Многие не прочитали даже одной книги, не говоря уже о какой-то математике.
Глава 2. Как это выглядит изнутри
Когда я пришел в свой нынешний проект, я посмотрел исходный код и схватился за голову. Это была куча дерьма, про которую было понятно, что это "не взлетит".
Я понял, что индусы очень работоспособны, иногда в плохом смысле. Например, если Венкатеш не знает хорошего архитектурного решения, то его ничего не остановит скопи-пастить один и тот же участок кода в 50 разных мест проекта. Если надо будет что-то поменять, он обойдет все эти места, и везде поменяет.
... Или где-то забудет поменять. И код станет неодинаковый. Но это не будет сразу заметно. А потом будет непонятно, почему код немного отличается: это задумка такая, или что-то упустили.
И это только самая легкая из проблем. Также типовые проблемы включают (только программистам будет понятно):
- Абсолютные пути ко всем видам ресурсов (файлы, URL и т.д.);
- Принудительная конверсия типов, если типы несовместимы;
- Преобразование структур путем сериализации в JSON и десериализации в другой тип;
- Фундаментальные проблемы с синхронностью и асинхронностью, с изоляцией доступа к ресурсам и т.д.;
- Строка подключения к базе данных, вместе с паролем, дублирована в десятках мест в коде;
- Моё любимое: чтобы не вычислять в каждом API-методе, с каким ресурсом пользователь работает, надо просто принимать id этого ресурса в составе запроса. Это как если кассир в банке будет просто на слово верить посетителю, сколько денег надо ему выдать;
- Открыть 30 соединений с базой данных в одном API-методе, при этом реально использовать только одно, и только его потом закрыть;
- Или и его не закрывать;
- Это всё проверяется в работе только на примере регистрации ОДНОГО пользователя, и система никогда не обеспечивает проверку, какому пользователю что принадлежит. Вообрази, что ты зайдешь в "Фотографии" ВКонтакте и увидишь фотографии ВСЕХ пользователей, потому что систему никогда не проверяли, как она работает, если пользователей больше одного.
Но это всё неважно. На демонстрации инвесторам покажут регистрацию одного пользователя, база данных выдержит 30 соединений, экранные формочки очень красивые, задержка при демонстрации небольшая, ворочать большими данными системе не нужно, других пользователей в это время нет — демонстрация пройдет отлично, и инвестор даст много денег. Ну, если этот не даст, то другой даст.
Есть женщины в индийских се...
[Print]
Stromboli