È un'abilità veramente necessaria da programmare senza la documentazione dell'API? [chiuso]

22

Oggi ho passato a malapena il mio esame di programmazione Java. Dovevo rispondere ad alcune domande generali sul threading che facevo bene e scrivere un piccolo programma thread che era peggio. Dovevo collegare il mio laptop allo schermo del proiettore e scrivere subito il programma. Il mio primo tentativo è stato quello di utilizzare classi anonime, ma ho dimenticato la sintassi esatta. Forse a causa di qualche eccitazione o forse perché le ultime due settimane stavo codificando principalmente in php. Poi ho chiesto è consentito utilizzare la documentazione API. La risposta è stata "NO". Così ho deciso di fare un altro giro e ho implementato Runnable. Il programma stava facendo ciò che è stato richiesto alla fine. Naturalmente gli esaminatori hanno notato il mio primo fallimento e questo ha influito molto sul mio punteggio. Sono rimasto sbalordito dal fatto che non fosse consentito utilizzare la documentazione dell'API.

Quindi, la mia domanda è: è davvero importante poter codificare in modo impeccabile senza la documentazione dell'API? Devo sviluppare questa abilità? È davvero importante nel mondo reale e nell'ambiente di lavoro? Durante i corsi di programmazione mi sono concentrato sui modelli di apprendimento, sullo sviluppo di competenze per scrivere buone applicazioni di progettazione, sulle competenze per utilizzare le API e trovare rapidamente le informazioni necessarie. Non stavo cercando di imparare come programmare senza la documentazione dell'API. È obbligatorio durante le interviste di lavoro (codifica senza documentazione API)?

    
posta bancer 12.01.2012 - 19:34
fonte

11 risposte

39

In Real Life ™, classificherei questa abilità come "bella da avere", ma non è affatto necessaria. In un ambiente universitario è diverso, tuttavia.

Una capacità di codificare senza documentazione può essere utilizzata come indicazione indiretta della familiarità dello studente con il soggetto. In un certo senso, vedervi codificare qualcosa senza toccare la documentazione dice al professore che avete praticato l'uso dell'API prima - facendo i compiti e altri compiti, o magari programmando per divertimento da soli. Una persona intelligente con una comprensione superficiale dell'API in questione dovrebbe essere in grado di trovare quasi tutte le API Java da sola, esaminando la documentazione. Non è una coincidenza: ci si aspetta spesso che i programmatori apprendano sul lavoro, e la documentazione dell'API per i sistemi di programmazione popolari, incluso Java, è strutturata per aiutare i programmatori a imparare rapidamente. La documentazione spesso fornisce esempi brevi e autonomi, illustrando il concetto in modo sintetico e conciso.

Funziona direttamente contro l'obiettivo del professore di misurare la tua conoscenza della materia (al contrario di misurare quanto sei intelligente). Quindi non è irragionevole chiederti il codice senza guardare la documentazione.

NOTA: ho modificato questa risposta in risposta a una modifica della domanda.

    
risposta data 12.01.2012 - 19:58
fonte
21

C'era un ragazzo una volta che aveva un piccolo bug nel suo codice, quindi lo portò a StackOverflow e chiese aiuto. StackOverflow: Java (generazione di numeri senza ripetizioni) . Ho guardato il suo codice e gli ho fatto notare che il suo Hashset era perennemente pieno di valori, ma non è mai stato cancellato. Quindi, mi ha chiesto: "come lo si elimina?" Devo ammettere che non sono particolarmente fiero della risposta che ho dato.

Devi assolutamente conoscere le cose di base che usi ogni giorno. Devi conoscerli tutti e devi conoscerli bene. Ma solo le cose di base.

Per tutto il resto, l'importante è sapere che c'è qualcosa là fuori che fa ciò che vuoi. Precisamente quale classe devi usare, precisamente quale metodo devi chiamare, e precisamente quali parametri devi passare ad esso, è qualcosa che non ti serve per tenere occupati preziosi neuroni del tuo cervello. Ecco a cosa serve la documentazione, ed è per questo che sono stati inventati gli IDE con completamento automatico. E se arriva il momento critico, c'è sempre StackOverflow e l'interwebz più grande là fuori.

Chiedere ai programmatori di conoscere a memoria le API è come chiedere agli avvocati di conoscere a memoria il codice legale e tutti i precedenti. È inutile Un esercizio di futilità.

    
risposta data 12.01.2012 - 22:14
fonte
8

No. Sarei morto senza la possibilità di cercare dalla documentazione dell'API. L'unica volta che non ce l'ho è quando sto cercando di eseguire il debug di qualcosa in cui non riesco ad accedere alla documentazione. Quindi "eseguo il reverse engineering" dei pezzi api e cut-n-paste, se necessario.

È importante avere una buona idea di cosa sia l'API e quale parte sia meglio usare, ma conoscere i nomi dei metodi, i nomi delle variabili ... non è proprio necessario.

    
risposta data 12.01.2012 - 20:33
fonte
8

Is it a really required skill to program without API documentation?

Non direi che è richiesto ma è

abilità molto desiderabile

IMNSHO.

Ho trascorso alcuni mesi a programmare in stretta collaborazione con il ragazzo che conosce API notevolmente migliore di me. È molto più produttivo - semplicemente perché può saltare i documenti API controlla che distrae me.

Qui, sto parlando di scioltezza. A proposito di essere non solo capace di qualcosa ma fluente.

Sai cosa vuol dire essere fluente? È quando per qualcuno che ti guarda appare come se scrivessi il codice mentre digiti ...

  • ... Come se il codice giusto scorre semplicemente dalle dita sullo schermo. Come se non si controllassero i documenti, tutorial e manuali dell'API. In realtà, fai controlla tutti, ma è invisibile perché è tutto nella tua testa. Hai tutta la conoscenza di cui hai bisogno proprio lì nel tuo cervello - carica, carica e pronta per l'uso.

... Questa è una conoscenza fluente. È quando ti ci vuole un minuto per fare ciò che richiede un novellino all'ora. Ne vale la pena, davvero. Puzza di vittoria.

Se conosci perfettamente l'API alcuni e se memorizzi correttamente come ti sembra, questa memoria ti guiderà ulteriormente in come diventare più produttivo lavorando con qualsiasi altra API.

    
risposta data 12.01.2012 - 20:40
fonte
3

Nel lavoro non ho mai avuto una situazione in cui non avessi accesso alla documentazione. D'altro canto, avere la comprensione della lettura e la comprensione generale per essere in grado di interpretare la documentazione mal scritta è sempre utile.

Dovresti conoscere i modelli e la struttura delle tue API, ma sapere esattamente dove sono le cose non è particolarmente utile.

Alla SFU Computing Science, gli esami a libro chiuso rappresentano tra il 70% e il 100% dei nostri voti. La teoria è che gli esami mettono alla prova la tua comprensione del materiale del corso e della tua adattabilità. In realtà, tutto ciò che realmente prova sono i tuoi nervi, la tua qualità / durata del sonno, il tuo ingegno e le tue tecniche di memorizzazione meccanica - nessuna delle quali è necessaria né accademicamente né per un tipico lavoro nel settore del software.

    
risposta data 12.01.2012 - 20:44
fonte
2

Per tutto tranne la tua ultima domanda: La conoscenza enciclopedica di qualsiasi documentazione API non è importante. Ovviamente programmerai più velocemente se conosci ogni dettaglio di ogni metodo di ogni classe, ma non è un'aspettativa ragionevole.

Alla tua ultima domanda: Ci si può aspettare che tu conosca le specifiche di alcune classi senza la documentazione dell'API. Se sai prima di entrare nell'intervista che verrai sottoposto a test, o se il lavoro è molto focalizzato (cioè: farai il threading tutto il giorno), allora potresti ragionevolmente aspettarti di conoscere le classi correlate in dettaglio.

Addendum: Dovresti chiarire bene prima di ogni esame con il tuo professore / istruttore esattamente quali materiali saranno forniti e quali materiali potresti portare. Supponi che tutto ciò che non hanno esplicitamente accettato non è permesso. Ho avuto corsi in cui potevo solo portare le basi per scrivere, dove potevo portare tutti i libri che desideravo e dove potevo portare esattamente un foglio a doppia faccia con tutto ciò che volevo. Gli esami sono solitamente strutturati attorno a quali materiali sono consentiti.

    
risposta data 12.01.2012 - 21:08
fonte
2

API docs! = sintassi del linguaggio.

Posso capire quando qualcuno non conosce i nomi esatti di varie classi Java e dei loro metodi. Non li conosco e codifico in Java ogni giorno. Sarei perso senza la documentazione o l'onnipotente completamento automatico dell'IDE, specialmente quando si tratta dell'API standard di Java, che è ben noto per la sua prolissità nei nomi di variabili / classi / metodi.

Tuttavia, come hai detto tu stesso, non è qualcosa che di solito si trova nei documenti che non potresti ricordare. È la sintassi per le classi interne - questa è una caratteristica della lingua stessa non qualcosa da memorizzare dai documenti.

Se penso che gli studenti dovrebbero (in molti casi) essere autorizzati a utilizzare i documenti per le API standard, penso che chiunque voglia superare un esame di programmazione dovrebbe conoscere la sintassi della lingua. E non intendo alcuni casi bizzarri che solo i designer di lingua conoscono, solo quelli standard - come quello del tuo esempio.

    
risposta data 12.01.2012 - 21:14
fonte
2

In Eclipse puoi scrivere obj. e premere ctrl + spazio e proverà a completare automaticamente dandoti tutte le opzioni di metodo per l'oggetto dato. Se questo non funziona per qualche motivo, l' API Java contiene il resto delle risposte. Sarebbe difficile pensare a un giorno in cui non ho fatto Google su come fare qualcosa.

La scuola è una storia completamente diversa però.

    
risposta data 24.01.2012 - 18:01
fonte
2

IMHO, il mondo accademico di solito fa schifo nella produzione di buoni ingegneri del software. Solo le persone che codificano per divertimento dopo le lezioni hanno la possibilità di realizzare qualcosa nei progetti del mondo reale.

Inoltre, il mondo accademico non riguarda la produzione di sviluppatori, il mondo intero tratta di come risolvere problemi astratti e fare ricerca. È molto lontano dall'applicazione pratica per la maggior parte del tempo. E i ricercatori non sono necessariamente dei bravi programmatori.

E l'apprendimento dell'API tramite il cuore fa schifo. C'è autocompletamento / google / msdn / javadocs per cercare tutti gli angoli, perché qualcuno dovrebbe voler tenere tutto ciò che è nel loro cervello in ogni momento? Le funzioni più comuni che imparerai in poche settimane / mesi, tutto il resto può essere consultato in pochi secondi se conosci la sintassi, la struttura e le idee generali.

Poi di nuovo, alcune persone continuano a scrivere codice in editor di testo e ricordare i nomi delle funzioni a memoria, non è necessariamente sbagliato, ma se ne sono fanatici, hai il tuo professore.

Inoltre, anche se conosci a memoria i nomi delle funzioni e i parametri, è comunque consigliabile verificarli nell'ultimo documento API. strtok andava bene in uno scenario a thread singolo 10 anni fa, non va bene al giorno d'oggi. Se impari solo nomi e parametri, non saprai mai che la funzionalità potrebbe essere deprecata o se sono state inventate alternative migliori.

Le lingue cambiano, quindi devi cambiare con loro, ricordando che un modo vero non va bene per quello.

    
risposta data 03.02.2012 - 03:43
fonte
1

Se inizi a lavorare su qualche progetto per un po 'di tempo non breve usando una api prima o poi imparerai molto bene l'API. Credo che questa sia una competenza del tutto superflua, dal momento che non conosco nessuno che non dia mai un'occhiata a nessuna documentazione (msdn, man pages, ecc ...)

tuttavia le università sono un universo completamente diverso, quindi non sorprenderti se fallisci perché non conosci il nome typedef del parametro 10.th di CreateWindowEx, per esempio.

    
risposta data 13.01.2012 - 08:15
fonte
1

Direi, non è necessario, è fisicamente impossibile per il cervello umano memorizzare così tante informazioni, ma è comunque necessario conoscere le basi o le cose più utilizzate, poiché non ci sono molte quelli da memorizzare. Altrimenti, è impossibile memorizzare tutto ciò che c'è su java.

Inoltre, è ingiusto che un insegnante desideri che i suoi studenti conoscano tutto, o che lo usino per sapere se programmano con una lingua, oltre agli esercizi o ai progetti che ti assegna. Per me è come voler sapere cosa fai quando non vai a scuola o fai lavori correlati.

EDIT: Ovviamente, ciò che l'insegnante ti chiede dipende da lui, alcuni insegnanti valutano la teoria più mentre altri danno valore alla pratica e non gli interessa se non capisci tutto.

    
risposta data 24.01.2012 - 16:09
fonte

Leggi altre domande sui tag