Home  Up

Programming Articles

Development process and methods
Object-oriented programming (OOP)
Functional programming (FP)
NEW Languages
NEW Technical

Development process and methods

Fred Brooks, Jr. No Silver Bullet: Essence and Accidents of Software Engineering

A classic article from the author of The Mythical Man-Month

Not only are there no silver bullets now in view, the very nature of software makes it unlikely that there will be any...
Steve McConnell Classic Mistakes Enumerated

36 don'ts of software development

Hacknot Extreme Deprogramming

The nature of XP

The Skeptical Software Development Manifesto

The over-enthusiastic and often uncritical adoption of XP and Agile tenets by many in the software development com­munity is worrying.


Nick Corcodilos
IT talent shortage, or management failure?
  1. Companies advertise with overly-narrow job descriptions.
  2. Companies permit HR to screen candidates.
  3. IT workers are disgusted and leaving the field.
  4. HR continues to rely on the big job boards
  5. Companies try to hire talent rather than develop it.
  6. ... companies hire only when they are desperate
  7. ... companies lose their best people
Actually, many companies don't even hire talent. They hire specific skills and experience, making it very hard for capable newcomers to enter the market and for experienced programmers to switch to new technologies.
Phil Haack
10 Developers For The Price Of One
Good Developers...
...take Ownership so You Don't Have To
...Write Code With Less Bugs
...Write Maintainable Code
...Do More With Less Code
Actually, ten mediocre programmers will cost you several times as much as one really good programmer. And their code will be buggier, will take longer to develop, will use more of your time, and will be more expensive to maintain.
raganwald What is managing software development?

Object-oriented programming (OOP)

Steve Yegge Execution in the Kingdom of Nouns

How much of a program should really be objects?

Verbs in Javaland are responsible for all the work, but as they are held in contempt by all, no Verb is ever permitted to wander about freely.

Functional programming (FP)

defmacro Functional Programming For The Rest of Us
bhurt-aw The Functional-Relational Impedance Match

Lazy lists are dramatically better than objects for interacting with relational databases.

By concentrating on the row level and demoting the relation level to second class citizens, [OOP] totally misses the power and point of relational calculus.
Martin Fowler Closure

Closures in Ruby for the imperative programmer.

Christopher Diggins Typing like a Functional Programmer


MarkCC Why Haskell?

Like Lisp and Smalltalk, it shows you a new way to think about programming.

Paul's Pontifications "No Silver Bullet" and Functional Programming

The author believes functional programming really is a "silver bullet".


coffeemug @ defmacro
The Nature of Lisp

Look! Up in the sky! It's Ant! It's XML! It's a preprocessor! It's Lisp!!!

The enlightenment came instantaneously. One moment I understood nothing, and the next moment everything clicked into place. I've achieved nirvana.
Joel Spolsky The Perils of JavaSchools
I have never met anyone who can do Scheme, Haskell, and C pointers who can't pick up Java in two days, and create better Java code than people with five years of experience in Java...
Paul Graham Revenge of the Nerds
We want to write a function that generates accumulators...
In the other languages mentioned in this talk—Fortran, C, C++, Java, and Visual Basic—it is not clear whether you can actually solve this problem.
Mike Vanier Scalable computer programming languages

This article, written in 2001, reviews popular languages for use in large projects. Updates were added in 2003 and 2006. The author is a CS lecturer at Cal Tech.

  • ... the presence of pointers and the absence of [garbage collection] ... makes C++ non-scalable ...  2003: Even though C++ is monstrously complex, the ability to write code that moves smoothly from a bit-level of abstraction to a fairly high level of abstraction is extremely valuable for many projects ...
  • The abstraction level of both C# and Java is mediocre; ... not nearly as good as languages that support both object-oriented and functional programming (such as Lisp and Ocaml).
  • Eiffel is quite a scalable language, certainly more so than C++, Java, or C#. I personally find the lack of support for functional programming quite stifling, but I'd rather program in Eiffel than in Java, C++, or C# any day.
  • Python ... [is] a great language for writing small programs, but when the program source code is longer than about a thousand lines I start wishing I had a type checker.
  • Perl is incredibly non-scalable; I dare you to try to understand any Perl program of more than a hundred lines or so.
  • Lisp is, quite simply, a brilliant computer language. ... it's not easy to get the kind of absolute type safety in a Lisp program that you'd get in (say) an Ocaml pro­gram. Still, I really like Lisp and I think that every serious programmer needs to learn it.
  • Unfortunately, Dylan hasn't yet caught on ... Dylan has the potential to be a very scalable language.
  • Ocaml has almost all of the typical features that I've identified as giving a com­puter language more scalability ... It's also incredibly efficient for such a sophist­icated language ... Ocaml is by far my favorite computer language ... Ocaml is a long way from perfect.... On the other hand, none of these problems are show-stoppers, and I predict that Ocaml is going to become a major force in the world of programming languages ...   2003: While I still think Ocaml is an out­standing language in many respects, there are significant things I don't like about it. ... The object system doesn't support multimethods ...   2006: I still think Ocaml is a great language, by the way.
  • ... if you only want to learn one programming language out of all the ones I men­tioned, please do yourself a favor and learn Ocaml. It's not perfect, but it's the best language I've ever used. If you have the time to learn two languages, the other language should be Common Lisp or Scheme.
  • 2006: I think Haskell has the potential to be the most scalable language ever, but the learning curve is monstrous. ... [Haskell's] purely-functional nature allows you to combine components arbitrarily, and they always work the way you expect! ... However, ... dealing with I/O and mutable state requires more work than in most languages ...


Paul Graham Great Hackers
A great programmer might be ten or a hundred times as productive as an ordinary one, but he'll consider himself lucky to get paid three times as much.
Jake's Programming Blog How to Waste a Lot of Money in Software Development
Change Personnel   The most expensive thing a company can do is fire or lay-off someone.
Rewrite Your Code   Throwing away code is like firing a bunch of workers.
Maniacally Minimize Cost   When someone hires ten mediocrities at $30K/yr less, they SEE savings of $30K/yr, but what they don't see is that if they had hired one good software developer at $90K/yr, they would not have to hire ten of them, just one.
Donald Knuth Literate Programming (pdf)
Note that more comments does not mean more readable code.
ririan project 5 Reasons To Take Naps
Too Much Code End of software's dark age?
... the messaging model in Erlang prevents many types of timing problems. Functional languages may eliminate the many types of bugs which arise from side effects. The essence of a design should not be concerned with timing or unexpected side effects, so whenever possible this should be solved in the language itself. ... Code in object-oriented languages often includes many unessential objects that are just noise from a high-level view.


Ray Djajadinata
Y Combinator for Dysfunctional Non-Schemers

Very nice introduction to the Y combinator, using examples in JavaScript.

... I come across these mental landmines like "pass the function as the first argument to itself", and my brain will just explode ...
Actually, it's not the whole function. It's just a reference to the function.
Jonathan Bartlett
Lazy programming and lazy evaluation
Sometimes by delaying an evaluation until just before the value is needed, you can either optimize the speed of a program or restructure a program into a more intelligible form.
D. A. Turner
Total Functional Programming (pdf)

The author proposes a super-pure functional language that's not even Turing complete, but the only programs that can't be written in it are ones that don't terminate. A special type called "codata" is required for programs that aren't supposed to terminate.

The existing model of functional programming ... is com­promised ... by the presence of partial functions. We consider a simple discipline of total functional programming designed to exclude the possibility of non-termination. Among other things this requires a type distinction between data, which is finite, and codata, which is potentially infinite.
© 2006–2007 Dan Bensen   Home   About   Site map