4 ms·
Having gone through all of these course myself, I'm wondering if this stuff is really relevant to today's workforce? Compiler Design? How to build an Operating
by ascotan 6y ago
Having gone through all of these course myself, I'm wondering if this stuff is really relevant to today's workforce? Compiler Design? How to build an Operating System?
I remember in a job writing my own BNF grammer and a a parser for it to optimize something or other and I got back basically "WTF" on the code review.
I would say database fundamentals is a must, so is networking. But honestly the rest is iffy. When was the last time you needed to build a red-black tree?
I think programming should be a larger part of CS. And no, not in Lisp. I also think ML needs to be more of a thing as well.
- kulig 6y agoCS is CS. Software engineering is a different thing.
- proto-n 6y agoI think ML should be included mostly just the fundamentals to understand what's happening, and to give an accurate radar to students for spotting bullshit.
- pieteradejong 6y agoLooks like the fundamentals of ML would be covered by the Math for CS section.
- deleted 6y ago[deleted]
- dreary_dugong 6y agoTo be fair, this isn't "teach yourself the skills necessary to be successful in a development job," it's "teach yourself computer science."
- pdxandi 6y agoI'm being sincere when I ask: what would you do with a self-taught CS background? I understand many of the larger companies require an understanding of CS principles, but, if not to be a successful developer, how useful is a self-taught CS education? What do you do with it if not software development? In my somewhat limited experience, the more CS-focused folks hold PhDs, and sometimes I feel it's more about the credentials than the education.
- lwb 6y agoIn my experience, CS is useful when software engineering breaks down. Many foundational abstractions in modern high level languages and frameworks are leaky. This leads to pathological behavior under stress (extreme scale, extreme performance, groundbreaking tech, unusual requirements). CS is also a big help when you're exploring new technical areas that frameworks haven't been developed for yet. You know that person who you always go to when your program malfunctions? Or the high level engineer at your company who also seems to know how to diagnose a site incident or other strange software problem? What about the technical founder who leads a startup to do something new and extraordinary? Or how about the person who wrote your framework/language of choice? These are people who understand CS fundamentals, irrespective of whether they have a formal CS degree.
- mcguire 6y agoKeep in mind that "successful software developer" is a fuzzy term. You can be a successful developer if you are gluing APIs together for an internal enterprise web app and making six figures per annum. You can also be an unsuccessful developer in those same circumstances, if your ambitions are different. The "CS focused people" that you typically hear about usually have Ph.D.s because you usually hear about (and from) people doing fancy new things. There are many other "CS focused people" out there just keeping the lights on, or rather keeping the backbone routers from being swamped under their own routing tables.
- nkingsy 6y agoNot coming from a CS background, I’m always looking for resources to grow. Was quite turned off by the “two kinds of people” assertion, broken down by understanding of CS. There are still holes in my understanding, surely, and I fill them in where I can so I can feel like a true Scotsman, but I’ve never had trouble dropping down abstraction levels when I need to, and even 10 levels down I’m still not close to logic gates etc. As far as I can tell the computer always tells you what’s wrong if you can follow the breadcrumbs.
- mcguire 6y agoWhile most programmers are web and mobile application developers, not all are. Yes, there are people out there doing systems programming, contributing to the Rust compiler, and all those things. Further, debugging a system is harder than writing the system and much, much harder if you do not have a suitable store of background information. Insert story about explaining to my aerospace engineer buddy why for i in 1..n: s += y for strings s and y was fine on one browser and very, very slow on another. When was the last time I wrote a red-black tree? Never. I've never had to write a red-black tree. If I need one right now, I'd have to go look it up. (But then, I'm charging $5 for hitting the pipe with a hammer and $95 for knowing where to hit the pipe with the hammer.) On the other hand, I had to build some damn data structure or other last week, and that is a very similar problem. Don't miss the forest for the trees. Should programming be a large part of CS? Yes, absolutely. Doing these things in practice is a big part of learning them, and that's why a person with an undergrad degree in CS is employable and a person with an undergrad degree in Archaeology isn't.
- prirun 6y agoI wouldn't trust myself to sit down and code a red-black tree. I'm guessing if you find a GH repo with a RB tree implementation, there will be more than a few closed issues because these kinds of things often have many edge cases. What is more important I think is to understand why a RB tree exists: what are its unique characteristics vs a binary tree, B-tree, AVL-tree, etc. Same thing with hash tables. If you have never coded a hash table implementation, it may be puzzling to discover there are many, many hash tables, each with pluses and minuses. The real skill is being able to understand the trade-offs and choose a hash table implementation that will work for your specific problem. And when it falls down for some specific data, load factor, etc., understand why.