Constraints and Semantics

What makes Stack Overflow so successful? I was thinking about this the other day. What came before Stack Overflow? Mostly forums and mailing lists. And in a forum or a mailing list, what you get is a pile-up of data in basically chronological order. This turns out to be a difficult structure for asking and answering questions. So what Stack Overflow really did was this: Constrain the domain of possibilities to questions & answers Elaborate the types of communication that happen in that context, their operators and semantics You can talk about anything on a forum, or a mailing list. »

Daniel K Lyons

Literate Programming Considered Harmful

Thus, programs must be written for people to read, and only incidentally for machines to execute. — SICP I have come to feel that this mindset is mostly hogwash outside academia. The principal utility of programs is their utility. This seems obvious but is overtly contradicted by the cliche above. The market for programs that cannot be executed (or are not primarily to be executed) is precisely the book market. »

Daniel K Lyons

Various Constructed Languages

Why would one bother to learn a made-up language? Whenever I talk about constructed languages this question seems to come up. The most obvious reason is common to all (non-artistic) constructed languages: they have a smaller vocabulary and a more regular grammar, so they are all faster to learn and easier to use than any natural language. This actually helps you twice: first, because you gain a second language much faster than if you study a language far from your native tongue, and again, because going from language #2 to language #3 is much easier than going from language #1 to language #2. »

Daniel K Lyons

Prolog’s Advantage

The other day I answered a question on Stack Overflow that had to do with traversing a maze. Somewhat more idiomatically, the code would have looked like this: mazeCell(Maze, What, X@Y) :- nth0(X, Maze, Row), nth0(Y, Row, What). Before I explain what’s special about this, let’s reflect for a moment on Prolog. Paul Graham once observed: You often hear that programming languages are good because they provide abstraction. I think what we really like is not abstraction per se but brevity. »

Daniel K Lyons

Dumb Arguments for Strong Typing

I’m a big fan of Haskell. Really big. It’s my other favorite language besides Prolog. And there can be no question that a significant aspect of Haskell is its expressive and powerful type system. In a sense, it’s the face that launched a thousand type systems. There was recently a bit of a row about dynamic and static languages (in my opinion this is the winning post) and I won’t rehash it here. »

Daniel K Lyons

Operator?

By “augmenting human intellect” we mean increasing the capability of a man to approach a complex problem situation, to gain comprehension to suit his particular needs, and to derive solutions to problems. Increased capability in this respect is taken to mean a mixture of the following: more-rapid comprehension, better comprehension, the possibility of gaining a useful degree of comprehension in a situation that previously was too complex, speedier solutions, better solutions, and the possibility of finding solutions to problems that before seemed insoluble. »

Daniel K Lyons

“Expressiveness”

Which language is more expressive, Lisp or Haskell? I want to encourage you to forget the word “expressive,” or at least, strive to give it a particular sense in your language advocacy, because it means different things in different contexts, often nuanced and slightly contradictory things. When Lisp is promoted as an expressive language, what is meant is that there is a complete macro system, and it is not difficult to write either abstract code or quite frankly machine-friendly, near-optimal code. »

Daniel K Lyons

Choosing a Functional Language

People often ask me which functional language they should study first. This is my “road map” to functional programming languages. Clojure is a very nice, highly pure functional language. It’s an untyped Lisp language, which means it emphasizes syntax macros, but it is just a really nicely designed language, very well-suited to data processing and gluing together Java libraries. Haskell is the flagship typed functional language. Lots of ideas in FP reach their high water mark in this language, which is famous for being difficult to learn and very mind expanding. »

Daniel K Lyons

Classifying Your Books

If you’re like me, you’re always in search of new ways to fetishize your books. I recently started keeping track of my books *at all*—a few too many of my expensive computer science tomes have walked away without my really knowing who has them. This has to stop, but solving this problem is boring and easy. You just go install Delicious Monster or BookPedia or something. If we want to make the task harder, and thus, more fun, we have to go further than that. »

Daniel K Lyons

Virtual Reality: Not Now, Not Ever

John Carmack says VR is going to change the world. That ain’t gonna happen. Here’s why: Zero mainstream non-gaming applications The PC revolutionized the world because every office with a typewriter or a calculator eventually switched to a PC. Nearly every office function is augmented or replaced by a computerized version. A word processor is manifestly better than a typewriter. The calculator became a spreadsheet. The centerpiece of the meeting is a Powerpoint presentation; several participants are remote. »

Daniel K Lyons