10 Papers Every Programmer Should Read (At Least Twice)

February 27th, 2009

People come into programming from many different directions. Some started in other fields, and others started programming as teens. Some started with BASIC, others started with Ruby or C. The industry is filled with knowledge, but it isn’t common knowledge. It isn’t knowledge that we all share. We have to dig for it because of a peculiar fact about our industry: we reinvent our languages and notations every ten years. It’s hard to find deeply technical books and articles which stand the test of time in software: they are all Latin within 20 years.

So, I was thinking […] I could help by pointing to some papers which are easily available online and which (to me at least) point to some of the most interesting ideas about software. To me, these are classic papers which contain deep “things you oughta know” about code – the material you work with. […] It’s a rather personal list of foundational papers and papers with deep ideas. […] Most are easy to read but some are rough going – they drop off into math after the first few pages. Take the math to tolerance and then move on. The ideas are the important thing.

http://blog.objectmentor.com/articles/2009/02/26/10-papers-every-programmer-should-read-at-least-twice

Clean Code Developer

January 4th, 2009

CCD Logo

Professionalität = Bewusstheit + Prinzipien

Softwareentwicklung braucht Profis. Was aber sind Profis? Menschen die mit der Softwareentwicklung Geld verdienen? Nein, das CcdTeam meint, es gehört mehr und anderes dazu.

Professionalität in der Softwareentwicklung hat nichts mit Geld zu tun. Sie hat auch nur bedingt mit einem bestimmten Ausbildungsweg zu tun. Wir kennen professionelle Softwareentwickler, die wenig oder gar kein Geld mit ihrer Software verdienen; und wir kennen professionelle Softwareentwickler, die weder Diplom noch Doktortitel haben.

[…] Wir glauben, die Branche sollte nach Anerkenntnis des Problems einfach mal nur einen kleinen Schritt machen. Weder müssen die Curricula von Masters-Studiengängen neu definiert werden noch ist die Gründung eines Verbandes zwingend.

Viel einfacher glauben wir, dass “es” schon besser würde, wenn wir alle auch nur ein Buch gemeinsam gelesen hätten. Schon die vereinte Zustimmung zu den Aussagen in nur einem Buch würde einen Konsens herstellen, der viel bewirken könnte.

Wir meinen, mit Clean Code von Robert C. Martin solch ein Buch gefunden zu haben, das der gemeinsamen Lektüre würdig ist.

Es ist kein perfektes Buch und auch wir stimmen nicht allem darin vorbehaltlos zu - aber es ist ein Buch “im rechten Geist”: es ist ein Ausdruck profunder Reflektion und hat den Mut, ein fundamentales Wertesystem zu formulieren.

[…] Letztlich ist aber auch das nicht in Stein gemeißelt. Morgen erscheint vielleicht ein noch besseres Buch. Gut so! Aber an dem, was wir meinen, dass Professionalität ausmacht, ändert das nichts. Deshalb fangen wir einfach mal an. “Nicht lang schnacken, Kopf in Nacken” - so sagen die Hamburger, wenn sie einen Korn (norddeutscher Schnaps) in der Hand haben. Und so wollen wir es auch halten: Ganz im Sinne der Agilitätsbewegung nicht planen bis zur Bewusstlosigkeit, sondern etwas tun. Einen kleinen Schritt machen in Richtung mehr Professionalität.

Wer hat Lust mitzumachen?

Wer will CleanCodeDeveloper werden? Es ist ganz einfach!

http://www.clean-code-developer.de/

Programming in Python 3

December 4th, 2008

Now that Python 3 final has been released I thought it would be a good time to mention that there’s a new book to go with it:

“Programming in Python 3:
A Complete Introduction to the Python Language”
ISBN 0137129297

I’ve been working on this for more than a year, testing the examples against every Python 3 alpha and beta, and against the final release (using Python’s unit test and doctest modules of course:).

The book has just gone into production and should be available in print at the end of this month in the U.S., and a month or two later elsewhere. The book’s web page has links to a draft of the introduction and to safari books online where you can read extracts.

The book is aimed at a wide audience, but assumes some programming experience (not necessarily Python, not necessarily object-oriented). It teaches solid procedural style programming, then builds on that to teach solid object-oriented programming, and then goes on to more advanced topics (e.g., including a nice way to create validated attributes by combining class decorators with descriptors). But even newcomers to Python 3 should be able to write useful (although small and basic) programs after reading chapter 1, and then go on to create larger and more sophisticated programs as they work through the chapters.

Mark Summerfield

http://www.qtrac.eu/py3book.html

The Gift of Time: Celebrating the Work of Gerald M. Weinberg

November 25th, 2008

Internationally respected for his innovative thinking on both human and technical issues, Weinberg is recognized as a pioneer of software testing, starting with Project Mercury in 1958. A highly influential author, lecturer, and consultant, he draws on experiences gained in all three roles, as well as from a long technical career as a software developer and researcher. Jerry has written on topics ranging from computer systems and programming to education, problem solving, and writing.

Jerry Weinberg is the author of The Psychology of Computer Programming and more than forty nonfiction books. His blend of wit, storytelling, and jaw-dropping insight has won him fans around the world.

Featuring tributes by Fiona Charles, Bob Glass, James Bach, Michael Bolton, Jean McLendon, Sherry Heinze, Sue Petersen, Esther Derby, Willem van den Ende, Judah Mogilensky, Naomi Karten, James Bullock, Tim Lister, Johanna Rothman, Jonathan Kohl, Dani Weinberg, and Bent Adsersen.

http://www.dorsethouse.com/books/gift.html

Real Men Do JavaScript

November 17th, 2008

JavaScript is the most widely used dynamic language in the world and is becoming increasingly important as an application programming language. While many hard core developers are still in denial, Web 2.0 application developers from small and large companies are developing increasingly complex applications that run close to the user.

Dave Thomas

http://www.jot.fm/issues/issue_2008_11/column3/index.html

Stubbing For Fun, Profit, and Survival

November 17th, 2008

Anyone reading or watching the news these days knows that IT project budgets will be tightening further than you may already be experiencing. Although proponents of some languages and platforms claim to provide lower development costs, many others firmly believe that it is the habits of the developers who prefer those environments (more than the environment itself) that leads to rapid results. One of these habits is the proper use of method stubs. By proper, let me define that as stubs that facilitate the development process first, and checking off done on a project plan second.

Scott Nelson

http://www.developer.com/java/article.php/3779616

Best Programming Books Ranked by Programmers

October 24th, 2008

I’ve been a programmer for over 20 years now, and I’ve read a lot of programming related books in order to improve my skills and keep up with technology. I’ve always wanted to write an article about my favorites. I finally did , and the response was overwhelming. As with all Top x lists, many people disagreed with my choices. I also discovered a lot of books I had overlooked and now plan to read sometime in the future.

All of this led me to thinking about a way to allow everyone to pick their top 5 programming books they think every programmer should read, and aggregate the results and make some sort of master list of the best books. That’s how this site came to be. The goal of this site is to make it easy to find the best programming-related books, which in turn will make you a better programmer.

Shane Sherman

http://www.programmingbooks.org/

Stack Overflow

September 15th, 2008

After a very short, five-week private beta, we’re opening Stack Overflow to the public today. Here’s how it’s supposed to work. This is a community project, so I’m being careful to avoid saying this is how it will work… that’s up to the community. But this is roughly what I have in mind.

Every question in Stack Overflow is like the Wikipedia article for some extremely narrow, specific programming question. How do I enlarge a fizzbar without overwriting the user’s snibbit? This question should only appear once in the site. Duplicates should be cleaned up quickly and redirected to the original question.

Some people propose answers. Others vote on those answers. If you see the right answer, vote it up. If an answer is obviously wrong (or inferior in some way), you vote it down. Very quickly, the best answers bubble to the top. The person who asked the question in the first place also has the ability to designate one answer as the “accepted” answer, but this isn’t required. The accepted answer floats above all the other answers.

Already, it’s better than other Q&A sites, because you don’t have to read through a lot of discussion to find the right answer, if it’s in there somewhere.

Joel Spolsky

http://stackoverflow.com/

Clean Code: A Handbook of Agile Software Craftsmanship

August 14th, 2008

Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way.

Noted software expert Robert C. Martin presents a revolutionary paradigm with Clean Code: A Handbook of Agile Software Craftsmanship. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code “on the fly” into a book that will instill within you the values of a software craftsman and make you a better programmer—but only if you work at it.

What kind of work will you be doing? You’ll be reading code—lots of code. And you will be challenged to think about what’s right about that code, and what’s wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft.

Clean Code is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code—of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code.

http://www.pearsonhighered.com/educator/academic/product/0,3110,0132350882,00.html

Alice

August 6th, 2008

Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience.

http://www.alice.org/

An Introduction to Real-Time Java Technology

July 21st, 2008

Real-time computing is often associated with high speed, but this is only one part of the picture. At its core, real-time computing is about predictability — the knowledge that the system will always perform within the required time frame. The deadlines involved need not be very short — though they sometimes are — and the consequences of missing a deadline may not be dire — though they sometimes are. The key to whether an application is a real-time one has to do with whether its requirements include temporal constraints.

Brian Goetz,
Robert Eckstein

http://java.sun.com/developer/technicalArticles/Programming/rt_pt1/

Why programmers should play Go

July 14th, 2008

Go is an ancient strategy game with simple rules and a profound degree of complexity. Software development is the art of managing complexity using a limited number of rules, structures, and patterns. Programmers should play Go.

Jon Dahl

http://railspikes.com/2008/7/14/why-programmers-should-play-go

Measuring Architectural Complexity

July 14th, 2008

A two-ton granite boulder is massive but not particularly complex; a delicate strand of DNA, although tiny, is incredibly complex. Similarly, a software-intensive system consisting of 15 million SLOC might actually be architecturally simple; a storage- and powerlimited hard-real-time embedded system might involve only a few thousand lines of code yet be so tightly crafted as to be very complex. How do we measure architectural complexity? How do we judge that one system is “more complex” than another?

Grady Booch

http://www.computer.org/portal/cms_docs_software/software/homepage/2008/s4arc.pdf

Taming Trees: B-Trees

June 24th, 2008

This article discusses the reasons why ordinary sorted trees don’t work well as indexes and explains B-trees (pronounced “bee trees”), the data structures that are actually used by databases to build index structures. It also offers a B-tree program (in both Visual Basic and C#) for download, but none of the code is included the article body because it’s fairly involved.

Rod Stephens

http://www.devx.com/dotnet/Article/38097

Patterns of persistence

April 23rd, 2008

Although many developers use object-relational mapping (ORM) tools for their applications’ persistence tier, some are confused about how to use them and duplicate code unnecessarily. The authors’ experience constructing many persistence tiers has given them a clear understanding of persistence patterns and best practices. The first part of this two-part article covers the basics of a consistent, concise domain model and persistence tier.

Ryan Senior
Travis Klotz
Jim Majure

http://www.ibm.com/developerworks/java/library/j-pop1/?S_TACT=105AGX01&S_CMP=HP