Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Her recommendations are poor. You dont read books on software development methodologies when "learning to program". Nor would you learn type theory. That's like suggesting to someone who wants to learn to sail, the intricacies of weaving cloth fibers into a sail.

There's a huge tower of abstractions to deal with in learning any new discipline, and it's important to enter at an appropriate level, ie, one that engages the learner to continue because the relationship to the end goal is clear (to the learner).

I would suggest CLRS to someone mathematically mature for the best introduction to algorithms. I don't have a book suggestion for learning to program in some language, but I do consider this a far less difficult and important obstacle compared to learning to think algorithmically.

When the interest is piqued people will naturally dig deeper and eventually find out for themselves, other aspects in the tower, be it silicon doping or reinforcement learning.



> You dont read books on software development methodologies when "learning to program".

In the article she already states that anyone can learn to program -- by programming. The title of the article is "The best books on Computer Science and Programming", not "The best books to learn to Program".

    Interviewer: And then, after this introductory book
    on programming, if a reader finds they really are
    interested and want to learn programming, this would
    be a good point to choose a language. Is that right?
    
    Ana Bell: Yes, the first book tells you
    about the hardware. Then if you want to learn how to
    program, you’ll need to learn a programming language. 
    To do this, you don’t have to use a book, there are
    many tutorials online.
Honestly I think you missed the fact that the books are about going further.

Petzold's Code teaches you to look at what your instructions are doing on the machine. It teaches you a little about architecture -- and probably all most people will need to know about computer architecture, and let's face it -- the rest can be gleaned from the thousands of blog posts people have done about X unix feature, or measuring performance of Y, or otherwise from reading the code.

Code Complete and Clean Code teach you how to deal with other people's code, and how to structure your own code in clean ways. This is not something that most people will pick up on their own at the time when they actually need it, it seems to be something mostly learned from trial and error. Important skills for contributing to an open source projects, etc.

Types and Programming Languages teaches you more about how languages and Correctness work on a lower, general level. And Algorithms is about looking at the specific structures of the code you write, and learning to optimize them and design new ones efficiently.

As she says:

    It’s not a book for beginners, but it’s a good book
    if you’re interested in the theory behind programming
    languages. In the first book you’ve learned about the
    hardware, and in the next books you’ve learned about
    good code, and then algorithms. Now you can learn about
    programming languages themselves: how to write one,
    and how they do what they’re supposed to do.
Honestly the only one I'd really swap out is Algorithms. I'd replace it with The Algorithm Design Manual by Skiena.


"Ana Bell, lecturer in the Electrical Engineering and Computer Science Department at the Massachusetts Institute of Technology, chooses the best books to learn computer science and programming."


Headlines, including subheads, often suck. Yes, when you read the content, her actual discussion isn't exactly what the subhead suggests. That is a good reason for criticizing the subhead you quote. It's not a good reason for criticizing her recommendations, though.


Does Code Complete and it's sibling not teach the aspects of programming involved in maintenance and cleanliness? Is that not a major aspect of programming? Just because none of the books teach you at-a-basic-level "This is a function" doesn't mean that they have nothing whatsoever to do with programming. Most of the difficulty with programming is structuring code correctly such that it is within the human grasp of complexity, while ensuring that it also does the job, and is maintainable.


Is computer science not a part of programming? What exactly is your rebuttal here?


I think its the other way around. Wouldn’t programming get classified as engineering, hence the name Computer Science and Engineering?


Maybe? I think the intent was similar to applied mathematics compared to mathematics.

In that computer science is ultimately behind computer programming, but most people don't care about the theory and only use applied theories in day to day work.

But I'm stretching a bit as I can't read minds over the internet yet.


I used CLRS at my university, but I've since found Algorithms by Dasgupta, Papadimitriou, and Vazirani far better. It's a much smaller book for one, so more people will actually read it, and while it is mathematically rigorous, the proofs and explanations are well motivated so you actually understand how the algorithm works and how someone could have come up with it in the first place.

I agree though that her recommendations are poor. I feel that way about most of these five books recommendations. It's seems that people usually pick their books to be controversial or to show off how clever they are, rather than to actually help someone understand their field. I've read half of that type theory book for example, and it is utterly impractical for any practicing programmer. You would only find it interesting if you're interested in implementing functional programming languages, and even then it's quite theory heavy and not very practical.


I read the first two chapters of Algorithm Design by Jon Kleinberg and Éva Tardos. The prose is very clear and lucid, but it has one problem: it's incredibly long-winded. A good editor could probably lop off a good 1/4 of the book without loss of info. That would make the book spectacular.

Also, if anyone is interested, these lecture notes [0] (Algorithmic Math by Soicher & Vivaldi) below introduces algos from elementary number theory/abstract algebra.

[0] http://www.maths.qmul.ac.uk/~lsoicher/ambook.pdf


It does say Computer Science and programming. So you might not read those books while learning to program, you (arguably) would while learning computer science.


Yes, while the books she described are good, the overall package as 5 books to learn CS is odd.


> Her recommendations are poor.

I disagree.

> You dont read books on software development methodologies when "learning to program".

Most people usually don't, perhaps (though my first college class in programming had The Mythical Man-Month as a required text, which is 100% methodological and 0% coding, and this was at a major engineering school) but especially given her discussion of the role of books vs. web resources in the current context, I don't think it's inappropriate. I personally would go to HtDP, which covered computational thinking, coding, and what I view as the right amount of methodology, and not Clean Code and Code Complete, but I don't see her recommendation of these as wrong or poor. Of course, HtDP is also a freely available web resource.

> Nor would you learn type theory.

Once you relegated the basic mechanical issued to web resources, the way she discussed, I think algorithms and data structures and type theory are probably the accessible-early deep-dive topics most useful, and the places where autodidacts focusing on obvious tutorial contents are most likely to miss out.

I also think it's clear that her presentation is of five, basically progressive, key milestone works as you progress, not five things to do all as a rsbk beginner.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: