S'il vous plaît, restez sur les questions techniques , les comportements à éviter, les questions culturelles, politiques ou de carrière.
S'il vous plaît, restez sur les questions techniques , les comportements à éviter, les questions culturelles, politiques ou de carrière.
Réponses:
Le bogue est dans votre code, pas le compilateur ou les bibliothèques d'exécution.
Si vous voyez un bogue qui ne peut pas arriver, vérifiez que vous avez correctement construit et déployé votre programme. (Surtout si vous utilisez un environnement de développement IDE ou de compilation complexe qui essaie de vous cacher les détails compliqués ... ou si votre compilation implique de nombreuses étapes manuelles.)
Les programmes simultanés / multi-tâches sont difficiles à écrire et à tester correctement. Il est préférable de déléguer autant que possible les librairies et les frameworks d'accès concurrentiel.
La rédaction de la documentation fait partie de votre travail de programmeur. Ne le laissez pas à "quelqu'un d'autre".
MODIFIER
Oui, mon point n ° 1 est surestimé. Même les plates-formes d'applications les mieux conçues ont leur lot de bogues, et certaines des moins bien conçues en sont très répandues. Mais même, vous devriez toujours soupçonner votre code d' abord , et commencer à blâmer seulement compilateur / bugs bibliothèque lorsque vous avez clairement la preuve que votre code est pas en faute.
À l'époque où je développais le C / C ++, je me souviens de cas où de supposés "bogues" d'optimiseur se sont avérés être dus à mon expérience (ou à celle d'un autre programmeur) qui avait déjà fait des choses dont les résultats sont indéfinis. Cela s'applique même aux langages supposés sûrs comme Java; par exemple, examinez de près le modèle de mémoire Java (chapitre 17 de JLS).
Les calculs en virgule flottante ne sont pas précis.
N'arrête pas d'apprendre.
Réduire la duplication est la première chose que vous puissiez faire pour améliorer la qualité et la maintenabilité de votre code.
Compétences de dépannage et de débogage
Ils ne consacrent guère de temps à ce sujet dans les cours de programmation que j'ai suivis et, d'après mon expérience, c'est l'un des facteurs les plus déterminants de la productivité d'un programmeur. Qu'on le veuille ou non, vous passez beaucoup plus de temps dans la phase de maintenance de votre application que dans la nouvelle phase de développement.
J'ai travaillé avec tellement de programmeurs qui déboguent en changeant des choses de manière aléatoire, sans stratégie pour trouver le problème. J'ai eu cette conversation des dizaines de fois.
Autre programmeur: Je pense que nous devrions essayer de voir si cela résout le problème.
Moi: D'accord, en supposant que ça règle le problème. Qu'est-ce que cela vous dit sur la source du problème?
Autre programmeur: Je ne sais pas, mais nous devons essayer quelque chose .
Les bases. Actuellement, les programmeurs apprennent des technologies et non des concepts. C'est faux.
Its wrong
devrait être it's wrong
, par exemple.
Chaque programmeur doit savoir qu'il met constamment des hypothèses dans le code, par exemple, "ce nombre sera positif et fini", "ce code sera capable de se connecter au serveur à tout moment en un clin d'œil".
Et il devrait savoir qu'il devrait se préparer à la rupture de ces hypothèses.
assert()
- partout. assert()
vous aidera à documenter vos hypothèses et à vous sauver lorsque vous vous trompez.
Tous les programmeurs devraient être au courant des tests.
Apprendre des concepts . Vous pouvez Google la syntaxe.
Pensée critique et logique. vous ne pouvez rien faire de bien sans cela.
C'est plus difficile que vous ne le pensez.
Bien qu'il soit facile (ish) de mettre en place quelque chose qui fonctionne normalement, gérer des entrées erronées, tous les cas de bords et de coins, les modes de défaillance possibles, etc. prend beaucoup de temps et sera probablement la partie la plus difficile du travail.
Ensuite, vous devez également donner à votre application une belle apparence.
Connaissance du domaine. La spécification n'est jamais à 100%; connaître le domaine avec lequel vous développez augmentera TOUJOURS la qualité du produit.
Big O notation et ses implications.
Quelques références utiles
Des pointeurs, évidemment. :)
Code Complete 2 - de bout en bout
Les données sont plus importantes que le code.
Si vos données sont intelligentes, le code peut être stupide.
Le code muet est facile à comprendre. Il en va de même pour les données intelligentes.
Presque chaque chagrin algorithmique que j'ai jamais eu est dû au fait que des données se trouvent au mauvais endroit ou ont été maltraitées. Si vos données ont un sens, inscrivez-le dans le système de types .
Diviser et conquérir. C'est généralement le meilleur moyen de résoudre tout type de problème pratique, de la planification au débogage.
Les compétences réelles se reflètent dans la capacité à exécuter correctement une conception simple, et non dans la capacité de réaliser une conception compliquée du tout.
Cette compétence provient d'une plus grande maîtrise des principes fondamentaux, et non de la maîtrise des arcanes. Un programmeur de haut calibre n'est pas défini par sa capacité à coder ce que d'autres ne peuvent pas (utiliser des fonctions de niveau supérieur, la programmation fonctionnelle avancée, que vous avez), mais plutôt par sa capacité à affiner le codage parfaitement banal. Choisir la décomposition appropriée des fonctionnalités entre les classes; construire en robustesse; utiliser des techniques de programmation défensives; et en utilisant des modèles et des noms qui conduisent à une plus grande auto-documentation, ce sont les ingrédients essentiels d'une programmation de haut calibre.
Écrire un bon code auquel vous, ou quelqu'un d'autre, pouvez revenir dans une semaine, un mois ou un an et comprendre comment utiliser, modifier, améliorer ou étendre ce code est crucial. Cela vous épargne du temps et des efforts mentaux. Il améliore la productivité en supprimant les obstacles sur lesquels vous auriez déjà trébuché (en interrompant peut-être votre pensée, en prenant des heures ou des jours d'efforts à d'autres travaux, etc.). Il est ainsi plus facile de se concentrer sur les problèmes difficiles. et parfois cela fait disparaître les problèmes difficiles.
En un mot: élégance. Chaque classe, chaque méthode, chaque condition, chaque bloc, chaque nom de variable: lutte pour l'élégance.
Ne blâmez jamais l'utilisateur de ce qui pourrait être résolu avec une expérience utilisateur plus propre ou une meilleure documentation. Souvent, les programmeurs supposent automatiquement que l'utilisateur est un idiot qui ne peut rien faire de bien, lorsque le problème est une mauvaise expérience générale ou un manque de communication. Les programmes sont destinés à être utilisés, et traiter l’utilisateur avec mépris, c’est perdre le sens de la programmation.
Chaque programmeur doit savoir comment utiliser le débogueur, et savoir comment l'utiliser bien .
L'évaluation des courts-circuits, bien que ce soit l'une des premières choses qu'ils apprennent sur les opérateurs booléens.
Comment évaluer avec précision le temps qu’il faudra à une fonctionnalité pour la mettre en oeuvre. Plus important encore, comment faire passer le message, vous ne faites pas de conneries quand vous soumettez cette estimation.
Le style de codage compte:
... et le bon design est important.
Idéalement, le programmeur apprend ces choses avant (ou pendant) sa première révision de code. Dans le pire des cas, le programmeur les apprend lorsque le chef lui dit de faire rapidement des modifications non triviales à un code horrible.