Live data from Hacker News

Ask HN: Computer science for the self taught programmer

news.ycombinator.com

21–30 of 41 posts

Re: Ask HN: Computer science for the self taught programmer

#21

A list for a programmer and a list for a computer scientist would look quite different.

This is not a helpful comment. Additionally I do not agree - while there is a difference between academically focused individuals and industry focused individuals they absolutely should not be mutually exclusive. That's a social generalization in our industry everyone should be working to dismantle.

I'm an industry programmer and pursued a lot of Comp Sci self-study in order to become a "better programmer", an "effective programmer", and most importantly "better able to reason about my programs".

Being versed in both is important so the reading list, IMHO, should be mixed!

Re: Ask HN: Computer science for the self taught programmer

#22
post #7

I've found The Little Schemer[1] to be very approachable and effective for grokking common CS concepts. [1]: http://www.amazon.com/The-Little-Schemer-4th-Edition/dp/0262...

TLS series is wonderful - HTDP is great too, it assumes the student doesn't have programming experience which means they start out with simple stuff (and use Scheme for the implementation language!).

Re: Ask HN: Computer science for the self taught programmer

#23

Computer Science is not just algorithms. Generally speaking, Comp Sci consists of: Algorithms/Data Structures Computational Complexity Discrete Math Programming Languages (both application and the concepts behind them) System Architecture Networks Compilers Operating Systems Databases Parallel Programming Artificial Intelligence Graphics As for what to learn, here is THE BEST link: http://matt.might.net/articles/what…

Last time I checked with a university, they dropped half of the hardcore stuff, and teach more Java/Python. YMMV.

Which university? I can tell you that's not true of my university (Northwestern) and most of the peer institutions.

To a certain extent I agree with Joel Spolsky's old article on Java schools[1]. The one gripe I would have to make is that I believe that there are many useful tasks which are hard more than for the sake of being hard. My compiler's course was quite difficult but at the same time very informative. One thing we didn't do is write a parser. When I asked my professor (now advisor) why not, he responded that writing a parser is more of a character-building exercise. I tend to agree. While very tricky, I find that in the context of university classes so much time is spent writing a parser that more interesting topics in compilers are completely omitted. There's always benefit in deeper understanding, but one must try to identify the richest areas for learning.

[1] http://www.joelonsoftware.com/articles/ThePerilsofJavaSchool...

Re: Ask HN: Computer science for the self taught programmer

#25

What is it that you wish to learn? If you're a self-taught programmer who wants to learn (to use an extreme example) bricklaying, then you won't have much use for the standard undergrad CS reading list. Similarly, if you want to be a better programmer, the list will be different to that of the standard undergrad CS reading list. Can you tell us what your goal here is? Do you actually want to do CS, or do you want to…

> do you want to fill in some of the theoretical gaps that might be useful to you as a coder, or do you actually not care so much about the theory and just want to be a better programmer

Definitely yes, and yes. I suppose I want to see a few examples of writing better code, see how and why things break when they scale, understand useful principles that I just "worked around" before (ie recursive functions), and then also some primers on other subjects - so for example I studied poli sci, but they made me take anthropology, geography, economics and some other related but not completely aligned fields. What are some examples to complement web dev?

Re: Ask HN: Computer science for the self taught programmer

#26

Earlier quoted context omitted.

A sample size of 1 is not representative. If the university is more interested in teaching "programming," then that's fine, but if you want a solid grasp of computer science , then most of those subjects are still necessary.

I do. Thank you for the link. It doesn't really matter what universities do or don't teach. If a subject is of interest you should learn it. I thought everything you and the linked article listed made sense.

Yeah... so one thing I love about being self taught was that I've learned because I wanted to do a project, and I learned the most simple tools to accomplish those projects. I'm sure I missed some stuff beacuse I was never forced to do it in a class. I think what would be most helpful is - what are the topics that made you most well rounded, that you would be a crappier coder without, that you took during a CS degree. Also, what are some important theoretical things that paradigm shifted your brain cells for the benefit of every following line of code.

Re: Ask HN: Computer science for the self taught programmer

#27
I'm not clear if you are looking for books, links, or topics. If you are looking for topics or books, I'd suggest starting by taking a look at the syllabi from degree programs that you respect. You may want to pay particular attention to the courses that have the word "Theory" and "Computation" in them.

You are going to find topics like:

  * Regular Languages/Expressions
  * Automata
  * Nonregular Languages
  * Context Free Languages
  * Turing Machines
  * Decidable vs. Undecidable Problems
  * Halting Problem
You can probably get a long ways just doing some searches for those topics.

I written about some of these topics in an article last year that might give you a very small introduction to finite state machines: http://blog.markwshead.com/869/state-machines-computer-scien...

Re: Ask HN: Computer science for the self taught programmer

#28
post #9

I'll start out with the classic: "Introduction to Algorithms" a.k.a. "CLRS" http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme... I think this is all (and probably more than) you really "need" if you want to know CS for programming, and an enjoyable read too.

I would strongly urge the OP to not use this book. I used it as my undergrad algorithms book and it is, quite frankly, far too obtuse and hard to understand. At first, I thought it was just me and that other people found the book readable. I eventually realized that the book itself is just bad for autodidacts. Last month (about 5 years after I took the course), I went through to review some stuff that I'd looked at m…

As far as The Algorithm Design Manual and CLRS is concerned I would not say that they are comparable.

CLRS is about algorithm analysis and formally proving that they behave in certain ways - like proving that quicksort has a guaranteed worst case of O(n^2) and an average case of O(n log n). Being able to work with proofs such as those is fairly fundamental to being a Computer Scientist in the strict, academic, sense. That being said, it should not be used as book to teach data structures or algorithms without formal proofs having been taught first - without the maths background the book is going to be very hard going.

The Algorithm Design Manual on the other hand, is more like a literature review for a collection of algorithms/families of algorithms (75, claims the copy infront of me). For each of them it gives an overview of the class of problems you'd apply the algorithm to, a run through of the algorithm (some with pseudo code) and discussion about the algorithm and times when the author has used it, and then pointers to more in depth sources. CRLS and Knuth are cited considerably, which should give you an idea about the relative stature of the two books being compared here.

Ultimately, they're both good books but for different audiences. The Algorithm Design Manual is by far the easier read, not least of which because it's not trying to be an academic text and is replete with anecdotes from the author. It's an excellent overview of the techniques available to the practicing developer - the ones who work in fields where you might need to whip up a quick Bin Packing routine anyway. CLRS is a lot harder to get through, but it will teach you how to prove that your algorithms will do what they should.

When it comes down to it, I'd say that CLRS is for the Computer Scientist while TADM is for the practitioner and I'm glad I own both.

Re: Ask HN: Computer science for the self taught programmer

#29
post #7

I've found The Little Schemer[1] to be very approachable and effective for grokking common CS concepts. [1]: http://www.amazon.com/The-Little-Schemer-4th-Edition/dp/0262...

Ummm. I read this after SICP. While I found it to be an easy way to pick up a lot of "gotchas," I definitely wouldn't give this to someone as an intro to CS or programming. It's a good book though.

Re: Ask HN: Computer science for the self taught programmer

#30

Computer Science is not just algorithms. Generally speaking, Comp Sci consists of: Algorithms/Data Structures Computational Complexity Discrete Math Programming Languages (both application and the concepts behind them) System Architecture Networks Compilers Operating Systems Databases Parallel Programming Artificial Intelligence Graphics As for what to learn, here is THE BEST link: http://matt.might.net/articles/what…

I was going to come in here announcing some random algorithm book, but you know, you're right. When I'm writing code for speed, I have to start thinking about how the data is laid out in memory (even in languages that abstract much of this away from you, like Java); and I start thinking about how long different operations take in their assembly form. These are both pretty important things to know, especially as you get close to the metal in languages like C. Discrete Math is useful, too; as is at least a basic understanding of networking and compilers; and, nowadays, knowing how to work with ~at least~ SQL databases is greatly beneficial. Most of that whole list is useful :)
Post reply on HN