Hypothèses de programmation erronées de longue date [clôturé]


281

Je fais des recherches sur les erreurs courantes et les mauvaises hypothèses faites par les ingénieurs logiciels juniors (et peut-être seniors).

Quelle était votre hypothèse la plus ancienne qui a finalement été corrigée?

Par exemple, j'ai mal compris que la taille d'un entier n'est pas une norme et dépend plutôt de la langue et de la cible. Un peu gênant à dire, mais ça y est.

Soyez franc; Quelle croyance ferme aviez-vous et approximativement pendant combien de temps avez-vous maintenu l'hypothèse? Il peut s'agir d'un algorithme, d'un langage, d'un concept de programmation, de tests ou de toute autre chose concernant la programmation, les langages de programmation ou l'informatique.


Réponses:


545

Pendant longtemps, j'ai supposé que tout le monde avait cette super-maîtrise de tous les concepts de programmation (modèles de conception, le dernier nouveau langage, complexité de calcul, expressions lambda, vous l'appelez).

La lecture de blogs, de Stack Overflow et de livres de programmation m'a toujours fait sentir que j'étais derrière la courbe des choses que tous les programmeurs doivent savoir intuitivement.

J'ai réalisé au fil du temps que je compare efficacement mes connaissances à la connaissance collective de nombreuses personnes, pas d'un seul individu et c'est une barre assez élevée pour quiconque. La plupart des programmeurs dans le monde réel ont un cache de connaissances nécessaires pour faire leur travail et ont plus de quelques domaines dont ils sont faibles ou complètement ignorants.


68
Tellement vrai! Voilà le problème de cet âge. L'information est également décourageante. J'ai eu cette révélation il y a quelques semaines quand je me sentais comme un perdant complet dans tout ce que je faisais (pas la première fois) concernant la recherche. Les gars qui font publier leurs articles dans IEEE Transactions n'ont pas nécessairement les mêmes compétences que ceux qui travaillent chez Google, se vantent de StackOverflow, sont d'excellents professeurs ou écrivent d'excellents blogs de programmation. Bien sûr, les meilleurs gars sont exponentiellement plus cool que nous, mais ils ne savent pas tout ce que vous savez que vous ne savez pas. Alors, restez cool.
jbasko

40
Cela aide également à comprendre que ces blogueurs n'écrivent pas tout du haut de leur tête non plus. Les bons blogueurs recherchent leurs sujets et apprennent de nouvelles choses tout en écrivant des articles.
JohnFx

47
J'obsède quotidiennement ce que je n'ai pas le temps de lire et d'apprendre. Cela me laisse parfois un horrible sentiment de culpabilité.
brad

9
@Zilupe: Amen à ça. J'ai publié quelques articles et revues de conférences internationales. Aux yeux de certaines personnes, cela semblait cool. Jusqu'à ce que vous réalisiez qu'il ne faut pas vraiment beaucoup d'efforts pour publier un article. Nous ne sommes pas un génie. Nous sommes comme tout le monde. Nous avons commis des erreurs et publié des articles de merde. Eh bien, sauf pour un groupe minoritaire de vrais génies ...
Hao Wooi Lim

4
+1 Heureusement que j'ai lu ceci. Je pensais que j'étais le seul.
Randell

308

Que les gens savaient ce qu'ils voulaient.

Pendant très longtemps, j'ai pensé que je parlerais avec des gens, ils décriraient un problème ou un flux de travail et je le mettrais dans le code et l'automatiserais. Il s'avère que chaque fois que cela se produit, ce qu'ils pensaient vouloir n'était pas vraiment ce qu'ils voulaient.

Edit: je suis d'accord avec la plupart des commentaires. Ce n'est pas une réponse technique et peut ne pas être ce que l'interrogateur recherchait. Cela ne s'applique pas seulement à la programmation. Je suis sûr que ce n'est pas non plus mon hypothèse la plus ancienne, mais c'est la chose la plus frappante que j'ai apprise au cours des 10 courtes années que j'ai faites. Je suis sûr que c'était de la pure naïveté de ma part mais la façon dont mon cerveau est / était câblé et l'enseignement et les expériences que j'avais avant d'entrer dans le monde des affaires m'ont amené à croire que je ferais ce que je répondais; que je serais en mesure d'utiliser du code et des ordinateurs pour résoudre les problèmes des gens.

Je suppose que cette réponse est similaire à celle de Robin à propos des non-programmeurs qui comprennent / se soucient de ce dont je parle. Il s'agit d'apprendre l'entreprise comme un processus agile, itératif et interactif. Il s'agit d'apprendre la différence entre être un singe-code de programmation et être un développeur de logiciels. Il s'agit de réaliser qu'il y a une différence 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 maintenant wiki communautaire pour apaiser les gens à cette réponse me donnant rep.


9
Ou changez ce qu'ils veulent après avoir vu ce qu'ils voulaient auparavant. Les gens aiment changer d'avis. Je sais, parce que je suis un peuple.
J. Polfer

13
Vous leur donniez ce qu'ils demandaient, pas ce qu'ils voulaient.
Brent Baisley

47
Pourquoi les non-réponses ennuyeuses et non controversées sont-elles trop votées?!
nes1983

39
Sensationnel. On dirait que quelqu'un a besoin d'un câlin.
bzlm

24
Mon dieu @ les gens se plaignent, le représentant stackoverflow n'est pas une compétition. Si vous avez apprécié la réponse, ne votez pas trop parce que vous êtes jaloux de ne pas l'avoir publiée en premier.
Dmitri Farkov

292

Que je sais où est le problème de performances sans profilage


10
Je pense que c'est pourquoi l'optimisation prématurée est si courante.
Hao Wooi Lim

10
+1 Wow, quelqu'un a inclus une réponse qui n'était ni anodine ni hors sujet.
Mark Rogers

3
J'ai quelques tablettes qui devraient aider à l'optimisation prématurée ...
AndyM

232

Que je ne devrais avoir qu'un seul point de sortie d'une fonction / méthode.


91
Excellente réalisation; sortir aussi souvent que nécessaire. Il faut renoncer à une fonction dès qu'il n'est pas logique de continuer plus avant. Cela peut réduire la complexité et augmenter la lisibilité, par exemple, en évitant les conditions profondément imbriquées, lorsqu'elles sont des conditions préalables requises pour que la méthode fonctionne correctement. Dans les langages modernes avec gestion de la mémoire et constructions de ressources comme l'utilisation de / finalement, continuer jusqu'à la fin d'une méthode n'a pas de sens.
Triynko

24
Au fait, qui est venu avec ça? C'est comme une programmation de légende urbaine.
brad

49
Les gens qui doivent déboguer le code des autres sont ceux qui ont trouvé cela.
gatorfax

23
Je pense que cette idée répandue mais erronée est basée sur un malentendu. Lorsque vous quittez une fonction, vous devez toujours revenir au même point. C'était une règle importante dans des langages comme BASIC qui ne l'appliquait pas: la règle signifiait, par exemple, que vous devriez utiliser GOSUB au lieu de GOTO. Dans des langages comme C # ou Java qui appellent des méthodes, c'est automatique. Mais parce qu'il est automatique, je pense qu'il est passé du "seul point de retour" logique au "seul point de sortie" absurde.
Ryan Lundy

35
Des langues comme C où vous devez libérer manuellement des ressources. Plusieurs points de sortie étaient une bonne chance de fuite de ressources. L'OMI ne sert à rien dans les langues avec des exceptions, car vous ne connaissez souvent plus vos points de sortie, ou ils sont au milieu d'une déclaration. - Dans ces langues, il ne reste que "la structure de lisibilité".
peterchen

228

Que les non-programmeurs comprennent de quoi je parle.


243
comprendre / prendre soin ..
nickf

8
J'ai encore celui-ci à certains moments ... Je pensais qu'au moins ma femme aurait commencé à comprendre correctement maintenant: P
workmad3

3
Oh mon cher, je crains de ne pas avoir encore appris cela!
thatismatt

3
Ouais, parfois j'oublie mon public et je me retrouve avec un tas de gens avec des regards vides sur leur visage qui m'escalade, c'est bien quand les gens montrent un intérêt
Petey B

3
C'est ma plus grande frustration à l'égard de la profession.
Andres Jaan Tack

219

Ce logiciel sans bug était possible.


35
+1, bien que la NASA ait presque réussi
Patrick McDonald,

55
Oui mais le "presque" a coûté quelques millions de dollars :)
Jem

15
@Triynko votre "possible" et "possible" de @ JaredPar ne sont pas les mêmes. La théorie et la pratique peuvent être identiques en théorie mais sont très différentes dans la pratique.
wilhelmtell

13
@Joseph, le problème vient en partie du fait que les programmes Hello World sont exempts de bogues. Ils ne sont pas. La plupart ne vérifient pas les erreurs dans printf par exemple ou ne tiennent pas compte des autres tentatives d'E / S ayant échoué.
JaredPar

9
@RussellH, non. Vous n'avez pas réussi à spécifier une valeur de retour et le processus résultant renverra une mémoire aléatoire.
JaredPar

199

Ces variables de membre privé étaient privées pour l'instance et non pour la classe.


192
J'ai maintenu cette hypothèse jusqu'à ... tout à l'heure.
TheMissingLINQ

9
@ebrown Je ne le trouve généralement utile que lors de l'écriture d'une méthode equals ()
Dave Webb

12
Ils sont en Ruby.
Mike Kucera

17
C'est tellement normal pour moi que cette réponse n'avait aucun sens les premières fois que je l'ai lue. Maintenant, je veux apprendre Ruby afin que cela puisse me confondre dans l'autre sens. :)
jmucchiello

16
@Kiewic Si vous avez une variable membre privée appelée myVar dans votre classe, vous pouvez référencer directement other.myVar dans votre code si other est une instance de cette classe. J'avais supposé parce que c'était "privé" que vous deviez utiliser other.getMyVar () même à l'intérieur de la classe.
Dave Webb

166

Je pensais que la saisie statique était immobile sur votre clavier.


53
Sincère ou pas, cela m'a fait bien rire à la fin d'une longue journée de travail. : P
Olivier Tremblay

5
++ pour bien rire. sonne comme quelque chose que mon mari (non technique) trouverait.
jess

11
+1! Je pensais que la saisie de canard impliquait également la saisie. Ou des canards. Ou les deux.
SqlACID

162

Que vous pouvez bien comprendre un problème avant de commencer à développer.


32
Ceci, mon ami, devrait être: "Que vous puissiez bien comprendre un problème." Mais c'est tellement vrai. Et apparemment un concept difficile à comprendre ou même à accepter.
KarlP

4
Vous ne pouvez pas comprendre le problème "complètement", mais vous DEVEZ certainement comprendre le problème (dans une certaine mesure) avant de commencer à développer. bit.ly/kLXgL
OscarRyz

Parfois, vous devez commencer à développer pour comprendre le problème. Et / ou, le problème change plus vous vous développez.
Evan Plaice

158

Les gens intelligents sont toujours plus intelligents que moi.

Je peux vraiment me battre lorsque je fais des erreurs et que je me fais souvent dénoncer pour auto-dépréciation. J'avais l'habitude de regarder avec admiration beaucoup de développeurs et je supposais souvent qu'étant donné qu'ils en savaient plus que moi sur X , ils en savaient plus que moi.

Comme j'ai continué à acquérir de l'expérience et à rencontrer plus de gens, j'ai commencé à réaliser que souvent, alors qu'ils en savent plus que moi sur un sujet particulier, ils ne sont pas nécessairement plus intelligents que moi / vous.

Morale de l'histoire: ne sous-estimez jamais ce que vous pouvez apporter à la table.


Bon! Je travaille actuellement avec un collègue qui connaît beaucoup de choses sur le développement .NET. Cela m'a pris un peu de temps pour réaliser que je comprenais mieux les besoins des clients.
Treb

58
Et d'autre part, que j'en sais plus que les autres. Il s'avère qu'ils savent juste des choses différentes. L'autre morale: ne sous-estimez jamais ce que quelqu'un d'autre peut apporter à la table.
jeudi jeudi

1
Voici à nouveau ce vieux "Do to others" ... J'invente une nouvelle phrase: Tech bulying ~ L'état de se sentir supérieur parce que vous savez certaines choses, et de faire l'erreur de le faire savoir à tout le monde. @seealso: smartass.
corlettk

1
Excellente observation - ma version est plus négative "Tout le monde fait des bêtises de temps en temps". Un peu lié à "ne pas retourner le bit bozo".
peterchen

2
Vous ne devez vous inquiéter que lorsque des personnes stupides sont plus intelligentes que vous.
Brad Gilbert

131

Pendant très longtemps, j'ai pensé que la mauvaise programmation était quelque chose qui se passait en marge .. que faire les choses correctement était la norme. Je ne suis pas si naïf de nos jours.


30
Auparavant, je pensais que la mauvaise programmation n'était effectuée que par d'autres programmeurs, jusqu'à ce que je le fasse par l'un de mes mauvais programmes. Maintenant, je fais les choses correctement! (Vous me croyez cette fois, non?)
Jared Updike

2
Totalement. Je suis passé de «Ça n'arrive jamais» à «Ça n'arrive jamais sauf dans ce travail» à «Chaque endroit a un mauvais code».
Ryan Lundy

1
Le piratage est la norme. L'ingénierie est du ressort des véritables compétiteurs. Si jamais je rencontre un ingénieur logiciel, je vous le ferai savoir.
corlettk

3
@corlettk: Vous voulez dire que le codage de singe est la norme, non? Le piratage est un art, un esprit d'art de haut niveau que je suis loin d'atteindre.
hasen

2
@Hasen: Non, le piratage est une analogie avec la prise maladroite d'une hache à un arbre, ciselant de minuscules morceaux dans une panique folle sans plan réel, et créant un grand bordel sanglant jusqu'à ce que l'arbre tombe enfin sur votre tête. Un "hack" est "celui qui produit un travail banal et médiocre dans l'espoir d'obtenir un succès commercial". Pourquoi est-ce que le domaine informatique a changé "hack" en "habile", je ne le saurai jamais.
Lawrence Dol

113

J'ai pensé que je devrais autant que possible m'abstraire. J'ai été touché à la tête avec cela, à cause de trop de fonctionnalités entrelacées.

Maintenant, j'essaie de garder les choses aussi simples et découplées que possible. Refactoriser pour faire quelque chose d'abstrait est beaucoup plus facile que de prédire comment j'ai besoin d'abstraire quelque chose.

Ainsi, je suis passé du développement du cadre qui les régit tous à des extraits de fonctionnalités qui font le travail. Je n'ai jamais regardé en arrière, sauf quand je pense au moment où je pensais naïvement que je serais celui qui développerait la prochaine grande chose.


26
Découplé = vraie abstraction. Le résumé pour lui-même est ... une optimisation prématurée.
Jared Updike

1
Cela va de pair avec ce que j'ai trouvé en ajustant les performances. Il peut y avoir un joli programme avec plusieurs couches d'abstraction. Ensuite, la charge de travail devient lourde, et devinez ce qui coûte tout le temps ... toutes les abstractions. Les ordinateurs exécutent des instructions, pas des abstractions.
Mike Dunlavey

5
L'abstraction et la généralisation sont des outils puissants, malheureusement utilisés pour généraliser un cas d'utilisation abstrait avec une seule implémentation. Ce qui est drôle, c'est que chaque fois qu'il est nécessaire de changer l'implémentation, les abstractions et les généralisations doivent également changer ...
KarlP

Je suis totalement d'accord avec Jared ... si vous avez réussi à arriver à "simple et découplé", vous avez atteint une véritable abstraction. Comment les choses peuvent-elles être découplées si vous n'avez pas résumé les choses dans des interfaces et des usines, etc.? Comment cela peut-il être simple à moins que vous supprimiez tous les "si type = ceci alors faites ceci, ou si le type est celui-là alors faites quelque chose d'autre code"?
Richard Anthony Hein

Pareil ici. Je pense que j'ai appris l'abstraction avant de faire beaucoup de code spaghetti. Ils auraient dû apprendre à faire avancer les choses même si le code est des spaghettis, puis nous parler de l'OO et de l'abstraction.
hasen

103

Que les femmes trouvent les programmeurs informatiques sexy ...


70
Attends une seconde???
Çağdaş Tekin

4
he he he he .. okey, je cherchais quelque chose pour garder mon sourire pour le reste de la journée. Je pense que je l'ai trouvé !!! :)
OscarRyz

17
"Ooh, bébé! Ouais, dis 'si' - jette-moi quelques exceptions .. Ouais, tu sais comme je le veux": P
cwap

5
Quoi? Les programmeurs sont riches? Quand est-ce arrivé?
Filip Navara

3
Certaines femmes (du bon type) sont attirées par des gars intelligents et perspicaces. Qui, moins le cou-barbe et l'intestin de saucisse, sont des traits assez communs des programmeurs. Saupoudrez un peu de souci de l'image de soi / de l'hygiène et du frisson / de l'excitation occasionnelle des sports extrêmes et vous êtes sur la bonne voie.
Evan Plaice

100

Que la qualité du logiciel entraînera une augmentation des ventes. Parfois, mais pas toujours.


37
Vendre un logiciel? C'est ainsi 1999.
bzlm

De
nombreux

11
Bien sûr, Microsoft tue.
Bill Martin

dois aimer celui-ci, si vrai.
dr. evil

18
Je souhaite que l'amélioration de la qualité / performance de notre logiciel compte comme une fonctionnalité
Tom Leys

82

Que toutes les langues sont (pour la plupart) créées égales.

Pendant longtemps, j'ai pensé que la langue de choix ne faisait pas vraiment une grande différence dans la difficulté du processus de développement et le potentiel de réussite du projet. Ce n'est certainement pas vrai.

Le choix de la bonne langue pour le poste est aussi important / critique que toute autre décision de projet prise.


13
Je pense que choisir les bonnes bibliothèques est ce qui compte. Il se trouve qu'il y a souvent une correspondance individuelle entre les langues et les bibliothèques ...
Kevin Montrose

7
Mais si deux langages de programmation sont tous deux complets, alors quelle est la différence? Vous pouvez écrire n'importe quel programme dans l'une ou l'autre langue! ;)
Bill the Lizard

8
Je ne suis pas d'accord, la décision de la langue à utiliser est beaucoup moins importante que la personne qui mettra réellement en œuvre le projet. Comme un exemple parmi tant d'autres décisions plus importantes.
Boris Terzic

13
BrainFu ** est aussi complet que Python.
hasen

9
Le fait que les langues complètes de Turing soient applicables d'une manière ou d'une autre est une idée fausse courante. Un langage complet de Turing peut calculer tout ce qu'une machine de Turing peut (et implique souvent l'inverse également). Il n'y a absolument aucune implication concernant les performances. Une opération qui prend du temps linéaire dans une langue pourrait très bien prendre du temps exponentiel sur une autre et elles pourraient toutes deux être terminées Turing. Il y a une énorme différence entre ce qui est théoriquement calculable et ce qui est faisable dans la pratique.
TrayMan

81

Qu'un grand rapport commentaire / code soit une bonne chose.

Il m'a fallu un certain temps pour réaliser que le code devrait être auto-documenté. Bien sûr, un commentaire ici et là est utile si le code ne peut pas être rendu plus clair ou s'il y a une raison importante pour laquelle quelque chose est fait. Mais, en général, il vaut mieux passer ce temps de commentaire à renommer les variables. C'est plus propre, plus clair et les commentaires ne sont pas «désynchronisés» avec le code.


1
Je suis d'accord dans le code actuel ... à l'exclusion des commentaires javadoc (ou équivalent).
corlettk

11
+1, ne me lancez même pas sur les traités que j'écrivais pour les fonctions de 10 lignes
wds

Pour ajouter à cela, une instruction assert () est meilleure que de documenter une précondition / postcondition. Les contrats de code .NET 4 peuvent également être automatiquement convertis en documentation!
Robert Fraser

66

Cette programmation est impossible.

Sans blague, j'ai toujours pensé que la programmation était quelque chose d'impossible à apprendre, et je m'en suis toujours éloigné. Et quand je me suis approché du code, je n'ai jamais pu le comprendre.

Puis un jour, je me suis assis et j'ai lu quelques didacticiels de base pour débutants, et j'ai travaillé à partir de là. Et aujourd'hui, je travaille en tant que programmeur et j'aime chaque minute.

Pour ajouter, je ne pense pas que la programmation soit facile, c'est un défi et j'aime apprendre plus et il n'y a rien de plus amusant que de résoudre un problème de programmation.


7
Amen! Mais, hé, ne proclamez pas cette vue depuis les toits. Nous ne voulons pas que tout le monde sache que la programmation est amusante, n'est-ce pas? ;); P
Peter Perháč

9
MasterPeter: Cela nous donnerait plus de fourrage pour que nous augmentions nos représentants lorsqu'ils viennent ici pour poser des questions.
TheTXI

4
Je dirais que la programmation est difficile à faire correctement . C'est cependant possible, ce qui semble être votre point.
Steve S

4
@Olafur: Pourquoi voudriez-vous que la question soit wiki, mais pas votre réponse?
gnovice

2
Cela reflète exactement mon expérience. J'aimerais bien avoir commencé plus tôt maintenant: P
Skilldrick

65

"On Error Resume Next" était une sorte de gestion des erreurs


6
Je vous sens ... mais en vbscript (en particulier asp), c'était la SEULE option de "gestion des erreurs" disponible, combinée à une vérification judicieuse si une erreur s'est réellement produite et à une bonne quantité de prière.
flatline

2
Ouais ... c'est une sorte ... juste une sorte dont nous sommes heureux de nous éloigner
Matthew Whited

6
Bien?! mais il est. Vous démarrez votre bloc de gestion des erreurs avec On Error Resume Next, essayez quelque chose, puis If (err.number <> 0) then
jpinto3912

N'est-ce pas le seul vbscript équivalent à un try catch?
James

-1: C'est une sorte de gestion des erreurs. Ce n'est tout simplement pas si élégant.
JohnFx

64

Ce logiciel de programmation nécessite une base solide en mathématiques supérieures.

Pendant des années avant de commencer à coder, on m'a toujours dit que pour être un bon programmeur, il fallait être bon en algèbre avancée, en géométrie, en calcul, en trigonométrie, etc.

Dix ans plus tard, je n'ai dû faire qu'une seule fois ce qu'un élève de huitième ne pouvait pas faire.


5
Très vrai. Dans la plupart des cas, vous n'avez pas besoin d'être un expert en mathématiques. La seule fois où j'ai vraiment eu besoin de connaître des mathématiques avancées, c'était quand je faisais de la programmation 3D comme hobby. En fait, c'est en fait la programmation 3D au lycée qui m'a inspiré à faire plus attention aux classes trigonométriques et pré-cal. À part cela, des mathématiques très basiques sont généralement tout ce dont vous avez besoin.
Steve Wortham

29
Je pense que vous avez été mal informé. Bien sûr, pour être un bon programmeur , vous n'avez pas vraiment besoin d'utiliser des mathématiques de niveau beaucoup plus élevé, mais pour vraiment comprendre et appliquer certains concepts informatiques, vous aurez besoin de plus que des mathématiques de huitième année.
hbw

12
Je pense que l'accent mis sur les mathématiques est d'enseigner des compétences de pensée critique et de résolution de problèmes non pas comme quelque chose que vous utiliseriez dans la programmation informatique de tous les jours.
Zack

14
Le type d'abstraction dont vous avez besoin pour comprendre les mathématiques avancées est très similaire à l'abstraction dont vous avez besoin pour créer un logiciel.
OscarRyz

6
Je pense que les concepts de programmation fonctionnelle sont beaucoup plus faciles à comprendre si vous avez une base plus solide en mathématiques, tout simplement parce que vous n'êtes pas autant effrayé par la syntaxe. Cela semble familier. J'ai fait l'erreur d'utiliser des fonctions mathématiques simples pour démontrer les concepts de programmation fonctionnelle nouveaux en C #. Certaines personnes ont immédiatement déclaré que c'était trop complexe.
Richard Anthony Hein

63

Cette optimisation == réécriture en langage assembleur.

Quand j'ai vraiment compris l'assembly (venant de BASIC), il semblait que la seule façon d'accélérer l'exécution du code était de le réécrire dans l'assembly. Il a fallu plusieurs années pour se rendre compte que les compilateurs peuvent être très bons pour l'optimisation et en particulier avec les processeurs avec prédiction de branche, etc., ils peuvent probablement faire un meilleur travail qu'un humain ne peut le faire dans un délai raisonnable. De plus, passer du temps à optimiser l'algorithme est susceptible de vous donner une meilleure victoire que de passer du temps à passer d'un langage de haut en bas. Aussi cette optimisation prématurée est la racine de tout mal ...


8
Peek et Poke sont vos amis :)
Matthew Whited

4
Pervertir! Dis ça au juge!
Shalom Craimer

1
C'est là qu'intervient la théorie de la complexité. L'assemblage est généralement une micro-optimisation. La réduction de la complexité temporelle de vos algorithmes est le facteur de gain de vitesse.
PeteT

@scraimer: Envie de vous voir ici, je ne m'y serais jamais attendu ;-)
Robert S. Barnes

@ Matthew - "Peek et Poke sont vos amis :)": ** EXTRÊMEMENT jaloux, je n'ai pas écrit ça en premier.
FastAl

63
  • Que les dirigeants d'entreprise se soucient de la qualité du code.
  • Que moins de lignes, c'est mieux.

2
ils se soucient, mais vous devez combiner les compétences des artistes avec les compétences des travailleurs. Chaque morceau d'algorithme ne peut pas non plus être une œuvre d'art. Une partie sera repulpante, alors réutilisez le "moins utilisé". Rappelez-vous l'ancienne règle 80/20. 80% du programme est utilisé 20% du temps. Alors concentrez-vous à 80% sur 20% du code et faites de ce VRAI MORCEAU D'ART! : OP
BerggreenDK

71
moins de lignes c'est mieux! une partie de la raison pour laquelle je n'aime pas java en tant que langage est que faire n'importe quoi prend autant de lignes de code. moins de lignes de code signifie qu'il est plus facile de changer votre code.
Claudiu

7
Cela dépend de ce que vous supprimez pour obtenir moins de lignes. Si le code est toujours lisible avec moins de lignes, c'est bien. Cependant, il existe de nombreuses façons de réduire le nombre de lignes de code qui aggravent le code.
Herms

2
Sauf lorsque les gens adoptent la mentalité "moins de lignes c'est mieux" jusqu'à présent avec des appels de méthode enchaînés à 7 profonds de sorte que lorsque l'un d'eux jette un pointeur nul, vous n'avez aucune idée de ce que c'était. Ou ils condensent tellement d'actions en une seule ligne de 150 caractères et effectuent 4 opérations. Cela le rend à la fois plus difficile à lire et à déboguer, mais n'est pas plus rapide et n'utilise pas moins de mémoire pendant l'exécution.
Trampas Kirk

17
Si votre ligne se termine par))))) et que vous n'écrivez pas Lisp, vous avez trop peu de lignes.

58

Je dirais que le stockage de l'élément année d'une date sous forme de 2 chiffres était une hypothèse qui a affligé toute une génération de développeurs. L'argent dépensé sur Y2K était assez horrible.


1
C'est la seule réponse que je vais voter, bien que ce soit une CW donc cela n'a pas d'importance ...
Dan Rosenstark

4
IIRC certains systèmes remontent dans les années 60 et peut-être que les années 70 n'utilisaient qu'un seul chiffre car ils utilisaient moins de mémoire. J'ai même vu des formulaires papier où "196_" et "197_" étaient préimprimés.
certains

3
Je vois toujours des formulaires avec 200_ et probablement il y en a maintenant avec 201_ imprimés.
Macha

5
La partie la plus triste est ... Unix aura son deuxième tour à cela en 2038
Evan Plaice

4
@Billy Ce n'est pas parce que l'architecture de la machine change que le format des données le sera. Stocker 2 chiffres de résolution au format int ferait un format de date octet (8 bits) et, pourtant, cela affectait des tonnes de machines d'architecture matérielle 32 bits en 2k. Ceci est juste un autre exemple de pourquoi vous ne laissez pas les gars du matériel de bas niveau spécifier des formats de données. Ils penny pincent des morceaux en sachant qu'il y aura un SNAFU prévu dans un avenir lointain.
Evan Plaice

57

Que tout autre chose que le type insertion / bulle était tout simplement de la magie noire.


Haha, j'aime celui-ci, car il frappe près de chez moi. Trier en un temps plus rapide que le n carré ?? Impossible!
Ross

C'est incroyable de voir à quel point la plupart des algorithmes de tri sont simples et évidents une fois que vous avez une forte sensation de récursivité et de division et de conquête. Jusque-là, la plupart d'entre eux se sentent comme de la magie noire.
Brian

74
Je suis CHERCHEUR en algorithmes de tri! Et ils se sentent toujours comme de la magie noire.
SPWorley

14
Une fois, j'avais une ligne de code dans mon programme qui était longue et compliquée et je n'avais pas envie de la casser ou de l'expliquer (c'était une formule d'éclairage compliquée), alors j'ai tout mis sur une seule ligne et #define ' d ce soit DARK_MAGICK, et le seul commentaire était un avertissement contre la tentative de percer les mystères de la magie noire
Alex

2
Bogosort est le plus mystérieux de tous.
Alex Beardsley

50

Ce XML serait un format de données véritablement interopérable et lisible par l'homme.


7
XML n'est pas une panacée mais je ne voudrais pas revenir à l'époque où je voyais régulièrement des applications essayer de compresser des données relationnelles dans des fichiers csv uniques.
Tony Edgecombe

4
c'est une syntaxe interopérable, sans aucun doute à ce sujet. C'est juste que la syntaxe est souvent l'aspect le moins important de toute solution.
Simon Gibbs

2
+1, vous pouvez également ajouter petit et rapide à la liste de souhaits.
MarkJ

1
Vrai mais une amélioration par rapport au csv et à la longueur fixe où sans la documentation vous êtes foutu.
PeteT

7
J'adore XML pour la standardisation qu'il a apportée aux formats de données et pour la gestion correcte des encodages de caractères. Je déteste cependant ce qui est parfois fait en utilisant XML.
Joachim Sauer

48

Ce C ++ était intrinsèquement meilleur que tous les autres langages.

C'est ce que j'ai reçu d'un ami quelques années avant moi au collège. Je l'ai gardé avec moi pendant une période embarrassante (je rougis en ce moment). Ce n'est qu'après avoir travaillé avec elle pendant environ 2 ans avant que je puisse voir les fissures pour ce qu'elles étaient.

Personne - et rien - n'est parfait, il y a toujours place à amélioration.


5
"mieux" vous apportera des tonnes de commentaires moins que haineux. Mais je dirais que c'est l'un des plus rapides, flexibles et sans obstacles. C'est aussi celui qui amène vos jeunes à bien l'apprendre, pour découvrir que vous pouvez faire plus ou moins la même application. (bien que nécessitant une ou deux tonnes supplémentaires de charbon générateur d'électricité) avec java ou C #.
jpinto3912

@JP: Je suis content de mon choix de mots :)
Binary Worrier

La productivité est plus importante dans le monde des applications d'entreprise. bien sûr, il existe des niches pour lesquelles c ++ est requis, et la seule option.
Shaw

7
J'ai toujours supposé que C ++ est pire que C ANSI simple, simplement parce que le genre de problème dans lequel j'ai vu les programmeurs C ++ est tellement plus compliqué que le genre de problème dans lequel j'ai vu les programmeurs C.
Nosredna

1
En fait, le langage qui est meilleur que tous les autres est Common Lisp. Cependant, le C ++ n'est pas mauvais.
David Thornley

47

Je pensais que la création de programmes serait exactement comme ce qui était enseigné en classe ... vous vous asseyez avec un groupe de personnes, passez un problème en revue, trouvez une solution, etc. etc. Au lieu de cela, le monde réel est "Voici mon problème, j'ai besoin qu'il soit résolu, allez-y "et dix minutes plus tard, vous en obtenez un autre, ne vous laissant pas de temps réel pour planifier efficacement votre solution.


24
Je pense que cela s'appelle la vie.
Robin Day

9
hmmm .. il est temps de renflouer cette entreprise. ..
jpinto3912

8
@ jpinto3912: Non. Parce que la prochaine entreprise fera également partie de la vie (voir commentaire précédent).
Treb

42

Je pensais que les modèles de conception traditionnels étaient géniaux lorsqu'ils ont été introduits dans une classe CS. J'avais programmé environ 8 ans comme passe-temps avant cela, et je ne comprenais vraiment pas comment créer de bonnes abstractions.

Les motifs de conception ressemblaient à de la magie; vous pourriez faire des trucs vraiment soignés. Plus tard, j'ai découvert la programmation fonctionnelle (via Mozart / Oz, OCaml, plus tard Scala, Haskell et Clojure), puis j'ai compris que de nombreux modèles n'étaient que passe-partout, ou complexité supplémentaire, car le langage n'était pas assez expressif.

Bien sûr, il y a presque toujours une sorte de modèles, mais ils sont à un niveau supérieur dans les langues expressives. Maintenant, je fais du codage professionnel en Java, et je ressens vraiment la douleur quand je dois utiliser une convention telle que visiteur ou modèle de commande, au lieu de la correspondance de modèle et de fonctions d'ordre supérieur.


"la plupart des modèles n'étaient que passe-partout, ou complexité supplémentaire, parce que le langage n'était pas assez expressif." L'expressivité est simplement du code passe-partout câblé dans la langue.
Inconnu

4
Ce n'est pas vrai, comment se fait-il d'avoir des choses de première classe au lieu de limiter les capacités d'un programmeur, comme dans le cas des fonctions d'ordre supérieur. Les lisps en sont un bel exemple.
egaga

38

Pendant les premières années de programmation, je n'ai pas compris que 1 kilo-octet correspond techniquement à 1024 octets, pas à 1000. J'ai toujours été un peu perplexe par le fait que la taille de mes fichiers de données semblait légèrement différente de ce à quoi je m'attendais. être.


114
Les fabricants de disques durs n'ont toujours pas compris ...
Michael Myers

10
@mmyers Je pense que vous parlez de marketing sur disque dur, non? Ou les disques sont-ils réellement construits comme ça?
Instantsoup

16
Hé, arrêtez la haine du kibi. MeBi et KiBi sont au moins unbambiguobus.
bzlm

21
Kilo signifie 1000, Mega signifie 1000000, Giga signifie 1000000000. Ce sont les fabricants de RAM et d'OS qui se sont trompés, pas les fabricants de disques.
Mark Ransom

39
Personne ne va le faire? Sérieusement? D'accord, je vais le faire ... xkcd.com/394
Erik Forbes

36

Cette condition vérifie comme:

if (condition1 && condition2 && condition3)

sont effectuées dans un ordre non spécifié ...


15
Dans quelle langue? Des langages comme C / C ++, Java et Python garantissent que les conditions sont évaluées de gauche à droite et que l'évaluation s'arrête à la première condition qui retourne false. Cela fait partie de la spécification langauge. Je suppose que la plupart des autres langues offrent la même garantie.
Clint Miller,

44
@Clint: Ouais, donc "cela s'est avéré incorrect".
bzlm

ouais, celui-ci est cool. cela permet d'écrire des trucs comme if (myList! = null && myList.Count> = 0) {do stuff ();} beaucoup plus facile
Zack

4
en fait, celui-ci dépend de la langue, et & évaluera toutes les conditions (pas le raccourci). Et j'ai vu beaucoup de gens utiliser And (&) en VB au lieu d'AndAlso (&&)
Lucas

2
. . . En fait, il plantera aussi sur VB.net à moins que vous n'utilisiez le commentaire d'Anda re Lucas
Binary Worrier

35

Que ma programmation serait plus rapide et meilleure si je la faisais seule.


Mais ça ne peut pas devenir aussi moche que la programmation en binôme :-) sauf peut-être votre code
Egg

33
Tout dépend de l'autre personne. =)
JohnFx
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.