November 1st, 2019

Yep, it's one of those Falsehoods lists. This one (following all the falsehoods about falsehoods lists) is derived in part from my experience teaching Unix Programming and System Administration, in part from observation of new hires in the industry. But let's just go ahead:

They "know" "C/C++". Java is a reasonable choice for almost all programming tasks. Programming == Computer Science. People with a CS degree are good programmers. People with a CS degree know how to program. CS professors know how to program. CS professors know how to use a computer / mobile device or how the internet works. You should always add lots of comments to your code. Sprinkling printf statements is an efficient debugging technique. Compiler warnings can be ignored, as they'd be errors otherwise. If it builds on your laptop, it will build on everybody else's. Answers posted to StackOverflow are always correct. If the code is on the internet, that means you can use it. Free software is free. Open Source means it has fewer bugs and is more secure. 'git' and 'GitHub' are synonymous. 'Unix' and 'Linux' are synonymous. 'Email' and 'Gmail' are synonymous. 'Bash' and 'sh' are synonymous. AWS and 'cloud services' are synonymous. 'Privacy' and 'Confidentiality' are synonymous. 'Encryption' and 'Security' are synonymous. Smart people write clever code. Productive coders write lots of code. Being able to program is the most important aspect of being a good software engineer. Having a CS degree is a necessary and sufficient condition for being a good software engineer. Real Programmers(TM) use neon-green on black terminals . Command-line tools should print colorized output. TED talks are Science(TM) and the information presented is accurate. Software with version numbers ending in ' .0 ' are buggy and you should wait until the next release. Parsing timestamps and dates is trivial. (And all the other Falsehoods about Time.) They know how to validate an email address. They know how to validate a hostname. They know how to validate an IP address. They know how to parse HTML. They are good at multi-tasking, as is evident from their ability to take notes in class and check Facebook at the same time. They understand team work based on their senior design project. Employers care about which courses they took. Sure, they could go on and get a PhD, but first they'll make some money; they can always come back later. The network is reliable. (And all the other Fallacies of Distributed Computing.) Third-party services are reliable. AWS is reliable. Ok, but it is when you have redundancy in multiple geographic regions. Funny names are funny, you can always change them later. Variable names should be as short as possible; vowels cost extra. I/O efficiency increases linearly with the size of the buffer you use to read data into. You can read the entire file into memory. You can always write to the current working directory. You can always write to /tmp . The error message 'No space left on device.' means you are out of disk space. Ok, but in general, using temporary files is easy and risk free. After a fork(2) , the parent always executes first. malloc(3) always returns a valid pointer. ' main ' takes two arguments, argc and argv . If you see a process with the same PID you saw previously, that means it's the same process. If you get a permissions error, chmod 777 . "setuid" means the program has root privileges. File deletion requires write permissions on the file. Race conditions are only rarely triggered. Object-oriented programming is the best and most common programming paradigm. Using a custom written Vector class makes your program object-oriented. Dropbox is a suitable backup solution. They can't be hacked or phished because they understand computers. They understand computers. Most of the important lessons they need to learn are behind them. Spreadsheets and powerpoint are for business majors. Programmers spend most of their time programming. Elon Musk is a genius. Zuck is a genius. Steve Jobs was successful because, not in spite of being a jerk. The ad-driven profit model is a necessary but reasonable trade-off to make the world a better place. Software engineering is a meritocracy, because computers do what you tell them to. Technology and algorithms are neutral. Success implies talent. Failure implies fault. HBO's "Silicon Valley" is satire, not a documentary. Jokes about recursion are funny jokes about recursion. The humanities requirements were a waste of time. They will use lots of math in their career. All traffic on the internet is either UDP or TCP. DNS traffic always uses UDP. ICMP is only used for ping and traceroute . If Google uses it, then your company should use it. If Facebook does it, then it's ok for your company to do it, too. If it's younger than 5 years, it's a fad. If it's older than 5 years, it's obsolete. Using lambda in Python is a good idea because it shows others you have a CS degree and understand the "Lambda Calculus". Rewriting an algorithm to use Red-Black Trees is worth the time. They will encounter Huffman coding at least once in their career after college. Two people with a CS degree will have a very similar background and shared experience/knowledge. Algorithmic complexity and O-notation are used all the time in the "real world". Algorithmic complexity and O-notation are never used in the "real world". Academia somehow is not the "real world". There is a "real world". Brooks's Law has exceptions. Conway's Law has exceptions. Murphy's Law has exceptions. This could never happen. Nobody would enter that sort of data. This list is finite.

November 1st, 2019