Live data from Hacker News

A computer science study plan to become a software engineer

github.com

171–180 of 220 posts

Re: A computer science study plan to become a software engineer

#171
post #35

This isn't a bad list of topics about data structures, algorithms, and software fundamentals, but let's not pretend that computer science has anything to do with most software engineering roles. I studied computer science, and in 30 years, I've hardly used any of it. There were a few jobs where some of the statistics and math were helpful, but in my long career, I've seen very little overlap between computer science…

Your comment reflects a common meme that can often be summarized as: "Real World" work doesn't involve the academic nonsense you learn in school. Many of the people who say this kind of stuff never really mastered the theory, and because they never mastered it they can't really use it, and because they can't really use it they find work that doesn't strictly require it, and then conclude it's useless... It's like whe…

I think you've refuted something other than what caymanjim said here. I personally agree that "the vast majority" of software engineering does not require deep knowledge of computer science, and I also believe there are plenty of "real world" problems that absolutely do require computer science. In no way does my agreement with the first statement commit me to disagreeing with the second statement.

You say caymanjim's comment "reflects a common meme" that real world work "doesn't involve the academic nonsense you learn in school" Why? It seems like you swapped out his argument with something different, by claiming one "reflects" the other. Sounds like "We got trouble, with a capital T, and that rhymes with P, and that stands for Pool". Stating that most software engineering work doesn't require CS theory doesn't commit anyone to claiming that it never relates to real world work. Furthermore, I think you can claim that theory isn't used in the vast majority of real world work without dismissing that theory as "nonsense" - a word you supplied here that wasn't part of the OPs comment.

Now - I will agree with you that many people say this stuff, and you may very well have diagnosed why. But you refuted something you recall other people saying, not what caymanjim said.

Re: A computer science study plan to become a software engineer

#172

Earlier quoted context omitted.

CompSci theory hasn't helped me with the complexity of the industry i work in. It hasn't helped me when i've misunderstood something in our domain. It hasn't helped me release / distribute a product easier or faster or cheaper. It hasn't helped me navigate team dynamics or how to work effectively with others. It hasn't helped me write better technical texts. So for some very specific cases, in my career (and i suspec…

I have no experience in the field and I would like to quickly get in it. I want to dive in with experience and I’m trying to figure out what things would get me there quicker if someone wanted to tutor me at work. What would you say are the things in your experience that are most useful to be able to contribute in a development team?

I'd say the ability to solve a real problem in the programming language of your choice is a minimum criteria to call yourself a programmer. Getting there would require a basic understanding of that language, data structures generally, many problems revolve around databases or REST APIs so learn how to use those, I'd also throw in version control and how to write unit tests.

Re: A computer science study plan to become a software engineer

#173
post #35

This isn't a bad list of topics about data structures, algorithms, and software fundamentals, but let's not pretend that computer science has anything to do with most software engineering roles. I studied computer science, and in 30 years, I've hardly used any of it. There were a few jobs where some of the statistics and math were helpful, but in my long career, I've seen very little overlap between computer science…

Your comment reflects a common meme that can often be summarized as: "Real World" work doesn't involve the academic nonsense you learn in school. Many of the people who say this kind of stuff never really mastered the theory, and because they never mastered it they can't really use it, and because they can't really use it they find work that doesn't strictly require it, and then conclude it's useless... It's like whe…

> But those who are not comfortable with the foundational theory stuff just don't see it and don't even think to approach the problem in that way.

Or maybe all that "foundational theory" is oblivious to cache hierarchies(hello Big O notation) and generates worse performance on constrained devices. Or perhaps there's enough unknown, unknowns that throwing something at the wall is a legit way to get data if it's not a one-way decision.

However the attitude on display above is a problem because you've just alienated those people who may have come from a different background or do know the theory but are approaching a problem in a different way.

Re: A computer science study plan to become a software engineer

#174

Earlier quoted context omitted.

"Many of the people who say this kind of stuff never really mastered the theory, and because they never mastered it they can't really use it, and because they can't really use it they find work that doesn't strictly require it, and then conclude it's useless..." this is quite the assertion. do you have any evidence supporting this statement?

I think the claim is easily sustained with just empirical evidence. If you want to do a career in embedded, or graphics, or robotics, or maybe flight control, etc., you're going to need the math and the comp sci in droves. HN tends to have a crowd skewed towards certain disciplines, which is why every time the topic of a whiteboard interview shows up, most of the comments voice a strong opposition. In my line of work…

I've done both graphics and embedded systems. I don't think any of that is true. In fact I found most the formal education around graphics to be outdated or disconnected from the reality of how systems are built(mostly due to trade secrets and the industry moving much faster than coursework could keep up).

Re: A computer science study plan to become a software engineer

#175
post #35

This isn't a bad list of topics about data structures, algorithms, and software fundamentals, but let's not pretend that computer science has anything to do with most software engineering roles. I studied computer science, and in 30 years, I've hardly used any of it. There were a few jobs where some of the statistics and math were helpful, but in my long career, I've seen very little overlap between computer science…

Your comment reflects a common meme that can often be summarized as: "Real World" work doesn't involve the academic nonsense you learn in school. Many of the people who say this kind of stuff never really mastered the theory, and because they never mastered it they can't really use it, and because they can't really use it they find work that doesn't strictly require it, and then conclude it's useless... It's like whe…

How is this not an ad hominem attack? Take your typical software job, can we not identify clearly what percentage requires formal computer science? You’re debasing his claim with a passive aggressive attack on ‘maybe you just didn’t learn shit in college’.

Re: A computer science study plan to become a software engineer

#176

Earlier quoted context omitted.

I think the claim is easily sustained with just empirical evidence. If you want to do a career in embedded, or graphics, or robotics, or maybe flight control, etc., you're going to need the math and the comp sci in droves. HN tends to have a crowd skewed towards certain disciplines, which is why every time the topic of a whiteboard interview shows up, most of the comments voice a strong opposition. In my line of work…

I've done both graphics and embedded systems. I don't think any of that is true. In fact I found most the formal education around graphics to be outdated or disconnected from the reality of how systems are built(mostly due to trade secrets and the industry moving much faster than coursework could keep up).

Oh yea, calculus and linear algebra is all washed up and the industry has moved way past it. /s

"I don't think any of that is true" is a strong statement. Nobody is saying that a toy renderer in school resembles a AAA rendering engine, but the point is that the thought process needed is the same, and I'm still going to expect a certain degree of rigor from any candidate. Also, the parent post is speaking more about the theory and fundamentals in general, not the direct contents of any particular coursework. FWIW, I am not formally trained in graphics or CS (my training was math).

Re: A computer science study plan to become a software engineer

#177
post #95

Earlier quoted context omitted.

Maybe it's easy to overlook these things when you have a really deep computer science background, but coming to software engineering from a non-CS background (math degree) I found lots of valuable knowledge in CS. The most important parts for me would be: - State machines. I run into a lot of state machines, especially incompletely specified ones. Not that everybody gets these wrong if they haven't studied state mach…

Can you please describe when you had to use formal queueing theory in your work? I have struggled - and failed - to find a use case relevant to daily SWE work, since (a) the probability distribution for most customers waiting in a queue is not known and must be "guessed" or predicted ahead of time using historical data and (b) nearly all queue requirements are simple (i.e. minimize total waiting time) and the solutio…

Mostly simple things: if you have a messaging queue used for logging, and you need to predict the change in its memory footprint given some change in a message format before rolling out/testing the format change, just use Little's law. Or you need to determine the smallest number of consumers that you can have online safely to maximize how quickly you can do maintenance without degrading logging.

Re: A computer science study plan to become a software engineer

#178
post #163

Let us use machines and mechanical engineer as an analogy. These days, you don't need to be a mechanical engineer to operate 'most' machines. Will being a mechanical engineer help if the machine breaks down? Yes. Will there be some machines that only a computer engineer could operate? Yes. Will there be come cases where being a mechanical engineer make you a better machine operator? Yes. But do you need to be a mecha…

So funnily enough, my bachelor's was in mechanical engineering and I'm currently pursuing a master's in computer science after having worked in industry for a few years. While I think I agree with your point, I'm going to nitpick on your analogy.

A mechanical engineer will probably not be called upon to operate any particular mechanical device. They will be called upon to either design or maintain it, both of which will require substantial mechanical engineering knowledge. Operation is a totally different thing for a totally different group of people. Think of the difference between a frontend developer and someone who might use wordpress or wix.

Having said that, you hear the same complaint from mechanical engineers as you might be seeing on any hackernews thread about interviews and hiring - no one ever uses the academic knowledge in real life. And this is true, I've never had to use a Bode plot or whip out a stress-strain curve. But I've had to work with technicians and while several are very intelligent and capable, there was a noticeable lack of refinement in their thought process or lack of breadth. I suspect it's the same thing with programming jobs (although I haven't had one yet, so feel free to call me out on it). Knowing CS will help give context that allows for a more refined programming acumen. Is it necessary? Probably not. In my engineering case, both technicians and I did our jobs equally well, although I often had more responsibility. But if your brand is to have culture of incredibly deep thinkers, you probably want to interview for this quality.

Re: A computer science study plan to become a software engineer

#179

Earlier quoted context omitted.

I've done both graphics and embedded systems. I don't think any of that is true. In fact I found most the formal education around graphics to be outdated or disconnected from the reality of how systems are built(mostly due to trade secrets and the industry moving much faster than coursework could keep up).

Oh yea, calculus and linear algebra is all washed up and the industry has moved way past it. /s "I don't think any of that is true" is a strong statement. Nobody is saying that a toy renderer in school resembles a AAA rendering engine, but the point is that the thought process needed is the same, and I'm still going to expect a certain degree of rigor from any candidate. Also, the parent post is speaking more about t…

My strong statement was in counter to your assertion that the empirical evidence holds that you'll need math and cs in spades.

Most of my graphics works was better served by an understanding of hardware(pipelining, SRAM vs DRAM caches and latency penalties including random vs linear reads). Most of the embedded work was done with a rigor towards memory management and not any "traditional CS". In fact we avoided traditional CS structures(lists, trees, etc) since they had negative performance penalties. The only thing that we came close to leveraging was radix sort along the view axis, and that was through a gnarly hack that let us use it for floating point values.

I've also yet to run into anyone in gamedev or the graphics world who could derive quaternions from first principals. They're damn useful but I think you you know their operations understanding the theory doesn't take you much further.

I think you have a point on rigor, but that has more to do with how to tackle problems broadly rather than any sort of academic or theoretical background.

Re: A computer science study plan to become a software engineer

#180
post #35

Earlier quoted context omitted.

Your comment reflects a common meme that can often be summarized as: "Real World" work doesn't involve the academic nonsense you learn in school. Many of the people who say this kind of stuff never really mastered the theory, and because they never mastered it they can't really use it, and because they can't really use it they find work that doesn't strictly require it, and then conclude it's useless... It's like whe…

> But those who are not comfortable with the foundational theory stuff just don't see it and don't even think to approach the problem in that way. Or maybe all that "foundational theory" is oblivious to cache hierarchies(hello Big O notation) and generates worse performance on constrained devices. Or perhaps there's enough unknown, unknowns that throwing something at the wall is a legit way to get data if it's not a…

All approaches aren't equal. Yes, big-O notation hides constant factors like cache coherence but the solution isn't to analyse things less. Its to analyse things more. And thats what a proper CS education should teach.

And at least once a year I draw on my CS education to:

- Model something using state machine semantics

- Use heap-based priority queues, binary search, b-trees or skip lists. And of course I use hash tables and hash sets weekly.

- Read and implement something that CS researchers invented (PAXOS, interval tree clocks, CRDT work like RGA & YATA, etc).

A lot of self taught programmers also don't seem to have fluency with all the degrees of freedom you have as a software engineer. Off the top of my head: Do you know where the bottlenecks are in this program? Are there better algorithms you could use? Are there different dataflow architectures which would help? Can you trade off CPU for memory with caching or memoization? What are the memory allocation patterns? What do you expect the upper bound on performance to be for this process? What are the fundamental invariants your program / data model should always maintain? Can we use a fuzzer to ensure those variants are always maintained? If those invariants aren't being maintained, would we know about it? What are the single points of failure? (And how could we add redundancy?) How would reliability and performance change if we use a different database, or added or removed indexes or caches? If you wanted to steal our user data, what are all the ways you could you do it?

A junior engineer (or an engineer at a feature factory) might never need to ask these questions. But becoming a good senior requires a deeper expertise in seeing a program. And that requires an integrated knowledge of fundamentals, program analysis, tooling, experience and creativity. People learn all that without a degree, but personally? There's no way I would have learned all that stuff as well on my own.

Post reply on HN