Software Development for Dummies

Scopo di questo thread e' quello di mettere l'esperienza di qualche utente a disposizione di chi voglia capire, imparare, o avvicinarsi al modo delllo sviluppo software.

Non e' un thread dedicato a chi e' esperto (e di certo non ha bisogno di discutere qui dentro di Flutter vs React Native o di Design Patterns o Functional Programming) ma e' solo per chi vuole fare domande.

Nessuna domanda e' banale o stupida, questo e' proprio il luogo per rispondere a dubbi basic di chi non e' un professionista.

Taggo @Falkner e @Cirano994 solo perche' conosco loro come professionisti, chiunque e' benvenuto a dare contributi.

Personalmente credo di potere essere in grado di rispondere su quasi ogni tecnologia sw esistente in modo autorevole e professionale, visto che sono contemporaneamente dotato di enorme esperienza (aka vecchio di *****) e con una conoscenza trasversale su piu' o meno ogni tipo di tecnologia software a partire dall'assembler fino alle tecnologie piu' moderne, da embedded devices, fino a sistemi web e mobile, da Git a Kubernates, ecc ecc da potendo quindi aiutare piu' o meno tutti.

Questo thread ha una ragione di esistere molto simile a quello aperto da @maxichnusa sulle criptomonete, informare chiunque voglia avvicinarsi al mondo dello sviluppo o devops.
 

carlo314

Fuoriclasse
  Moderatore
  Supporter
Nessuna domanda e' banale o stupida, questo e' proprio il luogo per rispondere a dubbi basic di chi non e' un professionista.
I'll take that as a challenge... :ghigno

Io mi sono sempre chiesto per pura curiositá: come comincia la creazione di un software? Cioé, io nella mia totale ignoranza mi immagino due scenari: i mattoncini del lego, che hai giá e assembli, oppure @marc.overmars che si mette lí a scrivere codici con la penna d'oca come Leonardo scriveva i suoi codici...?

Non so se mi spiego, praticamente: se io ti chiedo di disegnarmi un software per permettermi di gestire le mie fatture, tu parti da elementi giá pronti che assembli e modifichi, o parti da 0?
 
I'll take that as a challenge... :ghigno

Io mi sono sempre chiesto per pura curiositá: come comincia la creazione di un software? Cioé, io nella mia totale ignoranza mi immagino due scenari: i mattoncini del lego, che hai giá e assembli, oppure @marc.overmars che si mette lí a scrivere codici con la penna d'oca come Leonardo scriveva i suoi codici...?

Non so se mi spiego, praticamente: se io ti chiedo di disegnarmi un software per permettermi di gestire le mie fatture, tu parti da elementi giá pronti che assembli e modifichi, o parti da 0?
e' una domanda molto piu' profonda di quanto tu credi.
nel senso che ... chiunque scriva software, di qualunque tipo e uso, deve appoggiarsi su qualcosa esistente. banalmente:
- linguaggio (java, javascript, python, C, ...)
- librerie (cioe' mattoncini che citi)
- framework (cioe' mattoncini che citi)
- librerie personali (cioe' mattoncini che citi)
...

ora, imparare tecnologie sottostanti e' in generale un lavoro gigantico, perche' sono tutte estremamente sofisticate (aka migliaia di pagine di documentazione e mesi di prove per ognuna) quindi quando prendi decisioni devi bilanciare tra:
- tuo know how acquisito negli anni
- features esistenti

la differenza tra un senior architect e un junior developer sta proprio in questa capacita', nella capacita' di contemporaneamente "sapere un po tutto" e la capacita' di scegliere i componenti corretti per quel lavoro

non e' tanto diverso dal lavoro di Conte. se conte sceglie darmian, lo fa perche' ha vincoli di costo (imposti nel caso del sw developer dal budget cliente). E se sceglie vidal e' perche' ha vincoli di tempo e non vuole dedicarne ad insegnare cose che ha gia' insegnato a vidal (cioe' studiare nuove tecnologie) ad altri ecc, anche se magari esistono soluzioni migliori in senso assoluto.

il tuo caso (del sistema di fatture) poi e' molto particolare perche' esiste un ulteriore livello che e' quello della customizzazione vs sviluppo.

Ci sono molti sistemi "a meta' strada", vedi il forum che stai usando. vbulletin e' una piattaforma customizzabile, non scrivi da zero tutto. idem per i sistemi gestionali, non parti mai da zero, ma usi qualcosa di personalizzabile, perche' non sarebbe possibile ripagare lo sforzo.
in questo caso particolare parti dalle specifiche utente/stakeholders, vedi se esiste qualcosa di adattabile/personalizzabile.
se si fai una analisi di tempi e costi, scopri limitazioni, le condividi con il cliente, e se sono accettabili, you go for it.

make vs buy e' comunque un argomento storico e importante nel mondo dello sviluppo software, da sempre.

Idem per un sito web. Che livello di personalizzazione ti serve? basso? ok, no nscassare i maroni, ti installo "un wordpress" (nel senso di un sistema pronto e mediamente personalizzabile) e ti arrangi.
Personalizzazione enorme a livello di funzionalita', integrazione con altri sistemi? ok, va scritto tutto.
Ma anche in questo caso "tutto" non e' mai tutto perche' ti appoggi a framework esistenti per semplificare le cose banali e ripetitive, quello che viene normalmente chiamato "boilerplate code".

E poi ci sono tante considerazioni: quanti utenti avrai? 10 o 1000000000? se la risposta e' 10, non serve una soluzione scalabile all'infinito che costa 10 volte tanto.

E' una domanda importantissima, si potrebbe scrivere non un libro ma moltissimi libri sull'argomento. E non esiste una risposta univoca

In generale:
1) ascolti i requisiti utente (cosa estremamente complicata, perche il cliente non sa mai che ***** vuole e soprattutto vuole tutto senza capire le implicazioni)
2) cerchi di capire cosa e' fondamentale e cosa non lo e'
e poi la tua esperienza ti fa prendere la strada corretta o errata
 

piotor

Pallone d'oro
  Moderatore
I'll take that as a challenge... :ghigno

Io mi sono sempre chiesto per pura curiositá: come comincia la creazione di un software? Cioé, io nella mia totale ignoranza mi immagino due scenari: i mattoncini del lego, che hai giá e assembli, oppure @marc.overmars che si mette lí a scrivere codici con la penna d'oca come Leonardo scriveva i suoi codici...?

Non so se mi spiego, praticamente: se io ti chiedo di disegnarmi un software per permettermi di gestire le mie fatture, tu parti da elementi giá pronti che assembli e modifichi, o parti da 0?
Io non sono un software developper mancoperunkeiser, ma smanetto al computer piu' che altro per data analysis, quindi prendi tutto con le pinze.


Alla fine creare un software (che poi dipende per cosa, un videogioco? un sito?) non e' diverso dal costruire qualsiasi altra cosa "concreta". Devi avere una bozza in mente e andare per gradi. A seconda della complessita' del codice puo' benissimo essere che prima di mettere mano alla testiera si passano ore/giornate a discutere teoricamente su quale sia il migliore approccio.

Nel caso che dici tu piu' o meno funzionerebbe in questo modo:
- prima cosa si costruirrebbe un algoritmo che sia in grado di "processare" la fattura singola, quindi ricevuta la fattura in ingresso ne estrae tutti i metadata (data, cifra, pagante etc) e lo inserirebbe in un database
- poi si farebbe il "motore", i.e. l'algoritmo che data una richiesta e' in grado di sputare fuori un metadato e/o un risultato aggregato.
- poi, solo quando questo e' completato, si lavorerebbe su un'interfaccia che ti permetta di eseguire le richieste (quante fatture ho emesso da meta' marzo a meta' aprile? quante fatture da tizio/caio? etc.)

A spanne. Per ciascun punto, tendenzialmente, chi ci lavora sa gia' dove andare a parare e sfruttare algoritmi gia' scritti. Oggi come oggi, buona parte del lavoro di un software developper non sta tanto nel costruire cose nuove, quanto adattare strumenti che gia' esistono per i tuoi fini. Tutto il mondo digitale e' costruito su layers e layers di roba fatta da altri che si da per scontato funzioni. Qualche anno fa un ragazzo Turco ha mandato KO l'intero Internet perche' ha cambiato due linee di codice (https://qz.com/646467/how-one-programmer-broke-the-internet-by-deleting-a-tiny-piece-of-code/)

E il sempre valido xkcd:
1619553477833.png
 

carlo314

Fuoriclasse
  Moderatore
  Supporter
Grazie per le spiegazioni "user friendly", ma secondo me non siete veri softweristi, quelli li odio, non li capisci mai!!!

Il tester ha ha rilevato queste anomalie, sono effettivamente anomalie o é il risultato che ci aspettavamo?

Dipende da come risponde il PSP al caricamento del ERP su EWM

Ok, considero la tua risposta come un "non lo sappiamo". Come facciamo a scoprirlo?
(segue una spiegazione di 30 secondi con termini mai sentiti prima che nella mia mente suona come "il Cigliegio in fiore sul monte Fukuyama offre riparo alla colomba e allo scorpione"

Ok, quando pensi che sapremo la risposta?
E lí ti sparano una supercazzola sul firewall. Quando menzionano il firewall io mi arrendo anche se mi verrebbe da urlargli "A timeline!!!! I need a fucking timeline!!!!!!"

:D
 
Alto