Longue tenue, une programmation incorrecte hypothèses
Je suis en train de faire quelques recherches sur les erreurs et les pauvres et les hypothèses formulées par junior (et peut-être senior), les ingénieurs en logiciel.
Quel a été votre plus longue hypothèse qui a finalement été corrigé?
Par exemple, j'ai mal compris que la taille d'un entier n'est pas un standard et dépend plutôt de la langue et de la cible. Un peu gênant pour l'état, mais il est.
Être franc; ce qui ferme conviction que vous avez, et à peu près combien de temps avez-vous maintenir l'hypothèse? Il peut être sur un algorithme, une langue, un concept de programmation, les tests, ou quoi que ce soit d'autre au sujet de la programmation, langages de programmation, ou de l'informatique.
- Vous pouvez être intéressé doi.acm.org/10.1145/1364782.1364795 doi.acm.org/10.1145/984458.984495 doi.acm.org/10.1145/1142031.1142053
Vous devez vous connecter pour publier un commentaire.
Pendant un long moment, je suppose que tout le monde a eu cette super-maîtrise de tous les concepts de la programmation (design patterns, les dernières nouvelles de la langue, de la complexité des calculs, des expressions lambda, vous le nom).
Les blogs de lecture, de Débordement de Pile et les livres de programmation semblait toujours à me faire sentir que j'étais à la traîne sur les choses que tous les programmeurs doit juste savoir intuitivement.
J'ai réalisé avec le temps que je suis effectivement en comparant ma connaissance, à la connaissance collective de beaucoup de gens, pas une seule personne et c'est une assez haute de bar pour tout le monde. La plupart des programmeurs dans le monde réel ont un cache de la connaissance qui est nécessaire pour faire leur travail et qui ont plus que quelques domaines qu'ils sont faibles ou complètement ignorant de.
Que les gens savaient ce qu'ils voulaient.
Pendant longtemps je pensais que je voudrais en parler avec les gens, ils décrivent un problème ou de flux de travail et je voudrais le mettre dans le code et de l'automatiser. S'avère à chaque fois qu'il se passe, ce qu'ils ont pensé qu'ils voulaient n'était pas réellement ce qu'ils voulaient.
Edit: je suis d'accord avec la plupart des commentaires. Ce n'est pas une réponse technique et peut-être pas ce que l'interlocuteur a été à la recherche pour. Il ne s'applique pas seulement à la programmation. Je suis sûr que ce n'est pas ma plus longue hypothèse soit, mais c'était la chose la plus frappante que j'ai appris en 10 ans j'ai fait cela. Je suis sûr que c'était de la pure naïveté de ma part, mais la façon dont mon cerveau est câblé et l'enseignement et les expériences que j'avais avant d'entrer dans le monde de l'entreprise m'a amené à croire que j'allais faire ce que j'ai répondu; que je serais en mesure d'utiliser le code et les ordinateurs pour résoudre les problèmes des gens.
Je suppose que cette réponse est similaire à Robin au sujet de la non-programmeurs de comprendre ou de se soucier de ce que je parle. Il s'agit d'apprendre à l'entreprise comme un agile et itératif, processus interactif. C'est à propos de l'apprentissage de la différence entre le fait d'être un programmation-code-de singe et d'être un développeur de logiciels. Il s'agit de réaliser qu'il y a une differnce entre les deux et que pour être vraiment bon dans le domaine, ce n'est pas seulement la syntaxe et la vitesse de frappe.
Edit: Cette réponse est aujourd'hui la communauté wiki pour apaiser les gens mécontents à cette réponse me donner rep.
Que je sais où le problème de performances est sans profilage
Que je devrais avoir un seul point de sortie à partir d'une fonction/méthode.
Que les non-programmeurs à comprendre de quoi je parle.
Que sans bugs du logiciel a été possible.
Que membre privé variables ont été privés à l'instance et non pas la classe.
Je pensais que le typage statique était assis immobile à votre clavier.
Que vous pouvez bien comprendre un problème avant de commencer à développer.
Gens intelligents sont Toujours plus Intelligents que Moi.
Je peux vraiment me battre quand je fais des erreurs et souvent de recevoir des réprimandes pour l'autodérision. - Je utilisé pour regarder dans la crainte à beaucoup de développeurs et souvent supposé que, depuis qu'ils en savaient plus que moi sur X, ils savaient plus que moi.
Que j'ai continué à gagner de l'expérience et de rencontrer plus de gens, j'ai commencé à réaliser que, souvent, alors qu'ils en savent plus que moi dans un domaine particulier, ils ne sont pas nécessairement plus intelligent que moi/vous.
Morale de l'histoire: ne Jamais sous-estimer ce que vous pouvez apporter à la table.
Pendant longtemps je pensais que la Mauvaise Programmation est quelque chose qui s'est passé sur la frange.. que Faire les Choses Correctement était la norme. Je ne suis pas si naïve ces jours-ci.
J'ai pensé que je devrais aller vers l'abstraction autant que possible. J'ai été touché à la tête majeur avec ce, en raison de trop entremêlées de petits morceaux de fonctionnalité.
Maintenant, j'essaie de garder les choses aussi simples et découplé que possible. Refactoring de faire quelque chose d'abstrait est beaucoup plus facile de prédire comment j'ai besoin de quelque chose d'abstrait.
Donc j'ai déménagé de l'élaboration de ce cadre que les règles de tous, des extraits de fonctionnalités que le travail soit fait. N'a jamais regardé en arrière, sauf quand je pense à la fois où j'ai naïvement pensé que je serais l'un développement de la prochaine grande chose.
Que les femmes de trouver des programmeurs informatiques sexy...
Que la qualité du logiciel va conduire à plus de ventes. Elle le fait parfois, mais pas toujours.
Que toutes les langues sont (pour la plupart) a créé l'égalité.
Pour un bon long moment, j'ai pensé que le choix de la langue n'a pas vraiment beaucoup de différence dans la difficulté du processus de développement et le potentiel de succès d'un projet. Ce n'est certainement pas vrai.
Choisir la bonne langue pour le travail est aussi important/essentiel que tout autre projet de décision qui en est faite.
Qu'un grand commentaire/code ratio est une bonne chose.
Il m'a fallu un certain temps pour réaliser que le code devrait être auto-documentation. Bien sûr, un commentaire ici et il est utile si le code ne peut pas être plus clair ou si il y a une raison importante pour laquelle quelque chose est fait. Mais, en général, il vaut mieux passer que les commentaires le temps de renommer les variables. C'est plus propre, plus claire et les commentaires ne sont pas "désynchronisés" avec le code.
Que la programmation est impossible.
Ne plaisante pas, j'ai toujours pensé que la programmation était quelque chose impossible à apprendre, et j'ai toujours resté loin d'elle. Et quand je suis près de code, je ne pourrais jamais le comprendre.
Puis un jour je me suis assis et lire certains de base débutant tutoriels, et travaillé mon chemin à partir de là. Et aujourd'hui, je travaille comme programmeur et j'ai aimé chaque minute.
À ajouter, je ne pense pas que la programmation est facile, c'est un défi et j'aime en apprendre plus et il n'y a rien de plus amusant que de résoudre certains problème de programmation.
"On Error Resume Next" était une sorte d'erreur de manipulation
Que le logiciel de programmation nécessite une base solide en plus de mathématiques.
Pendant des années avant que j'ai commencé à coder m'a toujours dit que pour être un bon programmeur, il fallait être bon à l'avancée de l'algèbre, la géométrie, le calcul, trig, etc.
Dix ans plus tard, et je ne l'ai une fois eu à faire quelque chose qu'un huitième niveleuse ne pouvais pas.
mod
fonctions de tous les temps (en général, dans des conditions basées sur des indices), et je n'ai jamais appris que dans la huitième année.Que l'optimisation == réécriture en langage d'assemblage.
Quand j'ai vraiment compris l'assemblée (en venant de la BASE), il semble que la seule façon de faire exécuter du code plus rapide était de le réécrire en assemblée. A fallu quelques années pour constater que les compilateurs peuvent être très bon lors de l'optimisation, et en particulier avec les Processeurs avec la direction de la prévision, etc ils peuvent probablement faire un meilleur travail qu'un homme peut faire dans un laps de temps raisonnable. Aussi que de passer du temps sur l'optimisation de l'algorithme est susceptible de vous donner une meilleure gagner que de perdre du temps la conversion d'un sommet à un langage de bas niveau. Aussi que l'optimisation prématurée est la racine de tous les maux...
Je dirais que le stockage de l'exercice élément d'une date de 2 chiffres est une hypothèse qui a plané sur toute une génération de développeurs. L'argent qui a été soufflé sur Y2K était assez horrible.
Que rien d'autre que l'insertion/le tri à bulles est tout simplement de la magie noire.
Que XML serait vraiment interopérable et lisible par l'homme de format de données.
Que le C++ a été en quelque sorte intrinsèquement meilleure que toutes les autres langues.
Ce que j'ai reçu d'un ami un couple d'années devant moi au collège. Je l'ai gardé avec moi pendant un trop long moment (je rougis maintenant). C'est seulement après avoir travaillé avec elle pendant 2 ans avant que je puisse voir les fissures pour ce qu'ils étaient.
Pas et rien n'est parfait, il y a toujours place à l'amélioration.
J'ai cru que la création de programmes serait exactement comme ce qui a été enseigné en classe...vous vous asseyez avec un groupe de personnes, d'aller sur un problème, trouver une solution, etc. etc. Au lieu de cela, le monde réel est "Voici mon problème, j'en ai besoin résolu, allez" et dix minutes plus tard, vous obtenez un autre, ne vous laissant pas le temps réel, afin de planifier votre solution efficace.
J'ai pensé intégrer modèles de conception était génial, quand ils ont été introduits dans un CS de classe. J'avais programmé sur 8 ans en tant que hobby avant, et je n'ai vraiment pas solide compréhension de la façon de créer des abstractions.
Modèles de conception senti comme de la magie; vous pourriez faire des choses vraiment bien. Plus tard, j'ai découvert la programmation fonctionnelle (via Mozart/Oz, OCaml, plus tard, la Scala, Haskell, et Clojure), et je compris alors que de nombreux modèles ont été juste standard, ou plus complexe, parce que la langue n'était pas assez expressif.
Bien sûr, il ya presque toujours une sorte de modèles, mais ils sont à un niveau supérieur dans les langages expressifs. Maintenant, j'ai fais des professionnels de codage en Java, et j'ai vraiment sentir la douleur quand je dois utiliser une convention telle que visiteur ou d'un modèle de commande, au lieu de la correspondance de formes et des fonctions d'ordre supérieur.
Pour la première quelques années, je suis a la programmation, je n'ai pas l'attraper sur que 1 Ko est techniquement 1024 octets, et non 1000. J'ai toujours été un peu intrigué par le fait que la taille de mes fichiers de données semblaient un peu hors de ce que je m'attendais à être.
Que les contrôles des conditions comme:
sont effectuées dans un ordre non spécifié...
printf("%d, %d\n", i++, i);
Que ma programmation serait mieux et plus vite si j'ai effectué seul.
"Le projet sera réalisé en 2 semaines"
et
"Qui va prendre 2 heures à mettre en œuvre"
Que je puisse comprendre mon propre code sans commentaires!!!
Je pensais que j'en aurais besoin.
Que typées dynamiquement des langages comme Python ou Ruby sont en quelque sorte moins qualifiés pour une utilisation sur de grands projets.
Une hypothèse que j'ai eu comme une recrue de l'époque était que les personnes ayant plus d'années dans le domaine automatiquement sont mieux développeurs..
C'est embarrassant, mais pendant longtemps je n'ai pas vraiment saisir la différence entre les types de référence et des types de valeur. J'ai pensé que vous deviez utiliser le mot-clé ref modification d'un objet dans une méthode différente.
C'est l'un des la plupart des concepts fondamentaux de C# que je devrais l'avoir connu.
C'est vraiment gênant, mais quand j'ai commencé à apprendre à programmer, rien ne pouvait me satisfaire. Je voulais écrire sur les jeux vidéo. Non triviaux de petits programmes tous ces livres m'a demandé d'écrire. J'ai donc décidé que je pouvais facilement sauter de 10 chapitres et ignorer les principes de base.
J'ai donc ignoré variables!
Le problème est que je n'ai pas reconnaître des mots clés à partir des conventions:
J'ai fait cela pendant plus d'un an et a même fait un tic-tac-au-jeu en 3000 lignes!
J'ai été ravie par mes trucs à ce point, jusqu'à ce que j'ai trouvé un tic-tac-au de 150 lignes sur Internet. Alors réalisé que j'étais un idiot et il a recommencé.
Que la programmation est facile.
Que Unix et Linux systèmes d'exploitation sont bien conçu ... je devrais probablement qualifier cette(!)
Tout d'abord, la vue est renforcés par ces anti-truismes comme:
Il peut être plus vrai de dire qu'ils ont été bien conçu et bien fait, et sûrement de parties d'entre eux sont, mais même c'est juste un jugement relatif, par rapport à certains affreux versions de Windows. Voici quelques exemples de choses qui sont mal fait:
Dans l'ensemble, ils nécessitent inutile de l'expertise pour fonctionner. Ou plutôt beaucoup de connaissances où il y a seulement une quantité modérée de compréhension.
C'est pas mal du tout. Linux est politiquement mieux et de ne pas corrompu par les besoins de l'entreprise, mais, malheureusement, dans une large mesure, beaucoup de la technique highground a été perdu.
Quand j'ai commencé après avoir été diplômé de l'université, j'ai attendu que de plus hauts et les développeurs de savoir ce qu'ils faisaient. J'avais tort....
Ok, j'ai appris la programmation assez tôt. J'ai été 14 ans. Et j'ai tenu toutes sortes de folles croyances, mais ne me demandez pas sur le moment précis, parce que c'était un ... depuis très longtemps.
Ok, donc, j'ai cru pendant un temps que si vous utilisez le terme de synchroniser en Java, Java permet de résoudre ce nasting synchronisation chose pour vous
J'ai cru pendant au moins une demi-année, plus probable, que le typage statique amélioration des performances.
J'ai cru que libérer quelque chose serait de mémoire de retour en arrière de l'OS.
J'ai cru que malloc appelle bouillir vers le bas pour vérifier si il y a assez d'espace libre sur l'OS, donc malloc devrait être peu coûteux.
J'ai pensé longtemps que Java a été construit avec tous les avantages et les défauts des autres langues dans l'esprit, dans un "mélange parfait" qui permettrait de prendre les meilleures propriétés des autres langues, et de rejeter les erreurs.
J'ai considérablement sous-estimé le nombre de cas où LinkedLists surpasser ArrayLists.
Je pensais que NP-dureté était une preuve qu'aucune INSTANCE pourrait être résolu efficacement, ce qui est trivialement faux, pour un certain temps.
Je pensais que trouver le meilleur vol-plan de l'agence de voyages des sites web prendrait tellement de temps à cause du "Problème du voyageur de commerce", comme je l'ai fièrement gloussa à mes parents (quand j'étais petite, d'accord?!)
Pourrait venir avec plus. Aucune idée de combien de temps j'ai ensuite collé à chacun d'eux. Désolé.
PS:
Ahh, ok, cela a éclairci pas si lentement, mais je vois les débutants ce faire, chaque maintenant et puis, j'ai donc pensé que vous pourriez être intéressé: je pensais aussi que pour stocker un nombre incertain de choses, vous aurez besoin de déclarer une nouvelle variable pour chaque. J'aimerais créer des variables a1, a2, a3, ..., plutôt que d'utiliser une variable a, qui, je le déclarer à être un vecteur.
Que c'est une 9-5 emploi
J'ai l'habitude de croire que la majorité des travaux sur une application était en fait de la programmation. Je suis sûr que c'est vrai dans certains cas, mais dans mon expérience, je passe plus de temps à faire des recherches, de documentation, de discuter, et l'analyse qu'en fait le codage. (Je travaille sur un logiciel qui exploite une base de laser du capteur, et de déterminer comment mieux contrôler le matériel est beaucoup plus difficile que d'écrire le code pour le faire).
J'ai aussi l'habitude de penser que les milieux ouverts où les programmeurs peuvent regarder par-dessus leur épaule et demander au gars (en général) à côté d'eux une question étaient les meilleurs environnements pour une équipe de programmeurs pour parvenir à une solution. Il s'avère qu'une sombre chambre solitaire est plus productif, de l'équipe ou pas d'équipe.
Lorsque j'ai obtenu mon diplôme, j'ai supposé que la programmation professionnelle serait comme de programmation au collège, ce qui signifie que j'aurais les entrées et les sorties attendues et demandé de remplir la boîte noire qui fait la conversion. En réalité, je dois trouver les entrées, les sorties et la boîte noire.
Je n'ai pas l'habitude de penser que le marketing et les ventes gars ont été le fléau de la race humaine, si naïf.
Avoir Pas de défauts est possible avant d'aller vivre.
Ce n'est certainement pas vrai, même P2 défauts de rester ouvert à la fois.
Que la révision du code sont une perte de temps.
Ayant déménagé d'une société où ils ont été entièrement facultative à un autre où ils sont obligatoires (même vérifié) j'ai fini par comprendre leur utilité. Avoir une deuxième paire d'yeux sur le code, même sur le plus banal des morceaux, peut:
Un) vous sauver de l'embarras quand tu vis quelque chose de trivial (un banal examen du code, par exemple, ne nous ont empêchés de spamming des centaines d'e-mails à nos clients, à mon ancien boulot)
B) peut vous enseigner des choses que vous ne saviez pas, en premier lieu (je suis toujours à apprendre de nouvelles bibliothèques à mon emploi actuel inévitablement à une grande entreprise, quelqu'un est déjà tombé sur le problème que vous avez et faire un meilleur travail de le résoudre - c'est juste une question de savoir où chercher)
C), à tout le moins s'assurer que quelqu'un d'autre que vous ne sait comment les choses fonctionnent.
En fin de compte, je me retrouve de plus en plus heureux avec le code que j'ai présenter ici, dans mon emploi précédent, même si à l'époque, je pensais que je savais tout 🙂
Que si les conditions ont été évaluées à chaque ligne, et si vous avez écrit un code comme ceci:
Le résultat:
"if (a) then ..."
motif (ouNOT a
), oùa
est l'un des CPU drapeaux. Depuis conditionnelle sauts ne sont pas très rapide, il est logique d'avoir plusieurs instructions conditionnelles avec le même état dans une rangée. Mais si vous ne changer que l'état du pavillon à mi-chemin, à la suite des directives de l'utilisation de la nouvelle valeur de l'indicateur.Que la conception du système d'exploitation de NT est imparfait, comparativement à UNIX. Il s'est avéré que le Noyau NT et les décisions de conception sont très semblables pour toutes les UNIX comme système et que la plupart des problèmes que vous obtenez dans le noyau est le résultat d'un tiers les pilotes de buggy écrit par buggy les entreprises.
Que j'étais un bon programmeur!
Que .NET des structures (C# et VB.NET) étaient les types de référence, tout comme les classes.
J'ai "reçu" ce morceau de sagesse à un certain point, peu de temps avant ou après .NET 1.0 est arrivé sur la scène (je n'ai aucune idée d'où il peut avoir surgi de l'ensemble de mon esprit, comme Athéna du front de Zeus), et l'a gardé jusqu'à ce que les débarrasser de la notion de Jon Skeet il ya 4 mois.
Merci Jon.
P. S. Pas de programmation relative, mais j'ai aussi cru (jusqu'à environ 5 minutes) que "Apollo a jailli l'ensemble du front de Zeus".
Que les octets et les personnages ont été pratiquement la même chose - "ASCII" était juste une façon de mappage d'une valeur d'un octet à un glyphe sur l'écran.
Lecture sur Unicode vraiment ouvert les yeux (bien que je n'ai toujours pas bien le comprendre).
Qu'un jour j'aurais une idée réaliste de combien de temps il faudrait pour construire une partie non négligeable de code/système/whatever.
J'ai utilisé de supposer qu'il suffit de programmer des applications Win32.
Également que chaque programme doit venir avec une interface graphique, parce que la ligne de commande est "obsolète".
Je peux les lire et de faire votre travail.
J'ai pensé à tout ce que j'avais à faire pour améliorer les performances de base de données a été mis à la base de données en 3ème forme normale.
Que l'orientation de l'objet est toujours le meilleur moyen de concevoir le code source et le sera toujours.
Que cela:
et ce:
été garantie équivalent en C++. Je pensais que la deuxième forme est la garantie d'être interprétée comme si elle avait été écrite comme la première forme. Pas tellement: voir C++ Syntaxe D'Initialisation.
En arrière quand j'ai programmé sur la TI-83, j'ai pensé que vous ne pouvez pas affecter une variable à lui-même. Donc (en ignorant que c'est du code C, pas de TI-BASIC) au lieu d'écrire
Je voudrais écrire
Quand j'ai appris sur
+=
et++
il a soufflé mon esprit.Certaines des choses que j'ai encore du mal avec sont les suivantes idées fausses - je encore essayer et de le garder même si je savoir mieux:
Que les Ide serait d'obtenir plus rapidement.
Que je devrais toujours optimiser mon code. Cela ne veut pas dire que je ne devrais pas réfléchir avant de me l'écrire, mais que je devrais réfléchir à la façon de serrer tous les bits de la performance de chaque instruction, même au point de sacrifier la lisibilité.
Que les espaces de noms XML (ou pire, de bonne formation) sont en quelque sorte plus difficile que d'essayer de le faire sans eux.
Un très commune bévue, même au W3C!
Mon hypothèse incorrecte: alors Qu'il y a toujours de la place pour l'amélioration, dans mon cas, je suis à peu près aussi bon qu'un programmeur que je peux l'être.
Quand je suis sorti de l'université, j'avais déjà fait de la programmation C pendant 6 ans, savait tout à propos de "programmation structurée", la pensée "OO" c'était juste un effet de mode, et de la pensée ", l'homme, je suis bien!!!!"
10 ans plus tard, je me disais "OK, j'étais loin d'être aussi bon que je le pensais... maintenant - je obtenir les idées de polymorphisme et de la façon d'écrire nettoyer OO programmes... maintenant je suis vraiment bon".
Donc, en quelque sorte, j'ai toujours été vraiment bon, mais aussi toujours façon mieux que je ne l'était auparavant.
Le sou abandonné peu de temps après et j'ai enfin un peu d'humilité. Il y a toujours plus à apprendre (encore pour écrire un programme dans un rôle purement fonctionnel de la langue comme Haskell).
Je pense que j'avais 10 ans quand quelqu'un m'a convaincu qu'il y aura un ordinateur capable de faire tourner une boucle infinie en moins de 3 secondes.
En C++, pendant longtemps, j'ai tkinking que le compilateur refuse votre moment de donner un définition pour un pur méthode virtuelle.
J'ai été étonné quand il se rend compte que je me trompais.
Plusieurs fois, lorsque je dis à quelqu'un d'autre à lui donner une valeur par défaut de mise en œuvre de la pureté de ses destructeur virtuel pour sa classe abstraite, il/elle se penche vers moi avec de GRANDS yeux. Et je sais que d'ici un long débat qui va suivre ... Il semble qu'une croyance commune un peu propagation à l'intérieur de C++ les débutants (que je considère moi aussi .. je suis toujours en apprentissage actuellement!)
lien wikipédia pour c++méthodes virtuelles pures
J'étais convaincu que, pour au moins 6 ans, que chaque problème a exactement 1 solution.
Tout à fait inconscient de plusieurs algorithmes avec différentes complexités, de l'espace/temps des compromis, OOP vs Fonctionnelle vs Impératif, les niveaux d'abstraction et de indécidable problèmes. Lorsque cette merveilleuse naïveté cassé, il a ouvert un monde de possibilités et claque la porte de simplement s'asseoir et construire des choses. M'a fallu du temps pour comprendre comment en choisir un et de courir avec lui.
Comme un vieux procédure programmeur, je n'ai pas vraiment compris OO quand j'ai commencé la programmation en Java pour un projet de loisirs. Écrit beaucoup de code sans comprendre vraiment le point des interfaces, essayé de maximiser le code de la ré-utilisation en forçant le tout dans une hiérarchie d'héritage - qui souhaitent Java avait l'héritage multiple quand les choses ne rentrait pas de nettoyage dans une hiérarchie. Mon code a fonctionné, mais je grimace à ce premier genre de choses maintenant.
Quand j'ai commencé à lire sur la dynamique des langues et à essayer de comprendre un bon d'apprendre, en lisant sur Python significative de l'espace m'a éteint - j'ai été convaincu que je déteste ça. Mais quand j'ai finalement appris Python, c'est devenu quelque chose que j'aime vraiment. En général, nous faisons l'effort dans quelque langue que ce soit à la cohérence des niveaux de retrait, mais n'obtenez rien en retour (autres que la lisibilité visuelle). En Python, j'ai trouvé que je ne faisais plus d'efforts que j'avais avant à l'égard des niveaux de retrait, et Python manipulé ce que j'avais d'avoir à utiliser des accolades ou que ce soit dans d'autres langues. Il rend Python se sentent plus propre à moi maintenant.
G'day,
Que je serais juste la conception et l'écriture de code.
Pas de la collecte des besoins, de la documentation ou de soutien.
acclamations,
jamais rencontré entier de promotion de l'avant...
et la pensée que 'z' tiendrait 255 dans ce code:
corriger la valeur de z est 1
J'ai récemment découvert que plus d'un million d'instructions sont exécutées dans un Hello World! programme en c++ que j'ai écrit. Je n'aurais jamais attendu autant pour quelque chose d'aussi simple que d'un seul cout déclaration
Que les goto sont nuisibles.
Maintenant, nous nous continuer ou de casser.
L'OO n'est pas forcément mieux non-OO.
je suppose que OO est toujours mieux.. puis j'ai découvert d'autres techniques, telles que la programmation fonctionnelle, et avais la réalisation OO n'est pas toujours mieux.
Que le C++ a été le plus cool de la langue là-bas!
ne pas utiliser de l'avancée de la mise en œuvre de fonctionnalités spécifiques car vous risquez de vous souhaitez passer des implémentations "un certain temps". je ai fait cela maintes et maintes fois, et presque toujours le commutateur n'est jamais arrivé.
Je suis une jeune jeune développeur en espérant le faire professionnellement parce que c'est ce que j'aime et c'est une liste d'opinions fois, j'ai tenu que j'ai appris par ma brève expérience sont mal
L'horrible gâchis que vous obtenez lorsque vous n'avez pas séparée de l'interface utilisateur à partir de la logique est acceptable et est la façon dont tout le monde écrit des logiciels
Il n'y a pas une telle chose comme trop de complexité, ou l'abstraction
Une Classe, Une Responsabilité - je n'ai jamais vraiment eu de ce concept, c'est très formitive pour moi
Test est quelque chose que je n'ai pas besoin de le faire quand je suis de codage dans ma chambre
Je n'ai pas besoin de contrôle de la source parce que c'est exagéré pour les projets que je ne
Les développeurs font tout, nous sommes censés savoir comment concevoir des icônes et prendre de superbes mises en page à la recherche
Dispose n'a pas toujours besoin d'un finaliser
Une exception doit être levée lorsqu'n'importe quel type d'erreur se produit
Exceptions pour les cas d'erreur, et la plupart du temps, c'est OK pour simplement retourner une valeur indiquant l'échec. J'ai fini par comprendre cela récemment, j'ai été dit et jette toujours des exceptions pour beaucoup plus longtemps
Je cam écrire une application qui n'a pas de bugs à tous les
Que nous comme les ingénieurs en logiciel peut comprendre ce que l'utilisateur veut vraiment.
Que de plus les commentaires sont mieux. J'ai toujours essayé de faire de mon code aussi lisible que possible, principalement parce que je suis à peu près sûr que le gars qui va corriger le bug que je me laisse glisser. Si dans les années passées, j'ai utilisé les paragraphes après les paragraphes de commentaires.
Finalement, il m'est apparu qu'il y a un point où plus de commentaires, peu importe combien habilement structuré--de ne pas ajouter de la valeur et devient chiant à entretenir. Ces jours-ci, je prends la table des matières + notes de bas de page de l'approche et tout le monde est heureux pour elle.
Que la seule localisation/internationalisation problème de la traduction des messages.
Je pensais que toutes les autres langues (et je n'avais aucune notion de paramètres régionaux) ont été comme l'anglais dans tous les sens, sauf pour les mots et la grammaire. Pour localiser/internationaliser un morceau de logiciel, par conséquent, vous avez seulement besoin d'avoir un traducteur traduire les chaînes de caractères qui sont indiqués à l'utilisateur. Puis j'ai commencé à réaliser:
Même aujourd'hui, je lis parfois sur les enjeux liés à l'internationalisation qui me surprend.
J'ai l'habitude de penser que Internet Explorer 6 modèle de boîte est une mauvaise idée stupide MS est venu avec seulement de casser la compatibilité avec les autres navigateurs.
Beaucoup de CSSing m'a convaincu qu'il est beaucoup plus logique, et peut rendre le design de la page de maintenance (changement de blocs de remplissages/frontières/marges) beaucoup plus facile.
Penser le monde physique: le changement des remplissages ou des frontières de la largeur d'une page A4 ne permet pas de modifier la largeur de la page, seulement de réduire l'espace pour le contenu.
Je pensais que j'étais un très bon programmeur. Occupé ce poste pendant 2 ans.
Lorsque vous travaillez dans un vide, il est facile de remplir la pièce 😀
Que désormais populaire signe $ est illégal dans le cadre d'une application java/javascript identificateur.
De penser que je sais tout sur une certaine langue /topic dans la programmation. Tout simplement pas possible.
Que la machine virtuelle architectures, comme Java et .NET ont été essentiellement sans valeur pour quoi que ce soit à l'exception de projets de jouets en raison de problèmes de performances.
(Enfin, pour être juste, peut-être que c'ÉTAIT vrai à un certain point.)
Il est important de s'abonner à plusieurs flux RSS, lire beaucoup de blogs et de participer à des projets open source.
J'ai réalisé que, ce qui est vraiment important, c'est que je passe plus de temps à faire du codage. J'ai eu l'habitude de lire et suite à de nombreux blogs, et alors qu'ils sont une riche source d'information c'est vraiment impossible à assimiler le tout. Il est très important d'avoir équilibré la lecture, et de mettre davantage l'accent sur la pratique.
Reg. l'open source, j'ai peur de ne pas être populaire. J'ai essayé de participer à l'open source, et la plupart d'entre eux dans .NET. Je suis consterné de voir que de nombreux projets open source ne suivent même pas une bonne architecture. J'ai vu un système .NET pas à l'aide d'une architecture en couches, et la base de données de code de connexion a été, il y en a partout y compris le code derrière, et j'ai renoncé.
Que les responsables savent ce dont ils parlent.
Que ma scolarité permettrait de me préparer pour un emploi dans le domaine.
Que l'apprentissage de la langue est l'apprentissage de la syntaxe, et les pièces les plus courantes de la bibliothèque standard.
Que le bytecode des langages interprétés (comme C# ou F#) sont plus lents que ceux bouton de réinitialisation - porcs que de compiler directement en code machine.
Eh bien, quand j'ai commencé à avoir que de croire (dans les années 80), c'était vrai. Cependant, même en C# - temps j'ai parfois demandé si "mettre l'intérieur de la boucle dans une .fichier cpp ferait mon appli aller plus vite").
Heureusement, pas de.
Malheureusement, je viens de réaliser qu'il y a quelques années.
"Ça va marcher cette fois"
l'hypothèse que je devais rendre le programme 100% complète et sans bug et le signaler comme "terminée". Parfois, l'entreprise souhaite diffuser le programme quand il y a beaucoup de bugs pour obtenir des parts de marché en premier.
qu'après avoir fini le CS de l'école, je peux commencer un travail et d'utiliser mes connaissances que j'ai apprises à l'école pour les applications du monde réel.
(En fait, je souhaite que je ne perdrais pas 4 ans de ma vie dans l'apprentissage des systèmes d'exploitation et prolog)
Je pourrais passer des jours à essayer de réduire la quantité de mémoire de ma couche de gestion utilisé, juste pour réaliser plus tard que les WinForms (GUI) de mon projet a utilisé 4 fois plus de mémoire que le reste de l'application.
Pendant une longue période (5 ans environ), j'ai pensé que PHP les rochers.
Je pensais que je sais algorithmes. Et puis j'ai rejoint Topcoder.com
Bit à bit des comparaisons sur les entiers dans SQL OÙ les clauses sont pratiquement gratuits en termes de performances des requêtes.
Comme il arrive, c'est un peu vrai pour la première demi-million de lignes ou de manière. Après cela, il s'avère être extrêmement ONU-gratuit.
Que l'ASCII a été stocké dans une autre façon de binaire
Dans les premiers jours, la plupart des ordinateurs personnels a une cassette d'interface pour le chargement et le stockage de programmes. Je n'ai pas un ordinateur à ce moment, mais lire tout ce que je pourrais obtenir mes mains sur (la plupart des magazines), qui n'a rien à faire avec des ordinateurs (c'était la fin des années 70 - pas d'internet pour moi). Pour une raison que j'étais sous l'impression que les programmes ont été exécutés directement à partir de la cassette et que la seule raison pour laquelle les ordinateurs avaient toute la RAM est de stocker des variables alors que le programme est exécuté. J'ai pensé que lorsque le code a exécuter une instruction de saut, il serait en quelque sorte un retour en arrière ou avancer la bande à la position correcte et continuer à partir de là.
Que tout le monde est en utilisant les dernières technologies, alors que mon équipe est le seul coincé avec inférieures des outils désuets. (Sauf pour le mystique cobol dinosaures)
Que tout le monde veut produire le meilleur\la plupart des sutiable code possible pour un problème...
Que, le propriétaire du code que j'ai écris, je suis la seule personne qui devrait le comprendre ou de le toucher.
Que les gens se soucient des meilleures pratiques, ou même consistance.
le texte d'alt http://images.despair.com/products/demotivators/teamwork.jpg
Que j'ai besoin de définir toutes les variables que je vais utiliser dans ma fonction dans son début (Pascal style).
J'ai l'habitude de croire que je dois penser à TOUTES les ressources pour être utilisé par ma fonction et de les définir avant de commencer le codage, c'est probablement parce que ma première langue est l'Pascal où c'est l'exigence. Puis, quand j'ai déménagé à la C, je voudrais définir les variables temp qui sont utilisés uniquement dans des boucles en dehors de ces boucles, abstraction faite en boucle portée, juste pour que "tout sera défini au début".
Il m'a fallu plusieurs années pour comprendre que la définition de toutes les ressources à l'avance n'est pas un houx de la vache, et que la portée est par lui-même ultra important pour la lisibilité du code.
J'ai pensé "duck typing" était en fait "conduit en tapant" quand j'ai entendu parler de lui, semblable à la façon dont les gens disent souvent des bandes de canard. "Duck typing" sonnait faux, tandis que "conduit en tapant" fait une étrange sorte de sens (pavées-ensemble des types).
typedef tape ducttape;
Que la programmation pour les juniors et que les meilleurs gestionnaires de projet sont des personnes qui ne peuvent pas programme.
De la procédure développeurs/programmeurs pas familier avec SQL et les bases de données relationnelles n'avez pas besoin d'aucune formation officielle ou de la compréhension de la façon de travailler avec et ou de l'utilisation de SQL et qu'une lecture rapide de quelque chose comme SQL Pour les Nuls est suffisant dans le travail avec les bases de données Relationnelles comme Oracle & SQL Server.
Trop souvent de nombreuses erreurs dans les applications traitant des données stockées dans une base de données relationnelles comme Oracle et SQL Server sont causées par un manque de compréhension ou de l'utilisation de la langue de base de données relationnelles; SQL.
J'ai l'habitude de travailler pour un fournisseur de logiciels qui a la mentalité qu'un développeur besoin était le SQL Pour les Nuls livre ou quelque chose de semblable, et qu'ils seraient entièrement équipé pour traiter toute base de données relationnelle question. Maintenant que les clients de ce fournisseur ont des bases de données de mesure dans des centaines de giga-octets, ce manque de connaissances SQL est de retour dans un sens négatif. Ce n'est pas seulement de mauvaises effectuer des recherches et de la ou des mises à jour et des inserts qui sont un problème, mais la conception réelle de la base de données elle-même qui est le véritable obstacle.
Tout cela aurait pu être évité et a abouti à beaucoup moins de frais maintenant, si à l'époque le responsable du développement aurait traité de SQL et des bases de données relationnelles avec le même leve de respect qu'ils ont fait avec la langue, ils ont construit à la demande avec des.
Ne pas faire l'impasse SQL comme sans importance, car il VA revenir vous hanter par la suite. Vous pouvez être en mesure de sortir avec elle pour un moment, même des années, mais vous allez finir par frapper ce point de rupture où l'on ne peut progresser sans une complète re-conception de votre base de données et c'est alors que les coûts seront plus élevés.
Que vous n'avez jamais finir le projet vous n'avez pas à démarrer.
Semble vraiment stupide, mais j'ai mis hors de nombreux projets parce que l'échelle était tout simplement écrasante. Ayant tout juste terminé un monstre d'un projet, j'ai réalisé que je n'aurais jamais commencé si j'avais compris la portée. En réalité, si, même les plus complexes, le système est assez simple quand cassé dans discrètes et défini morceaux. Pourtant regardé au niveau macro-économique, il est rapidement écrasante.
Qu'il y a toujours une "bonne" façon de faire les choses. J'ai tenu sur cette hypothèse pour beaucoup trop longtemps après avoir quitté l'université.
Bien sûr, je suis venu à réaliser qu'il y a toujours plusieurs façons de tâche peut être complété. Il y a toujours des avantages et des inconvénients de chaque méthode. Regarder les informations disponibles, décider, alors assurez-vous que vous pouvez justifier de votre patron.
De retour au début de mon C++ jours (beaucoup de cheveux, il ya) j'ai été entouré par Java universitaires. Quand on lui a demandé un avantage du C++ sur Java (typiquement une question j'ai essayer de rejeter comme artificiel, mais là vous allez), j'aimerais inclure dans ma réponse que le C++ vous a donné les références et pointeurs. La Java gars aurait l'air incrédule et suggèrent que les références sont des pointeurs, et de rire à me sortir de la chambre. J'ai insisté pour que les références et les pointeurs sont distinctes dans C++.
Et, pour être juste, j'avais raison. Les références et les pointeurs sont différents sémantiquement et syntaxiquement. Malheureusement, j'ai sauvegardé ma demande avec une erreur de raisonnement: que l'implémentation sous-jacente était différent.
Il a été ma conviction que les références ont été, par la normalisation, de la des alias de noms de dans la syntaxe de la même manière qu'un
typedef
est un alias du type de stockage.J'étais sûr que les références ne sont pas des objets et n'avait pas de stockage, ils l'ont fourni de multiples haut-niveau mappages de "nom" pour "objet". À cet égard, j'ai pensé qu'ils étaient comme des doux liens dans un système de fichiers:
Bien sûr, même si des optimisations peut conduire à ce que, références n'ont de stockage. Ils sont des objets distincts, même si la syntaxe fait de son mieux pour résumé ce que l'écart du programmeur.
Qu'il suffise de dire, j'ai été déçu d'apprendre qu'un compilateur avec des optimisations éteint peut mettre en œuvre une référence en tant que pointeur, nécessitant un déréférencement de l'opération: que j'étais en fait de la création de l'analogie à une lien dur dans un système de fichiers:
Standard C++ n'a pas de spécifier la façon dont les références doivent être mis en œuvre, si ma théorie pourrait être vrai pour certains toolchains, mais il ne prend pas le mainstream compilateur... et ce n'est certainement pas mentionnée dans la norme.
S'avère qu'il n'a pas d'importance si vous vérifier si l'allocation de la mémoire renvoie une référence ou pas sous Linux, comme il sera effectivement mensonge à vous et soit effectivement allouer de la mémoire à un certain moment dans l'avenir, ou d'annuler votre programme tout à fait si il n'a pas la mémoire dont vous avez besoin.
Depuis le collège, je croyais que j'étais le maître de la programmation. depuis que j'ai pu code, mais d'autres ne pouvaient pas. Mais quand j'ai rejoint l'entreprise, j'ai été frappé par mon ignorance sur l'essentiel. Tous mes hypothèses à propos de moi-même s'est avéré être faux! Maintenant, je sais ce que j'ai besoin de savoir et ce que je ne sais pas!
Qu'il était si important de faire des programmes efficaces, sans perdre un octet, ni un cycle CPU.
Mais avec plus d'expérience, ce n'est pas sur octets ou sur des cycles de PROCESSEUR, son sujet de votre flux de pensée, de continu, ininterrompu, un peu comme un poème.
Essentiellement, n'essayez pas trop dur.
Quand au collège (milieu des années 90) ils n'avaient que Windows 3.11 machines dans le laboratoire d'informatique (je sais, bizarre collège).
Pendant un moment j'ai pensé que seule la plate-forme Windows est pertinent pour moi en tant que programmeur professionnel et que toutes les autres plates-formes ont été seulement intéressante de l'histoire un point de vue académique.
Après avoir obtenu son diplôme de l'école et de l'apprentissage sur les unix modernes les environnements linux et je ne pouvais m'empêcher d'éprouver de la colère et déçu de mon boiteux l'école.
Je ne peux pas encore croire que j'ai obtenu avec un ordinateur diplôme en génie sans jamais voir un shell bash ou même d'avoir entendu à propos d'emacs ou vim.
J'ai toujours supposé que n'importe qui d'écrire n'importe quel code pour n'importe quel langage utilisé un programme d'édition.
Je travaillais avec un de mes clients qui m'avait principalement de soutien et d'écrire de la plus complexe des choses pour lui. Un jour, il a foiré un fichier, grand temps. Il a accidentellement enregistré plus de trois heures de dollars de son propre travail, et quand je lui ai demandé pourquoi il n'a pas de sauver le plus souvent il a répondu, "parce que je n'ai pas fait". Naturellement, ce n'était pas une réponse acceptable, et j'ai fourré et poussé un peu plus loin. J'ai fini par découvrir qu'il n'a jamais utilisé de n'importe quel programme d'édition, JAMAIS! Même pas notepad.exe! Il avait été l'aide en ligne CPanel de l'éditeur pour les fichiers! Il n'a même pas de "Trouver" la fonction. Il ne pouvait pas sauver jusqu'à ce qu'il a fait parce qu'il a été éditer le fichier en ligne sur le site!
Inutile de dire que j'ai été sidéré, et il est encore en utilisant le CPanel de l'éditeur à ce jour...
L'apprentissage des expressions régulières, vous gagnerez du temps
Ma plus longue tenue (et donc plus coûteux) d'une mauvaise hypothèse était la suivante: "L'entreprise est saine et raisonnable, je suis juste de ne pas les comprendre encore."
En alternance:
Que, par l'apprentissage d'une science exacte, je n'aurais pas besoin d'améliorer mon peu de compétences sociales.
Que l'ordre d'évaluation si les déclarations en C/C++ a été compilateur spécifique. Ainsi écrit:
if ( pointeur != NULL ) && ( pointeur->doSomething() )
Onu-sûr parce que l'ordre d'évaluation peuvent être échangés. J'ai découvert récemment (après de nombreuses années de jaillissement que mensonge) que de la partie de la norme ANSI-C les spécifications, vous pouvez garantir l'ordre et parfaitement sûr.
James
Que je n'aurais jamais devenir riche le logiciel de programmation pour quelqu'un d'autre
À l'école, on vous apprend la programmation est "lire la saisie, le traitement des données, écrire la sortie". En réalité, il est rare qu'une étape de traitement, pour la Plupart, le codage est juste "lire l'entrée, la sortie"
Généralement, c'est soit "lecture de l'utilisateur, écrire dans la base de données" ou "lecture à partir de la base de données, l'affichage sur écran". Ces deux cas de couverture d'environ 95% du travail que vous aurez jamais faire.
Satisfaire un client par implenting ce qu'il veut - malheureusement, cela implique que le client sait ce qu'il veut.
Le moins de code le mieux. Maintenant, je sais que, parfois, il vaut la peine d'avoir plus de lignes de code si cela les rend plus facile à lire/comprendre
Que d'autres personnes pourraient être dérangé par des bugs connus comme je l'ai été, et permettrait de fixer une priorité sur le travail de projet.
Que l'avantage de la POO, c'est que vous arrivez à la réutilisation de la objet, alors qu'en réalité, c'est la resuse de la reste du code par la création d'un nouvel objet qui a la même interface.
En réalité, l'objet pourrait être de 2% du code afin de les réutiliser, vous reçoit seulement 2% des prestations. Le réel avantage est de réutiliser les autres 98% du code par la création d'un nouvel objet qui permet toutes les autres code pour quelque chose de complètement différent. Maintenant, vous avez la réutilisation de 98% du code. Bien la peine de th 3x plus de temps qu'il faut pour écrire quelque chose comme un objet.
E. g., Si vous avez un logiciel de dessin et soudain, il y a une nouvelle forme que vous voulez être en mesure de tirer, il suffit de changer le ShapeObject (tout en gardant l'interface de la même façon). Rien d'autre dans le programme pour le changement.
Que je n'aurais pas besoin de rapidement refactoriser mon code orienté Objet. Martin Fowler enfin ouvert les yeux.
Que les tests sont juste une autre méthode de la procrastination.
Que PHP mysql_fetch_row était la seule façon de récupérer des données à partir d'une requête SQL exécutée.
Honnêtement, j'ai programmé un ensemble de l'application web sans utiliser mysql_fetch_array, et a dû changer de grappes de numéros à chaque fois que je voulais changer la fonction pour ajouter une colonne supplémentaire.
Que je n'aurais jamais trouver une utilisation pratique dans la programmation de la Karnaugh cartes on m'a appris dans mon ordinateur le programme de sciences.
Que Python était peu pratique, ennuyeux langue (je peux toujours lire certains commentaires sur le début de mon code, à s'en plaindre) et le C++ que le seul vrai langage orienté objet.
J'étais tellement mal, j'ai toujours remplir de honte.
J'ai enseigné moi-même C par la lecture de K&R. Malheureusement, je n'ai pas lu mot pour mot et doit avoir raté quelques choses. J'ai écrit mes propres versions de malloc et calloc que j'ai porté avec moi d'un travail, parce que je ne savais pas que vous pouviez juste en lien avec les bibliothèques existantes. J'ai fait cela pendant plusieurs années jusqu'à ce qu'enfin quelqu'un m'a demandé pourquoi j'étais coltiner ce genre de choses autour de, "euh ... vous vous rendez compte que vous pourriez tout simplement un lien dans les bibliothèques existantes, à droite?"
Que tous les OOP langues ont le même concept de l'orientation de l'objet.
interface
!= une méthode de l'interface.Si vous ne pouvez pas lire mon code, vous ne connaissez pas la langue. J'ai eu un peu de revues de code où j'ai essayé de le contrer avec qui.
A fallu quelques années de plus à apprendre qu'il y a un temps et en un lieu magique avec votre code, et il est dans les bibliothèques, et non pas l'application. L'app est pour des raisons de clarté et de lisibilité. La magie est préférable de l'utiliser lorsqu'elle est cachée derrière les méthodes d'extension et de cadres.
Que je grok de programmation. Par l'étude de la SICP livre, j'ai vu que je ne savais rien. Au moins maintenant je suis de plonger dans la programmation de plus.
l'hypothèse que, si j'écris du code vraiment bien et aussi exempt que possible, et que c'est la meilleure chose que je puisse faire. s'avère parfois, les dirigeants préfère les gens qui essaient de devenir leur favori au lieu de faire le beau travail.
Que la programmation de l'élégance combinée avec l'automatisation a été un substitut adéquat à la bonne vieille tests.
J'ai l'habitude de penser que je ne serai jamais comme les programmes de haut niveau développeur comme le MS développeur, mais maintenant je pense que je peux écrire le même code propre ou même mieux.
Qu'en quelque sorte une société qui gère un grand nombre de relativement élevés de profil/haut de trafic des sites web qui savaient réellement ce qu'ils faisaient. C'est terminé, ils étaient pour la plupart désemparés et extrêmement chanceux d'être dans la situation où ils étaient. Donc, je crois que la morale serait,
solide génie logiciel && pratiques exemplaires != la réussite de l'entreprise
ou......
la plupart des critiques de logiciels de systèmes de == de la merde
Pas plus longue-tenue, mais à un certain moment et pour plusieurs années, j'ai:
C'est pourquoi je n'ai pas choisi "cours d'informatique" à l'école secondaire. Je pensais que je savais déjà assez sur les ordinateurs.
Plus tard à l'université et en dehors de mon erreur:
Enfin, et pour longtemps, j'ai pensé que:
Je pensais que Windows 3.1 est seulement une plate-forme pour jouer en solitaire. Et de DOS est une plate-forme pour BASICA.
Erreur de manipulation est inutile lorsque vous avez testé votre code à fond.
Qu'il y a toujours pas assez de temps pour le terminer avant la date limite.
Qu'un WTF est toujours une preuve d'un mauvais professionnel.
En fait, j'ai réalisé récemment combien WTF je me suis engagé tout au long de ma carrière, mais j'ai été réconforté quand StackOverflow m'a montré ils sont juste un autre logiciel métrique.
Que les variables sont en fait juste des noms de domaines spécifiques dans la mémoire.
Que la création d'une application réussie peut facilement être fait seulement par les programmeurs. Le logiciel est également sur la facilité d'utilisation, bonne mine, de la documentation et de la bonne commercialisation. Le développement logiciel est multi disciplinaire et, à défaut d'une discipline sera probablement pas la demande.
Qu'un langage adapté à la programmation de systèmes doit support [mutable] variables.
Communes pauvres des hypothèses: "la Qualité du Code est secondaire".
Même les plus pauvres hypothèse: "la Qualité de code n'est pas important du tout."
Qualité de code peut être un concept très large. Je disscued il assez bien ici.
Que le plus de lignes de code, puis le mieux le logiciel.
Que vous pourriez memset( this, 0, sizeof(TheObject) ) un objet C++ dans son constructeur, sans conséquences négatives
Que les marketeux se soucient de ce que vous faites.
Que vous avez besoin d'une spécification d'un projet. Plus souvent que pas, vous commencez avec une réunion des ventes et un bloc-notes. Bien sûr, à la fin de la réunion, ils souhaiteraient un délai, "juste ballpark il".
Je n'ai jamais pensé que je serais un programmeur professionnel, j'ai pensé que j'allais travailler avec l'électronique. Mais en fin de compte, la programmation est tellement plus facile et paie donc beaucoup mieux que ce qui a commencé comme un job est devenu ma principale chose.
Mon plus grand préjugé est que je serais autorisé le programme de la façon dont je le voulais. Alors bien sûr, j'ai quitté l'université et j'ai été employé par une société qui avait ridicule des cadres, des règles et des procédures en place qui ne signifiait pas seulement je n'étais pas la programmation de la façon dont je le voulais, mais j'ai été la programmation mal.
Je pensais être codant pour 8 heures d'affilée. De façon réaliste, je reçois 4 heures d'une journée de codage, 1 heure pour le déjeuner, 1 pour les pauses café, et 2 pour le vissage autour /chit bavarder/stack de plus et de moins de couler.
Avant de travailler, je pensais que tous les clients seraient des idiots et ne savez pas deux craps sur les ordinateurs. J'avais tort sur ce coup. Parfois, nous obtenons des projets par des gens qui peuvent le faire mieux que nous le pouvons, ils n'ont tout simplement pas le temps de le faire.
Je pensais que les cabines étaient mauvais, maintenant je les aime 😀 j'ai effectivement déplacé à partir d'un porte-ed office de cabine. J'aime l'ouverture d'esprit.
Tous les programmeurs ne sont pas athlétique. Je pensais que j'étais le seul qui va à la salle de gym. Là où je travaille, au moins 10 d'entre nous aller à la salle de gym tous les jours à 5 heures du matin.
Je pensais qu'il n'y aurait pas de femmes programmeurs. Un couple de nos prospects sont des dames.
Que Java transmet des copies d'objets de fonctions, pas de références.
En d'autres mots, j'ai pensé que si vous passez un objet dans une méthode, puis changer l'objet d'une certaine façon, cela ne change pas l'objet de l'appel de la portée. J'ai toujours passé d'objets dans les méthodes, de les manipuler, puis renvoyé de!
J'ai toujours cru que pour être un bon programmeur a à connaître tous les rouages du système. J'ai eu honte du fait que je ne savais pas tout ce qui est connu au sujet de la langue comme ses bibliothèques, des modèles, des extraits avant de commencer à coder.
Eh bien, je ne suis pas naïf plus.
C'est embarrassant, mais pour longtemps, j'ai cru qu'il était plus efficace en terme de mémoire de nid de mes appels de méthode, ou de faire plusieurs appels de méthode, que pour créer une variable pour stocker la valeur pour chaque appel de méthode en C#.
Que la simplicité presque toujours les battements de la complexité. KISS - Keep It Simple Stupid règles.
Edit: Comme Georg états-dessous, j'ai obtenu ce dont l'un est inversé. Mon esprit doit avoir été perdu dans les réponses. Simplicité presque toujours votre code mieux si elle est utilisée correctement.
Que....qui a besoin de JUnit test lorsque les points d'arrêt sont-elles efficaces? (lors de l'essai d'applications en mode debug). J'ai compris plus tard pourquoi....
Que j'ai pu convaincre les procédures classiques programmeurs de pourquoi OOP maintes fois fournit une meilleure solution.
Que c'est un langage qui décrit le monde a besoin de la capacité à décrire des objets complexes et de leurs relations.
Arguments généralement inclus bêtises sur les classes abstraites, auxquelles j'ai répondu avec "ne sont pas tous de la programmation orientée objet programmeurs sont fraîchement sorti de l'Uni et toujours obsédé par les résumés". Ou le classique", il n'y a rien que vous pourriez faire dans la programmation orientée objet que je ne pouvais pas faire avec strictement programmation procédurale", dont j'ai l'habitude répondu à avec les, "Ce n'est pas que vous pourrait, c'est que vous serait si vous aviez un plus vaste ensemble d'outils".
J'ai appris à accepter qu'ils ne voient pas le monde à travers le même objectif que je fais.
que des solutions temporaires ne sont pas des solutions permanentes
ou, en d'autres mots: solutions ne sont pas pour toujours :)).
Que les ingénieurs logiciels sont toujours honnête au sujet de ce qu'ils font maintenant ou faire du logiciel dans le passé.
Que 640K devrait être assez pour tout le monde (DOS). Qui a été largement considéré par beaucoup de gens pour un certain nombre d'années.
La première fois que j'ai un système avec 8 mo de RAM, je pensais que c'était beaucoup plus que j'en avais besoin. Qui a couru le système d'exploitation (Mac) en plus de toutes les applications que j'utilisais (Word, e-Mail, Firefox, etc).
Que les fils en les Fenêtres sont à bas prix.
S'avère que c'est à peu près vrai. Un thread a un certain montant de frais généraux et nécessite son propre espace d'adressage où il peut vivre et être heureux. Donc, si je me retrouve à traiter avec des dizaines de threads au sein d'une seule application, je me demande comment je peux simplifier et de consolider le tout en moins de threads.
Que tout ce que j'ai écrit échoue à un certain moment dans l'avenir prévisible.
Pas que tout ne finit par tomber en morceaux, mais au début de ma programmation de l'éducation, quand j'ai trouvé try..catch...j'ai enveloppé le TOUT dans les....des choses qui, si elles ont échoué, aurait représenté beaucoup plus de problèmes que de mes programmes de manipulation (p. ex., les pôles nord et sud ont changé de place)
Que l'apprentissage d'une nouvelle langue serait vraiment vraiment dur.
Que les performances d'exécution important. Total de temps de la simulation est ce qui compte, souvent.
Depuis l'apprentissage de python, j'ai sevré moi-même de mon attachement pour le typage statique.
Je n'en sais quelque chose divisé par 0 en Javascript est Infini (IEEE 754 de l'arithmétique). Appris à la dure récemment.
Que le profilage et l'analyse de performance était la même chose.
Puis j'ai découvert que les profileurs, tandis que c'est mieux que rien, contiennent de fausses hypothèses, telles que:
Que parce que j'ai construit le logiciel sur mon "Standard" de l'environnement, il serait de travailler sur toutes les machine/serveur. Seulement pour découvrir que j'avais installé obscur de bibliothèques et de services qui ont effectivement été utilisés. Et puis découvrir que j'ai utilisé un bug, qui a par la suite été corrigée.
Vous ne pouvez pas diagnostiquer 'des erreurs intermittentes dans la production. Le redémarrage du serveur est le seul moyen pour résoudre ce problème.
Peut-être été PLUS vrai dans mes premiers jours de l'ASP de codage. Mais il y a beaucoup de bons outils de profilage pour trouver des fuites de mémoire et d'autres problèmes bizarres. Perfmon fournit également beaucoup de bonnes données de diagnostic. De Plus, vous devriez être de codage de la journalisation des diagnostics dans votre application.
Que je sais écrire une application web et a été clair du tout quand je l'ai eu à concevoir des trucs qui fonctionne dans tous les navigateurs, il me visse.
Que comprendre les pointeurs et la récursivité serait putain de dur.
Que des Entiers en VB6 a taille différente de celle de .Net.
Que VB6 pourrait faire de bits de niveau de opérations.
Professionnelle de programmeurs font de bug en moins de logiciels.
Que la POO est obsolète 🙁 j'ai toujours le regret de penser que jusqu'à ce jour.
Si j'ai un puissant système de type statique comme celui de ML ou Haskell, je devrais l'utiliser pour coder comme de nombreux invariants que possible. Avec l'expérience que j'ai appris que parfois il est préférable de laisser les invariants dynamiques.
Que support complet Unicode est une condition de succès pour le déploiement de logiciels à des régions de l'Asie.
Je pensais que l'écriture assez bon logiciel est une tâche facile
Que nos méthodes de développement ont été choisis et utilisés parce qu'ils étaient les meilleurs de la race.
Puis j'ai compris que les outils que nous utilisons a un impact beaucoup plus grand sur ce que nous avons fait, quand nous l'avons fait, et comment nous l'avons fait que ce que je pensais.
Que les gens effectivement se souciait des technologies utilisées (open source/closed source).
Au début des années quatre-vingt, quand j'ai commencé à jouer avec les ordinateurs (ZX81 avec 1K de mémoire), j'ai utilisé de passer des heures à taper des tonnes de code machine (octets, et non pas lisible par l'homme de l'assemblée de la langue) pour les jeux de magazines, essentiellement à l'aide de la BASE Poke instructions.
J'ai cru que si je n'ai jamais entré dans une seule instruction correctement alors je serais obligé de revenir au début et commencez à entrer le code de l'ordinateur de nouveau depuis le début.
Je suppose que ça allait être un tour de montagnes russes de voitures rapides, les femmes, les jets privés et d'audace, les escapades. Juste attendre jusqu'à ce que je obtenir mes mains sur ce conseiller de carrière....
Les spécifications sont complètes et suffient
Qu'un élément html à l'id et le nom de l'attribut où interchangeables.
Il s'avère que des éléments avec 'nom' attributs sont liés/utilisé.référencé de Messages, etc et 'id' attributs sont utilisés pour les DOM de référence.
thread = processus
Qu'une colonne d'identité ne peut pas contenir de doublons:
colonne d'identité dans Sql server
Bien sûr, vous pourriez regarder FindBugs et PMD, mais ce sont mes préférés de pièges et astuces (Java):
Champs ne sont pas remplacés, ils sont dans l'ombre.
Il n'est pas super explicite.super d'accès.
Classes sans constructeurs ont défini implicitement zéro argument du constructeur. J'ai fait une pratique d'erreur lié à celui de cette année.
Pour obtenir une référence à un à l'intérieur de la classe parent, vous pouvez utiliser la syntaxe "Extérieur.ce" pour lever l'ambiguïté sur les appels de méthode ou de synchroniser.
Classes sont des "amis d'eux-mêmes" en C++ termes, privé de méthodes et de champs de toutes les instances de cette classe peut être référencé à partir de n'importe quelle méthode de la même classe, et même des méthodes statiques. Cela aurait fait une partie de mes premiers clone() et copie les constructeurs beaucoup plus simple.
Protégé les méthodes et les champs sont utilisables dans un contexte statique de l'extension de classes, mais seulement si cette classe est dans le même package. Je suis heureux que flex.de messagerie.io.l'amf n'est pas un emballage scellé.
Que les vendeurs de gérer les attentes des clients de manière réaliste. (Formé en vertu de la promesse et au-dessus-livraison)
Que les exigences de logiciels proviennent généralement des études de marché.
Il a dit qu'il savait de la programmation, il doit être vrai!
De dimension n est une instance de dimension (n+1) quand elles sont équivalentes.
À penser que je suis la seule personne qui effectue un morceau de code... puis quand j'ai besoin d'une routine je ne me souviens pas ce que j'ai fait et il suffit de copier/coller mon propre code.
Maintenant, je sais que tout le monde fait ça.
Quand j'étais algorithmes d'apprentissage dans mon junior middle school, j'ai pensé PNJ que juste de la non-polynôme de problèmes, ce qui signifiait que la complexité de ce problème n'était plus simple que de polynôme. Je n'ai pas reconnu, j'ai été mal jusqu'à ce que j'ai appris de calcul de la théorie dans mon collège -_-b
Un programme peut éventuellement avoir tous ses problèmes résolus.
que:
obtient optimisé pour:
wow, j'ai arrêté de le mettre dans les appels de fonction à la place de j quand j'ai réalisé qu'ils étaient en train d'être exécuté à CHAQUE fois!
Raison:
n'est pas la même chose que:
arbitraire exemple, mais vous pouvez voir comment l'optimisation serait de changer d'exécution.
@Kyralessa: Il est intéressant de noter que sur la plupart des processeurs, en assemblée/langage machine, il est possible pour les fonctions de retourner à un endroit autre que leur appelant, tout en laissant la pile en bon état. En effet, il existe une variété de situations où cela peut être utile. Une variante j'ai d'abord vu sur le 6502, si elle fonctionne encore mieux sur le Z80, a été imprimé le message de routine où le texte à imprimer immédiatement suivi l'appel de l'instruction; l'exécution reprendra après la terminaison zéro (ou, comme une légère optimisation lors de l'utilisation du Z80, à la terminaison zéro, car laisser le zéro octet être exécuté comme un NOP serait moins cher que d'essayer de l'éviter).
Il est également intéressant de noter que dans de nombreuses langues modernes, les fonctions ont une normale point de sortie (qui va reprendre l'exécution de la suite de l'appel), mais vous pouvez également quitter par la levée d'une exception. Même en C, on peut utiliser setjmp/longjmp pour simuler un tel comportement.
Java est lent. Donc, beaucoup de perl fan bois sur slashdot régurgiter(sp???) cela, c'est triste.
Que je serais de la programmation en VB pour toujours, je suis maintenant c#.