Neal Ford on Modern Programming Languages: Expressivness matters a lot

Neal Ford

Neal Ford from ThoughtWorks talks about ancient philosphers and what old lessons still work for modern problems today.

In your keynote you will refer to ancient philosophers. In fact, Plato, Aristotle &Co. are the founders of logical formalization. Are their concepts already comparable to programming?

Complementary but not comparable. In my keynote, I trace the line from they way Plato solved problems through Aristotle’s essential and accidental Properties via Occam to arrive at one of the core problems in software today: accidental complexity. I’m trying to highlight 2 things: first, that technologists ignore the past (both ancient and recent) at our peril. We seem to think that only new things have value. And second, that many of the things we tend to think of as unique to software really exist in almost identical ways in the”real” world.

In ancient Athens logical thinking was considered as one of the highest capacities of human beings. Today this is done by computers. What’s the then left to us humans?

Thinking is not done by computers! Computers following literal instructions, they cannot make logical leaps. Logic done with circuits is not the same as logic the way humans apply it. In fact, the least interesting part of programming is the mechanicalapplication of syntax to the problem. The right brain insight driven development is much more interesting (finding design patterns, emergent design, etc.), and that’s a wholly human activity. Scientists have been working on artificial intelligence for a long time, and have made little progress. I don’t fear that computers will be smart enough to do anything useful for a long time.

Which ofthe “old lessons” are still working for modern problems – and which do definitely not work today any more?

If you read books like Fred Brook’s Mythical ManMonth, written in 1975, it is striking what is applicable to today’s software development and what isn’t. He talks at some depth about how to manage projects that use lots of mainframe assembly language, and the virtues of encapsulation. We’ve pretty much figured that out, and have languages and tools that allow us to mostly ignore that level of abstraction (just like we don’t think about hard drives as spinning platters of bits, but rather metaphorical files and folders). The problems that we haven’t solved are the process and management problems. Even after 30+ years, people look for silver bullets, and Fred Brook realized they don’t exist in his book. Those who do not remember the past are doomed to repeat it (George Santayana). Lore is important in software, and understanding the past allows usto leverage the mistakes and insights that are already there.

If we talk about modern programming languages, are there some which you consider more rich from a philosophical standpoint than others? Or is it only about pragmatism and efficiency?

If you look at modern programming languages, expressiveness matters a lot. One of the common themes in modern languages on the JVM are higher expressiveness and less restricted behavior. The languages try to shorten the distance from intent to result. The Saphir-Whorf hypothesis says that the language you use effects the kinds of thoughts possible. If you use a more expressive language (computer or otherwise), you have a richer vocabulary. There are reasons that languages borrow phrases from other languages, because they are richer in connotation. Expressiveness matters.

Neal Ford
Neal is an application architect at ThoughtWorks. He is also the designer and developer of applications, instructional materials, magazine articles, video presentations, and author of the books "Developing with Delphi: Object-Oriented Techniques", "JBuilder 3 Unleashed", and "Art of Java Web Development." Neal has also spoken extensively at national and international conferences.

Inline Feedbacks
View all comments