
Three of the Hundred Falsehoods CS Students Believe - PretzelFisch
http://www.cs.uni.edu/~wallingf/blog/archives/monthly/2019-11.html#e2019-11-10T11_06_39.htm
======
dxbydt
I'm mostly amused by this - > 6\. CS professors know how to program.

Back in grad school, we had an Algorithms Professor who was my advisor & wrote
several important papers. We also had a PL professor who mostly taught
Lisp/C/C++ etc. One day PL professor fell ill. So Algo Prof was sent in as a
substitute. So he tried to divert the class attention by going into algorithm
detail instead of focusing on programming language theory. But homework was
due next week, so students asked him about some C nuance. So Prof said I don't
know, but I'll let you know by next class. Then he hurried back to his room &
tried to read up on C but obviously couldn't make much headway. In those days
we had Usenet & that was it. So the Prof goes on Usenet & clicks on
comp.lang.c. In those days I used to fancy myself a C hacker & I hung around
on newsgroups trying to help out newbies. So I see this frustrated question
from a newbie "HOW TO OPEN FILE FROM C ???" and I click on it so I can help
this poor miserable bastard. Turns out it is from my Professor! The footer had
his entire credentials like PhD, list of papers published, teaching career
etc. So everybody on comp.lang was mocking this idiot who had a PhD in CS but
didn't know how to open a fucking file with C. I was so embarrassed I rushed
into his office & demanded how he could make a fool of himself like that. "You
could have just asked me about fopen, why did you post in public that too with
your real name ??! " He was like I've never used all this newsgroup stuff I
barely know how to telnet. This was my first post I thought they will help me
but they are just heaping abuse.

~~~
laichzeit0
Expecting a CS prof to know how to program is like expecting a pure
mathematician to know how to use Mathematica/Matlab. It’s absurd and doesn’t
follow at all.

~~~
ramraj07
This is more like an anatomy professor who's never touched a cadaver. Far less
excusable than a theoretical mathematician not knowing Matlab - because Matlab
is not the only way to apply math (the mat in Matlab is for matrix not math)

~~~
laichzeit0
The guy has a PhD in algorithms. He’d he writing proofs, not writing code. The
same for programming languages, you’re proving things, like the Pumping Lemma.
Computer Science is not about producing coders for industry. You can learn how
to code from a boot camp or Coursera, but it has very little to do with
Computer Science.

------
travisgriggs
I've always blamed Microsoft Outlook for the top posting nightmare that has
become email standard.

I just use stock Apple mail client and always bottom post (and snip as
appropriate) and I get so many non tech people who approach me in the hall and
ask "how do you do your emails the way you do? can you show me?"

My narrative has always been that Gmail simply followed the trend that
Microsoft's tools set in motion with their monopoly^H^H^H^H^H^Hy^H^Hpopularity
amongst business users.

Of course, I'm not even sure how many modern/younger readers will understand
why "^H". I'm getting too old for this.

~~~
Stratoscope
I like top posting. My experience has been that snippet-and-reply sometimes
leads to an argumentative and confrontational style of discussion, perhaps
more than top posting.

My theory is that snippet and reply may lead to taking quotes out of context
and replying with an uncharitable interpretation of the snippet.

So while top posting may be less logical and efficient, I believe it may be
more conducive to a friendly discussion.

Of course I could be completely mistaken about this, and it was just a
coincidence that the communities I was involved in where top posting was
heavily criticized had cranky people in them who would have found something to
get upset about regardless of posting style.

Edit: I don't mean to imply that _you_ are one of those cranky people just
because you like bottom posting or snippet and reply! :-) Just observing
something I noticed in online forums many years ago.

~~~
hombre_fatal
> My theory is that snippet and reply may lead to taking quotes out of context
> and replying with an uncharitable interpretation of the snippet.

Whenever you start to see multiple quote snippets appear in an HN (or any
forum) comment thread, it's basically guaranteed to have died and splintered
into a bunch of uncharitable nit picks.

It encourages
[https://en.wikipedia.org/wiki/Gish_gallop](https://en.wikipedia.org/wiki/Gish_gallop).

~~~
retsibsi
Maybe this is just my innate pedantry talking, but I think the opposite
pathology is common too: some people are great at writing convincing but
illogical/weakly-supported arguments that only fail when broken down and
looked at in a granular, nitpicky way. Strong norms against that sort of
response might make discussion threads less annoying on average, but they are
also a boon to sophists, charismatic charlatans and sincere but overconfident
bullshitters.

~~~
twic
A nice thing about bottom-posting, and even more so inline-posting, is that is
a weak certificate that the person replying has actually read the whole
message.

------
jakub_g
I checked the original list [1] and it's a fun read; however the following is
_absolutely true_ in my experience:

> 30\. Software with version numbers ending in '.0' are buggy and you should
> wait until the next release.

[1] [https://www.netmeister.org/blog/cs-
falsehoods.html](https://www.netmeister.org/blog/cs-falsehoods.html)

~~~
saagarjha
I just run super alpha quality software all the time so that the “.0” release
seems like a breath of fresh air in comparison.

------
atomicity
| 38. Employers care about which courses they took.

Dark side: Employers care about your technical interviewing ability and your
GPA. Technical interviewing focuses on a subset of skills around certain
algorithms and data structures. The courses most relevant to interviewing will
spend at most a couple of weeks on the topics you need to know well.

Bright side: There's so much to know in CS that regardless of what courses you
take, you'll likely have to (or want to) learn more on the job. So, in
college, you want to focus more on learning-to-learn technical material. Also,
certain CS courses contain so much outdated/irrelevant info that you can more
efficiently learn all you need to know on the job or through your own
projects.

~~~
chrisco255
Yeah take challenging classes that open your mind but you should fully
appreciate that the job will have you use only a subset of what you learn. For
example, I don't work in video games, but I took some computer graphics
classes and it was amazing to learn how rendering and ray tracing work. Same
for hardware. Even though I'm doing web dev, I've had hobby hardware projects
I've worked on and enjoy tinkering with circuits every so often.

What employers do care about is that you worked on something challenging,
you're able to overcome adversity to ship something, and you're eager to learn
more.

~~~
nwallin
Diverse skills can be super important. Even if you're talking about computer
graphics in a really curmudgeonly field.

I'm in GIS. (geospatial information systems) Turns out knowing how to define a
camera using a matrix and intersecting a ray with a mesh of triangles is
pretty useful. And it turns out that if you don't know how to do these things
and just sit down and start cowboy coding the solution you're gonna come up
with is going to need to be rewritten by the person they hire when you leave.

There are a lot of things I run into in my job where I genuinely don't know
what the right algorithm is, compared to the number of times I've said "I
recognize this thing" and brush up on the literature and implement some
variation on it as applicable to my particular usecase. I'm kinda curious as
to how much of the stuff I've written has someone come across it later and
been like, "wtf is this shit, you just use <so and so's (probably Djikstra's)>
algorithm".

~~~
Doxin
For me the most useful skill has been to recognise when I'm doing something
that's O(n^2) or worse, especially if it involves doing anything besides just
math (e.g. database queries, file reads, web requests, etc) If something is
O(n^2) or worse it's a good sign I should probably google around for a better
algorithm.

Thankfully python has a rich set of built in datastructures, using a dict (or
a hash map in other languages) turns a _lot_ of O(n) problems into O(1)
problems. The bisect module turns O(n) problems into O(n log n) problems. I'm
always keeping my eye out for more of these big-o-reducers.

That said, in production software it hardly ever matters these days as long as
you're not doing anything exceedingly daft. Fast enough is fast enough.

------
vxNsr
> _8\. You should always add lots of comments[0] to your code._

If I don't do this, when I come back to the code an hour later I have no idea
what its supposed to do or why I wrote it. I'll also usually add an
explanation, like "3 is bad number of args because..."

> _44\. Funny names are funny, you can always change them later._

This one drives me crazy, I hate when people use something like "x" or
"habberdasher" instead of something functional like "newspapers"

[0]
[https://twitter.com/jschauma/status/1044581775983276034](https://twitter.com/jschauma/status/1044581775983276034)

~~~
nullc
> If I don't do this, when I come back to the code an hour later I have no
> idea what its supposed to do or why I wrote it.

Many people write comments which are often nothing more than a really obvious
transliteration of the code to English "foobar += 3; // Add 3 to the foobar".

These comments add little to nothing and often become worse than useless when
they fall out of date and you end up with a cryptic "foobar += 7; // Add 3 to
the foobar"

I find it helpful to imagine a codebase guru, someone who not only wrote the
thing but has had years of experience maintaining and teaching to others...
and the comment writes down what they would say if you asked them about it.

The guru wouldn't say 'adds three to foobar', they'd tell you about how the
number used to be the obvious value of two but then the database choked when
the boss was trying to store their golf scores in it, because foobar controls
the whatzanits and there can be a race that requires it to have room for one
extra. The guru would tell you _why_, and that's what a better comment will
do.

Students of programming are often just writing what they're told to write.
They don't necessarily have a strong grasp on the why, especially not a deep
contextual grasp.

~~~
dllthomas
I once saw

    
    
        using namespace std; // using namespace standard

------
tracer4201
>Sprinkling printf statements is an efficient debugging technique.

I’m a senior engineer for one of the big tech companies. For some issues,
printing (or writing to your logger) is certainly what you’ll try again and
again and it can absolutely get you a far way or down to the root cause. It’s
not the best strategy (Depending on what you’re dealing with) but it can often
work.

Where it’s probably less fruitful most of the time is if you’re debugging some
kind of distributed system that has just that one edge case which occurs < 1%
of the time in production against real traffic, and it’s entirely your own
damn fault for trying to reinvent distributed locking or something akin to
your own algorithm that “handles” eventual strong consistency.

~~~
lostcolony
I find it depends on the language, too. Some make debugging a little harder,
but are so easy to mess with (REPL or similar), that printing is sufficient
and easier 95%+ of the time.

Some languages invite sufficient complexity that you need to actually step
through most code written in them...and they also offer the facilities to do
so fairly easily.

So I'd say this really depends on the language.

------
saagarjha
I like top posting+keeping the reply text. That way, if I get CC’d on a
conversation in the middle, I have all the context I need instead of a cherry-
picked selection of what someone in the reply chain thought was relevant.

~~~
dwringer
This has always been my default: including the entire reply chain for the same
general reason you've stated, and top-posting my reply so it doesn't
accidentally get read by someone later as part of someone else's previous
message (possibly after formatting conversions that could conceivably screw up
the displayed hierarchy). It just seems like the method with the least
potential for things to go wrong.

------
vanniv
> 24\. Productive coders write lots of code.

I wish I could convince my _employer_ of the low truth-value of that
statement.

(Instead, I make sure to have a reasonable number of easy large-code-volume
tasks sitting in a backlog so that I never fall behind)

~~~
flukus
On the other hand there are many times where I wish I could convince other
programmers of that statement. Lots of repetitive boring code is usually
better then convoluted meta frameworks to solve the same task. I just spent my
morning digging through 8 layers of OO abstraction hell that turn CSV files
into sql because someone thought the easy way was too repetitive and the could
cut the LoC count.

~~~
vanniv
We engineers sometimes love beauty too much.

Sometimes, we build things that are technically beautiful because we
appreciate them, even though they aren't actually the right solutions to the
problems at hand.

~~~
clarry
You call it beauty, but to me a pile of unnecessary abstractions (and the
associated boilerplate) is just ugly. It can be fun to design and build, kinda
like goldberg machines, but I wouldn't decorate my home or art with such
things.

Simple, small, short.. now that's where I see beauty.

------
thethirdone
From the original 100

> 54\. 'main' takes two arguments, argc and argv.

Is this a myth because you are supposed to think of them as one argument?

Or because of non-standard extension that includes envp?

Or because of some other nitpick?

I feel I have a pretty solid understanding of how processes are started for C
and I think the statement is true.

~~~
beatgammit
Also:

> Sprinkling printf is an efficient way to debug.

I mostly work on threaded code, and print statements are my go to for tracking
down weird timing issues. Things behave much more differently when attaching a
debugger, and adding good logs makes a ton of sense long term anyway, so yeah,
print statements are absolutely a great approach to debugging.

A lot of them are true, but several aren't. I guess that's the thing about
lists...

~~~
astatine
> > Sprinkling printf is an efficient way to debug.

> I mostly work on threaded code, and print statements are my go to for
> tracking down weird timing issues.

I have found printf to subtly alter timing in threaded programs. Either
masking issues or introducing them.

Anecdotally, I remember some programs being reported as working only with a
printf present and bombing when removed.

~~~
lostcolony
Yeah, but the likelihood of a printf throwing the timing off is generally
lower than a breakpoint.

------
keyle
> 71\. The ad-driven profit model is a necessary but reasonable trade-off to
> make the world a better place.

I was glad to read that amongst the rest.

------
sarah180
There are people still complaining about top posting? Wow. All these CS grads
who invented putting the high-signal new data first clearly need to get off
your lawn.

This article makes me feel very old.

------
dang
Discussions of the larger list:

[https://news.ycombinator.com/item?id=21501720](https://news.ycombinator.com/item?id=21501720)

[https://news.ycombinator.com/item?id=21427563](https://news.ycombinator.com/item?id=21427563)

------
mwfunk
As far as classes go, if I’m interviewing someone fresh out of college (or
current students looking for internships), it does make a difference what
classes they took. That’s somewhat specific to what I do professionally
though.

Pretty much anything I’d hire them for would involve some degree of systems
programming and/or graphics. So, having one or more OS classes and/or graphics
classes are significant. Of course if they are knowledgeable about those
things by learning on their own, that’s great too, but that’s even less
common.

Once someone’s no longer fresh out of college, education specifics become a
lot less important, and the focus shifts to their career history. But for
people without a prior history, there’s little else to go on. For example, if
a particular internship or junior position involves graphics, it’ll make a big
difference if the interviewee has some sort of introductory foundation of
knowledge and won’t be starting from scratch. That could be a critical
difference between two otherwise equal candidates.

TL;DR if you are a student with an interest in any interest in a specialty
that you might want to pursue professionally, and there’s a course dedicated
to that specialty, by all means take that course. Whether it’s graphics, or
AI, or operating systems, or whatever. It could definitely help you get that
first job or internship in that field. It sounds painfully obvious, but it
must not be based on my personal experiences.

~~~
proverbialbunny
I'd say it's less what class you take and more what skills you have.

If you say you can use X programming language or Y framework, and you pass an
interview you've got the job. It doesn't matter if X and Y were learned in a
class or doing hobby projects. At the end of the day it's the same skill.

Most interviews for new grads are algorithms interviews, which requires some
level of skill from an algorithms class, which is at most universities a third
year class, which is why companies want people with a BS and not an AS.

------
ElonMuskrat
> 8\. Sprinkling printf statements is an efficient debugging technique.

Ouch. This is my bread and butter.

------
caiocaiocaio
I've known younger programmers think the speed difference between ++i and i++
is enormous and that using the wrong one is the sign of an incompetent
programmer. But they don't necessarily know why or agree which one was the
good one.

------
paulddraper
I am clearly undereducated on some of these

> 21\. 'Privacy' and 'Confidentiality' are synonymous.

> 50\. The error message 'No space left on device.' means you are out of disk
> space.

> 54\. 'main' takes two arguments, argc and argv.

> 62\. Dropbox is a suitable backup solution.

> 69\. Zuck is a genius.

> 76\. HBO's "Silicon Valley" is satire, not a documentary.

> 77\. Jokes about recursion are funny jokes about recursion.

> 94\. There is a "real world".

~~~
deathanatos
Well, I can answer a few of them. But honestly, these are kind of obscure, and
I'm not sure you need to know them all.

> 50\. The error message 'No space left on device.' means you are out of disk
> space.

On Linux systems, (and perhaps most Unix-likes? IDK) some fraction of the file
system is typically reserved for root, typically to allow core functions to
continue and to give some breathing room to recover the device. This is the -m
flag to mke2fs, "Specify the percentage of the filesystem blocks reserved for
the super-user." which defaults to 5%.

> 54\. 'main' takes two arguments, argc and argv.

It can also take no arguments. I believe it can also take a third argument, a
char* environ[], which contains the environment variables, but I don't know
what the standards say about this. (I believe its a thing some
implementations, particularly Unix-likes, do, but not a required-by-C thing.
There's also the entry point in Windows, but that has a completely different
name.)

Most of the rest seem like subjective opinion on the state of the world.

> 94\. There is a "real world".

 _" You think that's air you're breathing?"_ and the recent
[https://xkcd.com/2221/](https://xkcd.com/2221/) ; also
[https://qntm.org/responsibility](https://qntm.org/responsibility) ; or at
least, that's how I'm choosing to interpret #94.

~~~
duskwuff
>> 50\. The error message 'No space left on device.' means you are out of disk
space.

It can also mean that you're out of inodes. Or, if you're working with a non-
disk-based FS, it can mean that you've run out of some other resource.

~~~
nullc
Or out of quota.

------
captainbland
> Sure, they could go on and get a PhD, but first they'll make some money;
> they can always come back later.

Yeah, you can totally trust yourself to not take on a bunch of financial
obligations that would effectively preclude the possibility of taking on a
PhD. Honest.

------
taeric
I was hoping that refreshing the page would highlight a different three. :)

Blaming gmail for top posting seems odd. I can't disagree. And I like quoted
messages. That said exchange, and phones, seem just as culpable.

------
combnoinipo
The original list has a few I’d argue with >95\. Brooks's Law has exceptions
However, the Wikipedia article linked has a subsection of exactly that —
exceptions.

------
daly
27\. Real Programmers(TM) use neon-green on black terminals.

This caused a guffaw... because I have a large screen which has a full-screen
emacs session... using green on black :-)

~~~
topologistics
Real Programmers (TM) use emacs -nw

------
golover721
I always ask recent graduates about interesting courses they took. Not so much
to meet some kind of criteria, but to start a conversation about something in
CS that interests them. Helps to see how passionate they are about their
field.

------
Iv
34\. They know how to validate an IP address.

I am surprised by this one. What are the pitfalls there?

~~~
correct_horse
Maybe it means a non-reserved IP? 127.0.0.1, is often used as localhost for
example, but all of 127.0.0.0–127.255.255.255 is reserved. There are several
reserved blocks like this. If you include reserved addresses, every 32 bit
pattern is a valid ipv4 address at least in theory. I hear network equipment
in the real world is entirely another beast. I remember some ISPs did not work
cloudflare's 1.1.1.1 DNS presumably because they were using the address for
something else.

~~~
chungy
IPv4 has a lot of reserved and special-purpose ranges. Hell, I don't think
most people could even recite the three major private-use blocks. Multicast
and link-local addresses have more complications.

IPv6 is similar, though a little better consolidated. While there is one range
of addresses reserved specifically for organization subnets at your disposal
(fc00::/7), a lot of people assume just about anything not currently assigned
for the internet (presently 2000::/3) will be safe forever.

~~~
gspetr
I understand your point, but I think the context is more of "They can't even
handle a fizzbuzz level problem" and not come up with something quite naive
(i.e. something like naive RegEx matching), rather than "they can't implement
a professional IPv4 validator that takes into account all the intricate
special cases with subnets and reserved address blocks."

------
ryanthedev
The gap will be even larger, more low code UI and FaaS are going to make
hiring a lot harder.

I think we don't spend enough time on socket level programming and
concurrency.

I don't know how many Java devs are still writing blocking IO code..

------
wolco
On tge bigger 100 list, this one I kinda still believe. Mostly with games.

"Software with version numbers ending in '.0' are buggy and you should wait
until the next release."

~~~
Iv
27\. Real Programmers(TM) use neon-green on black terminals.

This is not a falsehood. The rest of the world just hasn't caught on.

 _Sent through lynx_

------
ta34535435
> "who can learn knew things as needed"

Not worth mentioning but just in case you wanted to fix it and have missed it.

------
LittleBobby
101\. You should always use React.

~~~
dorkwood
Do CS students learn React?

~~~
caiocaiocaio
No, but many younger people nowadays seem to think it's a necessity, even for
a simple static page.

~~~
edflsafoiewq
I just ran tests for a new project. JS is used for testing. It generates an
HTML test report which requires... react!

------
LittleBobby
101\. Always use React.

------
an_d_rew
Oh my God… “Java is a reasonable choice” and “liberally sprinkling in your
code with the print statements is an effective debugging technique“...

Oh the pain... my everyday pain...

------
CalChris
From the original list:

    
    
      66. Spreadsheets and powerpoint are for business majors.
    

Spreadsheets _are_ for business majors. Jupyter Notebooks are for programmers
and pretty much anyone in STEM. Forcing a new programmer to use a spreadsheet
as if it were a fundamental tool, the Lisp of business, is nonsense.

~~~
jlangemeier
Ummmmmm... not sure if this is hyperbole or not, darn Poe's law.

I've seen a civil engineer push the limits of excel for complex stress-strian
models, a finance comproller quickly build out elegant reporting models, and
an environmental engineer build out a complex watershed model; but sure,
spreadsheets and Excel _is_ only for business majors.

