{"id":36115,"date":"2019-10-31T22:09:42","date_gmt":"2019-10-31T19:09:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\/"},"modified":"2019-10-31T22:09:42","modified_gmt":"2019-10-31T19:09:42","slug":"ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","title":{"rendered":"Non accettate di sviluppare ci\u00f2 che non comprendete","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Non accettate di sviluppare ci\u00f2 che non comprendete\" src=\"\/wp-content\/uploads\/2019\/07\/bfd609d9004113a76d59d8763d82c6d0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDall'inizio del 2018 ricopro il ruolo di lead\/capo\/sviluppatore senior nel team \u2014 chiamalo come vuoi, ma il punto \u00e8 che sono completamente responsabile di uno dei moduli e di tutti gli sviluppatori che ci lavorano. Questa posizione mi offre una nuova prospettiva sul processo di sviluppo, poich\u00e9 sono coinvolto in un numero maggiore di progetti e partecipo pi\u00f9 attivamente alle decisioni. Recentemente, grazie a queste due circostanze, ho realizzato quanto profondamente il livello di comprensione influisca sul codice e sull'applicazione.<\/p>\n<p>Il pensiero che desidero esprimere si riduce al fatto che la qualit\u00e0 del codice (e del prodotto finale) \u00e8 strettamente legata a quanto le persone che progettano e scrivono codice siano consapevoli di ci\u00f2 che stanno facendo.<\/p>\n<p>Forse ora state pensando: \u00abGrazie, capitano. Certo, sarebbe utile capire cosa si sta scrivendo. Altrimenti, con lo stesso successo potremmo assumere un gruppo di scimmie per battere a caso sulla tastiera e rimanere soddisfatti\u00bb. E avete assolutamente ragione. Pertanto, prendo per scontato che sappiate che avere una visione generale di ci\u00f2 che state facendo \u00e8 necessario. Questo pu\u00f2 essere definito come un livello zero di comprensione, e non lo approfondiremo. Approfondiremo invece cosa \u00e8 necessario comprendere e come ci\u00f2 influisca sulle decisioni che prendete ogni giorno. Se avessi saputo queste cose in anticipo, mi sarei risparmiato un sacco di tempo sprecato e codice discutibile.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAnche se qui non vedrete una sola riga di codice, ritengo comunque che quanto detto finora sia di grande importanza per scrivere codice di qualit\u00e0, espressivo. <\/p>\n<h4>Primo livello di comprensione: Perch\u00e9 non funziona?<\/h4>\n<p>\nI programmatori di solito raggiungono questo livello nelle fase iniziali della loro carriera, talvolta anche senza alcun aiuto da parte degli altri \u2014 almeno secondo le mie osservazioni. Immaginate di aver ricevuto un report di errore: una certa funzione nell'app non funziona, deve essere riparata. Come vi comportereste?<\/p>\n<p>Il principio standard \u00e8 il seguente:<\/p>\n<ol>\n<li>Trovare il frammento di codice che causa il problema (come fare ci\u00f2 \u00e8 un argomento a parte, che affronto nel mio libro sul codice obsoleto)<\/li>\n<li>Apportare modifiche a quel frammento<\/li>\n<li>Assicurarsi che il bug sia stato corretto e che non siano emersi errori regressivi<\/li>\n<\/ol>\n<p>\nOra concentriamoci sul secondo punto: le modifiche al codice. Ci sono due approcci a questo processo. Il primo: comprendere cosa sta accadendo nel codice attuale, identificare l'errore e correggerlo. Il secondo: procedere a tentoni, ad esempio aggiungere +1 a un'istruzione condizionale o a un ciclo, vedere se questa funzione funziona nello scenario desiderato, poi provare qualcos'altro e cos\u00ec via all'infinito.<\/p>\n<p>L'approccio corretto \u00e8 il primo. Come spiega nel suo libro Code Complete Steve McConnell (che consiglio vivamente), ogni volta che apportiamo modifiche al codice, dobbiamo essere in grado di prevedere con sicurezza come questo influenzer\u00e0 l'applicazione. Riporto una citazione a memoria, ma se la correzione di un bug non funziona come previsto, questo dovrebbe mettere in guardia seriamente, e devi mettere in discussione tutto il tuo piano d'azione.<\/p>\n<p>Per riassumere, per eseguire una buona correzione di bug che non comprometta la qualit\u00e0 del codice, \u00e8 necessario comprendere sia la struttura del codice che la fonte del problema specifico.<\/p>\n<h4>Secondo livello di comprensione: Perch\u00e9 funziona?<\/h4>\n<p>\nQuesto livello si raggiunge in modo molto meno intuitivo rispetto al precedente. Io, essendo ancora un programmatore alle prime armi, l'ho appreso grazie al mio capo, e successivamente l'ho spiegato pi\u00f9 volte ai neofiti.<\/p>\n<p>Questa volta immaginiamo che ti siano arrivati due report di bug: il primo riguarda lo scenario A, il secondo lo scenario B. In entrambi gli scenari c'\u00e8 qualcosa che non va. Pertanto, inizi a lavorare prima sul primo bug. Seguendo i principi che abbiamo derivato per il primo livello di comprensione, esamini attentamente il codice pertinente al problema, scopri perch\u00e9 fa comportare l'applicazione in quel modo nello scenario A e apporti le modifiche sensate che producono esattamente il risultato che ti aspettavi. Tutto procede alla grande.<\/p>\n<p>Poi passi allo scenario B. Ripeti lo scenario nel tentativo di provocare l'errore, ma - sorpresa! - ora tutto funziona come dovrebbe. Per confermare la tua ipotesi, annulli le modifiche apportate durante il lavoro sul bug A e il bug B ritorna. La tua correzione ha risolto entrambi i problemi. Che fortuna!<\/p>\n<p>Non ti aspettavi affatto questo. Hai trovato un modo per correggere l'errore nello scenario A e non hai idea del perch\u00e9 abbia funzionato anche per lo scenario B. A questo punto, \u00e8 molto allettante pensare che entrambi i compiti siano stati eseguiti con successo. \u00c8 abbastanza logico: l'idea era di correggere gli errori, giusto? Ma il lavoro non \u00e8 ancora finito: devi ancora capire perch\u00e9 le tue azioni hanno corretto l'errore nello scenario B. Perch\u00e9? Perch\u00e9 potrebbe essere che questo funzioni su principi errati, e quindi dovrai cercare un'altra soluzione. Ecco un paio di esempi di casi simili:<\/p>\n<ul>\n<li>poich\u00e9 la soluzione non \u00e8 stata scelto specificamente per l'errore B tenendo conto di tutti i fattori, potresti aver danneggiato involontariamente la funzione C. <\/li>\n<li>non \u00e8 escluso che ci sia anche un terzo bug nascosto, legato alla stessa funzione, e che la tua correzione del bug condizioni il corretto funzionamento del sistema nello scenario B su di esso. Adesso tutto sembra andare bene, ma un giorno questo terzo bug verr\u00e0 notato e corretto. Allora nello scenario B si verificher\u00e0 di nuovo un errore, e speriamo solo l\u00ec.<\/li>\n<\/ul>\n<p>\nTutto ci\u00f2 introduce caos nel codice e un giorno ti ricadr\u00e0 addosso \u2014 probabilmente nel momento meno opportuno. Dovrai raccogliere la volont\u00e0 per dedicare tempo a capire perch\u00e9 tutto sembri funzionare, ma ne vale la pena. <\/p>\n<h4>Terzo livello di comprensione: Perch\u00e9 funziona?<\/h4>\n<p>\nLa mia recente realizzazione \u00e8 proprio legata a questo livello, e probabilmente \u00e8 stato proprio questo a darmi il maggior vantaggio se solo ci fossi arrivato prima.<\/p>\n<p>Per essere pi\u00f9 chiari, esaminiamo un esempio: il tuo modulo deve essere compatibile con la funzione X. Non conosci molto bene la funzione X, ma ti \u00e8 stato detto che per la compatibilit\u00e0 con essa devi usare il framework F. Altri moduli che si integrano con X funzionano proprio con quello.<\/p>\n<p>Il tuo codice non \u00e8 mai stato in contatto con il framework F dalla nascita, quindi implementarlo non sar\u00e0 cos\u00ec semplice. Ci\u00f2 comporter\u00e0 gravi conseguenze per alcune parti del modulo. Tuttavia, sei completamente immerso nello sviluppo: scrivi codice per settimane, testi, rilasci versioni pilota, ricevi feedback, correggi errori di regressione, scopri complicazioni impreviste, non rispetti le scadenze inizialmente concordate, scrivi ancora un po' di codice, testi, ricevi riscontri, correggi errori di regressione: tutto questo per implementare il framework F.<\/p>\n<p>E ad un certo punto realizzi - o forse senti dire da qualcun altro - che il framework F potrebbe non offrirti compatibilit\u00e0 con la funzione X. Forse tutto questo tempo e sforzi sono stati dedicati a qualcosa di completamente diverso.<\/p>\n<p>Qualcosa di simile accadde una volta durante un progetto di cui ero responsabile. Perch\u00e9 \u00e8 successo? Perch\u00e9 non comprendevo bene quale fosse il nocciolo della funzione X e come fosse collegata al framework F. Cosa avrei dovuto fare? Chiedere a qualcuno che propone il compito di sviluppo di spiegare chiaramente come il piano d'azione previsto porti ai risultati desiderati, invece di semplicemente ripetere ci\u00f2 che era stato fatto per altri moduli, o credere sulla parola che cos\u00ec si doveva fare per la funzione X.<\/p>\n<p>L'esperienza di questo progetto mi ha insegnato a rifiutare di avviare il processo di sviluppo finch\u00e9 non abbiamo una chiara comprensione del motivo per cui ci viene chiesto di eseguire determinate azioni. Rifiutare in modo diretto. Quando ricevi un incarico, il primo impulso \u00e8 quello di prenderlo immediatamente, per non sprecare tempo. Ma la politica di 'congelare il progetto finch\u00e9 non entriamo nei dettagli' pu\u00f2 ridurre drasticamente il tempo sprecato. <\/p>\n<p>Anche se ti stanno facendo pressione, cercando di farti iniziare a lavorare, anche se non comprendi le motivazioni - resisti. Prima di tutto, chiarisci qual \u00e8 l'obiettivo di questo compito e decidi se \u00e8 la strada giusta per raggiungere l'obiettivo. Ho dovuto scoprire tutto questo a mie spese - spero che il mio esempio possa semplificare la vita a chi lo legge.<\/p>\n<h4>Quarto livello di comprensione: ???<\/h4>\n<p>\nNella programmazione c'\u00e8 sempre qualcosa da imparare e credo di aver toccato solo la superficie del tema della comprensione. Quali altri livelli di comprensione hai scoperto nel corso degli anni di lavoro con il codice? Quali decisioni hai preso che hanno avuto un effetto positivo sulla qualit\u00e0 del codice e delle applicazioni? Quali decisioni si sono rivelate errate e ti hanno insegnato una lezione preziosa? Condividi le tue esperienze nei commenti.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/digital-ecosystems\/blog\/459588\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u043b\u0438\u0434\u0430\/\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0438\u043a\u0430\/\u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u2014 \u043d\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043a\u0430\u043a \u0445\u043e\u0442\u0438\u0442\u0435, \u043d\u043e \u0441\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043e\u0442\u0432\u0435\u0447\u0430\u044e \u0437\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438 \u0437\u0430 \u0432\u0441\u0435\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u042d\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043c\u043d\u0435 \u043d\u043e\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u044f \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u0435\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-36115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0439\u0442\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:09:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:09:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Non accettare di sviluppare ci\u00f2 che non comprendi | ProHoster","description":"Dall'inizio del 2018 ricopro una posizione.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0435 \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0439\u0442\u0435\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 | ProHoster","og:description":"\u0421 \u043d\u0430\u0447\u0430\u043b\u0430 2018 \u0433\u043e\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u044e \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c.","og:url":"https:\/\/prohoster.info\/it\/blog\/news\/ne-soglashajtes-razrabatyvat-to-chego-ne-ponimaete","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:09:42+00:00","article:modified_time":"2019-10-31T19:09:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36115","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 02:04:38","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:50:24","updated":"2026-01-22 02:04:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=36115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/36115\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/27008"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=36115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=36115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=36115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}