Live data from Hacker News

Computer Science from the Bottom Up (2013)

bottomupcs.com

51–60 of 161 posts

Re: Computer Science from the Bottom Up (2013)

#51

Earlier quoted context omitted.

I remember trying to learn a garbage-collected language with curly braced blocks, functions and infix operators years ago, but was hung up on there being a million implementations. I think I tried to use Java, but was hung up on the book's C# statements that weren't supported out of the box. Any recommendations for a more-friction free experience? How about this recommendation: use the exact same language that your b…

I don't think this is a fair comparison to what the GP is saying. You can pick up pretty much any book on programming for the C-style and more then 90% of the information will transfer over. Classes may be omitted in some, reqired in others. The same may apply to types. But after they see a compiler warning you're likely to google it and figure out what's wrong very easily. On the other hand most people, who are quit…

>"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 that not correct? Thanks.

Re: Computer Science from the Bottom Up (2013)

#52

Earlier quoted context omitted.

Nobody is talking about "infinite time" algorithms; complexity theory concerns itself with what is efficiently computable . This might not directly correspond to "real-world" efficiency, because an algorithm, while polynomial-time, but have poor constants or a huge polynomial. However, this does not mean complexity theory is useless; it still informs us of what computers can and cannot efficiently do. It marks the li…

> Complexity theory also does not concern itself with uncomputable algorithms, so that point is irrelevant. I do not think this is a correct statement from what I've seen. > As you say, starting off students with abstract theory doesn't help, because they're unlikely to use it and so it won't stick. However, the same argument goes for your "bottom-up" approach; most students of computer science will not ever have to…

But is the point of your course computer science, or computer engineering. I don't think I'm particularly special, but I have taken just the one computer architecture course as an undergrad (and I don't remember much if any of what I learnt), and now I just completed the first sem of my PhD in computer science. I haven't used the information I learnt in that class yet, even though I'm in a partially applied field (security and cryptography).

All I'm pushing back is on the idea that learning the intricacies of modern computing is necessary for being good at computer science.

EDIT: And wrt complexity theory and computability: there is a subfield of mathematics called computability theory that concerns itself with various notions of what is and isn't computable. Complexity theory concerns itself instead with what is efficiently computable; the problems it considers are already computable.

Re: Computer Science from the Bottom Up (2013)

#53

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…

Theory is useless without implementation and implementation is nothing without an understanding of theory. Implementation and theory are in lockstep but by learning theory you will not necessarily know how to implement, or even really understand, the topics you have memorized. On the other hand it is necessitated by the concept of implementation that you on one hand understand the tools you are using to solve this pr…

Do you have a blog? You have some interesting ideas that would be good to explore in a longer form.

Re: Computer Science from the Bottom Up (2013)

#54

Earlier quoted context omitted.

I agree, the book isn't very "bottom-up" at all, perhaps with the exception of "Binary and Number Representation" being the second chapter; the rest of it looks like OS stuff. This is what I'd consider "bottom up": https://www.amazon.com/Code-Language-Computer-Hardware-Softw...

My choice for bottom-up book: The Elements of Computing Systems: Building a Modern Computer from First Principles https://www.amazon.com/Elements-Computing-Systems-Building-P...

This is also known as the "nand2tetris" course: http://www.nand2tetris.org/

Great book!

Re: Computer Science from the Bottom Up (2013)

#55
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…

What is the point in copying hex values?

Re: Computer Science from the Bottom Up (2013)

#56

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…

Theory is useless without implementation and implementation is nothing without an understanding of theory. Implementation and theory are in lockstep but by learning theory you will not necessarily know how to implement, or even really understand, the topics you have memorized. On the other hand it is necessitated by the concept of implementation that you on one hand understand the tools you are using to solve this pr…

> Theory is useless without implementation and implementation is nothing without an understanding of theory.

I feel that you greatly misunderstand why theory is important. It is not just something to be memorized to aid in implementation. It is useful and interesting in its own rite. CS Theory is Mathematics and like mathematics can be pursued simply with the goal of better understanding.

An understanding of Turing Machines and computability is a good example for this. Generally knowing that there exist uncomputable functions is of little practical use as you are exceeding unlikely to encounter one in implementation. Similarly understanding turing machines well is not useful as they compute in a very different way compared to current computers. However, from a purely theoretical standpoint it is critical to know that there exist uncomputable functions.

> You can sit a person in front of a whiteboard all you want. Brainwash them about arrays, maps, matricies, trees and graphs and they have a high likely hood of coming out knowing nothing but verbatum what you have told them

The same could be said for teaching implementation. Thoughtless memorization is rarely useful in any field. You can instead have them discover the theory like they would discover an understanding of implementation you advise.

Much of the theory of CS is not particularly hard to work out yourself if you are given the right hints. For example, an approach to teaching sorting algorithms could start by asking students to devise an algorithm to sort a list, and then have them compare algorithms and devise a way to evaluate which ones are the best and in which ways. Then after their progress slows introduce ideas like big O to help them further develop their ideas. The sorts taught in introductory algorithms classes are not very hard to understand (or design), and with the idea of big O in hand the introductory analysis in within reach of the student.

However, I agree that teaching programming in general from learning the rules to interact with tyeh computer and building up abstraction is often the right path for many students. Personally, it was not a great start for me (I started with C; not exactly the lowest level, but lower than most CS courses nowadays). I would have preferred to learn more theory earlier in my learning, and that is not easy to do when you are focused only on the code and not on the ideas behind the code that are universal.

Re: Computer Science from the Bottom Up (2013)

#57
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…

You need both.

Re: Computer Science from the Bottom Up (2013)

#58

But this isn't a comp sci book really since it doesn't actually cover any comp sci topics such as the analysis of computer programs, algorithms and data structures.

That's one portion of computer science. Computer science encompases, in my mind, the study, operation, maintnence, and information that is required to perform computing tasks of the modern era. It's no use to know about algorithms and complexity if you only know how to sort punch cards as that isn't a modern day computing task. A computer sceince background inherently implies software development background. This als…

> A computer sceince background inherently implies software development background.

> An algorithm that takes infinite time for 1 instruction is O(1) and still constant time.

> An algorithm that takes infinite memory for every run is still a constant memory complexity.

None of these are true.

Re: Computer Science from the Bottom Up (2013)

#60

Earlier quoted context omitted.

> Increasingly today the underlying architecture, for most intents, is becoming irrelevant ... amidst cries from a handful of lunatics who insist we shouldn't be using linked lists any more because they don't use the L1 cache very well compared to arrays.

Errrr, how is this lunacy? Seems like something everyone should be aware of.

[deleted]
Post reply on HN