😱 Хочу на этой неделе записывать видео с реализацией различных структур поверх типизированных массивов в JS и сделать анализ производительности и потребления памяти на операциях: хранения на диске, парсинга, передачи между потоками и обращения к свойствам. Это будет новый формат для моего телеграма, но раз YouTube приказал долго жить, то почему бы и нет.



А также, в планах написать продолжения цикла про ООП на примере ObjectiveC. Вообще, я собираюсь в этом цикле рассмотреть еще Java, JS и закончить Julia и Rust. Мы пройдем полный путь от зарождения ООП к его закату и перерождению в новом формате. Языки Julia и Rust я выбрал не просто так. Дело в том, что ни один из этих языков нельзя назвать ОО языком в полной мере. С другой стороны, многие ОО черты в них присутствуют и это позволяет нам порефлексировать над тем, почему сделано так, а не иначе.



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



В итоге качество новой информации падает, а ваш рост как специалиста замедляется или даже деградирует. Такой же эффект можно наблюдать и в мире ML: если обучать модель на данных сгенерированной другой моделью то мы можем обнаружить, что качество нашей модели ухудшается.



Я сам на личном опыте испытал такое. Я начал много программировать на JS в 2006 году и к 2012 я считал себя очень квалифицированным Frontend разработчиком. С другой же стороны я ощущал, что уперся в некоторый тупик: профессиональное развитие сильно замедлилось, как и карьера. Но так вышло, что я когда я устроился в Яндекс в 2011 году (недавно листал трудовую и оказалось, что все-таки это 2011, а не 2010), то в моем окружении было куда больше разработчиков на Perl, Java и C++. И я, постепенно, стал развивать любопытство "а что там за миром JS?". И вот в 13-м году я уволился из Яндекса, уехал на дачу и несколько лет плотно занимался самообразованием и программированием всего подряд.



И это дало свои плоды. Я буквально перезапустил свою карьеру и снова начался рост, а главное я стал заниматься совершенно другими задачами, которые были мне куда интереснее.



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



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



И вообще, изучая базу и историю тех или иных инструментов можно прийти к удивительным выводам, что "принципиально новое" в нашей профессии появляется крайне редко. В основным мы имеем дело с улучшением или адоптацией цже существующих технологий. Вот вам несколько примеров:



1. Rust корнями упирается в исследовательский проект Cyclone, который в свою очередь упирается в С и семейство ML языков.

2. MVVM паттерн, производные от которого очень прижились в мире Frontend уже использовались задолго до этого в решениях на платформе Silverlight.

3. Изначально С++ было почти калькой с Simula.

4. Java также в свою очередь является применением идей Simula и Smalltalk.



Если начать копать дальше, то мы увидим, что каждое решение просто брало уже существующие идеи и развивало их.

Можно еще более упростить мой посыл: чтобы смотреть в будущее, надо знать прошлое.



Закончу цитатой Алана Кэя "лучший способ спрогнозировать будущее — изобрести его".



Всем базы! 💪