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.
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.
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.
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.
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.
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.