Est-ce vraiment une compétence requise pour programmer sans documentation API? [fermé]

22

J'ai à peine réussi mon examen de programmation Java aujourd'hui. J'ai dû répondre à quelques questions générales sur le threading que j'ai bien fait et écrire un petit programme threadé qui était pire. J'ai dû connecter mon ordinateur portable à l'écran du projecteur et écrire le programme immédiatement. Ma première tentative a été d'utiliser des classes anonymes mais j'ai oublié la syntaxe exacte. Peut-être à cause de l'excitation ou peut-être parce que ces deux dernières semaines, je codais principalement en php. Ensuite, j'ai demandé s'il était autorisé à utiliser la documentation de l'API. La réponse a été "NON". J'ai donc décidé d'aller dans un autre sens et j'ai implémenté Runnable. Le programme faisait ce qui avait été demandé à la fin. Bien sûr, les examinateurs ont remarqué mon premier échec et cela a grandement affecté mon score. J'ai été étonné qu'il ne soit pas autorisé à utiliser la documentation de l'API.

Ma question est donc la suivante: est-il vraiment important de pouvoir coder parfaitement sans documentation API? Dois-je développer cette compétence? Est-ce vraiment important dans le monde réel et dans l'environnement de travail? Pendant les cours de programmation, je me suis concentré sur les modèles d'apprentissage, le développement de compétences pour écrire de bonnes applications de conception, les compétences pour utiliser l'API et trouver rapidement les informations nécessaires. Je n'essayais pas d'apprendre à programmer sans documentation API. Est-il indispensable lors des entretiens d'embauche (codage sans documentation API)?

danseur
la source
2
Je pense qu'il pose des questions sur la documentation , en particulier les références API.
3
@bancer - Vous ne pouvez pas utiliser de classes Java natives n'a aucun sens. Il semble que vous n'ayez pas été préparé pour l'examen.
Ramhound
27
Dans le monde réel, vous aurez toujours accès à la documentation. J'ai une mémoire terrible et j'essaie de me concentrer sur la logique générale de ma candidature et d'éviter de me remplir l'esprit de mémorisation inutile de choses qui peuvent facilement être consultées. Malheureusement, le monde universitaire (et le monde des certifications) est quelque peu différent et l'accent est souvent mis sur la mémorisation inutile. Mes études de premier cycle étaient principalement en mathématiques et en physique, mais je me souviens avoir dû mémoriser beaucoup de formules, etc. Quelle perte de temps.
Antonio2011a
11
@ Antonio2011a - Connaître l'API du langage que vous utilisez n'est PAS une "mémorisation inutile". Mieux vous connaîtrez l'API, mieux vous pourrez programmer, car vous choisirez les classes et méthodes appropriées pour votre solution. Vous ne pouvez pas les choisir si vous ne savez pas qu'ils existent. Bien sûr, personne ne connaît l'intégralité de l'API Java; c'est trop grand. Mais il est toujours bon d'en savoir autant que possible.
Dawood dit de réintégrer Monica le
9
@DavidWallace Peut-être que je n'étais pas clair. Bien sûr, je ne dis pas que vous n'avez pas besoin de vous familiariser avec l'API !! Juste que vous n'avez pas besoin de mémoriser les noms exacts des classes, des méthodes, de l'ordre des paramètres et d'autres détails anesthésiants! Tout ce que vous devez vraiment savoir, c'est qu'il existe et comment il est utile, vous pouvez alors rechercher les détails lors du codage. Comme je l'ai dit avant, ma mémoire est terrible, et honnêtement, j'aurais pu utiliser un cours il y a une heure, et si vous me donniez un morceau de papier vierge, je ne serais pas en mesure de me souvenir des détails exacts.
Antonio2011a

Réponses:

39

Dans Real Life ™, je qualifierais cette compétence de «agréable d'avoir», mais pas du tout requise. En milieu universitaire, cependant, c'est différent.

Une capacité à coder sans documentation peut être utilisée comme une indication indirecte de la familiarité de l'étudiant avec le sujet. Dans un sens, vous voir coder quelque chose sans toucher à la documentation indique au professeur que vous vous êtes exercé à utiliser l'API auparavant - en faisant vos devoirs et d'autres tâches, ou peut-être même en programmant pour vous-même du plaisir. Une personne intelligente ayant une compréhension superficielle de l'API en question devrait être capable decomprendre presque toutes les API Java par elle-même en consultant la documentation. Ce n'est pas un hasard: on attend souvent des programmeurs qu'ils apprennent sur le tas et la documentation de l'API pour les systèmes de programmation populaires, y compris Java, est structurée pour aider les programmeurs à apprendre rapidement. La documentation fournit souvent des exemples courts et autonomes, illustrant le concept de manière brève et concise.

Cela va directement à l'encontre de l'objectif du professeur de mesurer votre connaissance du sujet (par opposition à mesurer votre intelligence). Il n'est donc pas déraisonnable de vous demander du code sans consulter la documentation.

REMARQUE: j'ai modifié cette réponse en réponse à une modification de la question.

dasblinkenlight
la source
2
D'après ma lecture, les examinateurs examinaient sa capacité à mémoriser la documentation de l'API. Il savait quoi faire, ne se souvenait tout simplement pas de la syntaxe.
Paul
@Paul J'ai lu les modifications et changé ma réponse. Je pensais que le PO demandait quelque chose de complètement différent. Merci!
dasblinkenlight
2
+1 pour identifier le vrai problème ici. S'il s'agissait d'un entretien d'embauche, l'intervieweur serait plus intéressé par la façon dont vous résolvez un problème, et vous seriez probablement autorisé à simplement écrire votre meilleure approximation de la syntaxe sur le tableau blanc. Lorsque vous avez passé les trois derniers mois à apprendre du matériel spécifique et que vous êtes testé sur ce matériel spécifique, il est raisonnable de ne pas avoir de politique «Internet ouvert».
StriplingWarrior
@Paul: vous avez raison
danseur
21

Il y avait un gars qui avait un petit bug dans son code, alors il l'a apporté à StackOverflow et a demandé de l'aide. StackOverflow: Java (génération de nombres sans répétition) . J'ai regardé son code et je lui ai fait remarquer que son HashSet était perpétuellement rempli de valeurs mais il n'a jamais été effacé. Alors, il m'a demandé: "comment le clarifiez-vous?" Je dois admettre que je ne suis pas particulièrement fier de la réponse que j'ai donnée.

Vous devez absolument connaître les éléments de base que vous utilisez tous les jours. Vous devez tous les connaître et vous devez bien les connaître. Mais seulement les trucs de base.

Pour tout le reste, l'important est de savoir qu'il y a quelque chose qui fait ce que vous voulez. Précisément quelle classe vous devez utiliser, précisément quelle méthode vous devez appeler et précisément quels paramètres vous devez lui transmettre, c'est quelque chose dont vous n'avez pas besoin pour occuper les précieux neurones de votre cerveau. C'est à cela que sert la documentation, et c'est pourquoi les IDE avec saisie semi-automatique ont été inventés. Et si la poussée vient à pousser, il y a toujours StackOverflow et le plus grand interwebz là-bas.

Demander aux programmeurs de connaître par cœur les API revient à demander aux avocats de connaître par cœur le code juridique et tous les précédents. C'est inutile. Un exercice futile.

Mike Nakis
la source
+1: Il est incroyablement difficile d'apprendre l'intégralité de l'API d'une grande bibliothèque telle que Java, simplement en raison de sa taille. Il est cependant plus facile de savoir quelles capacités générales sont fournies par les packages (par exemple, javax.imageio fournit une gestion avancée des images, pas que je l'ai jamais utilisée) et certaines fonctionnalités de base doivent être apprises. En particulier, java.lang et java.util vont être utilisés dans pratiquement tous les programmes Java.
Donal Fellows
9

Est-ce vraiment une compétence requise pour programmer sans documentation API?

Je ne dirais pas que c'est obligatoire mais c'est

compétence très souhaitable

imNSho.

J'ai passé ces derniers mois à coder en étroite collaboration avec le gars qui connaît l'API sensiblement mieux que moi. Il est tellement plus productif - simplement parce qu'il peut ignorer les vérifications de documents API qui me distraient .


Ici, je parle de maîtrise. D'être capable non seulement de quelque chose mais de parler couramment.

Savez-vous ce que c'est que de parler couramment? C'est quand, pour quelqu'un qui vous regarde, il semble que vous codiez en tapant ...

  • ... Comme si le bon code coule simplement de vos doigts vers l'écran. Comme si vous ne consultez pas les documents, les didacticiels et les manuels de l'API. En fait, vous les vérifiez tous, mais c'est invisible car tout est dans votre tête. Vous avez toutes les connaissances dont vous avez besoin dans votre cerveau - chargées, chargées et prêtes à l'emploi.

... C'est une connaissance courante. C'est quand il vous faut une minute pour faire ce qui prend une heure au débutant. Ça vaut vraiment la peine. Ça sent la victoire.

Si vous maîtrisez la maîtrise de certaines API et si vous mémorisez correctement à quoi cela ressemble, cette mémoire vous guidera davantage sur la façon de devenir le plus productif en travaillant avec toute autre API.

moucheron
la source
Je ne pense pas que sa question soit de savoir si vous devriez éventuellement connaître la documentation, mais si vous devez ou non mémoriser la documentation comme pour les examens.
Rei Miyasaka
@ReiMiyasaka bien si vous sautez les examens verbeux, vous remarquerez peut-être ceci: "Donc, ma question est: Est-il vraiment important de pouvoir coder parfaitement sans documentation API? Dois-je développer cette compétence? Est-ce vraiment important dans le monde réel et dans l'environnement de travail? " . Je me suis concentré sur cette partie de la question parce que, voyez-vous, mon expérience récente m'a fait me sentir très mal à l'aise à l'idée qu'il puisse simplement survoler avec une réponse élémentaire, ce n'est pas nécessaire . C'est suffisant?
moucher
2
+1 pour couvrir le coût du changement de contexte vers les documents de référence. Le fait de devoir rechercher chaque étape ralentit les choses.
Wyatt Barnett
8

Non, je serais mort sans avoir la possibilité de chercher dans la documentation de l'API. La seule fois où je ne l'ai pas, c'est quand j'essaie de déboguer quelque chose où je ne peux pas accéder à la documentation. Ensuite, je "désosser" les morceaux de l'API et du couper-coller selon les besoins.

Il est important d'avoir une bonne idée de ce qu'est l'API et quelle partie est la meilleure à utiliser, mais connaître les noms de méthode, les noms de variable ... pas vraiment nécessaire.

Paul
la source
3

Au travail, je n'ai jamais eu de situation où je n'avais pas accès à la documentation. D'un autre côté, avoir la compréhension de la lecture et la compréhension générale pour être en mesure d'interpréter une documentation mal écrite est toujours utile.

Vous devriez éventuellement connaître les modèles et la structure de vos API, mais savoir exactement où tout se trouve n'est pas particulièrement utile.

À SFU Computing Science, les examens à livres fermés représentent entre 70% et 100% de nos notes. La théorie est que les examens testent votre compréhension du matériel de cours et votre adaptabilité. En réalité, tout ce qu'il teste vraiment, c'est vos nerfs, votre qualité / durée du sommeil, votre esprit et vos techniques de mémorisation par cœur - dont aucune n'est nécessaire académiquement ou pour un travail typique dans l'industrie du logiciel.

Rei Miyasaka
la source
2

À tous sauf à votre dernière question: la connaissance encyclopédique de toute documentation API n'est pas importante. Vous programmerez évidemment plus vite si vous connaissez chaque détail de chaque méthode de chaque classe, mais ce n'est pas une attente raisonnable.

À votre dernière question: on peut s'attendre à ce que vous connaissiez les spécificités de certaines classes sans la documentation de l'API. Si vous savez avant de vous présenter à l'entretien que vous serez testé, ou si le travail est très ciblé (c'est-à-dire que vous ferez du filetage toute la journée), vous pouvez raisonnablement vous attendre à avoir besoin de connaître en détail les classes concernées.


Addendum: Vous devez clarifier bien avant tout examen avec votre professeur / instructeur exactement quels documents seront fournis et quels documents vous pourrez vous apporter. Supposons que tout ce qu'ils n'ont pas explicitement accepté n'est pas autorisé. J'ai suivi des cours où je ne pouvais apporter que les bases de l'écriture, où je pouvais apporter tous les livres que je souhaitais et où je pouvais apporter exactement une feuille recto-verso avec tout ce que je voulais dessus. Les examens sont généralement structurés autour des matériaux autorisés.

Mat
la source
2

API docs! = Syntaxe du langage.

Je peux comprendre quand quelqu'un ne connaît pas les noms exacts des différentes classes Java et leurs méthodes. Je ne les connais pas et je code en Java tous les jours. Je serais perdu sans les documents ni la toute-auto-complétion IDE - en particulier en ce qui concerne l'API standard Java qui est bien connue pour sa verbosité dans les noms de variable / classe / méthode.

Cependant, comme vous l'avez dit vous-même, vous ne vous souvenez pas de quelque chose qui se trouve généralement dans les documents. C'est la syntaxe des classes internes - c'est une caractéristique du langage lui-même qui n'est pas quelque chose à mémoriser dans les documents.

Bien que je pense que les étudiants devraient (dans de nombreux cas) être autorisés à utiliser les documents pour les API standard, je pense que toute personne qui souhaite passer un examen de programmation devrait connaître la syntaxe du langage. Et je ne parle pas de cas bizarres que seuls les concepteurs de langage connaissent, juste les cas standard - comme celui de votre exemple.

Goran Jovic
la source
2
Je ne pense pas non plus que ça vaut la peine de mémoriser la syntaxe. Caractéristiques et modèles et gotchas, oui, mais syntaxe, non. Je travaille avec trop de langues pour que cela ait du sens, et je pense que cela devient également vrai pour la plupart des développeurs.
Rei Miyasaka
@ReiMiyasaka: Je ne pense pas que vous devriez mémoriser des spécifications de langue entières, mais vous devriez connaître la syntaxe de base à tout moment. Cherchez-vous dans la documentation comment écrire une boucle dans l'une de vos langues? Ou le codez-vous simplement?
Goran Jovic
En vérité, je travaille avec un certain nombre de langues, et j'oublie souvent la syntaxe exacte même pour les choses de base !! Je me retrouve donc toujours à me référer aux documents.
Antonio2011a
@ Antonio2011a: J'avoue que je le fais moi-même, surtout quand j'utilise des langues moins courantes. Mais pour de nombreux étudiants, la langue apprise est le premier langage de programmation jamais conçu. Si un étudiant n'a même pas appris la syntaxe, cela ne dit rien de bon sur la façon dont il s'est préparé pour l'examen.
Goran Jovic
@Goran En fait, je ne le fais pas nécessairement, pour deux raisons: 1. la compilation en arrière-plan me dit quand je me trompe de syntaxe, et 2. les boucles sont secondaires (presque inexistantes) dans des langages comme Haskell et ML. Les langues sont plus diverses que vous ne le pensez. Même si je passe la plupart de mon temps à coder en F # et que je ne me souviens que vaguement de Haskell, je peux toujours très bien comprendre le code Haskell, en me souvenant de prendre note des différences sémantiques. D'un autre côté, je suis d'accord pour dire que l'apprentissage d'une première langue à l'envers est extrêmement important et trop souvent négligé.
Rei Miyasaka
2

Dans Eclipse, vous pouvez écrire obj.et appuyer sur ctrl + espace et il essaiera de se compléter automatiquement en vous donnant toutes les options de méthode pour l'objet donné. Si cela échoue pour une raison quelconque, l' API Java a le reste des réponses. J'aurais du mal à penser à un jour où je n'aurais pas Google comment faire quelque chose.

L'école est une histoire complètement différente.

Stéphanie
la source
2

À mon humble avis, le monde universitaire pue généralement à produire de bons ingénieurs logiciels. Seules les personnes qui codent pour le plaisir après les leçons ont une chance de réaliser quelque chose dans des projets du monde réel.

Là encore, le monde universitaire n'est pas de produire des développeurs, le monde entier est de savoir comment résoudre des problèmes abstraits et faire des recherches. C'est très loin d'une application pratique la plupart du temps. Et les chercheurs ne sont pas nécessairement de bons codeurs.

Et l'apprentissage de l'API par cœur pue. Il y a la saisie semi-automatique / google / msdn / javadocs pour rechercher tous les coins et recoins, pourquoi voudrait-on garder tout cela dans leur cerveau à tout moment? Les fonctions les plus courantes que vous apprendrez en quelques semaines / mois, tout le reste peut être recherché en quelques secondes si vous connaissez la syntaxe, la structure et les idées générales.

Là encore, certaines personnes codent toujours dans les éditeurs de texte et se souviennent des noms de fonction par cœur, ce n'est pas nécessairement faux, mais s'ils sont fanatiques à ce sujet, vous avez votre professeur.

De plus, même si vous connaissez par cœur les noms de fonction et les paramètres, c'est toujours une bonne idée de les vérifier dans le dernier document API. strtok allait bien dans un scénario à thread unique il y a 10 ans, ce n'est pas bien de nos jours. Si vous venez d'apprendre les noms et les paramètres, vous ne saurez jamais que la fonctionnalité peut être déconseillée ou que de meilleures alternatives ont été inventées.

Les langues changent, vous devez donc changer avec elles, se souvenir d'une vraie façon n'est pas bon pour cela.

Codeur
la source
1

Si vous commencez à travailler sur un projet pendant un certain temps en utilisant une API tôt ou tard, vous apprendrez très bien cette API. je crois que c'est une compétence totalement inutile car je ne connais personne qui ne regarde jamais la documentation (msdn, pages de manuel, etc ...)

Cependant, les universités sont un univers entièrement différent, alors ne soyez pas surpris si vous échouez parce que vous ne connaissez pas le nom typedef du 10.ème paramètre de CreateWindowEx, par exemple.

Hayri Uğur Koltuk
la source
Pas conforme à mon expérience des universités. Si quoi que ce soit, ils tentaient d'être obsédés par la théorie et manquaient d'attention aux détails. Ou le niveau est-il tombé dans celui des écoles professionnelles?
AProgrammer
je ne parle pas d'une université, et ce n'est qu'un exemple de ce que vous pouvez voir quelque part dans le monde dans une université. comme vous le savez, ils ne sont pas tous
pareils
2
Les universités ont toujours eu un certain degré de mémorisation et de régurgitation. J'aurais mieux calculé si j'avais eu un livre CRC disponible au lieu d'avoir à mémoriser des tables intégrales.
Blrfl
1

Je dirais que non, ce n'est pas obligatoire, il est physiquement impossible pour le cerveau humain de mémoriser autant d'informations, mais vous devez toujours connaître les bases ou les choses les plus utilisées, car il n'y en a pas beaucoup à mémoriser . Sinon, il est impossible de mémoriser tout ce qu'il y a sur java.

Il est également injuste pour un enseignant de vouloir que ses élèves sachent tout, ou de l'utiliser pour savoir s'ils programment avec une langue, en plus des exercices ou des projets qu'il vous assigne. Pour moi, c'est comme vouloir savoir ce que vous faites lorsque vous n'êtes pas à l'école ou que vous faites un travail connexe.

EDIT: Évidemment, ce que l'enseignant vous demande dépend de lui, certains enseignants valorisent davantage la théorie tandis que d'autres valorisent la pratique et ne se soucient pas si vous ne comprenez pas tout.

Coyote21
la source