Все уже украдено до нас

imageДумаю, у многих хоть раз была мысль — я родился слишком поздно, все уже открыто, придумано и т. д.

Хорошо Декарту, или, тем более, всяким древнегреческим математикам, доказывать простенькие теоремки и вписывать свое имя в историю. Сейчас далеко не каждый (да что там, единицы на тысячи человек) физически способны добраться до переднего края науки, не выбросившись из окна главного корпуса МГУ по пути.

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

Джобс собирал компьютеры в гараже и продавал. Сейчас запуск нового техпроцесса обходится Интелу в миллиарды долларов.

Короче, слишком сложно нынче пробиться. Очень высокая конкуренция, куда ни плюнь.

У меня есть для вас обнадеживающая новость. В мире разработки ПО это абсолютно не так. Нерешенные задачи россыпями валяются на дороге, некому взять и сделать.Косвенно это доказывается тем, что в большинстве программ, систем, библиотек, которые кому-то нужны, количество тикетов и интенсивность разработки только растет. То есть, ширина проблемы только раскрывается на данный момент. Положительная производная. Примеры: ядра операционных систем, популярные языки программирования (т. е. их компиляторы, виртуальные машины и стандартные библиотеки), базы данных, системы управления сайтами, код мобильных платформ, фронтенд-фреймворки.

Насчет графического сектора (движки игр, рендеринг, все это) я знаю мало, не буду врать, но, кажется, там тоже куча движухи.

Есть, конечно, и системы, которые уже прошли пик активной разработки. Их код достиг некого локального оптимума (для их задач) и безбажности, его трудно хоть как-то улучшить. Примеры: jQuery, LaTeX, dlmalloc. Тут я имею ввиду именно активно используемые вещи, конечно, потому что бессмысленно упоминать, что никому не нужное говно бросается и не развивается.

Но в таком «золотом» состоянии заметное меньшинство проектов, это практически исключения.

Повторюсь, даже гребень волны еще не пройден. Хотя в большом масштабе уже многое решено, в детали только-только начали углубляться. Если сравнивать с золотой лихорадкой, то самородки с куриное яйцо из ручьев уже повытаскивали (хотя и не все), но большая часть золота, по весу, еще не намыта.

Примеры

Алгоритм быстрой сортировки уже придуман достаточно давно, лет 50 назад. Почти лежащая на поверхности его оптимизация (два опорных элемента вместо одного) был реализован в стандартной библиотеке Java (пожалуй, самая популярная платформа, на данный момент) каких-то лет 5 назад. В стандартной библиотеке языка Си, насколько я помню, до сих пор не оптимизировали сортировку.

Моя тема: хеш-таблицы. На всякий случай обрисую, для тех кто не знает, это очень базовая структура данных, огромное количество алгоритмов, целых классов программ в первую очередь зависят от их эффективности. Во многих популярнейших языках программирования (включая те же Java и С++) хеш-таблицы реализованы удручающе неэффективно безо всякого оправдания. Вот просто можно прямо сейчас пойти, заменить их и станет лучше по всем показателям.

Еще моя тема: базы данных. Проблемы с производительностью и несоответствие заявленным характеристикам (durability) популярнейших баз давно стали притчей во языцех. За этим не кроется никаких принципиальных проблем, просто плохой код, который некому править. Пойдите и исправьте, это суммарно сэкономит миллионы долларов (натурально).

Разработчики изнывают от кривых, небезопасных, переусложненных языков программирования. Абсолютно обычные ребята идут и пишут свои языки (Rust, Kotlin, Julia), которые для определенных задач лучше всего, что существовало до этого, поэтому справедливо занимают свою нишу. Пойдите и помогите ребятам, они утопают в задачах, рук не хватает никогда.

Вспомните, что каких-то 3 года назад не существовало AngularJS, сейчас его используют десятки тысяч людей.

На написание этого поста меня сподвиг случай в Яндексе, про который я сегодня узнал: их инженеры серьезно улучшили поведение ядра Linux, если на севере в основном крутится какая-то персистентная структура, которая занимает почти всю физическую память. А это довольно широкий круг серверных задач. У меня возник немой вопрос:, а почему Linux, который вообще-то под сервера и заточен, не имел эту оптимизацию раньше? Потому что еще не все украдено до нас.

Резюме

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

1. Выберете область, в которой нравится ковыряться.

2. Углубитесь, разберитесь, что к чему. В принципе, не требуется ничего, кроме навыка чтения исходных кодов и времени.

3. а. Станьте контрибьютором популярной штуки. Для этого не надо проходить тайный обряд инициализации или оплатить крупный членский взнос, просто шлите хороший патч. На вас будут молиться, потому что большинство проектов, в том числе очень популярных и спонсируемых, задыхается от недостатка разработчиков. Чтобы точно войти в историю, постепенно расширяйте свое влияние в проекте. Со временем станьте ключевым разработчиком.

3. б. Вычлените коренную проблему в своей области и решите ее. Такие проблемы есть в каждой области, и будут через пять лет. Это не то, что можно пойти в лес и не найти клад.

4.…

5. PROFIT!

Если за пункты 2–3 вам не платят, что случается, придется работать параллельно где-то, и идти к цели только по вечерам. Куча примеров, когда большие проекты начинались как подспорье к основной работе. Или вот: Con Kolivas, анастезиолог (!), который разрабатывал ядро Linux.

© Habrahabr.ru