Found in 21 comments on Hacker News
busbus · 2021-10-18 · Original thread
I can’t tell you what is that website, but the concept of broken window reminds me a book that talked about it:

(No affiliation)

Adding to projects without authorization, is extremely popular all around, if the commit/pr is useful. My boss sees it as taking initiative, helping others, and broadening my skill set. Other teams see it as getting free work.

Even when my contributions suck people think of it as a positive and often teach me the right to do the code or explain why the change is not necessary.

As far as books go I don't have anything to recommend. For me improving fundamentals was really about figuring out what I didn't understand and diving in to learn it. I prefer online materials over books but one book I have read that I thought was great is 'the pragmattic programmer'.

fdsvnsmvas · 2018-09-10 · Original thread
Thanks everyone, the comments are much appreciated. Here's a list of books and other media resources recommended so far in the thread:

Robert C. Martin, Clean code:

Vaughn Vernon, various:

Steve McConnell, Code Complete: 2

Clean coder: videos

Hunt and Thomas, The Pragmatic Programmer:

Hitchhiker's Guide to Python:

Dustin Boswell The Art of Readable Code:

John Ousterhout, A Philosophy of Software Design: This one looks particularly interesting, thanks AlexCoventry!

Kent Beck, Test Driven Development:

Dan Bader, Python Tricks: The Book:

Ian Sommerville, Software Engineering:

Svilen Dobrev, various:

antjanus · 2018-07-27 · Original thread
I usually recommend a few different books:

Clean Code: A Handbook of Agile Software Craftsmanship

This book really helped me focus on code organization and seeing maintainable code as an overall goal whilst building long-term applications. I'd say that one of the reasons why the work I've done 3-4 years ago can still be used, expanded, and maintained today is because of this book. Short functions, code organization, and naming conventions all stuck with me.

I'd say that unlike other programming books, this one focuses on the "art" and "organization" rather than syntax and other aspects of programming.

The Pragmatic Programmer: From Journeyman to Master

This book tackled real-world application building and practices. I'm still reading it. I liked how it tackled not only some basics of programming (resource management practices) but also project management to a certain extent. Eg. how to use prototypes, how to use "trace bullet" programs, etc.

Game Programming Patterns

I think one of my favorites has been "Game Programming Patterns" which is free online or you can get an ebook/print version

The book introduces several basic design patterns, it explains WHY they're used, how to implement them, etc. in the best way I've read so far. No CS book or online article has been able to explain these patterns as this book did.

And I'm not even a game developer.

Also, check out this post on -- it has some good answers! :)

arthurjj · 2018-03-27 · Original thread
The first edition suffers from being a victim of its own success. Much of it has become common wisdom and many of the refactoring techniques now have IDE support.

"Working Effectively with Legacy Code"^1 is usually what I recommend instead. It felt like a more up to date approach

More generally "The Pragmatic Programmer"^2 is a classic for a reason. But from you're comment you've probably already read it.

1. 2.


hwtan · 2017-10-18 · Original thread
The Pragmatic Programmer: From Journeyman to Master

This book seems to be a classic for programmers.

W0lf · 2017-06-05 · Original thread
I've gathered all the book titles in this thread and created Amazon affiliate links (if you don't mind. Otherwise you still have all the titles together :-) )

A Pattern Language, Alexander and Ishikawa and Silverstein

Advanced Programming in the Unix Environment , Stevens

Algorithmics: the Spirit of Computing, Harel

Applied Crytography, Wiley

Clean Code, Martin

Clean Coder, Martin

Code Complete, McConnel

Code: The Hidden Language of Computer Hardware and Software, Petzold

Coders at Work, Seibel

Compilers: Principles, Techniques, & Tools, Aho

Computer Systems: A Programmer's Perspective, O'Hallaron and Bryant

Data Flow Analysis: Theory and Practice, Khedker

Dependency Injection in .NET, Seemann

Domain Driven Design, Evans

Fundamentals of Wireless Communication, Tse and Viswanath

Genetic Programming: An Intrduction, Banzhaf

Head First Design Patterns, O'Reilly

Implementing Domain-Driven Design, Vernon

Intrduction to Algorithms, CLRS

Introduction to General Systems Thinking, Weinberg

Joy of Clojure, Fogus and Houser

Let over Lambda, Hoyte

Operating Systems: Design and Implementation, Tanenbaum

Parsing Techniques, Grune and Jacobs

Peopleware: Productive Projects and Teams, DeMarco and Lister

Programming Pearls, Bentley

Software Process Design: Out of the Tar Pit, McGraw-Hill

Software Runaways, Glass

Sorting and Searching, Knuth

Structure and Interpretation of Computer Programs, Abelson and Sussman

The Art of Unit Testing, Manning

The Art of Unix Programming, ESR

The Design of Design: Essays from a Computer Scientist, Brooks

The Effective Engineer, Lau

The Elements of Style, Strunk and White

The Healthy Programmer, Kutner

The Linux Programming Interface, Kerrisk

The Mythical Man-Month, Brooks

The Practice of Programming, Kernighan and Pike

The Pragmatic Programmer, Hunt and Thomas

The Psychology of Computer Programming, Weinberg

Transaction Processing: Concepts and Techniques, Gray and Reuter

Types and Programming Languages, Pierce

Understanding MySQL Internals, Pachev

Working Effectively with Legacy Code, Feathers

Zen of graphics programming, Abrash

goo · 2016-11-04 · Original thread
Here is some insight that has helped me, some my own advice, some paraphrased from other sources, and I credit the source when I have it in my notes:

- There is no "silver bullet" for managing the complexity of user needs. Instead, (good) software is characterized by not a static state of "solving the problem", but a continuous refinement-- an existential struggle against incidental complexity.

- Have a very positive mindset, and inspire the same in your team.

- highly reliable websites for small companies:

- Learn your debugging tools well: Get good at Chrome Debugging tools, pdb, visual studios debugger, or whatever the debugging environment is for your project.

- “… never consider your education complete or your opinion above questioning regardless of your title, your years of experience, your awards and accomplishments, or anything else that isn’t rational argumentation or evidence. Retaining a healthy degree of humility, constantly striving for improvement, and valuing objective metrics above subjective considerations will go a long way ..." (

- This is a marathon, not a sprint.

- Practical engineering advice:

- Read books. I can especially recommend Refactoring by Martin Fowler and The Pragmatic Programmer as a more introductory text (affiliate links: and Understanding why and how to do scrum effectively is really important too -- I waited too long to read a book that laid that out for me (

- Good programming advice from Kent Beck:

- Eventually, you will have to choose between engineering management and continuing to be close to technology. Trying to do both is a recipe for burnout. Some people might be able to do both simultaneously without trouble, but you're probably not one of them.

- Always be looking for ways to remove yourself as a bottleneck. This needs to be done both on a technical level and on an organizational level.

- Push back as necessary against demands of your time and energy that are not in harmony with your needs as a technologist.

- Good programming comes from good habits. (in that vein: copy-and-paste is the devil.)

- Seriously, read books. It's incredible how much good advice is out there.

smountcastle · 2016-08-08 · Original thread
I give these three books out to new managers in my org:

* High Output Management by Andy Grove

* Turn the Ship Around by David Marquet

* The Score Takes Care of Itself by Bill Walsh

For interns I give out these two books:

* The Pragmatic Programmer

* The Passionate Programmer

This is from one of the authors of The Pragmatic Programmer:

Unfortunately it looks like you have to watch the video in order to find out what the practices and details are.

hga · 2015-05-06 · Original thread
As a 54 year old alum:

Unless you've been seriously programming for a number of years, with a fair amount of that in teams, including face to face ones, you're probably not nearing your peak. I'd suggest reading The Pragmatic Programmer: From Journeyman to Master ( and judge where you are in the range from journeyman to master.

If you're looking for "lock-in", i.e. be easily employable past your ability to fake looking under 35, I'd suggest getting a job with a serious security clearance, which can be a trick, or specialize in one of the fields that respects grey hairs like embedded (but only so much depending on the sub-field, e.g. Detroit car companies at least in times past recruited heavily from Course 6 because they too got rid of their older EEs and programmers).

If you goal is to really work for yourself, and you think you can eventually bill at a rate 5-6 times the income you want to receive---maybe talk to some professors who make a lot of money on their one day a week dedicated to that, albeit they do it with MIT Professor on the CV---yes, that's a very good way to go. But hard for most people. See e.g. this comment which points out you have to compete on quality, not price, and a couple of HN contributors who've written a lot about that.

Medicine: in a county, or the developed "West", where people by and large don't directly pay for their own medical care, and those who do pay are looking at a rapidly graying population, well, it's a field you ought to run screaming from, unless it's your calling.

Don't know about MechE and so on, in general you need to talk to older engineers, the people who run the department, professors, etc., of course adjusting for selection bias. If you haven't already identified a calling, well, you have a lot of options, especially if you're strong at math. Especially before the 2008 crash, a lot of EE strong and therefore math strong EECS graduates would get initial jobs in finance with their proven math chops, which if they were smart got them in a good financial position to do something they really wanted to do later.

I'm a huge believer in going back to primary texts, and understanding where ideas came from. If you've liked a book, read the books it references (repeat). I also feel like book recommendations often oversample recent writings, which are probably great, but it's easy to forget about the generations of books that have come before that may be just as relevant today (The Mythical Man Month is a ready example). I approach the reading I do for fun the same way, Google a list of "classics" and check for things I haven't read.

My go to recommendations: - The Structure of Scientific Revolutions, Thomas Kuhn, (1996) - The Pragmatic Programmer, Andrew Hunt and David Thomas (1999)

Things I've liked in the last 6 months: - How to Measure Anything, Douglas Hubbard (2007) - Mythical Man Month: Essays in Software Engineering, Frederick Brooks Jr. (1975, but get the 1995 version) - Good To Great, Jim Collins (2001)

Next on my reading list (and I'm really excited about it): - The Best Interface is No Interface, Golden Krishna (2015)

sjclemmy · 2013-01-04 · Original thread
I did the same; taught myself css, php, javascript and quit my FTJ last Christmas. Best thing I ever did.

I also sent the following as advice to someone wanting to get into web dev:

"I was just thinking of 'easy ins' to the world of web development and a good source of information is there's a lot of information from people who work in the world of tech startups and it's good information.

Also - if you are wanting to do php dev the key things to learn are: Software engineering techniques and practice - object oriented development and abstract patterns are key to how to think about good development. Database design and development (1st normal form, third normal form etc) Learn SQL. (SQL for dummies or similar is good for the basic commands and syntax etc.) - it's the best source of help for software development on the internet. read books, the ones that come up again and again when people talk about learning to program:

also - look at - that's where programmers keep their source code.

Learn about Object Oriented Programming, Design Patterns, MVC (which is a design pattern) is specifcally useful for web development.

Also - demand for javascript programmers will increase over the coming years because of things like jQuery and Ajax.

That's my starter for ten - if you are interested in a career as a web programmer.

If you want to focus more on the html/css design side you could do worse than focusing on one CMS - such as wordpress and learning it inside out - you could then offer that to clients and it's a good way to provide web sites cheaply with very little effort."

rudiger · 2011-04-07 · Original thread
Programmer; it's the modern-day carpenter.

jedwhite · 2010-10-18 · Original thread
There is a great chapter in The Pragmatic Programmer on why you should stick with text files for everything possible. Section 3 / Chapter 14 "The Power of Plain Text". It argues that as programmers, our base material as craftspeople isn't wood or metal, but knowledge, and with plain text we have the ability to manipulate knowledge with virtually every tool at our disposal.

This blog post doesn't express things nearly so well as the book, but the argument has validity.

Fresh book recommendations delivered straight to your inbox every Thursday.