Why (Some) Smart People Hate Programming

Thom Dixon said this while we were circle-jerking about how Python sucks (and why math is an incredible way to “program”). He said,

I guess I hate programming because it feels like not only am I fighting my own ignorance, but I’m fighting the language designer’s too.

I liked the quote and so should you. It really captures two things:

  1. why most programming languages are terrible,
  2. why most programmers are terrible (this is implied subtly I think), and
  3. why programming languages usually end up being a catalyst for people to make more languages.

Consider BCPL to C to C++ then to Obj-C/C#/D/Vala/etc. Yes languages can evolve and that’s not quite the issue, but — well, the Smug Lisp Weenies said it best:

No, we want that engineers stop bitching about the language, and start writing applications and libraries. It seems like a week doesn’t go by, when some young whipper-snapper doesn’t come out with some new-fangled programming language that is just some ho-hum rehash of something that came before. So predictable. They spend all their time working on “tools” or “productivity” enhancements, that the applications they could have written in Lisp will wait decades to see the light of day.

I guess this is why I personally like Lisp. Once you get past some of the idiosyncrasies, you realize it’s a tool-set for creating just about any abstraction. I know Lisp isn’t universally accepted due to its looks (you can read my criticisms about that in an earlier post) or whatever other reason (perhaps legitimate), but it at least covers the whole “add a feature if you need it”-base, which I’d say covers most of the issues language creators gripe about. As an example of the syntactic flexibility, see this and this, two pieces of code I write which allow you to use a friendlier array-element notation and a lambda function notation.

By the way, I only mentioned Vala in the list of C-derivatives above because it’s so terrible I had to mention it.

31 comments to Why (Some) Smart People Hate Programming

  • “why programming languages usually end up being a catalyst for people to make more languages”

    It is also true, IME & IMHO,

    “[frameworks] usually end up being a catalyst for people to make more [frameworks]”

    because there is so much stylistic and functionality friction between different developers and projects. It seems more like underwear than umbrellas: One size doesn’t really fit all.

  • [...] This post was mentioned on Twitter by bartezzini and others. bartezzini said: Why (Some) Smart People Hate Programming: Comments http://goo.gl/fb/5JUkH [...]

  • Chris

    1) For people who REALLY REALLY like Lisp (I merely appreciate it), every other programming language sucks.

    2) Most programmers suck because most human beings are not very smart. Most doctors also suck. Because someone can learn PHP or plow their way through medical school does not make them good at the resulting profession.

    3) Stroustrup correctly said there are two types of languages: the ones everyone complains about, and the ones nobody uses.

  • I disagree with all ya’ll. Been writing code since ’85 and doing so to “get the job done” with whatever works best, at the time, for the task at hand. Stroustrup apparently missed a 3rd type – very popular languages that a) get lots of tools and libs made for them [because they are popular] and b) some of us don’t complain about them because said language let us get a [good] job done.

  • I think that people who write such things are not involved in real world programming, but rather academic research. Real world programming sucks, it sucks very hard. But You don’t care about the language is it shiny, is it cool but as Gary wrote, is it working.

  • Dave

    Wait… Why Lisp then? The (used to be younger) Lisper-snappers came up with something that they dreamed would supplant assembly, right? Dang it, people, stop with all the syntax. Languages are for weenies! Get yer magnets back out and start flipping your bits the old fashioned way!

  • The language is a minor issue (usually) – See

    How to write computer programs – at http://www.civilized.com/programming.html

    (and see the Lisp book there too, if you are interested.)

  • Mike Hat

    The problem is that we have always been at the mercy of the hardware. It still basically unable to execute elegantly. Maybe a mega-core net of mini Von Neumann machines would prove that Math is actually the language at the center of it all. Nothing short of a hardware revolution will demonstrate that imperative languages to be a lousy layer on a lousy platform for abstraction.

    But we are all waiting for some brilliant theoretician or engineer to set Lisp (or Haskell, or whatever) free.

    Or is there a better math than Lambda Calc for getting good jobs done well?

    It seems that there are some excellent opportunities for progress. Complaining about the current crop of C variants is easy and fruitless.

    • We already had this hardware (Lisp machines) with an ingenious operating system (Genera). It was just more expensive than cheap IBM clones where C was faster.

      We have the technology, but we’ve dug a hole so deep that no one wants to get out of it, and just continue to accept C/C++/whatever.

      • Mike Hat

        Well, I was thinking of something quite a bit more different than a tricked out C processor. I know that great work was done to create the OS(s), etc. And that some tangible, lasting innovation happened in that group. However, my point is that C and friends are designed specifically to control a monolithic, serial instruction pipeline. All else is second-order fluff.

        Math (not Lisp) has less relation to time. We force computation into the time dimension, which is very much against the Truth represented in our statements. The number of cycles it takes to get an answer should not be a function of the algorithm. Your brain does massive “computation” in a single cycle. That’s what I’m getting at.

        We can define a bitmap representation of a cube mathematically, taking positional inputs and maybe some lighting specs. Once the inputs are specified, the answer is simultaneously defined. Reality is defined in less than one cycle. Until our hardware can be configured to do our mathematical dirty work in a single cycle, we are stuck with telling idiotic circuitry to do simplistic things.

        Of course, processing lists is another matter. Counting cycles may be as difficult as count list items. Maybe processor power will be measured in terms of both algorithmic complexity and list length (handled in a single time slice, of course).

        The original premise, that Math is the one true programming language, will only bear fruit when our hardware can handle the truth.

        BTW, even my 8-yr-old daughter scratches her head when I write $x = x + 1$. I resolve to belittle any language that supports such blasphemy.

        • Okay, thanks for the clarification. I see what you mean now.

          I suppose even stuff like Lisp machines didn’t really handle Lisp in the way humans (should) think of Lisp. It did end up pouring out a list of instructions to be fed into, as you say, a “monolithic, serial instruction pipeline”. What what you said totally makes sense and I get it now. Thanks!

  • Ken Ciszewski

    Programming languages look like they are familiar (especially to those who write and speak the English language), but in fact, they are essentially foreign languages–they have their own syntax and semantics that are different from those of the English, or any other, written language. Getting used to the (non-intuitive) syntax and semantics is a challenge, as is typing in the resulting commands, variables, etc. which is physically difficult to do.

    The need for parentheses and braces in special places to capture the meaning of many programming language constructs also makes things more difficult–keeping track of braces and parentheses is a pain, even in the newer IDEs that help one keep track of them.

    Someone should write a language that uses English language-style paragraphs for methods/functions with a period at the end of each completed line/command inside methods/functions instead of a semicolon, and an exclamation point at the end of the paragraph that forms each method/function. Commas could be used within methods/functions for while, do while, or if then else structures to show how portions of these kinds of statements “hang together.”

    This would be a lot more intuitive than what we have now. Just because programming languages are supposed to create abstractions doesn’t necessarily they have to be wildly and unituitively abstract themselves.

    • That is utterly asinine. English should not be used as a method to describe something so completely different from English. English is verbose and ambiguous. Programming languages should be the opposite, of course balancing the need for explicitness required by the machine and abstract meaning required by human authors / readers / maintainers.

      In my experience, the language itself is rarely the issue. Programmers are the problem. Most programmers suck, and that isn’t likely to change. Most people suck at English, too.

      • Haha, “most people suck at English, too.”

        I agree with what you say. And when you say “programmers are the problem”, I agree with that sentiment and probably something more important to fix than problems in languages these days.

    • Mike Hat

      Learn another language. Preferably spoken, and non-Euro. Or even dissect a real conversation. Paragraphs and periods are conventions applicable to a pretty narrow band of communication. Plain-English functions would be a novelty, but Math is the singular language to be used for building machines.

      Let’s use English to control machine representations of English-speaking humans, like C3PO. Or HAL. Of course, I’d much rather be telling a machine what I want for breakfast in complete sentences than telling a modern-day desktop zombie to do my taxes Math or Haskell or Java.

    • @Ken Ciszewski –

      Have you ever looked at COBOL?

      @everyone else

      Before anyone quotes Dykstra (“COBOL damages the mind…”) COBOL is still actually running an awful lot of the real world out there. And pretty successfully too. It might not be the best ever abstraction but it maps well onto the things you need to get business done, like records and files. And it handles arithmetic better than anything except perhaps FORTRAN.

  • Raphael Milani

    I disagree this article. Why LISP resolves some or all problems? Some problems I could resolved with Java or PHP or ObjectiveC and etc. I think depends the experience of developer which languages which he feels more productive or the system’s requirements force to use certain programing languages.

    It’s my simple opinion.

    • The reason I emphasized Lisp as the solution to “some or all” problems is because the language can mold to your needs, not the opposite.

      If a system requires X and Y, Lisp can most likely be modified/changed to do so in a standard way.

      Of course if one doesn’t have the time or will to make such changes, then I suppose it’s appropriate to use those tools to do the job. But then I wonder, “why wasn’t lisp just ‘modified’ in the first place and distributed as a library for others to use, instead of inventing an entirely new language that can only be used for one thing, and disconnects completely with the rest?” And I think this idea is what the Lisp quote emphasizes.

  • John

    Ahh yes, another Lisp f*ckstick fanboy who hasn’t obviously read Dijkstras summary on your atrocious language, which isn’t a language at all. Lisp is simply a way to waste time writing languages, instead of getting real work done. It reminds me a lot of the Linux philosophy, Linus wanted a system that he could screw around with in his closet, not a system that got work done. For people that needed to get real work done, they were to use windows. FOr people who need programs finished on time, they use Delphi, C++, C, why do you think that is? and of course PHP and Java when it comes to internet websites. Why do you think that languages have succeeded while lisp hasn’t? Really, why do you think certain animals in nature have succeeded more than others? yes it has something to do with evolution – Lisp has lost in evolution because it sucks.

  • Joseph Stalin

    Lisp still has too many parentheses.

  • face_it

    programming sucks…everyone who says there will never be any self-perpetuating software are mentally deranged…any tedious, time consuming, expensive task that CAN be made routine WILL be made routine…

    even software ‘design’ will be automated…the 70G prog jobs CS grads could look forward to have been sent to India for 15G’s…your defensiveness on this is as absurd as those who once thought no one would want to drive themselves anywhere and if they could, wouldn’t any way…poor trains, eh? ( they’ll make a comeback, big time..you wait ;) ).

    do a quick, cursory, even superficial search on how rapidly some tech has changed in just the last 10 years ( versus doing such comparisons over a century, as they once were ), and you should be able to see the writing on the wall…

    ‘this’ language or ‘that’ language will be irrelevant discussions…and those concerned about them will be at least as irrelevant…

    anything that can be done cheaper, faster, and more reliably will be routined…

    people who are not programmers, never took a lick of CS anything, and hobbyists can write mobile apps nearly as easily as people learned to WYSIWIG sites in the 90′s…non-programmers write widgets for os x, design banners for Firefox….people can set up their own home networks more and more…

    and business gets no pleasure in the pain of laboring inefficiently and talking about how great that is ( unlike programmers! )….it gets pleasure making a profit…any reason to cut costs will be done as that’s the deal with business…

    instead of asking these questions, why don’t you start answering questions that aren’t answered yet ( by the general population ) instead of questions that have ( about the future of programming languages )?

  • there must be some language that rocks though…and is readable by humans…non trained humans, that is.

  • Bob

    First off I’d like to give kudos to everyone for not allowing the discussion to devolve into some amateur hour language war fest. Secondly, having used Lisp I need to say that the parenthesis thing is the least of my worries with the language. In fact the parenthesis makes the dynamic parsing more efficient (if you think about it), so I tend to think it was an intentional and somewhat intelligent design feature. I’d be more worried about the how dissociated Lisp is. You can’t write a program in one Lisp and expect it to work in another. That sucks. Java is good for this and saves an awful amount of precious life. Also a lack of a standard library that allows the user to interact natively with the OS and to develop GUI’s are essentially what keeps Lisp a “academic language”. I could even venture to say that Bjarne screwed up his C++ by refusing to add better standard library support (instead electing to made it more complex so hard-core computer science nerds can spent countless hours trying to one up each other on their knowledge of modern c++). Better standard library support makes a language a lot more portable and therefore practical. You can kind of sense where I am going here. I think Lisp is a very advanced language, but I think the golden language is one that truly supports a write once run anywhere theme. I know this sounds weird but I think javascript is becoming this language because it has the unique ability to essentially sit on-top on all the low-level crap that hard-core geeks like to work on and allows normal folks to build applications. In this vein I think java is great because it’s probably done 1000x more for the world (even poor people)than Lisp ever did. Java gets shit done and that’s important if you actually want to build stuff that people use and makes the world a better place to live in. Isn’t this the purpose of technology? But even Java is limited. The greedy privacy invading people at Google decided to ditch Java’s standard library for it’s own by making a completely new standard library for Android. In short they don’t want to give Oracle any leverage. Even Apple won’t allow Java anywhere near it’s precious OS. I really F-ing hate how these corporations decide to go rogue and do their own thing, thus creating a whole new f-ing ecosystem that people have to learn and spend countless hours of their precious life on just to relearn how to create a simple hello world GUI. With this said, I hate programming in general. We are still in the dark ages. Until there is more of a common ecosystem to develop in that doesn’t require a masters or Phd in computer science, or having to learn a whole new language or paradigm, progress will never take off like it should. I’m not advocating dumbing it down, I’m advocating true portability, accessibility and practicality. Getting shit done without compromising on safety, low-level access, and advanced features. We are close to getting there but the powers that be seem to want to keep us dependent on their own re-hashed technology.

  • ahmed

    i didn’t read all the above .
    but , can’t i just make the program language then start using it .

  • painfully boring

    1. thou shalt not make any programming book more than 200 pages.
    2. I do see a future, where programming is vastly simplified.
    3. So simplified, programmers will be out of work.
    4. My biggest gripe with Programmers is their hubrisx10x3.14. I’ve met too many game developers who literally think they should be awarded Ph.D’s. for
    basically being in the right town, with the right friends. I know this has vastly changed since to 90′s. Now these guys, just talk about the good ole
    days, where they got free sodas. By the way–I’ve always hated computer games. They bore me to tears– literally. I know that’s not a cool thing
    to say.

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Before you post, please prove you are sentient.

What is 5 * 4?