User Tools

Site Tools


Q&A

Расскажите пожалуйста про ваш стек

  1. Langs: Golang, С, С++, Javascript Node.Js, Perl, PHP, SQL, Pl/PgSQL, Ruby, Python, Shell, некоторые DSL;
  2. DBMS: PostgreSQL, Vertica, Clickhouse; SQLite;
  3. Keyvalue DB: Redis, ряд встраиваемых (Level5, BoltDB, BDB, etc)
  4. RPC: HTTP, SOAP (жуть), JSON RPC, GraphQL, gRPC, прочие, включая написанные мной под проекты;
  5. Frontend: Angular2, Vue2.js, React, Plain HTML/CSS/SCSS with templates;
  6. Network protocols: IPv4/IPv6, SIP, & Co (RCTP, RTP, etc), BGP, OSPF, HTTP, MQTT, etc, etc;
  7. Security: X509, OpenSSl, SSL/TLS, SSH, IPSec, JWT, прочие;
  8. OS: Linux (в основном Debian) & KVM, FreeBSВ & bhive
  9. Message Broker: в основном Apache Kafka, что-то самодельное (брокер сообщений не такая уж сложная штука);
  10. Docker Composer;

Это то, чем пользовался, не все, что вспомнил. Также много c чем экcпериментровал и пробовал применить. Долго в IT, начал заниматся не потому “там больше платят” (как некоторые сейчас), а из сильного интереса.

Есть ли знание одного из языков программирования: Go, Java или C/C++?

C (C98) это язык/компилятор с которого начал, вместе с Linux/FreeBSD. По прежнему его использую, это как основа. В том числе писал подключаемые модули, например для Perl X509 библиотек.

Без С никак. Куча написанного на нем, и это же язык системной раработки. И встаиваемых систем, наряду с С++.

С++ один любимых, OOP, куча хороших контейнеров в STL. Начиная с С++13 автовыведение типов, умные указатели сделали разработку приятнее.

Но. Ситуация омрачается тем, что большие возможности и большое количество любителей мета-программирования порождают тяжелые для анализа библиотеки (one header libs, в частности boost), в которых ошибки и узкие места можно искать неделями, пытаясь воспроизвести ситуацию.

Опять же разные подходы к написанию кода, разные стили…

Golang использую с 2013 года, и сейчас это любимый компилятор. Считаю, чтобы по настоящему его понять и оценить, надо достаточно много написать кода на С.

Одна их самых любимых вещей, это легкая сериализация/десериализация, за счет хранения информации о типах в obj и пакете reflection. Во всех остальных языках это всегда немного закат солнца вручную. Web сервисы, да и вообще сетевые сервисы писать легко, и даже дефолтный web сервис показывает неплохие характеристики (по нагрузке похожие характеристики получал только для Koa2 Node.Js в “кластерном” варианте) Умные указатели, выведение типов, автоматический dereferencing указателей, обработка паники, отличная трассировка, … очень много приятных вещей, хорошая базовая библиотека.

Фактически, при аккуратной разработке, я получил только только 3-4 segfault ситуаций-mistackes за пару лет, который исправил за меньше чем за час каждую.

Стековая обработка ошибок, думаю, довольно разумный вариант по сравнению c exception c том же С++, Java & Co.

Java: На Java писал очень мало, больше дорабатывал/правил. Было, переписывал сервисы с Java на Golang, и даже получалось компактнее по коду в 2-3 раза (!, при беседе могу показать один из корпоративных примеров).

Node Javasrcipt В основном использую для написания утилит, там где есть преимущество в библиотеках. Использовал express.js и koa3.js для вспомогательных сервисов.

Perl Один из рабочих языков для утилит обработки, небольших web приложений, в основном из-за огромного каталога библиотек CPAN.

Ruby Также один из вспомогательных интерпретаторов. В зависимости от целей и наличия библиотек, и преимущества использования.

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

Расскажите пожалуйста про нынешний проект

Последний проект это стартап, с нуля. Раcпределенная система хранения данных с интерфейсом-api совместимым S3 Amazon, и естественно аналогичным поведением. При хранении пользовательских создаються избыточные блоки, позаоляющие восстановить данные при отказе одного-дух серверов, и конечно предусмотрен контроль целостности блоков контрольными сумами. Проект относительно средней+ сложности.

Я написал

  1. Каркасы сервисов для unix native (никаких контейнеров не предусматривалось)
  2. RCP протокол и фремворк c возможностью передачи больших объемов данных (в одной транзакции легко и без особой нагрузки передается 1-2 гигабайта в потоке)
  3. Провел достаточное количество исследований и экспериментов.

Почему задумались о переходе?

Работу на проектом пришлось прервать из того, что все семьей заболели COVID, и я в тяжелой форме. Не помер. Сейчас уже полностью восстановился.

Последний проект уже уехал вперед, я поговорил с владельцем как идут дела, но догонять уже как-то не то.

Как быстро готовы приступить к работе после принятия оффера?

Сейчас я начал поиск. Вот как несколько дней. Приступить могу сразу, естественно надо будет разобраться с тем что есть, и чего нет.

Вы также можете получить информацию из Олег Бородин, программный инженер, разработчик

С уважением, Бородин Олег.