27 ms·
Three of the Hundred Falsehoods CS Students Believe
- jakub_g 7y agoI 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 7y agoI just run super alpha quality software all the time so that the “.0” release seems like a breath of fresh air in comparison.
- deleted 7y ago[deleted]
- mike_hock 7y agoDepends on the project, but it's absolutely true for some.
- chrismcb 7y agoYou can probably replace the 0 with any digit, and it will remain true.
- Groxx 7y agoyeah, I'd be curious to see what a distribution of "time until first confirmed bug / next bugfix release" looks like. I strongly suspect the .0 versions don't last long in the vast majority of cases. It may not be a True Fact, but it's not used that way. It's a reliable heuristic, nothing more.
- deleted 7y ago[deleted]
- protomyth 7y agoFor OS X the .3 release seems to be the sweet spot.
- mike_hock 7y ago> 'Email' and 'Gmail' are synonymous. Jesus fucking Christ
- dang 7y agoCould you please not post unsubstantive comments to Hacker News?
- travisgriggs 7y agoI'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.
- techslave 7y agotop posting is absolutely fine for the type of low content email generally used by 90% of businesses. always bottom posting is nearly as awful as always top posting. email is for the reader, not the writer. write to your reader’s expectations and to maximize their understanding, not to appease your own sense of what is “correct”
- vanniv 7y agoget off my lawn^W^W^W^W I'm getting old, aren't I.
- 7y ago
- taeric 7y agoI 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.
- atomicity 7y ago| 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 7y agoYeah 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 7y agoDiverse 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".
- saagarjha 7y agoI 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 7y agoThis 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 7y ago> 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 7y agoOn 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 7y agoWe 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 7y agoYou 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.
- deleted 7y ago[deleted]
- mwfunk 7y agoAs 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 7y agoI'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.
- thethirdone 7y agoFrom 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.
- tahoemph999 7y agoTwo answers. Some embedded envs I've worked in there isn't a argc/argv/envp. In the Unix envs I've worked in it also takes envp. I think I've use that 3 times in the roughly 25 years I mostly wrote c.
- thethirdone 7y ago> Some embedded envs I've worked in there isn't a argc/argv/envp. I would think you are generally using _start rather than main in embedded systems. But in embedded systems portability is generally out the window so it makes sense that some _start's call main without arguments. > In the Unix envs I've worked in it also takes envp. I think I've use that 3 times in the roughly 25 years I mostly wrote c. I have never tried to use envp and had it fail, but for maximally portable code you should use getenv() or if on posix you can use the environ variable.
- beatgammit 7y agoAlso: > 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...
- couchand 7y agoSprinkling printf is very different from "good logs". Moreover, logging is not primarily for interactive debugging, but rather for monitoring. They're complimentary practices.
- combnoinipo 7y agoThe 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.
- golover721 7y agoI 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.
- ryanthedev 7y agoThe 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..
- keyle 7y ago> 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.
- ta34535435 7y ago> "who can learn knew things as needed" Not worth mentioning but just in case you wanted to fix it and have missed it.
- vxNsr 7y ago> 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
- nikeee 7y ago> 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 think the point that the tweet is trying to make is that if you comment, you should explain why you are doing something instead of saying what you are doing. The latter is already written there, in code.
- frizkie 7y agoThis is one of a few of my programming pet peeves. So many people I work with add comments which are completely just re-stating the code that follows. Ruby is particularly bad for this, at least visually. # authenticate user user.authenticate!
- nullc 7y ago> 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.
- paulddraper 7y agoI 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".
- deleted 7y ago[deleted]
- deathanatos 7y agoWell, 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 7y ago>> 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.
- wolco 7y agoOn 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 7y ago27. 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
- dxbydt 7y agoI'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.
- Upvoter33 7y agoIn contrast, there are plenty of CS professors who are really quite exceptional hackers. The falsehood should be "All CS professors are really good programmers".
- shaklee3 7y agoDan J Bernstein, for one.
- laichzeit0 7y agoExpecting 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.
- Iv 7y ago34. They know how to validate an IP address. I am surprised by this one. What are the pitfalls there?
- correct_horse 7y agoMaybe 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 7y agoIPv4 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 7y agoI 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."
- Iv 7y agoYes, but that's still orders of magnitude easier than parsing emails or html...
- Lyrex 7y ago
- tracer4201 7y ago>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 7y agoI 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.
- CalChris 7y agoFrom 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 7y agoUmmmmmm... 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.
- sarah180 7y agoThere 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.
- LittleBobby 7y ago101. You should always use React.
- dorkwood 7y agoDo CS students learn React?
- caiocaiocaio 7y agoNo, but many younger people nowadays seem to think it's a necessity, even for a simple static page.
- lostcolony 7y agoLike jQuery back in the day.
- edflsafoiewq 7y agoI just ran tests for a new project. JS is used for testing. It generates an HTML test report which requires... react!
- LittleBobby 7y ago101. Always use React.
- caiocaiocaio 7y agoI'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.
- daly 7y ago27. 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 7y agoReal Programmers (TM) use emacs -nw
- dang 7y agoDiscussions 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
- an_d_rew 7y agoOh 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...
- ElonMuskrat 7y ago> 8. Sprinkling printf statements is an efficient debugging technique. Ouch. This is my bread and butter.
- captainbland 7y ago> 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.