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)?
quelle
Antworten:
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.
quelle
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.
quelle
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 ...
... 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 .
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle