00:00:11.420
I sat at Max's table, and he invited me to come to Matsue to speak at a conference there. It was a bizarre experience, I'll tell you. The mayors would come out to greet all these American rock stars, and of course, I'm no rock star. I had my tiny little business.
00:00:37.739
How many of you have coded in at least two of the languages on the list? The languages are Ruby, IO, Prolog, Scala, Erlang, Closure, and Haskell. How many of you have heard of 'Seven Languages in Seven Weeks'? It seems not many have made it all the way through the book yet.
00:01:21.479
We have seven languages to get through in about 35 minutes. This was the most interesting writing project I've ever encountered because of the breadth of the material. Initially, the goal was to write the same difficult problem in seven different languages, but after a chapter or two, I realized it was more important to show a problem that really worked in each language.
00:02:10.020
The goal became to take someone to the point where they could solve a non-trivial problem in seven different languages. Technical challenges kept coming until I finished the last chapter, and even afterward, they continued. It was mind-boggling to learn that many languages and get to the point where I could teach something interesting in them.
00:02:34.500
The first writing challenge came when I turned from page 34 to 35, transitioning from Ruby to IO. I thought something was missing. Although the transition looked okay, it was hard to move the reader's mind from one language to another. My editor and I brainstormed and eventually decided to associate each programming language with a movie character.
00:03:30.300
Along the way, I wanted to do this not just with these seven languages but with other influential languages. We'll go through the languages in chronological order and discuss the influences of other languages that impacted them or were relevant at the same time.
00:04:37.620
So we’re going to start in 1972 with Prolog. What movie does this remind you of? Rain Man, right? I thought this was a good analogy because Prolog seemed so alien to me when I was writing a Prolog application. There were times when I wondered how Prolog knew certain things and times when I questioned how it didn't.
00:05:16.320
In 1972, if you were writing a high-performance application, you'd use Assembly Language. Just to give you an idea, C-3PO translates languages; he translates English-like code to machine code. If you were writing a business application, you'd use COBOL, and for a scientific application, you'd likely be using Fortran.
00:05:51.539
Prolog was a fascinating language that really changed my way of thinking. I had to adopt a different mindset. The non-trivial problem I decided to solve in Prolog was a Sudoku puzzle. I initially approached the problem in Ruby, creating a couple hundred lines of code and implementing several solution techniques. With Prolog, I didn't have to think about techniques.
00:06:47.520
I simply defined the problem. The first line states that an empty list is valid, and the second line describes the conditions for a valid list. It was about recursively defining a board while ensuring all rows, columns, and squares were valid.
00:07:44.099
This is what a Sudoku solver looks like in Prolog. I found that whenever I faced constraints or logic problems, I could reach for Prolog and have a solution in 20 minutes instead of spending weeks on Java or Ruby.
00:08:10.440
Prolog was the first language in the book that significantly changed my thinking.
00:08:25.080
Next, let's discuss Erlang. This is Agent Smith from the Matrix. How many of you have written any Erlang? What do you think of its syntax? Personally, I find it powerful but lacking soul, akin to Agent Smith's character. While I was coding Erlang, I was also engaged with some other languages. This is basic syntax, and then Visual Basic—these languages paved the way for many individuals.
00:09:35.040
During this time, I was coding in Pascal, which I see as a wise language, not super intelligent but well-structured. Smalltalk was also gaining traction at that time, influencing Erlang's development.
00:10:27.480
In Erlang, Hello World looks different than in Prolog due to the system’s requirements for being live all the time. When considering scalability and reliability, I think of features that might handcuff developers, such as strong static typing.
00:11:03.000
Erlang took an alternative approach using a very effective virtual machine. It monitors processes and guarantees that you will receive notifications about any failures. For example, I created a trivial application resembling Russian Roulette, where a certain condition would end a process, while another would continually generate new processes.
00:12:13.500
Now, let's move on to Haskell, which challenges many programmers. Creating a language committee led to Haskell's establishment, where several influential languages were debated. Haskell introduced the concept of monads for input/output, an essential part of its purity in functional programming.
00:14:50.460
In Haskell, you define functions that return values, without mutability. For example, functions defining Fibonacci sequences leverage lazy evaluation, significantly enhancing efficiency. I realized that my preconceived notions about strong static typing were mistaken; Haskell's type system is beautiful and allows for sophisticated code.
00:18:40.740
As I work with Haskell, I find its type inference reduces the need for excessive type definitions, leading to a rich problem-solving environment.
00:20:56.400
Next, let’s transition to Scala. This character, Edward Scissorhands, symbolizes the complexities of the Scala language, bridging object-oriented and functional programming. Scala integrates multiple influences, including those from Haskell on typed models and lazy processing. We also see influences from Java and C# as Scala operates on both the JVM and CLR.
00:23:33.960
The way one feels about Scala often depends on their programming background. For those transitioning from Ruby, it feels restrictive, while Java programmers may find Scala more liberating.
00:25:00.120
Let’s talk about IO language. Created during an era marked by the rise of Rails, IO is known for its prototype-based approach, allowing dynamic object manipulation. It is a messaging-centric language that excels in concurrent performance and has seen adoption in several surprising fields.
00:28:53.220
The last discussed language is Clojure, a modern Lisp dialect designed to run on the JVM. Clojure is known for its reliance on immutability, robust concurrency controls, and rich library support. Java needs the refresh that Clojure brings.
00:30:02.820
Finally, we arrive at Ruby, which represents the magic and passion in programming, akin to Mary Poppins. Ruby instills joy and creativity into programming while allowing for significant flexibility.
00:31:40.920
The iconic statement 'Hello, world!' captures the essence of Ruby. As I wrote my book 'Seven Languages in Seven Weeks', I reflected on how each language offers unique insights. Although I appreciate various languages, Ruby remains where I want to be.
00:33:29.040
There is a lot to learn from the other languages, yet Ruby captures vital attributes that keep me engaged. The expressiveness and power of Ruby ultimately allow us to turn our programs into design documents.
00:35:24.539
Writing the book took me nearly a year and a half, with significant learning involved. Haskell was particularly daunting, especially regarding monads and state. The writing was demanding but an enjoyable experience overall. Interestingly, the decision to focus on certain languages stems from feedback from the Pragmatic Press readers.
00:37:49.839
Editing my selection involved careful consideration—choosing IO over languages like Lua or Python, aiming for diversity across paradigms. As I reflect on my experiences, I've gained valuable insights from this journey.