Live data from Hacker News

Computer Science from the Bottom Up (2013)

bottomupcs.com

11–20 of 161 posts

Re: Computer Science from the Bottom Up (2013)

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

Great explanation: you just described the perfect 9-12 year education for the future software developers or even a "STEM track" for those so inclined.

Re: Computer Science from the Bottom Up (2013)

#12

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 also includes an understanding of low level implementation and backing hardware that makes computation possible so you may understand the limitations of the hardware and how to engineer within those constraints.

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. Knowing this tells you nothing about how implementable these algorithms are and thus a focus on only this algorithm and datastructure portion of computer science is useless without practical applications and an understand of how to go about implementing and discovering your own data structures and algorithms for real life tasks.

Re: Computer Science from the Bottom Up (2013)

#14
post #9
post #6

Earlier quoted context omitted.

If you want to try something out but get put off by some of the C frustrations like dealing with memory and working out how to deal with the standard library you should pick up a cheap copy (or download the free copy) of Structure and Interpretation of Computer Programs. It's a book that walks you through, program by program, all of the basic concepts of programming languages, computation, and programming in a clear…

I remember trying do do that years ago, and getting hung up as a newbie on there being a million different LISP implementations. I think I tried to use Racket, if I remember correctly, but whatever I picked didn't support some of the book's LISP statements out of the box. Any recommendations for a more friction-free experience?

Racket is much less approchable for people. I can't figure that mess out. Many people seem to find it difficult to endorse "get started and go" mentalities. The reason for N language implementations in Racket is that many LISP programmers are big fans of Domain Specific Languages (DSL) and this is also something that is taught in SICP.

Edition 2 of SICP was reimplemented in Common Lisp [0] (more specifically ANSI Common Lisp). Common Lisp is to Racket/Scheme/JavaScript/Clojure as C is to Rust/Java/Python/C++. It isn't the only way to implement a language and no one will say it's the "best" when compaired to My Favorite Implementation (TM) but everything draws from it and everything influenced it at the same time. It's the common ground that everyone can hold a leg on and knowing it will be your Rosetta Stone.

One common implementation is CLISP which is a GNU package.

To find out how everything works it is recommended that you attempt to read through the UNIX man page on the operation of this program. You will better understand how to interface with the program then. If you've used python then you will instantly recognize the idea of the REPL. [1]

If you have a software development background then [2] is probably all you need to get started. If not, as I have mentioned, you can check out SICP [3] as the book is online for no cost on an MIT website. Reading through this, maybe even one chapter per day, and doing the exercises as the book tells you to will give you a solid understanding of the concepts.

[0] - https://en.wikipedia.org/wiki/Common_Lisp

[1] - http://www.clisp.org/impnotes/clisp.html

[2] - https://en.wikipedia.org/wiki/Common_Lisp#Syntax

[3] - https://mitpress.mit.edu/sicp/full-text/book/book.html

Re: Computer Science from the Bottom Up (2013)

#15
post #9
post #6

Earlier quoted context omitted.

If you want to try something out but get put off by some of the C frustrations like dealing with memory and working out how to deal with the standard library you should pick up a cheap copy (or download the free copy) of Structure and Interpretation of Computer Programs. It's a book that walks you through, program by program, all of the basic concepts of programming languages, computation, and programming in a clear…

I remember trying do do that years ago, and getting hung up as a newbie on there being a million different LISP implementations. I think I tried to use Racket, if I remember correctly, but whatever I picked didn't support some of the book's LISP statements out of the box. Any recommendations for a more friction-free experience?

Racket has an SICP plugin that makes everything from the book work.

Re: Computer Science from the Bottom Up (2013)

#16
post #8

Based on the comments I see here (about how they wished to learn CS, or CS vs EE), I wish this book had a different title with more of an indication that this is a operating systems book (though not 100%). Computer Science is more than what is presented here. Big O Notation/Data Structures/Algorithms, ala Dr. Knuth Proof and theorems Computer architecture and design (NAND gates and the like) Language design, interpre…

I agree, and these are important CS topics. However, Big O made so much more sense to me after I've had a chance to understand basic machine execution and written a few non-trivial programs.

There's another aspect regarding when to introduce some of these topics - getting kids and new CS students interested and energized about what they are studying. I know the argument could be made that if these topics aren't of interest then don't do CS, but they must be introduced at the right time.

Re: Computer Science from the Bottom Up (2013)

#18
post #9

Earlier quoted context omitted.

I remember trying do do that years ago, and getting hung up as a newbie on there being a million different LISP implementations. I think I tried to use Racket, if I remember correctly, but whatever I picked didn't support some of the book's LISP statements out of the box. Any recommendations for a more friction-free experience?

Racket is much less approchable for people. I can't figure that mess out. Many people seem to find it difficult to endorse "get started and go" mentalities. The reason for N language implementations in Racket is that many LISP programmers are big fans of Domain Specific Languages (DSL) and this is also something that is taught in SICP. Edition 2 of SICP was reimplemented in Common Lisp [0] (more specifically ANSI Com…

CLISP is redistributed under the GPL, but isn't part of the GNU project.

GNU project's Common Lisp implementation is a project called GCL: GNU Common Lisp, a descendant of Kyoto Common Lisp.

Also, your analogy that Common Lisp to various Schemes and Clojure is like C to Java/Rust/Python is severely flawed in multiple ways.

Re: Computer Science from the Bottom Up (2013)

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

Great explanation: you just described the perfect 9-12 year education for the future software developers or even a "STEM track" for those so inclined.

I'm worried that it may just be my love for microcomputers, old mainframes, and just computers in general that is clouding my judgement but I think this would really improve the understanding of computational systems for anyone who was so inclined to participate in the course(s) required to teach this material. Much like the steriotipical sex-ed course where students are made to carry a baby I think college CS students should be made to "carry"* their example computer that they have worked so hare to maintain and program.

I feel that something like this would be rather easy to do, cost wise, as many fanatics (in an endering sense of the word) have constructed kits that replecate the functionality of these machiens. One such example is the PDP-8 kit. This would make it extremely affordable to build systems like these for may students to come. [0]

I'm not saying that this exact system should be used, I'm just a fan of DIGITAL and wish I could play with more of their gear (anyone in NJ with a PDP or other microcomputers my email is in my profile), but the stands.

   - It's cheap to make
   - They understand the "GOOD OLD DAYS" to better understand design choices made on old software they will be maintaining
   - Due to the tough constraints of these machines they will likely cut corners. Corners we all have cut before. They will see the pain of doing that in a safe enviroment where millions of dollars or lives aren't on the line (like in the real world).
   - They will know every portion of the computer inside and out.
   - They'll get to friggen build things! Make things work! Really Program! (We all know the feeling of getting shit done and how addictive that is)


* Not carry everywhere, just to class and home.

[0] - http://www.sparetimegizmos.com/Hardware/SBC6120-2.htm

Re: Computer Science from the Bottom Up (2013)

#20
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 revolutionized our view of what it means to compute.

Increasingly today the underlying architecture, for most intents, is becoming irrelevant (to first order of magnitude). The biggest gains are not made from superoptimizing compilers, but from algorithmic efficiency. That doesn't figure anywhere in your curriculum.

I think your curriculum would be great as an intro to computer architecture, or even as a series covering the topic, but I don't think it's an adequate introduction to computer science.

Post reply on HN