Stack OverflowWhat are the best programming articles?
[+197] [72] lillq
[2008-11-25 05:46:59]
[ resources articles ]

Part of being a good software developer is keeping current with what people are saying in the community. There are many good articles out there on the Internet about the wide subject of computer programming. What articles have you found worth your time?

Please provide the article's title, author and a link if possible.

(1) Just about to start one myself.. before SO related questions showed me this one. Thanks for being a visionary! - Gishu
(1) Related question: 'Favorite Essay about Programming',… - Jonik
[+97] [2008-11-25 06:29:26] Baget [ACCEPTED]

Teach Yourself Programming in Ten Years [1] by Peter Norvig.

A good article on what it takes to become a great programer and Peter Norvig's recipe for programming success.


(6) Only 10 years? I started university about 9 years ago, and only did minimal programming before that. However, I'm still nowhere near where I would like to be in terms of knowing what I should about programmings. I'm not a bad programmer, but there is much more to learn. - Kibbee
(2) Nice - I like this idea. People need to understand that learning something is like playing Othello. It might take you a minute to learn the syntax, but the nuances and implications of various paradigms and patterns take a lifetime to master. There is always more to learn! - BenAlabaster
Great! The article has been translated in my native language. Great link. - Luc M
[+53] [2008-11-25 17:13:25] Cory House

The Programmer Competency Matrix [1] is an excellent reference to gauge your development skills.

It's a reminder that everyone has areas they can improve.


(1) Excellent resource for gap identification - msvcyc
Every time I come across i read that chart, I come across "Thinks that Excel is a database" and I LOL - priestc
[+42] [2008-11-25 14:56:37] lillq

Painless Functional Specifications, by Joel Spolsky. It's in four parts and all are good.


[+29] [2008-11-25 06:25:05] Firas Assaad

Fred Brooks's No Silver Bullet - Essence and Accidents of Software Engineering [1]


Link appears to be broken. Essay can be found here: - jbochi
@jbochi: Fixed. Thanks! - Firas Assaad
[+23] [2008-11-25 17:10:31] Bill the Lizard

How I Explained REST to My Wife [1]


I liked this article, it was quite an amusing read. - BenAlabaster
Very nice article. - msvcyc
[+23] [2008-12-16 17:45:08] Matt

The Law of Leaky Abstractions [1] by Joel Spolsky.


(3) Wow, that guy is good. Made me rethink a few things from just one article. - sdellysse
[+22] [2008-11-27 17:50:45] barfoon

I really liked Coding Without Comments [1], from Jeff Atwood


[+20] [2008-11-25 06:23:31] grigy

Hackers and Painters [1] by Paul Graham.


[+19] [2008-11-25 06:37:03] yesraaj

The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software [1] by Herb Sutter.

The biggest sea change in software development since the OO revolution is knocking at the door, and its name is Concurrency.


[+17] [2008-11-25 18:08:27] coledot

Big Ball of Mud [1] by Brian Foote and Joseph Yoder


[+15] [2008-12-03 01:10:28] Matt

Making Wrong Code Look Wrong [1] by Joel Spolsky on Hungarian Notation.


[+14] [2008-12-05 13:29:16] Loki

What Every Computer Scientist Should Know About Floating-Point Arithmetic [1] by Goldberg.

There is a PDF around

Personally, everyone should know about this one and What Every Programmer Should Know About Memory. They should make a yellow cover series with those!


[+11] [2008-11-25 16:54:39] cwick

Great Hackers [1] by Paul Graham


The link is not right, this the correct link: Great suggestion =) - Hugo
One of my favorite articles ever. Especially about the cube setup. - Awaken
[+11] [2008-11-25 19:56:18] phil

Being the Averagest [1] by Steve Yegge on competition in programming


Yegge: "Everyone practices -- everyone, that is, except for us. We just grind stuff out, day in, day out. Are you as embarrassed about the state of our profession as I am?" I found myself disagreeing a lot with some assumptions he makes. Most programmers I know are keen on self-improvement. - Jonik
@Jonik: consider yourself lucky. - just somebody
It makes me realize, how much I really want to learn and improve myself, but have no clue what to improve myself towards lol..I really love the work, am passionate about coding, but that's not enough. - crosenblum
[+11] [2008-12-05 02:35:47] J.F. Sebastian

What Every Programmer Should Know About Memory [pdf] [1] by Ulrich Drepper


Couldn't see it as it was right in my face. (c: - Loki
[+11] [2010-10-03 07:26:17] puttaraju

Its very surprising nobody posted this article from steve-yegge...
this inspired me to learn mathematics as a programmer...

(2) He is part of the reason I'm pursuing a math and not a CS degree :) - maayank
[+9] [2008-12-09 15:43:01] lillq

What to do when you're screwed [1] by Rands


[+8] [2008-11-25 05:54:28] chromakode

"How to Write a Spelling Corrector" [1] in Python by Peter Norvig


[+7] [2008-12-03 04:11:16] Windows programmer

Go To Statement Considered Harmful [1] by Edsger W. Dijkstra


Is this what you are referring to:… - lillq
Yes, that looks like it. - Windows programmer
I've added link to the article (and ruined the pan on the way) :) - J.F. Sebastian
There's also "Structured programming with go to statements" by D.E.Knuth. - zvrba
[+6] [2008-12-05 01:46:19] RoadWarrior

Execution in the Kingdom of Nouns [1] by Steve Yegge.

An essay that made me re-think my attitude towards OOP.


Loved this article! Some of the commenters clearly show that they have never thought in anything but an OO mindset. Even when they are indirectly suggestion the creation of a "ComputerProgram" class as if that adds benefits over a function. - Awaken
[+5] [2008-11-26 14:46:40] Tim

The Cathedral and the Bazaar [1] has several fun articles about the pioneering of Linux in the 90's.


[+5] [2008-12-05 02:21:37] J.F. Sebastian

Why numbering should start at zero [1] by E.W. Dijkstra


[+4] [2008-11-25 17:02:20] Tim

Smashing Magazine's 10 Principles Of Effective Web Design [1]


[+4] [2008-12-05 00:29:39] Matt

Code Tells You How, Comments Tell You Why [1] by Jeff Atwood.


[+4] [2008-12-05 01:41:59] RoadWarrior

Jan Mikovsky on the fractal nature of UI design problems [1]. I spent a while writing code to deal with this :-)


+1 I've been there...*cries* - Outlaw Programmer
Really excellent article. Makes me wonder when I read some books when the author talks about something that is clearly a common use, but there isn't a language library to handle that common feature. - Awaken
[+3] [2008-11-25 18:21:59] Piotr Lesnicki

You have a really a bunch of very good ones here [1]

Notably some of the already cited here ones, but also:

  • The lambda papers (difficult but profound)
  • The kingdom of Nouns (more distracting)
  • ...

Looking back at them now, they're mostly oriented on functional programming, but I don't see Why functional programming matters [2]. If I remember other ones on another topic, I'll put them in another post.


Note that the PrairieNet links are MIA (404) as of 2009-10-24. However, Google searches on 'lambda papers' and 'kingdom nouns' suggests that the listed papers can readily be found, still - just at different locations. - Jonathan Leffler
Link now points to archived copy of page. - outis
[+3] [2008-11-25 18:26:10] Renato Soffiatto

I do found many of the Object Mentor articles immensely useful.
Object Mentor Articles [1]


[+3] [2008-12-05 01:34:14] RoadWarrior

Raymond Chen on software development taxes [1].


[+3] [2008-12-05 01:44:13] J.F. Sebastian

A programmer's view of the Universe, part 1: The fish [1] by Steve Yegge


[+3] [2008-12-29 16:45:12] Thorsten79

They Write The Right Stuff [1], a timeless article by Charles Fishman published in FastCompany 1996.


[+2] [2008-12-02 18:44:16] lillq

Coding: It's Just Writing [1] by Jeff Attwood.

A short article on writing style.


[+2] [2008-12-05 01:39:04] RoadWarrior

Picture Hanging [1] by Colin MacDonald.

This wonderful essay on picture hanging as an analogy to software development made a huge impression on me when I first read it. The relentless accumulation of facts is just as important as talent or skill.


[+2] [2008-12-10 00:03:20] ykaganovich

Characterizing people as non-linear, first-order components in software development [1] by Alistair Cockburn


[+2] [2008-12-30 12:44:26] Roberto Russo

How to be a Programmer: A Short, Comprehensive, and Personal Summary [1] by Robert L. Read

«To be a good programmer is difficult and noble. The hardest part of making real a collective vision of a software project is dealing with one's coworkers and customers. Writing computer programs is important and takes great intelligence and skill. But it is really child's play compared to everything else that a good programmer must do to make a software system that succeeds for both the customer and myriad colleagues for whom she is partially responsible. In this essay I attempt to summarize as concisely as possible those things that I wish someone had explained to me when I was twenty-one.»


[+2] [2009-01-23 15:28:06] JDKing

Awesome article on unicode and character sets.

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky [1]


[+2] [2009-01-23 15:53:46] Jonik

An insightful article about good software development practices - not strictly about programming as in writing code.

Continuous Integration [1] by Martin Fowler

I remember this was somewhat eye-opening when first reading it a few years ago, and have later come to consider this stuff quite essential.


[+2] [2009-02-20 08:00:23] jsha

How to become a hacker [1] by Eric Steven Raymond.


[+2] [2009-12-21 18:40:21] Steve Zhang

I will recommend Martin Fowler's The new Methodology [1], it is a great article about Agile.


[+1] [2008-11-25 15:13:30] joveha

Cert Secure Coding Standards [1] is a gem

Edit: fixed the link.


The link is does not work. - lillq
[+1] [2008-11-25 15:47:39] Buu Nguyen

"What is Software Design" [1] by Jack W. Reeves


[+1] [2008-12-05 01:15:07] RoadWarrior

Eric Sink's My life as a code economist [1].


[+1] [2008-12-05 01:27:53] RoadWarrior

Doing Work Without Threads [1] by Ian Griffiths.


[+1] [2008-12-05 02:31:13] J.F. Sebastian

Secrets of the Little Blue Box [1] by Ron Rosenbaum


[+1] [2008-12-05 02:45:22] J.F. Sebastian

The Pinocchio Problem [1] by Steve Yegge


[+1] [2008-12-09 23:54:06] lillq

This is a good article on getting your first job offers.

Exploding Offer Season [1] by Joel Spolsky.


[+1] [2008-12-10 18:31:05] ykaganovich

This is very specific to Java development, but an excellent overview of memory management issues by Attila Szegedi. Makes me want to buy him a beer :)

A day in the life of a memory leak hunter [1]

Yet another day in the life of a memory leak hunter [2]

Memory leak hunting still doesn't end, or: Serialization also requires a bit of manually imposed amnesia [3]


[+1] [2008-12-12 21:04:40] John Dunagan

Anything in Hanselminutes [1], or Scott's Blog [2]. Saved my ass ongoing quite a few times.


[+1] [2008-12-17 02:13:52] lillq

10 Useful Techniques To Improve Your User Interface Designs [1] by Dmitry Fadeyev.


[+1] [2008-12-29 21:36:08] lillq

Practice To Perfect: The Quality First Model [1] by Bertrand Meyer.


[+1] [2009-01-18 19:18:18] Michael

This blog post by a Google employee named Ben Sussman talks about how, due to the anonymous nature of the Internet, we programmers will accept nothing but perfection from ourselves and eachother. This is very different from other professions, where mistakes are expected to happen and people are expected to learn from them.

[+1] [2009-01-23 21:35:30] Matt

The Hundred-Year Language [1] by Paul Graham.


[+1] [2009-01-23 21:38:56] Matt

XP Software Programming Paradigm [1] by Guy Lecky-Thompson.


[+1] [2009-01-23 22:15:05] John Nilsson

STEPS Toward The Reinvention of Programming [1]

"The STEPS project is setting out to create “Moore’s Law Software”: a high-risk high-reward exploratory research effort to create a large-scope-and-range software system in 3-4 orders of magnitude less code than current practice."


[+1] [2009-01-24 00:17:15] Jonik

Here's another article about good development practices, namely version control:

Version Control for Multiple Agile Teams [1] by Henrik Kniberg, posted at InfoQ [2]

From the introduction:

If we have several agile development teams working on the same codebase, how do we minimize the risk of stumbling over each other? How do we ensure that there always is a clean, releasable version at the end of each iteration? This paper describes an example of how to handle version control in an agile environment with multiple teams - it is the scheme that we migrated to at the company described in " Scrum and XP from the Trenches [3]".

The article talks about using short-lived devel branches to achieve stable trunk, into which goes only stuff that is done. At my work, we've generally had good experiences of applying these ideas, with two scrum teams working on one codebase. There's some overhead about the extra branching and merging (some of which can be automated away), but having stable trunk, from where a release could be made at any time, is a big plus.


[+1] [2009-02-05 21:00:03] Matt

Evidence Based Scheduling [1] by Joel Spolsky.


[+1] [2009-03-06 21:41:29] Comptrol

Notes on the Foundations of Programming I [1] and II [2]

By Alexander Stepanov [3]


[+1] [2009-04-09 18:16:19] lillq

What Stack Overflow Can Teach You [1] by Jeff Atwood.

This article describes eloquently the way that feedback helps you grow as a programmer, and shows how that is a key to success.


+1, that's a good post. Personally I've noticed that participating on SO really helps with my technical writing abilities (and general English vocabulary and structures too) - Jonik
[+1] [2009-05-28 16:56:12] Comptrol

Any article published in Eric.Weblog [1] by Eric Sink.

For instance, one of the worthwhile articles is My Life as a Code Economist [2], which briefly describes when to fix a bug. Following picture summarizes his point of view on this topic:

alt text


[+1] [2009-08-01 08:09:29] Comptrol

Top 25 Most Dangerous Programming Errors [1]

additionally: Do stackoverflow users agree with the CWE/SANS Top 25 most dangerous programming mistakes? [2]


[+1] [2009-08-18 10:03:20] yeyeyerman

The beginning of Google. This must be the research with the biggest ROI of all times:

The Anatomy of a Large-Scale Hypertextual Web Search Engine [1]


[+1] [2009-09-19 20:25:05] Asad Butt

Fire And Motion by Joel Spolsky [1]

It’s brief but true inspiration. Remember, long lines of code does not mean it’s a good program


[+1] [2009-12-21 16:51:13] Paul D. Waite

You’ll Never Have Enough Cheese [1], Atwood (2004). More about interface design and making software than programming, but I like the metaphors.


[0] [2008-12-05 01:18:12] RoadWarrior

Chris Brumme's excellent essay on finalization in .NET [1].


[0] [2008-12-05 01:22:04] RoadWarrior

Another excellent essay by Chris Brumme, this time on the gory inner details of the exception model in .NET [1].


[0] [2008-12-05 01:29:50] RoadWarrior

Ian Griffiths again on deadlock complexities [1].


[0] [2008-12-09 19:17:36] user43636

"Being a Software Engineer in the Software Century" By: Barry Boehm Truly Inspirational

Do you have a Link? - lillq
That is for an article called "Future Challenges and Rewards for Software Engineers". One for "Being a Software Engineer in the Software Century" would still be useful. This is part of a book thoo and may not be published online. - lillq
[0] [2008-12-29 21:42:15] lillq

Effective Unit Testing [1] by Tim Burns.

Careful programmers test early and test often.


[0] [2009-01-23 22:08:48] John Nilsson

Architectural Styles and the Design of Network-based Software Architectures [1]

At least chapter 5 and 6 should be read by anyone in doing anything web related.


[0] [2009-04-10 21:25:02] lillq

Six Styles for Usability Requirements [1] by Soren Lauesen & Houman Younessi

I was looking into how to define usability as a requirement and came across this article. It is well written and was very helpful.

Abstract. A system can have adequate functionality, but inadequate usability because it is too difficult to use. The purpose of usability requirements is to guard against that. This paper shows six styles for usability requirements seen in practice or recommended by experts. For each style we discuss how we can verify the requirements, how we can use them during development, how we elicit the data for the specification, and to what extent the style covers the essence of usability.


[0] [2009-10-25 00:29:28] Cape Cod Gunny

The ones that appeared in PC Techniques... Jeff Duntemann's magazine.

[0] [2010-02-05 23:11:39] Juliet

Pounding a Nail: Old Shoe or Glass Bottle [1] by Alex Papadimoulis. Summary: programmers have a nasty habit of helping newbies write bad code instead of encouraging better programming practices.

The Complicators Gloves [2] by Alex Papadimoulis. Summary: for any given problem, programmers have a nasty habit of overlooking simple solutions in favor of complicated, over-engineered, enterprisey solutions.


[-8] [2008-11-25 18:17:06] XC.

An article? But a book I recommend this: Code Complete 2nd Edition

(1) There is a page for books already. - lillq
"Edit: The question is clearly about Articles, not Blogs or Books, so be more specific with your answers." - fly.floh