Live data from Hacker News

Computer Science from the Bottom Up (2013)

bottomupcs.com

81–90 of 161 posts

Re: Computer Science from the Bottom Up (2013)

#81
post #5

I've been rattling this idea around in my head and, although it may sound crazy, I think C is a little high level to start an adult out on. I know many people won't agree with this but all of the people I admire in the world of CS and everyone who is a true scottsman for all intents and purposes loves dipping down to a lower level once and a while. I think the best way to learn about computer science it to program fo…

Computer science is not about computers; where does stuff like algorithms fit into this? What is a "true scottsman" of CS? Low level programmers? What about people that have pioneered the theory of computer science? The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutioni…

Advances in algorithms are a fundamental starting point, but I think it's a common mistake to conflate the efficiency of an algorithm in the abstract sense to how those benefits are manifested in the applied sense. While true, all things held equal a new algorithm will advance the field, providing "gains" as you said, but it's false to assume that algorithms are more important than understand computer architecture, full stop.

A simple example is dijkstra's algorithm vs bellman ford. Sure, in the abstract sense, the greed algorithm wins. However, it would be wrong to assume that dijkstra's algorithm is faster than bellman ford, because it's not. That's because dijkastra's algorithm doesn't parallelize as well, where as bellman ford parallelizes very well (and by "well" I mean it exploits the architecture - in a sense has "mechanical sympathy"). You end up creating very exotic data structures that are good for caching and stealing work from unused threads. There are many other examples, check out matrix matrix multiplication if your interested.

I'm not making the argument that one is more important than the other, but I think it's a bit reductive to say algorithm only matter because there are so many examples of where computer architecture matters more (and vice versa).

Another way to say what I mean is that ultimately reality matters.

> The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutionized our view of what it means to compute.

Um, why would you think that they don't understand the inner workings of computers? Is that just your intuition or is that based on some practical knowledge? I'm not saying I know the answer (I haven't quizzed them), but since we're guessing here I'm going to say that they probably know a lot about the inner workings of computer - and there's no harm in us mortals trying to do the same. They probably don't know like specific things about how intel's branch prediction works or anything like that, but as a general concept, the inner workings of computers is pretty fundamental stuff and is very helpful to know, along with algorithms.

Re: Computer Science from the Bottom Up (2013)

#82

Earlier quoted context omitted.

>"Many also don't even realize they have one built into their browser that is perfectly adequate for satisfying the desires to explore functional programming and general computation principles." Are you referring to Javascript being a LISP dialect here? I've heard this occasionally but I also though that the one predominant feature of LISP was that of homoiconicity which I don't believe applies to Javascript or is th…

JavaScript IS lisp with 1) a new syntax and 2) more things bolted on top that make it a non-LISP language. There are two things under the catagory of JavaScript. The Functional size and the Imperative side. It's the only language in the lisp family that allows you to write both, neither, or some combination in the same program. I say neither because other paradigms can be expressed from within JavaScript that will no…

> It's the only language in the lisp family that allows you to write both, neither, or some combination in the same program.

Where did you get that from?

Almost all Lisp dialects allow you to write functional and/or imperative code.

Re: Computer Science from the Bottom Up (2013)

#83

Earlier quoted context omitted.

Computer science is not about computers; where does stuff like algorithms fit into this? What is a "true scottsman" of CS? Low level programmers? What about people that have pioneered the theory of computer science? The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutioni…

Advances in algorithms are a fundamental starting point, but I think it's a common mistake to conflate the efficiency of an algorithm in the abstract sense to how those benefits are manifested in the applied sense. While true, all things held equal a new algorithm will advance the field, providing "gains" as you said, but it's false to assume that algorithms are more important than understand computer architecture, f…

>common mistake to conflate the efficiency of an algorithm in the abstract sense to how those benefits are manifested in the applied sense

> While true, all things held equal a new algorithm will advance the field, providing "gains" as you said

> but it's false to assume that algorithms are more important than understand computer architecture, full stop

I wish there were two like buttons. I have nothing to add that you haven't said better then I could have.

Re: Computer Science from the Bottom Up (2013)

#84
post #65

Earlier quoted context omitted.

Maybe I am too old, but from my vantage point, "Computer Science" and "Algorithmic Science" are really two entirely separate fields. Computer Science is exactly what the OP talks about: computers, CPUs, implementation details, hardware, plumbing, etc... One needs actual hardware on the table to work this out. Imperfect hardware, with latencies, clock issues, etc... THAT is true computer science, IMHO, and is very nea…

Science is the pursuit of truth, whereas engineering is the art of balancing resources and time to achieve a concrete goal (like a product). In that sense, Computer Science is the pursuit of observing, classifying, and predicting of computation phenomena, whereas Computer Engineering is the actual practical matter of building things that take advantage of computation phenomena.

Best distinction so far.

Re: Computer Science from the Bottom Up (2013)

#85

Earlier quoted context omitted.

I am curious do you have a different suggestion for a LISP implementation for working through SICP other than CLISP or would you agree this is a good choice?

SICP is squarely based in Scheme. One of the two authors of SICP is Gerald Sussman. Sussman, together with his then student, Guy Steele, invented Scheme.

Thanks.

Re: Computer Science from the Bottom Up (2013)

#86

Earlier quoted context omitted.

>"Many also don't even realize they have one built into their browser that is perfectly adequate for satisfying the desires to explore functional programming and general computation principles." Are you referring to Javascript being a LISP dialect here? I've heard this occasionally but I also though that the one predominant feature of LISP was that of homoiconicity which I don't believe applies to Javascript or is th…

JavaScript IS lisp with 1) a new syntax and 2) more things bolted on top that make it a non-LISP language. There are two things under the catagory of JavaScript. The Functional size and the Imperative side. It's the only language in the lisp family that allows you to write both, neither, or some combination in the same program. I say neither because other paradigms can be expressed from within JavaScript that will no…

I will give this talk a watch, thanks.

Re: Computer Science from the Bottom Up (2013)

#88
post #5

I've been rattling this idea around in my head and, although it may sound crazy, I think C is a little high level to start an adult out on. I know many people won't agree with this but all of the people I admire in the world of CS and everyone who is a true scottsman for all intents and purposes loves dipping down to a lower level once and a while. I think the best way to learn about computer science it to program fo…

Computer science is not about computers; where does stuff like algorithms fit into this? What is a "true scottsman" of CS? Low level programmers? What about people that have pioneered the theory of computer science? The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutioni…

> What about people that have pioneered the theory of computer science? The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.?

> I doubt these people know the inner workings of computers

...wha...? This is so ridiculous of a claim that I can't even think of how to respond...

Re: Computer Science from the Bottom Up (2013)

#89

Earlier quoted context omitted.

Computer science is not about computers; where does stuff like algorithms fit into this? What is a "true scottsman" of CS? Low level programmers? What about people that have pioneered the theory of computer science? The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutioni…

Advances in algorithms are a fundamental starting point, but I think it's a common mistake to conflate the efficiency of an algorithm in the abstract sense to how those benefits are manifested in the applied sense. While true, all things held equal a new algorithm will advance the field, providing "gains" as you said, but it's false to assume that algorithms are more important than understand computer architecture, f…

>> The likes of Karp, Valiant, Cook, Blum, Vazirani, Papdimitriou, Micali, Goldwasser, Goldreich, Shamir, Rivest and etc.? I doubt these people know the inner workings of computers, but they have revolutionized our view of what it means to compute.

>Um, why would you think that they don't understand the inner workings of computers?

Yes, great point. I know of at least one person who seems to straddle both those worlds - Jon Bentley:

https://en.wikipedia.org/wiki/Jon_Bentley_(computer_scientis...

He wrote Programming Pearls, More Programming Pearls, and Writing Efficient Programs. I own copies of either two or all three of those, and have read good amounts of the first two, and pretty close to the whole of the third (some years ago), which is out of print. A fantastic book (the first two are too).

And the point here is that in the Efficient programs book, he goes into a lot of detail on performance improvement at the lower levels too, not just at the level of algorithms, though he covers that some too. And he has also invented algorithms (e.g. the Bentley–Ottmann algorithm). So he is an example that one can do/be both high-level and low-level.

And of course, many more people do that, at a lower level of accomplishment (but still non-trivial), such as working with low-level languages (C, assembly) and doing perf tuning, as well as creating or improving algorithms and data structures for their work, high-level software design/architecture, etc.

Re: Computer Science from the Bottom Up (2013)

#90
post #74
post #5

I've been rattling this idea around in my head and, although it may sound crazy, I think C is a little high level to start an adult out on. I know many people won't agree with this but all of the people I admire in the world of CS and everyone who is a true scottsman for all intents and purposes loves dipping down to a lower level once and a while. I think the best way to learn about computer science it to program fo…

That may be the ideal way to learn CS, but the problem IMO is that lots of people are going to lose interest immediately. When you start with a web app or a game they can immediately feel like they are developing a practical skill.

It's not only that, but doing something like writing your own assembler probably isn't going to be terribly relevant to someone creating a web app or making a game in Unity - particularly so 5, 10, or 20 years later. Heck, I'm not even sure that working on an assembler is going to be terribly useful to most people who will be writing in assembly.

Students who aren't interested in a particular requirement will complete it and then soon forget most of the things they learned. Heck, even students interested in it will probably forget most of it if they're not using it for a particular task. If they're not, you're probably better off with a quick survey course which gives them the basic understanding they need.

From my experience, the biggest problem with "CS" education (which tends to be a catch all for most software related computer studies) is the lack of focus. Students get a little bit of experience making a toy in language A, then they get a little experience making a toy in language B, then they get a little dusting of algorithmic theory, etc.

My suggestion would be to try to get them quickly up and running on projects they're interested, to the point where they feel self-sufficient. Then teach them what they need to make their project better. They're going to both retain a lot more and come out of it being able to do a lot more. Trying to make every CS student a jack of all trades ends up being a colossal waste of their time and money.

Post reply on HN