Найти в Дзене
(java || kotlin) && devOps

Не только лишь все - что должен уметь разработчик

Всем привет!

Что должен знать разработчик кроме своего основного языка, в нашем случае Java. Или Kotlin. Паттерны, основы архитектуры, фреймворки - это я включаю в знание Java.

1) git. На самом деле систем хранения исходников много - svn, mercurial, darcs, git, но последний победил всех. Да, многое можно сделать в IDEA или графических клиентах типа TortoiseGit. Но часто возникают задачи автоматизации набора повторяющихся команд или разные нетривиальные вещи типа смены автора commit по всей истории. Кроме базовых команд надо знать основные модели ветвления - gitflow, githab flow, gitlab flow, trunk-based и условия их применимости

2) SQL. Почему - большинство сервисов имеет хранилище, очень часто оно реляционное. Даже если noSQL - к нему может быть прикручен слой SQL-подобного API. Даже если ORM - там есть JQL или HQL.

Объем знаний: DML, DDL, PK, FK, sequences, индексы, партиционирование, неплохо понимать план выполнения запроса

3) shell scripts. Частно приходится выполнять какие-то повторяющиеся действия на рабочей машине или на сервере. Сервера на 90% это Linux, рабочие машины по разному, но для Windows есть несколько реализаций Linux shell. На N-ом повторе возникает мысль про автоматизацию. Часто готовые скрипты можно найти на просторах сети, но в любом случае нужно понимать, что они делают. Чтобы случайно не отформатировать диск C)))

Набор команд, примерный: cd, cp, grep, cat, tail, less, echo, ps, top, tar, gz, sudo, chmod, wget, curl, apt-get или его аналог. Сюда же уметь сгенерировать ssh ключи и сертификаты. Также неплохо бы знать vi. Уточнение - учить наизусть все ключи не нужно, важно понимать что можно сделать в shell, принцип pipeline и какие команды что делают.

4) RegExp. Потребность возникает как при кодирование, так и при отладке - например, для поиска по логам. Опять же есть готовые выражения, есть крутой, хотя не бесплатный редактор RegExp Buddy, но читать этот язык надо уметь

5) build tool. На данный момент это Maven и\или Gradle. Опять же IDEA умеет компилировать проекты сама, но на любом более менее сложном нужна утилита для сборки.

Объем: build lifecycle, управление зависимостями, многомодульные проекты, управление настройками сборки, плагины и их прикручивание к нужному шагу сборки

6) docker. Мы идем в светлое облачное будущее, Docker - это его основа.

Что важно: зачем нужен Docker, Docker Registry, слоистость образов, структура Docker файла

7) базовые навыки DevOps. DevOps есть в любой более менее современной компании. Любой разработчик с ним соприкасается. Понимать основы надо.

Что я понимаю под основами: зачем вообще нужен DevOps, подсказка - см. мем "Это работает на моей машине", различие между CI и CD, Infrastructure As Code, опыт работы с каким-то оркестратором, например Jenkins, опыт работы со утилитой версионирования БД, например, Liquibase, опыт работы с SonarQube. Вообще круто, если можешь писать джобы сборки или знаешь что-то из Сonfiguration management software, например, Ansible. Вообще полный список DevOps инструментов огромен, вот наверное самый известный - периодическая таблица https://digital.ai/devops-tools-periodic-table

8) k8s, он же kubernetes. Выделил отдельно, хотя тоже можно считать его DevOps инструментом. Почему надо знать - см. пункт про Docker и облака. Как говорится - все там будем)

Что надо знать: что k8s нам дает: https://zen.yandex.ru/media/id/62fe543369f7d3314503a87d/k8s-vs-konteiner-servletov-630daeb70fa48947232d00c3, Deployment\ReplicaSet\Pod и их отличия, labels и selectors, request\limits, liveness\readyness\startup probes, ConfigMap, Secret и их различия, Service, Ingress, облачная DNS, Storage, основы работы с kubectl. Если знаешь Istio или Openshift - плюс в карму)

9) HTTP. По факту основной протокол для интеграции сейчас. Что нужно знать: методы HTTP, коды ошибок, заголовки, cookie, HTTP keep-alive, изменения в HTTP/2, Basic Auth и ее альтернативы, основные принципы кэширования контента и используемые для этого заголовки, редиректы. Основные коды ошибок полезно помнить наизусть. Сюда же я бы отнес "маппинг" REST на HTTP: HTTP методы, коды ошибок, заголовки. Для Middle + ожидается понимание, как проходит TLS Handshake https://habr.com/ru/post/258285/

10) Security. Понимание основных типов уязвимостей и способов защиты от них:

а) XSS\CSRF https://habr.com/ru/company/oleg-bunin/blog/412855/

б) SQL Injection и другие типы Injection https://habr.com/ru/company/simplepay/blog/259047/ Вспомним недавний Log4Shell https://zen.yandex.ru/media/id/62fe543369f7d3314503a87d/poslushal-doklad-na-jpoint-pro-uje-podzabytuiu-uiazvimost-log4j-i-udivilsia-630b61ccc21c6a588cb66b43, принцип тот же.

в) DOS атаки и что можно сделать в коде и в архитектуре приложения для защиты от них: https://pvs-studio.com/en/blog/terms/6585/

Также рекомендую проект OWASP, в частности TOP 10 уязвимостей https://owasp.org/Top10/

Пожалуй все, хватит)

Пишите если что забыл или наоборот - слишком много требований)

#java #tools #обучение