4 ms·
> they have no programming experience What? Intro Systems: demonstrate working knowledge of Assembly. Write C to exploit spatial and temporal locality. Learn
by superuser2 10y ago
> they have no programming experience
What?
Intro Systems: demonstrate working knowledge of Assembly. Write C to exploit spatial and temporal locality. Learn to cope with concurrency.
Operating Systems: write process scheduling, virtual memory management, system calls, and filesystem caching into Pintos [0].
Networks: write an IRC server, user-land TCP implementation, and IP router in C from the relevant RFCs.
Advanced Networks: write Byzantine Generals, Raft, and Paxos from the papers.
Programming Languages: write several interpreters.
Parallel Programming: write efficient concurrent algorithms, implementing concurrency primitives yourself.
Software Construction/Engineering: learn to collaborate with a team. Lose your fear of merge conflicts by immersion therapy. Experience the pain of people not pulling their weight.
Intro Security: given a pseudorandom function, write your way up to a PRNG, stream cipher, RSA, Diffie-Helman, and an authenticated encrypted channel.
Databases: write most of a database engine.
If graduates are passing these classes but can't write code, or find it remotely difficult to get to a passable level on any of the tools you listed in a matter of hours/days, then the CS program at the schools they come from are not nearly rigorous enough and should lose reputation in favor of those that are.
A graduate of a decent CS program should have a decent idea of how to create these tools, and be capable of doing so, though with considerable difficulty. Consuming them should be pretty easy.
[0] http://web.stanford.edu/class/cs140/projects/pintos/pintos_1.html http://web.stanford.edu/class/cs140/projects/pintos/pintos_1...
- alexbecker 10y agoMany CS programs don't have most of these classes. Mine certainly didn't have Software Construction/Engineering, Security, or Databases. And many of these classes are not required for majors, e.g. only one of OS or Networks was required, and Programming Languages and Parallel Programming were optional IIRC.
- greyostrich 10y agoI never took 90% of those classes. Even for a class such as Programming Languages, we never did any actual programming. I'm assuming superuser2 went to Stanford, where their curriculum is no where near what's common.
- superuser2 10y agoUChicago. Other than Intro to Systems, which is required, these classes are representative of a list from which you choose 8. There's also 3-quarter intro sequence (all programming) and the 3-quarter theory sequence (all proofs, some pseudocode). You could get away without taking some of these, but then you would do similarly substantial programming projects in other domains (compilers, machine learning, 3D modeling and rendering, visualization of scientific datasets, etc). Our department tends to be derided as "very theoretical", so I'm surprised to hear that we do more programming than others. To be fair, you could also load up ~6 of your 8 with proof-based math classes about CS theory (graph theory, combinatorics, mathematical logic I-II, whichever of complexity or formal languages you didn't count towards the required theory sequence, etc) but the people who do that are on tracks towards PhDs in math or the subset of math that is CS theory, not the programming job market. HN threads about CS education tend to posit that it shouldn't matter where you go to school because ~all CS programs are the same, so I assumed my experience would translate. Perhaps this is not so?
- aidenn0 10y agoAll CS programs are definitely not the same. I have seen threads positing that it doesn't matter where you go to school because its non-academic stuff that makes the biggest difference, but haven't seen much sentiment of "all CS programs are the same" I do think that the more selective schools graduate better people largely because the start with the better people, but don't think the school makes zero difference.
- brianwawok 10y agoSo I went to most of my undergrad at UIUC, which was at the time rated in the top 5 in the country for comp sci. I learned 1) Very crude Java (not enough to do anything else, just the bare bare basics). 2) Very crude C++ (just enough to mess up pointer referencing, not enough to code anything useful) 3) A tiny bit of LISP (mostly enough to make homework work, to this day I am still not good at LISP). 4) lots and lots of Math I have not used since college 5) Lots and lots of Physics I have not used since college 6) How to log into a SPARC box and use VI (I do use the VI portion, and the *nix skills, but not so much the SPARC stuff) 7) Nothing about source control, testing, html, css, databases 8) Nothing about security 9) Nothing about design patterns