{ on programming and the internets }


by Louis Brandy

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.

trackback

51 Responses to “How I grew to hate every computer language”

  1. August 17th, 2009 at 11:21 am

    Stas says:

    Try OCaml.

  2. August 17th, 2009 at 11:21 am

    Loup Vaillant says:

    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…).

  3. August 17th, 2009 at 11:27 am

    UMH meme fan says:

    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.

  4. August 17th, 2009 at 11:31 am

    Joel McCracken says:

    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.

  5. August 17th, 2009 at 11:33 am

    racy_rick says:

    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.

  6. August 17th, 2009 at 11:35 am

    sloser says:

    Try LOLCODE, http://lolcode.com/

  7. August 17th, 2009 at 11:44 am

    haskell says:

    Try Haskell. It’s different and will teach you a lot. It’ll be your favorite language you never get to use.

  8. August 17th, 2009 at 11:49 am

    Uncompetative says:

    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.

  9. August 17th, 2009 at 11:59 am

    FeepingCreature says:

    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.

  10. August 17th, 2009 at 12:39 pm

    Sidek says:

    Perl, IMO , owns but it has serious warts

  11. August 17th, 2009 at 12:46 pm

    Nick says:

    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.

  12. August 17th, 2009 at 12:54 pm

    don dickinson says:

    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

  13. August 17th, 2009 at 12:58 pm

    nullbot says:

    otherwise known as ‘I love them all equally as much’.

  14. August 17th, 2009 at 1:00 pm

    anon says:

    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++.

  15. August 17th, 2009 at 1:13 pm

    Scott says:

    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.

  16. August 17th, 2009 at 1:15 pm

    yoman says:

    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

  17. August 17th, 2009 at 1:41 pm

    Edward Kmett says:

    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.

  18. August 17th, 2009 at 1:43 pm

    peter says:

    As I am currently learning and enjoying Scala, I would like to recommend it.

  19. August 17th, 2009 at 2:08 pm

    derek says:

    Another vote for Scala, from someone in the python/c++/haskell camp.

  20. August 17th, 2009 at 2:34 pm

    jima says:

    I have never hated Tcl.

  21. August 17th, 2009 at 2:44 pm

    Juan Valdez says:

    Yoman,
    True.

  22. August 17th, 2009 at 3:01 pm

    kl says:

    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”.

  23. August 17th, 2009 at 3:30 pm

    Magice says:

    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.

  24. August 17th, 2009 at 3:46 pm

    Albin says:

    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.

  25. August 17th, 2009 at 4:14 pm

    Ori Berger says:

    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.

  26. August 17th, 2009 at 4:14 pm

    Tim says:

    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.

  27. August 17th, 2009 at 5:31 pm

    LadiesMan says:

    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. ;)

  28. August 17th, 2009 at 5:37 pm

    jast says:

    I don’t think there is a perfect language but the one that comes closer to nirvana is definitely Lisp.

  29. August 17th, 2009 at 5:58 pm

    louis says:

    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.

  30. August 17th, 2009 at 6:25 pm

    #ponce says:

    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.

  31. August 17th, 2009 at 6:34 pm

    dude says:

    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.

  32. August 17th, 2009 at 6:35 pm

    dx1 says:

    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.

  33. August 17th, 2009 at 6:49 pm

    tom23 says:

    >>> 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/

  34. August 17th, 2009 at 7:23 pm

    mt says:

    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.

  35. August 17th, 2009 at 8:30 pm

    anonymouse cow art says:

    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.

  36. August 17th, 2009 at 9:10 pm

    Irish Corndog says:

    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

  37. August 17th, 2009 at 10:55 pm

    CodeJustin says:

    Maybe you should dive into a language that you think you wont like… I did that with java and now love it :)

  38. August 18th, 2009 at 2:49 am

    Wolf says:

    Get. Life. Now.

  39. August 18th, 2009 at 5:55 am

    Paul Keeble says:

    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.

  40. August 19th, 2009 at 7:45 am

    reboltutorial says:
  41. August 19th, 2009 at 8:15 am

    Shaun says:

    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…

    ;)

  42. August 19th, 2009 at 8:26 am

    Rick Minerich says:

    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.

  43. August 19th, 2009 at 12:07 pm

    Alex says:

    Way ahead of you, I already hate D.

  44. August 22nd, 2009 at 12:25 pm

    Carl Smotricz says:

    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++.

  45. August 23rd, 2009 at 1:51 pm

    Shawn says:

    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. :(

  46. August 29th, 2009 at 12:14 am

    Andrew says:

    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.

  47. August 31st, 2009 at 9:22 am

    ABC says:

    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

  48. September 1st, 2009 at 5:50 pm

    Alpheus says:

    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!)

  49. September 10th, 2009 at 7:12 pm

    fxyblake says:

    you need to cool down man

  50. September 10th, 2009 at 7:14 pm

    fxyblake says:

    what is computer language?

  51. September 28th, 2009 at 11:56 am

    bro says:

    Cool story, bro.

Leave a Reply


Need a new job?