Live data from Hacker News

A computer science study plan to become a software engineer

github.com

181–190 of 220 posts

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

#181

Earlier quoted context omitted.

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 tradi…

Computer science courses these days do in fact teach about memory coherency and MESI protocols with respect to CPU cache management and architecture. You'd learn about pipelining as well, and scalar architectures for that matter. I guess my point is that even if you didn't, if you wanted a head start, it's sufficient to know at least the basics of what microarchitectures are, and how to reason about a computational model of complexity, even if you need to adjust it later (for a particular console, or GPU, or architecture).

As for quaternions, I can derive them (no really, I've written a ton of code in this space, although I prefer the GA formulation), but I want to know, does the candidate understand why they're mathematically advantageous (blending properties, linearity, etc). Can they productively read a paper that uses it and apply the technique, etc.

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

#182

Earlier quoted context omitted.

> 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 t…

> Yes, big-O notation hides constant factors like cache coherence but the solution isn't to analyse things less.

Yet I run into good developers with good CS backgrounds all the time who were never exposed to cache hierarchies in their traditional CS education but had Big-O pounded into their head like it was the gospel on high. Sometimes it seems like revealing how cache misses or prefetchers work is some sort of magic trick that academia skips over.

I've also seen where software engineers will stop at the boundaries of "CS" when it comes to problem solving(ex: not consider the hardware because it's a "hardware" problem rather than rolling up their sleeves and digging in). With the pace of development in software you need to continue to learn outside of a school setting and cultivate that curiosity that helps you come at problems from new and interesting ways.

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

#183
post #40
post #17

Earlier quoted context omitted.

Netflix?

Big N for all N in Facebook, Amazon, Apple, Netflix, Google ...

I don't think Netflix actually belongs in there, it's just that if it weren't the acronym would be FAAG, and if you say you want to work for a FAAG company people will assume you're talking about Grindr or Mozilla or something.

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

#184

Earlier quoted context omitted.

It's a little frustrating how random the process is. I'd consider myself to have a decent resume for an undergraduate. I've interned at a "big N" so to speak, I've done side projects that are relevant in my field of interest and I'd consider myself to have amassed some domain specific knowledge. Yet my resume gets random rejected/ghosted from a remarkable amount of places. It's especially bad when I don't fit neatly…

You're currently still an undergrad ? That'll be why. It's obvious you'll likely leave a job when you go back to studying.

Yes, but it's frustrating that a lot of companies aren't willing to run internships over the spring or fall

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

#185

Earlier quoted context omitted.

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 t…

> Yes, big-O notation hides constant factors like cache coherence but the solution isn't to analyse things less. Yet I run into good developers with good CS backgrounds all the time who were never exposed to cache hierarchies in their traditional CS education but had Big-O pounded into their head like it was the gospel on high. Sometimes it seems like revealing how cache misses or prefetchers work is some sort of mag…

> you need to continue to learn outside of a school setting and cultivate that curiosity

This is true of just about everyone in computing. This isn't an industry for people who expect to cruise on the knowledge they were given a decade ago. (Plenty of people do, but thats another rant.)

Regarding big-O, one habit / intuition I think its really important to develop is an intuition about how well something will actually perform in practice. Like, you should be able to guess within an order of magnitude or two:

- How many simple reads per second and writes per second your database can perform

- How many lookups / inserts per second to expect out of some standard data structures. (And how those numbers change as the collection grows)

- How many allocations your program does, and how much time is spent in the allocator

- About how large the steady state working memory size should be for your program

I'm not talking about theoretical O(n) numbers. I mean, right now, if I write a tight loop in nodejs on my laptop writing random numbers to a JS Map(), how fast will it go? How does that compare to C/Rust? How many SET calls per second can a redis instance on my laptop handle? How about SELECT queries to postgres, or find({id:...}) calls to mongodb? Will the database be faster or slower than the nodejs program on my laptop thats issuing those queries? How many HTTP requests per second should I expect out of my express server? How many milliseconds should it take to statically render my web app to HTML? Etc.

And arguably more importantly, it shouldn't take you more than ~20 minutes to go and find out the answer to any of those questions. Benchmarking is a delicate art, but if you can't measure, you programming blind.

I wrote a fuzzer the other day which did about 100 iterations / second. And I know something was wrong because the number was orders of magnitude lower than I intuitively expected. Some tweaking later its now running about 1000 iterations/second - still too slow. Profiling shows its now spending 99% of the time in a single function. I'm hoping for another 10x when I rewrite that function. Without my intuition whispering in my ear, my program could have ended up 100x slower than it should be for no good reason.

Aside: This might make a great interview question for a mid. "I have this simple piece of code. How fast do you think it will run on your laptop? Ok, share your screen and write a program to measure it. Talk to me about your answer!"

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

#186
post #40

Earlier quoted context omitted.

Big N for all N in Facebook, Amazon, Apple, Netflix, Google ...

I don't think Netflix actually belongs in there, it's just that if it weren't the acronym would be FAAG, and if you say you want to work for a FAAG company people will assume you're talking about Grindr or Mozilla or something.

Netflix is in there because they pay as much as or more than the others in that acronym.

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

#187

This sort of stuff is meant to leave the anarchists and the rule benders out of the company. Its requires certain psychological threats to by guided to memorize and do all this stuff. I bet a lot of people with the actual right skills would not pass into those exams. It reminds me if a great lesson from the prince from Maquiavel, where he speaks about what sort of soldiers should be used and say that the mercenary so…

The big tech companies' hiring needs are so massive they'd go out of business if they relied on hiring only "passionate" people who are up to their standard.

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

#188

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…

Before we lend your comment any credence, do you mind listing the projects you've worked on? Groundbreaking software engineering projects that advance the state-of-the-art, like Google's Map-Reduce-based scaling architecture back in the day, or ones that provide some non-trivial edge or advantage, like the tight integration of hardware and software in iPhones (and the resulting responsiveness and battery life), or on…

There is a level between installing wordpress plugins and creating state of the art massive scale infrastructure. And its likely where most developers sit.

I work on a project management application. Its pretty much entirely custom code with little external libraries but it also requires very little computer science theory. The problems I face are less "Find the fastest way to search this datastructure" and more "This code was designed for a legacy model of the system, how can we replace it with something modern without spending months on it"

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

#189

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…

I'm of the opinion that university trains you to reason better about problems and sharpens your problem solving skills. Especially complex problems. So although you might not always encounter the exact academic problem in your day to day work, you still unconsciously use the tools and techniques learned.

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

#190

Earlier quoted context omitted.

Word problem? That's not a technical challenge. That has to do with writing and communications, which are ubiquitous to all types of work. I think you're misunderstanding the premise here.

I think you're mistaking work for being puzzle-solving. Work is always about people. If it's not about people, it's probably research, which is different from work.

Someone needs to solve the technical puzzles, software engineers are people who can do that, being good at managing things is a plus but it isn't what defines the role. There are plenty of roles at companies for people who can manage everything else but not technical things, like product manager or people manager.
Post reply on HN