Over the next few weeks I would like to try and track down
and read a few interesting viewpoints on programming. So
I am trying to compile a list of things that I should be
interested. I don't care if they are Perl specific, in
fact if anything I might prefer if they are not. For
instance I was interested by the following set of
notes on one
programmer's opinions about language design trade-offs
even though Perl was not one of the langauges discussed.

And likewise, even though I don't agree with several of
his premises or conclusions, I found Richard Gabriel's
Mob Software
article fun and educational.

So does anybody have more to recommend?

Comment on
Any interesting philosophy of programming articles to recommend?
Replies are listed 'Best First'.

I don't know if you have access to this, but in the
ACM digital library there are all the articles of
Jon Bentley's famous "Programming Pearls" column,
including the (out of print and therefore "lost") articles
that are collected in "More Programming Pearls". Old,
but still worth reading to me.

Update:
There is a new book out that should be very interesting reading: "Software Fundamentals. Collected Papers by David L. Parnas". A recommendation in the ACM journal compared it to "The Mythical Man Month" in terms of importance.

Judging from the first two, I will enjoy Alistair Cockburn's papers. It will take me a while to get through that. :-)

I should also note that on my home node there are quite a few random links. People who are looking through the various links in this thread might also like to follow some of them.

And a random exercise for the brave that just came up in chatter. Keep a log of bugs you discover in your own code, with notes about what you think caused the bug. Review that log periodically. If you feel truly brave, have someone you respect review said log with you. Excellent, if painful, way to learn what you personally need work on.

I'm not sure if this is exactly what you are looking for, but here is a great article about how to prevent internet game hacking. Its one of the better ones I've read on the subject, and it clearly lays out just what exactly developers are up against and suggests several solutions to fight back. Its a good read, especially if you are into gaming at all.

Here is a topic to help you get out of the box, maybe something will click for you.
You may already know about visual programming languages such
as ToonTalk and Pictorial Janus.
A short and fascinating article about these two programming systems called
"Drawings on napkins, video game animation, and other ways to program computers"
is available on ToonTalk's Papers page
in Word and Postscript, and an interesting essay there
about concurrency, describing how Toontalk eliminates deadlocks and beats the pants off of Java at threads, due to its lightweight model based on a universe which follows physical rules.

Some neat movies of PJ are also available. I realize this is probably not what you seek, but please note that Perl plays to our linguistic talents, while some people are
better at spatial reasoning than at thinking in words. It is also evident from the above
essay on concurrency that it is possible to build a system which by
its architecture resolves whole genres of headsplitting
problems. And Perl newbies may pick up the English-sounding
commands relatively easily but might prefer explaining a complex datastructure with a pen and paper instead of dealing with all the brackets, parentheses, and diacritical marks you need to build and access them in Perl.

I think there are similar fault lines in thinking inside
real-world software projects as well, not just in terms of
technical expertise either. As the Mob Software article
suggests, the pressures they generate lead organizations to latch onto
fashionable methodologies.. perhaps you will find a solution?..

Update: The following post didn't show up on the page
There's also Max
from Opcode Systems. I've played with it (a visual programming
tool that lets
you do anything with midi and serial cables),
a friend was able to turn seismographic live from California
into body-shaking sonics at a Tokyo art museum. The interface
(which animates as it runs, and can be pulled and tweaked on
the fly) is very good for technical artists.

It will take me time to get to trying to understand how they work. But another alternate computing model that I found very interesting was Flow-Based Programming. Toontalk's model sounds somewhat similar, though with more complex interactions available.

I once dabbled in a bit of Flow-based programming to develop a visual 'pipe' program in Java, to the point where the basics worked including plug-ins, visual editing, etc. However, I believe others have superceded my work with actual released projects :-)

But I'm curiously interested in developing something similar in perl with some sort of GUI. The back-end really isn't that hard, and with typelessness of perl, data transfer's a lot easier to handle. The fun, of course, comes when it's time to set up all the intra-process pipes and threads. Ugh. :-)

But to come down to the point, there's several different ways to think of flow-based programming. The one that seems to be most popular is that as used with Macromedia's products, where you have a flow-chart, and user-interactions determine which way you go down it. In this case, this is much less like flow-based programming than procedural programming with events. On the other hand, something where data flow is unaided by the user save to initiate it, whether part of a gui or not, is more interesting to think about.

For historical interest. the first book I cam across.
The interesting thing was that the translator heavily annotated the books so his opinion completed the one
of the original author. I don't know if there is more
up to date editions:

An aspect-oriented language is a programming language that provides constructs for capturing units that crosscut the system modularity in a principled way. These units are called aspects, and are a new unit of software modularity that encapsulate crosscutting concerns.

After reading a case study, I have to admit that they
did something new to me. I would have to see a few more
examples and let it sit to see how I could use it, but
that is just how I learn.

I was vaguely reminded of how
Coroutines
in C managed to get C to act like it had coroutines,
which it manifestly does not, by rewriting the C in a
clever automated way. I don't think that is very close
to what the AOP people are doing, but it was what came
to mind for me. (BTW I got that link from japhy a
while ago.)

I really like the book "AntiPatterns in Project Management"
by William J. Brown, Hays W. "Skip" McCormick III,
and Scott W. Thomas.

The book is entertaining and the situations the book
describes ring true. There is much programming
philosophy in the book,
with topics such as constructing demos, prototypes,
problems with legacy code, etc.

Antipatterns are fun to read about and
they address the real-world issues that harm
your code and development processes.

The book is light reading, perhaps aimed mostly at
managers. There are other books on antipatterns,
also.

A few more links, though if I have tread the trail already in
your page forgive me - it is hard to chase my trail back to
the beginning.
I also recommend reading Marvin Minsky's online
papers because
he realizes that social issues have a heck of a lot to do
with the programming job that is building Artificial Intelligence.
I just read his
Introduction to Logoworks
again which you might like.