In recent years, a trend of everyone writing code has suddenly swept across the world; even U.S. President Obama is writing JavaScript. But as a developer who makes a living by writing code (and randomly surfing the internet during work hours) — developer being the trendier term for "software engineer" — I want to remind those who want to learn to program about one important thing: choose your first programming language carefully.

In the circle of software engineers (called "programmers" or "code farmers" in China), the phenomenon of people in the same profession looking down on each other is very serious. In every field of programming, there are intricate "contempt chains." From programming languages, editors, and platforms to whether { is written on the same line as if or on the next line, people in different camps habitually look down on each other. Among these, "What programming language do you use?" is the contempt chain everyone is most enthusiastic about. So for beginners just entering the programming field, if you don't choose your language carefully, you may end up at the bottom of the contempt chain from the very start.

How intense and cruel is the software engineer contempt chain, exactly?

63918611gw1enbo8tfia9j20jg0dw753

Programming Languages

Engineers who understand Functional Programming look down on engineers who are always talking about design patterns; engineers who are always talking about design patterns look down on engineers who say, "Writing it like this isn't OO anymore!"; engineers who say, "Writing it like this isn't OO anymore!" look down on engineers who say, "Huh? Object-oriented? Isn't it enough to just write the repeated code as a function?"; engineers who say, "Huh? Object-oriented? Isn't it enough to just write the repeated code as a function?" look down on engineers who copy and paste the same code everywhere; engineers who copy and paste the same code everywhere look down on PMs.

Engineers who write static languages look down on engineers who write dynamic languages.

Engineers who write assembly language look down on engineers who write C; C engineers look down on C++ engineers; C++ engineers look down on Java and C# engineers; Java and C# engineers look down on each other; C# engineers look down on Visual Basic engineers and engineers who pronounce C# as "C well"; engineers who pronounce C# as "C well" look down on designers who think HTML is a programming language.

Engineers using Python 3 look down on engineers still using Python 2; engineers using Python 2 look down on engineers who encounter UnicodeEncodeError.

Engineers who write iOS look down on engineers who write Android; engineers who write Android look down on engineers who write Windows Phone.

Engineers with one year of Swift experience look down on engineers with five years of Objective-C experience; engineers who write Objective-C look down on engineers who use PhoneGap to package apps as native apps.

Engineers using React.js look down on engineers using AngularJS; engineers using AngularJS look down on engineers using jQuery; engineers using jQuery look down on engineers using Vanilla JavaScript; engineers using Vanilla JavaScript look down on IE users.

Engineers who know how to use a debugger look down on engineers who use assert; engineers who use assert look down on engineers who only know how to use print(); engineers who debug with console.log() look down on engineers who debug with alert().

Engineers who write Ruby on Rails look down on engineers who use all other languages.

What? You said Ruby? Ruby is just a framework of Ruby on Rails, not a programming language at all!

All engineers look down on PHP engineers.

Tools

Engineers who use a text editor look down on engineers who use an IDE.

Engineers who use Vim look down on engineers who use Emacs; engineers who use Emacs look down on engineers who use Vim; engineers who use either Vim or Emacs look down on engineers who use any other editor; engineers who use Atom, VSCode, or Sublime Text look down on engineers who use Windows Notepad.

Engineers who use Android Studio or IntelliJ IDEA look down on engineers who use Eclipse; engineers who use Eclipse look down on engineers who use NetBeans.

Engineers who indent code with spaces look down on engineers who indent with tabs; engineers who indent with tabs look down on engineers who mix spaces and tabs for indentation.

Engineers who use Git or Mercurial look down on engineers who use Subversion; engineers who use Subversion look down on engineers who use Dropbox for version control; engineers who use Dropbox for version control look down on engineers who don't even know what version control is.

Engineers who know GitHub look down on engineers who don't know GitHub; engineers who have private repos on GitHub look down on engineers who use BitBucket for free private repos.

Engineers who use Zsh look down on engineers who use Bash; engineers who use Bash look down on engineers who use Cygwin; engineers who use Cygwin look down on engineers who use the Command Prompt; engineers who use the Command Prompt look down on engineers who use GUI interfaces.

Engineers who use IRC look down on engineers who use HipChat; engineers who use HipChat look down on designers and PMs who use Slack.

Engineers who write documentation in reStructuredText look down on engineers who write documentation in Markdown; engineers who write documentation in Markdown look down on engineers who write documentation in HTML; engineers who write documentation in HTML look down on engineers who don't write documentation; and engineers who write documentation in LaTeX look down on all engineers.

Engineers who use Nginx look down on engineers who use Apache; engineers who use Apache look down on engineers who use IIS.

Engineers who use Spark look down on engineers who use Hadoop; engineers who use Hadoop look down on engineers who use Hadoop to process only a few GB of data; engineers who use Hadoop to process only 1GB of data look down on engineers who use NoSQL; engineers who use NoSQL look down on engineers who use relational databases; engineers who use relational databases look down on PMs who use Excel.

Engineers who use Docker to deploy servers look down on engineers who use Ansible or Puppet to deploy servers; engineers who use Ansible or Puppet to deploy servers look down on engineers who use Fabric to deploy servers; engineers who use Fabric to deploy servers look down on engineers who SSH manually.

OS

Engineers who use Mac OS X look down on engineers who use Linux; engineers who use Linux look down on engineers who use Windows.

Engineers who use Debian look down on engineers who use Ubuntu; engineers who use Ubuntu look down on engineers who use non-LTS versions of Ubuntu.

Hardware

Engineers who use a MacBook Pro Retina look down on engineers who use a MacBook Air; engineers who use a MacBook Air look down on engineers who use a ThinkPad; and engineers who use a Raspberry Pi look down on engineers who use a MacBook Pro Retina.

Engineers who use a Dvorak keyboard look down on engineers who use a Mac keyboard; engineers who use a Mac keyboard look down on engineers who use a QWERTY keyboard; engineers who use a QWERTY keyboard look down on engineers who don't know what a QWERTY keyboard is; engineers who don't know what a QWERTY keyboard is look down on designers who use a graphics tablet.

Engineers who sit in Aeron chairs look down on engineers who sit in ordinary office chairs; engineers who sit in ordinary office chairs look down on PMs who also sit in ordinary office chairs; and engineers who write code standing up look down on engineers who sit in Aeron chairs.

Workplace

Engineers who work on hardware look down on engineers who work on software.

Engineers who write OSes look down on engineers who write Web; engineers who write Web look down on engineers who write desktop applications.

Backend engineers look down on frontend engineers.

Engineers and designers look down on each other.

Engineers who believe in Test-Driven Development look down on engineers who write code first and add tests later; engineers who write code first and add tests later look down on engineers who don't write tests; engineers who don't write tests look down on PMs who, damn it, keep randomly changing requirements.

Engineers without certifications look down on engineers who have acquired a bunch of certifications.

Engineers who wear casual clothes to work look down on engineers who wear suits, and engineers who wear suits to work look down on engineers who wear department uniforms.

———

If after reading these utterly horrifying chains of contempt above, your desire to learn coding still hasn't been knocked down, then I must remind you of the most important thing: go find a girlfriend first, and then learn to write code; because once you become a software engineer, you won't be able to find a girlfriend anymore.

Original source: http://vinta.ws/blog/695