(26-05-2012 10:20)dany_dev ha scritto: [ -> ]sicuro? trololol!

Grazie mille per i link. Tuttavia mi spiace quotare il primo articolo linkato. Dice troppe verita persino per i miei gusti. Frequentando informatica noto che son davvero pochi coloro a cui interessa davvero scendere nei dettagli e si accontentano di una preparazione sommaria, di una strada che funziona senza valutarne altre che magari più si adattano al nostro contesto. Però se si chiama computer science un motivo ci sarà

Il problema non è volerle approfondire. Il problema è ricordare.
Gli argomenti che ha elencato vengono generalmente affrontati anche in un corso di laurea triennale, dubito che un programmatore non gli abbia mai visti.
Due anni fa quando ho preparato l'esame di algoritmi e strutture dati, avrei saputo enunciare la complessità di un bel po di algoritmi di ricerca e ordinamento e scrivere al volo il codice di oguno di essi. Così come avrei saputo calcolare e dirti cosa sono l'epsilon macchina, qual'è la differenza tra floating e fixed point, scrivere l'algoritmo per risolvere un sistema triangolare superiore, disegnare a memoria l'header ipv6/ipv4, scrivere l'algoritmo RED per il dropping di pacchetti ect, ect.
Ma non appena hai a che fare con lavori "pratici" trovi bene o male già tutto implementato, ti viene consigliato di utilizzare le implementazioni esistenti e a dimenticare si fa in fretta. Quel che mi è rimasto oggi è un vago "quick sort meglio di bubble sort"... generalizzando "A meglio di B perché dall'uni ricordo più o meno così". Eppure ho colleghi che magari all'esame sono andati peggio di me ma a distanza di anni ricordano ancora "i dettagli".
Secondo me è una questione di come funziona l'apprendimento in ognuno di noi.. potrei prendere la lista di argomenti citati in quell'articolo, ristudiarmeli tutti e son sicuro che passati 2 mesi senza vederli costantemente mi ritroverei a non ricordare una cippa.
credo che il punto non sia: "ricordati tutto a memoria", il punto è: "sappi che esistano, e se incontri un problema dove è richiesta la loro conoscenza, sappi come agire per risolvere il problema al meglio".
Ma il problema è che non lo risolvi al meglio se non ricordi "i dettagli". E' vero che c'è sempre google, c'è sempre la possibilità di ripassare, e se son cose già viste si fa in fretta a nonostante gli anni.
Però l'autore mi sembrava lamentarsi del fatto che tanti colleghi "di alto livello" non ricordino i dettagli "seduta stante". Ma in effetti a fondo articolo specifica:
"It seems I didn’t do a very good job at explaining the core audience for the article, I apologize for that. The programmers I would like to see learning and absorbing these “low level” details are those who would see themselves working in console games".
E io non leggo mai fino a fondo articolo XD
(26-05-2012 16:24)shogo ha scritto: [ -> ]Ma non appena hai a che fare con lavori "pratici" trovi bene o male già tutto implementato, ti viene consigliato di utilizzare le implementazioni esistenti e a dimenticare si fa in fretta. Quel che mi è rimasto oggi è un vago "quick sort meglio di bubble sort"... generalizzando "A meglio di B perché dall'uni ricordo più o meno così". Eppure ho colleghi che magari all'esame sono andati peggio di me ma a distanza di anni ricordano ancora "i dettagli".
Secondo me è una questione di come funziona l'apprendimento in ognuno di noi.. potrei prendere la lista di argomenti citati in quell'articolo, ristudiarmeli tutti e son sicuro che passati 2 mesi senza vederli costantemente mi ritroverei a non ricordare una cippa.
Il punto secondo me è un altro. Non si pretende certo di ricordare a memoria la complessità di ogni algoritmo esistente o di saperlo implementare su ogni linguaggio ed hardware esistente, ma almeno sapere che esistono ed le loro forze/debolezze si

Noi informatici dobbiamo risolvere problemi e, come tale, dobbiamo conoscere al meglio gli strumenti che abbiamo di fronte e selezionare, di volta in volta, il migliore. Non si pretende certo di ricordare che bubble sort è O(n^2) e quicksort O(n log n) ma almeno sapere che quicksort è ottimale alla lunga a costo di una implementazione più complessa ( cosa che non sempre sottovaluterei ) e uno stack ausiliario si
N.B. Io sto parlando di informatico, non di code monkey o programmatore generico che usa sort() con atto di fede. In tal caso, ovviamente, il mio discorso si va a perdere ma son abbastanza sicuro che non sia indirizzato a loro quell' articolo.
(26-05-2012 16:39)dany_dev ha scritto: [ -> ]credo che il punto non sia: "ricordati tutto a memoria", il punto è: "sappi che esistano, e se incontri un problema dove è richiesta la loro conoscenza, sappi come agire per risolvere il problema al meglio".
Si, la penso anche io cosi. Studiare a memoria non serve, grazie ad internet, documentazioni, reference ecc. ecc. ed anzi, può essere controproducente. La forma mentis adeguata però non te la può dare certo una ricerca su internet.
Non e' neanche questione di avere una infarinatura.. l'idea e' di avere un hacker con le mani sporche di codice.
Certe cose devono diventare una seconda natura.. essere efficienti vuol dire non doverci necessariamente pensare.
Se uno deve pensare su qualcosa, vuol dire che sta ancora imparando.. che e' lecito ed e' forse la cosa piu' bella del game dev.. ma allo stesso tempo uno vuole imparare qualcosa di nuovo, non come shiftare i bits 8)
mi sono letto un po' i commenti dell'articolo linkato e molti "veterani", confermano il trend dei giovani di allontanarsi dal basso livello e tra i commenti ho trovato questo:
I have as simple test that only one in twenty programmers get right. What does the following function do?
Codice:
char *func(char *p1, char *p2)
{
char *l1 = p1 ;
while (*l1++ = *p2++) ;
return p1 ;
}
Sinceramente pur non essendo un asso del C++, ci ho messo meno di 10 secondi a capire cosa facesse....mi sento rincuorato xD
(27-05-2012 15:32)dany_dev ha scritto: [ -> ]mi sono letto un po' i commenti dell'articolo linkato e molti "veterani", confermano il trend dei giovani di allontanarsi dal basso livello e tra i commenti ho trovato questo: I have as simple test that only one in twenty programmers get right. What does the following function do?
Codice:
char *func(char *p1, char *p2)
{
char *l1 = p1 ;
while (*l1++ = *p2++) ;
return p1 ;
}
Sinceramente pur non essendo un asso del C++, ci ho messo meno di 10 secondi a capire cosa facesse....mi sento rincuorato xD
20 secondi
Segmentation fault come fosse niente

(27-05-2012 15:32)dany_dev ha scritto: [ -> ]mi sono letto un po' i commenti dell'articolo linkato e molti "veterani", confermano il trend dei giovani di allontanarsi dal basso livello e tra i commenti ho trovato questo: I have as simple test that only one in twenty programmers get right. What does the following function do?
Codice:
char *func(char *p1, char *p2)
{
char *l1 = p1 ;
while (*l1++ = *p2++) ;
return p1 ;
}
Sinceramente pur non essendo un asso del C++, ci ho messo meno di 10 secondi a capire cosa facesse....mi sento rincuorato xD
Ma perché.. dovrebbe funzionare?

Se si non mi rincuoro per niente!
(27-05-2012 15:57)shogo ha scritto: [ -> ]Ma perché.. dovrebbe funzionare? 
Se si non mi rincuoro per niente!
Seh, copia una stringa null-terminated in dest (compreso /0) e restituisce dest.
L'equivalente sarebbe
Codice:
char* func( char* dest, char* src )
{
int i = 0;
for(; src[0] != NULL; ++i )
dest[i] = src[i];
dest[i] = 0;
return dest;
}
Che forse è anche più decente

(27-05-2012 16:33)_tommo_ ha scritto: [ -> ] (27-05-2012 15:57)shogo ha scritto: [ -> ]Ma perché.. dovrebbe funzionare? 
Se si non mi rincuoro per niente!
Seh, copia una stringa null-terminated in dest (compreso /0) e restituisce dest.
L'equivalente sarebbe
Codice:
char* func( char* dest, char* src )
{
int i = 0;
for(; src[0] != NULL; ++i )
dest[i] = src[i];
dest[i] = 0;
return dest;
}
Che forse è anche più decente 
non dovrebbe essere src[i] != NULL ?
