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

Резултати

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

Търсене: #tifa

当前筛选 #tifa清除筛选
3D-Hmangaupload

@hmangafor3duploadtest · Post #21025 · 15.01.2025 г., 15:52

#S_SUMMER_BREAK_1-3 #s_Turn" #s_Very_Merry_Christmas#s_Very_Merry_Christmas" #s_Villa" #s" #Sabotage_1#Sabotage_1-4 #Sabotage_2#Sabotage_3#Sabotage_4#Sail#Saisyuusyoku#sakai08#Santa_Swap#Satisfying_Needs_1-6 #saw2008#SD大學陪讀生林婉晴_1-3 #Secret_of_Beauty_03#Secret_of_Beauty_1_-_Stone_Lady #Secret_Of_Beauty_2_-_Orc_rituals #SedesDis#Seduction_the_Beast#Serge3d#Serge3dx#Serge3DX#ses21#Shassai#Sherry#Shin_Sangoku_Musou#Shiun#Shiun红忍的修行01-07 #Shota_Kyoudai_no_Itazura#ShowTime#silvercastle#Singer#Sister#Skin_Exprience#Skinsuit_Possession#Sky_Cat#Skyla_-_Wrong_Turn #SLASH#Slave_Plan_01-不知火舞は惨めではない #Slave_Plan_02-女性ファイター春麗をキャプチャ #Sleeping_Beauty_5#Sleeping_Beauty_6#Slumber_party#smallflyingrat#smallflyingrat(小飛鼠) #Smarttigerd#Sneaky_Bastard#Son_of_beach#Sorceress_Lori_-_Beyond_Death_+_Sold_To_Demons #Sound_Garden_1-6 #Space_Pirate#speaKCiao#Spellbound#Spider-Man #SR_3DART#Stacy_001#Stacy_002#Stan#stan13#Steri-Nurse_-_Come_Join_Us #Steri-Nurse_-_The_Lesson #Stopwatch_时间停止器#Strangers_in_a_StrangeLand_1-3 #Succubus_Trap#Sunny_Wheel#Supafly#SupaFly#sycosistg#System_Failure#t_Get_Caught_Again_+_Knight_Elayne_-_Game_of_Mischief" #TachibanaKizen#taka4106#Tanya_&_The_Succubus_1-3 #Telsis#Tento#TERESA_-_CAN_NOT_GO_BACK #The_Amazing_Elinor#The_Audition1-2\xa0\xa0 #The_Bang_1-2 #The_Boy_and_his_Dog#The_Call#The_Cloud_Temple_&_Redux #The_Crafty_Maid#The_Evolution_of_Hermine_Granger#The_exchange_student#The_Fall_Of_The_Swan_vol.1\xa0\xa0 #The_Fall_Of_The_Swan_vol.2_-_The_nightmare_of_a_ballet_dancer #The_Final#The_First_Prize#The_Game_+_Luna #The_Gift#The_Grandma_01-03 #The_healer#The_Holiday#The_Meeting#The_Obsession#The_Park_1#the_pw#The_Sacrifice_Ch.1-16_Completed\xa0\xa0 #The_Scandalous_Proposal#The_Sex_Toy#The_Special_Offer#The_Tan_1-8 #The_Trip_to_Egypt_1-3 #The_Trophy_Wife#The_Ultimate_Beast_Hunt#The_Ultimate_Goblin_Gangbang#The_Ultimate_Goblin_Gangbang_2#The_Ultimate_Slave_Training#The_Violinist#The_visit#TheMaskedMoron#Thief_Ezri_-_Don #Tia_001#Tia_002#Tifa#Tifa_Rape_by_Zombies#Tifa_vs_Fly#Tifa_vs_Roach#tifalover#Tim#TiMOP#tin_a_fool_TikTok_MYLF" #Tira#TKXS#Together_In_The_Army_Now_1#Together_In_The_Army_Now_2#Tomb_Raider_-_The_Death_Mask_of #TOP1女销售经理的堕落01#TOP1女销售经理的堕落02#TOP1女销售经理的堕落03#Tough_luck#Trade_Winds#Training_Tsunade#Trap_Video#Trapped_With_The_Orc#Trick_or_Treat_1_&_2_-_Jack_O #Trick_or_Treat_3_Part1_&_Part2 #Trick_or_Treat_4_-_Part_3 #Trick_or_Treat_4_-_Part_4 #Trick_or_Treat_4_-_Part_5 #Trick_or_Treat_4_Part1#Trick_or_Treat_4_Part2#Trick_or_Treat_5#Trick_or_Treat+Timmy_strikes_back\xa0\xa01-5 #TrophyMom_1-4 #trust2018#Tslove#uglive_4k#Uiafox#UIAFOX#Ultra_Lady_tai_Hae_Seijin#Ultraman#Ultrarin#uncensored#Underworld#uuG#V-Kris #V1z3t4#valentine_1-3 #Valentine_Episode_1#Valentine_Episode_1-2 #Valentine_Episode_2#Vampire_Hunters#Vchan

Hashtags

#s_summer_break_1#s_turn#s_very_merry_christmas#s_villa#s#sabotage_1#sabotage_2#sabotage_3#sabotage_4#sail#saisyuusyoku#sakai08#santa_swap#satisfying_needs_1#saw2008#sd大學陪讀生林婉晴_1#secret_of_beauty_03#secret_of_beauty_1_#secret_of_beauty_2_#sedesdis#seduction_the_beast#serge3d#serge3dx#ses21#shassai#sherry#shin_sangoku_musou#shiun#shiun红忍的修行01#shota_kyoudai_no_itazura#showtime#silvercastle#singer#sister#skin_exprience#skinsuit_possession#sky_cat#skyla_#slash#slave_plan_01#slave_plan_02#sleeping_beauty_5#sleeping_beauty_6#slumber_party#smallflyingrat#smarttigerd#sneaky_bastard#son_of_beach#sorceress_lori_#sound_garden_1#space_pirate#speakciao#spellbound#spider#sr_3dart#stacy_001#stacy_002#stan#stan13#steri#stopwatch_时间停止器#strangers_in_a_strangeland_1#succubus_trap#sunny_wheel#supafly#sycosistg#system_failure#t_get_caught_again_#tachibanakizen#taka4106#tanya_#telsis#tento#teresa_#the_amazing_elinor#the_audition1#the_bang_1#the_boy_and_his_dog#the_call#the_cloud_temple_#the_crafty_maid#the_evolution_of_hermine_granger#the_exchange_student#the_fall_of_the_swan_vol#the_final#the_first_prize#the_game_#the_gift#the_grandma_01#the_healer#the_holiday#the_meeting#the_obsession#the_park_1#the_pw#the_sacrifice_ch#the_scandalous_proposal#the_sex_toy#the_special_offer#the_tan_1#the_trip_to_egypt_1#the_trophy_wife#the_ultimate_beast_hunt#the_ultimate_goblin_gangbang#the_ultimate_goblin_gangbang_2#the_ultimate_slave_training#the_violinist#the_visit#themaskedmoron#thief_ezri_#tia_001#tia_002#tifa#tifa_rape_by_zombies#tifa_vs_fly#tifa_vs_roach#tifalover#tim#timop#tin_a_fool_tiktok_mylf#tira#tkxs#together_in_the_army_now_1#together_in_the_army_now_2#tomb_raider_#top1女销售经理的堕落01#top1女销售经理的堕落02#top1女销售经理的堕落03#tough_luck#trade_winds#training_tsunade#trap_video#trapped_with_the_orc#trick_or_treat_1_#trick_or_treat_3_part1_#trick_or_treat_4_#trick_or_treat_4_part1#trick_or_treat_4_part2#trick_or_treat_5#trick_or_treat#trophymom_1#trust2018#tslove#uglive_4k#uiafox#ultra_lady_tai_hae_seijin#ultraman#ultrarin#uncensored#underworld#uug#v#v1z3t4#valentine_1#valentine_episode_1#valentine_episode_2#vampire_hunters#vchan