Два дня был экспертом на хакатоне по разработке для студентов. Участники, как правило, 4-5 курс, бакалавры и магистры. Многие ребята очень сильные, показали отличный результат, получше, чем у некоторых взрослых программистов с резюме и зарплатой.
Так вот, заметил интересный эффект. Студенты — даже очень компетентные — не могут побороть желание переусложнять систему и использовать чуть ли не все известные им фреймворки и технологии. Даже не знаю, какую аналогию привести — представьте что терапевт делает вам 20 различных видов осмотра на приёме и просит сдать 20 анализов на разные виды вирусов и других болезней, которые ему известны. Вроде и плохого ничего, но и не нужно. С архитектурой приложений аналогично: надо не только знать, что и когда применить, но и чувствовать, что и когда НЕ применять. Это, конечно, приходит с опытом.
Справедливости ради, многие энтерпрайз системы, которые делаются состоявшимися специалистами, тоже переусложнены: условному Твиттеру, конечно же, не нужна никакая тысяча микросервисов. Но там на разработку еще и бизнес влияет и избыток ресурсов, а здесь у студентов тяга к умножению сущностей проявилась особенно ярко и характерно. Например, команда крутых технарей из Бауманки сделала чат-бота на 40 контейнерах, девопс там конечно красавчик, но к дедлайну до конца соединить не успели (хотя всё равно заняли призовое место).
#dev
По теме мне особенно нравится вот эта картинка:
🚀 Вышел стабильный JavaScript движок от Google для Android
Новая стабильная библиотека Jetpack JavaScript Engine позволит разработчикам выполнять JS код в изолированной и ограниченной среде.
class MainActivity : ComponentActivity() {
// Теперь nullable, без lateinit
private var jsSandbox: JavaScriptSandbox? = null
private var jsIsolate: JavaScriptIsolate? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!JavaScriptSandbox.isSupported()) {
Log.e("JS", "JavaScriptSandbox не поддерживается")
return
}
lifecycleScope.launch {
// Создаём и сохраняем в nullable-поле
jsSandbox = JavaScriptSandbox
.createConnectedInstanceAsync(applicationContext)
.await()
jsIsolate = jsSandbox?.createIsolate()
// При выполнении гарантируем, что jsIsolate != null
val result: String = jsIsolate
?.evaluateJavaScriptAsync(JS_SCRIPT_SCRING)
?.await()
?: "Ошибка: isolate не инициализирован"
Log.d("JS", "Результат выполнения: $result")
}
}
override fun onDestroy() {
super.onDestroy()
// Закрываем только если не null
jsIsolate?.close()
jsSandbox?.close()
}
}
#jetpack#js