È davvero un'abilità necessaria per programmare senza documentazione API? [chiuso]


22

Oggi ho superato a malapena il mio esame di programmazione Java. Ho dovuto rispondere ad alcune domande generali sul threading che ho fatto bene e scrivere un piccolo programma threaded che era peggio. Ho dovuto collegare il mio laptop allo schermo del proiettore e scrivere subito il programma. Il mio primo tentativo è stato di utilizzare classi anonime ma ho dimenticato l'esatta sintassi. Forse a causa dell'eccitazione o forse perché nelle ultime due settimane stavo scrivendo principalmente in php. Quindi ho chiesto se è 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. Ovviamente gli esaminatori hanno notato il mio primo fallimento e ciò ha influenzato notevolmente il mio punteggio. Sono rimasto sorpreso dal fatto che non fosse consentito utilizzare la documentazione API.

Quindi, la mia domanda è: è davvero importante essere in grado di scrivere codice senza documentazione 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, sviluppando abilità per scrivere buone applicazioni di progettazione, abilità per usare le API e trovare rapidamente le informazioni necessarie. Non stavo cercando di imparare a programmare senza la documentazione API. È indispensabile durante le interviste di lavoro (codifica senza documentazione API)?


2
Penso che stia chiedendo della documentazione , in particolare dei riferimenti API.

3
@bancer - Non è possibile utilizzare le classi java native non ha senso. Sembra che non fossi preparato per l'esame.
Ramhound,

27
Nel mondo reale avrai sempre accesso alla documentazione. Ho una memoria terribile e provo a concentrarmi sulla logica generale della mia applicazione ed evito di riempire la mia mente di inutili memorizzazione di cose che possono essere facilmente consultate. Purtroppo il mondo accademico (e il mondo delle certificazioni) è in qualche modo diverso e spesso si pone l'accento sulla memorizzazione senza senso. I miei studi universitari erano principalmente in matematica e fisica, ma ricordo che dovevo memorizzare molte formule ecc. Che spreco di tempo.
Antonio2011a,

11
@ Antonio2011a - Conoscere l'API della lingua che stai utilizzando NON è "memorizzazione inutile". Quanto più conosci l'API, tanto meglio sarai in grado di programmare, perché sceglierai le classi e i metodi appropriati per la tua soluzione. Non puoi sceglierli se non sai che esistono. Naturalmente, nessuno conosce l'intera API Java; è troppo grande. Ma è sempre bene conoscerne il più possibile.
Dawood dice di ripristinare Monica il

9
@DavidWallace Forse non ero chiaro. Ovviamente non sto dicendo che non è necessario conoscere l'API !! Solo che non è necessario memorizzare i nomi esatti di classi, metodi, ordine dei parametri e altri dettagli che intorpidiscono la mente! Tutto quello che devi veramente sapere è che esiste e come è utile, quindi puoi cercare i dettagli durante la codifica. Come ho detto prima, la mia memoria è terribile e, onestamente, avrei potuto usare un corso un'ora fa, e se mi avessi dato un pezzo di carta bianco non sarei stato in grado di ricordare i dettagli esatti.
Antonio2011a,

Risposte:


39

In Real Life ™, classificherei questa abilità come "piacevole da avere", ma per nulla necessaria. In un contesto universitario, tuttavia, è diverso.

Una capacità di codificare senza documentazione può essere utilizzata come indicazione indiretta della familiarità dello studente con la materia. In un certo senso, vederti codificare qualcosa senza toccare la documentazione dice al professore che ti sei già esercitato a usare l'API - facendo i compiti e altri compiti, o forse anche programmando per divertimento da solo. Una persona intelligente con una comprensione superficiale dell'API in questione dovrebbe essere in grado di farlocapire quasi tutte le API Java da solo guardando la documentazione. Questa non è una coincidenza: spesso i programmatori devono apprendere sul lavoro e la documentazione dell'API per i sistemi di programmazione più diffusi, incluso Java, è strutturata per aiutare i programmatori ad apprendere rapidamente. La documentazione spesso fornisce brevi esempi autonomi, illustrando il concetto in modo breve e conciso.

Questo funziona direttamente contro l'obiettivo del professore di misurare la tua conoscenza della materia (invece di misurare quanto sei intelligente). Quindi non è irragionevole chiederti il ​​codice senza consultare la documentazione.

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


2
Dalla mia lettura, gli esaminatori stavano esaminando la sua capacità di memorizzare la documentazione dell'API. Sapeva cosa fare, ma non ricordava la sintassi.
Paul,

@Paul Ho letto le modifiche e ho cambiato la mia risposta. Pensavo che l'OP stesse chiedendo qualcosa di completamente diverso. Grazie!
dasblinkenlight,

2
+1 per identificare il vero problema qui. Se si trattasse di un colloquio di lavoro, l'intervistatore sarebbe più interessato a come risolvere un problema e probabilmente ti sarà permesso semplicemente scrivere la tua migliore approssimazione della sintassi sulla lavagna. Quando hai trascorso gli ultimi tre mesi a studiare materiale specifico e sei stato testato su quel materiale specifico, è ragionevole non avere una politica di "Internet aperto".
StriplingWarrior il

@Paul: hai ragione
bancer

21

C'era una volta un ragazzo che aveva un piccolo bug nel suo codice, quindi lo portò su 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 cancelli?" Devo ammettere che non sono particolarmente orgoglioso 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 quello che vuoi. Proprio quale classe devi usare, esattamente quale metodo devi chiamare e precisamente quali parametri devi passare ad essa, è qualcosa di cui non hai bisogno per tenere occupati preziosi neuroni del tuo cervello. Ecco a cosa serve la documentazione ed è per questo che sono stati inventati IDE con completamento automatico. E se la spinta arriva a spingere, c'è sempre StackOverflow e l'interwebz maggiore 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à.


+1: È incredibilmente difficile apprendere l'intera API di una libreria di grandi dimensioni come quella Java, semplicemente per le sue dimensioni. Conoscere quali funzionalità generali sono fornite dai pacchetti è tuttavia più semplice (ad esempio, javax.imageio fornisce una gestione avanzata delle immagini, non che io l'abbia mai usata) e alcune strutture di base dovrebbero essere apprese. In particolare, java.lang e java.util verranno utilizzati praticamente in tutti i programmi Java di sempre.
Donal Fellows,

9

È davvero un'abilità necessaria per programmare senza documentazione API?

Non direi che è richiesto ma lo è

abilità molto desiderabile

IMNSHO.

Ho trascorso alcuni mesi a scrivere codice in stretta collaborazione con il ragazzo che conosce API notevolmente meglio di me. Lui è così molto più produttivo - semplicemente perché può saltare documentazione API controlla che distraggono me.


Qui, sto parlando di scioltezza. Sull'essere non solo capace di qualcosa ma fluente.

Sai cosa vuol dire essere fluenti? È quando per qualcuno che ti guarda sembra che tu digiti mentre digiti ...

  • ... Come se il codice giusto scorresse semplicemente dalle dita allo schermo. Come se non controllassi i documenti API, tutorial e manuali. In realtà, si fa controllare tutti, ma questo è invisibile perché è tutto nella tua testa. Hai tutta la conoscenza di cui hai bisogno proprio lì nel tuo cervello: carica, caricata e pronta per l'uso.

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

Se padroneggi la fluidità in alcune API e se memorizzi correttamente come ci si sente, questa memoria ti guiderà ulteriormente su come diventare più produttivo lavorando con qualsiasi altra API.


Non penso che la sua domanda sia se alla fine dovresti conoscere o meno la documentazione, ma se dovresti o meno memorizzare la documentazione come per gli esami.
Rei Miyasaka,

@ReiMiyasaka bene, se salti l'esame prolisso, potresti notare questo: "Quindi, la mia domanda è: è davvero importante essere in grado di programmare in modo impeccabile senza la documentazione API? Devo sviluppare questa abilità? È davvero importante nel mondo reale e nell'ambiente di lavoro? " . Mi sono concentrato su questa parte della domanda perché, vedi, la mia recente esperienza mi ha fatto sentire piuttosto a disagio sull'idea che può semplicemente passare con una risposta elementare che non è necessaria . Giusto?
moscerino del

2
+1 per coprire il costo del passaggio dal contesto ai documenti di riferimento. Dover cercare ogni passo rallenta le cose a gattonare.
Wyatt Barnett,

8

No. Sarei morto senza la possibilità di consultare la 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" dell'API e taglia e incolla i pezzi secondo necessità.

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


3

Nel lavoro non ho mai avuto una situazione in cui non avevo accesso alla documentazione. D'altra parte, avere la comprensione della lettura e la comprensione generale per essere in grado di interpretare la documentazione scritta male diventa utile in ogni momento.

Alla fine dovresti conoscere i modelli e la struttura delle tue API, ma sapere esattamente dove si trova tutto 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 la tua adattabilità. In realtà, tutto ciò che mette alla prova sono i tuoi nervi, la tua qualità / durata del sonno, il tuo ingegno e le tue tecniche di memorizzazione automatica, nessuna delle quali è necessaria né accademicamente né per un lavoro tipico nell'industria del software.


2

A tutti 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: è possibile che tu debba conoscere le specifiche di alcune classi senza la documentazione dell'API. Se sai prima di entrare nel colloquio che verrai testato o se il lavoro è molto focalizzato (cioè: farai il threading tutto il giorno), allora potresti ragionevolmente aspettarti di dover conoscere in dettaglio le classi correlate.


Addendum: dovresti chiarire molto prima di qualsiasi esame con il tuo professore / istruttore esattamente quali materiali saranno forniti e quali materiali puoi portare da solo. Supponiamo che non sia consentito tutto ciò che non hanno esplicitamente concordato. Ho seguito corsi in cui potevo solo portare le basi per scrivere, dove avrei potuto portare tutti i libri che desideravo, e dove avrei potuto portare esattamente un foglio a due facciate con tutto quello che volevo su di esso. Gli esami sono generalmente strutturati su quali materiali sono ammessi.


2

Documenti API! = Sintassi del linguaggio.

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

Tuttavia, come hai detto tu stesso, non è nulla che di solito si trova nei documenti che non ricordi. È la sintassi per le classi interne - questa è una caratteristica del linguaggio stesso, non qualcosa da memorizzare dai documenti.

Per quanto 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 del linguaggio. E non intendo alcuni casi bizzarri che solo i designer linguistici conoscono, ma solo quelli standard, come quello nel tuo esempio.


2
Non credo valga nemmeno la pena di memorizzare la sintassi. Funzionalità, motivi e trucchi, sì, ma sintassi, no. Lavoro con troppe lingue perché sia ​​significativo e penso che questo diventi vero anche per la maggior parte degli sviluppatori.
Rei Miyasaka,

@ReiMiyasaka: Non penso che dovresti memorizzare le specifiche dell'intero linguaggio, ma dovresti conoscere la sintassi di base in qualsiasi momento. Cerchi nei documenti come scrivere un ciclo in una qualsiasi delle tue lingue? O semplicemente lo codice?
Goran Jovic,

In verità lavoro con parecchie lingue e spesso dimentico la sintassi esatta anche per le cose di base !! Quindi mi trovo sempre a dover fare riferimento ai documenti.
Antonio2011a,

@ Antonio2011a: ammetto che lo faccio anch'io, soprattutto quando utilizzo linguaggi meno comuni. Ma per molti studenti il ​​linguaggio appreso è il primo linguaggio di programmazione in assoluto. Se uno studente non ha nemmeno imparato la sintassi, non dice nulla di buono su come si è preparato per l'esame.
Goran Jovic,

@Goran In realtà non necessariamente, per due motivi: 1. la compilazione in background mi dice quando sbaglio la sintassi e 2. i loop sono secondari (quasi inesistenti) in lingue come Haskell e ML. Le lingue sono più diverse di quanto si possa pensare. Anche se passo la maggior parte del mio tempo a scrivere codice in F # e ricordo solo vagamente Haskell, riesco ancora a capire bene il codice Haskell, ricordando di prendere nota delle differenze semantiche. D'altro canto, sono d'accordo sul fatto che l'apprendimento di una prima lingua dentro e fuori è estremamente importante e troppo spesso trascurato.
Rei Miyasaka,

2

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

La scuola è una storia completamente diversa però.


2

IMHO, il mondo accademico di solito puzza nel produrre buoni ingegneri del software. Solo le persone che programmano 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 riguarda come risolvere i problemi astratti e fare la ricerca. È molto lontano dall'applicazione pratica per la maggior parte del tempo. E i ricercatori non sono necessariamente buoni programmatori.

E l'apprendimento dell'API a memoria puzza. C'è il completamento automatico / google / msdn / javadocs per cercare tutti gli angoli e le fessure, perché qualcuno dovrebbe tenere tutto ciò nel suo cervello in ogni momento? Le funzioni più comuni che imparerai in poche settimane / mesi, tutto il resto può essere cercato in pochi secondi se conosci la sintassi, la struttura e le idee generali.

Inoltre, alcune persone ancora codificano negli editor di testo e ricordano a memoria i nomi delle funzioni, non è necessariamente sbagliato, ma se sono fanatici a riguardo, hai il tuo professore.

Inoltre, anche se conosci a memoria nomi e parametri di funzioni, è comunque una buona idea 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 obsoleta o inventare alternative migliori.

Le lingue cambiano, quindi è necessario cambiare con loro, ricordare che un vero modo non va bene per quello.


1

se inizi a lavorare su qualche progetto per un periodo non breve usando un'API prima o poi imparerai molto bene l'API. credo che questa sia un'abilità totalmente inutile poiché non conosco nessuno che non abbia mai dato un'occhiata a nessuna documentazione (msdn, pagine man, ecc ...)

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


Non coerente con la mia esperienza di università. Semmai, tendevano a essere ossessionati dalla teoria e mancavano di attenzione ai dettagli. O il livello è sceso a quello delle scuole professionali?
Approgrammatore

non sto parlando di un'università, e questo è solo un esempio di ciò che potresti vedere da qualche parte nel mondo in qualche università. come sapete, non sono tutti uguali
Hayri Uğur Koltuk il

2
Le università hanno sempre avuto un certo grado di memorizzazione e rigurgito. Avrei calcolato il calcolo se avessi avuto un libro CRC disponibile invece di dover memorizzare tabelle integrali.
Blrfl,

1

Direi che no non è necessario, è fisicamente impossibile per il cervello umano memorizzare così tante informazioni, ma è ancora necessario conoscere le basi o le cose più utilizzate, dal momento che non ce ne sono molte da memorizzare . Altrimenti, è impossibile memorizzare tutto ciò che c'è su Java.

Inoltre, è ingiusto che un insegnante voglia che i suoi studenti sappiano tutto, o che usino quello 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 un lavoro correlato.

EDIT: Ovviamente, ciò che l'insegnante ti chiede dipende da lui, alcuni insegnanti apprezzano maggiormente la teoria, mentre altri apprezzano la pratica e non si preoccupano se non capisci tutto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.