Опис послуги
ПерекладЯ Clojure-розробник і створюю функціональні бекенд-сервіси й застосування для обробки даних, які працюють на JVM. В основі моєї роботи лежать незмінювані структури даних, чисті функції й композиційний стиль, коли програма збирається з малих, зрозуміло названих кусочків, про які дійсно можна міркувати. Оскільки Clojure — це Lisp, мій головний інструмент це REPL: я вирощую програму інтерактивно, обчислюю вирази прямо на живих даних й уточнюю дизайн по ходу, а не угадую все заранее, щоб потім відлагоджувати. Це окремої дисципліна, не схожа на роботу з Java, Scala чи Elixir, й я ставлюсь до неї як до самостійного ремесла, а не як до Java з дужками.
У питаннях багатопоточності використовую чесно ті інструменти, що дає мова: atoms, refs, agents й канали core.async — за задачею, а не для моди. Я робив REST і потокові HTTP-сервіси на Ring і reitit, описував дані через spec і Malli, працював з Postgres через next.jdbc і HoneySQL, обробляв великі обсяги трансдюсерами й ледачими послідовностями так, щоб пам'ять залишалася рівною. Мені важлива акуратна зв'язка з оточуючою екосистемою JVM, розумна обробка помилок і нудні в хорошому сенсі деплої. Якщо код уже розповзся в сплутаний стан, я приводжу його назад до чистого ядра й тонких країв з ефектами.
Якщо у вас є сервіс, який повинен бути коректним під навантаженням, конвейер даних, який має залишатися підтримуваним, або проект на Clojure, застряглий на півшляху, я підхоплю його й двину далі. Пишу тести, які фіксують поведінку, документую складні місця й залишаю здоровий REPL-процес, щоб наступна людина була продуктивною з першого дня.
— Бекенд-сервіси на Clojure й ClojureScript для JVM
— REST і потокові API на Ring, reitit і core.async
— Моделювання й валідація даних через clojure.spec і Malli
— Робота з Postgres через next.jdbc, HoneySQL і пул з'єднань
— Багатопоточність на atoms, refs, agents й каналах
— Трансдюсери, ледачі послідовності, обробка великих обсягів
— Розробка через REPL, тести й рефакторинг до чистих функцій
У питаннях багатопоточності використовую чесно ті інструменти, що дає мова: atoms, refs, agents й канали core.async — за задачею, а не для моди. Я робив REST і потокові HTTP-сервіси на Ring і reitit, описував дані через spec і Malli, працював з Postgres через next.jdbc і HoneySQL, обробляв великі обсяги трансдюсерами й ледачими послідовностями так, щоб пам'ять залишалася рівною. Мені важлива акуратна зв'язка з оточуючою екосистемою JVM, розумна обробка помилок і нудні в хорошому сенсі деплої. Якщо код уже розповзся в сплутаний стан, я приводжу його назад до чистого ядра й тонких країв з ефектами.
Якщо у вас є сервіс, який повинен бути коректним під навантаженням, конвейер даних, який має залишатися підтримуваним, або проект на Clojure, застряглий на півшляху, я підхоплю його й двину далі. Пишу тести, які фіксують поведінку, документую складні місця й залишаю здоровий REPL-процес, щоб наступна людина була продуктивною з першого дня.
— Бекенд-сервіси на Clojure й ClojureScript для JVM
— REST і потокові API на Ring, reitit і core.async
— Моделювання й валідація даних через clojure.spec і Malli
— Робота з Postgres через next.jdbc, HoneySQL і пул з'єднань
— Багатопоточність на atoms, refs, agents й каналах
— Трансдюсери, ледачі послідовності, обробка великих обсягів
— Розробка через REPL, тести й рефакторинг до чистих функцій