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)?
la source
Réponses:
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.
la source
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.
la source
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 ...
... 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.
la source
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.
la source
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.
la source
À 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.
la source
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.
la source
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.
la source
À 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.
la source
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.
la source
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.
la source