Preview — Effective Programming
by Jeff Atwood

Effective Programming: More Than Writing Code

Jeff Atwood began the Coding Horror blog in 2004, and is convinced that it changed his life. He needed a way to keep track of software development over time - whatever he was thinking about or working on. He researched subjects he found interesting, then documented his research with a public blog post, which he could easily find and refer to later. Over time,ABOUT THE BOOK

Jeff Atwood began the Coding Horror blog in 2004, and is convinced that it changed his life. He needed a way to keep track of software development over time - whatever he was thinking about or working on. He researched subjects he found interesting, then documented his research with a public blog post, which he could easily find and refer to later. Over time, increasing numbers of blog visitors found the posts helpful, relevant and interesting. Now, approximately 100,000 readers visit the blog per day and nearly as many comment and interact on the site.

Effective Programming: More Than Writing Code is your one-stop shop for all things programming. Jeff writes with humor and understanding, allowing for both seasoned programmers and newbies to appreciate the depth of his research. From such posts as "The Programmer's Bill of Rights" and "Why Cant Programmers... Program?" to "Working With the Chaos Monkey," this book introduces the importance of writing responsible code, the logistics involved, and how people should view it more as a lifestyle than a career.

TABLE OF CONTENTS

- Introduction

- The Art of Getting Shit Done

- Principles of Good Programming

- Hiring Programmers the Right Way

- Getting Your Team to Work Together

- The Batcave: Effective Workspaces for Programmers

- Designing With the User in Mind

- Security Basics: Protecting Your Users' Data

- Testing Your Code, So it Doesn't Suck More Than it Has To

- Building, Managing and Benefiting from a Community

- Marketing Weasels and How Not to Be One

- Keeping Your Priorities Straight

EXCERPT FROM THE BOOK

As a software developer, you are your own worst enemy. The sooner you realize that, the better off you'll be.I know you have the best of intentions. We all do. We're software developers; we love writing code. It's what we do. We never met a problem we couldn't solve with some duct tape, a jury-rigged coat hanger and a pinch of code. But Wil Shipley argues that we should rein in our natural tendencies to write lots of code:

The fundamental nature of coding is that our task, as programmers, is to recognize that every decision we make is a trade-off. To be a master programmer is to understand the nature of these trade-offs, and be conscious of them in everything we write.In coding, you have many dimensions in which you can rate code: Brevity of codeFeaturefulnessSpeed of executionTime spent codingRobustnessFlexibility

Now, remember, these dimensions are all in opposition to one another. You can spend three days writing a routine which is really beautiful and fast, so you've gotten two of your dimensions up, but you've spent three days, so the "time spent coding" dimension is way down.So, when is this worth it? How do we make these decisions? The answer turns out to be very sane, very simple, and also the one nobody, ever, listens to: Start with brevity. Increase the other dimensions as required by testing.

I couldn't agree more. I've given similar advice when I exhorted developers to Code Smaller. And I'm not talking about a reductio ad absurdum contest where we use up all the clever tricks in our books to make the code fit into less physical space. I'm talking about practical, sensible strategies to reduce the volume of code an individual programmer has to read to understand how a program works......more

Community Reviews

The only issue I have with this book is the amount of links it has to material on the web. Yes it is nice that he put references to show examples or to further prove his point, but I think every second sentence in the book is a link to a web document. I read this book on my train ride to work. Underground. On my iPod touch. So you can see I had no access to internet while reading this book. Also if I had to stop to read every single link that was included, it would have taken me 2 or 3 times lonThe only issue I have with this book is the amount of links it has to material on the web. Yes it is nice that he put references to show examples or to further prove his point, but I think every second sentence in the book is a link to a web document. I read this book on my train ride to work. Underground. On my iPod touch. So you can see I had no access to internet while reading this book. Also if I had to stop to read every single link that was included, it would have taken me 2 or 3 times longer to finish the book. At the end of each chapter he encourages you to click on the links.

Despite the above. I gave this book a 4/5. This book reminds me of having a conversation with a fellow developer over dinner about technology. He wasn't just throwing facts at you and telling you do this to be better. He was having a conversation with you and explaining why he thinks or believes X is the best or one of the better methods to achieve Y. Some of the material he mentions you may already know and follow blindly because you were told a long time ago this is just how we do things, but because of the way he explains things, you may now understand why. You'll also understand why what you were doing before was wrong and why you should update your methods to better ones.

I read this on my Kindle app, created a bunch of bookmarks (mostly for the links), highlight a lot of quotes and will probably reread this book. ...more

A solid, fast-reading, topic-grouped collection of articles from the "Coding Horror" blog. Consider the ebook over paper because there are many hyperlinks.

Some highlights:- great execution requires a great team- everyone on the team should be able to elevator pitch both the product and the current tasks they're doing- "Without a clear focus and something to rally around, we lose the context around our code. That's why it's so important to have a clear project vision statement."- ship version 1 eA solid, fast-reading, topic-grouped collection of articles from the "Coding Horror" blog. Consider the ebook over paper because there are many hyperlinks.

Some highlights:- great execution requires a great team- everyone on the team should be able to elevator pitch both the product and the current tasks they're doing- "Without a clear focus and something to rally around, we lose the context around our code. That's why it's so important to have a clear project vision statement."- ship version 1 even though it sucks. get real-world feedback as soon as possible. besides the stuff you know isn't right, there are things you did wrong that you don't even know about yet.- capture usage data. users are crazy and their computing environments are vastly different from yours- usability testing always works...more

A collection of his blog posts. Read some of them before, but enjoyed reading again none the less. One thing I should mention is while reading in the blog posts, it was easier to follow the links or youtube videos. On the other hand while reading it as a kindle book on my paperwhite, found it very hard to follow those links. Just saying that the kindle format (on e-ink kindle devices not if you read it on the web reader), is not practical for this type of book.

This book is a great read for anyone remotely linked to the field of software engineering. The author discusses a diverse set of topics from code reviews to testing and from ergonomics to advertising. It was a real eye opener for me and has somehow equipped me better to work on any future project I am involved in and deliver my best effort.

A top-level view of all facets of software engineering. I started reading coding horror quite recently. If you feel like browsing through the past blogs, this books covers the gems among them and you will love it.

Atwood gives a collection of career advice as a programmer, the advice falls into several categories. Many advice not only applies to programmers but other profession as well.

In the end, Atwood explores the topic of happiness, and tackle the hard question of how to be happy. Approaching it as a programmer, he laid out a list of rules he developed over the years.

CommunicationGreat programmers can communicate their ideas. By persuading other people, they get leverage.Strike a mindful balance betweAtwood gives a collection of career advice as a programmer, the advice falls into several categories. Many advice not only applies to programmers but other profession as well.

In the end, Atwood explores the topic of happiness, and tackle the hard question of how to be happy. Approaching it as a programmer, he laid out a list of rules he developed over the years.

CommunicationGreat programmers can communicate their ideas. By persuading other people, they get leverage.Strike a mindful balance between practicing your craft and thinking about how you practice your craft.

CodingProgramming is the kind of task where you have to keep a lot of things in your head at once.No matter what the problem is with your software — maybe it’s not in your code in the first place — always assume the problem is in your code and act accordingly.Most of the time, what inexperienced developer considers beautiful is superficial, and what they consider ugly, is battle-hardened production-ready code from master hackers.Performance is a feature, I simply like using faster website than slower website.It’s been shown time and time again there is no correlation between years of experience and skill in programming.Your app is a collection of details.For users, UI is the application.

Decision making (in life)Be bold, figure out what you’re good at, and pursue it aggressively.Speak of iteration beats quality of iteration.There are good fast decisions but no good slow decisions.We typically overestimate how much we’ll actually get done.Innovation is not about saying yes to everything, but saying no to all but most crucial features.Every decision we make is a trade-off, to be a master programmer is to understand these trade-offs.

QualityPeople are often successful not despite their dysfunctions but because of them. Obsessions are one of the greatest telltale signs of success.Have a rock-solid vision statement from day one.Be humble, always first presume you’re wrong.Success is rarely determined by the quality of your ideas, but rather frequently determined by the quality of your execution.

TeamIf your team manager isn’t dealing with the bad apple on your project, he is not doing her job....more

To be honest, I started reading this book while watching a particularly one-sided NY Yankees vs Cleveland Indians game. I bought it in a particularly jolly mood and it sat around in my Kindle library until an opportune day like this. I think Jeff Atwood has been blogging about programming as long as I've been programming. Over past few years, I've come to respect him more as beyond some dude who blogs a lot about software and random things. If anything, his work on StackOverflow and Discourse shTo be honest, I started reading this book while watching a particularly one-sided NY Yankees vs Cleveland Indians game. I bought it in a particularly jolly mood and it sat around in my Kindle library until an opportune day like this. I think Jeff Atwood has been blogging about programming as long as I've been programming. Over past few years, I've come to respect him more as beyond some dude who blogs a lot about software and random things. If anything, his work on StackOverflow and Discourse show a much more "giving back to the world" and/or "Making the internet a better place" mindset. Seriously, the dude along with Joel Spolsky deserves a gold medal for ridding the world of expertsexchange.com (yep, those were the dark ages)

If you're like me, with a lot of reading of Atwood's musings, rants and find yourself quoting Atwood's Law at times, you'd think there's not much here and you'd be mostly right. I think the context and the flow of essays matter lot more than the fact that most of the meat in the pages is really content from his essays. I'd go out on a limb and say that it's written to be like a programmer's version of Covey's famous "7 habits of highly effective people" -- it's not a coincidence, Atwood quotes him at couple of points. I recommend reading this book to get a full perspective on what are good workplace habits, how to hone your professional skills and well, just not be a dick in general. Nobody likes those.

It's mostly usual stuff you'd find in codinghorror but getting it in a book form in some coherent manner is much appreciated. Also, I got inspired to write more (maybe time to break out that Tim Ferris 4-hour work week? I kid! I kid!). Maybe I'll read the book Steve Yegge is going to publish too.. yes, all 5000 pages of them. ...more

I started to read this book because I tough it would help me to become a better programmer, and its content resulted a surprise. First, it doesn't has new content, instead it contains post from the author's blog organized by topic but without revision, so there are repetitive information and embedded videos that you can't see in your ebook reader. Second and most important, I imagined it would has a lot of technical information, but it has more stuff about how to choose a programmer, how to dealI started to read this book because I tough it would help me to become a better programmer, and its content resulted a surprise. First, it doesn't has new content, instead it contains post from the author's blog organized by topic but without revision, so there are repetitive information and embedded videos that you can't see in your ebook reader. Second and most important, I imagined it would has a lot of technical information, but it has more stuff about how to choose a programmer, how to deal with a bad teammate and how to be a good leader, which in the end I think is more insightful than whether use or not SSL on a web site (and other stuff like that) because now I know how to become a better programmer. I have been follow Coding Horror for years before I found this book on Amazon, but just after I read these old posts I realized that the "boring" pieces that I skipped on my feed agreggator are the really important one, and now I'm collected them.

In conclusion, read it was disappointing because it's not a book with new material (hence the 4 stars), but it was great to discover so much awesome tips that where just in front of my eyes....more

I hate books that are just collections of blog posts.*** But this is Coding Horror!There are usually an easy-going cash sink: pointless, messed, un-inventive.*** But this is Coding Horror!And the price for value is outrageous, because you can read pretty much the same for free, on the blog.*** But this is Coding Horror!

The resistance was futile. In the end I've bought the book. And read it. And ... it's really good. Jeff isn't just repeating cliches and obviousness. His statements, thoughts andI hate books that are just collections of blog posts.*** But this is Coding Horror!There are usually an easy-going cash sink: pointless, messed, un-inventive.*** But this is Coding Horror!And the price for value is outrageous, because you can read pretty much the same for free, on the blog.*** But this is Coding Horror!

The resistance was futile. In the end I've bought the book. And read it. And ... it's really good. Jeff isn't just repeating cliches and obviousness. His statements, thoughts and opinions are really entertaining and made me think a bit about some topics (at least initial 60% of the book - after this milestone the quality drops a bit). I liked the citations (I still have some noted to use them later).

My favourite posts? About the speed of change (interesting reference to Android vs iOS), reading the source code, years of experience myth and "Version 1 sucks, but ship it anyway".

I strongly recommend this book. Personally I've already bought the part II....more

A great read for any developer or manger of developers. There's more additional readings and videos than I've ever seen in a book. It's got insight that should be required readings for every developer.

My favorite quotes:

1. "An essential part of being a humble programmer is realizing that whenever there's a problem with the code you've written, it's always your fault."

2. "Software developers think their job is writing code. But it's not. Their job is to solve the customer's problem."

3. "There's nA great read for any developer or manger of developers. There's more additional readings and videos than I've ever seen in a book. It's got insight that should be required readings for every developer.

My favorite quotes:

1. "An essential part of being a humble programmer is realizing that whenever there's a problem with the code you've written, it's always your fault."

2. "Software developers think their job is writing code. But it's not. Their job is to solve the customer's problem."

3. "There's no question that, for whatever time budget you have, you will end up with better software by releasing as early as practically possible, and then spending the rest of your time iterating rapidly based on real-world feedback."...more

A neat book that covers lots of topics that are directly and not so directly related to being a programmer. It has a little bit of everything - Motivation, Job Interviews, Teamwork, Design, Security, Communities, Marketing, etc.

The book is a light read with lots of references. (If you read it on a kindle you will have a hard time following those..) One can get lots of insights and dig deeper into a topic that one finds interesting (don't expect all the topics touched in the book to be covered inA neat book that covers lots of topics that are directly and not so directly related to being a programmer. It has a little bit of everything - Motivation, Job Interviews, Teamwork, Design, Security, Communities, Marketing, etc.

The book is a light read with lots of references. (If you read it on a kindle you will have a hard time following those..) One can get lots of insights and dig deeper into a topic that one finds interesting (don't expect all the topics touched in the book to be covered in a great depth. The book is just a collection of Jeff's blog posts.)

Even though at some moments I was not really involved in a particular topic, most of the posts are written with passion, knowledge and experience. What would you want more from such a book?...more

This is a book of various blog posts about software development and, as the title suggests, thinking of writing/designing software on a higher level. Some posts are opinions (venturing into rant territory) that you may or may not share. Some themes are repeated (in the blog that is OK, but in book form I don't really need the same idea more than once).

Overall, though, there are quite a few good pieces of advice that I will think about when developing. One example that sticks out is to get versioThis is a book of various blog posts about software development and, as the title suggests, thinking of writing/designing software on a higher level. Some posts are opinions (venturing into rant territory) that you may or may not share. Some themes are repeated (in the blog that is OK, but in book form I don't really need the same idea more than once).

Overall, though, there are quite a few good pieces of advice that I will think about when developing. One example that sticks out is to get version 1.0 to your real users ASAP. This is less about finding bugs in the code and more about finding bugs in the UX or even the concept of the software, itself.

In a book like this, if I find more than a few useful articles, then it was worth the read. I did, and it was!...more

Wouldn't say this is a must read for programmer. But if you do coding for a living and you haven't read this book, you are missing out.

Don't expect in depth tutorials or very technical advices, there are plenty other books can give you that.

Do expect practical, useful in high level advices from one of the most successful programmer/entrepreneur/manager/founder in the world.

This book in a way reminds me of Code Complete. You probably have known most of the stuffs if you are in the industry longWouldn't say this is a must read for programmer. But if you do coding for a living and you haven't read this book, you are missing out.

Don't expect in depth tutorials or very technical advices, there are plenty other books can give you that.

Do expect practical, useful in high level advices from one of the most successful programmer/entrepreneur/manager/founder in the world.

This book in a way reminds me of Code Complete. You probably have known most of the stuffs if you are in the industry long enough and you wouldn't have a clue what the hell is going on if you are a total newbie.

You would benefit the most from this book if you are somewhat in middle, immediate level.

As the title suggests, this book covers all of the things outside of writing code that will help you develop better software and it does a pretty good job of that. If you're cheap, do realize that most of this book is simply a compilation of Jeff Atwood's blog entries, and you could just read it there. As such, the book sometimes reads more like a blog than a contiguous book.

I would rate the usefulness of the information contained in this book at 5 stars, but personally I disliked the lack of cAs the title suggests, this book covers all of the things outside of writing code that will help you develop better software and it does a pretty good job of that. If you're cheap, do realize that most of this book is simply a compilation of Jeff Atwood's blog entries, and you could just read it there. As such, the book sometimes reads more like a blog than a contiguous book.

I would rate the usefulness of the information contained in this book at 5 stars, but personally I disliked the lack of continuity from one chapter to the next. However, I would still suggest it to all software developers for their own personal development....more

Made up of some of Coding Horror's blog entries, this book is a great read for anyone in the IT business, be them managers, business analysts, front-end designers, back-end developers, testers or just someone who really likes to read stuff related to that "strange" world. Going into great detail on each entry, Jeff tackles the various (and radically different topics) with a mix of humour and pragmatics with a lot of his own experience while creating the Stack Exchange. Definitely a must read forMade up of some of Coding Horror's blog entries, this book is a great read for anyone in the IT business, be them managers, business analysts, front-end designers, back-end developers, testers or just someone who really likes to read stuff related to that "strange" world. Going into great detail on each entry, Jeff tackles the various (and radically different topics) with a mix of humour and pragmatics with a lot of his own experience while creating the Stack Exchange. Definitely a must read for those who seek a different perspective on the IT business or just some neurone-firing thoughts....more

The book a great collection of "Coding Horror" blogposts. Even if you are a regular reader of the "Coding Horror" blog, the book is still great because the posts are well structured in in related themes(chapters) like:* Getting shit done* How to hire progremmers* How to get yoor team to work together* Good desing* Security basics* Working with a community

The only downside is that there are lots of links to other sources in the text and if you read it on ebook reader device, it is not convenientThe book a great collection of "Coding Horror" blogposts. Even if you are a regular reader of the "Coding Horror" blog, the book is still great because the posts are well structured in in related themes(chapters) like:* Getting shit done* How to hire progremmers* How to get yoor team to work together* Good desing* Security basics* Working with a community

The only downside is that there are lots of links to other sources in the text and if you read it on ebook reader device, it is not convenient to follow all hyperlinks.

As someone who has been reading codinghorror.com every now and then when a link there popped on my radar, I never did start reading through the archives. I'm glad that Atwood compiled this book as a summary of the best texts published in blog. His writing is clear and strong, and he never fears to voice his opinion. I think this is something a software developer should read. Thanks to the clear writing, I'd say it wouldn't be a bad introduction to the software developers' thinking for the uninitAs someone who has been reading codinghorror.com every now and then when a link there popped on my radar, I never did start reading through the archives. I'm glad that Atwood compiled this book as a summary of the best texts published in blog. His writing is clear and strong, and he never fears to voice his opinion. I think this is something a software developer should read. Thanks to the clear writing, I'd say it wouldn't be a bad introduction to the software developers' thinking for the uninitiated as well....more

The book is very well structured with advice on how to improve as a programmer in several different aspects; writing better code, treating your customers better, and improving your communicating. It explains everything with examples and solid advices.

This is a pretty interesting compilation. I say compilation because most of the stuff in this book is available for free at Coding Horror. However, it's an interesting set of ideas to consider for anyone serious about a career in programming. Touches on important topics such as assembling the right team, community creation and growth, peer review vs. unit testing and many other things.

Even though it's just a blog compilation, this book is so well organized by topic and chronology, that's an amazing reading experience to "coding horror". Highly recommended for developers, on crisis or not :)

A friend who has read quite a few books recommended this book, saying that it's the best programming book he read. Now I have not read that many books in my life, but I have feeling this is gonna be one of those books I'll always remember.

A wonderful book with deep insights into the world of programmers. Has a good set of learning for all the would be and all the current programmers. Not all of the book is about technology, it also speaks about other things in life.

This is a very good book for Developers and Managers. Jeff explains his view and experience when building Stack Overflow (apparently from blog posts at http://blog.codinghorror.com/). Full of good advice and useful links to more reading. It's kind of a must for modern developers and leads.