How I grew to hate every computer language
In the beginning, I knew Basic. Those were good times. The Apple II was a pretty decent machine to learn to program on. It actually didn’t take me long to run into the fundamental limits of basic programming, even as a kid. In particular, it was insanely slow. I wanted to write games like the games that were already on my computer. I had learned graphics programming and everything but basic (QBasic in particular) just couldn’t keep up. There were probably dirty hacks that would make it work, but at the time I realized I needed to switch to a “real” language, and so I bought a C book.
The syntax phase
In this phase, I knew many languages, and I liked them all.
I learned C and some of C++ on my own. They made me learn Pascal in high school. And then Java as a freshman in college. I liked all of these languages. They were basically all the same. It was just a matter of trading one syntax for another.
All of the features of each language that made them different were of no interest to me. I didn’t use, need, or want any of those features. I saw no need for them. C++ had templates. Who needs that nonsense? Java came with a ton of libraries. That was alright but it seemed like you were just trading one problem (a lack of features) for another (the need to be married to huge piles of documentation). I was always the kind of guy who preferred working from first principles.
The blub stage
I knew many languages, but my favorite was the one I used the most.
As I got farther into college and began to learn programming languages in depth, I began discovering the holes that these advanced features filled. I learned, like I usually do, from the “problem end”. I knew of the solution but never bothered to really learn it until one day a problem arose and finally the feature became justified. I began diving into various magical features of my favorite language. At the time, this was C++. I was operator overloading. I was using multiple inheritance. I was a big fan of templates. I became quite accustomed to the advanced features of C++ and every other language seemed quite lacking. They all had features I didn’t need, and were missing features I did.
The grass is always greener stage
Here, I knew many languages, but my least favorite was the one I used the most.
It takes a long time of using your “favorite language” and all of its features to be able to see the “beauty” in another language and exactly what you are missing. When you are locked into that single language, you don’t see how it could be improved. Eventually, though, I came to realize that other languages had some truly fantastic things to offer. This is when I learned Lisp, Python, and Ruby.
C++ had so many abusive warts. It wasn’t until I saw these problems fixed in other languages that I even knew they could be fixed. I was so sick of ugly templates and insanely verbose code. I was so sick of static typing and bizarre template hacks to get around it. I was so sick of operator overloading creating so much magic it was hard to understand. I was so sick of symbol names being mangled to pieces. I was really sick of error messages that lasted pages and pages.
And now, I hate all of them
Slowly, over time, I played around with all of those other “grass is greener” languages. As I began trying more and more languages, I kept finding things I hated in them. Over time, I became better at this. I’ve done this enough to realize things I hate about a language before I’ve really even dove into it. It still stands though that the less I know about it, the less I hate it. C++ is pure frustration. C is so slow (to develop in, not to run in). Ruby and Python have some serious greatness but also some serious annoyances.
I’ve heard really nice things about D. Maybe I’ll play with that.
August 17th, 2009 at 11:21 am
Try OCaml.
August 17th, 2009 at 11:21 am
You may want to do your own programming language, then.
However, you may want to first learn a pure functionnal language (Haskell), and a concatenative language (Factor, Joy, Forth…).
August 17th, 2009 at 11:27 am
Do yourself a favor and learn Haskell. You’ll still hate it, especially during the initial “Why can’t I just modify one little variable?” phase, but you’ll get a whole lot of perspective out of it.
August 17th, 2009 at 11:31 am
D is nice, but it as some significant hangups that make it less than ideal. If you are looking for some idealized that is relatively free of warts, you should not look at D. I’d suggest Haskell.
August 17th, 2009 at 11:33 am
I think there is a huge problem with what we call ‘languages’ and ‘languages with full apis’. Sure C may have let someone write Unix at a time, but now a language should have all sorts of niceties.
The power is in the API, not the language’s syntax and base objects.
I fine the iphone os (and mac os x, openstep, nextstep) to be with a moderately annoying language (still less annoying than java). There are libraries to do pretty much everything. If you wanted that with C on linux you’d have to import in a million different libraries that may or may not have problems with each other, much less your own code.
August 17th, 2009 at 11:35 am
Try LOLCODE, http://lolcode.com/
August 17th, 2009 at 11:44 am
Try Haskell. It’s different and will teach you a lot. It’ll be your favorite language you never get to use.
August 17th, 2009 at 11:49 am
I recommend APL. Very rapid to hack something together. Scales up well on multiprocessors. No I/O as everything is a multidimensional array. Basically it is just mathematics extended to include array transformation and computation operations.
August 17th, 2009 at 11:59 am
Hey, if we’re all recommending our favorite languages, I’ll second the D opinion – it has warts, LOTS of warts, but it’ll also show you that templates can be beautiful, and that you don’t always need to sacrifice high-level features for speed.
Good luck in any case.
August 17th, 2009 at 12:39 pm
Perl, IMO , owns but it has serious warts
August 17th, 2009 at 12:46 pm
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.
August 17th, 2009 at 12:54 pm
go back to the future: http://www.powerbasic.com
seriously, no runtime. true compiled windows. tons of libraries or make your own. only knock i have is no 64 bit support yet.
-don
August 17th, 2009 at 12:58 pm
otherwise known as ‘I love them all equally as much’.
August 17th, 2009 at 1:00 pm
It sounds like you need something with a different concept than what you are familiar with like Lisp, Forth, Smalltalk, etc. Basic, C, C++, Java, etc aren’t much different other than syntactic sugar. You need a language with a different way of thinking about software problems. D is nice, but it’s not revolutionary. It’s a better C++.
August 17th, 2009 at 1:13 pm
Try Tcl/Tk. Get over the perception that it’s obsolete and not being improved. Tcl has better, native, threading than any of the other scripting languages; it has simple syntax; and it tends to be used by engineering types rather than computer science types. Of course, you might not ever find a language that you actually like. If that turns out to be the case, you might be the problem, not the languages.
August 17th, 2009 at 1:15 pm
don’t learn a language, learn a problem and work back, any problem will do and if the langauge fixes it then that langauge will do
August 17th, 2009 at 1:41 pm
That was pretty much how I felt about programming until Haskell restored my love of programming languages by giving me types that helped me think instead of getting in my way.
August 17th, 2009 at 1:43 pm
As I am currently learning and enjoying Scala, I would like to recommend it.
August 17th, 2009 at 2:08 pm
Another vote for Scala, from someone in the python/c++/haskell camp.
August 17th, 2009 at 2:34 pm
I have never hated Tcl.
August 17th, 2009 at 2:44 pm
Yoman,
True.
August 17th, 2009 at 3:01 pm
D is awesome design, however in practice you’ve got old and already known-to-have-flaws D1 and super-cool D2, which isn’t finished.
And there you have two incompatible libraries and a promise that it will be fixed someday…
So D’s motto is “we know it sucks, we’re working on next cool thing already”.
August 17th, 2009 at 3:30 pm
What are you talking about? OF COURSE languages have flaws. That is exactly why programming is fun, is it not? That is why programmers are needed, why we still have to write programs.
True, Java is verbose, C++ is hairy, C is detail-oriented, Haskell is weird, verbose, and so bossy at once, Scheme looks bad, Lisp is excessively out of this world. However, that is why it is fun to program. To overcome the weaknesses of the languages, to expression one’s solution elegantly even on the shaky ground provided to us, to make the computer do things previously impossible, these are the real challenges, and thus the sources of fun, in programming. Without them, what would our profession be?
I just cannot help to despair over a world full of easiness. Why bother sharpening your skills when your computer has all answer ready for you? Why bother explore when all possibility has been mapped out? Why bother risk when such thing bears no better result? A world without hardships, thus without challenges, would be such a dull and dark place to live in.
Thus, I think we should cherish the weaknesses while we can. Soon enough, technology will advance enough to advance itself, and we humans will be left aside, dull and dark.
August 17th, 2009 at 3:46 pm
I have been through almost an identical sequence of stages over the past 25+ years. I wouldn’t use the word “hate”, but I’d be hard-pressed to say that I “like” any existing programming languages.
August 17th, 2009 at 4:14 pm
I hear you bro.
Another vote for the APL world — specifically, the K language. Just throws away _all_ the abstraction, proves that it’s unneeded, makes programs 10 to 100 times shorter though speed competitive (with an interpreter, no less).
K is what I consider the practical sweet spot. J is more complete and mathematically inclined, APL has its beauty and baggage. But K rules.
If you hate all programming languages, you might as well try one that keeps the amount of code (in tokens) to a minimum. Bugs have less places to hide that way.
August 17th, 2009 at 4:14 pm
If you really want to learn to hate all languages, you should cross the software – hardware divide and learn a hardware definition language like Verilog or VHDL. Then, your journey will be complete.
August 17th, 2009 at 5:31 pm
I agree, most mainstream languages often copy bad ideas from each other. Like you said, you can avoid a lot of trouble by learning to recognize the bad ideas like: unnecessary syntax, a concurrency model that requires locks/threading, platform lock-in and closed source. You can also learn to recognize good ideas: minimal syntax, functional style, lock-less concurrency model, and open source.
Programming languages all have some degree of issues, so they are like women, you cannot live with them, but you cannot live without them.
August 17th, 2009 at 5:37 pm
I don’t think there is a perfect language but the one that comes closer to nirvana is definitely Lisp.
August 17th, 2009 at 5:58 pm
So many good comments and various offbeat languages that may be the holy grail. I hate to be cynical but I doubt I’ll ever really “love” a language again. I have no idea how universal that feeling is and what it says about those of us who feel it.
On a side note, @albin, yes, “hate” was probably strong word.
August 17th, 2009 at 6:25 pm
Louis, I had the exact same feeling two years ago. I was very sceptical about loving a language again (i was into C++/ocaml at this time). For me programming had always been something quite vital and I felt some despair about what my job would be if my passion was vanishingly small.
Then i started to use D and it was an truly refreshing experience. I’m perfectly happy now language-wise. Sure, the language is not perfect but it may be the one with the less annoying factor. This is a quite unknown fact because its users seems to be mostly über-perfectionnists types tired of C++, and they won’t praise it loudly.
August 17th, 2009 at 6:34 pm
I think you probably just need to realize that you don’t like programming. A language is just a tool; it shouldn’t be enough to turn you off of something that you enjoy doing. The beauty of a program is in the algorithms and flow of data to reach a final goal or purpose and maybe rinse an repeat if necessary. Either you like that or you don’t. The language won’t make you like it better.
August 17th, 2009 at 6:35 pm
I need something with the performance of C, the syntax-free elegance of Lisp without all the dumb parenthesis (something like Tcl), the libraries of Perl (CPAN), and integration with C++ libraries like wxWidgets, SDL, etc.
Haven’t found anything remotely close to the above, however I do have a soft spot in my heart for Tcl, Perl, and Clojure.
August 17th, 2009 at 6:49 pm
>>> I need something with the performance of C, the syntax-free elegance of Lisp without all the dumb parenthesis… Haven’t found anything remotely close to the above
dx1, let me introduce you to Factor: http://factorcode.org/
August 17th, 2009 at 7:23 pm
Scala is extremely well thought out. It compiles and runs on JVM so you’ll get to actually use it. Complexity is Scala is the good kind – it’s rewarding to understand. My favorite languages: Javascript (the Douglas Crockford one) and Scala.
August 17th, 2009 at 8:30 pm
I cannot grok the purpose of the people offering advice on new languages to try through the comments. Are they jokes?
I enjoyed the read; and fear the day when I hate all that I know.
August 17th, 2009 at 9:10 pm
Maybe it’s time to embark on a new career, or could it be that something else is lacking in your life and you’ve been trying to fill the void with hacking? Life’s too short to spend time focussing on something that leaves you unsatisfied, maybe it’s time for a strategic life review. hth
August 17th, 2009 at 10:55 pm
Maybe you should dive into a language that you think you wont like… I did that with java and now love it
August 18th, 2009 at 2:49 am
Get. Life. Now.
August 18th, 2009 at 5:55 am
Ahh you have reached that point in your career where every tool is rubbish. This phase like all others will pass and be replaced with something different. This stage is tough, how you react to it determines if you become the bitter old hat or the industry teacher.
August 19th, 2009 at 7:45 am
Try Rebol it’s unlike any other
http://reboltutorial.com/blog/rebol-grand-unification-theory/
August 19th, 2009 at 8:15 am
Your problem is you stayed with the imperative languages. You need some FP in your life! Restore the balance, man, find the beauty. Haskell will show you the way…
August 19th, 2009 at 8:26 am
Give a functional programming (Not necessarily pure) language a try. On the JVM there’s Scala and on .NET there’s F#. Like any language, both have warts, but they are quite a refreshing change. Three pages of C#/Java code will often turn out to be half a page of FP.
August 19th, 2009 at 12:07 pm
Way ahead of you, I already hate D.
August 22nd, 2009 at 12:25 pm
Lua!
A tiny language, you can learn it in a day; yet it’s object oriented and gets a lot done with very little syntax. Also, there are very fast implementations almost rivaling C for speed. Also, a rich ecosystem of libraries and add-ons. This is one language I really had fun with, hence my recommendation.
Scala is also a great language, whose authors have learned from the mistakes of many earlier languages. However, it’s definitely not a “for dummies” language. While far better in many ways, its complexity is roughly on par with that of C++.
August 23rd, 2009 at 1:51 pm
The most fun I ever had programming was creating simple arcade games on a Commodore 64 in 6502 assembler. Sadly, there’s not many jobs that call for it anymore.
August 29th, 2009 at 12:14 am
Oddly, I think hating the languages has almost nothing to do with how much you love programming. For me, it’s always been about how to express myself unambiguously to the computer with minimal effort. I was once fluent in C++, and could easily chat with the computer to get what I wanted done; it was a joy. With some disuse though, I found that programming wasn’t nearly as fun. It was like taking a year of French and then going to France: sure I could fumble around, but nowhere near the elegance to feel good about it.
The only time I care about the language now is when I get some joy from creating something elegant by exploiting a language’s characteristic. Otherwise, the language is just another way to talk to the computer; convenience dictates this more often for me than elegance, sadly. But I’m not a programmer by trade, so perhaps my perspective is a bit out of the loop.
August 31st, 2009 at 9:22 am
try Smalltalk (for instance with the MIT free pharo-project.org)
and you will be surprised.
These books should help you getting started:
http://stephane.ducasse.free.fr/FreeBooks.html
September 1st, 2009 at 5:50 pm
Try a well-integrated blend of JavaScript, PHP, and HTML–There’s no telling what languages you’ll love after that! If you don’t commit suicide first….
(I’m currently doing this for work; this is one of the things that has driven my to try Haskell and Lisp. If only I had the time to learn these things more deeply!)
September 10th, 2009 at 7:12 pm
you need to cool down man
September 10th, 2009 at 7:14 pm
what is computer language?
September 28th, 2009 at 11:56 am
Cool story, bro.