java >>>> C :p





il mio commento è dato dal fatto che non sopporto quelli che parlano senza dire un cazzo: è inutile dire ad una persona "stai sbagliando" senza spiegarne il motivo perchè tale commento risulta "inutile come un buco del culo sul gomito" (cit.).

di cagamiracoli ne ho conosciuti parecchi; di gente che miracoli ne fa davvero, credo al massimo 2.

ovviamente io non sono nessuno per dirti di evitare di postare qui, però volevo solo farti notare la totale inutilità dei tuoi ultimi 4-5 post (che se vuoi ti riporto).
cerca di essere costruttivo ( )

btw, hai perfettamente ragione per il discorso dello studio, solo che spesso non c'è il tempo materiale e si apprende meglio da colleghi + esperti.
Spesso i colleghi più esperti capiscono molto di implementazioni etc ma molti hanno ancora l'idea che il software si faccia a forza di hacks.

La mia esperienza viene per la maggior parte nel campo della games industry e spesso mi sento dire "ah nella games industry sì che ci sono i programmatori con le palle con anni di esperienza bla bla". Vi assicuro che non è così e tanti oldschool programmano ancora come se le cose si scrivessero in C/Assembler quando hanno in mano VS2005
oh, già va meglio...



Ah bè allora, in effetti nelle games industry Java va fortissimo =_=
Ti ripeto, una gestione della memoria molto discutibile, una difficoltà nel configurare un ambiente di sviluppo in scenari complessi non da poco, performance variabili a seconda della piattaforma di esecuzione...etc etc

Ci credo che sono problemi aggirabili, ma il fatto stesso di aggirarli mi fa capire che questo Java non è poi la scelta migliore in quanto a pulizia, semplicità, etc etc...

IMHO il C++ è ancora superiore sotto tutti questi aspetti.
Io ti sto dicendo che programmare bene va al di là del linguaggio e nella games industry non usiamo Java ma C++ ma questo non vuol dire che bisogna per forza programmare in maniera semplice e pulita.

Tu hai detto la magica frase che programmare bene è un'utopia e io ti ho detto che hai torto e che potresti ancora imparare prima che sia troppo tardi.

Ricordati che i bisogni di un produttore di software non riguardano ottimizzazione codice, gestione memoria e amenità tecniche. Si parla di profitti e costi, programmare in c++ costa di più di programmare in Java.

Ovviamente quando lavori su videogiochi i requirements di performance necessitano di utilizzare linguaggi a basso livello ma per i tool e script ad esempio si usano spesso altri strumenti quali .NET e LUA...
La games industry è particolare, in moltissimi altri campi il C++ non va più bene.
E poi sei molto divertente a menzionare il fatto che dipende dalla piattaforma. Almeno Java è multipiattaforma



Io ho detto che JAVA, è un utopia, non la buona programmazione.

Soprattutto io ho detto: Java infrange la regola del KISS.
E da lì sono partite le tue lezioni di vita, dal dolce tono spocchioso!


Ma almeno cerca di motivare no?


Scusa, ma sei serio O_O ?

Qualche post fa ho elencato alcuni motivi per cui ritengo che java non ispiri affatto a rispettare la regola del KISS (si Are, anche io preferisco le milf ).

Comunque...


=> Garbage collection: come si può rispettare una corretta implementazione della programmazione orientata agli oggetti (OOP) quando un modulo non può deallocare le risorse da lui allocate, lasciando questo compito ad un altro modulo?
Nell'OOP un modulo che alloca delle risorse deve anche occuparsi della loro deallocazione.
Chi mi garantisce che il Garbage Collector entri realmente in funzione quando serve, liberando una risorsa importante (un file handler ad esempio) in tempi utili?
Questo è un grosso punto a sfavore di Java nel contesto della 'modularità del codice'.
Codice non modulare = non semplice da mantenere = tempo = costi!

Qualche volta ho letto robe del tipo:
Il Garbage Collector è utile perchè se ho due oggetti che referenziano gli stessi dati, dal momento in cui gli oggetti stessi non si occupano di liberare le risorse, non devo scegliere quale tra i due oggetti dovrà deallocare le risorse.
=_= Una situazione di questo tipo vuol dire che ci sono dei problemi di progettazione = tempo = costi!

=> java non usa puntatori: falso..in java tutto è un puntatore! Se voglio usare un tipo di dato che non sia incluso nel linguaggio sono costretto a lavorare sempre in upcasting.
Bello vero ? Un po' meno bello quando upcasto su un tipo errato e ricevo un bellissimo errore in release, quando ho già consegnato il software al cliente.

=> Divoratore di memoria: Supponiamo di avere un bel vettore, un simpatico array di 100milioni di oggetti INT. Un INT alloca circa 16 bytes di memoria nel migliore dei casi (la grandezza di un puntatore, solitamente 4 bytes, più 4 bytes per l'engine di allocazione della memoria = 8 bytes + 4bytes l'INT a 32bit). 16*100.000.000 = 1.600.000.000 che sono circa 1,5 GB.
In C++ un vettore contenente 100milioni di oggetti non supera i 400MB.

=> Impossibilità di effettuare l'Overload degli Operatori: minori possibilità di astrazione = codice più difficile da mantenere, più difficile da leggere e potenzialmente inefficente.


Se vuoi posso continuare! Qualcos'altro riesco a tirarlo fuori!

A supporto di queste mie parole ti porto l'esempio che vivo ogni giorno: una applicazione mission critical di un servizio pubblico, piattaforma tecnologica J2E+ORACLE su AIX e WebSphere.
Essendo un applicazione che necessità di costanti aggiornamenti per stare dietro alla folle burocrazia italiana, posso garantirti che noi dell'assistenza ne vediamo di tutti i colori ogni qualvolta venga aggiornato qualcosa.

Il bello è che dietro c'è gente che di libri di ingegneria ne ha masticati fin troppi, capaci di lavorare a livelli di astrazione assurdi, ma che spesso si incrinano davanti ai limiti di piattaforme tecnologiche che promettono ciò che non possono mantenere..questo porta al compromesso.


in base a questo posso dirti che secondo il mio umile parere Java non aiuta il programmatore nel seguire la sacrosanta regola oldschool del KISS.




E senti questa:


DATI => Sistema WEB ORACLE/WebSphere => SISTEMA WINNT/MS SQL (per l'esattezza sono 103DB) => Batch in COBOL/VB => ADABAS su mainframe Z (quello vecchio però) con z/OS e CICS



Ovviamente deve essere garantita la congruenza dei dati su tutti i sistemi (compreso uno parallelo, sempre ORACLE/WebSphere con cui viene effettuato uno scambio la sera ).
Ahhhh! Qualcosa non mi tornava!

Ora ho capito che non hai assolutamente idea di cosa sia il KISS!
Magari leggiti i libri che ti ho detto, altrimenti amen continua a pensare come vuoi.

Solo una domanda:

Che cosa intendi con sta frase?


Mi fai un esempio?
Prima spiegami tu cosa vuoi dimostrare

ho la netta impressione che se avessi detto 'Java è il linguaggio più KISS KISS del mondo' ti saresti lo stesso accanito.

Io ti ho dato le mie motivazioni, tu non hai dato nessuna motivazione e sei anche andato OT.

Renditi conto che chi legge questo topic potrebbe anche farsi girare giustamente le scatole.
una domanda ad entrambi... io ricordo che "KISS" è una filosofia per la quale si deve mantenere il codice più semplice e diretto possibile, in modo che chi dovesse andare a rimettere mano al codice dovesse poterci capire tutto in fretta e, qualora ci fossero dei bug, fosse immediato capire dove risiede l'errore.

ho sempre inteso male l'acronimo?



Ci sono varie interpretazioni a seconda del contesto in cui viene usato, ma grosso modo è proprio come dici te!

Se non sbaglio la sua paternità è da attribuirsi al caro Einstein.
Il KISS nel software è a livello di software design, la gestione della memoria non c'entra una fava.

Comunque non hai spiegato la tua teoria sull'upcasting su tipo sbagliato.

Ti ricordo che un casting up deve essere sempre safe altrimenti vuol dire che non sai programmare object oriented. Mi sa che infatti è così
Si chiama principio di Liskov, è una delle basi del object oriented eh

Quindi se ho interpretato bene il tuo esempio hai detto "se non so programmare Java da runtime error!!!". Bravo!




Ho usato il termine 'risorse' non a caso.

Il mio discorso verte proprio sul fatto che è molto difficile coniugare un buon design con prestazioni ed efficenza.

Ed è proprio da problemi di design che può nascere il rischio di un upcast non sicuro, molto difficile da scovare perchè in fase di debug può non generare nessun errore.

Aggiungo anche che nelle grosse realtà aziendali, spesso chi si occupa di fare le specifiche di un programma, che andranno quindi ad influire pesantemente sul design, non conosce affatto questi limiti.