Ist es eine wirklich notwendige Fähigkeit, ohne API-Dokumentation zu programmieren? [geschlossen]

22

Ich habe heute kaum meine Java-Programmierprüfung bestanden. Ich musste einige allgemeine Fragen zum Thema Threading beantworten, was ich gut konnte, und ein kleines Threading-Programm schreiben, das schlechter war. Ich musste meinen Laptop an den Projektor anschließen und das Programm sofort schreiben. Mein erster Versuch war, anonyme Klassen zu verwenden, aber ich habe die genaue Syntax vergessen. Vielleicht aus Aufregung oder weil ich in den letzten zwei Wochen hauptsächlich in PHP programmiert habe. Dann habe ich gefragt, ob die API-Dokumentation verwendet werden darf. Die Antwort war "NEIN". Also habe ich mich für einen anderen Weg entschieden und Runnable implementiert. Das Programm tat, was am Ende verlangt wurde. Natürlich bemerkten die Prüfer, dass ich zum ersten Mal gescheitert war, was sich sehr auf meine Punktzahl auswirkte. Ich war erstaunt, dass die API-Dokumentation nicht verwendet werden durfte.

Meine Frage lautet also: Ist es wirklich wichtig, ohne API-Dokumentation fehlerfrei codieren zu können? Sollte ich diese Fähigkeit entwickeln? Ist es in der realen Welt und im Arbeitsumfeld wirklich wichtig? Während der Programmierkurse konzentrierte ich mich auf das Lernen von Mustern, die Entwicklung von Fähigkeiten, um gute Designanwendungen zu schreiben, Fähigkeiten, um API zu verwenden und die erforderlichen Informationen schnell zu finden. Ich habe nicht versucht zu lernen, wie man ohne API-Dokumentation programmiert. Ist es ein Muss bei Vorstellungsgesprächen (Codierung ohne API-Dokumentation)?

Tänzerin
quelle
2
Ich denke, er fragt nach Dokumentation , speziell API-Referenzen.
3
@bancer - Es macht keinen Sinn, native Java-Klassen zu verwenden. Es hört sich so an, als wären Sie nicht auf die Prüfung vorbereitet.
Ramhound
27
In der realen Welt haben Sie immer Zugriff auf die Dokumentation. Ich habe ein schreckliches Gedächtnis und versuche, mich auf die allgemeine Logik meiner Anwendung zu konzentrieren, und vermeide es, mich mit dem sinnlosen Auswendiglernen von Dingen zu beschäftigen, die leicht nachgeschlagen werden können. Leider ist die akademische Welt (und die Welt der Zertifizierungen) etwas anders und es wird oft ein Schwerpunkt auf sinnloses Auswendiglernen gelegt. Mein Grundstudium bestand hauptsächlich aus Mathematik und Physik, aber ich erinnere mich, dass ich mir eine Menge Formeln usw. merken musste. Was für eine Zeitverschwendung.
Antonio2011a
11
@ Antonio2011a - Die API der von Ihnen verwendeten Sprache zu kennen, ist KEIN "sinnloses Auswendiglernen". Je besser Sie mit der API vertraut sind, desto besser können Sie programmieren, da Sie geeignete Klassen und Methoden für Ihre Lösung auswählen. Sie können sie nicht auswählen, wenn Sie nicht wissen, dass sie existieren. Natürlich kennt niemand die gesamte Java-API. es ist zu groß. Aber es ist immer gut, so viel wie möglich zu wissen.
Dawood sagt, Monica am
9
@ DavidWallace Vielleicht war ich nicht klar. Natürlich sage ich nicht, dass Sie nicht mit der API vertraut sein müssen !! Nur, dass Sie sich nicht die genauen Namen von Klassen, Methoden, Parameterreihenfolgen und anderen verblüffenden Details merken müssen! Alles, was Sie wirklich wissen müssen, ist, dass es existiert und wie nützlich es ist, dann können Sie die Details während des Codierens nachschlagen. Wie ich schon sagte, ist mein Gedächtnis schrecklich, und ehrlich gesagt hätte ich vor einer Stunde einen Kurs brauchen können, und wenn Sie mir ein leeres Stück Papier gegeben hätten, wäre ich nicht in der Lage, mich an die genauen Details zu erinnern.
Antonio2011a

Antworten:

39

In Real Life ™ würde ich diese Fähigkeit als "schön zu haben" einstufen, aber überhaupt nicht erforderlich. Im universitären Umfeld ist dies jedoch anders.

Die Fähigkeit, ohne Dokumentation zu codieren, kann als indirekter Hinweis auf die Vertrautheit der Schüler mit dem Thema verwendet werden. In gewisser Weise können Sie feststellen, dass Sie etwas codieren, ohne die Dokumentation zu berühren, und dem Professor mitteilen, dass Sie die API bereits zuvor verwendet haben - indem Sie Ihre Hausaufgaben und andere Aufgaben erledigen oder vielleicht sogar zum Spaß selbst programmieren. Eine kluge Person mit flüchtigem Verständnis der betreffenden API sollte dies könnenFinden Sie fast jede Java-API selbst heraus, indem Sie sich die Dokumentation ansehen. Dies ist kein Zufall: Von Programmierern wird häufig erwartet, dass sie bei der Arbeit lernen, und die API-Dokumentation für gängige Programmiersysteme, einschließlich Java, soll Programmierern das schnelle Lernen erleichtern. Die Dokumentation enthält häufig kurze, in sich geschlossene Beispiele, die das Konzept kurz und prägnant veranschaulichen.

Dies wirkt direkt gegen das Ziel des Professors, Ihr Wissen über das Thema zu messen (im Gegensatz dazu, wie klug Sie sind). Daher ist es nicht unvernünftig, Sie nach Code zu fragen, ohne die Dokumentation zu lesen.

HINWEIS: Ich habe diese Antwort als Antwort auf eine Bearbeitung der Frage bearbeitet.

dasblinkenlight
quelle
2
Nach meiner Lektüre untersuchten die Prüfer seine Fähigkeit, die API-Dokumentation auswendig zu lernen. Er wusste, was zu tun war, erinnerte sich aber nicht an die Syntax.
Paul
@Paul Ich habe die Änderungen gelesen und meine Antwort geändert. Ich dachte, das OP fragt etwas ganz anderes. Vielen Dank!
dasblinkenlight
2
+1 zur Identifizierung des tatsächlichen Problems hier. Wenn es sich um ein Vorstellungsgespräch handeln würde, wäre der Interviewer mehr daran interessiert, wie Sie ein Problem lösen, und Sie könnten wahrscheinlich nur Ihre beste Annäherung an die Syntax auf das Whiteboard schreiben. Wenn Sie die letzten drei Monate damit verbracht haben, bestimmtes Material zu lernen, und Sie werden an diesem bestimmten Material getestet, ist es vernünftig, keine "Open-Internet" -Richtlinie zu haben.
StriplingWarrior
@ Paul: Sie haben Recht
Bancer
21

Es gab einmal einen Typen, der einen kleinen Fehler in seinem Code hatte, also brachte er ihn zu StackOverflow und bat um Hilfe. StackOverflow: Java (Generieren von Zahlen ohne Wiederholungen) . Ich schaute auf seinen Code und machte ihn darauf aufmerksam, dass sein HashSet ständig mit Werten gefüllt war, aber es wurde nie gelöscht. Also fragte er mich: "Wie klärst du das?" Ich muss zugeben, dass ich nicht besonders stolz auf die Antwort bin, die ich gegeben habe.

Sie müssen unbedingt die grundlegenden Dinge kennen, die Sie jeden Tag verwenden. Sie müssen sie alle kennen und Sie müssen sie gut kennen. Aber nur das grundlegende Zeug.

Für alles andere ist es wichtig zu wissen, dass es etwas gibt, das tut, was Sie wollen. Mit genau welcher Klasse Sie arbeiten müssen, mit welcher Methode Sie arbeiten müssen und mit welchen Parametern Sie sie übergeben müssen, müssen Sie die wertvollen Neuronen Ihres Gehirns nicht beschäftigen. Dafür ist Dokumentation gedacht, und deshalb wurden IDEs mit Autocomplete erfunden. Und wenn es hart auf hart kommt, gibt es immer StackOverflow und das größere Interwebz da draußen.

Das Bitten von Programmierern, APIs auswendig zu kennen, ist vergleichbar mit dem Bitten von Anwälten, den Rechtskodex und alle Präzedenzfälle auswendig zu kennen. Es ist sinnlos. Eine Übung in der Sinnlosigkeit.

Mike Nakis
quelle
+1: Es ist unglaublich schwierig, die gesamte API einer großen Bibliothek wie der Java-Bibliothek zu lernen, einfach aufgrund ihrer Größe. Zu wissen, welche allgemeinen Funktionen von Paketen bereitgestellt werden, ist jedoch einfacher (z. B. stellt javax.imageio eine erweiterte Bildverarbeitung bereit, nicht, dass ich sie jemals verwendet habe), und einige Kernfunktionen sollten erlernt werden. Insbesondere werden java.lang und java.util in praktisch jedem Java-Programm jemals verwendet.
Donal Fellows
9

Ist es eine wirklich notwendige Fähigkeit, ohne API-Dokumentation zu programmieren?

Ich würde nicht sagen, dass es erforderlich ist , aber es ist

sehr wünschenswerte Fähigkeit

imNSho.

Ich habe die letzten Monate damit verbracht, in enger Zusammenarbeit mit dem Typ zu programmieren, der API merklich besser kennt als ich. Er ist einfach so viel produktiver - einfach, weil er API-Dokumentprüfungen überspringen kann, die mich ablenken .


Ich spreche hier von flüssiger Sprache. Nicht nur zu etwas fähig sein , sondern auch fließend.

Wissen Sie, was es heißt, fließend zu sein? Es ist, wenn für jemanden, der Sie ansieht, es so aussieht, als ob Sie während der Eingabe codieren ...

  • ... als ob der richtige Code einfach von Ihren Fingern auf den Bildschirm fließt. Als ob Sie die API-Dokumente, Tutorials und Handbücher nicht überprüfen. Eigentlich Sie tun , sie alle überprüfen, aber das ist unsichtbar , weil es alles in deinem Kopf ist. Sie haben das gesamte Wissen, das Sie benötigen, direkt in Ihrem Gehirn - aufgeladen, geladen und einsatzbereit.

... das ist fließendes Wissen. Es ist, wenn Sie eine Minute brauchen, um das zu tun, was Neulingen eine Stunde dauert. Die Mühe lohnt sich wirklich. Es riecht nach Sieg.

Wenn Sie einige APIs beherrschen und sich genau einprägen, wie es sich anfühlt, werden Sie anhand dieses Gedächtnisses darüber informiert, wie Sie mit anderen APIs am produktivsten arbeiten können .

Mücke
quelle
Ich glaube nicht, dass seine Frage ist, ob Sie die Dokumentation irgendwann kennen sollten oder nicht , aber ob Sie sich die Dokumentation wie für Prüfungen merken sollten oder nicht.
Rei Miyasaka
@ReiMiyasaka Nun, wenn Sie auf ein ausführliches Examen verzichten, stellen Sie möglicherweise Folgendes fest: "Meine Frage lautet also: Ist es wirklich wichtig, in der Lage zu sein, fehlerfrei ohne API-Dokumentation zu codieren? Soll ich diese Fähigkeit entwickeln? Ist es in der realen Welt wirklich wichtig? und im Arbeitsumfeld? " . Ich habe mich auf diesen Teil der Frage konzentriert, weil ich mich aufgrund meiner jüngsten Erfahrungen ziemlich unwohl gefühlt habe bei der Vorstellung, dass es nur mit einer elementaren Antwort vorbeifliegen kann, die nicht erforderlich ist . Meinetwegen?
gnat
2
+1 zur Deckung der Kosten für den Kontextwechsel zu den Referenzdokumenten. Jeder Schritt nachschlagen zu müssen, verlangsamt das Kriechen.
Wyatt Barnett
8

Nein, ich wäre tot, ohne die API-Dokumentation nachschlagen zu können. Das einzige Mal, dass ich es nicht habe, ist, wenn ich versuche, etwas zu debuggen, bei dem ich keinen Zugriff auf die Dokumentation bekomme. Dann "rekonstruiere" ich die API- und Cut-n-Paste-Teile nach Bedarf.

Es ist wichtig, eine gute Vorstellung davon zu haben, worum es in der API geht und welcher Teil am besten zu verwenden ist, aber die Methodennamen, Variablennamen zu kennen ... ist nicht wirklich notwendig.

Paul
quelle
3

Bei der Arbeit hatte ich nie eine Situation, in der ich keinen Zugang zu Dokumentation hatte. Andererseits ist es immer nützlich, über das Leseverständnis und das allgemeine Verständnis zu verfügen, um schlecht geschriebene Dokumentationen interpretieren zu können.

Sie sollten sich mit den Mustern und der Struktur Ihrer APIs vertraut machen, aber es ist nicht besonders nützlich, genau zu wissen, wo sich alles befindet.

Bei SFU Computing Science machen Klausuren zwischen 70% und 100% unserer Noten aus. Die Theorie ist, dass Prüfungen Ihr Verständnis des Kursmaterials und Ihre Anpassungsfähigkeit testen. In Wirklichkeit ist alles, was wirklich auf die Probe gestellt wird, Ihre Nerven, Ihre Schlafqualität / -dauer, Ihr Witz und Ihre Auswendiglernen-Techniken - keine davon ist akademisch oder für einen typischen Job in der Softwareindustrie notwendig.

Rei Miyasaka
quelle
2

Bis auf Ihre letzte Frage: Enzyklopädische Kenntnisse über API-Dokumentationen sind nicht wichtig. Sie werden natürlich schneller programmieren, wenn Sie jedes Detail jeder Methode jeder Klasse kennen, aber das ist keine vernünftige Erwartung.

Zu Ihrer letzten Frage: Es kann erwartet werden, dass Sie die Besonderheiten einiger Klassen ohne die API-Dokumentation kennen. Wenn Sie vor dem Interview wissen, dass Sie getestet werden, oder wenn der Job sehr konzentriert ist (dh wenn Sie den ganzen Tag über das Thema Threading bearbeiten), können Sie davon ausgehen, dass Sie die entsprechenden Kurse im Detail kennen müssen.


Nachtrag: Sie sollten vor jeder Prüfung mit Ihrem Professor / Dozenten genau klären, welche Materialien zur Verfügung gestellt werden und welche Materialien Sie selbst mitbringen können. Angenommen, etwas, dem sie nicht ausdrücklich zugestimmt haben, ist nicht zulässig. Ich hatte Kurse, in denen ich nur die Grundlagen zum Schreiben mitbringen konnte, wo ich alle Bücher mitbringen konnte, die ich mir gewünscht hatte, und wo ich genau ein doppelseitiges Blatt mit allem, was ich wollte, mitbringen konnte. Die Prüfungen sind in der Regel nach den zulässigen Materialien strukturiert.

Matt
quelle
2

API docs! = Sprachsyntax.

Ich kann verstehen, wenn jemand die genauen Namen verschiedener Java-Klassen und ihre Methoden nicht kennt. Ich kenne sie nicht und programmiere jeden Tag in Java. Ich würde ohne die Dokumente oder die allmächtige automatische Vervollständigung der IDE verloren gehen - besonders wenn es um die Java-Standard-API geht, die für ihre Ausführlichkeit in Variablen-, Klassen- und Methodennamen bekannt ist.

Wie Sie selbst sagten, ist dies jedoch nichts, was normalerweise in Dokumenten enthalten ist, an die Sie sich nicht erinnern können. Es ist die Syntax für innere Klassen - dies ist ein Merkmal der Sprache selbst, das nicht aus den Dokumenten zu merken ist.

So sehr ich denke, dass Studenten (in vielen Fällen) die Erlaubnis haben sollten, die Dokumente für Standard-APIs zu verwenden, denke ich, dass jeder, der eine Programmierprüfung bestehen möchte, die Sprachsyntax kennen sollte. Und ich meine nicht einige verrückte Randfälle, die nur Sprachdesigner kennen, sondern nur die Standardfälle - wie das in Ihrem Beispiel.

Goran Jovic
quelle
2
Ich denke, es lohnt sich auch nicht, sich die Syntax zu merken. Features und Muster und Fallstricke, ja, aber Syntax, nein. Ich arbeite mit zu vielen Sprachen, als dass es sinnvoll wäre, und ich denke, dass dies auch für die meisten Entwickler zutrifft.
Rei Miyasaka
@ReiMiyasaka: Ich denke nicht, dass Sie sich ganze Sprachspezifikationen merken sollten, aber Sie sollten die grundlegende Syntax jederzeit kennen. Schlagen Sie in den Dokumenten nach, wie man eine Schleife in einer Ihrer Sprachen schreibt? Oder verschlüsseln Sie es einfach?
Goran Jovic
In Wahrheit arbeite ich mit einer ganzen Reihe von Sprachen und vergesse oft die exakte Syntax sogar für grundlegende Dinge !! Daher muss ich mich immer auf die Dokumente beziehen.
Antonio2011a
@ Antonio2011a: Ich gebe zu, dass ich das selbst mache, besonders wenn ich weniger gebräuchliche Sprachen verwende. Für viele Studenten ist die gelernte Sprache jedoch die erste Programmiersprache überhaupt. Wenn ein Schüler die Syntax nicht einmal gelernt hat, sagt dies nichts Gutes darüber aus, wie er sich auf die Prüfung vorbereitet hat.
Goran Jovic
@Goran Eigentlich muss ich das aus zwei Gründen nicht tun: 1. Das Kompilieren des Hintergrunds sagt mir, wann ich die Syntax falsch verstehe, und 2. Schleifen sind in Sprachen wie Haskell und ML zweitrangig (fast nicht vorhanden). Sprachen sind vielfältiger als Sie vielleicht denken. Auch wenn ich den größten Teil meiner Zeit mit der Programmierung in F # verbringe und mich nur vage an Haskell erinnere, kann ich Haskell-Code immer noch gut verstehen, wenn ich daran denke, die semantischen Unterschiede zu beachten. Auf der anderen Seite stimme ich , dass eine Lern erste Sprache von innen nach außen extrem wichtig und Weise allzu oft vernachlässigt.
Rei Miyasaka
2

In Eclipse können Sie schreiben obj.und Strg + Leertaste drücken. Es wird versucht, die automatische Vervollständigung durchzuführen, indem alle Methodenoptionen für das angegebene Objekt angegeben werden. Wenn dies aus irgendeinem Grund fehlschlägt, hat die Java-API die restlichen Antworten. Es fällt mir schwer, an einen Tag zu denken, an dem ich nicht bei Google wusste, wie man etwas macht.

Die Schule ist eine ganz andere Geschichte.

Stephanie
quelle
2

Meiner Meinung nach stinkt die Wissenschaft normalerweise danach, gute Software-Ingenieure zu produzieren. Nur Menschen, die nach dem Unterricht zum Spaß programmieren, haben die Chance, in Projekten der realen Welt etwas zu erreichen.

Andererseits geht es in der Wissenschaft nicht darum, Entwickler hervorzubringen, sondern auf der ganzen Welt darum, abstrakte Probleme zu lösen und nachzuforschen. Es ist die meiste Zeit sehr weit von der praktischen Anwendung entfernt. Und Forscher sind nicht unbedingt ein guter Programmierer.

Und das Lernen von API auswendig stinkt. Es gibt Autocomplete / google / msdn / javadocs, um alle Ecken und Kanten nachzuschlagen. Warum sollte jemand das alles zu jeder Zeit in seinem Gehirn behalten wollen? Die gebräuchlichsten Funktionen werden Sie in wenigen Wochen / Monaten lernen, alles andere kann in Sekundenschnelle nachgeschlagen werden, wenn Sie die Syntax, Struktur und allgemeinen Ideen kennen.

Andererseits codieren einige Leute immer noch in Texteditoren und erinnern sich auswendig an Funktionsnamen. Das ist nicht unbedingt falsch, aber wenn sie davon begeistert sind, haben Sie Ihren Professor.

Selbst wenn Sie die Funktionsnamen und -parameter auswendig kennen, ist es dennoch eine gute Idee, sie im neuesten API-Dokument zu überprüfen. Vor 10 Jahren war strtok in einem Single-Thread-Szenario in Ordnung, heute ist es nicht mehr in Ordnung. Wenn Sie nur die Namen und Parameter kennen, werden Sie nie erfahren, dass die Funktionalität veraltet ist oder dass bessere Alternativen erfunden wurden.

Sprachen ändern sich, also müssen Sie sich mit ihnen ändern. Sich an einen wahren Weg zu erinnern, ist dafür nicht gut.

Coder
quelle
1

Wenn du früher oder später anfängst, für kurze Zeit an einem Projekt mit einer API zu arbeiten, lernst du diese API sehr gut. Ich glaube, das ist absolut unnötig, da ich niemanden kenne, der sich jemals eine Dokumentation ansieht (msdn, man pages, etc ...).

Universitäten sind jedoch ein völlig anderes Universum. Seien Sie also nicht überrascht, wenn Sie versagen, weil Sie beispielsweise den typisierten Namen des 10. Parameters von CreateWindowEx nicht kennen.

Hayri Uğur Koltuk
quelle
Nicht im Einklang mit meiner Erfahrung mit Universitäten. Wenn überhaupt, neigten sie dazu, von der Theorie besessen zu sein, und es fehlte ihnen die Aufmerksamkeit für Details. Oder ist das Niveau auf eine Berufsschule gesunken?
Programmierer
Ich spreche nicht über eine Universität, und dies ist nur ein Beispiel für das, was Sie irgendwo auf der Welt an einer Universität sehen können. Wie Sie wissen, sind sie nicht alle gleich
Hayri Uğur Koltuk
2
Die Universitäten hatten schon immer ein gewisses Maß an Erinnern und Aufstoßen. Ich hätte Kalkül getroffen, wenn ich ein CRC-Buch zur Verfügung gehabt hätte, anstatt integrale Tabellen auswendig zu lernen.
Blrfl
1

Ich würde sagen, nein, es ist nicht erforderlich, es ist physisch unmöglich, dass sich das menschliche Gehirn so viele Informationen merkt, aber Sie müssen immer noch die Grundlagen oder die am häufigsten verwendeten Dinge kennen, da es nicht viele gibt, die man sich merken kann . Ansonsten ist es unmöglich, sich alles zu merken, was es auf Java gibt.

Es ist auch unfair, wenn ein Lehrer möchte, dass seine Schüler alles wissen oder dass sie wissen, ob sie mit einer Sprache programmieren, abgesehen von den Übungen oder Projekten, die er Ihnen zuweist. Für mich ist es so, als ob Sie wissen wollen, was Sie tun, wenn Sie nicht in der Schule sind oder verwandte Arbeiten ausführen.

EDIT: Offensichtlich hängt es von ihm ab, was der Lehrer von Ihnen verlangt. Einige Lehrer schätzen die Theorie mehr, während andere die Praxis schätzen, und es ist ihnen egal, ob Sie nicht alles verstehen.

Coyote21
quelle