Live data from Hacker News

What every computer science major should know (2011)

matt.might.net

61–70 of 187 posts

Re: What every computer science major should know (2011)

#61

Earlier quoted context omitted.

> learning how to examine other people's ideas without coming across as I'm attacking them. This is an extremely valuable skill to learn as well as a difficult one. Unless you work in a vacuum this will help you work better as a team. It is one of the differences between a fantastic manager and a bad manager. People will value your opinion and it will help you learn more (because you will see more code and how others…

The real pain is that most of us think we ARE good at it. We think about our intentions, and not what comes across. Intent rather than impact. But it's the impact that matters.

There is a good saying on this topic that helped me be more mindful of the phenomena you described: people tend to judge themselves by their intentions, but other people by their actions.

Re: What every computer science major should know (2011)

#62

Earlier quoted context omitted.

I don't do networking, and I don't make a lot of friends outside of work, so I really only know people I have worked with before, and those people are mostly working at the same company I left, or they are working at companies I don't want to work at. So I've failed by the bar set in your comment, but for some reason I don't feel that way, because there are plenty of jobs out there on job boards. I got 1 job through…

You do networking everyday of your professional career. It’s a real consideration if the job you are going to take will allow you to work with people you want to work with at the job after this one. Don’t discount that value. Right now is not a good time to judge your career pathing plan. It’s literally the easiest time to get a job in computing in modern history, which includes the first web boom. It’s like judging…

Not had trouble finding work this way for 16 years. I do think it is interesting that things can change - black swans and all that. I don't feel that afraid as I managed to get a job as a grad after the .com bust. Unless computing goes out of fashion? Or get really easy to program.

Re: What every computer science major should know (2011)

#63
I don't think it's that valuable to improve IDE-less software development skills. Just because some Unix nerds find it cool to play with text files, avoid modern software development tools or program in date languages like C it shouldn't be desirable for a computer science major. Computer science should focus on long-live principles, the Unix philosophy may have a lot of good worth to keep principles, but kinda nothing in the software engineering space should suggest we've already approximated perfect solutions and nothing could be improved.

Re: What every computer science major should know (2011)

#64

Earlier quoted context omitted.

You do networking everyday of your professional career. It’s a real consideration if the job you are going to take will allow you to work with people you want to work with at the job after this one. Don’t discount that value. Right now is not a good time to judge your career pathing plan. It’s literally the easiest time to get a job in computing in modern history, which includes the first web boom. It’s like judging…

Not had trouble finding work this way for 16 years. I do think it is interesting that things can change - black swans and all that. I don't feel that afraid as I managed to get a job as a grad after the .com bust. Unless computing goes out of fashion? Or get really easy to program.

Your last job, how did you get it? Literally didn’t involve any precious coworkers?

Re: What every computer science major should know (2011)

#65
This list feels rather more like "this is all the courses I took in college, and why you should take them too" than what should be the minimum knowledge level of a computer scientist. For that list, you need much fewer things--I can think of 5 things, but learning them well may require several courses:

1. Communication skills. This should need no explanation.

2. Required math curricula. You need high school algebra and discrete math. Light introductions to statistics, linear algebra, calculus, and logic are too damn useful to pass up, but a full semester course in these topics is often overkill. Abstract algebra, graph theory, and numerical analysis are more situational in their utility.

3. How to design software. This is more than just programming 101 and software architecture, you also should know how--and when--to use IDEs, version control, refactoring, testing, debugging, code review, how to report bugs, navigation of large codebases you didn't write, etc.

4. What makes fast software fast and slow software slow. Computational theory and data structures and algorithms fall into this bucket. There's a fairly standard set of data structures to learn, but I would caution that you don't ever need to know how to actually write a good hashtable or binary search tree, but you should know how they work and what the performance ramifications are. Basic computer architecture should also be required, and I think there's often too little emphasis on the impact of the memory hierarchy in software. I also think you should understand how a compiler is going to interpret your code, what it will and won't do to make it faster, and what you can and can't do to make compilers work better. (Lexing and parsing theory, which tend to be the bread-and-butter of early compiler courses, need not apply).

5. A deep understanding of different programming languages. First, you need a workhorse language that most software is written in, just to get you employed. In addition, you should cover the four major programming paradigms: imperative, object-oriented, functional, and logic. It is more important to deepen your understanding of one of these paradigms than to pick up another language. Once you understand all of these paradigms, you should be able to quickly pick up whatever language you need to get your job done.

As you can see, I definitely favor depth over breadth. The utility of breadth is mostly in knowing that there are topics out there that other people know much more about than you do, and you should defer to their opinions (and in choosing something to specialize in if you're unsure). But many intro classes will probably leave students with an inflated impression with their competence. This is particularly dangerous in cryptography, which is so easy to screw up that even experts do so on a regular basis; if you're not an expert, you shouldn't even try.

Re: What every computer science major should know (2011)

#66

To me, this sounds more like what a good CS Ph.D who spent his free time filling in every general CS knowledge gap he could come up with would know. I don’t know why he says learn real analysis and linear algebra to talk to engineers when I doubt 90% of engineers took one analysis course unless they’re Ph.Ds.

The article says:

> Computer scientists and traditional engineers need to speak the same language--a language rooted in real analysis, linear algebra, probability and physics.

This is saying that the ontological common-ground between Computer Science and Engineering is rooted in, among other things, Real Analysis -- not that either Computer Science or Engineering majors need to take a course called "Real Analysis".

It does recommend specific math classes, but a class on Real Analysis isn't in those recommendations.

I think that the US's major Engineering-accreditation agency, ABET, requires most Engineering disciplines to have both Linear Algebra and Multivariate Calculus (also called "Calculus III") as core courses. Many students opt to take additional math beyond the basic core classes.

Re: What every computer science major should know (2011)

#67

Earlier quoted context omitted.

Not had trouble finding work this way for 16 years. I do think it is interesting that things can change - black swans and all that. I don't feel that afraid as I managed to get a job as a grad after the .com bust. Unless computing goes out of fashion? Or get really easy to program.

Your last job, how did you get it? Literally didn’t involve any precious coworkers?

No, it was advertised on LinkedIn. Coworkers only required for references.

Re: What every computer science major should know (2011)

#68

My day job is engineering at one of the big tech companies whose search services most of the people I know use almost every day. In the 100+ interviews I’ve done for engineers, I’ve never cared for their portfolio. It’s hard for me to know if it really is their portfolio or if they actually wrote the code, etc. I’m going to ask you design and coding questions.

If someone has a portfolio I will certainly ask about those projects. Gives an opportunity to demonstrate technical acumen and communication skills at the same time.

Re: What every computer science major should know (2011)

#69

Earlier quoted context omitted.

Your last job, how did you get it? Literally didn’t involve any precious coworkers?

No, it was advertised on LinkedIn. Coworkers only required for references.

So you only used a site dedicated to your online network for the first contact and your in person network for the final conversion.

Seems like networks had nothing to do with your job to me...

Re: What every computer science major should know (2011)

#70

Earlier quoted context omitted.

Judging by the Wikipedia article, "Real analysis" is freshman-level math for most branches of engineering. Pretty shocking how little math most CS programs require in comparison.

In the US universities I’ve attended, it’s a senior level mathematics major course. Second semester freshman calculus will teach you similar material in a much more glossed over fashion and apply it to very simple examples.

Matt brought up RA in the context of "speak the same language". In that context, freshman calc ticks the box.

His standards are high, but fair.

Post reply on HN