Hacker News new | comments | show | ask | jobs | submit login
Books of a Highly Effective Programmer (2009) (fogus.me)
171 points by krat0sprakhar 1697 days ago | hide | past | web | 35 comments | favorite

I think this should be:

7 books of a highly academic programmer.

A highly effective programmer probably should be reading other topics as to be honest, most of programming is laborious non comp Sci stuff.

Even laborious non-CS stuff can be improved by basic knowledge from his listed topics. For example, functional programming may have a slightly academic vibe, but it's also great for boring things--you still get all the benefits like simplicity, safety and conciseness, which makes your boring program easier to write and more maintainable.

Another great topic is language development. This one probably sounds even more academic than functional programming! But this is not the case. In virtually every space, even the boring ones, you can make your code simpler and more maintainable by factoring it into a DSL. And this is exactly the skill you gain by looking at language design in general.

More generally, boring stuff is actually a great place to experiment with new techniques. Having a core problem that isn't terribly difficult can actually be an advantage: the problem itself does not distract you from trying new techniques. For example, if all you're doing is writing a bunch of GUI forms, you could consider trying FRP; it can make your code shorter and more maintainable and you almost definitely won't run into any of the current problems with FRP because all you're doing are simple forms.

Of course, if you're working on something boring and yet still interested enough in improving that you're willing to read a bunch of essays and books, you should really consider getting a more interesting job. And right now is the best time for it--the job market is crazy, so you have a decent chance of landing work that is both more interesting and better-paid.

And if you're content as is and not yearning for self-improvement--which is completely reasonable: not everybody can or should prioritize programming very highly--then you're probably not going to follow this blog's advice even with different books.

Notably missing: any topic covering networked applications, servers, or version control.

Definitely true. The original goal was to have such topics mixed throughout, but a strong case can be made for devoting an "edition" to these topics alone. It's something for me to think about for sure.

"A Note On Distributed Computing", Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall.

That would indeed be on my list of networking papers.

And what books would you recommend instead?

None at all. Id recommend reading other people's code and thinking about it for a while.

Just out of curiosity: if you (or anyone else!) had to make a "must read code" list, what would be on it?

Gcc,gnome,openoffice - how not to do something.

FreeBSD,llvm,trac,vim - how to use sound engineering.

Anything written by Peter Norvig or D Richard Hipp.

Reading code is a great exercise and I've nursed a half-baked post on the topic for years now. However, I'm not sure that code reading is all that's needed.

What is considered good code to read?

If I knew the answer (of at least thought I did) then I could probably finish that post. ;-)

Before I interviewed at Google, I read the book "Effective Java" Never before have I read something and had an epiphany that not only is someone else is way, way smarter than me, but the advice incredibly powerful and useable. I regularly consult that book, even for non Java stuff.

Code Complete 2

Seven Languages in Seven Weeks

The Art of Unix Programming

Clean Code

Hi, could anyone help me with understanding why the lambda papers deserve a whole book? What I understand from the history is that they are a set of papers that define and explain the Scheme programming language.

If so, shouldn't the book be broader by including more of literature on LISP or even AI programming in general?

Although the lambda papers talk about Scheme, that's not what they're really about. They're really about... lambda. The takeaway is that many common features of languages can be thought of as disguised uses of the lambda operator. So lambda is actually the unifying abstraction behind many languages, even if they don't know it.

The original 'Lambda the Ultimate X' papers are very short, so no reason not to give them a try.

Scheme is just the language used to give concrete examples for a set of papers about Lambda.

Guy Steele is one of the greatest communicators in computer science. Brilliant and charming.

Check out as much of his stuff as you can, like Growing a Language (on YouTube and in print).

If the first link under Core to the 10 papers is not up for you: http://web.archive.org/web/20100819054526/http://blog.object...

If I'm going to diverge from read code, write code long enough to do this much reading... I'd rather start with the papers and books recommended for the phd qualifying exam at the top 10 universities.

Links to any of those recommended reading lists?

The closest I see to such a list is: http://www.eecs.berkeley.edu/GradAffairs/CS/Prelims/

stanford's is pretty sparse http://www-cs.stanford.edu/content/qualifying-exams

http://www.cs.purdue.edu/academic_programs/graduate/curricul... Purdue's is a little more interesting but still will have to dig into the courses

that's like 10 years ago for me, it used to be easier to find lists of papers on this : ]

Why? Looking for a PhD?

the qualifying exam is supposed to represent up-to-date, overall understanding of the field as a whole, note that I deliberately made the distinction about time away from reading/writing code...

1. Couldn't he have linked to some of this stuff?

2. Some of this stuff is absurdly broad and weirdly pandering.

3. "I have no idea what the copyright implications of this are, so I will be printing out only my own private copy and not making them available publically;" is a totally inadmissible position for a professional programmer to have. The answer is, no, of course you can't make a printed compilation of other people's work and put it up for sale.

> 1. Couldn't he have linked to some of this stuff?

Probably, but as far as I can tell it's all a Google search away.

> 2. ... weirdly pandering.

Pandering to whom?

> 3. ... is a totally inadmissible position

This one has me flummoxed. Should I, as a professional programmer, have a complete working knowledge of copyright law? As it turns out, I do not, so I erred on the side of safety and never offered any of the articles up for sale. Or did you miss that minor fact?

Give the guy a break, I guess its okay to not know about the copyright implications of sharing someone else's work. As it is, he never mentioned that he intends to put the complication up for sale.

He didn't put them up for sale. And most of those papers are old, and some are freely licensed.

And they're all comp sci books. Someone has a very narrow view of what it means to be a programmer.

I would be interested to know how you would change the list to facilitate a broader view.

Here's a couple to give an idea of where I'm going. The main thing I would add to the OP's list are books on the squishier topics of emotional intelligence and working as a team.

A book on communicating designs (this helped me a ton even though I only use it where necessary which isn't too often) http://www.amazon.com/Applying-UML-Patterns-Introduction-Obj...

Also this was transformative for how I approach leadership: http://sivers.org/ff

Also the Lean Start Up was big in spite of the hype just for articulating how thinking strategically about what you're building and for who can lead you to success.

Hopefully that paints a picture of how I think this list could be better balanced.

Thank you for the reply. I think some (most?) of the issues that you raise could fall into the purview of book #6 "Software Development Management" -- although what you mention would require a better word on my part than "Management".

yoness! moti nice post. :D

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact