Costruire software da zero

By John SonmezFebruary 23, 2017

A molti sviluppatori di software piace rendere le cose complicate. Prendono qualcosa che potrebbe essere semplice e facile e, a causa di ciò che la maggior parte delle persone racconta su internet, lo rendono complicato.

Il software dovrebbe essere semplice. Detto questo, è facile capire perché così tanti sviluppatori hanno difficoltà a costruire software da zero. Nella loro mente, è una cosa totalmente complessa e difficile e si bloccano completamente nel mezzo del processo.

Quindi, la domanda è… Come si costruisce un software da zero?

Transcript From The Video

John Sonmez:

Hey, come va? John Sonmez da simpleprogrammer.com. Oggi ho una domanda sulla costruzione di software da zero. Questa è una domanda che ho ricevuto un sacco di volte da un sacco di persone diverse perché questo è qualcosa che è difficile da fare quando sei un principiante, per capire come si potrebbe mai fare questo.

Questa domanda viene da Akash e dice: “Ehi John, i tuoi video sono grandiosi e apprezzo molto i tuoi consigli. Un problema che affronto è che quando si tratta di costruire un grande software, non riesco a pensare a come progettare il tutto da zero. Diciamo, come rompere il tutto in mini sotto-attività e poi implementare ogni sotto-attività e metterle tutte insieme per farlo funzionare. Sarebbe molto bello se poteste guidarmi su come superare questo problema. Grazie in anticipo.”

Quello che vorrei dire qui, Akash, è che quello che vuoi fare è pensare – invece di pensare a prendere un intero sistema, questo tipo di approccio dall’alto verso il basso, scomporlo in tutti questi pezzi, assemblare tutti questi pezzi e vedere come si incastrano, e costruire questo enorme Transformer o Lego da questi enormi Lego. Si vuole pensare allo sviluppo del software più come all’evoluzione.

Quello che intendo dire è che si inizia con qualcosa di veramente semplice. Iniziare con la cosa più semplice che possa funzionare e che non abbia un sacco di caratteristiche e poi evolvere fino a dove si vuole andare, invece di fare quello che si chiama un grande design in anticipo. Ciò non significa che non si debba mai pensare all’architettura generale della cosa e che non si debbano avere i progetti e certe cose in anticipo. In molti casi, non c’è bisogno di farne tanto quanto pensi sia necessario.

Ora, se stai progettando un software che sarà incorporato in un dispositivo elettronico e un ingegnere hardware dovrà sviluppare i circuiti o un chip personalizzato, o qualcosa per farlo funzionare, probabilmente dovrai progettare molte di queste cose in anticipo e probabilmente dovrai farlo. Potreste anche essere limitati lì. Per la maggior parte del software che stiamo costruendo oggi, specialmente applicazioni web e cose del genere o applicazioni mobili, potremmo costruire qualcosa che è molto, molto basilare e poi evolverlo, fare cambiamenti per farlo crescere e aggiungere complessità come necessario.

Una cosa-una ragione per cui questo è così importante è che la rovina dello sviluppo del software, una delle cose peggiori nello sviluppo del software è la complessità. Questo canale si chiama Simple Programmer e la mia attività riguarda il rendere semplice il complesso, perché questo è ciò che dobbiamo fare. Come sviluppatori di software uno dei vostri lavori principali è quello di combattere la complessità perché la complessità entra nel sistema e lo rende difficile da mantenere e lo rende difficile da capire. Rende più probabile la presenza di bug e il fallimento. Vogliamo ridurre la complessità il più possibile. Vogliamo semplificare. Dobbiamo iniziare nel modo più semplice possibile, qual è la cosa più semplice possibile che potrebbe funzionare?

Molte volte nel mondo imprenditoriale, lo chiamano MVP o prodotto minimo realizzabile. Cosa si può fare quando si cerca di costruire un grande sistema software o cosa si può fare è che si può iniziare molto piccolo. Iniziare con una cosa molto, molto piccola. Sto cercando di pensare al libro, ma ho letto questo ottimo libro su qualcosa, penso fosse test driven development step-by-step o qualcosa del genere. Nel libro, stava progettando come un’applicazione Notepad o qualcosa del genere. Ha iniziato con molto, molto incrementale – ha fatto questo in modo molto incrementale e ha iniziato con, credo, la sua applicazione aveva bisogno di un database, ma ha iniziato senza avere un database. Invece, semplicemente memorizzava i dati in file di testo che leggeva dai file di testo. Poi è arrivato al punto in cui aveva bisogno di metterli in un database, e poi ha modificato il programma e gli ha fatto leggere gli stessi dati, ma ha creato un’astrazione per leggere dal database.

Questa è l’evoluzione naturale delle cose ed è così che si può costruire questo software complesso. Vi garantisco che la maggior parte del software complesso che viene costruito oggi è costruito in questo modo. Un sacco di esso non è progettato in anticipo e poi costruire tutti questi pezzi e sperare e pregare che funzionino. Altrimenti si finisce per sforare il budget e la tabella di marcia. Sfortunatamente, questo succede. Se vuoi avere successo, se vuoi essere in grado di farlo, inizia con qualcosa di piccolo. Non c’è niente di difficile in questo mondo. Non c’è niente che sia complesso. È solo che è composto da un mucchio di cose semplici che lo fanno sembrare complesso.

Puoi costruire l’architettura più complessa. Puoi costruire una cosa enorme, ma devi iniziare dal semplice. È tutto composto dal semplice. Poi invece di cercare di prendere tutti quei pezzi, basta iniziare. Fai evolvere la cosa. Iniziare. Costruisci qualcosa. Qual è la cosa più piccola e semplice che puoi mettere fuori e che si avvicina alla funzionalità? Poi iniziate ad aggiungere caratteristiche. Mentre aggiungi le caratteristiche, aggiungi l’architettura per supportarle e crea astrazioni.

Un libro che ti consiglio e che probabilmente ti aiuterebbe a farlo si chiama Clean Code. È uno dei miei libri preferiti di Robert Martin. Raccomando sicuramente quel libro, ma volete evolvere la vostra architettura. Poi l’altra cosa che vorrei dire su questo è che mentre evolvi le cose, stai per creare astrazioni per mantenerle semplici in modo da non avere mai questa enorme, enorme complessità. A volte potrebbe anche essere necessario riscrivere l’intera cosa o riscrivere parti di essa, ma va bene. È così che funziona l’evoluzione del software. È meglio che aggiungere complessità.

Molte volte gli sviluppatori di software vogliono ottimizzare prematuramente. Vogliono rendere le cose estremamente flessibili. Stanno facendo un’ottimizzazione prematura del software perché stanno cercando di costruire questo sistema molto, molto robusto. Questo spesso fallisce perché non sappiamo cosa non sappiamo. Non sappiamo di cosa avremo bisogno, quindi è meglio non cercare di anticiparlo, ma solo dire: “Ok. Ora, ho bisogno di aggiungere questa nuova caratteristica o di farla funzionare in questo modo. Come posso farlo evolvere?”

Ricordate, lo sviluppo del software non è come un ponte. Non è come se aveste gettato del cemento e ora doveste cambiare l’architettura della casa. Il software è malleabile. È come l’argilla. Puoi cambiarlo. Non ha un alto, alto costo per modificarlo e cambiarlo. È necessario utilizzare il più possibile il vantaggio di questo mezzo, che si presta ad un processo evolutivo per sviluppare il software, al contrario di un grande progetto iniziale.

Spero che questo ti aiuti Akash. Ottima domanda. Penso che molte persone abbiano chiesto di questo in passato. Se hai una domanda per me, puoi mandare un’email a [email protected]. Se ti piace questo video, vai avanti e fai clic sul grande pulsante Iscriviti qui sotto se non ti sei già iscritto. Se l’hai fatto, ti ringrazio. Restate sintonizzati fino alla prossima volta. Abbiate cura di voi.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.