44

If you have an interesting story to share, please post an answer, but do not abuse this question for bashing a language.


We are programmers, and our primary tool is the programming language we use.

While there is a lot of discussion about the best one, I'd like to hear your stories about the worst programming languages you ever worked with and I'd like to know exactly what annoyed you.

I'd like to collect this stories partly to avoid common pitfalls while designing a language (especially a DSL) and partly to avoid quirky languages in the future in general.


This question is not subjective. If a language supports only single character identifiers (see my own answer) this is bad in a non-debatable way.


EDIT

Some people have raised concerns that this question attracts trolls. Wading through all your answers made one thing clear. The large majority of answers is appropriate, useful and well written.

UPDATE 2009-07-01 19:15 GMT

The language overview is now complete, covering 103 different languages from 102 answers. I decided to be lax about what counts as a programming language and included anything reasonable. Thank you David for your comments on this.

Here are all programming languages covered so far (alphabetical order, linked with answer, new entries in bold):

ABAP, all 20th century languages, all drag and drop languages, all proprietary languages, APF, APL (1), AS400, Authorware, Autohotkey, BancaStar, BASIC, Bourne Shell, Brainfuck, C++, Centura Team Developer, Cobol (1), Cold Fusion, Coldfusion, CRM114, Crystal Syntax, CSS, Dataflex 2.3, DB/c DX, dbase II, DCL, Delphi IDE, Doors DXL, DOS batch (1), Excel Macro language, FileMaker, FOCUS, Forth, FORTRAN, FORTRAN 77, HTML, Illustra web blade, Informix 4th Generation Language, Informix Universal Server web blade, INTERCAL, Java, JavaScript (1), JCL (1), karol, LabTalk, Labview, Lingo, LISP, Logo, LOLCODE, LotusScript, m4, Magic II, Makefiles, MapBasic, MaxScript, Meditech Magic, MEL, mIRC Script, MS Access, MUMPS, Oberon, object extensions to C, Objective-C, OPS5, Oz, Perl (1), PHP, PL/SQL, PowerDynamo, PROGRESS 4GL, prova, PS-FOCUS, Python, Regular Expressions, RPG, RPG II, Scheme, ScriptMaker, sendmail.conf, Smalltalk, Smalltalk , SNOBOL, SpeedScript, Sybase PowerBuilder, Symbian C++, System RPL, TCL, TECO, The Visual Software Environment, Tiny praat, TransCAD, troff, uBasic, VB6 (1), VBScript (1), VDF4, Vimscript, Visual Basic (1), Visual C++, Visual Foxpro, VSE, Webspeed, XSLT

The answers covering 80386 assembler, VB6 and VBScript have been removed.

Community
  • 1
  • 1
Ludwig Weinzierl
  • 15,980
  • 10
  • 45
  • 49
  • 2
    Also check out this question: http://stackoverflow.com/questions/282329/what-are-five-things-you-hate-about-your-favorite-language – Cameron MacFarland Jun 07 '09 at 15:24
  • 42
    I'm shocked to see this re-opened. Stack Overflow is not a discussion site, and this question is exceedingly subjective. While we certainly might agree on certain characteristics common to "bad" languages (such as the single-char identifier aspect that Ludwig points out), there's far more potential for the sort of bitter bashing and idle reminiscing seen in Emil H's VB answer. – Shog9 Jun 07 '09 at 16:02
  • I'm locking this due to a **lot** of negative feedback from lots of different users. If you feel strongly that we should keep this alive, please take the discussion to meta.stackoverflow.com – Marc Gravell Jul 01 '09 at 20:58

100 Answers100

212

PHP (In no particular order)

  • Inconsistent function names and argument orders
    • Because there are a zillion functions, each one of which seems to use a different naming convention and argument order. "Lets see... is it foo_bar or foobar or fooBar... and is it needle, haystack or haystack, needle?" The PHP string functions are a perfect example of this. Half of them use str_foo and the other half use strfoo.
  • Non-standard date format characters
    • Take j for example
      • In UNIX (which, by the way, is what everyone else uses as a guide for date string formats) %j returns the day of the year with leading zeros.
      • In PHP's date function j returns the day of the month without leading zeros.
  • Still No Support for Apache 2.0 MPM
    • It's not recommended.
    • Why isn't this supported? "When you make the underlying framework more complex by not having completely separate execution threads, completely separate memory segments and a strong sandbox for each request to play in, feet of clay are introduced into PHP's system." Link So... it's not supported 'cause it makes things harder? 'Cause only the things that are easy are worth doing right? (To be fair, as Emil H pointed out, this is generally attributed to bad 3rd-party libs not being thread-safe, whereas the core of PHP is.)
  • No native Unicode support
    • Native Unicode support is slated for PHP6
    • I'm sure glad that we haven't lived in a global environment where we might have need to speak to people in other languages for the past, oh 18 years. Oh wait. (To be fair, the fact that everything doesn't use Unicode in this day and age really annoys me. My point is I shouldn't have to do any extra work to make Unicode happen. This isn't only a PHP problem.)

I have other beefs with the language. These are just some. Jeff Atwood has an old post about why PHP sucks. He also says it doesn't matter. I don't agree but there we are.

Community
  • 1
  • 1
baudtack
  • 29,062
  • 9
  • 53
  • 61
101

XSLT.

  • XSLT is baffling, to begin with. The metaphor is completely different from anything else I know.
  • The thing was designed by a committee so deep in angle brackets that it comes off as a bizarre frankenstein.
  • The weird incantations required to specify the output format.
  • The built-in, invisible rules.
  • The odd bolt-on stuff, like scripts.
  • The dependency on XPath.
  • The tools support has been pretty slim, until lately. Debugging XSLT in the early days was an exercise in navigating in complete darkness. The tools change that but, still XSLT tops my list.

XSLT is weird enough that most people just ignore it. If you must use it, you need an XSLT Shaman to give you the magic incantations to make things go.

Cheeso
  • 189,189
  • 101
  • 473
  • 713
  • I agree. Started using oXygen 10. Changes everything –  Jun 09 '09 at 03:30
  • 2
    XSLT is powerful enough to get some very complex stuff done, but it's done entirely without your knowledge of how it worked to begin with. That, and it's pretty processor heavy thanks to frequent recursion. – Robert K Jun 10 '09 at 21:38
  • 21
    XSLT is a sort of functional programming language. I don't find it to be that painful. – Brian Jun 23 '09 at 16:42
  • I read the first chapter of xslt about 10 times and was still puzzled. – user161433 Sep 25 '09 at 02:05
  • 1
    I am an XSLT shaman :) More seriously. almost all bullets are actually advantages. 1. "The metaphor is completely different from anything else I know". If you're a baby and your parents listened to this you'd still be a baby. 2. "The thing was designed by a committee so deep in angle brackets that it comes off as a bizarre frankenstein". Then talk with a shrink about this psychological problem. – Dimitre Novatchev Apr 24 '10 at 19:12
  • 5
    3. "The odd bolt-on stuff, like scripts". There is no such thing in XSLT. 4. "The dependency on XPath". C'mon, this is XSLT's greatest strength that makes it so powerful. Have you ever heard that XPath is not designed as a standalone language and must be hosted? 5. "The tools support has been pretty slim, until lately. Debugging XSLT in the early days was an exercise in navigating in complete darkness. The tools change that but, still XSLT tops my list". You're missing the state of the art here: Oxygen, VS 2005 +, the 10 year old XSelerator. And *my* XPathVisualizer from year 2000 :) – Dimitre Novatchev Apr 24 '10 at 19:16
96

DOS Batch files. Not sure if this qualifies as programming language at all. It's not that you can't solve your problems, but if you are used to bash...

Just my two cents.

Matt Fenwick
  • 48,199
  • 22
  • 128
  • 192
bbuser
  • 918
  • 11
  • 33
  • 19
    variables + if + goto == Turing complete – guns Jun 07 '09 at 19:38
  • I come from a windows background, but after using Ubuntu for a month... OMG. I keep trying to "ls" but it doesn't work :( Anyway, I think bash was sort of ill-conceived too, even if it is more powerful. "esac", "fi"? Seriously? What the hell is up with that? – mpen Jul 06 '09 at 05:06
  • Mark: The designer of the Bourne shell probably thought of ALGOL as a nice language :) – Joey Oct 01 '09 at 17:28
  • 2
    Yes, if I had to pick a language that maximises `installedBaseSize * terribleness`, it would be DOS batch files. *Of course* you use the `FOR` command to get a file's full path! – j_random_hacker Jun 01 '10 at 13:54
  • +1 I completelt agree. I just spent 7 hours tryingg to monkeypunch some functionality out of a batch script to launch Portable msysgit. The only thing worse than batch scripting... Batch scripting mixed with bash scripting. I know where Bourne scripting got the 'bash' name from because after I was finished I felt like bashing my head against a wall. Why can't we kill scripting languages once and for all, we have python now. – Evan Plaice Jan 25 '12 at 04:59
91

Not sure if its a true language, but I hate Makefiles.

Makefiles have meaningful differences between space and TAB, so even if two lines appear identical, they do not run the same.

Make also relies on a complex set of implicit rules for many languages, which are difficult to learn, but then are frequently overridden by the make file.

A Makefile system is typically spread over many, many files, across many directories. With virtually no scoping or abstraction, a change to a make file several directories away can prevent my source from building. Yet the error message is invariably a compliation error, not a meaningful error about make, or the makefiles.

Any environment I've worked in that uses makefiles successfully has a full-time Make expert. And all this to shave a few minutes off compilation??

abelenky
  • 63,815
  • 23
  • 109
  • 159
  • 11
    "Any environment [...] that uses makefiles successfully has a full-time Make expert" See Recursive Make Considered Harmful to fix this. Make is dense, but does not need to be *that* awful. The scary part is that the WS sensitivity was indentified as a bug when there were dozens of users, and left in *because* there were dozens of users... – dmckee --- ex-moderator kitten Jun 07 '09 at 20:19
  • Makefiles are quite simple to setup, once you learn how, and are more straighforward then setting up any IDE tool build steps. I'm working cross platform (Windows/Linux/OS X) and makefiles easily outperform anything in terms of ease of configuration. And tabs - ok probably not a best choice but so what, even though you don't like Makefiles you know you should use tab for the action line ... so it can't be that bad. And if you require make expert to set it up, show me IDE that will take 2 seconds to create new project - I keep generic Makefile that I can copy to directory and start coding. – stefanB Jun 08 '09 at 00:59
  • 7
    I'll take make over ant any day of the week. Use a decent editor that is make-aware and the tab thing is mostly a non-issue (for example, emacs does a decent job of catching whitespace problems) – Bryan Oakley Jun 08 '09 at 03:19
  • mckee's comment is amusing. Dozens, you say? heh heh. anyway with emacs and defaultcontent.el, Makefiles are pretty easy and simple. – Cheeso Jun 08 '09 at 16:36
  • This is more a reflection of people not learning how to write Makefiles correctly. – Martin York Jun 08 '09 at 18:54
  • 5
    Martin York: Recognize that most programmers want to PROGRAM, not spend significant amounts of time and knowledge on a build-system. Most of us expect the build-system to "just work". After all, we're not asking much of it, just compile and link together some source-files; little more. Make massively overshot its target niche. – abelenky Jun 08 '09 at 19:31
  • 5
    you think make is bad, pair it with automake, and you've got a diabolical global badness I refuse to attempt to debug. – Kent Fredric Jun 09 '09 at 03:04
  • 1
    I hate make. But I recognized that any attempt to build a better make will take longer than actually writing the stupid thing. Maybe it'll be something I should take up in my Copious Spare Time after I get my current side projects finished. – Paul Nathan Jun 09 '09 at 13:47
  • actually, make is pretty cool, not just for compiling. I think we need to come up with a standard similar to make without the whitespace/tab stuff, plus more Python zen: Explicit is better than Implicit (for rules). – Daren Thomas Jun 10 '09 at 06:36
  • Overall, make is cool. I can't say the same for makefiles. Having something equivalent to make with a better interface (and I'm not at all sure XML qualifies) that's still easily editable would be nice. – David Thornley Jun 18 '09 at 21:24
  • 4
    make is so problematic that there are a gazillion tools out there whose only purpose is to create and maintain makefiles: automake, qmake, cmake, Jam, etc. – Adam Rosenfield Jun 28 '09 at 21:51
  • Make does not suffer from explosions of time and space when handling incrementally larger dependency trees, unlike some of the more modern replacements. – kmarsh Jul 01 '09 at 13:04
  • "Makefiles have meaningful differences between space and TAB". Y, helo thar Python. The problem mostly goes away if you utterly refuse ever to use a text editor without an option for visible whitespace. Ever. Seriously, it looks like garbage for the first few days, then it blends right in, and for the rest of your programming life you will know wtf is wrong with the indentation in this stupid file. I think I first enabled it thanks to the Java indentation guidelines (1 indent: 4 spaces; 2 indent: tab; 3 indent: tab + 4 spaces; 4 indent: curse James Gosling unto the seventh generation). – Steve Jessop Mar 17 '10 at 05:21
  • Sure, you can use visible whitespace to work around the problem. Better would be to not have the problem at all. – Joren May 23 '10 at 13:30
79

The worse language I've ever seen come from the tool praat, which is a good audio analysis tool. It does a pretty good job until you use the script language. sigh bad memories.

Tiny praat script tutorial for beginners

  • Function call

    We've listed at least 3 different function calling syntax :
    • The regular one

      string = selected("Strings")

      Nothing special here, you assign to the variable string the result of the selected function. Not really scary... yet.

    • The "I'm invoking some GUI command with parameters"

      Create Strings as file list... liste 'path$'/'type$'

      As you can see, the function name start at "Create" and finish with the "...". The command "Create Strings as file list" is the text displayed on a button or a menu (I'm to scared to check) on praat. This command take 2 parameters liste and an expression. I'm going to look deeper in the expression 'path$'/'type$'

      Hmm. Yep. No spaces. If spaces were introduced, it would be separate arguments. As you can imagine, parenthesis don't work. At this point of the description I would like to point out the suffix of the variable names. I won't develop it in this paragraph, I'm just teasing.

    • The "Oh, but I want to get the result of the GUI command in my variable"

      noliftt = Get number of strings
      Yes we can see a pattern here, long and weird function name, it must be a GUI calling. But there's no '...' so no parameters. I don't want to see what the parser looks like.
  • The incredible type system

    (AKA Haskell and OCaml, praat is coming to you)
    • Simple natives types

      windowname$ = left$(line$,length(line$)-4)

      So, what's going on there? It's now time to look at the convention and types of expression, so here we got :

      • left$ :: (String, Int) -> String
      • lenght :: (String) -> Int
      • windowname$ :: String
      • line$ :: String
      As you can see, variable name and function names are suffixed with their type or return type. If their suffix is a '$', then it return a string or is a string. If there is nothing it's a number. I can see the point of prefixing the type to a variable to ease implementation, but to suffix, no sorry, I can't
    • Array type

      To show the array type, let me introduce a 'tiny' loop :
      
          for i from 1 to 4
              Select... time time
              bandwidth'i'$ = Get bandwidth... i
              forhertz'i'$ = Get formant... i
          endfor
          

      We got i which is a number and... (no it's not a function)
      bandwidth'i'$
      What it does is create string variables : bandwidth1$, bandwidth2$, bandwidth3$, bandwidth4$ and give them values. As you can expect, you can't create two dimensional array this way, you must do something like that : band2D__'i'__'j'$

    • The special string invocation

      outline$ = "'time'@F'i':'forhertznum'Hz,'bandnum'Hz, 'spec''newline$'" outline$ >> 'outfile$'

      Strings are weirdly (at least) handled in the language. the '' is used to call the value of a variable inside the global "" string. This is _weird_. It goes against all the convention built into many languages from bash to PHP passing by the powershell. And look, it even got redirection. Don't be fooled, it doesn't work like in your beloved shell. No you have to get the variable value with the ''

    • Da Wonderderderfulful execution model

      I'm going to put the final touch to this wonderderderfulful presentation by talking to you about the execution model. So as in every procedural languages you got instruction executed from top to bottom, there is the variables and the praat GUI. That is you code everything on the praat gui, you invoke commands written on menu/buttons.

      The main window of praat contain a list of items which can be :

      • files
      • list of files (created by a function with a wonderderfulful long long name)
      • Spectrogramm
      • Strings (don't ask)
      So if you want to perform operation on a given file, you must select the file in the list programmatically and then push the different buttons to take some actions. If you wanted to pass parameters to a GUI action, you have to follow the GUI layout of the form for your arguments, for example "To Spectrogram... 0.005 5000 0.002 20 Gaussian " is like that because it follows this layout:

    Needless to say, my nightmares are filled with praat scripts dancing around me and shouting "DEBUG MEEEE!!".

    More information at the praat site, under the well-named section "easy programmable scripting language"

  • Zoe
    • 27,060
    • 21
    • 118
    • 148
    Raoul Supercopter
    • 5,076
    • 1
    • 34
    • 37
    • 1
      the_drow > Oh yes, and I didn't even speak about the GUI description part, to allow the creation of "easy to use" forms. There's also the how to fill the "Very Long Function Name..." parameters which had to respect the layout of the form "from left to right, top to bottom". – Raoul Supercopter Jun 07 '09 at 19:34
    • 1
      +1 Wow ! In the description on the "Controlling the user" (?) command, if this : "This example uses several tricks. A useful one is seen with number_of_channels: this is at the same time the value that is passed to optionMenu (and therefore determines the setting of the "Number of channels" menu when the window appears) and the name of the variable in which the user's chosen value of "Number of channels" is stored (because "number_of_channels" is what you get by replacing the spaces in "Number of channels" with underscores and turning its first letter to lower case." – Sylvain Rodrigue Jun 07 '09 at 20:25
    • 1
      Actually appending $ to variables and functions which are/return strings was in Spectrum Basic. Assembly subroutines with CHR$(), anyone? – Anton Tykhyy Jun 07 '09 at 20:29
    • 1
      This reminds me a little of VBA actually. VBA shares a lot of its problems with your language, but its real problem comes from its mainstreamness. – Alexandre C. Aug 01 '11 at 11:24
    74

    Well since this question refuses to die and since the OP did prod me into answering...

    I humbly proffer for your consideration Authorware (AW) as the worst language it is possible to create. (n.b. I'm going off recollection here, it's been ~6 years since I used AW, which of course means there's a number of awful things I can't even remember)

    the horror, the horror http://img.brothersoft.com/screenshots/softimage/a/adobe_authorware-67096-1.jpeg

    Let's start with the fact that it's a Macromedia product (-10 points), a proprietary language (-50 more) primarily intended for creating e-learning software and moreover software that could be created by non-programmers and programmers alike implemented as an iconic language AND a text language (-100).

    Now if that last statement didn't scare you then you haven't had to fix WYSIWYG generated code before (hello Dreamweaver and Frontpage devs!), but the salient point is that AW had a library of about 12 or so elements which could be dragged into a flow. Like "Page" elements, Animations, IFELSE, and GOTO (-100). Of course removing objects from the flow created any number of broken connections and artifacts which the IDE had variable levels of success coping with. Naturally the built in wizards (-10) were a major source of these.

    Fortunately you could always step into a code view, and eventually you'd have to because with a limited set of iconic elements some things just weren't possible otherwise. The language itself was based on TUTOR (-50) - a candidate for worst language itself if only it had the ambition and scope to reach the depths AW would strive for - about which wikipedia says:

    ...the TUTOR language was not easy to learn. In fact, it was even suggested that several years of experience with the language would be required before programmers could build programs worth keeping.

    An excellent foundation then, which was built upon in the years before the rise of the internet with exactly nothing. Absolutely no form of data structure beyond an array (-100), certainly no sugar (real men don't use switch statements?) (-10), and a large splash of syntactic vinegar ("--" was the comment indicator so no decrement operator for you!) (-10). Language reference documentation was provided in paper or zip file formats (-100), but at least you had the support of the developer run usegroup and could quickly establish the solution to your problem was to use the DLL or SWF importing features of AW to enable you to do the actual coding in a real language.

    AW was driven by a flow (with necessary PAUSE commands) and therefore has all the attendant problems of a linear rather than event based system (-50), and despite the outright marketing lies of the documentation it was not object oriented (-50) either. All code reuse was achieved through GOTO. No scope, lots of globals (-50).

    It's not the language's fault directly, but obviously no source control integration was possible, and certainly no TDD, documentation generation or any other add-on tool you might like.

    Of course Macromedia met the challenge of the internet head on with a stubborn refusal to engage for years, eventually producing the buggy, hard to use, security nightmare which is Shockwave (-100) to essentially serialise desktop versions of the software through a required plugin (-10). AS HTML rose so did AW stagnate, still persisting with it's shockwave delivery even in the face of IEEE SCORM javascript standards.

    Ultimately after years of begging and promises Macromedia announced a radical new version of AW in development to address these issues, and a few years later offshored the development and then cancelled the project. Although of course Macromedia are still selling it (EVIL BONUS -500).

    If anything else needs to be said, this is the language which allows spaces in variable names (-10000).

    If you ever want to experience true pain, try reading somebody else's uncommented hungarian notation in a language which isn't case sensitive and allows variable name spaces.


    Total Annakata Arbitrary Score (AAS): -11300
    Adjusted for personal experience: OutOfRangeException

    (apologies for length, but it was cathartic)

    annakata
    • 74,572
    • 17
    • 113
    • 180
    • Awesome, +1. I work with a proprietary language that I like very much for its spareness and clarity. But the one convention it permits that can make code difficult to read is... spaces in variable names. –  Jun 18 '09 at 12:03
    • 10
      You can always tell how badly someone is scarred by how elegantly they write the language's epitaph – Mike Robinson Jun 30 '09 at 13:44
    • 1
      Ah, TUTOR. I learned TUTOR in while waiting for my WATFOR IV Express jobs to complete on a 360/195 (?). Perhaps even more horrible/unforgivable was that I actually *taught* TUTOR at UICC for a year. The only upside was that at 2AM I had a CDC Dual Cyber 6600 with 64MB *of core memory* (check it out, youngsters: http://en.wikipedia.org/wiki/Magnetic_core_memory) almost all to myself. And we had 512x512 graphics ... in 1973. And, yes, the language sucked planetoids -- giant, slime-dripping, radioactive planetoids. – Peter Rowell Dec 23 '09 at 20:31
    • Authorware was just the successor to Authority which we actually used in high-school for a bit. In general 5GLs are just silly. – Synetech Feb 26 '10 at 17:30
    • You know, I agreeg with that BUT I would love a language that allowed spaces in variable names. I have having to use camel case or underscores, very unpretty –  Mar 14 '10 at 11:53
    69

    Seriously: Perl. It's just a pain in the ass to code with for beginners and even for semi-professionals which work with perl on a daily basis. I can constantly see my colleagues struggle with the language, building the worst scripts, like 2000 lines with no regard of any well accepted coding standard. It's the worst mess i've ever seen in programming. Now, you can always say, that those people are bad in coding (despite the fact that some of them have used perl for a lot of years, now), but the language just encourages all that freaking shit that makes me scream when i have to read a script by some other guy.

    Matt Fenwick
    • 48,199
    • 22
    • 128
    • 192
    buster
    • 1,071
    • 1
    • 10
    • 15
    • 9
      The problem is not that Perl is bad, it's that it's easy enough to use that your colleagues get themselves into serious trouble. I suspect they'd screw themselves over in any language. – David Thornley Jun 08 '09 at 16:02
    • 7
      @Andrei: I rank PHP ahead of Perl because it at least has a reasonable way of passing parameters to functions - I think having to deal with $_[n] (or doing repeated shifts) is crazy. I finally gave up on using Perl for new development when I wanted to pass 2 arrays to one function and had to spend the better part of a day reading & experimenting to do what I would do easily and in seconds in most other languages I've used. – PTBNL Jun 08 '09 at 16:26
    • 5
      @David: I disagree. I usually try hard to make my programs understandable by others, but when I wrote a 3000 line suite of Perl programs, I found that even I had great difficulty maintaining it myself if I hadn't looked at it in a while. I think Python is very easy to use, probably easier than Perl, but I don't see the problems with it that I do with Perl ... or many people leaving Python for Perl, although I know several (including myself) who've dropped Perl for Python. – PTBNL Jun 08 '09 at 16:32
    • 1
      @buster, check out Moose, esp MooseX::Declare and see if you still feel the same :) – Kent Fredric Jun 09 '09 at 02:50
    • 4
      @PTBNL, wow, you wrote 3000 line suites of perl without knowing how to use an array-reference? foo(\@bar , \@baz ) ? – Kent Fredric Jun 09 '09 at 03:27
    • Kent, thanks. Can i just copy some perl file to use Moose? I'm using Perl in an environment without internetaccess, solaris, sparc architecture, no way i am allowed to install some new binary stuff there. @David, yes, i know. Problem is that it's already hard enough to understand well written Perl code, now imagine you have to deal with badly written one ;) Yesterday, i had to read a new one: Inside a function move_account() a call to moveAccount() which was at a whole another end of the file.. and thousand more of those issues. I gave up, doing everything manually, because it was faster. – buster Jun 09 '09 at 05:30
    • 1
      @Kent, Yep! Array referencing was never mentioned in the little seminar where I first started learning Perl, and it never really seemed necessary for most of the stuff I did for a while. FWIW, that 3Kloc application didn't really have much need for that sort of array referencing. – PTBNL Jun 09 '09 at 17:18
    • 4
      @PTBNL, what is the aversion to this style: sub foo { my ($name, $age, %other) = @_; } You must not have looked at any decent Perl code before you got started. There is a lot that can be learned with a cursory visit to a newsgroup like comp.lang.perl.misc. Or CPAN. A well written Perl program is like the curves on a beautiful woman. – xcramps Jun 18 '09 at 10:21
    • @xcramps: The way filehandles aren't quite normal first-class objects in Perl is like the warty nose of the ugliest woman you ever saw. :) – j_random_hacker Jun 01 '10 at 14:04
    43

    MS Access Visual Basic for Applications (VBA) was also pretty bad. Access was bad altogether in that it forced you down a weak paradigm and was deceptively simple to get started, but a nightmare to finish.

    John MacIntyre
    • 12,910
    • 13
    • 67
    • 106
    • @Andrei so you've said twice so far. If you dislike PHP so much, make your own answer rather than spamming comments. – Neil Aitken Jun 09 '09 at 12:31
    • Why is that answer so low? VB6 > VBA, yet VB6 is almost at the top. – Meta-Knight Jun 09 '09 at 13:29
    • 2
      @Meta-Knight-Don't forget it's not really a 'which language is worse', but 'which language is most popularly bad'. – John MacIntyre Jun 09 '09 at 18:48
    • 1
      Agreed that the MS Access dialect is just...whacked. Let's get queried data with `DoCmd` but edit it with a recordset that requires a different API? What were they smoking? – Avery Payne Jul 06 '10 at 00:16
    40

    Old-skool BASICs with line numbers would be my choice. When you had no space between line numbers to add new lines, you had to run a renumber utility, which caused you to lose any mental anchors you had to what was where.

    As a result, you ended up squeezing in too many statements on a single line (separated by colons), or you did a goto or gosub somewhere else to do the work you couldn't cram in.

    Nosredna
    • 83,000
    • 15
    • 95
    • 122
    • 61
      There was a renumbering utility? Man, that would have saved me some work back when I was 11. :) – rtperson Jun 07 '09 at 15:46
    • 3
      Some BASIC's had a renum command. For others the process could be truly atrocious--save your BASIC file out as ASCII, run the renumber tool on it as data, then reimport your new ASCII file as code. – Nosredna Jun 07 '09 at 15:59
    • 19
      Heh... I just used multiples of 100 for each line number, leaving plenty of room for inserting new lines... Then again, I moved on to better languages after cutting my teeth on BASIC. What a shock it was indeed to see other, similarly-impractical aspects of the language preserved in VB years later! That said, I still consider old-school BASIC a reasonably good language for beginners - it's simple, easy to use interactively, and line numbers actually do provide a reasonable abstraction for the program counter on the CPU - jumping from learning BASIC to learning an assembly language works well. – Shog9 Jun 07 '09 at 16:09
    • You started with 100s, but inside those you went to 10s, then 1s inside those. :-) – Nosredna Jun 07 '09 at 16:27
    • ok, playing devil's advocate here, b/c i, too, lost my taste for 'BASIC' sometime around 1985: the line numbers weren't really part of BASIC itself; the line numbers were just a cheezy editing mechanism b/c those old 8bit clunkers couldn't cope otherwise, right? .. well .. except that in order to pass control anywhere, you had to refer to those same numbers as targets of GOTO and GOSUB .. aw heck. Gosh I love modern languages =) – JustJeff Jun 07 '09 at 17:52
    • 3
      @JustJeff: No, the line numbers were part of the language, through and through. Structured Basic was a whole new language that was as much Pascal as BASIC. – Nosredna Jun 07 '09 at 18:01
    • 4
      Anyone here remember programming BASIC on Apple computers and using all the wonderful Beagle Bros utilities? – Barry Brown Jun 07 '09 at 18:02
    • I remember the Beagle Bros advertisements. What were their BASIC utilities? – Nosredna Jun 07 '09 at 19:18
    • First thing I did was create a tool with which you could create named 'line numbers' and then add those numbers automatically. – Jasper Bekkers Jun 07 '09 at 19:44
    • Well at least graphics programming was easy, remember `screen 1` and `screen 1` commands! It really was a the Beginners All-purpose Symbolic Instruction Code, Ah first love! – Binoj Antony Jun 08 '09 at 07:49
    • Beagle Bros had a bunch of utilities that made BASIC programming much easier to cope with. Their renumbering utility was very flexible. They had an "enhanced" version of BASIC and a BASIC compiler. There's an online museum of sorts here: http://stevenf.com/beagle/ – Barry Brown Jun 08 '09 at 08:36
    • the line numbers were there so you could do GOTO X*Y+Z ;) – SillyMonkey Jun 08 '09 at 11:54
    • @SillyMonkey. I loved computed gotos. And on-goto and on-gosub. Here's an article from when I was working at COMPUTE!. I can't remember if I edited it or not. http://www.atarimagazines.com/compute/issue87/The_Power_Of_ON-GOTO_And_ON-GOSUB.php – Nosredna Jun 08 '09 at 16:25
    • 7
      Standard practice was to increment line numbers by 10, so you had room to insert a few lines. If you need to insert just one line, you added 5. If you found you needed to insert another later, you add two or three, and start to get nervous... – T.E.D. Jun 09 '09 at 12:39
    • 2
      IIRC, Applesoft BASIC would only consider the first two characters of variable identifiers. If you tried to use variable names that did not differ in the first two characters: no errors, no warnings, just very unexpected behaviour! – cheduardo Jun 16 '09 at 09:32
    • IIRC, some BASICs used the first couple characters and the length of the variable name to identify variables, which was REALLY weird. – Nosredna Jun 28 '09 at 21:58
    • @rtperson, RENUM 100 100 – Gordon Bell Sep 11 '09 at 18:21
    • I recall actually starting to teach my little sister BASIC for a bit. Of course she just wans’t interested enough. :) – Synetech Feb 26 '10 at 17:32
    40

    No answer about Cobol yet? :O

    Joril
    • 19,961
    • 13
    • 71
    • 88
    • See my post elsewhere on MetLife English Language, a *precursor* to Cobol that our Y2K remediation company worked on. – Jim Ferrans Jun 07 '09 at 20:06
    • 13
      Actually COBOL is quite a decent language. It was created and standardised before type checking was thought of. But it was the one of the first languages to have built in type checking and automatic type conversions within a program but no type checking on subroutine calls. It is still one of the very few languages that can do decimal arithmatic properly and its handling of structures was way ahead of its time. Modern COBOL is a pretty neat language, they made it fully OO with the addition of only three reserved words, and, it supports pointers and pointer arithmatic. – James Anderson Jun 08 '09 at 02:37
    • Does modern COBOL support functions in the sense of something you can put into an expression? I found the lack of those incredibly frustrating, way back when. – David Thornley Jun 08 '09 at 15:57
    • If I remember correctly, we didn't really _use_ expressions "back in the day", except in the COMPUTE command. There wasn't any place to put a function call. – John Saunders Jun 09 '09 at 00:16
    • 11
      @John Saunders: other languages described here are just bad. COBOL is beautiful, elaborate, baroque in its terribleness. –  Jun 09 '09 at 12:27
    • I managed to avoid COBOL for 15 years, now all of a sudden I'm doing support and development with some middleware integrating a whole bunch of COBOL with web services. Frightening. – Chris K Jun 10 '09 at 14:45
    38

    MUMPS

    I worked in it for a couple years, but have done a complete brain dump since then. All I can really remember was no documentation (at my location) and cryptic commands.

    It was horrible. Horrible! HORRIBLE!!!

    dna123
    • 268
    • 3
    • 12
    • 2
      that language WTF's hard. It deserves a high ranking, with PHP. People call Perl line noise, ye gods, if perl is line noise, that code is pure bitrot. – Kent Fredric Jun 09 '09 at 03:00
    • 5
      In defense of MUMPS: It was awesome for its time. As one of the first ANSI standardized languages, the documentation was great. It was cryptic only if you used the one-letter abbreviations for commands (which everybody did). For example, you could write SET X=5 or S X=5 instead. PERSISTENT MULTI-DIMENSIONAL ASSOCIATIVE ARRAYS! Example: Storing phone numbers. SET ^PHONE("Joe Blow","home") = "867-5309" Awesome. There was also regex-like pattern matching built in. Don't get me wrong, it had its weaknesses, but there are many ways in which it still hasn't been trumped, even 40 years later. – I. J. Kennedy Jun 28 '09 at 17:36
    • 2
      I'm shocked that no one linked to this The Daily WTF classic. http://thedailywtf.com/Articles/A_Case_of_the_MUMPS.aspx – Yahel Mar 08 '11 at 18:39
    37

    There are just two kinds of languages: the ones everybody complains about and the ones nobody uses.

    Bjarne Stroustrup

    Dinah
    • 52,922
    • 30
    • 133
    • 149
    • 4
      +1. Doesn't quite answer the question but very true and relevant. I would say "make this a comment" but then it would get buried among the close-vs-reopen comments. – finnw Aug 07 '10 at 11:44
    34

    I haven't yet worked with many languages and deal mostly with scripting languages; out of these VBScript is the one I like least. Although it has some handy features, some things really piss me off:

    • Object assignments are made using the Set keyword:

      Set foo = Nothing
      

      Omitting Set is one of the most common causes of run-time errors.

    • No such thing as structured exception handling. Error checking is like this:

      On Error Resume Next
      
      ' Do something
      
      If Err.Number <> 0
        ' Handle error
        Err.Clear
      End If
      
      ' And so on
      
    • Enclosing the procedure call parameters in parentheses requires using the Call keyword:

      Call Foo (a, b)
      
    • Its English-like syntax is way too verbose. (I'm a fan of curly braces.)

    • Logical operators are long-circuit. If you need to test a compound condition where the subsequent condition relies on the success of the previous one, you need to put conditions into separate If statements.

    • Lack of parameterized class constructors.

    • To wrap a statement into several lines, you have to use an underscore:

      str = "Hello, " & _
            "world!"
      
    • Lack of multiline comments.


    Edit: found this article: The Flangy Guide to Hating VBScript. The author sums up his complaints as "VBS isn't Python" :)

    Helen
    • 87,344
    • 17
    • 243
    • 314
    • 9
      The error-handling aspect was the worst. Debugging a large ASP app built on VBS (crammed full of ON ERROR RESUME NEXT functions of course) was pure insanity. – Shog9 Jun 07 '09 at 16:14
    • 3
      I personally find the difference between Functions and Subs to be particularly problematic. Why should calling subs need no parentheses (nor allow them), but functions do, and call changes the whole sub paradigm. I hated it. Error handling is painful too (especially in classic ASP, where it's not wise to just exit). – C. Ross Oct 04 '09 at 01:08
    • The points you raise are the same as VBA (or any old dialect of VB). I write thousands of lines of those stuff for a living on a daily basis (hopefully I do interesting stuff too) and I must admit that 1) yeah error handling sucks ass, you can feel the longjmp behind and 2) the "object or with block variable not set" is difficult to understand, and is **runtime**, whereas those things can be checked beforehand. – Alexandre C. Aug 01 '11 at 11:34
    29

    Objective-C.

    The annotations are confusing, using brackets to call methods still does not compute in my brain, and what is worse is that all of the library functions from C are called using the standard operators in C, -> and ., and it seems like the only company that is driving this language is Apple.

    I admit I have only used the language when programming for the iPhone (and looking into programming for OS X), but it feels as if C++ were merely forked, adding in annotations and forcing the implementation and the header files to be separate would make much more sense.

    John Bellone
    • 1,351
    • 1
    • 16
    • 29
    • 36
      Objective C was created while C++ was still in its infancy (as C with Classes) and there is not really any relationship between them. Obj-C took the Smalltalk way of doing OO; C++ stuck closer to Simula. The syntax takes a while to get used to, but if you keep an open mind there is a lot of power in the language too (I wrote up one technique I used here: http://metatechnology.blogspot.com/2009/04/elegant-xml-parsing-with-objective-c.html). – philsquared Jun 07 '09 at 16:53
    • 11
      I love Objective-C. It’s a very nice blend of hands-on-hardware C and higher-level dynamic language. The syntax takes time, but the named parameters are great for readability. – zoul Jun 07 '09 at 17:38
    • 1
      I used the original 1980's Objective-C from StepStone (Brad Cox's) company, and I loved it, it was a huge advance over C and actually a very simple extension to C. Moving to C++ a year or two later was quite painful, due to its complexity and its immature and incompatible implementations. – Jim Ferrans Jun 07 '09 at 20:05
    • I like objective-c (no negative vote ...), quite opposite what you described, objective-c is dynamic language compared to c/c++, and header files are separate from implementation files (in case you haven't noticed). Objective-C is perfect for the type of gui programming it is used for. – stefanB Jun 08 '09 at 00:54
    • 3
      I like C, and I like dynamic languages, but I find it difficult to like Objective-C. I expected to love it, but I ended up just finding it difficult to read. – Nosredna Jun 08 '09 at 02:25
    • 1
      The syntax doesn't have to take long to learn. Associate it with "message passing" rather than "method invocation" if necessary. The difficulty is similar to that of picking up a second human language: it's just not what you grew up with. The only ugly aspect is when you get a sequence of closing brackets, but Obj-C is nowhere near as bad as Lisp in this regard. – outis Jun 08 '09 at 04:51
    • 6
      It's just that the more I use Python, the more I like it. The more I use Objective-C, the less I like it. – Nosredna Jun 11 '09 at 00:15
    • 1
      I think it makes reading code much easier, because every method's arguments are spelled out. – micmoo Jun 28 '09 at 17:53
    • I honestly don't understand the problem other people have with it. I needed a bit to adjust to the syntax and still find it too elaborate in parts - but overall its one of the nicer languages to work with if reasonable coding standards are obeyed (i.e. Cocoa style). – Georg Fritzsche May 23 '10 at 10:41
    28

    PROGRESS 4GL (apparently now known as "OpenEdge Advanced Business Language").

    PROGRESS is both a language and a database system. The whole language is designed to make it easy to write crappy green-screen data-entry screens. (So start by imagining how well this translates to Windows.) Anything fancier than that, whether pretty screens, program logic, or batch processing... not so much.

    I last used version 7, back in the late '90s, so it's vaguely possible that some of this is out-of-date, but I wouldn't bet on it.

    • It was originally designed for text-mode data-entry screens, so on Windows, all screen coordinates are in "character" units, which are some weird number of pixels wide and a different number of pixels high. But of course they default to a proportional font, so the number of "character units" doesn't correspond to the actual number of characters that will fit in a given space.
    • No classes or objects.
    • No language support for arrays or dynamic memory allocation. If you want something resembling an array, you create a temporary in-memory database table, define its schema, and then get a cursor on it. (I saw a bit of code from a later version, where they actually built and shipped a primitive object-oriented system on top of these in-memory tables. Scary.)
    • ISAM database access is built in. (But not SQL. Who needs it?) If you want to increment the Counter field in the current record in the State table, you just say State.Counter = State.Counter + 1. Which isn't so bad, except...
    • When you use a table directly in code, then behind the scenes, they create something resembling an invisible, magic local variable to hold the current cursor position in that table. They guess at which containing block this cursor will be scoped to. If you're not careful, your cursor will vanish when you exit a block, and reset itself later, with no warning. Or you'll start working with a table and find that you're not starting at the first record, because you're reusing the cursor from some other block (or even your own, because your scope was expanded when you didn't expect it).
    • Transactions operate on these wild-guess scopes. Are we having fun yet?
    • Everything can be abbreviated. For some of the offensively long keywords, this might not seem so bad at first. But if you have a variable named Index, you can refer to it as Index or as Ind or even as I. (Typos can have very interesting results.) And if you want to access a database field, not only can you abbreviate the field name, but you don't even have to qualify it with the table name; they'll guess the table too. For truly frightening results, combine this with:
    • Unless otherwise specified, they assume everything is a database access. If you access a variable you haven't declared yet (or, more likely, if you mistype the variable name), there's no compiler error: instead, it goes looking for a database field with that name... or a field that abbreviates to that name.

    The guessing is the worst. Between the abbreviations and the field-by-default, you could get some nasty stuff if you weren't careful. (Forgot to declare I as a local variable before using it as a loop variable? No problem, we'll just randomly pick a table, grab its current record, and completely trash an arbitrarily-chosen field whose name starts with I!)

    Then add in the fact that an accidental field-by-default access could change the scope it guessed for your tables, thus breaking some completely unrelated piece of code. Fun, yes?

    They also have a reporting system built into the language, but I have apparently repressed all memories of it.

    When I got another job working with Netscape LiveWire (an ill-fated attempt at server-side JavaScript) and classic ASP (VBScript), I was in heaven.

    Joe White
    • 94,807
    • 60
    • 220
    • 330
    • I don't know if vote this up or down. I worked with PROGRESS and although the language is not the best I started to feel certain sympathy to it – victor hugo Jun 08 '09 at 17:01
    27

    The worst language? BancStar, hands down.

    3,000 predefined variables, all numbered, all global. No variable declaration, no initialization. Half of them, scattered over the range, reserved for system use, but you can use them at your peril. A hundred or so are automatically filled in as a result of various operations, and no list of which ones those are. They all fit in 38k bytes, and there is no protection whatsoever for buffer overflow. The system will cheerfully let users put 20 bytes in a ten byte field if you declared the length of an input field incorrectly. The effects are unpredictable, to say the least.

    This is a language that will let you declare a calculated gosub or goto; due to its limitations, this is frequently necessary. Conditionals can be declared forward or reverse. Picture an "If" statement that terminates 20 lines before it begins.

    The return stack is very shallow, (20 Gosubs or so) and since a user's press of any function key kicks off a different subroutine, you can overrun the stack easily. The designers thoughtfully included a "Clear Gosubs" command to nuke the stack completely in order to fix that problem and to make sure you would never know exactly what the program would do next.

    There is much more. Tens of thousands of lines of this Lovecraftian horror.

    R Ubben
    • 2,225
    • 16
    • 8
    23

    The .bat files scripting language on DOS/Windows. God only knows how un-powerful is this one, specially if you compare it to the Unix shell languages (that aren't so powerful either, but way better nonetheless).

    Just try to concatenate two strings or make a for loop. Nah.

    friol
    • 6,996
    • 4
    • 44
    • 81
    • 5
      Unix shell programming is much more powerful and infinitely more sane than .bat/.cmd programming. – Cheeso Jun 08 '09 at 16:40
    • Bash scripting is powerfull enough to built remote-desktop-access with it, see NX from nomachine which heart is written in bash. – Oliver Friedrich Jun 08 '09 at 17:12
    • 6
      Concatenating strings is easy: %VAR1%%VAR2%. And there's a for loop: http://www.robvanderwoude.com/ntfor.php. The syntax is ugly as hell, but don't claim it can't be done when it clearly can. – Joe White Jun 09 '09 at 01:10
    • Concatenating two (or three, I don't remember) strings leaves a whitespace hole between them (try it), and calling that a "for loop" is an offense :) – friol Jun 09 '09 at 06:27
    • 1
      "Concatenating two (or three, I don't remember) strings leaves a whitespace hole between them" - Don't know where you get that idea, but it's still wrong. We do this in our build scripts and it works just fine. I just double-checked. "echo %SystemDrive%%SystemDrive%%SystemDrive%" -> "C:C:C:" – Joe White Jun 10 '09 at 13:10
    • I don't remember exactly which problem I had in concatenating those strings (for my mental sake I don't work with this language often), but the juice of my answer was pointing out how weak string manipulation is in .bat files. – friol Jun 10 '09 at 19:20
    • 6
      Duplicate of this answer higher up: http://stackoverflow.com/questions/961942/what-is-the-worst-programming-language-you-ever-worked-with/962463#962463 – Jonik Jun 17 '09 at 12:40
    • 2
      Most people encounter superfluous whitespace when they actually inset it into the commands. The set command doesn't need whitespace surrouncing the equals sign, so "set a = foo" clearly sets a to " foo". No surprise here and probably a major reason why people are think they got whitespace that didn't belong there. – Joey Jul 01 '09 at 13:54
    • @Cheeso: It would be better to say that Unix scripting languages are less insane than DOS batch files. For example, it is *more nearly possible* to process filenames containing arbitrary characters with `bash` than with `cmd` -- the only problems would be filenames containing double-quote or backslash characters. – j_random_hacker Jun 01 '10 at 14:26
    23

    VSE, The Visual Software Environment.

    This is a language that a prof of mine (Dr. Henry Ledgard) tried to sell us on back in undergrad/grad school. (I don't feel bad about giving his name because, as far as I can tell, he's still a big proponent and would welcome the chance to convince some folks it's the best thing since sliced bread). When describing it to people, my best analogy is that it's sort of a bastard child of FORTRAN and COBOL, with some extra bad thrown in. From the only really accessible folder I've found with this material (there's lots more in there that I'm not going to link specifically here):

    VSE is built around what they call "The Separation Principle". The idea is that Data and Behavior must be completely segregated. Imagine C's requirement that all variables/data must be declared at the beginning of the function, except now move that declaration into a separate file that other functions can use as well. When other functions use it, they're using the same data, not a local copy of data with the same layout.

    Why do things this way? We learn that from The Software Survivors that Variable Scope Rules Are Hard. I'd include a quote but, like most fools, it takes these guys forever to say anything. Search that PDF for "Quagmire Of Scope" and you'll discover some true enlightenment.

    They go on to claim that this somehow makes it more suitable for multi-proc environments because it more closely models the underlying hardware implementation. Riiiight.

    Another choice theme that comes up frequently:

    INCREMENT DAY COUNT BY 7 (or DAY COUNT = DAY COUNT + 7)
    DECREMENT TOTAL LOSS BY GROUND_LOSS
    ADD 100.3 TO TOTAL LOSS(LINK_POINTER)
    SET AIRCRAFT STATE TO ON_THE_GROUND
    PERCENT BUSY = (TOTAL BUSY CALLS * 100)/TOTAL CALLS
    

    Although not earthshaking, the style of arithmetic reflects ordinary usage, i.e., anyone can read and understand it - without knowing a programming language. In fact, VisiSoft arithmetic is virtually identical to FORTRAN, including embedded complex arithmetic. This puts programmers concerned with their professional status and corresponding job security ill at ease.

    Ummm, not that concerned at all, really. One of the key selling points that Bill Cave uses to try to sell VSE is the democratization of programming so that business people don't need to indenture themselves to programmers who use crazy, arcane tools for the sole purpose of job security. He leverages this irrational fear to sell his tool. (And it works-- the federal gov't is his biggest customer). I counted 17 uses of the phrase "job security" in the document. Examples:

    • ... and fit only for those desiring artificial job security.
    • More false job security?
    • Is job security dependent upon ensuring the other guy can't figure out what was done?
    • Is job security dependent upon complex code...?
    • One of the strongest forces affecting the acceptance of new technology is the perception of one's job security.

    He uses this paranoia to drive wedge between the managers holding the purse strings and the technical people who have the knowledge to recognize VSE for the turd that it is. This is how he squeezes it into companies-- "Your technical people are only saying it sucks because they're afraid it will make them obsolete!"


    A few additional choice quotes from the overview documentation:

    Another consequence of this approach is that data is mapped into memory on a "What You See Is What You Get" basis, and maintained throughout. This allows users to move a complete structure as a string of characters into a template that descrives each individual field. Multiple templates can be redefined for a given storage area. Unlike C and other languages, substructures can be moved without the problems of misalignment due to word boundary alignment standards.

    Now, I don't know about you, but I know that a WYSIWYG approach to memory layout is at the top of my priority list when it comes to language choice! Basically, they ignore alignment issues because only old languages that were designed in the '60's and '70's care about word alignment. Or something like that. The reasoning is bogus. It made so little sense to me that I proceeded to forget it almost immediately.

    There are no user-defined types in VSE. This is a far-reaching decision that greatly simplifies the language. The gain from a practical point of view is also great. VSE allows the designer and programmer to organize a program along the same lines as a physical system being modeled. VSE allows structures to be built in an easy-to-read, logical attribute hierarchy.

    Awesome! User-defined types are lame. Why would I want something like an InputMessage object when I can have:

    LINKS_IN_USE INTEGER
    INPUT_MESSAGE
       1 ORIGIN             INTEGER
       1 DESTINATION        INTEGER
       1 MESSAGE
          2 MESSAGE_HEADER  CHAR 10
          2 MESSAGE_BODY    CHAR 24
          2 MESSAGE_TRAILER CHAR 10
       1 ARRIVAL_TIME       INTEGER
       1 DURATION           INTEGER
       1 TYPE               CHAR 5
    
    OUTPUT_MESSAGE CHARACTER 50
    

    You might look at that and think, "Oh, that's pretty nicely formatted, if a bit old-school." Old-school is right. Whitespace is significant-- very significant. And redundant! The 1's must be in column 3. The 1 indicates that it's at the first level of the hierarchy. The Symbol name must be in column 5. You hierarchies are limited to a depth of 9.

    Well, ok, but is that so awful? Just wait:

    It is well known that for reading text, use of conventional upper/lower case is more readable. VSE uses all upper case (except for comments). Why? The literature in psychology is based on prose. Programs, simply, are not prose. Programs are more like math, accounting, tables. Program fonts (usually Courier) are almost universally fixed-pitch, and for good reason – vertical alignment among related lines of code. Programs in upper case are nicely readable, and, after a time, much better in our opinion

    Nothing like enforcing your opinion at the language level! That's right, you cannot use any lower case in VSE unless it's in a comment. Just keep your CAPSLOCK on, it's gonna be stuck there for a while.

    VSE subprocedures are called processes. This code sample contains three processes:

    PROCESS_MUSIC
        EXECUTE INITIALIZE_THE_SCENE
        EXECUTE PROCESS_PANEL_WIDGET
    
    INITIALIZE_THE_SCENE
        SET TEST_BUTTON PANEL_BUTTON_STATUS TO ON
        MOVE ' ' TO TEST_INPUT PANEL_INPUT_TEXT
        DISPLAY PANEL PANEL_MUSIC
    
    PROCESS_PANEL_WIDGET
        ACCEPT PANEL PANEL_MUSIC
    
    *** CHECK FOR BUTTON CLICK
        IF RTG_PANEL_WIDGET_NAME IS EQUAL TO 'TEST_BUTTON'
           MOVE 'I LIKE THE BEATLES!' TO TEST_INPUT PANEL_INPUT_TEXT.
        DISPLAY PANEL PANEL_MUSIC
    

    All caps as expected. After all, that's easier to read. Note the whitespace. It's significant again. All process names must start in column 0. The initial level of instructions must start on column 4. Deeper levels must be indented exactly 3 spaces. This isn't a big deal, though, because you aren't allowed to do things like nest conditionals. You want a nested conditional? Well just make another process and call it. And note the delicious COBOL-esque syntax!

    You want loops? Easy:

    EXECUTE NEXT_CALL
    EXECUTE NEXT_CALL 5 TIMES
    EXECUTE NEXT_CALL TOTAL CALL TIMES
    
    EXECUTE NEXT_CALL    UNTIL NO LINES ARE AVAILABLE
    EXECUTE NEXT_CALL    UNTIL CALLS_ANSWERED ARE EQUAL TO CALLS_WAITING
    EXECUTE READ_MESSAGE UNTIL LEAD_CHARACTER IS A DELIMITER
    

    Ugh.

    Community
    • 1
    • 1
    Greg D
    • 43,259
    • 14
    • 84
    • 117
    • 2
      The problem with **The Software Survivors** is that it assumes that all programming tasks are as easy as writing enterprise software - clearly he needs to be asked to implement his own C compiler, operating system, graphics subsystem, window manager, and web browser. – new123456 Apr 03 '11 at 22:32
    22

    Here is the contribution to my own question:

    Origin LabTalk

    My all-time favourite in this regard is Origin LabTalk. In LabTalk the maximum length of a string variable identifier is one character. That is, there are only 26 string variables at all. Even worse, some of them are used by Origin itself, and it is not clear which ones.

    From the manual:

    LabTalk uses the % notation to define a string variable. A legal string variable name must be a % character followed by a single alphabetic character (a letter from A to Z). String variable names are caseinsensitive. Of all the 26 string variables that exist, Origin itself uses 14.

    Doors DXL

    For me the second worst in my opinion is Doors DXL. Programming languages can be divided into two groups: Those with manual memory management (e.g. delete, free) and those with a garbage collector. Some languages offer both, but DXL is probably the only language in the world that supports neither. OK, to be honest this is only true for strings, but hey, strings aren't exactly the most rarely used data type in requirements engineering software.

    The consequence is that memory used by a string can never be reclaimed and DOORS DXL leaks like sieve.

    There are countless other quirks in DXL, just to name a few:

    Community
    • 1
    • 1
    Ludwig Weinzierl
    • 15,980
    • 10
    • 45
    • 49
    • 1
      "Of all the 26 string variables that exist, Origin itself uses 14." Just reading this sentence from manual is scary. How could the creators of the language not realize this is utterly stupid? – ya23 Jun 09 '09 at 10:57
    • 1
      +1 Doors is number 12 at www.dreckstool.de (List of worst software ever) – bbuser Jun 24 '09 at 10:35
    21

    Cold Fusion

    I guess it's good for designers but as a programmer I always felt like one hand was tied behind my back.

    Ken Burkhardt
    • 3,528
    • 6
    • 33
    • 45
    • 5
      +1. It's not good for designers. Or programmers. Or dB types. I have met many who worked on it and no one who liked it. Including me. – kmarsh Jul 01 '09 at 13:14
    20

    The worst two languages I've worked with were APL, which is relatively well known for languages of its age, and TECO, the language in which the original Emacs was written. Both are notable for their terse, inscrutable syntax.

    APL is an array processing language; it's extremely powerful, but nearly impossible to read, since every character is an operator, and many don't appear on standard keyboards.

    TECO had a similar look, and for a similar reason. Most characters are operators, and this special purpose language was devoted to editing text files. It was a little better, since it used the standard character set. And it did have the ability to define functions, which was what gave life to emacs--people wrote macros, and only invoked those after a while. But figuring out what a program did or writing a new one was quite a challenge.

    PanCrit
    • 2,688
    • 1
    • 18
    • 16
    • +1 for APL, but -1 for TECO. OMG, TECO-haters? Really? your hating on the first programmable video editing language, ever? – RBarryYoung Jun 10 '09 at 02:35
    • Never used teco, so can't pass judgement on it, but there's an anecdote in the jargon file about how hackers would mash random keys and challenge another hacker to explain what the result would produce when entered into teco. frightful! – SingleNegationElimination Jun 10 '09 at 06:49
    • Some dialects of APL not only use characters that do not appear on standard keyboards, their visual representation cannot be drawn on standard screens. (OK, I thought it was funny...) – j_random_hacker Jun 01 '10 at 14:40
    • type your name into teco and see what happens... – blabla999 Aug 24 '10 at 17:21
    19
    HAI
    CAN HAS STDIO?
    VISIBLE "HAI WORLD!"
    KTHXBYE
    

    Seriously, the worst programming language ever is that of Makefiles. Totally incomprehensible, tabs have a syntactic meaning and not even a debugger to find out what's going on.

    Tobias
    • 6,388
    • 4
    • 39
    • 64
    • 7
      any environment where the behaviour hinges on the particulars of the *whitespace* has to be at the top of the list! – JustJeff Jun 07 '09 at 17:55
    • I LOVE LOLCODE! Its obviously not practical, but its great to mess around with on the side or for jokes when your dev team needs a little brevity. -1 for hatein on LOLCODE, +1 for makefiles...guess that makes it a draw. – jrista Jun 07 '09 at 20:38
    • @JustJeff, to be fair, Make treats space as different than tab, which is a serious problem... – Brian Postow Jun 09 '09 at 14:06
    • 2
      Oh, man. About two years ago, I tried to suggest a "funny" syntax addition (since the grammar was missing an entire genre of lolcat sentences!!1), and it got vetoed because (I kid you not) that functionality already existed with different syntax. I still can't wrap my head around people taking that "language" seriously. – ojrac Jun 11 '09 at 02:36
    18

    I'm not sure if you meant to include scripting languages, but I've seen TCL (which is also annoying), but... the mIRC scripting language annoys me to no end.

    Because of some oversight in the parsing, it's whitespace significant when it's not supposed to be. Conditional statements will sometimes be executed when they're supposed to be skipped because of this. Opening a block statement cannot be done on a separate line, etc.

    Other than that it's just full of messy, inconsistent syntax that was probably designed that way to make very basic stuff easy, but at the same time makes anything a little more complex barely readable.

    I lost most of my mIRC scripts, or I could have probably found some good examples of what a horrible mess it forces you to create :(

    Thorarin
    • 47,289
    • 11
    • 75
    • 111
    • 1
      This this this this oh geez this. I've had to try to maintain a 3000-line mIRC script before; it's utterly horrible to work with. – Rob Howard Jun 08 '09 at 22:31
    • 5
      mIRC scripting is hell. Imagine a programming language where you MUST use stupid hacks in order to process strings with whitespace in them. Since there are no string literals, it's not possible to store a string with a space at the end. – Vladimir Panteleev Jun 09 '09 at 14:01
    18

    Regular expressions

    It's a write only language, and it's hard to verify if it works correctly for the right inputs.

    oɔɯǝɹ
    • 7,219
    • 7
    • 58
    • 69
    17

    Visual Foxpro

    Arnis Lapsa
    • 45,880
    • 29
    • 115
    • 195
    • 4
      Can you elaborate a bit on why? – Emil H Jun 07 '09 at 14:27
    • @Emil actually, VFP ain't bad. That was only mine worst experience. I dislike javascript even more, but i haven't developed anything big with it. – Arnis Lapsa Jun 07 '09 at 14:55
    • @Emil Why? Mostly cause of strange bugs in VFP itself which caused hours of pain. And because i`m comparing it with .NET – Arnis Lapsa Jun 07 '09 at 15:00
    • @Andrei I haven't worked with PHP. Can't tell. :) – Arnis Lapsa Jun 07 '09 at 20:53
    • 4
      Well, there are things you could do in Foxpro (for DOS!) in one line of code that still you cant do in 5 lines of code in c#. – Binoj Antony Jun 08 '09 at 07:52
    • @Binoy SCATTER statement for example. But it`s pure evil anyway, cause can create columns under the scenes if variables are not properly named. I`m not saying that VFP is bad, it just doesn't fit well for my needs. – Arnis Lapsa Jun 08 '09 at 08:31
    • 2
      I half agree and half disagree. VFP tried to port the event model of the DOS product to Windows which was an epic fail IMO. That said, for a long time VFP was my Swiss army knife for doing database tasks. It was one of the first products that allowed one to easily interoperate among multiple databases. – Jeff Leonard Jun 08 '09 at 21:44
    • 2
      VFP sucks mostly because it promotes billions of amateur " I can write an accounting package too" software which is basically 2 parts: 1) The most awful unusable accounting package interface known to man, 2) nasty databases with 4 tables at 150 columns each full of junk – Kent Fredric Jun 09 '09 at 03:06
    • 1
      @Kent So VFP sucks because it's powerful and easy to use? :) I think the real problem is people using _in the enterprise_ applications made by amateurs.. (That's true for MS Access and VB too) – Joril Jun 09 '09 at 08:44
    • @Joril I would say - it's easy to use it wrong. – Arnis Lapsa Jun 09 '09 at 09:37
    • 2
      so funny, because my impression is that VFP has one of the most loyal developer bases of any lang/platform/environment. re: "easy to use wrong". Is there then, a benefit to making a language difficult? Raise the bar, get better oututs? – Cheeso Jun 09 '09 at 12:08
    • @Cheeso my answer was clearly subjective. I didn't post it to make you serious. – Arnis Lapsa Jun 09 '09 at 12:33
    • @Jeff Leonard: "Swiss army knife" was exactly my thought; one statement a simple substitution, the next a tactical nuclear weapon. Like Perl in that the language can be confusing and inscrutable to the uninitiated. –  Jun 09 '09 at 12:36
    • 3
      VFP is not that bad. Learning the syntax is a little difficult, but overall it's pretty good for a language. Shame MS dropped support for it. Lots of code to convert to another platform now. – dna123 Jun 09 '09 at 19:18
    • @dna123 "Lots of code to convert to another platform now." the same situation here... – Arnis Lapsa Jun 10 '09 at 06:20
    17

    I find myself avoid having to use VBScript/Visual Basic 6 the most.

    I use primarily C++, javascript, Java for most tasks and dabble in ruby, scala, erlang, python, assembler, perl when the need arises.

    I, like most other reasonably minded polyglots/programmers, strongly feel that you have to use the right tool for the job - this requires you to understand your domain and to understand your tools.

    My issue with VBscript and VB6 is when I use them to script windows or office applications (the right domain for them) - i find myself struggling with the language (they fall short of being the right tool).

    VBScript's lack of easy to use native data structures (such as associative containers/maps) and other quirks (such as set for assignment to objects) is a needless and frustrating annoyance, especially for a scripting language. Contrast it with Javascript (which i now use to program wscript/cscript windows and do activex automation scripts) which is far more expressive. While there are certain things that work better with vbscript (such as passing arrays back and forth from COM objects is slightly easier, although it is easier to pass event handlers into COM components with jscript), I am still surprised by the amount of coders that still use vbscript to script windows - I bet if they wrote the same program in both languages they would find that jscript works with you much more than vbscript, because of jscript's native hash data types and closures.

    Vb6/VBA, though a little better than vbscript in general, still has many similar issues where (for their domain) they require much more boiler plate to do simple tasks than what I would like and have seen in other scripting languages.

    knocte
    • 16,941
    • 11
    • 79
    • 125
    Faisal Vali
    • 32,723
    • 8
    • 42
    • 45
    • VB6 is not a scripting language. It's a complete language, including support for classes and interfaces. Granted, it's not OO (no inheritance of behavior, only has interface inheritance), but it's really not that bad as a language. OTOH, there are a large number of really bad pieces of code written in it, and only a small number of good pieces of code. – John Saunders Jun 09 '09 at 00:25
    • I never said VB6 is only a scripting language (what exactly defines a pure scripting language is another discussion ;) I said that I have used VB6 to script/macro-control office applications. And as far as being a complete language (Turing complete), even assembler is a complete language - it's just not very expressive - and in my experience, based on programming idioms i am used to, VB6 could be more expressive and less annoying. But there are many people who feel the same about C++ and for some reason (that may be worth investigating more thoroughly someday) I don't ;) – Faisal Vali Jun 11 '09 at 04:14
    • I gotta disagree, I can't think of a single thing I have ever wanted to do with VBA and not been able to. That kind of read like, "I don't like VBA because I can't figure out how to do stuff:)) NOI, as a C++ guy I'm sure you can bury me any day of the week. But still VBA can do a ton in very few lines that take other languages 10 times as many. – Oorang Jun 11 '09 at 06:37
    • 1
      @Oorang: I'm sorry, I didn't mean for it to read like that. I was able to complete my task in VBA (a calendar that takes different peoples vacation days and all the national holidays, and designates when they are on call in as fair a manner as possible) but having done something similar in javascript (you can manipulate office applications via jscript), i enjoyed doing it less in VBA. What I meant for it to read like is: I don't like VBA because the programming idioms i like to use are less well supported. But I realize that is in the eye of the beholder :) – Faisal Vali Jun 11 '09 at 13:26
    17

    Twice I've had to work in 'languages' where you drag-n-dropped modules onto the page and linked them together with lines to show data flow. (One claimed to be a RDBMs, and the other a general purpose data acquisition and number crunching language.)

    Just thinking of it makes me what to throttle someone. Or puke. Or both.

    Worse, neither exposed a text language that you could hack directly.

    dmckee --- ex-moderator kitten
    • 98,632
    • 24
    • 142
    • 234
    17

    I can't belive nobody has said this one:

    LotusScript

    I thinks is far worst than php at least.

    Is not about the language itself which follows a syntax similar to Visual Basic, is the fact that it seem to have a lot of functions for extremely unuseful things that you will never (or one in a million times) use, but lack support for things you will use everyday.

    I don't remember any concrete example but they were like:

    "Ok, I have an event to check whether the mouse pointer is in the upper corner of the form and I don't have an double click event for the Form!!?? WTF??"

    Jorge Córdoba
    • 51,063
    • 11
    • 80
    • 130
    • It's definitely worst then PHP and worst think on LS is debugger. – MicTech Jun 09 '09 at 12:30
    • Totally - though not surprised it wasn't mentioned - how many LotusScript developers are there out there (especially among SO users) – Anthony Rizk Jun 09 '09 at 13:47
    • 1
      The scripting in Lotus Notes was terrible. The events you could programme were terribly weak. Each line was compiled on loss of focus and if it failed to compile it would be deleted. So you want to write half a line of code and the copy and paste a long variable name in? You are halfway through writing a line of code and you need to look up the documentation? Why would you want to do these things? – Gordon Guthrie Jun 09 '09 at 13:57
    • Annoyingly it has received little attention in the last 3 major releases and continues to lack many needed features. IBM has concentrated on making Notes some sort of Java Eclipse container and ignored making Notes itself a more capable development environment. – Martlark Jun 14 '09 at 02:28
    • Glad someone else finds LotusScript baffling, even for someone familiar with other scripting languages. – Lunatik Jul 01 '09 at 11:03
    16

    TCL. It only compiles code right before it executes, so it's possible that if your code never went down branch A while testing, and one day, in the field it goes down branch A, it could have a SYNTAX ERROR!

    Svante
    • 50,694
    • 11
    • 78
    • 122
    dicroce
    • 45,396
    • 28
    • 101
    • 140
    • 14
      This is true of most interpretive languages and not just Tcl. And while it's true, in practice it's not nearly as bad is you make it sound. Certainly, I wouldn't use an interpreted language for hyper-critical applications but for the vast majority of uses of this type of language it's not that big of a deal and can be virtually eliminated with proper testing. – Bryan Oakley Jun 07 '09 at 16:03
    • 2
      Exactly what other interpreted languages is it true for? I can't think of one. Most scripting languages completely parses the scripts before executing them. – Emil H Jun 07 '09 at 16:19
    • 3
      It's not up to the language--it's up to the implementation. JavaScript--probably the most-used scripting language in the world--is parsed in different ways depending on the browser or app that uses it. – Nosredna Jun 07 '09 at 16:26
    • 1
      Even if the interpreter parses the whole script file before executing it, 'include' statements still affect which other script files will get parsed, and that is determined at run-time. So the above statements are true even of such languages - it is possible that code path A in a certain file never gets parsed during testing because that file isn't included. – thomasrutter Jun 09 '09 at 02:43
    • TCL is very non-algol-like. In many ways this is bad, but in some ways, since it is so much simpler, this is good. It's very easy to understand exactly what a bit of code will do, simply because the parser is so stupid. All things combined, it about breaks even. – SingleNegationElimination Jun 10 '09 at 06:59
    • I can't really say anything against Tcl, except that it makes my brain feel funny. That's why I never learned it well enough to say anything about it. – David Thornley Jun 18 '09 at 21:27
    16

    In 25+ years of computer programming, by far the worst thing I've ever experienced was a derivative of MUMPS called Meditech Magic. It's much more evil than PHP could ever hope to be.

    It doesn't even use '=' for assignment! 100^b assigns a value of 100 to b and is read as "100 goes to b". Basically, this language invented its own syntax from top to bottom. So no matter how many programming languages you know, Magic will be a complete mystery to you.

    Here is 100 bottles of beer on the wall written in this abomination of a language:

    BEERv1.1,
    100^b,T("")^#,DO{b'<1 NN(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall")^#,
                              N(b,"bottle"_IF{b=1 " ";"s "}_"of beer!")^#,
                              N("You take one down, pass it around,")^#,b-1^b,
                              N(b,"bottle"_IF{b=1 " ";"s "}_"of beer on the wall!")^#},
    END;
    
    17 of 26
    • 27,121
    • 13
    • 66
    • 85
    • Ah! $T was my first language; I have fond memories of it, despite its warts ;p – wkf Jun 10 '09 at 21:05
    • My office has an introductory guide to Meditech Magic. There's an example program that makes sandwiches. – csj Mar 01 '10 at 20:29
    14

    troff

    Tells you how old I am. You could do pretty sweet things in it, but it was rough. You guys that think Perl is unreadable should check it out.

    I mean:

    .nr *pop-count 0
    .while !'\\n(.z'' \{\
    .   \"@warning automatically terminating diversion \\n(.z
    .   ie d @div-end!\\n(.z .@div-end!\\n(.z
    .   el .*div-end-default
    .   nr *pop-count +1
    .   \" ensure that we don't loop forever
    .   if \\n[*pop-count]>20 .@fatal recovery failed
    .\}
    .while !'\\n[.ev]'0' .ev
    .par@reset-env
    .par@reset
    

    And believe it or not, after having to do this for years, I stayed with programming.

    xcramps
    • 191
    • 1
    • 2
    • Wow, that code looks scary. Thank you for providing sample code. Interestingly out of 85 answers so far only 9 have code samples. – Ludwig Weinzierl Jun 18 '09 at 11:36
    • *roff is fun, and very powerful :) – Jé Queue May 18 '10 at 04:39
    • 1
      yup the whole roff family of text processors were horrible to use (how many pages of paper did we spend 'till we got it right until we got a previewer for it). But there was no alternative at those times. And it was a huge improvement to be able to typeset your own documents. – blabla999 Aug 24 '10 at 17:29
    14

    Logo...that damn turtle would never go where I wanted it to.

    13

    I really don't like Visual Basic, even the .NET versions. Frankly, I find the core of the language way to verbose.

    For example:

    If condition1 = condition2 Then
      ...
    Else If condition1 > condition2 Then
      ...
    End If
    
    Public Function SomeFunction(ByVal arg1 As String, ByVal arg2 As Integer) As String
      ...
    End Function
    

    But in C#:

    if (condition1 == condition2) {
      ...
    }
    else if (condition1 == condition2) {
      ...
    }
    
    public string SomeFunction(string arg1, int arg2) {
      ...
    }
    

    And obviously many other languages like F#, Python, etc. are much less verbose. I honestly feel like it takes me twice as long to use VB than other languages because of this.

    I know this is quite a shallow answer, in part because it doesn't address some of the language concerns (like PHP's over use of global functions). But from a humanistic, 'experience-oriented' perspective, VB simply makes me grumpy.

    abatishchev
    • 98,240
    • 88
    • 296
    • 433
    Richard Clayton
    • 7,452
    • 3
    • 23
    • 19
    • 1
      I still don't see the problem. Sure, VB is verbose but this is compensated by the reduced redundant parentheses and braces, and that alone is a huge gain. Done well, VB *adds* clarity to the code. I have to admit that some of the new things (statement lambda) have become too verbose indeed. But other than that, the language's verbosity is just fine with me. – Konrad Rudolph Jun 08 '09 at 16:37
    • Have you ever seen Java? Most verbose standard library ever. – Jeremy Logan Jun 09 '09 at 02:26
    • 1
      Delphi is worse.. `if ( condition ) then do begin .. end else begin .. end`. Makes me grumpy too. – Blorgbeard Jun 30 '09 at 08:40
    • 1
      @Blorgbeard: Parentheses and begin/end are optional for simple statements and there's no "do" – pbz Jun 30 '09 at 22:34
    • @pbz, yeah I got carried away there :P I like to have parentheses and begin/end for ease of maintenence. In C-like langauges there's hardly any penalty - just four characters ( ){ }. – Blorgbeard Jul 10 '09 at 04:19
    12

    Bourne Shell

    I once was running a invoicing system for a telecom company. This meant manually running a bunch of commands that would each in order collect, prepare, calculate, format and finally print the invoice. This would typically be done in batch form, so that I was told which customer numbers to make invoices for and I'd do them all in batch.

    This was boring. So I started automating it. Unfortunately, the only language allowed on the servers was.... well none. At all. So I had to write everything in shell scripts. And that is a truly absurd and bizarre language. Nothing really much makes sense. It's inconsistent and overly sparse, so two similar things may do completely different things because a ? comes in a slightly different place. And using backquotes as a part of a language is just pure evil. They don't even look different from single quotes in some fonts!

    I've had way worse programming experiences. WAY worse. But those has always involved maintaining other peoples bizarre code. But this has to be the worst language I've ever used. Worse than DOS Batch files? Oh yes. DOS Batch files main problem is that they are primitive. You have to find clever ways to make it actually do something useful. But the syntax itself isn't that bad. It just doesn't have enough built in functionality. Worse than Visual Basic? Oh yeah, without a doubt, although admittedly I wrote a UI to this Bourne Shell system in MS Access and that was almost as horrible, but just almost. And they communicated via Sybase, so I needed to learn Sybase SQL, which also is quite horrid. But still not nearly as horrid as sh-scripting.

    So Bourne Shell wins the jumbo price for me. Only just, with VB close on it heels, but it still wins.

    Lennart Regebro
    • 167,292
    • 41
    • 224
    • 251
    11

    In Unix, m4 scripts and sendmail.conf.

    Anton Tykhyy
    • 19,370
    • 5
    • 54
    • 56
    10

    For me the worst experience which tainted my view of the language was Perl. I was asked to support a bunch of perl scripts that have been "supported" by other people who promptly left the company few months after being asked to support it. While the language may be ok, it allows the code to become unreadable and almost unsupportable very quickly (unless only 1 person ever touches them). It was a mess of regexp, pseudo objects, single letter variables and function names. It quickly led me to rewrite it all in python and scrap perl completely (it was that or me quitting). The python version was so much more usable and supportable that 10 years later it is still in use and from what I hear no one is allowed to use Perl at that company again.

    AlexC
    • 1,395
    • 14
    • 26
    • 1
      I agree worst is PHP, perl is my worst experience. perl feels like PHP's retarded brother that larry wall hides under the stairs... everyone loves a retard and no one ever cheers for the goliath, but whatever. – AlexC Jun 08 '09 at 05:02
    • 1
      If the code had single-letter names for many things, then the problem was not the language but the code. – David Thornley Jun 08 '09 at 16:04
    • 1
      Yeah... this is why we've developed coding conventions: http://en.wikipedia.org/wiki/Programming_style – Jeremy Logan Jun 09 '09 at 02:25
    • bad programmers write bad code. sounds like you had wheel re-inventers too afraid to use CPAN. Have a look at Moose and MooseX::Declare and see if you think they're a way forward or not in encouraging people to write less crappy code. – Kent Fredric Jun 09 '09 at 02:55
    • Andrei, stop spamming this comment everywhere! You're just trolling and deserve a good mute! – Robert K Jun 10 '09 at 21:46
    10

    FORTRAN 77

    To be fair, perhaps that in 1977 it was a pretty good language, but by the time 1999 rolled around I had to maintain a FORTRAN 77 program that was originally started by my advisor when he was a grad student sometime in the 1970's, (on punch cards, orignally). The program was 'enhanced' hacked, plugged for over twenty years by people of various abilities. The oldest code was ALLCAPS, chock full of GOTO statements, global variables, and functions with more parameters than I have fingers. Originally variable names in Fortran were limited to 6 characters, but to save bytes most variables were given such descriptive names as 'A', 'B', 'AA', 'II', etc.

    Granted, much of my experience was related to how the program was written, but the language didn't really encourage good programming style:

    • Implicit typing depending on the first letter of the variable name (e.g. names that started with an 'I' to 'N' were integers, otherwise the default was REAL)
    • Fixed statement layout (a holdover from punch cards: column 0 would indicate a comment line if it had a 'C', labels in columns 1-5, continuation character in column 6, statements in columns 7-72)
    • Statement labels (numeric labels at that)
    • KEYWORDS WERE ALL CAPS

    Thankfully it's been 10 years since I've looked at FORTRAN and I've forgotten more of the annoyances that I remember.

    Peter Tate
    • 2,178
    • 1
    • 21
    • 32
    • 4
      GOD is REAL, unless declared INTEGER - old Fortran joke. – David Thornley Jun 18 '09 at 21:32
    • 1
      I once spent an entire day debugging a fortran 77 program because the first 5 columns on a line of code had been replaced by a tab character instead of spaces in someone's text editor. – womp Jun 24 '09 at 22:59
    10

    CSS

    For basic styling its OK, and selectors are pretty cool, but there's something a little bit sadistic about the box model, floats and clearing.

    Hacking the language to make it do fundamental things, such as move one box below another, is all in a days work.

    Here we are living in the future and just getting basic design elements to work, like rounded corners or drop shadows, is an exercise in futility.

    The concept of 'reusability' pretty much ends with Ctrl-C Ctrl-V. Even a seasoned CSS writer will rarely touch someone else's stylesheet - meaning that basic layouts are routinely rewritten again and again all around the world.

    Of course it shouldn't take all the flack - any hope it had of offering something truly useful to the world was cruelly dashed upon the rocks by the de facto 'platform' for the language - Internet Explorer.

    cbp
    • 25,252
    • 29
    • 125
    • 205
    • 1
      CSS also falls flat on its face if you want to do any sort of layout that sizes itself based on the content. This is one of the reasons why HTML tables are still used for layout purposes. – 17 of 26 Jun 09 '09 at 14:02
    • 9
      @17: This is outright wrong. CSS has limitations but this absolutely isn't one of them, you need to learn more CSS. @cbp: CSS does what it's designed to do *exceptionally well* the problem is that it hasn't been allowed to advance with designers needs which is almost entirely the fault of the CWG and Microsoft. Nothing to do with the language itself which imho is damn near perfect *as a language*. – annakata Jun 09 '09 at 16:17
    • @annakata In defence of '17', I'm sorry to say he is right - it is very difficult to reproduce table-style scaling using pure CSS and I have seen many seasoned CSS designers fall back on tables to get the job done. Most of the languages on this list you could say 'You need to learn more', and I'm sure that veterans are perfectly capable of completing a lot of great work in many of these languages, but that doesnt mean that the language doesnt suck - just that some people have fought against the suckiness for years and years till they can make the language behave. – cbp Jun 09 '09 at 23:34
    • 2
      Ah... cbp: you can actually *specify* table-style layouts for arbitrary elements using CSS. That *certain browsers* have classically had poor implementations of this part of the language isn't really a fault of the language itself. – Shog9 Jun 11 '09 at 00:50
    • 1
      @cbp, stop blaming the CSS specification/language for the flaws and failures of IE. – Robert K Jun 11 '09 at 19:55
    • @WickedFlea eh i acknowledged that a big part of the problem is IE, and most of my original criticism still stands - at least as of CSS 2: poor reusability, the 'clear div' problem I alluded to, lack of more advanced design features, overly obscure layout mechanism (possibly one of the reasons it was so poorly implemented by browsers) etc. – cbp Jun 12 '09 at 01:37
    • Btw, here is the code, as far as I can fathom, to achieve float clearing without HTML markup: .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } Now this code doesn't work in IE, and even if it did, tell me that this is a clear and intuitive solution to one of the first problems you will encounter as a novice CSS writer. – cbp Jun 12 '09 at 02:00
    • 4
      @annakata "CSS does what it's designed to do *exceptionally well*" If that is true, it has been designed to solve the wrong problem, which I think might actually be the case. I've heard people defend CSS as a styling language, not a layout language. Well, if you want my HTML to be semantic, I'm going to need a layout language. It is unclear to me why the DOM structure of semantic markup should be imposed on my layout in the first place. That is bad enough. But then to only give me the power to "style" and not "lay out" horrible. – PeterAllenWebb Jul 01 '09 at 20:04
    • CSS is great, IE has just screwed it up. – corymathews Jul 06 '09 at 13:08
    • 1
      This is ridiculous. CSS is a blessing. – Deniz Dogan Sep 26 '09 at 11:07
    9

    For me it'd have to be FileMaker.

    The ScriptMaker

    This screenshot shows the until recently named "ScriptMaker", which had many improvements in FileMaker 9 such as Ctrl+C Ctrl+V shortcuts for copying and pasting, and a non-modal dialog so you could edit more than one script at once.

    http://images.macnn.com/macnn/reviews/filemaker/9proadvanced-ice_feature1_main.png

    You edit individual Scripts using this dialog box. script "steps" (shown on the left) are added into the list on the left hand side (by double clicking), and are moved up and down (using the little blob to the left of "Set Web Viewer"). Only one line can be moved at once, and commenting for the purposes of temporarily disabling script steps is only available in the Advanced version of FileMaker Pro.

    Constructing a Script effectively ruins your wrists, as you're swapping between keyboard and mouse thousands of times an hour typing stuff into the the little config boxes and re-arranging your lines of code.

    A script is technically a procedure, and can be passed ONE parameter. Yup, just one. If you want more than one, you have to effectively combine your parameters using some delimiter, pass it to the script, then split the parameters out. Before scripts could have parameters at all (before FM7 IIRC), it was normal to use globals to pass data around.

    This guy wrapped most of his hate into a hoax FileMaker 11 sneak preview.

    Dale Reidy
    • 1,189
    • 9
    • 22
    9

    I'm going to vote for ColdFusion. It's trying to be a cool scripting language, but being done up in html-like tags was driving me nuts - it's been a little while since I had to deal with it, but as I remember variable declarations could be a bear, and it was easy to have slightly different versions of the server on two different environments which would have code working differently on both.

    If you wanted to do anything really impressive with it, it basically involved creating an object in Java and figuring out how to link it in with coldfusion's server so you could invoke it as a tag. I'm working in PHP, and even though PHP has it's problems, ColdFusion was definately worse.

    Peter Boughton
    • 110,170
    • 32
    • 120
    • 176
    John Fiala
    • 4,561
    • 3
    • 30
    • 26
    • This sounds like an out-of-date opinion. In the pre-MX6.0.1 days CF got lots of bad press (some deserved, some not). With CF8 out, CF9 imminent, ColdFusion is a very different animal these days, and I'd say none of those criticisms are valid any more. – Peter Boughton Jun 10 '09 at 21:24
    • Also to add... with two very good alternative CFML engines available (Railo and openBD) - which are both Open Source (LGPLv2 and GPLv3) - and a CFML Standards Committee defining the core and extended language specifications, it is well worth looking into CFML again. – Peter Boughton Jun 10 '09 at 21:26
    • +1 because I used to code with ColdFusion's very early versions in the 90's. Yuck, doing even the simplest things like looping was near impossible. Come to think of it I'm not sure if that version even was Turing compatible. – Makis Jun 30 '09 at 10:09
    9

    JCL - Job Control Language for IBM Mainframes... not quite a programming language, more a batch file thing.

    This was based on the punch card which would normally be placed at the start of jobs, i.e. Same syntax, different medium. The 71 column limit and fact that the cards cost money meant verbosity was a sin best left to COBOL source. This attitude carried over to JCL, the non paper counterpart.

    I just about figured out how to change the job queue and parameters in the lead card during my time working with it. Wikipedia provides the following fine example:

    //IS198CPY JOB (IS198T30500),'COPY JOB',CLASS=L,MSGCLASS=X
    //COPY01   EXEC PGM=IEBGENER
    //SYSPRINT DD SYSOUT=*
    //SYSUT1   DD DSN=OLDFILE,DISP=SHR
    //SYSUT2   DD DSN=NEWFILE,
    //            DISP=(NEW,CATLG,DELETE),
    //            SPACE=(CYL,(40,5),RLSE),
    //            DCB=(LRECL=115,BLKSIZE=1150)
    //SYSIN    DD DUMMY
    

    Precisely.

    Honourable mention must go to Cincom Mantis, an "application generator" (read: text-based form designer) "powered" by a COBOL-like 4GL. Mantis is the language which helped me decide to go get a degree - the last of several CICS in the ass...

    edit Mentions of DCL and the like elsewhere... Datatrieve I also remember. These were indeed awful, but still preferred the VMS stuff to anything mainframe.

    John Barrett
    • 545
    • 4
    • 9
    8

    The worst language I "worked" with, was "karol, the robot" — which was a programming language in German. And could do nothing more than move a robot on screen xD

    Peter Mortensen
    • 30,738
    • 21
    • 105
    • 131
    knittl
    • 246,190
    • 53
    • 318
    • 364
    • 1
      there's your ten points for mentioning the community wiki :) – Peter Perháč Jun 07 '09 at 15:40
    • It's actually http://en.wikipedia.org/wiki/Karel_(programming_language) ("Karol" is Slovak translation). And it's for kids, so I wouldn't count it as a real language (though it's Turing complete). – J S Jun 07 '09 at 16:56
    • 1
      I tried Karel in high school, too. For its purpose (teaching about basic programming abstractions--loops, subroutines, etc.) it really wasn't bad--sort of a Pascal-based Logo (vs. a BASIC-based one like the original). Would I write an operating system in it? No. – Drew Hall Jun 07 '09 at 18:42
    • Heh, I used Karel back in the day. Interesting idea, but its extrapolation of the computer's underpinings aren't doing future programmers any favors. – Alex Jun 09 '09 at 14:01
    8

    IT baffles me sometimes to why a software company would develop its own scripting language to interface with their software, rather than building a strong API that can interface with your scripting language of choice. My vote goes to TransCAD's scripting language.

    dassouki
    • 6,286
    • 7
    • 51
    • 81
    8

    I despise proprietry languages like C# and AppleScript whose only reason for existing is to tie developers to a commercial platform or product. This isn't exactly a technical problem, but it is a social one when these languages are then taught in schools. I have a friend who only has Linux installed and he's being taught C# in 1st-Year CompSci. Yes there's Mono, but naturally it's always playing catch-up on features and stability.

    SpliFF
    • 38,186
    • 16
    • 91
    • 120
    • 1
      I wish I could upvote you multiple times. – Bob Somers Jun 07 '09 at 20:26
    • 49
      C# is an Ecma (ECMA-334) and ISO (ISO 23270) standard since it's begining. Java was still proprietary 2 years ago. – Sylvain Rodrigue Jun 07 '09 at 20:34
    • 25
      @Sylvain. The C# language may be a standard (if you don't count the fact it changes every 2 years) but you can't deny its intended goal of tying developers to proprietry class libraries (ie, "Windows" Forms) and IDEs that only work on Windows. You cannot deny that C# is a transparent attempt to have schools teach the .Net _platform_ instead of cross-platform ANSI C/C++. Frankly your comment is technically correct but a bit pedantic and missing the point. C# was NOT a way for Microsoft to make the world a better place - and you know it. Also, yes Java counts. Also Rebol and many others. – SpliFF Jun 08 '09 at 03:56
    • 2
      Right, there's no alternative to .NET except for Mono, but of course, that's not an option because it's not 100% identical to C#3 (but it is to C#2) so that immediately disqualifies it as a reasonable alternative.. And just getting over your "free software uber alles" attitude and installing Windows is also an option, which is free (as in beer) for any CS student. Besides, your qualms are not with the language (which is an open standard as pointed out) but with the propietary .NET framework. So -1 for not answering the question, because the question is about the language. – JulianR Jun 08 '09 at 13:14
    • +1 question was asked only to harvest points, so any answer is good. – IAdapter Jun 08 '09 at 15:15
    • 6
      @JulianR "and installing Windows is also an option".... what? WHAT?! You don't think a programming language that requires 2 Gigabytes of dependencies could be considered flawed? And yes it's a language flaw, because the language has no purpose except to encourage .Net integration and the purchasing of Microsoft books and courses. The language causes social harm and wasteful financial and time pressures, It diverts students and projects away from more responsible languages. So yeah... bad language. Bad company. Old story. – SpliFF Jun 08 '09 at 15:32
    • 1
      I'd say there's a difference between C# and Applescript here. C# is a general-purpose programming language that Microsoft encourages, and changes every so often to make versions on other OSs obsolescent. Applescript is a way of running basic operations on MacOSX. – David Thornley Jun 08 '09 at 16:00
    • Or you could, you know, respond to just a portion of what I said.. Installing Windows is *an* option, but if you're using Linux, using Mono is a more obvious one and should easily suffice, especially for educational purposes. And the purpose of C# is to provide a C-like managed language, and C# is not in any way tied to a particular runtime as proved by Mono. Any claim otherwise is nonsense. And "social harm" and "wasted finances"? Haha. More baseless drama please. And again: framework != language. – JulianR Jun 08 '09 at 16:19
    • 45
      Great answer - I think any language that runs on a commercial product is just a ploy from the man trying to control us. All programming languages should be home-brewed, just like all computers. Money pollutes everything it touches, and is evil in its own right. That's why I am posting this from a solar-powered computer made out of coconuts and uranium crystals. Can't talk more now, I have to go stir my biomass fuel to make hot water for my home grown tea. – Cheeso Jun 08 '09 at 16:22
    • 15
      @SpliFF: you're coming over awfully paranoid. Sure, Microsoft doesn't run a charity (come to think of – their erstwhile CEO does!) but that doesn't make all their employees pure evil. C# was designed, by these people, not to bind anyone to any platform but to create a better programming tool. And full marks to them! It would be laudable if independent tool support were better but nonetheless C# is a very well-designed, standardized programming language. – Konrad Rudolph Jun 08 '09 at 16:33
    • 1
      Okay so show us a significant usage of C# that isn't tied to the proprietary microsoft platform. – Breton Jun 09 '09 at 03:33
    • 5
      Does Second Life running on Linux+Mono count as "significant" and "not tied to Microsoft"? https://blogs.secondlife.com/community/features/blog/2008/08/21/mono-launch – Cheeso Jun 09 '09 at 12:11
    • 24
      Personally I don't think that the free software movement should have a monopoly on programming. – cbp Jun 09 '09 at 12:53
    • 4
      I actually like Windows Vista. It works really well. So does OS X. The only reliable Linux systems I've used have had an admin minding them. I would much rather depend on company-backed software, tbh. – Paul Nathan Jun 09 '09 at 13:50
    • 1
      Paul, that comment has nothing to do with C#, .Net or even programming. This isn't a microsoft bashing discussion, it's about why I hate commercially controlled computer languages. – SpliFF Jun 09 '09 at 14:59
    • 7
      Hmmm.. actually in hindsight I should have realised the stormtroopers would rally to protect the Empire. – SpliFF Jun 09 '09 at 15:03
    • 1
      "Does Second Life running on Linux+Mono count as "significant" and "not tied to Microsoft"?" No, I don't think so, because it's still depending on the .NET frameworks, and mono still has to play catchup with MS. If C# is meant to be a cross platform general purpose language, it's not a very good one, if the only way to use it is with mono, or microsoft. – Breton Jun 09 '09 at 21:30
    • 3
      To be clear, I don't think the constantly changing .NET api counts as an open standard, it's definately a microsoft api. If c#, regardless of platform depends on the .NET api, even if it's mono, the fate of mono, and any programs written with it, depends deeply on the decisions and whims of a single large company. There are other languages where multiple companies have a stake in it, and are thus much safer. – Breton Jun 09 '09 at 21:41
    • 3
      "Personally I don't think that the free software movement should have a monopoly on programming. " That's a contradiction of terms. – Breton Jun 09 '09 at 23:33
    • 2
      There are lots of companies that have some skin in the game as far as Mono is concerned, Novell in particular. See this list: http://www.mono-project.com/Companies_Using_Mono – Brian Sullivan Jun 12 '09 at 17:21
    • 4
      I think that C# sucks as a first CompSci language for the same reason as Java. Both are very verbose, and need huge amounts of boilerplate code. Python would be a lot better (it's free software too, but don't label me as a hippie ;] ) – John Smith Jun 17 '09 at 07:54
    • 1
      I'd like to be tied to a commercial product, if it makes my life easier and happier. .NET makes my life easier and happier, so I like to be tied to visual studio 2008 and windows, what's wrong with that ? I can't understand this hatred towards commercial products... – Nicolas Dorier Jun 28 '09 at 19:51
    • 1
      -1: C# is as proprietary as C. – Bastien Léonard Jul 05 '09 at 20:48
    7

    I'm surprised no one has mentioned Sybase PowerBuilder

    • Confusing syntax
    • Confusing object model
    • Lack of native regular expression support
    • Difficult to use IDE (esp the tool palette)
    Rad
    • 8,336
    • 4
    • 46
    • 45
    • 1
      unhelpful compiler errors, very limited built-in functions, and frequently used by inexperienced programmers to create giant city-of-cards applications which are still "maintained" to the present day... – Colin Pickard May 25 '11 at 11:50
    7

    METLIFE ENGLISH LANGUAGE (MEL)!

    I worked for a company that wrote tools to automatically find and fix Y2K problems in Cobol and PL/I. MetLife approached us with 2m lines of code they'd written in MEL, a language they developed in the late 50's or early 60's. MEL was a language that helped inspire Cobol, and its procedural code would look reasonably familiar to any modern Cobol programmer.

    We had a strong developer take a crack at writing a translator to rip through MEL programs and correct identified dates. He actually got a demo going in a couple weeks, and he thought that another 3-4 weeks of work were all that would be needed to get it into shape for production. Great, we thought, and decided to take on the work.

    Unfortunately, he hadn't really studied MEL's very primitive equivalent of the Cobol DATA DIVISION (where declarations go). It turned out each MEL program provided its own view of each input or output file, and it only declared those fields it was interested in. There might be 30 or 40 different takes on what an input file with variant records looked like. Talk about blind men and the elephant!

    An exceptionally bright and driven guy then took over and worked out the semantics of identifying which record definitions described what file, a process made much harder by the presence of variant records in many files. He then wrote the algorighms to unify each set of alternate record definitions into a common record definition, and then mapping everything from old emulated Honeywell data types into new IBM mainframe types. It took two person years to get it all working.

    Jim Ferrans
    • 30,582
    • 12
    • 56
    • 83
    7

    Symbian C++ Well, it is not C++. It's learning a whole new language altogether and it doesn't work that well.

    Mercurious
    • 3,228
    • 6
    • 24
    • 20
    • +1 (i never did something realy with it, i used Python for that purpose) but even the documentation and the coding style(exceptions) and all that shit was awful. – Quonux Jul 17 '10 at 19:21
    7

    I have given the same answer elsewhere, but I think it deserves its place here:

    In the late 90s I had to write several web sites in Informix Universal Server web blade (aka Illustra web blade)

    For anyone who doesn't know anything about this execrable environment, it forced you to use the most bizarre language I have ever come across. As Joel Spolsky described it

    When it did run, it proved to have the only programming language I've ever seen that wasn't Turing-equivalent, if you can imagine that.

    More on it here http://philip.greenspun.com/wtr/illustra-tips.html

    And an example of a 'simple' if condition:

    cond=$(OR,$(NXST,$email),$(NXST,$name),$(NXST,$subject))
    

    I wish I could find the full api document, as looking back now in hindsight it would be hilarious / unbelievable / tragic.

    One example of it's dire nature was the fact that it had no loops. Of any kind. It was possible to hack looping functionality by creating a query and iterating through its rows, but that is so wrong it makes me feel sick.

    edit: I've managed to find a complete code sample. Behold:

    <HTML>
    <HEAD><TITLE>WINSTART bug</TITLE></HEAD>
    <BODY>
    <!--- Initialization --->
    <?MIVAR NAME=WINSIZE DEFAULT=4>$WINSIZE<?/MIVAR>
    <?MIVAR NAME=BEGIN DEFAULT=1>$START<?/MIVAR>
    
    <!--- Definition of Ranges ---->
    <?MIVAR NAME=BEGIN>$(IF,$(<,$BEGIN,1),1,$BEGIN)<?/MIVAR>
    <?MIVAR NAME=END>$(+,$BEGIN,$WINSIZE)<?/MIVAR>
    <!--- Execution --->
    <TABLE BORDER>
    <?MISQL WINSTART=$BEGIN WINSIZE=$WINSIZE
        SQL="select tabname from systables where tabname like 'web%' 
            order by tabname;">
        <TR><TD>$1</TD></TR>
    <?/MISQL>
    </TABLE>
    <BR>
    <?MIBLOCK COND="$(>,$BEGIN,1)">
        <?MIVAR>
        <A HREF=$WEB_HOME?MIval=WINWALK&START=$(-,$BEGIN,$WINSIZE)&WINSIZE=$WINSIZE>
        Previous $WINSIZE Rows </A> $(IF,$(<,$MI_ROWCOUNT,$WINSIZE), No More Rows,  )
        <?/MIVAR>
    <?/MIBLOCK>
    <?MIBLOCK COND="$(AND,$(>,$END,$WINSIZE),$(>=,$MI_ROWCOUNT,$WINSIZE))">
        <?MIVAR>
        <A HREF=$WEB_HOME?MIval=WINWALK&START=$END&WINSIZE=$WINSIZE>
        Next $WINSIZE Rows  </A>
        <?/MIVAR>
    <?/MIBLOCK>
    </BODY>
    

    Prettify doesn't know how to colour it, quelle surprise

    DanSingerman
    • 36,066
    • 13
    • 81
    • 92
    6

    CRM114. A language specifically designed for interfacing with a very powerful Bayesian filter, useful for spam-filtering and similar tasks.

    I was asked to use it by a client last year and after looking into it, used some simple Bayesian code off of Codeproject.com instead. Later, I found a message posted on a forum somewhere from the original author of CRM114, apologizing for it.

    The main problem was Latin-derived grammar. The author admitted that he'd been learning Latin at the time, and so integrated it into his project. Thus, it gets strange operator-order and argument conventions. This also led to using the word 'alius' (Latin for 'otherwise' or 'else) where you'd use 'else' in any other language.

    Very difficult to make it do anything at all.

    Aric TenEyck
    • 8,002
    • 1
    • 34
    • 48
    6

    Anyone mentioned the script language used in Autohotkey ?
    Worst language I ever used.

    Mez
    • 2,817
    • 4
    • 27
    • 29
    • I never understood why so many people like AHK. I've seen fairly complex tools written in it, something that would drive me mad! – Ben Schwehn Jun 09 '09 at 12:17
    • 2
      +1 @mez,@Ben I've come to realise that Autohotkey is a TERRIBLE language but a GREAT tool. By this I mean things like string manipulation will drive you mad. But the functionality it provides to automate anything in Windows is unrivalled (even using AutoIT). If only AutoIT and Autohotkey would "get back together", AutoITs more structured language and AutoHotkeys power, it would be unbeatable. – Ash Jun 13 '09 at 03:17
    6

    RPG II?? anyone?

    It was among the worst checkthis Wiki description for a brief intro to a language that lived long past its expire by date.

    On the bright side you could write programs drunk or sober and it didn't make much difference

    kloucks
    • 1,549
    • 9
    • 11
    6

    I think MaxScript, the scripting language which comes with 3d studio MAX, I never could see any logic to its syntax

    Viktor Sehr
    • 12,825
    • 5
    • 58
    • 90
    • Not to mention the lack of lexical scoping... In "fn Test x = ( some_var = x ); Test 0;", does some_var bind to bind to a global or make a local variable? It depends! External code that you have no control over can influence this! – Corey Ross Jun 11 '09 at 02:26
    5

    ABAP

    It's used to program applications for SAP. And it's bad.

    Pascalo
    • 53
    • 1
    • 6
    • 1
      At my current job, I use PeopleCode... while I don't think it's bad, it's not a general-purpose language, a fact that annoys me when I think in terms of algorithms and not in terms of databases. – isekaijin Jul 01 '09 at 02:14
    • 1
      ABAP is BAD, but like other languages like it, far from dead. The vendor lock-in is just too great. – Jé Queue May 18 '10 at 04:37
    5

    Nobody mentioned Vimscript yet?

    My Vim journey was like Coraline's journey into the other side of the door. It was so cool at first and my fingers were happy but then I didn't want to replace my eyes with VIMScript.

    Yoo
    • 17,526
    • 6
    • 41
    • 47
    • +1 I love Vim. Best editor ever. But writing and debugging Vimscripts makes my brain hurt. I'm glad there is Python support these days! – Sander Marechal Jul 01 '09 at 11:57
    • Didn't know there was Python support. It's funny because I always thought that programming in Python felt like editing text in VIM. – Yoo Jul 02 '09 at 17:43
    • Vimscript has got to be the worst language I have ever seen. Worse than PHP, worse than MySQL, and even worse than shell script. At least shell script you have the *option* to deference everything (`$`). In Vimscript you have to concatenate values together then eval them like so `execute 'tabnext ' . g:previouspage`. And even that will fail if you forget to put the space after `tabnext` or if you accidentally typed `tabNext` – puk Mar 01 '12 at 07:18
    5

    In the mid 90’s I worked in a small management consulting firm using a GIS product called MapInfo which had a weak scripting language called MapBasic.

    I don’t remember the specifics, but basically at that time there were objects* which could only be instantiated when hard coded (as opposed to instantiating with variables). This was a total pain in that it appeared to do everything you needed done, until you actually attempted to implement. Implementation was either impossible or very kludge heavy.

    I was a novice at that point and had a lot of difficulty a) predicting what could and could not be done, and b) explaining why to my non-programming manager. It was frustrating none the less.

    There are a lot of languages and tools which are weak in certain areas, but after dealing with Map Basic, even Visual Basic 3.0 felt liberating!

    *-I don’t remember if it was all objects or only certain ones.

    John MacIntyre
    • 12,910
    • 13
    • 67
    • 106
    • 5
      I can't imagine Visual Basic feeling liberating after using any programming language, wow, it must have really sucked! – John Bellone Jun 07 '09 at 16:28
    • @jb-It did ... and trust me; I hated VB. – John MacIntyre Jun 07 '09 at 21:54
    • @Andrei Rinea-While I share your enthusiastic hatred for PHP, MapBasic is by far the worst language I've ever had the displeasure of working with. – John MacIntyre Jun 07 '09 at 21:56
    • 2
      I use MapBasic a lot. I don't have as much hair as I used to. PHP is a delight, compared. The worst bit for me is that it doesn't seem to be very well geared towards what it is meant for: making maps. I spent ages trying to make a layout window at a certain scale. Instead of scaling it to, say 1:1000 it would go to 1:1001. But then trying to scale to 1:2000 would give you 1:1999! Arg! Ah well, at least my MapInfo dungeon text adventure, "Legend of the Troglodyte Surveyor" is coming along nicely :D – Mr_Chimp Oct 01 '10 at 13:45
    5

    First, a few caveats: I tend to give a pass to languages that serve their intended purpose well enough, but get shoehorned by the corporate world into doing more than their designers intended. For that reason, I give a pass to VB and its VB-office variants. For quick prototyping, VB was hard to beat. It failed massively when people tried to use it for enterprise-level work. Same for Perl, which is a great scripting utility which somehow got promoted to the CGI language du jour back in the day.

    But a language that fails to meet expectations, even on its own terms? For me, that's no contest: JavaScript, for three big reasons:

    1. lack of decent debugging capabilities (Firebug helps, but it's not enough),
    2. the way it simply halts whenever there's an error, forcing the programmer to add alert("in functionX") just to make sure you made it to functionX, and
    3. its infuriatingly obscure error messages.

    And if I were allowed to choose a framework, it's likewise an easy choice: JSF and IceFaces.

    rtperson
    • 11,632
    • 4
    • 29
    • 36
    • 24
      You're complementing VB while dissing JS? You, sir, are mad... – Shog9 Jun 07 '09 at 16:11
    • @Andrei - I've never worked with PHP, though you're probably right. – rtperson Jun 07 '09 at 22:03
    • 1
      PHP at least has a reference manual. – too much php Jun 09 '09 at 02:44
    • 1
      @too much PHP: Javascript has a reference manual (ISO/IEC 16262). The catch is that none of the implementations seem to implement it completely, or even similarly! – Powerlord Jun 09 '09 at 13:57
    • 1
      I'm right there with you with Javascript. It's a love/hate relationship though. I hate it for the reasons you state. But at the same time, I use it all the time anyway because of what it can do for a website. I mean, just think of how much would be missing from StackOverflow without it... – Steve Wortham Jun 10 '09 at 21:37
    • I keep seeing people say that firebug is not enough. I've never seen any other language with a debugger as good as firebug, so I wonder what kind of magical language has a debugger that lets you see through time, cure cancer, and find the missing link. – Breton Jun 10 '09 at 22:22
    • 1
      @Breton - Firebug has its good points and its bad points. The console is fantastic. The ability to inspect your HTML and CSS and change things on the fly is equally great. But my experience with stepping through its JS debugger has been meh at best. My last experience with it, a few months ago, it missed breakpoints, stepped through lines of code that were not there, etc. After a while, I gave up on the script debugger and stuck with the console. – rtperson Jun 11 '09 at 19:01
    • 4
      -1 @rtperson, your "3 big reasons" have nothing to do with the Javascript language itself and everything to do with the host it is running within. If you had have complained about say, the scoping rules Javascript uses, or a lack of "built in" API functionality you might have had a point. For your "problems" you should blame the browser and dev environment vendors, not Javascript. – Ash Jun 13 '09 at 03:26
    • 1
      @Ash - 's OK, plenty of people have already voted me down for this one. But I believe the question was not "What language did you have lexical issues with?" It was "What was the worst language you've ever worked with, and what annoyed you?" Well, this is what annoyed me, and considering that the implementations are pretty crappy across all browsers I've worked with, I feel pretty safe blaming the language. (I was going to say "uniformly crappy", then I remembered IE. *shudder*) Anyway, it's a subjective question. Vote how you'd like. – rtperson Jun 13 '09 at 13:36
    5

    If we ask ourselves this question X years down the line (X = 10 or 20 or ?), we would all say in chorus that "all the languages of the 20th century sucked". Such would be the paradigm shift that we would be doing things in a much different way ... though I cant visualize how !

    Sathya
    • 2,371
    • 5
    • 19
    • 27
    • 9
      I really doubt that they will say that either C or lisp sucked. Now then, if given 1990 era C++ they would indeed say that that C++ sucked. – Joshua Jun 08 '09 at 02:46
    • I sort of doubt i will ever feel that python sucked, even if I master 10 languages that are all better. For instance, when I was using HyperTalk, I felt it's weaknesses, but overall, it was a reasonably comfortable language to use. I don't think i'll ever feel it 'sucked' even if I never choose to write another line of it. – SingleNegationElimination Jun 10 '09 at 06:47
    • looks like "sucked" puts things in a negative perspective. Another way of putting it would be like ... " in those days we had these kinds of primitive langauges ... and yet we did all those fantastic things with them ..." TO draw an anology, the Pyramids were built with rather primitive tools compared to what we have today. But that doesnt make Pyramid any less marvellous ! – Sathya Jun 10 '09 at 08:46
    • Some of the software written on early computers is amazing. – David Thornley Jun 18 '09 at 21:36
    5

    The old Excel macro-language It was really frustrating to store variables in an excel sheet. VBA was also pretty bad.

    Kire Haglin
    • 6,569
    • 22
    • 27
    4

    A half-baked object orientated extension to C. In embedded systems there is still a lot of C only projects. So every now and then somebody thinks his object orientated solution is all that is required to whip this project into shape ... leaving a massive maintenance mess somewhere down the line.

    Usually the person starts out with modest and noble aims but it just gets away from him, every time. He hands over to a different programmer that thinks this great. OOP in C, how neat and then butchers the already tragic code he does not understands. Soon it is beyond any repair. The worst one I have seen no driver could compile without including all the headers of the objects that is going to use it as well as the header files for that component user up to the highest level.

    Any programming language will become a monster if it is not used as intended.

    Gerhard
    • 6,850
    • 8
    • 51
    • 81
    4

    LabVIEW (is that even considered a language?)

    It was horrible. If you want to broaden the term, HTML sucks too, as does XML.

    Peter Mortensen
    • 30,738
    • 21
    • 105
    • 131
    Tim
    • 20,184
    • 24
    • 117
    • 214
    • IMHO LabVIEW is not a language - the language it uses is G and LabVIEW can actually be called a tool. And I think LabVIEW is good for things like automation, especially when developed by people who do not have programming experience like researchers and scientist. Correct me if I am wrong... – Manoj Jul 01 '09 at 10:25
    4

    Good God, you mean no one has used PL/SQL? The spawn from the hell that is Oracle is interpreted, and lives in the context of the Oracle Server. All output is spooled, until the program is done. There is an absolute limit on the amount of output that it can display. It is nearly impossible to debug. Ga... I feel I'll just thinking about it.

    Peter Mortensen
    • 30,738
    • 21
    • 105
    • 131
    EvilTeach
    • 28,120
    • 21
    • 85
    • 141
    • PL/SQL and LabView I wondered why those two didn't appear earlier here. – Ludwig Weinzierl Jul 01 '09 at 19:31
    • 1
      You can choose whether you want to use PL/SQL interpreted or compiled, there is no longer a limit on the amount of output and there are good debuggers and profilers. You can use for instance autonomous transactions to make it possible to see output before the program is done. – tuinstoel Nov 20 '09 at 19:58
    • pl/sql has nothing on UniVerse's alternative UniBASIC. – Evan Carroll Jan 25 '10 at 21:09
    4

    Its VB6 NOOOOOOOOOOOOOOOOOO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! You end up like Winston Smith in the ending of 1984....

    abmv
    • 7,042
    • 17
    • 62
    • 100
    4

    System RPL, used by HP 48, 49 and 50 graphing scientific calculators. There were times it seemed to me that the compiler actually had produce a higher-level language for the processor to execute.

    Juliano
    • 39,173
    • 13
    • 67
    • 73
    • Yes, there is a VM that System RPL runs on. If you can dig up the gcc port for the calculators, you should see some sweet improvements. – Paul Nathan Jun 09 '09 at 13:57
    • I actually found this language to be fairly nice. It was sensible and consistent, and offered reasonable tools for encapsulation. That's not to say it was anything inspiring, but it is far from the bottom of my list of favorites. Of course, with little or no formatting in the builtin editor, it was a real pain to read! – SingleNegationElimination Jun 10 '09 at 06:42
    4

    I was going to bitch and moan about Java, but obviously it isn't THAT bad and that would have amounted to trolling, and besides, I just remembered something far worse:

    Magic II.

    It just barely qualified as a language. Really, it could be more accurately described as a pre-SQL database system with a data driven programming model. It was based on the astute observation that almost everything you ever do with database tables involves doing something before you start iterating on the data, then iterating on the data, and then maybe doing something after you're done.

    "Programming" Magic involves filling in fields in tables that describe those three phases of a program's life. It also had a text mode screen designer that tied in with this whole mess. A trained Magic user could knock out reports and data entry screens at a reasonably fast pace, which made management happy.

    The problem for me was that the language had very minimal abstraction facilities. You could define routines that you could call from other routines. That's it. No data structures other than database tables, no in-memory arrays (you could define new tables, though!)

    No hash tables, no way to organize variables (which the language did support) in any meaningful way. No lists. Nothing. Of course, no classes or anything resembling an object model, but honestly - I could live without that. And I did.

    Worse yet, the "program" had bits and pieces that were hidden away in fields that you had to zoom into to be able to see - certain expressions, etc. So you could never just read a screen of code and know what it did.

    This thing took data driven programming to its ultimate, sad apex. It's an obsession, manifested in a programming tool. I was glad to put that miserable piece of junk behind me.

    Recently, I met a former co-worker who worked with me while I was using Magic. It's been almost 20 years since I've done that, but she was all too happy to tell me how she was tasked with maintaining one of my projects, and that she declared defeat when she found a recursive procedure in there somewhere. She had never seen anyone implement recursion in Magic. No one ever has. It was uncharted territory. I don't think anyone realized the tool was capable of recursion.

    The project had to be rewritten in a hurry, before it caused someone's brain to explode.

    Ori Pessach
    • 6,777
    • 6
    • 36
    • 51
    4

    For my senior design, we programmed a Canon camera to produce depth maps using CHDK. Most of the code was written in C, but you have to interface to it with this ridiculous language called uBasic. Basically, it wasn't implemented with a proper parser, and so variables can only be 1 letter, it's insanely slow, and if you make a mistake, the camera just shuts off.

    rlbond
    • 65,341
    • 56
    • 178
    • 228
    4

    PC-FOCUS

    I worked on a warehouse inventory + management system where the back office subsystem was implemented in PC-FOCUS.

    All that needs to be said about this language is that there was a 100+ page chapter in the programming manual titled "Workarounds".

    Jeff Leonard
    • 3,284
    • 7
    • 29
    • 27
    4

    FOCUS, touted as a '4GL' (fourth generation language). Some systems could use FOCUS like SQL, doing db queries, the results of which were wrapped in BASIC or some other procedural language, but the system I worked on at Boeing in the 80s didn't have that. Kind of like a very poor excel to run a business enterprise. That was the only programming job I hated.

    Jay
    • 10,200
    • 4
    • 28
    • 36
    4

    Lingo, for Shockwave Flash (or whatever it was). Quite horrible, basic-ish thing with a bit too dynamic type system. The editor sucked, the debugger sucked. Arghh!

    It probably didn't help that the app I had to take upon my shoulders was written by scriptkiddies, which used the type of a variable to steer control flow. (If it's a string, we're in mode A, so it means X, if it's an int, we're in mode B, so it means Y). $£€£@£$#"¤#" !!

    I like Python, and I suppose something equally horrible could've been made there, but the community and tools are much nicer and rigorous.

    Macke
    • 24,812
    • 7
    • 82
    • 118
    4

    Webspeed and SpeedScript.. Just terrible, no explanation :)

    ozzijb
    • 674
    • 5
    • 10
    • 17
    3

    Javascript before the existence of FireBug and coding it using a Notepad.

    It was the most horrible code in my life, JS was case sensitive and I had lot of headaches. IE detect errors in a weired way...

    Omar Abid
    • 15,753
    • 28
    • 77
    • 108
    3

    Dataflex 2.3 and VDF4.

    VDF 4 is what drove me away from Dataflex.

    One of the most stupid things they did was use the Windows message for the third mouse button to communicate between the IDE and the complier. It worked fine unless you had a 3 button mouse.

    Dion Brown
    • 136
    • 3
    • I would like to note that this complaint is about product versions released in 1987 and 1994, respectively. I work for the company that makes the products and yes, those Jurassic versions did do some, let's say "odd" things. – Dennis Mar 06 '11 at 01:48
    3

    Any language can be the worst in a right hands. And improper teamwork makes it even worse. I mean, if it's not fun enough to shot in your own foot, you can always try shooting some coworkers feet. So far the best language I've seen to do so is C++. You can really hurt colleagues brain with it.

    Secko
    • 7,664
    • 5
    • 31
    • 37
    akalenuk
    • 3,815
    • 4
    • 34
    • 56
    3

    RPG

    Not talking about Role Playing Games here, fellas. I took COBOL in college, as well as RPG IV. If there is any language that makes me want to dig my eyeball out with a fork, it's RPG. It's pretty much "column-based" code, in that you don't just write your code from left to right, you have to make sure you are in the correct columns. The reasoning behind this is that the language was originally created for punch card development.

    I can't write to a file! What the heck!

    Well duh, dummy, you forgot a capital F in column 68.

    Community
    • 1
    • 1
    Josh Stodola
    • 81,538
    • 47
    • 180
    • 227
    3

    Oberon.

    In our first year at university, everyone had to program in Oberon. I think the idea was to make sure nobody had a head start. The language was tied to the Oberon OS/GUI which was horrible! I'm not sure if anything changed, but that was definitely my worst programming experience ever.

    Svante
    • 50,694
    • 11
    • 78
    • 122
    Christo
    • 1,802
    • 4
    • 20
    • 31
    • We had to build a compiler for it in the university... – David Rabinowitz Jun 07 '09 at 19:14
    • I've mucked a bit with Oberon. The language itself is nice. The OS would be painful for someone used to windowed OSes though. It had a philisopical problem with clipping windows, so all windows had to be non-overlapping rectangles. – T.E.D. Jun 09 '09 at 12:48
    • Modula-2, in my opinion, was Wirth's peak. – Nosredna Jun 28 '09 at 22:01
    3

    Definitely the worst language I've ever used was Oz. It is a failed attempt to create a multiparadigm programming language. As you can imagine it ends up being really obscure and with an extremely complicated syntax. You have different delimiters to mark that you are in working in a functional way or in a imperative way. I always find a little strange defining classes with functional non side effect method parts.

    Sambatyon
    • 3,316
    • 10
    • 48
    • 65
    3

    APF. You are eprobably lucky enough never to have heard of this nightmare. It was an expensive add on to IBMs mainframe hierachical database/transaction monitor IMS system. Where to start.

    There was no support for arrays. If you had an array of ten items well you coded ITEM1, ITEM2 etc. and wrote ten lines of code to process each item.

    Your code was stored in the database and interprated at run time. Do to the internal stucture of the thing your code was broken up and stored in several records. It was absurdly easy to overwrite someone elses code.

    Some of you code was associated with the transaction (IMS speak for a service) but some of you code was assoicated with the database record -- if you got it wrong bits of your program ran every time someone accessed a record.

    No debugger, the "compiler" only did basic syntax checking most errors appared at run time, with one of it four error messsages.

    One of these error messages was 'INVALID DATA TYPE' -- thats all, no variable name, no line number, no clue.

    Just plain horrible.

    James Anderson
    • 27,109
    • 7
    • 50
    • 78
    3

    In terms of languages I've come across, I'll vote for COBOL and Scheme.

    COBOL was definitive proof that business majors should never write a programming language (and this is coming from a business major graduate -- CIS). You should not be able to write semi-coherent novels and have it compile into something. I know that it had its use 40 years ago, but someone ported it to COBOL.NET, for crying out loud.

    Second place would be Scheme, which had exactly one variable type: the linked list. Trying to learn how to think in it is like trying to learn how to think like a polar bear if you're an American-born Martian. It's totally alien to everything else.

    In terms of languages I've used professionally, VBScript hands down. It's like VB only worse. I once tried to implement the MD5 algorithm in VBScript. The first thing I had to do was implement freaking bit-shifting operations. Rather than reinventing the wheel, I went out and looked for an implementation. The one I found, I kid you not, followed the following algorithm:

    1. Convert your number to hex
    2. Convert your hex to a string, e.g., 0x08 -> "08"
    3. Using a giant select case statement, convert each digit to a string of 1s and 0s, e.g., "8" -> "00001000"
    4. Now that you have a giant string of 1s and 0s, shift them around as necessary

    It was a total mess. And it was the best one I found.

    (Caveat: That's the algorithm as best I remember it. It was 6 years ago. :) )

    Ari Roth
    • 5,392
    • 2
    • 31
    • 46
    • 3
      COBOL was written by some pretty smart computer people. It was not a business school project. It's just really old, and most languages that old have evolved into something better (Fortran, Lisp), or been replaced by descendents (Algol), or been forgotten completely (Autocoder). – David Thornley Jun 08 '09 at 16:07
    • 7
      Scheme is a different sort of programming language, and forces a different way of thinking, but I think that's a good thing about it. It's not like you're forced to learn it, in general, unless you're taking a computer science course - and in that case you need to understand the concepts behind it. – David Thornley Jun 08 '09 at 16:08
    • I love scheme. Once you learn to think in scheme, it's really easy, and the techniques are useful in other languages as well. – Brian Postow Jun 09 '09 at 14:11
    • 1
      Can't you bitshift by multiplying/dividing by powers of two? –  Jun 10 '09 at 06:46
    • 7
      Scheme has had vectors, hashtables, strings, characters, integers, fractions, and more, for the entire time I've known it, which goes back at least to 1995 or so. If you hated it, you hated it, but saying that you hated it because it only has lists is...well, weird. – Benjamin Pollack Jun 11 '09 at 00:16
    • @Charlie Somerville Shhh! Don't tell that to the guy who came up with that algorithm. :) In retrospect, yeah, but at the time I was still learning and hadn't made that connection. – Ari Roth Jun 11 '09 at 19:14
    3

    SNOBOL had some neat features, and string processing abilities more extensive than Perl's. It also had one type of statement: <base string> <match string> = <replacement string> :S(<label>) :F(<label>) where most of the components could be omitted. Control structures were done by jumping to one label or another (if present) depending on whether the match string could be found in the base string. The strings could include assorted functions and substrings, so a reasonable SNOBOL string could include all the syntax trees mentioned in the back of your favorite programming language standard.

    It was trivial to write a parser in it (although it wouldn't necessarily be at all efficient), but anything like arithmetic or loops were pains.

    David Thornley
    • 56,304
    • 9
    • 91
    • 158
    3

    Without a doubt, it was SmallTalk. But only on a technicality: the actual language was fine, but the IDE we used for it for class was VisualWorks, which is singly the worst IDE for anything I have ever experienced. Here's a few examples of the horrors:

    -You can't save the image (which is your whole project wrapped into a single file) unless every bit of code is completely syntactically and semantically correct -It crashes often, and the UI is horribly designed. Buttons would be drawn off the window and such. -One time VisualWorks froze on me after I had done about 2-3 hours of fresh work, unfortunately without saving. Luckily (I thought), the save button still worked. So, with a sigh of relief, I saved my project. But, because of VisualWorks method of saving your project as an image, when I reopened my file, it saved my project in the frozen state. I ended up having to go back to an earlier version of my code and losing a couple hours of work.

    And the single worst symptom of horrible IDE design: -There is only a single step of undo. And NOT ONLY THAT. Hear this. If you delete a line of code, move the cursor somewhere else, and then hit "undo," it will paste the line of code where the cursor presently is, not where the line originally was. WTF is that?? I think freakin' LOTUS 1-2-3 had better undo capabilities than that!

    P.S. I know I'm not talking about the language, but since this represented my experience working with the language, I felt I could still reasonably give my answer in this thread. :)

    JoeCool
    • 4,392
    • 11
    • 50
    • 66
    2

    For me, the answer is Crystal Syntax, the BASIC-like language used by Crystal Reports. Trying to accomplish anything other than mere comparisons is difficult at best and impossible at worst. Granted, they do arrays fairly well:

    {some_database_field} IN ["firstValue", "secondValue", "thirdValue"]
    

    But the following doesn't work at all:

    {some_database_field} NOT IN ["firstValue", "secondValue", "thirdValue"]
    

    Even though the language does have a NOT operator.

    Scott
    • 6,411
    • 6
    • 39
    • 43
    2

    Oh, come on. In 3 pages, no mention of Forth? Seriously?

    Sure, like APL, it is powerful and it has its place. But like APL it competes for first place in the Write-Only Language category. I still curse the physics professor who forced this on me in the late 80s because he was convinced it was going to take over the software world.

    My heartfelt regrets to the 5 people in the universe who process reality in reverse polish notation. Or should I say something like "apology +"?

    Newton Falls
    • 2,148
    • 3
    • 17
    • 22
    • I loved Forth, and still do, but I never, ever expected it to ever be popular. If we were lucky. Perl, PHP and MUMPS have **nothing** over Forth when it comes to the ability of writting absolutely-impossible-to-read code. Nothing! APL, I'll grant, can give it a run for its money, in its own way. – Daniel C. Sobral Jan 05 '10 at 16:57
    2

    JCL (Job Control Language) has to be the worst thing I have ever touched

    SQLMenace
    • 132,095
    • 25
    • 206
    • 225
    2

    Smalltalk.

    I had to learn it at the university. Hated every aspect of the language. Maybe our professors just made a dumb choice on the language implementation, but basically it worked like this:

    • There was no sourcecode you could browse. There was just a class-tree where you could create and edit the method implementations. No way to save the code other than to cut'n'paste them to a notepad. You could save sessions, but these are binary dumps.

    • The entire environment has been written in Smalltalk, and boy - was it slow. You could see the entire screen repaint every time you hit a key. The editor (that you had to use due to lack of load/save sourcecode) lacked basic edit-features like insert/override mode.

    • The language was pure in a way that it wasn't possible to terminate a loop early. All things that made programming easy and efficient are forbidden in the language.

    • Everything was an object. Override the comparison operator of a boolean and the entire system crashed.

    Nils Pipenbrinck
    • 83,631
    • 31
    • 151
    • 221
    • 6
      Your first two complaints concern the environment and not the language. Most Smalltalks are nothing like that, and you're right that that kind of environment is a serious pain. Especially when trying to learn. Point 3 is something that a good approach to teaching the language would have shown you how to think differently about how programs should work. Why learn a new language if you're not going to learn to think in its style. Point 4 is a matter of taste. I'm sorry your professors weren't able to teach you how OO programming works. – PanCrit Jun 07 '09 at 16:28
    • 2
      Hi PanCrit: I already was a very good C++ programmer at the point when I had to learn smalltalk. For some reason however smalltalk tried to do evrything in a different way for no good reason (e.g. message passing syntax instead of method calls. In the end it was the same thing..) Btw: I did somme research and the environment I had to work with, and to my surprise it's still alive. It's called VisualWorks. You still can't save code but only save core-dump like structures (just checked). I wonder if nowadays the scrollbars and edit-windows behave as they should in the win32 world. – Nils Pipenbrinck Jun 07 '09 at 16:59
    • btw - sorry, kay. It was a nice experiment but failed the praxis test for me :-) – Nils Pipenbrinck Jun 07 '09 at 17:00
    • 10
      Complaining that Smalltalk has arbitrary differences from your preferred language does not make Smalltalk bad, particularly when Smalltalk came first. If you had learned Smalltalk before C++, you would probably have similar complaints about C++. – user57368 Jun 07 '09 at 17:49
    • 4
      The fact that Smalltalk scores -2 in a question about *bad* languages must mean it's pretty good! – Barry Brown Jun 09 '09 at 00:37
    • @Nils: Smalltalk did not do things just to be different from C++; it's a completely different language, with very different takes on things. I've got to learn it sometime, but Haskell's next on the list. – David Thornley Jun 18 '09 at 21:41
    • If you like Ruby and/or Objective-C, you might just like Smalltalk. Both of them have bits of Smalltalk in their ancestry. – Barry Brown Jun 28 '09 at 17:52
    2

    CodeGear Delphi

    Its really not the language I disliked, but the IDE: CodeGear RAD Studio for Delphi. This is easily the worst, most buggy, crash-happy IDE I've ever used. Me and the other Delphi programmers would routinely lose hours of development time everyday because the IDE would crash or freeze.

    After we installed CodeRush, the application became virtually unsuable. It crashed in regular 5-15 minute intervals, even without user input. Even worse, mysterious errors were triggered by basic debugging, such as hitting a breakpoint (routinely, the debugger would hit a breakpoint and simply freeze in its tracks on a trivial line, like a variable assignment. Nothing you could do would make it proceed any further). If you left the program alone, it would sit stable for up to a half hours before throwing some kind of memory exception.

    So, after we'd spent thousands of dollars on licenses CodeGear RAD Studio, no one wanted to use it. By the time I left the company, all of our Delphi projects were coded with VIM instead.

    Juliet
    • 80,494
    • 45
    • 196
    • 228
    • Sadly, this is the exact reason I left off using Pascal. FreePascal and Lazarus still aren't good enough, and the free IDE from CodeGear (Delphi Turbo) had huge instabilities for me. All I had to do is hit a key for it to freak out sometimes. And CodeGear's customer support, and patching, for Turbo was non-existent. There was no point paying for an unstable IDE when the free version wasn't even stable enough for my basic needs. – Robert K Jun 07 '09 at 18:28
    • 4
      Doesn't answer the question. The OP was asking about bad languages, not bad IDEs. – Joe White Jun 09 '09 at 01:14
    • Delphi *is* the environment. The language is actually Object Pascal. And the whole point with Delphi is the environment, The IDE, componentes debugger, seamlessly integrated. I liked Delphi. But then I used another (presumably earlier) version that didn't crash. Without the IDE, the whole point of Delphi is gone. – Lennart Regebro Jun 30 '09 at 07:53
    2

    "Visual C++".... So much legacy code interweaved.... everywhere.

    Made me love Obj-C.

    Rev316
    • 1,920
    • 2
    • 19
    • 24
    • visual c++ is really just c++. It conforms very closely to the standard (or at least other c++ releases). Are you perhaps thinking of MFC, ATL, or WINAPI? – Steve Jun 07 '09 at 18:50
    • Thanks for the clarification Steve, but it's the WINAPI. Though, I understand it's not a language per say, but it was such a miserable experience.... – Rev316 Jun 08 '09 at 14:05
    • VC6 is the worst. It's template support is so bad that most of the stuff in doesn't even work. – T.E.D. Jun 09 '09 at 12:45
    • @TED - 6.0 came out in 1997, hard to fault it too much... @Andrei Rinea - enough w/ the PHP comments everywhere - we get the point. – Aardvark Jun 10 '09 at 14:53
    • Bashing the Windows API is pointless. It was invented about 25 years ago and it's been showing it's age for a decade already. It is extremely huge and powerful, but is also extremely complicated, as it has gone the transition of x86: 16-bit, 32-bit and now 64-bit, BUT was also modified to be platform-agnostic in NT. – CMircea May 22 '10 at 14:21
    2

    PowerDynamo

    It was a product from Sybase that stored the webapp code right in the database along with your data. There was no variable scope, and the strlen() function was essentially a random number generator.

    Grant Limberg
    • 20,913
    • 11
    • 63
    • 84
    2

    I also forgot to mention prova and yes, it is a mixed language. It is a prolog implementation built on top of java which means that it is damn slow. They sell it by its ability to call java functions, the sad part is that you lose backtracking when you do it. So, all in all, you lose the strengths of both languages. I still don't understand why the authors didn't choose just an implementation of prolog inside java, so you can call prolog code from java instead of build your own interpreter.

    Lucas Jones
    • 19,767
    • 8
    • 75
    • 88
    Sambatyon
    • 3,316
    • 10
    • 48
    • 65
    2

    My vote is DB/C DX which is based on the DATABUS. I am sure most of you guys have never heard of it, and those that have.... I am sorry.....

    Harold
    • 228
    • 2
    • 6
    2

    Worst Programming Language? - Brainfuck

    I haven't worked with it myself, but I would call it the worst. It's generally used as a challenge though, not for production (more like: I'm bored this weekend, let's see if I can re-write tic tac toe in it). Check out it's Hello World program on wiki.

    Jack
    • 1,250
    • 1
    • 14
    • 26
    • 1
      It's a demonstration language, not a real programming language. – RBarryYoung Jun 10 '09 at 02:52
    • 4
      bf was not intended to be good or bad, but it was intended to have the smallest full compiler imagineable. at 233 bytes of x86 code, including exe headers, its unbeaten. The language naturally suffers for it, of course. – SingleNegationElimination Jun 10 '09 at 06:36
    • 3
      I seriously doubt anyone ever *worked* with this language. I mean worked, as in trying to get something done (as opposed playing around, or writing something as a mental challenge). – Jonik Jun 17 '09 at 05:46
    • If you are going to add esoteric languages, Malbolge beats Brainfuck without breaking a sweat. – CMircea May 22 '10 at 14:30
    2

    OPS5. Even thinking about it now makes me openly weep.

    Tim Sullivan
    • 16,808
    • 11
    • 74
    • 120
    2

    dBase II (that's 2, not 3): Fortunately I didn't use it a lot, and it's been over twenty years, so I don't remember much except the pain! IIRC, its liberal use of special characters in variable names (and other places?) made it almost impossible to read, and it was lacking in flow control. It seemed that 3 got a lot more use (and already did when I was using 2, but my employer was too cheap to upgrade), but I don't know if it was any nicer.

    PTBNL
    • 6,042
    • 4
    • 28
    • 34
    2

    maybe FORTRAN.... I'm still havinh incubius of it.

    Lopoc
    • 1,308
    • 5
    • 16
    • 26
    1

    I4GL (Informix 4th Generation Language).

    Thankfully, it's pretty much dead. The language was not hard to look at or write, but implementation flaws made it nearly useless.

    First of all, it was really two languages- the interpreted (more flexible, slow) and the compiled (nearly useless, the one that actually finished running in your lifetime). Proprietary, of course.

    Early versions lacked some arithmetic operators, so you had to push temporary data into the database and use SQL for math.

    It was supposed to have multi-user capabilities, but since the backend (Informix Turbo, remember that?) lacked proper locking, instead of a 90 second wait on a locked row followed by a useful error return, you would get an instant return with a non-usable non-error return value. Since I4GL was useless without the backend, I consider that a flaw in the language runtime.

    I once had a job hacking all the previous programmer's Unions into series of smaller selects in I4GL loops. The reason, the unions would not complete in your lifetime. Of course, the project manager had removed the index Unique constraints, since they made the inserts crash so much.

    kmarsh
    • 1,388
    • 8
    • 21
    1

    No-one had mentioned DCL???

    Artyom
    • 31,019
    • 21
    • 127
    • 215
    • 1
      DCL as in PDP-11 / VAX DCL? DCL Ruled! – John Saunders Jun 09 '09 at 00:28
    • DCL? I take it that you've never had to write a command file for DOS/Windows. DCL, 20 years older, looks like it was divinely inspired by comparison. – RBarryYoung Jun 10 '09 at 02:49
    • 1
      I seem to remember loads of quotes, like '''""''' or something. Otherwise DCL was a pleasure to use. – Lennart Regebro Jun 30 '09 at 07:45
    • @Lennart: The apostrophe (`'`) is a very powerful operator in DCL, basically a string dereferencer. You can put a variable surrounded by apostrophes anywhere in the code, and its value, converted to string, would be considered part of the source code (and in any part of the syntax). Inside strings literals (which uses the quotation mark - `"`) you had to further escape it by doubling the first apostrophe: `WRITE SYS$OUTPUT "Welcome ''username', you have ''new_message_count' new messages!"`. I use it to this day, and except the poor error handling, it's okay. – Allon Guralnek Aug 15 '10 at 10:02
    1

    Nobody said AS400????

    I had that at university, and it was definitely the worst...

    Martlark
    • 14,208
    • 13
    • 83
    • 99
    Sergio
    • 8,125
    • 10
    • 46
    • 77
    1

    I'm surprised that no one has mentioned INTERCAL: The Compiler Language with No Pronouncable Acronym. It doesn't have a goto statement. It has a come from statement!

    Ok, seriously though, my two candidates are VB, and the combination of HTML, PHP and Javascript I have to work with.

    VB because it has 5 different loop constructs. for, while do, and do while I understand. But do you really also need until do and do until??? Really?

    HTML/PHP/Javascript not because of any specific feature of any of the languages, but because you can intersperse them in very very confusing ways. Opening an HTML tag, having some Javascript in there, and in the middle, starting a PHP if, closing the javascript and HTML tag, and then later closing the PHP, and having another close of the HTML and JS.... It ends up looking like (([ ) ] [ ) ] )

    It might seem as though that's just bad code, but I haven't yet figured out another way to do what we're doing that way.

    Brian Postow
    • 11,709
    • 17
    • 81
    • 125
    0

    Granted, I don't have that much experience with different languages, but I gotta say Python. Even though the language it self is okay, I just hate the " " != "\t" etc. indents. Even though the idea of "automatic" scope ending is fine, this just lead to too many errors / time spent pressing space 200 times to use other peoples code :(

    Martlark
    • 14,208
    • 13
    • 83
    • 99
    cwap
    • 11,087
    • 8
    • 47
    • 61
    • Downvoted because I like python and the question is tagged as subjective :P – shylent Jun 24 '09 at 15:30
    • Upvoted because I like python and he expressed his point of view in a clear way ;) JK – Stefano Borini Jun 28 '09 at 16:10
    • Why you would have to press space to use other peoples code is beyond me. Unless you feel you *must* reformat the other persons indentation, and refuse to use automatic tools to do it. :-/ So, yeah, clear expression of opionion, but simply based in incorrect assumptions. – Lennart Regebro Jun 30 '09 at 07:49
    0

    My answer is fairly borderline but I think it's worth putting on the record:

    HTML

    Not a particularly powerful language by any means but given the number of people who have more than a passing familiarity with it and would classify themselves as programmers I think it should qualify.

    A lot of the angst (in this thread even) directed at languages such as PHP has its roots in the limitations of HTML. Consider a few of its low-points: it encourages the mixing of content and presentation, it is verbose and repetative, the spec still has areas of ambiguity, and, tellingly, implementations have traditionally suffered from a lack of conformance to the spec. The grand ecosystem of client and server side languages owe a lot to the fact that straight HTML is a pain.

    Yes, there are bad quirky languages, but pushing a common language beyond its limits is a greater evil in my book.

    CurtainDog
    • 3,175
    • 21
    • 17
    • 1
      To be fair, HTML has been pushed WAY beyond what it was intended to do. The problem isn't with HTML; the problem is that people are using it to do things that it wasn't designed to do. HTML should have been replaced with something else a long time ago, but by the time it should have been replaced it was too late. – 17 of 26 Jun 09 '09 at 13:56
    • 15
      HTML is a *markup* language, not a programming one. – akappa Jun 09 '09 at 21:57
    -1

    Visual Basic. I simply fail to understand its cryptic syntax, since it doesn't follow any programming convention. As a guy used to the syntax of C/C++ I may be partial though. But that doesn't undermine the fact that VB is THE worst language I've worked with.

    Checksum
    • 3,220
    • 3
    • 23
    • 24
    -5

    LISP

    Maybe there is nothing wrong with the language but it is just beyond me.

    serg
    • 109,619
    • 77
    • 317
    • 330
    • 12
      There's nothing wrong with Lisp. Approach it with a clear mind, grasshopper. – David Thornley Jun 08 '09 at 16:05
    • Never used LISP before, but I love this example from the Beautiful Code book: (defun triangle-collinear(px py qx qy rx ry) (let ((pq (distance px py qx qy)) (pr (distance px py rx qy)) (qr (distance qx qy rx ry))) (let ((sidelist (sort (list pq pr qr) #'>))) (= (first sidelist) (+ (second sidelist) (third sidelist)))))) – cbp Jun 09 '09 at 12:44
    • 5
      Lisp is very hard to pick up if you are used to non-functional languages. Stick with it. It will open your mind. – T.E.D. Jun 09 '09 at 12:50
    • @cbp, OMFG MY BRAIN DONE EXPLOEDED – Pierreten Jul 02 '10 at 22:36