You know that person everybody comes to when the shit hits the fan and that bug is not going to fix itself? Want to become one? Come to learn about all the skills you'll need when your application freezes in production, leaks memory like crazy or dies under load in fifteen seconds.
20. Знать базовые вещи
•Структуры данных
•Особенности языка
•Как устроены ОС
•Как устроена ваша БД
•Как работает сеть
•Виртуальные машины
•Контейнеры
•Сборщики мусора
•...
•https://jvns.ca/zines/
22. Stranger Things
•Приложение перестало стартовать
•Написано на Clojure, запускаем внутри Docker
•Обновили кучу зависимостей
•Качает зависимости на старте и молчит
•В начале нашего кода print не выполняется
23. jstack pid
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:255)
at sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedBytes(SeedGenerator.java:539)
at sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:144)
at sun.security.provider.SecureRandom$SeederHolder.<clinit>(SecureRandom.java:203)
at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:221)
- locked <0x00000000e3a2f5f0> (a sun.security.provider.SecureRandom)
at java.security.SecureRandom.nextBytes(SecureRandom.java:468)
at java.math.BigInteger.randomBits(BigInteger.java:634)
at java.math.BigInteger.<init>(BigInteger.java:623)
at org.bouncycastle.crypto.generators.ECKeyPairGenerator.generateKeyPair(Unknown Source)
at org.bouncycastle.jcajce.provider.asymmetric.ec.KeyPairGeneratorSpi$EC.generateKeyPair(Unknown Source)
at buddy.core.keys.jwk.ec$get_curve.invokeStatic(ec.clj:87)
27. Простой код
•Нет множественному наследованию
•Нет наследованию
•Нет классам (кроме датаклассов)
•Нет мета-программированию
•Нет изменению аргументов функции
28. Математический код
•В статье написано 5 формул
•В коде написано 400 строк
•Баги портят результат
•Баги незаметно портят результат