Software, Startup e preventivi come se fosse Antani

Leggendo sui vari forum o gruppi di Facebook, trovo spesso domande del tipo: "Quanto costa fare un'app o sito web?", "Voglio imparare a programmare: è meglio AngularJS o ReactJS ?" "Cercasi sviluppatore (Nmila linguaggi a caso)" Quindi con questo post spero di chiarire il più possibile ai potenziali startupper o chi vuole imparare a programmare, sulle giuste domande da porsi per scegliere la soluzione più giusta per il proprio caso.
Sentirsi disorientati in questa marea di tecnologie che cambiano, corsi online, tutorial e consigli è normale, però o si acquisisce una visione d'insieme oppure è meglio delegare le scelte tecnologiche ad altri.

Scegliere il linguaggio di programmazione più diffuso (o che costa meno all'ora), scegliere una tecnologia solo perché la usa una grande azienda (vedi Microsoft Silverlight) non è una garanzia di successo del tuo progetto nel lungo termine!

Quale strumento ti serve per risolvere il tuo problema?

Se parlassimo di cucina e qualcuno ci chiedesse "uno strumento per sbucciare", la risposta sarebbe più evidente, ma nello sviluppo software è pieno di guru, mode, trend, best practises,.. forse la differenza sostanziale è che in cucina più o meno tutti conosciamo gli ingredienti, mentre nel software la gran parte delle persone si limitano ad usarli, senza preoccuparsi di capire che dietro ci può essere moltissimo lavoro oppure un sito fotocopia.

Il costo del software dipende da molteplici fattori, i più rilevanti sono:

Funzionalità: quante, come, dove (piattaforme) e cosa deve fare. Togliere le uova da una frittata appena fatta non è semplice, conviene ripartire da zero.

Controllo: cosa devono poter fare gli amministratori, gli utenti, quali casi limite devono essere gestiti dal sw e quali manualmente.

Granularità: se ti serve un blog probabilmente ti conviene prenderne uno già fatto e rifargli il tema, se vuoi fare un'app disruptive "Tinder per le badanti", "Uber per i gelatai con calesse", "un social per gattini" probabilmente è meglio che non parti a modificare un blog, ma ti fai una piattaforma da zero, perché così hai un controllo maggiore.

Manutenzione, testing, backup: spesso viene tralasciato che un software non è un quadro che si appende in salotto, ma è più simile ad un'auto che ha costi variabili in base al consumo e al passare del tempo (le tecnologie evolvono, i bug di sicurezza accadono).

Ma ritorniamo agli strumenti da cucina e al mix di conoscenze e strumenti che ci servono effettivamente per portare a termine il nostro piatto (idea vincente).

  • Linguaggio di programmazione: ce ne sono molti, c, java, php, python, JavaScript, quest'ultimo funziona nel browser web, nel server e volendo anche per programmare dispositivi IoT. Così come nelle lingue parlate, per programmare non è necessario sapere tutti vocaboli del linguaggio, basta avere una base (anche da autodidatta) e avere la conoscenza di qualche argomento sul quale applicarlo (es. piattaforma web, server, ios, android, opengl, arduino, ..) .

Il "coltello da cucina" serve quasi a tutto, è preciso, ma richiede manualità

  • LIbreria: i linguaggi di programmazione spesso vengono usati in contesti specifici, quindi è normale che nascano degli strumenti più ottimizzati, per svolgere un compito ricorrente e focalizzato. Es. ReactJS semplifica la realizzazione dei componenti della UI e il loro aggiornamento al cambiare dei dati. Si applica sia alle WebUI HTML che alle UI native (Android, iOS).

Il "pela patate" è più facile e veloce da usare, funziona su patate e carote, ma non serve per l'aglio o superfici non perfettamente lisce.

  • Framework / CMS: le applicazioni spesso hanno bisogno di funzionalità standard (autenticazione, registrazione utenti, notifiche), i framework spesso assemblano diverse librerie e ti danno un' "applicazione vuota" "standard" sul quale iniziare il tuo progetto. Wordpress, Magento, Ruby on Rails, AngularJS ti danno già una strada tracciata anche se a granularità diverse.

Il "robot da cucina" è velocissimo da usare, fa tante cose, ma non fa tutto. Se devi sbucciare l'aglio probabilmente ti servirà comunque saper usare il coltello e per quanto robot multiuso, stai dando per scontato che avrai sempre la corrente e puoi fare tutto ciò che gli attacchi intercambiabili ti permettono.. e se un attacco si rompe o non trovi più il ricambio?

  • SaaS: Software as a Service, ovvero invece di possedere un software Open Source o Proprietario decidi di usare un software di altri. L'eterno dilemma "vendo su Ebay/Etsy o mi faccio il sito ecommerce?"

"Patatine fritte già fatte dal fast food e consegnate a domicilio", le paghi solo quando le mangi, puoi abbinargli una salsa personalizzata, in pochi minuti te ne friggono per 20 persone, ma non puoi controllare la salatura, la cottura, il tipo di olio,.. se mangi poche volte il fritto oppure non sai quanti invitati verranno effettivamente alla tua festa può anche essere questa un'opzione.

Per concludere, in inglese si usa il termina "launch" quando ci si riferisce a una startup, facendo la similitudine startup = razzo, e non è un caso.
Se voi doveste investire, fare business o guidare un razzo per un viaggio spaziale, non dedichereste un pochino del vostro tempo nel capire come funziona un razzo e/o come è stato costruito?