views:

13925

answers:

101

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.

+8  A: 

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

knittl
there's your ten points for mentioning the community wiki :)
Peter Perháč
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
ok, it's karel …
knittl
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
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.
windfinder
+17  A: 

Visual Foxpro

Arnis L.
Can you elaborate a bit on why?
Emil H
@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 L.
@Emil Why? Mostly cause of strange bugs in VFP itself which caused hours of pain. And because i`m comparing it with .NET
Arnis L.
@Andrei I haven't worked with PHP. Can't tell. :)
Arnis L.
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
@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 L.
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
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
@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
@Joril I would say - it's easy to use it wrong.
Arnis L.
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
@Cheeso my answer was clearly subjective. I didn't post it to make you serious.
Arnis L.
@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.
John Pirie
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
@dna123 "Lots of code to convert to another platform now." the same situation here...
Arnis L.
+14  A: 

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:

Ludwig Weinzierl
+1 on Doors DXL...what a bunch of crap thrown over the wall.
kenny
"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
Yeah, I've heard scary things about DOORS at work. Happily, I haven't gotten routed over to that end yet.
Paul Nathan
+1 Doors is number 12 at www.dreckstool.de (List of worst software ever)
bbuser
+5  A: 

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
I can't imagine Visual Basic feeling liberating after using any programming language, wow, it must have really sucked!
John Bellone
@jb-It did ... and trust me; I hated VB.
John MacIntyre
@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
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
+17  A: 

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!

dicroce
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
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
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
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
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.
TokenMacGuy
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
+38  A: 

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
There was a renumbering utility? Man, that would have saved me some work back when I was 11. :)
rtperson
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
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
You started with 100s, but inside those you went to 10s, then 1s inside those. :-)
Nosredna
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
@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
Anyone here remember programming BASIC on Apple computers and using all the wonderful Beagle Bros utilities?
Barry Brown
I remember the Beagle Bros advertisements. What were their BASIC utilities?
Nosredna
First thing I did was create a tool with which you could create named 'line numbers' and then add those numbers automatically.
Jasper Bekkers
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
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
the line numbers were there so you could do GOTO X*Y+Z ;)
SillyMonkey
@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
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.
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
IIRC, some BASICs used the first couple characters and the length of the variable name to identify variables, which was REALLY weird.
Nosredna
@rtperson, RENUM 100 100
Gordon Bell
I recall actually starting to teach my little sister BASIC for a bit. Of course she just wans’t interested enough. :)
Synetech inc.
+7  A: 

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
I guess it made sense back when there were no freely available and easy-to-integrate scripting languages -- wikipedia says TransCAD was first released in 1985, and that was the case at the time.
Alex Martelli
And yet AutoLISP was introduced the very next year.
GDISK tools were introduced in version 4 around 2000. I'm not aware that earlier versions had scripting capabilities
dassouki
Because writing parsers and interpreters is fun! (I'm not advocating it though)
DrJokepu
+40  A: 

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
@Andrei so you've said twice so far. If you dislike PHP so much, make your own answer rather than spamming comments.
Neil Aitken
Why is that answer so low? VB6 > VBA, yet VB6 is almost at the top.
Meta-Knight
@Meta-Knight-Don't forget it's not really a 'which language is worse', but 'which language is most popularly bad'.
John MacIntyre
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
+2  A: 

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
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
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
btw - sorry, kay. It was a nice experiment but failed the praxis test for me :-)
Nils Pipenbrinck
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++.
The fact that Smalltalk scores -2 in a question about *bad* languages must mean it's pretty good!
Barry Brown
@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
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
+37  A: 

No answer about Cobol yet? :O

Joril
Probably because most people nowadays are smart enough to avoid it ;-)
Zifre
COBOL is nowhere near as bad as some of these others being mentioned.
John Saunders
See my post elsewhere on MetLife English Language, a *precursor* to Cobol that our Y2K remediation company worked on.
Jim Ferrans
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
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
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
COBOL was busy being the punch line of a joke somewhere else...
thomasrutter
@thomasrutter :-) and its arrived just in time to be the butt of jokes here.
Pranav
@John Saunders: other languages described here are just bad. COBOL is beautiful, elaborate, baroque in its terribleness.
John Pirie
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 Kaminski
+180  A: 

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.

docgnome
-1 I dislike PHP's schizophrenic naming conventions, but at the end of the day, so what? Also, are a 'zillion functions' that bad a thing? Choice makes a language work. IDEs exists so we don't have to remember function names. And money is best spent on other things, like beer.
karim79
I disagree.It makes PHP horrible to program in.Also the multiple frameworks that exist creates huge confusion.Search here and see how many results there are about choosing the right PHP framework.
the_drow
The sad thing is that your criticisms are so true and yet people still use the language.
Jim Puls
I disagree. Sure many of the functions are schizophrenically named, but (1) the online documentation is stellar and (2) if you've worked in the language for a reasonable amount of time you remember their names anyway. This is a complaint I see a lot from PHP newbies, but rarely from PHP vets.
Bob Somers
PHP .
Andrei Rinea
@Bob, having spent practically no time in PHP I have no opinion on the language. Having said that your defense of the criticism is ridiculous. The main criticism is that functions do not follow a consistent naming convention, and your response is, "you just get used to the inconsistancy". The objective of this question is to learn from 'mistakes' in previous languages, and any barrier to learning and remembering, without any sort of reasonable gain should be considered a mistake
Nathan Koop
I agree. In my opinion, references have also been a nightmare in previous versions of PHP, but now that PHP automatically passes objects by reference, I don't have to go into references too much so it's much better.
Ray Hidayat
It's interesting most of the complaints are about the standard library of PHP. But what about the language itself?
Will Hartung
@Nathan.What about the C++ language. A same keyword has different meanings depending on the context.It's not bad argumentation, it's true that the programmer just reads the API documentation and gets the function name right the first time.
toto
I love this website. All you have to say is how bad PHP is to get a million upvotes.
Bill Gates
I'm idly wondering how many downvotes it got though...
annakata
I can think of plenty of good technical arguments of why PHP is bad - the naming standards, the _real_ functions, the constant behavoiral changes (magic quotes on, magic quotes off, magic quotes on, magic quotes off). But at the end of the day PHP is still a relatively competent language from a technical standpoint. Its real issue is its user base - 14 year olds who just completed their first tutorial, and decide to alternatively promote/bash PHP and its alternatives. It creates an echo chamber for all the bad elements to grow. MySQL is much the same situation, only on a far worse scale.
David
@Bill Gates I would like to point out that I _am_ making a technical argument why PHP sucks. You'll notice my answer isnt "PHP SUX0RS!!!!!!1111oneoneone" I would hope that people are up voting because they agree with my reasons and not just blindly up voting because it is about PHP suck.
docgnome
PHP's naming inconsistency is partly mitigated by how thorough, useable and accessible its documentation is.
ʞɔıu
I Like php for it's library, but dislike it for it's syntax. Meh.
TokenMacGuy
Fair comment, but I still love it.
gargantaun
Java has a similar problem, where functions had schizophrenic naming conventions until they standardized on the whole bean get/set notation around JDK 1.3. Compare newer APIs with 1.1/1.2. Ick!
Chris Kaminski
The problem with PHP doesn't lie in the function naming, but in backwards compatibility. Last I checked, PHP's functions were named like this since PHP3! So they're consistently named inconsistently. (If you can get that.) Sadly, the developers of PHP don't want to break existing applications, so they retain backwards compatibility ... and summarily shoot themselves in the foot. I like some of the language's capabilities, its great documentation, and its wide acceptance, but the poor naming gives me trouble to this day. Backward compatibility isn't all it's cracked up to be.
The Wicked Flea
My only gripe with PHP is that it makes terrible code easy to write, and good code inconvenient. There's almost always a better language to choose... but it's so damn easy; you can get a lot done in very little time. There's real value in that. PHP is the worst language I won't stop using. ;)
ojrac
@ojrac I agree with the first half of your comment. PHP does indeed make bad code easy and good code difficult.
docgnome
The reason that PHP isn't recommended for multithreaded MPMs is that it wraps a lot of libraries that isn't thread safe. The core of PHP is thread safe. I've been a fulltime php developer for many years, and I upvoted this, btw. PHP isn't a beutiful language.
Emil H
I guess it's kind of hard to refute what you've said, but it's still incredibly easy to program in.
Mark
+29  A: 

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
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
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
+5  A: 

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
You're complementing VB while dissing JS? You, sir, are mad...
Shog9
@Andrei - I've never worked with PHP, though you're probably right.
rtperson
PHP at least has a reference manual.
too much php
@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!
R. Bemrose
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
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
@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
-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
@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
+19  A: 

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
I liked Objective-C, but I wouldn't use it again.
Christo
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).
Phil Nash
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
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
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
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
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
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
I think it makes reading code much easier, because every method's arguments are spelled out.
micmoo
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!I hate Obj-C.
Isaac Waller
Python is much better than Objective-C.
John Bellone
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
+3  A: 

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.

Christo
We had to build a compiler for it in the university...
David Rabinowitz
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.
Modula-2, in my opinion, was Wirth's peak.
Nosredna
+69  A: 
Raoul Supercopter
Indeed, Praat scripts are horrible.
Christoffer
+1 just for the "You make kitty scared"
Pim Jager
Oh god this is some scary shit... +1
the_drow
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
+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
Actually appending $ to variables and functions which are/return strings was in Spectrum Basic. Assembly subroutines with CHR$(), anyone?
Anton Tykhyy
You really deserve two upvotes from me. One for picking such a weird and painful language, and one for making me giggle like a little girl.
Samir Talwar
Hey! What happened to the scared kitty image? I don't want to see a lot of lolcats on SO, but this one worked for me.
rtperson
Sheer evil language. +1 for unraveling what will one of the doomsday horsemen will bring.
Manuel Ferreria
+4  A: 

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

abmv
+14  A: 
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
LOLCODE is da next RoR killa! :D
Arnis L.
any environment where the behaviour hinges on the particulars of the *whitespace* has to be at the top of the list!
JustJeff
So that's Python and F# screwed then.
Daniel Earwicker
@Tobias: This is hilarious. I loled :)
the_drow
Make is pretty bad, but a long way from the worst...
dmckee
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
@JustJeff, to be fair, Make treats space as different than tab, which is a serious problem...
Brian Postow
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
+9  A: 

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
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
If the code had single-letter names for many things, then the problem was not the language but the code.
David Thornley
Yeah... this is why we've developed coding conventions: http://en.wikipedia.org/wiki/Programming_style
fiXedd
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
Andrei, stop spamming this comment everywhere! You're just trolling and deserve a good mute!
The Wicked Flea
+17  A: 

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
PHP has nothing over TECO.
Will Hartung
+1 for APL, but -1 for TECO. OMG, TECO-haters? Really? your hating on the first programmable video editing language, ever?
RBarryYoung
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!
TokenMacGuy
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
type your name into teco and see what happens...
blabla999
+4  A: 

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
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
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.
TokenMacGuy
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
Some of the software written on early computers is amazing.
David Thornley
+19  A: 

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
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
+10  A: 

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.

Richard Clayton
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
Have you ever seen Java? Most verbose standard library ever.
fiXedd
Delphi is worse.. `if ( condition ) then do begin .. end else begin .. end`. Makes me grumpy too.
Blorgbeard
@Blorgbeard: Parentheses and begin/end are optional for simple statements and there's no "do"
pbz
@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
+2  A: 

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
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.
The Wicked Flea
Doesn't answer the question. The OP was asking about bad languages, not bad IDEs.
Joe White
Environment <> Language
Gerard
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
+1  A: 

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

Made me love Obj-C.

Rev316
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
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
VC6 is the worst. It's template support is so bad that most of the stuff in <algorithm> doesn't even work.
T.E.D.
@TED - 6.0 came out in 1997, hard to fault it too [email protected] Rinea - enough w/ the PHP comments everywhere - we get the point.
Aardvark
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.
iconiK
+15  A: 

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.

Faisal Vali
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
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
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
@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
A: 

LISP

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

serg
There's nothing wrong with Lisp. Approach it with a clear mind, grasshopper.
David Thornley
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
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.
@cbp, OMFG MY BRAIN DONE EXPLOEDED
Pierreten
+1  A: 

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

cwap
Downvoted because I like python and the question is tagged as subjective :P
shylent
Upvoted because I like python and he expressed his point of view in a clear way ;) JK
Stefano Borini
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
+87  A: 

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.

bbuser
variables + if + goto == Turing complete
guns
@Andrei We get it you do not like PHP, but you do not have to add your preference to every answer.
daub815
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?
Mark
Mark: The designer of the Bourne shell probably thought of ALGOL as a nice language :)
Joey
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
Microsoft agrees, enter powershell!
Greg D
+4  A: 

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
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
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!
TokenMacGuy
+14  A: 

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
So uh, Yahoo Pipes?
fiXedd
Yahoo Pipes?? ::click:: ::click:: ::click:: ::shudder::
dmckee
Labview as well...
James Van Huis
One of them was, indeed, an early version of Labview for the Mac. People assure me that it is better now. I haven't bothered to find out...
dmckee
+1: DTS? SSIS?
RBarryYoung
Yes. Another example is DIS a horrible idea from a company called Metaphore
EvilTeach
+3  A: 

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
Oh, PHP really isn't that bad.
Ori Pessach
PHP is pure heaven compared to the various flavors of Magic (and I despise PHP).
17 of 26
+4  A: 

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

Mez
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
+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
+15  A: 

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
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
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.
CyberShadow
When I want to script IRC, I used Perl's Net::IRC. :)
Charlie Somerville
+2  A: 

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
+17  A: 

Regular expressions

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

oɔɯǝɹ
Extended regexes can be commented, but not every engine supports them.
Its only a write only language to people who never learned to write regex.
Kent Fredric
Regex definitely merits heavy unit testing, but it's far more powerful than it is confusing.
ojrac
+1 I like your expression : "it's a write only language", but I can't live without it !
Nicolas Dorier
It's not turing complete.
Wahnfrieden
-1 First is regex _no_ programming language and secound is it _damn_ usefull in the right hands, i mean, i don't need to write an (awful) Finite State machine only to validate some (possible malicious) user inputs or to parse an simple log or what ever, its just great.
Quonux
+22  A: 

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
Unix shell programming is much more powerful and infinitely more sane than .bat/.cmd programming.
Cheeso
Bash scripting is powerfull enough to built remote-desktop-access with it, see NX from nomachine which heart is written in bash.
BeowulfOF
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
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
"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
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
Duplicate of this answer higher up: http://stackoverflow.com/questions/961942/what-is-the-worst-programming-language-you-ever-worked-with/962463#962463
Jonik
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
@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
+11  A: 

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
I wish I could upvote you multiple times.
Bob Somers
C# is an Ecma (ECMA-334) and ISO (ISO 23270) standard since it's begining. Java was still proprietary 2 years ago.
Sylvain
@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
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
+1 question was asked only to harvest points, so any answer is good.
01
@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
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
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
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
@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
Okay so show us a significant usage of C# that isn't tied to the proprietary microsoft platform.
Breton
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
Personally I don't think that the free software movement should have a monopoly on programming.
cbp
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
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
Hmmm.. actually in hindsight I should have realised the stormtroopers would rally to protect the Empire.
SpliFF
"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
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
"Personally I don't think that the free software movement should have a monopoly on programming. " That's a contradiction of terms.
Breton
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
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 ;] )
abababa22
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
-1: C# is as proprietary as C.
Bastien Léonard
+58  A: 

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. This post will probably be voted down to hell, but it i felt like that must have been said ;)

p.s.: yes, i can see that perl is powerful,fast and what not.. that doesn't make my life easier, though. Also I'm not afraid of learning complex new stuff, i'm learning my first functional language (erlang) at the moment, so it's not that perl is something new for me and i'm scared of it. I've done some coding in perl by now, because those old solaris machines only know perl and there shall no additional software be installed.

buster
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
PTBNL
@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
@buster, check out Moose, esp MooseX::Declare and see if you still feel the same :)
Kent Fredric
@PTBNL, wow, you wrote 3000 line suites of perl without knowing how to use an array-reference? foo(\@bar , \@baz ) ?
Kent Fredric
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 [email protected], 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
@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
@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
-1. Perl rules.
kmarsh
@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
+5  A: 

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
+2  A: 

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
+2  A: 

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.

Sambatyon
+77  A: 

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

Makefiles have meaningful differences between space and TAB, so even for two lines appear identical, they don't 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
"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
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
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
mckee's comment is amusing. Dozens, you say? heh heh. anyway with emacs and defaultcontent.el, Makefiles are pretty easy and simple.
Cheeso
This is more a reflection of people not learning how to write Makefiles correctly.
Martin York
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
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
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
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
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
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
Make does not suffer from explosions of time and space when handling incrementally larger dependency trees, unlike some of the more modern replacements.
kmarsh
"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
Sure, you can use visible whitespace to work around the problem. Better would be to not have the problem at all.
Joren
I heard automake was actually a practical joke.
j_random_hacker
+1  A: 

No-one had mentioned DCL???

Artyom
DCL as in PDP-11 / VAX DCL? DCL Ruled!
John Saunders
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
I seem to remember loads of quotes, like '''""''' or something. Otherwise DCL was a pleasure to use.
Lennart Regebro
@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
+2  A: 

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
+3  A: 

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
+9  A: 

In Unix, m4 scripts and sendmail.conf.

Anton Tykhyy
OH wow, sendmail.conf is its own circle of hell.
TokenMacGuy
+1. I've turned the Bat book around backwards in my bookshelf so people will stop asking me if I know Sendmail. That question can lead to no good.
kmarsh
I totally agree: sendmail beats even php, tcl and perl !
blabla999
+5  A: 

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

Kire Haglin
You dare insult Joel Spolsky?! ;)
Lucas Jones
Excel basic was only designed to automate tasks, not as a general purpose scripting language. VBA is a horrible extension that adds that.
iconiK
+6  A: 

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.

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.

gridzbi
A: 

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
Yes, but Brainfuck is *supposed* to be bad.
Barry Brown
It's a demonstration language, not a real programming language.
RBarryYoung
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.
TokenMacGuy
That's actually pretty cool.
Oorang
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
If you are going to add esoteric languages, Malbolge beats Brainfuck without breaking a sweat.
iconiK
+3  A: 

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
+7  A: 

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.

John Fiala
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
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
+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
+21  A: 

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
http://www.geocities.com/connorbd/tarpit/bancstar.html I see what you mean... And they trusted this abomination with people's money?!
cheduardo
@cheduardo: seeing your link makes me sad. How much (useful?) information was lost along with geocites?
voyager
Probably quite a bit, but the Wayback Machine is pretty useful.
R Ubben
From wikipedia : BANCStar resembles an esoteric programming language; so much so that it has sometimes been mistaken for a joke language.
fingerprint211b
+1 for the HP Lovecraft reference.
trinithis
+4  A: 

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
+10  A: 

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

Spirit of '76
+3  A: 

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
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
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
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
Can't you bitshift by multiplying/dividing by powers of two?
Charlie Somerville
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
@Charlie SomervilleShhh! 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
+2  A: 

Nobody said AS400????

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

Sergio
Now that's the weirdest language I ever heard of. What kind of machine code did it compile into?
Windows programmer
We programmed on RPG. http://en.wikipedia.org/wiki/IBM_RPG
Sergio
RPG is not AS400. The question was, what was the worst LANGUAGE.
Cheeso
Yeah, hating AS/400 is like saying you hate programming in Windows.
Xepoch
+4  A: 

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
+6  A: 

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

Mercurious
+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
+13  A: 

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
It's definitely worst then PHP and worst think on LS is debugger.
MicTech
Totally - though not surprised it wasn't mentioned - how many LotusScript developers are there out there (especially among SO users)
Anthony Rizk
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
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
Glad someone else finds LotusScript baffling, even for someone familiar with other scripting languages.
Lunatik
A: 

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
What convention? Last time I looked, languages *defined* conventions.
Konrad Rudolph
undermine? Speaking of conventions, your syntax seems to define some new ones.
Cheeso
Like I said, my view IS partial due to my familiarity with C/C++ syntax and languages that borrow it. But then I probably chose the wrong words. Thanks for pointing it out.
Checksum
-1: I was going to let this pass, because everyones entitled to their opinion, but a programmer of a lexi-crypto language like C calling Visual Basic "cryptic"? Sorry, that's just ignorance.
RBarryYoung
Like you just said, I'm entitled to my own opinion, so I'll ignore you comment
Checksum
C is the clearest language on the planet.
Aiden Bell
+3  A: 

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
+86  A: 

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
I agree. Started using oXygen 10. Changes everything
Gerard
I detest XSLT with a passion.
JohnOpincar
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.
The Wicked Flea
Agreed. Driving screws with a hammer.
cheduardo
XSLT is a sort of functional programming language. I don't find it to be that painful.
Brian
Oh good... I thought it was just me. XSLT *is* a weird mofo.
Mark
I read the first chapter of xslt about 10 times and was still puzzled.
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
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
It seems you have a tendency to state firm opinions about things you don't know too well. :)
Dimitre Novatchev
+2  A: 

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

Tim Sullivan
+2  A: 

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
+30  A: 

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
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
SO bad I had almost forgotten it by now, thanks...
dverespey
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
+6  A: 

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 for "could write programs drunk" - rofl.
blabla999
+8  A: 

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
GOD is REAL, unless declared INTEGER - old Fortran joke.
David Thornley
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
+2  A: 

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
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
HTML is a *markup* language, not a programming one.
akappa
A: 

java

Nuff said

ozona
Actually, that's hardly "nuff" said. Other answers give at least some justification, and this should too.
Jonik
Java is amazing.Enough said.
samoz
You don't know Java, nuff said
victor hugo
There must be some reason?
Gerhard
Distinction between primitives and objects, covariant arrays with no type erasure mixed with free-variants (client chooses) generics with type erasure. Boxing to deal with problems resulting from that. No unsigned integers of any kind. Signed bytes!!! Extremely verbose syntax. God awful collections. Two _standard_ god awful date libraries. AWT. Requires a minor in XML for practical purposes. Boilerplated to bring one to tears -- people have been programming in eclipse-Java for years instead. Out of the top of my head.
Daniel
+1 Java really sucks
Pierreten
+9  A: 

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
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
@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
@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
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
@cbp, stop blaming the CSS specification/language for the flaws and failures of IE.
The Wicked Flea
@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
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
@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
CSS is great, IE has just screwed it up.
corymathews
This is ridiculous. CSS is a blessing.
Deniz Dogan
+7  A: 

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
+6  A: 

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

Viktor Sehr
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
+53  A: 
annakata
"WYSIWYG generated code", I shudder at the very thought:-)Thank you for your contribution it's appreciated very much.
Ludwig Weinzierl
haha @ spaces in variable names
DShook
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.
John Pirie
You can always tell how badly someone is scarred by how elegantly they write the language's epitaph
Mike Robinson
Thanks - I think!
annakata
You just dug up all kinds of repressed memories of my grade 12 'multimedia' class.
theycallmemorty
That I laughed so hard at this mean I'm a bad person? I think I shot a whole years supply of schadenfreude there in 2 minutes, and I'm still shaky after it, thanks :)
Binary Worrier
You still make me rofl, I would have loved to hear you rant about it six years ago! =]
Jonas Byström
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
Authorware was just the successor to Authority which we actually used in high-school for a bit. In general 5GLs are just silly.
Synetech inc.
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
lucifer
I do n't th ink yo u real ly wo uld.
annakata
+13  A: 

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
Ah! $T was my first language; I have fond memories of it, despite its warts ;p
wkf
My office has an introductory guide to Meditech Magic. There's an example program that makes sandwiches.
csj
+1  A: 

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
+4  A: 

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.

Marcus Lindblom
I Totally agree
victor hugo
Ha ha! Lingo was my first programming language. Fond memories.
Ethan
+6  A: 

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
+1 Now that is a scary language! A lack of looping is just mystifying.
The Wicked Flea
/me shudders remembering using the "interface"
seth
+16  A: 

Cold Fusion

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

KenB
+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
+18  A: 
Greg D
+4  A: 

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

salietata
+2  A: 

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

Lopoc
+2  A: 

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
+9  A: 

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 [email protected]!\\n(.z
.   el .*div-end-default
.   nr *pop-count +1
.   \" ensure that we don't loop forever
.   if \\n[*pop-count]>20 [email protected] recovery failed
.\}
.while !'\\n[.ev]'0' .ev
[email protected]
[email protected]

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

xcramps
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
*roff is fun, and very powerful :)
Xepoch
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
+6  A: 

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)
Conrad
+4  A: 

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
....O Deus Meus!
Ludwig Weinzierl
+2  A: 

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
I don't know Crystal Reports, but does (NOT ({field}) IN ["value1", "value2", value3"])) work?
Eduardo León
+1  A: 

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
Uh, case-sensitivity bothered you? Maybe you should try out VHDL or something then, which is the only language I can think of that is not case-sensitive.
Deniz Dogan
Firebug really killed that feeling of "man am I smart" after creating something in JS.
Yar
Pascal is case-insensitive too
Cruachan
+2  A: 

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
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
+2  A: 

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

SQLMenace
+22  A: 

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

Bjarne Stroustrup

Dinah
-1 (fillllller)
trinithis
+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
+7  A: 

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
+4  A: 

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.

The guy 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 the is great. OOP in C, how neat and then butchers the already tragic code. 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
If you want objects in C use C++. Seriously.
iconiK
+2  A: 

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
+5  A: 

ABAP

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

Pascalo
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.
Eduardo León
ABAP is BAD, but like other languages like it, far from dead. The vendor lock-in is just too great.
Xepoch
+4  A: 

LabVIEW (is that even considered a language?)

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

Tim
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
+4  A: 

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.

RamyenHead
+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
Didn't know there was Python support. It's funny because I always thought that programming in Python felt like editing text in VIM.
RamyenHead
+2  A: 

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.

akalenuk
+1  A: 

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
+2  A: 

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.

Josh Stodola
+1: I had successfully repressed the horror that was RPG, until I saw this answer. Truly, it was an abomination
Binary Worrier
+3  A: 

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.

EvilTeach
PL/SQL and LabView I wondered why those two didn't appear earlier here.
Ludwig Weinzierl
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
pl/sql has nothing on UniVerse's alternative UniBASIC.
Evan Carroll