29 January 2016

There is a small cottage industry of producing lists of "falsehoods programmers believe about…​". For example:

Falsehoods programmers believe about…​

While it’s very instructive reading these, it leads me to question why the most obvious area of ignorance in programming is overlooked: programming. Because really, programmers are pathetic when it comes to knowing about their very own discipline. So without further ado here is a list of falsehoods programmers believe about programming (and themselves). Note, each item on this list is a demonstrable falsehood!

  • Programming is a single discipline.

  • OK, so maybe not a single discipline, but a small number of closely-related disciplines.

  • OK, then, a large number of closely-related disciplines.

  • Would you believe loosely-related?

  • There are full-stack developers.

  • There is a meaningful concept behind the term "full-stack developer".

  • I am a 10× programmer.

  • 10× programmers exist.

  • Programming is an engineering discipline.

  • Programming can be an engineering discipline.

  • Programming is mathematics.

  • Writing programs for a living means knowing programming.

  • Skills picked up working in one problem domain can be easily transported to another problem domain.

  • Most processors in active use are 32-bit or larger.

  • 16-bit or larger?

  • 8-bit or larger?

  • OH COME ON!

  • Programmers have more logical minds than other people.

  • Programmers are better at picking up disparate knowledge from other domains than other professionals.

  • Programmers know more about politics than anybody else.

  • Programmers know more about nutrition than anybody else.

  • Programmers know more about medicine than anybody else.

  • Programmers know more about music than anybody else.

  • Programmers know more about religion than anybody else.

  • Programmers are professionals.

  • Static typing guarantees good software.

  • Dynamic typing guarantees poor software.

  • Testing guarantees good software.

  • Programmers can test their own code.

  • Programmers can document their own code.

  • The compiler won’t have bugs.

  • The compiler won’t have show-stopping bugs.

  • The compiler’s bugs will be fixed quickly.

  • The compiler’s bugs can be fixed.

  • The libraries I use won’t have bugs.

  • The libraries I use won’t have show-stopping bugs.

  • The libraries I use will have their bugs fixed quickly.

  • The libraries I use have bugs that can be fixed.

  • Because the bugs are in their code, not mine.

  • Writing your own code is superior to using someone else’s.

  • Using someone else’s code is superior to writing your own.

  • Big-O performance is the only relevant speed measure; constant factors are unimportant.

  • It’s easy to make a good UX as long as the core problem domain code is sound.

  • It’s easy to add security after you’ve made the rest of the software.

  • It’s easy to add i18n and l10n to a program after you’ve done the core problem domain.

  • Network-based programs are just like non-networked ones.

  • My programming language is best.

  • My programming language is useful in all situations.

  • My programming language has no flaws.

  • The term "domain-specific language" has meaning.

  • The term "framework" has meaning.

  • It is meaningful to talk about the speed of a programming language.

  • New programming languages are superior to old ones.

  • Old programming languages are superior to new ones.

  • All programming languages are the same because Turing something handwave.

  • Object-oriented programming is the silver bullet that saved software.

  • Design patterns are the silver bullet that saved object-oriented programming.

  • Functional programming is the silver bullet that saved us from patterns.

  • You have no need for design patterns in functional programming.

  • Functional programming is the height of programming skill and knowledge.

  • Programmers should care about coding, not people.

  • Social problems have technical solutions.

  • Social problems are solved by slavish rules-following.

  • Social problems are unimportant to programming.

  • Social problems are of overriding importance in programming.

  • Mainframes are dead.

  • PCs are dead.

  • Concurrency is new.

  • Parallelism is new.

  • High level languages are always slower than low-level languages.

  • Hand-written assembly is better than compiled code.

  • Standards are.

  • Stupid titles like wizard/guru/rockstar/ninja sound cool instead of utterly and dispiritingly vapid.

  • This list is a joke.