Thursday, August 6, 2009

Why I Hate All Computer Programming Languages

That’s All I Want to Do!

I hate computer languages because they force me to learn a bunch of shit that are completely irrelevant to what I want to use them for. When I design an application, I just want to build it. I don’t want to have to use a complex language to describe my intentions to a compiler. Here is what I want to do: I want to look into my bag of components, pick out the ones that I need and snap them together, and that’s it! That’s all I want to do.

I don’t want to know about how to implement loops, tree structures, search algorithms and all that other jazz. If I want my program to save an audio recording to a file, I don’t want to learn about frequency ranges, formats, fidelity, file library interface, audio library interface and so forth. This stuff really gets in the way. I just want to look into my bag of tricks, find what I need and drag them out. Sometimes, when I meditate about modern computer software development tools, I get so frustrated that I feel like screaming at the top of my lungs: That is all I want to do!

Linguistic Straight Jacket

To me, one of the main reasons that the linguistic approach to programming totally sucks is that it is entirely descriptive by definition. This is a major drawback because it immediately forces you into a straight jacket: unless you are ready to describe things in the prescribed, controlled format, you are not allowed to program a computer, sorry. The problem with this is that we humans are tinkerers by nature. We like to play with toys. We enjoy trying various combinations of things to see how they fit together. We like the element of discovery that comes from not knowing exactly how things will behave if they are joined together or taken apart. We like to say things like, “oh”, “aah”, or “that’s cool” when we half-intentionally fumble our way into a surprising design that does exactly what we want it to do and more. Computer languages get in the way of this sort of pleasure because they were created by geeks for geeks. Geeks love to spoil your fun with a bunch of boring crap. For crying out loud, I don’t want to be a geek, even if I am one by necessity. I want to be happy. I want to do cool stuff. I want to build cool things. And, goddamnit, that’s all I want to do!

Conclusion

Unless your application development tool feels like a toy and makes you want to play like a child, then it is crap. It is a primitive relic from a primitive age. It belongs in the Smithsonian right next to the slide rule and the buggy whip. If you, like me, just want to do fun stuff, you should check out Project COSA. COSA is about the future of programming, about making programming fast, rock solid and fun.

[This article is part of my downloadable e-book on the parallel programming crisis.]

See also:

Parallel Computing: Why the Future Is Compositional
COSA, A New Kind of Programming
Half a Century of Crappy Computing
New Interfaces for Parallel Programming
How to Solve the Parallel Programming Crisis
The COSA Control Hierarchy

27 comments:

Andy LeClair said...

You obviously haven't tried vvvv:

http://vvvv.org

It's got the easiest concurrency in history, too. Just ask _why!

http://hackety.org/2009/03/13/ctrlB.html

Steve Cooper said...

Are there successful areas of design, creativity, or engineering where amateurs can work in this 'playful' mode? Any role models to copy?

Particularly, are there fields that have ended up with solid results? For example, playful amateur architects who end up with fantastic buildings?

Rimu said...

Oh and I would like money that grows on trees

Also "World Peace"!

kthxbai

bd said...

http://xkcd.com/568/

Frame 2. Deal with it.

Calor said...

Used to love coding when it was just the code I had to focus on. Then came windows and brought with it the creature called event driven programming. Now, I had to worry about every button click and butt itch the user has. Then came the glorious days of software industrialization and stacks. It becomes more and more obscure with the only focus seeming to be the enterprise. I believe a good percent (99%?) will be met with a bunch of standard components. Its not the code itself but how it is put together. I used to have the pride that I knew most of a language. But now its impossible with the amount of toolkits and libraries (standard and otherwise).

Long lament but glad its off my head and in somewhere :) Thank you!

Markandey Singh said...

Nice....!!
but finally they only work for you!!!

fsilber said...

"We like the element of discovery that comes from not knowing exactly how things will behave if they are joined together or taken apart."

I think you would be a natural for the army's bomb disposal squad. I suggest you volunteer.

Sam said...

The language is not the hard part of programming.

This is like complaining that you can't be president without learning english first.

It's not the language that holds back armchair programmers, it's the simple fact that life is complicated. If it was so simple to do significant things with "playable" tools then we would be doing that right now. Compared with the complexity of solving meaningful problems programming languages ARE "playable".

helens said...

Build a compiler! Design a new language! It's doable - my friends and I built a simple compiler for a simple language for our PhD thesis. Take your ideas and implement them.

remaerdyaD said...

My users group is called, Anarachy - after the most common mispelling of teh word, anarchy.

Would ask you to join except we have no meetings and it does not exist.

Robert Stehwien said...

Graphical programming languages have been around for a long time - I tried using one in the 90s where you linked together flowchart images like you have shown in COSA.

E-toys for squeak smalltalk has been around for a while but does do some text scripting. Scratch looks to be pure graphical programming.
http://www.squeakland.org/
http://scratch.mit.edu/

There is even a movement called model driven development where you draw UML like stuff.

Graphical languages haven't really taken off though. There are 2 problems preventing that:

1) You still need to logically layout your thoughts to describe a process so it can be followed (until computers become smart enough to become our overlords). Most people don't have interest in or talent in communicating at that precise a level.

2) Drawing processes is a pain in the butt to change and for many just takes longer to do (especially for the tiny details). Draw out a few complicated UML diagrams for real programs and see just how annoying it is to move around boxes and lines for something as simple as typing a loop.

Mike said...

When I read this post, the not-getting-anything-done part reminded me of especially of C++, and to a lesser extent, functional programming, but also reminded me that some languages are worse in these regards than others.

Ruby and Python are two languages that, despite having obvious warts, mostly get out of your way and let you actually solve your problems (relatively speaking). Ask pretty much anyone who has programmed in them and also in a language like C++.

Centenial College said...

No problem don't be Frustrated from programming languages Do what as you like..Make a target What you wanted to do and go in that direction.

Centennial College said...

The trick to programming is to focus on the algorithm, then language becomes just a means to an end instead of an end in itself. Helps with the “tired of languages” thing… at least for me.

software systems development

Rufo said...

To the "author" of this "article":

Wow! You must have had a really hard time with programming in the past. You're basically complaining about something being "too difficult" and that "someone", not you, should do something about it. Plus, it's complicated because it's made by geeks and for geeks?! Do you even know how computers work?! Unbelievable, man! This here article is proof of the downside that comes with freedom of speech (and blogs) and that is that EVERYONE, including those who know not, get to speak up.

Louis Savain said...

Rufo,

LOL. Man, you'll be the first one on the unemployment line when the next revolution in computer programming happens. Then everybody and their cousin will be programmers. What will you do?

Rufo said...

So, just because I know the programming that is used today, I won't know the programming that might come up tomorrow? I know low level programming, so high level languages might be a no go for me? Revolution in development and (hopefully) the electronics under the hood of a PC might change, and with it, the languages that are used to interact with such systems, and I will be stuck with my ancient knowledge? There's no way I will learn such new tools, because they are just too simple for my geeky mind?

I'm all for end-user programming (which is everyone's cousin being a programmer). I'm actually currently working on a project of the sort right now, but that does not in anyway mean that all other forms of programming will become useless, until of course, the revolution takes place in the electronics inside the processor. In the mean time, translation will be required.

Now, just because you were trained to only use and re-use what you've been taught, does not mean that the rest of the world has to follow your slow pace, man.

What will doctors do when there's no more illnesses? What will pilots do when teleports are a go? What will hookers do when virtual reality is implemented matrix-style? Still, doctors don't wish people ill, and even if they do, that won't stop the progress. And when an industrial revolution takes place, you got to get on with the program, before you're rendered useless.

And sure, if after all that I end up playing Sudoku in the unemployment line, that still won't make this article or your argument in its defense any less ridiculous.

Louis Savain said...

Rufo,

It is not my fault that you don't understand the article. Your pomposity is only surpassed by your ignorance.

And yes, your skills will be completely worthless (LOL) when true compositional programming becomes common practice. And, FYI, I have been programming for decades. I have seen it all and, whether you like or not, it's all crap.

Rufo said...

So, what is it that I don't understand then? Care to explain that? Or is that going to remain a mystery here?

And you could have 8 decades of programming, you may have seen it all, but that still does not qualify you as an expert. For all I know, you may have always been a cubicle guy, always writing what others have designed, never really contributing something on your own. Credentials don't win arguments, man, at least not without some fallacious reasoning to go with it.

And what about Steve Cooper or Sam's comments? They make an excellent point too. What's your answer for them?

About the pomposity, you're right and I apologize. There's truly no need for that. It's a bad habit of mine.

Louis Savain said...

Rufo,

The point that I tried to make (you could have figured it out by clicking on some the links at the end of the article) is not that there is no complexity in software. The point is that the complexity should be hidden in a repository of pre-programmed components that are easily reusable even by non-programmers.

This is being done already to a albeit very limited extent. For example, adding a new extension to a browser is, to me at least, a form of end-user programming.

My prediction is that, in the not too distant future, programming will consist entirely of trying out existing components in various ways in order to create new components. But for that to happen, we will need to precisely define the fundamental building blocks of software and we need to find the correct way to organize them for easy reuse.

Rufo said...

Right, so... I had been through a few of your links below the article and had read mostly about the here promoted Project COSA, as well as some other articles and references I found of you before commenting. I believe, and even more now based on your answer here, that I did understand your article. I never thought you meant to say there is no complexity in software as you claim in your last response. If anything, you seem to say there is too much of it, and there should be a way to make it simpler.

Now, it also seems, based on your "it's complex because it's made by geeks" comment, that you haven't contemplated the origins of computer languages. This comment however, goes in the opposite direction of your proposal of a paradigm shift in the building of hardware, which you suggest as an introduction to your project. You seem to have contemplated that before, but not here.

Additionally, it also seems to me, based on your "unless it feels like playing, then it is crap" comment, that you are under the impression that none of that was ever intended before, as if complexity was deliberately looked for, and that you are the first person to suggest hardware modifications in order to set sail on a different course. Again, look back at the way it was done. I'm not saying it was done perfectly, but it certainly wasn't done to deliberately make it difficult.

Finally, whether your project actually holds water or not, I certainly think that the way things were done in the past were not in any way "all crap", as you so gently put it. That is the kind of comment that a person who believes himself smarter than everyone else makes.

I hope to be proven wrong about you and wish that your project flies high in a not so distant future. I don't really see a single sign that you have a real understanding, beyond the conceptual books you may read, about anything that you talk about and really just wrote this final response as courtesy, since this is way beyond the attention that anything presented in this manner deserves. I guess all I'm saying is that, pomposity aside, I stand by my initial comment.

I appreciate you taking the time to answer me, but I honestly think Sam and Steve Cooper deserved a response before anyone here. I mean, I completely agree with Sam: Computer Programming IS playable today!

Rufo said...

Right, so... I had been through a few of your links below the article and had read mostly about the here promoted Project COSA, as well as some other articles and references I found of you before commenting. I believe, and even more now based on your answer here, that I did understand your article. I never thought you meant to say there is no complexity in software as you claim in your last response. If anything, you seem to say there is too much of it, and there should be a way to make it simpler.

Now, it also seems, based on your "it's complex because it's made by geeks" comment, that you haven't contemplated the origins of computer languages. This comment however, goes in the opposite direction of your proposal of a paradigm shift in the building of hardware, which you suggest as an introduction to your project. You seem to have contemplated that before, but not here.

Additionally, it also seems to me, based on your "unless it feels like playing, then it is crap" comment, that you are under the impression that none of that was ever intended before, as if complexity was deliberately looked for, and that you are the first person to suggest hardware modifications in order to set sail on a different course. Again, look back at the way it was done. I'm not saying it was done perfectly, but it certainly wasn't done to deliberately make it difficult.

Finally, whether your project actually holds water or not, I certainly think that the way things were done in the past were not in any way "all crap", as you so gently put it. That is the kind of comment that a person who believes himself smarter than everyone else makes.

I hope to be proven wrong about you and wish that your project flies high in a not so distant future. I don't really see a single sign that you have a real understanding, beyond the conceptual books you may read, about anything that you talk about and really just wrote this final response as courtesy, since this is way beyond the attention that anything presented in this manner deserves. I guess all I'm saying is that, pomposity aside, I stand by my initial comment.

I appreciate you taking the time to answer me, but I honestly think Sam and Steve Cooper deserved a response before anyone here. I mean, I completely agree with Sam: Computer Programming IS playable today!

Rufo said...

Right, so... I had been through a few of your links below the article and had read mostly about the here promoted Project COSA, as well as some other articles and references I found of you before commenting. I believe, and even more now based on your answer here, that I did understand your article. I never thought you meant to say there is no complexity in software as you claim in your last response. If anything, you seem to say there is too much of it, and there should be a way to make it simpler.

Now, it also seems, based on your "it's complex because it's made by geeks" comment, that you haven't contemplated the origins of computer languages. This comment however, goes in the opposite direction of your proposal of a paradigm shift in the building of hardware, which you suggest as an introduction to your project. You seem to have contemplated that before, but not here.

Additionally, it also seems to me, based on your "unless it feels like playing, then it is crap" comment, that you are under the impression that none of that was ever intended before, as if complexity was deliberately looked for, and that you are the first person to suggest hardware modifications in order to set sail on a different course. Again, look back at the way it was done. I'm not saying it was done perfectly, but it certainly wasn't done to deliberately make it difficult.

Rufo said...

Finally, whether your project actually holds water or not, I certainly think that the way things were done in the past were not in any way "all crap", as you so gently put it. That is the kind of comment that a person who believes himself smarter than everyone else makes.

I hope to be proven wrong about you and wish that your project flies high in a not so distant future. I don't really see a single sign that you have a real understanding, beyond the conceptual books you may read, about anything that you talk about and really just wrote this final response as courtesy, since this is way beyond the attention that anything presented in this manner deserves. I guess all I'm saying is that, pomposity aside, I stand by my initial comment.

I appreciate you taking the time to answer me, but I honestly think Sam and Steve Cooper deserved a response before anyone here. I mean, I completely agree with Sam: Computer Programming IS playable today!

Jonadab said...

> Scratch looks to be pure
> graphical programming.

Yes, and it's painful to use for anything even slightly complicated because you can't define functions or put comments in the code or use indentation and blank lines to clarify which bits go together and/or are important for what follows, or any of several dozen other things that programmers need to be able to do when implementing anything complicated. So you end up with a lot of large jumbled unmaintainable incomprehensible blocks of copy-and-pasted tedium, and the first time you want to fundamentally improve how something works you have to spend three hours doing what should take thirty seconds.

Don't get me wrong: Scratch is a wonderful project that I'm extremely pleased to have discovered. It's great for teaching basic programming concepts (e.g., flow control) to people who have never programmed before, in a way that holds their interest and allows them to quickly begin to experience the joy of being able to create things.

But nobody's ever going to use a language like that for any really large or practical programming project. It's a toy, or an instructional tool, or both; but it isn't -- cannot be -- a general-purpose programming language, because it doesn't have what it needs. It *can't* have what it needs to be a general-purpose programming language without fundamentally changing the kind of language it is in ways that would compromise its simple and purely visual nature.

General-purpose programming languages, in order to be generally useful for programming, have to provide exactly the kinds of things, and in fact exactly the *specific* things, that the author of this post says he doesn't want: flow control (including loops) and data structures (including trees or something that can be used to make them) and the ability to implement algorithms are all rather major examples of things a programming language HAS to provide in order to be usable for, you know, programming. Languages that don't provide such things cannot be used for almost all programming projects.

It sounds to me like this guy doesn't want to be a programmer. He wants to install and use software that somebody else wrote. That's fine, but it doesn't mean there's anything wrong with programming languages. (There are of course some rather major things wrong with many if not all of them, but those things are irrelevant to this discussion.) It just means he's not a programmer.

Unknown said...

Give REBOL a try: http://easiestprogramminglanguage.com

viksam said...

I hate programming languages because i cant remember anything of them tomorrow...!