- Perl: у каждого языка есть характер
- SQL: достаточно знать несколько операторов
- PHP: вообще не нужен
- VBA/Excel: документация важна в любом языке
- Java: многословный язык с открытым капотом
- Python: дизайн языка важен
- JavaScript: дело не только в дизайне
- Bash: просто полезный
- Clojure: необычный
- TypeScript: он транспилируется
- Lua: тестабельность кода
- Rust: говорящий компилятор
На протяжении многих лет я использовал довольно много разных языков — если вы позволите мне широко понимать слово «использовать». В одном из этих языков я действительно чувствую себя профессионалом. На некоторых языках я просто выполнял упражнения. И есть один язык, который я использовал около 10 минут, но который действительно помог целой команде.
Я считаю, что мы все должны быть снисходительными, как по отношению к себе, так и по отношению к другим. Для индустрии, которая любит говорить о синдроме самозванца, мы, кажется, слишком часто любим говорить коллегам: «Ты не настоящий ХХХ, если не знаешь YYY и ZZZ».
Перечисление этих языков для себя заставило меня задуматься, чему я научился, ознакомившись с ними. Я просто научился писать код, или постиг что-то большее?
Perl: у каждого языка есть характер
Девиз Perl: «Существует больше одного способа сделать что-либо», и практика соответствует. Сравните с девизом Python: «Должен быть один, и желательно только один, очевидный способ сделать что-то». Perl и Python похожи в каких-то деталях, оба ЯП считаются легкими для изучения скриптовыми языками; но при использовании разница определенно чувствуется. У Perl сложный противоречивый характер.
SQL: достаточно нескольких операторов
Мои познания в SQL очень ограничены. Я знаю, как получить данные из одной или нескольких таблиц. Я могу сортировать и группировать данные, могу получать какие-то значения. И это все. Очень редко мне нужно было добавлять, обновлять, удалять таблицы.
PHP: вообще не нужен
Много лет назад я руководил тестированием сервисной шины предприятия. Она записывала свои логи в базу данных, поэтому мы использовали SQL для поиска записей в логах. Команда сквозного тестирования не владела SQL, поэтому тестировщик-автоматизатор на проекте создал простой PHP-фронтенд для базы данных с логами.
Однажды, уже после того, как этот человек ушел (потому что они сдали свой фреймворк), E2E-команда QA была в легкой панике. Новый сервис был доступен в сервисной шине, но недоступен из PHP-фронтенда. Никто не знал, что делать.
Поэтому я спросил, нет ли у кого-нибудь кода на PHP. Я понятия не имел, смогу ли что-нибудь сделать, но решил, что надо хотя бы взглянуть на код. К счастью, код был коротким и хорошо структурированным. В верхней части файла был определен массив из сервисов. Я добавил новый массив, и инструмент снова заработал.
VBA для Excel: документация важна
Однажды во время тестирования приложения я должен был проверить два Excel-отчета на соответствие друг другу. Был и третий Excel-лист с подробным описанием действий: применить вот эти фильтры, вычислить сумму этого столбца, скопировать-вставить результат в эту ячейку и т. д. Я решил все это автоматизировать, поскольку делать это вручную было крайне скучно, а нам приходилось проводить этот тест для каждого релиза.
Я был удивлен, как мало документации я смог найти в Интернете. А справочные страницы самого Excel были написаны в совершенно ином стиле, чем документация по проектам с открытым исходным кодом, с которыми я уже был знаком. Мне удалось справиться с этой задачей, но я почувствовал себя немного одиноким.
Java: многословный язык с открытым капотом
Java очень избыточна и кажется какой-то неуклюжей (по крайней мере, мне). Одна вещь, которую я ценю в « многословности» Java — это то, что Java показывает вам многое о том, что происходит «внутри» в Java-коде. В более «лаконичном» языке эти вещи либо делаются за вас, либо не делаются вовсе.
Python: дизайн языка имеет значение
Я большой поклонник списков и словарей в Python. Мне их очень не хватает, когда я работаю на другом языке и приходится использовать вместо них filter
или map
. Создатель Python Гвидо ван Россум даже как-то предлагал убрать filter()
и map()
из Python 3. Этого не произошло, но само предложение является отличным свидетельством того, каким видит Python лично он.
JavaScript: дело не только в дизайне
JavaScript как язык не очень хорош. Однако он очень популярен. Он появился в браузерах в 1990-х годах, и сейчас он практически повсюду. Что свидетельствует о том, что чтобы стать успешным языком программирования, нужно не только иметь хороший дизайн.
Bash: просто полезен
На предыдущей работе у меня был ноутбук с Linux. Настроить вывод с моего экрана на внешний монитор на митингах было настоящим мучением, потому что масштабирование не работало. Я написал скрипт на Bash для правильного масштабирования и вывода видео через xrandr.
Мне понравилось работать с Bash, но я не уверен, что научился чему-то новому. И хотя я больше не использую Linux на работе, я все еще использую этот скрипт на своем личном ноутбуке. Так что, похоже, то, чему я учился меньше всего, мне пригодилось больше всего.
Clojure: необычный
Clojure — самый странный в этом списке. Это функциональный язык, и это «современный Lisp». Поэтому я решил изучать Clojure. Например, там, где в Python 1 + 2
и sum([1, 2, 3])
, в Clojure имеем: (+ 1 2)
и (+ 1 2 3)
. В Clojure всё необычно.
TypeScript: он транспилируется
Никогда особо не задумывался о соотношении времени проектирования и времени выполнения кода, пока не столкнулся с TypeScript. Возможно, потому, что TypeScript не компилируется и не интерпретируется. Он транспилируется в JavaScript. То есть вы пишете на TypeScript — со всеми его возможностями и преимуществами, но когда код запускается, это тот же JavaScript.
Lua: тестируемость
Вдохновившись пазлами «Черный ящик» от workroomprds, я создал несколько собственных головоломок для Playdate. Одна из проблем заключалась в том, как сделать линтинг и юнит-тесты.
К счастью, кто-то уже начал добавлять в Luacheck поддержку SDK для Playdate. Для юнит-тестирования кто-то из команды Playdate опубликовал инструкции по LuaUnit. Но даже после этого мне пришлось проверять, что мой код тестабельный, держа его отдельно от Playdate SDK. И единственным способом запустить юнит-тесты был Playdate Simulator.
Rust: чудесный компилятор
До появления Rust сообщения об ошибках от компиляторов, интерпретаторов и т. д. всегда меня расстраивали. Иногда они были понятные, иногда нет, иногда частично понятные, но по опыту вы знали, в чем, скорее всего, проблема.
Компилятор Rust всегда стремится к лучшему, и ему это удается:

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