views:

8761

answers:

72

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.

+8  A: 

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

chromakode
+13  A: 

Hackers and Painters by Paul Graham.

grigy
+27  A: 

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

Firas Assaad
Link appears to be broken. Essay can be found here: http://www.cs.nott.ac.uk/~cah/G51ISS/Documents/NoSilverBullet.html
jbochi
@jbochi: Fixed. Thanks!
Firas Assaad
+80  A: 

Teach Yourself Programming in Ten Years by Peter Norvig.

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

Baget
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
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
+17  A: 

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

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

yesraaj
+35  A: 

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

lillq
A: 

Cert Secure Coding Standards is a gem

Edit: fixed the link.

joveha
The link is does not work.
lillq
https://www.securecoding.cert.org/confluence/display/seccode/CERT+Secure+Coding+Standards
Sean
+1  A: 

"What is Software Design" by Jack W. Reeves

Buu Nguyen
+10  A: 

Great Hackers by Paul Graham

cwick
The link is not right, this the correct link:http://www.paulgraham.com/gh.htmlGreat suggestion =)
Hugo
One of my favorite articles ever. Especially about the cube setup.
Awaken
+4  A: 

Smashing Magazine's 10 Principles Of Effective Web Design

Tim
+19  A: 

How I Explained REST to My Wife

Bill the Lizard
I liked this article, it was quite an amusing read.
BenAlabaster
Very nice article.
msvcyc
+42  A: 

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

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

Cory House
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
nbv4
+13  A: 

Big Ball of Mud by Brian Foote and Joseph Yoder

coledot
A: 

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

XC
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
+3  A: 

You have a really a bunch of very good ones here

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. If I remember other ones on another topic, I'll put them in another post.

Piotr Lesnicki
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
A: 

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

Renato Soffiatto
+10  A: 

Being the Averagest by Steve Yegge on competition in programming

phil
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
+4  A: 

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

Tim
+21  A: 

I really liked Coding Without Comments, from Jeff Atwood

barfoon
+1  A: 

Coding: It's Just Writing by Jeff Attwood.

A short article on writing style.

lillq
+13  A: 

Making Wrong Code Look Wrong by Joel Spolsky on Hungarian Notation.

Matt
+5  A: 

Go To Statement Considered Harmful by Edsger W. Dijkstra

Windows programmer
Is this what you are referring to: http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html
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
+3  A: 

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

Matt
+2  A: 

Eric Sink's My life as a code economist.

RoadWarrior
+1  A: 

Chris Brumme's excellent essay on finalization in .NET.

RoadWarrior
+1  A: 

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

RoadWarrior
+2  A: 

Doing Work Without Threads by Ian Griffiths.

RoadWarrior
+1  A: 

Ian Griffiths again on deadlock complexities.

RoadWarrior
+4  A: 

Raymond Chen on software development taxes.

RoadWarrior
+2  A: 

Picture Hanging 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.

RoadWarrior
+4  A: 

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

RoadWarrior
+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
+2  A: 

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

J.F. Sebastian
+4  A: 

Execution in the Kingdom of Nouns by Steve Yegge.

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

RoadWarrior
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
+3  A: 

Why numbering should start at zero by E.W. Dijkstra

J.F. Sebastian
+1  A: 

Secrets of the Little Blue Box by Ron Rosenbaum

J.F. Sebastian
+8  A: 

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

J.F. Sebastian
Couldn't see it as it was right in my face. (c:
Loki
+1  A: 

The Pinocchio Problem by Steve Yegge

J.F. Sebastian
+13  A: 

What Every Computer Scientist Should Know About Floating-Point Arithmetic 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!

Loki
+8  A: 

What to do when you're screwed by Rands

lillq
A: 

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

Do you have a Link?
lillq
daub815
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
+1  A: 

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

Exploding Offer Season by Joel Spolsky.

lillq
+1  A: 

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

Yet another day in the life of a memory leak hunter

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

ykaganovich
+1  A: 

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

John Dunagan
+20  A: 

The Law of Leaky Abstractions by Joel Spolsky.

Matt
Wow, that guy is good. Made me rethink a few things from just one article.
sdellysse
+1  A: 

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

lillq
+3  A: 

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

Thorsten79
+1  A: 

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

lillq
A: 

Effective Unit Testing by Tim Burns.

Careful programmers test early and test often.

lillq
+2  A: 

How to be a Programmer: A Short, Comprehensive, and Personal Summary 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.»

Roberto Russo
+1  A: 

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.

http://blog.red-bean.com/sussman/?p=96

Michael Angstadt
+2  A: 

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

Continuous Integration 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.

Jonik
+1  A: 

The Hundred-Year Language by Paul Graham.

Matt
+1  A: 

XP Software Programming Paradigm by Guy Lecky-Thompson.

Matt
A: 

Architectural Styles and the Design of Network-based Software Architectures

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

John Nilsson
+1  A: 

STEPS Toward The Reinvention of Programming

"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."

John Nilsson
+1  A: 

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

Version Control for Multiple Agile Teams by Henrik Kniberg, posted at InfoQ

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".

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.

Jonik
+1  A: 

Evidence Based Scheduling by Joel Spolsky.

Matt
+2  A: 

How to become a hacker by Eric Steven Raymond.

jsha
+1  A: 

Notes on the Foundations of Programming I and II

By Alexander Stepanov

Comptrol
+1  A: 

What Stack Overflow Can Teach You 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.

lillq
+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
A: 

Six Styles for Usability Requirements 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.

lillq
+1  A: 
Comptrol
+1  A: 

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

yeyeyerman
+1  A: 

Fire And Motion by Joel Spolsky

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

Asad Butt
A: 

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

Cape Cod Gunny
+1  A: 

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

Paul D. Waite
+2  A: 

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

Steve Zhang
A: 

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

The Complicators Gloves 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.

Juliet
+8  A: 

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

http://steve-yegge.blogspot.com/2006/03/math-for-programmers.html

puttaraju
He is part of the reason I'm pursuing a math and not a CS degree :)
maayank
That's the top answer at http://stackoverflow.com/questions/11743/useful-math-for-programmers.
Ether