Стек технологий

Стек технологий


Оптимизированный список языков, технологий и инструментов для настоящего хакера, глубокое понимание которых даёт возможность мутить любые идеи. Без маркетинговой шелухи типа .NET и попсовой джигурды типа Rust, которая не достойна внимания.

Языки программирования

C -- гейт в системное программирование; большое количество написанного софта, откуда можно черпать опыт; возможность писать на низком уровне более оптимальные решения, когда это необходимо; возможность программировать драйвера собственных устройств и встраиваемые системы на контроллерах.

JavaScript -- гейт в веб-технологии как фронта (браузер), так и бэка (NodeJS); возможность быстро на коленке собирать нативные десктопные (electron) и мобильные приложения (ReactNative); доступная функциональщина (Fantasy Land, Static Land) и другие трендовые темы (реактивное программирование, event-driven...), с ним всегда будешь в тренде; опциональное чоткое типизирование (FlowJS).

Python -- гейт в системное/серверное скриптование; продвинутые математические, статистические библиотеки для анализа данных; куча библиотек искуственного интеллекта; куча систем DevOps'а с возможностью дописывать плагины; куча библиотек с помощью которых легко прототипировать сетевые прилоежния.

Haskell -- гейт в современную теорию программирования; куча быстрых библиотек искусственного интеллекта, обработки естественного языка... как python, только быстрый; возможность создавать надёжные интерпрайзные сервисы; подходит для разработки трансляторов/компиляторов мини DSL языков; мощная система типов с выводом.

BASH -- гейт в скриптование UNIX; простой, позволяет быстро и просто автоматизировать задачи ОС; есть по дефолту в любой системе; без него всё равно не обойтись.

Свой Lisp с блекджеком -- гейт в понимание построения языков изнутри; возможность разобраться в имеющихся компиляторах и интерпретаторах, виртуальных машинах.

VHDL/Verilog -- гейт в разработку хардвара на ПЛИСах; где нужны кастомные схемы обработки сигналов/данных (криптография, хардварные нейронные сети); где нельзя вставить мощный процессор, но нужна шустрая параллельная обработка данных; многоканальная передача данных на большой скорости (кастомное сетевое оборудование).

Операционная система

FreeBSD -- гейт в современные UNIX-like системы; всё собрано в кучку и работает из коробки; всё написано на C и POSIX/UNIX совместимо, так что опыт разработки можно перекладывать на другие подобные ОС; крутой сетевой стек, так что можно осваивать и принципы построение сетей; встроенные инструменты виртуализации и (почти) контейнеризации; высокая степень надёжности и малое количество ошибок безопасности; компетентное сообщество; поддержка продвинутой файловой системы ZFS; удобная для закрытого использования лицензия.

FreeRTOS -- система реального времени для встраиваемых систем; поддерживает MIPS контроллеры; дефакто стандарт для индустрии; позволяет мутить свистелки и перделки для интернета вещей; имеется большое количество библиотек на все случаи жизни (сеть, графика, ввод-вывод); программируется на C; хорошая документация; мощное сообщество.

Процессоры / ассемблеры

AMD64/Xeon -- все современные десктопные/серверные процессоры; реализации закрытые, но знать как стандарт индустрии нужно.

MIPS -- гейт в понимание процессорной архитектуры; простая архитектура; большое количество микроконтроллеров с такой архитектурой, которые можно использовать во встраиваемых системах; большое количество реализаций на VHDL/Verilog, которые можно использовать в образовательных целях и построении специфичных выч. систем, где нужно ЦПУ ядро; книжки по архитектуре в наличии.

GAS -- ассемблер от GNU; собирает код под разные аппаратные платформы (в т.ч. MIPS).

Среда разработки / компиляторы

Emacs -- почти IDE; много пакетов под разные языки, так что не придётся привыкать к разным IDE; умеет почти всё, что нужно; шустрый; можно запускать в консоли; работает на всех UNIX-like ОС; можно расширять и переопределять функции на лиспе под свои нужды.

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

GCC -- большинство Open Source программ на C требуют именно GCC; компилирует в нативный код для множества различных аппаратных платформ; позволяет разрабатывать фронтэнды для собственных языков; в отличие от clang написан преимущественно на чистом C, что прекольно в свете того, что я ненавижу cpp.

V8 -- без вариантов, просто отмечу что нужно разбираться для глубокого понимания работы JavaScript.

Базы данных / доступ к данным

Postgres -- самая шустрая и продвинутая опенсорсная реляционная СУБД; можно широко тюнить; широко используется в разных продуктах; имеет хорошую документацию.

SQLite -- удобная встраиваемая реляционная БД, на случай если не хочется разворачивать настоящую.

NATS -- очередь сообщений; легко завязывается в общий канал с нескольких хостов; имеются простые в использовании библиотеки; разработчики с богатым опытом в области MQ; библиотеки под большое количество языков.

MongoDB -- документно-ориентированная БД; удобная для быстрого прототипирования и применения в быстро растущих (по функциональности) проектах; позволяет легко шардить данные; элементарная настройка репликации.

GraphQL -- язык запросов для завязки фронта и бэка; гибкий; имеет множество реализаций под разные платформы.

Управление инфраструктурой / мониторинг

Ansible -- оркестрация серверов; позволяет хранить конфигурацию всей инфраструктуры в одном репе; работает с FreeBSD; расширяется модулями на Python; достаточно проста для индивидуального пользования.

Zabbix -- система мониторинга серверной инфраструктуры; централизованный анализ логов; визуализация данных из коробки; отправка нотисов при авариях; анализ нагрузки и производительности.

Из полезного для медитаций

Но не для глубокого практического освоения, т.к. имеет ограниченное практическое применение.

Idris -- язык с зависимыми типами. Как передний край мысли о функциональных языках.

Lisp (с кучей диалектов) -- очень гибки и дающий много пищи для размышлений; много примеров реализации.

Forth + производные -- множество уникальных идей: метод парсинга, шитый код, элементарная архитектура VM...; + просто что бы сломать мозг; куча примеров реализации.

Tcl/Tk -- контекстно-зависимый, простой, гибкий язык, на котором приятно писать; минимальный но чоткий набор виджетов в Tk, на котором на коленке можно прототипировать полноценный GUI.

Minix3 -- микроядерная операционная система, созданная специально в образовательных целях.

Erlang/OTP/Elixir -- отличные языки/платформа для распределённых систем с повышенными требованиями к надёжности.

Report Page