TGTGInsightтелеграм анализLIVE / telegram public index
← Такты, стеки, два колеса

TGINSIGHT SIMILAR POSTS

Намери подобно съдържание

Изходен канал @clockstackwheels · Post #721 · 26.12

Почему я люблю языки с сильной системой типов, проверяемой статическим анализом кода — хорошо написанная программа является своей собственной спецификацией и позволяет выражать через язык программирования законы существования предметной области. Когда-то давно я писал на ActionScript. Там была система типов, но вот десериализация JSON'ов по-умолчанию была в какой-то общий Object, к полям которого нужно было обращаться ["по_строковому_имени"]. В один момент мне потребовалось написать что-то на C#, который я совсем не знал, я стал гуглить, как десериализовать JSON, и с удивлением обнаружил кучу советов заранее объявить класс со всеми нужными полями и десериализовать в него. "Какой ужас!", — подумал я тогда, — "Это же дико неудобно! А если я не знаю полей JSON? А если их много? Отвратительный язык!" Теперь то я прекрасно понимаю, что JSON это контракт, и что правильная десериализация только такая и должна быть, и что в хорошем API в одном поле никогда не бывает данных принципиально разных типов, и так далее. Нет, если вы набиваете вечерами пет-проект или сидите бессонную ночь на хакатоне, нет ничего плохого в том, чтобы взять простой язык с динамическими типами вроде JavaScript или Python, не требующий описывать данные. Но вот в энтерпрайзе, особенно когда над одним проектом работает много людей (а бывает это очень часто) — хорошее использование системы типов убережёт разработчиков от огромного количества ошибок, будет бить их по рукам, когда они пытаются сделать что-то не то, и будет подсказывать, когда они не уверены в чём-то. С помощью статической типизации можно на уровне кода обозначить правила, по которым ведёт себя предметная область вашей программы в реальном мире. Разработчику не только будет сложно их нарушить, но он ещё и станет узнавать какие-то вещи, которые мог не знать раньше. Например, если мы делаем медицинскую CRM, и больница заводит новых пациентов только тогда, когда знает их группу крови, мы можем объявить тип "Пациент" (или, если точнее, "Карта пациента") и запретить создавать экземпляры этого типа, не передав в конструктор группу крови (которая, в свою очередь, тоже является типом, вероятнее всего ValueObject'ом). Если новый программист пришёл в проект, он, во-первых, не сможет записать в БД некорректную карту пациента. Понятно, мы не учитываем случаи, когда новый программист переделывает модели предметной области — это будет хорошо видно на кодревью. А, во-вторых, даже если ему никто не сказал, что пациенты должны быть с группой крови, он узнает это из кода. И уже будет понимать, что в тех процессах реальной жизни, которые он описывает кодом, карта пациента создаётся только при наличии группы крови. А, значит, нужно искать какой-то способ сначала эту группу крови получить, и только потом создавать карту. Программирование моделирует реальный процесс. В настоящей работе даже на языках с типами, конечно, без должного контроля можно написать что угодно. Нужна управленческая воля, компетентность руководства, понимание опасности техдолга, в идеале отдельные должности для архитекторов, опытные лиды и старшие разработчики. Но когда всё это есть, можно отсекать много проблем ещё на старте и проще погружать новичков. #dev

Hashtags

Резултати

Намерени 8 подобни публикации

Търсене: #dodgersbluejays

当前筛选 #dodgersbluejays清除筛选

📋 𝗢𝗙𝗜𝗖𝗜𝗔𝗟 ✅ 🛰🏆🐦 Alineaciones de los Dodgers y los Blue Jays para el juego 6 de la Serie Mundial. 💭 ¿Tenemos un nuevo campeón o hay juego 7? #️⃣#PlayOffs25#DodgersBlueJays 🗞 | t.me/MLB_Daily

📋 𝗢𝗙𝗜𝗖𝗜𝗔𝗟 ✅ 🛰🏆🐦 Alineaciones de los Dodgers y los Blue Jays para el juego 1 de la Serie Mundial. 💭 ¿Quién se llevará el primer juego de la Serie Mundial? #️⃣#PlayOffs25#DodgersBlueJays 🗞 | t.me/MLB_Daily

🚨 𝐅𝐈𝐍𝐀𝐋 (11 innings) 🏟 Rogers Centre, Toronto 🏆 Serie Mundial, Juego 7 🗓 1/11/ 🛰 Dodgers 5️⃣🔤4️⃣ Blue Jays 🐦 ✅ V: Yoshinobu Yamamoto (5-1) ❌ D: Shane Bieber (2-1) 🛡 SV: - 💥 HR: Bo Bichette (1ro)🐦, Max Muncy (3ro) 🔵, Miguel Rojas (1ro)🛰, Will Smith (2do) 🔵 ⭐️🔵 MVP: Yoshinobu Yamamoto (2.2 INN, 0 CL, 1 H, 1 K, lanzó sin días de descanso) 🤯 #️⃣#PlayOffs25#DodgersBlueJays#Yamamoto 🗞 | t.me/MLB_Daily

🚨 𝐅𝐈𝐍𝐀𝐋 🏟 Rogers Centre, Toronto 🏆 Serie Mundial, Juego 2 🗓 25/10/ 🛰 Dodgers 5️⃣🔤1️⃣ Blue Jays 🐦 ✅ V: Yoshinobu Yamamoto (3-1) ❌ D: Kevin Gausman (2-2) 🛡 SV: - 💥 HR: Will Smith (1ro) 🔵, Max Muncy (2do) 🔵 ⭐️🔵 MVP: Yoshinobu Yamamoto (9.0 INN, 1 CL, 8K) #️⃣#PlayOffs25#DodgersBlueJays#Yamamoto 🗞 | t.me/MLB_Daily

🚨 𝐅𝐈𝐍𝐀𝐋, HAY JUEGO 7 🔥 🏟 Rogers Centre, Toronto 🏆 Serie Mundial, Juego 6 🗓 31/10/ 🛰 Dodgers 3️⃣🔤1️⃣ Blue Jays 🐦 ✅ V: Yoshinobu Yamamoto (4-1) ❌ D: Kevin Gausman (2-3) 🛡 SV: Tyler Glasnow (1ro) 💥 HR: - ⭐️🔵 MVP: Will Smith (1-3, 2B, 1 RBI) #️⃣#PlayOffs25#DodgersBlueJays#WSmith 🗞 | t.me/MLB_Daily

🚨 𝐅𝐈𝐍𝐀𝐋 🏟 Rogers Centre, Toronto 🏆 Serie Mundial, Juego 1 🗓 24/10/ 🛰 Dodgers 4️⃣🔤1️⃣1️⃣ Blue Jays 🐦 ✅ V: Seranthony Domínguez (2-0) ❌ D: Blake Snell (3-1) 🛡 SV: - 💥 HR: Daulton Varsho (3ro) 🐦, Addison Barger (3ro) 🐦, Alejandro Kirk (4to) 🐦, Shohei Ohtani (6to) 🔵 ⭐️🐦 MVP: Addison Barger (Grand Slam de emergente) #️⃣#PlayOffs25#DodgersBlueJays#Barger 🗞 | t.me/MLB_Daily