migliorabile ha scritto:
...
Mah vedo un pò di esagerazioni.
Poi fra uno e due anni... corrè il doppio del tempo...
Io direi che sarebbero stato molto più opportuno valutare il lavoro in ore, così anche se le stime sono pur sempre approssimative, lo sono meno che valutare in "uno o due anni".
doc_who:
Se posso darti dei consigli personali, prendili come semplici consigli di un ragazzo che ha una start-up insieme ad un altro programmatore e 2 matematici (un analista che è anche un prof. universitario e uno che si occupa della probabilistica) per lo sviluppo di AI.
Vorrei riferirti di alcuni problemi che ho riscontrato io prima di rilasciare la prima versione, consigli che reputo dovresti illustrare agli addetti al lavoro o trovare relativi addetti al lavoro:
1) Utilizza linguaggi di programmazione/scripting che abbiano tante librerie, non siano tipizzati (tipizzazione debole, quindi con un garbage collector) e supportino il paradigma ad oggetti per tutto le parti del software che non richiedono prestazioni, ed evita le porcherie di windows:
- Tipizzazione debole: Velocità di sviluppo, inutile sviluppare qualcosa con l'impiego di tanto codice per avere prestazioni incredibilmente veloci ma che non facciano differenza all'essere umano, in fondo siamo tutti disposti ad aspettare 3 secondi il caricamento della pagina, mentre fa differenza triplicare la velocità di sviluppo per mettere online il proprio codice;
- ho lavorato nell'IT di una famosa banca dove avevano trattati commerciali con microsoft e usano 90% dei servizi winzozz, non mi sono mai trovato PEGGIO in tutto, in qualsiasi settore dell'immenso stabilimento nel quale lavoravo c'erano problemi dettati da lentezza, bug o continue interruzione dei servizi, oltre al fatto che un server windows devi riavviarlo per aggiornarlo (=spegnerlo), mentre non è praticamente mai necessario alle controparti che utilizzano un kernel unix, quindi vorrebbe dire interrompere il tuo servizio per ogni aggiornamento;
- Il paradigma ad oggetti è fondamentale per mantenere il codice nel tempo, se il codice è organizzato male, è più difficile mantenere il codice nel tempo piuttosto che svilupparlo, quindi costa più denaro e oltretutto costa tanto denaro nel tempo;
Riassunto:
Per il presente direi Python, PHP sono le possibilità (do per assodato che scegli dei programmatori seri che rispettino ciò che ho scritto).
Python: python in ambiente unix ha molte librerie (mentre non posso dire lo stesso per windows visto che molte librerie sono solo per la 2.7 e/o per i 32bit), e molto veloce perchè "ha una struttura intrinsica" che ti permette di non scrivere troppe righe di codice per fare fondamentalmente la stessa cosa, ma non ha molti framework;
PHP: E' un linguaggio ostracizzato molto perchè "è nato male", poteva essere un ottimo linguaggio procedurale ma l'implementazione delle OOP era pessima, per fortuna sono riusciti a colmare questo gap immenso che aveva nei confronti degli altri linguaggi negli ultimi anni, però è pieno di framework e di librerie;
2) Utilizza il C SOLO per le parti di codice che devono richiedere prestazioni e SE POSSIBILE, il C++ se viene trovato il compromesso velocità/mantenibilità del codice, anche se l'assembly è sicuramente quello con cui ottenere le prestazioni migliori, non abbiamo mai avuto la necessità di implementarlo, aggiungere anche per fortuna visto il tempo che ci avrebbe sprecato;
3) Per il database, noi lo abbiamo frammentato, creando un sistema ibrido fra RDBMS e NoSQL: il primo per la mantenibilità e il secondo per la scalabilità e la velocità, abbiamo scelto MongoDB e MariaDB, però laddove ti consiglio MariaDB > ALL other choices (lancio una provocazione agli utilizzatori di PostgreSQL), non faccio lo stesso con MongoDB;
4) Per quanto riguarda il server, onestamente io ti consiglierei una distro sempre aggiornata e mantenuta, io utilizzai ubuntu "ai miei inizi" e per velocità di configurazione, due righe da terminale e monti su quasi tutto... Attualmente utilizziamo un sistema embedded che non ti consiglio perchè il nostro "non è un servizio web", se non "per noi" visto che siamo gli unici che comunichiamo con esso;
Quindi riepilogando:
1) Ricordati utilizza tecnologie "veloci", "facili da mentenere" e possibilmente fatte da altri per sviluppare velocemente;
2) PHP o Python con relativi framework;
3) Un framework per velocizzare/mantenere l'utilizzo di Javascript, come JQuery, oltre al fatto che è sicuramente il framework con più librerie online;
4) RDBMS e NoSQL o anche uno solo dei due, però valutate bene...;
5) HTML5/CSS3 per "la grafica";
6) Server come Ubuntu, Debian, ArchLinux o FreeBSD (io consiglio ubuntu per costi e velocità);
7) Dei buoni programmatore;
"micro-tecnologie" (chiamiamole così) che fanno da contorno e da supporto per la semplificazione del mantenimento del codice come XML/JSON etc... ma che un "buon programmatore" che sa fare una applicazione REST dovrebbe conoscere;
9) Conoscenza dei tools di supporto per sviluppatori come cmake o GIT... " " " ";