17 ms·
Intercal: The Worst Programming Language Ever [video]
- linksbro 12y ago"Sorry Because of its privacy settings, this video cannot be played here."
- Poopoodeepoo 12y agoOK, then I will summarize for you. Authors says worst programming language is PHP. Best is Lisp, which will rise again and rule the programming world.
- Flimm 12y agoI had to disable the add-on Privacy Badger to get it to work.
- slashnull 12y agoIntercal is the reason I just chuckle when people say brainfuck is an esoteric programming language. And also why I cry when people create languages that are one simple regex away from brainfuck and call those esoteric. Soo also: Malbolge, so evil that the only non-stupid programs in it were generated by LISP scripts
- talideon 12y agoTo be fair, the point of Brainfuck was about interpreter size: the idea was to create an interpreter that could fit in 256 bytes or less of 68000 assembly language. Brainfuck and its ilk (and I'd include Malbolge/Dis in that) are simply just a branch of esoteric language: the minimalist languages. Intercal is in the weird family. Then you've the likes of Befunge, Q-BAL, and *W, and most of the stuff Chris Pressey has done over the years, which are in the experimental family. It's a broad church.
- chriswarbo 12y agoI appreciate Brainfuck for its originality, but I agree with the grandparent that its influence on "esoteric languages" is too strong. Not only are many "esoteric languages" just Brainfuck+something (eg. http://esolangs.org/wiki/Category:Brainfuck_derivatives http://esolangs.org/wiki/Category:Brainfuck_derivatives ), but also having Brainfuck as the default "minimalist language" is also unfortunate. For example, a NASA study on self-replicating machines ( http://www.niac.usra.edu/files/studies/final_report/883Toth-Fejel.pdf http://www.niac.usra.edu/files/studies/final_report/883Toth-... ) mentions it on page 43: > ...we thought that our Controller subsystem should also be as simple as possible. We spent quite a bit of time looking at the simplest implementation of a Turing machine, running the simplest possible language, BrainF[uck] (also called BF) - the smallest Turing-equivalent language in existence, having only eight instructions. As another example, the "minimalism" of Brainfuck has been used to minimise bias when measuring the performance of AI systems: http://arxiv.org/abs/1109.5951 http://arxiv.org/abs/1109.5951 However, when it comes to minimalism, Brainfuck is actually rather complicated. As mentioned above, it has 8 instructions ("+", "-", ",", ".", "<", ">", "[" and "]"), but there are several languages which only require one instruction http://esolangs.org/wiki/OISC http://esolangs.org/wiki/OISC Brainfuck also separates code from data, which causes it to bloat (eg. we have an instruction pointer into the code and a cursor into memory). Many languages don't do this, for example Turing machines, lambda calculus, and even some of the languages on the OISC link above like BitBitJump http://esolangs.org/wiki/BitBitJump http://esolangs.org/wiki/BitBitJump Brainfuck also has built-in IO primitives ("," and "."), whereas other languages like Lazy K ( http://esolangs.org/wiki/Lazy_K http://esolangs.org/wiki/Lazy_K ) encode their IO as streams or monads. Brainfuck also requires arbitrary implementation decisions like word size and memory size, unlike eg. Flump ( http://esolangs.org/wiki/Flump http://esolangs.org/wiki/Flump ) which allows any amount of numbers of any size, written in unary (eg. "11111" for 5) and delimited by zeros (eg. "0111011" for 3 followed by 2). Brainfuck requires an instruction pointer to keep track of which instruction it's up to in the program, unlike purely functional languages which can be evaluated in any order, like Binary Lambda Calculus http://en.wikipedia.org/wiki/Binary_lambda_calculus http://en.wikipedia.org/wiki/Binary_lambda_calculus There are also arbitrary implementation decisions like what happens when integers overflow, what happens when the cursor overflows the memory, etc. which are complete non-issues when there's no word size, no external memory, etc. These other languages can also be easier to implement than Brainfuck. For example, I wanted a simple language to embed in a Javascript search algorithm ( http://chriswarbo.net/essays/optimisation/levin.html http://chriswarbo.net/essays/optimisation/levin.html ) and chose BitBitJump. The code is at http://chriswarbo.net/js/optimisation/levin_bbj.js http://chriswarbo.net/js/optimisation/levin_bbj.js and is mostly dedicated to the search algorithm. The BitBitJump implementation is just these two lines, inside one of the loops: mem[read_address(counter, m)] = mem[read_address(counter+m, m)]; counter = read_address(counter+2*m, m); `m` is the word size (constant during a program execution), `counter` starts at 0, `mem` is an array of bits and `read_address(x, y)` converts those bits into a Javascript int (reading `y` bits, starting at index `x`).
- drcomputer 12y agoIt's gotta be similar to the difference between esoteric art in a large museum, and esoteric art in a small gallery the size of a closet. Sometimes you get so far out in your studies that you can't even realize the people around you don't have the faintest clue of even how to get to your headspace, let alone understand it. There's esoteric languages that look different, but still follow some standardization of language, then there is esoteric that questions every standard convention through the realization of the absurd.
- penguat 12y agotried Piet? it's a good looking esoteric programming language :)
- darklajid 12y agoAs someone that dabbled in code golfing using Piet, it's no different from any other language: Your creation can be ugly or things of beauty. I tend to produce ugly Piet programs :)
- agumonkey 12y agoHere it is, genetic algorithm based malbolge generation : http://acooke.org/malbolge.html http://acooke.org/malbolge.html
- adamnemecek 12y agoThe title really doesn't do it any justice, it's pretty hilarious. Not only that, also very educational.
- spain 12y agoYou mean just like "the worst programming language ever"? Because I actually think the title should be "BS: The Worst Programming Language Ever" because it isn't really about Intercal but his made up language BS.
- larssorenson 12y agoYes, that would be a more accurate title.
- onion2k 12y agoStarts with P and isn't Python. What's wrong with Prolog? Oh, wait, he meant Perl. ;)
- joshschreuder 12y agoNot PHP? :)
- deleted 12y ago[deleted]
- mitchty 12y agoPascal?
- iopq 12y agoIt's actually more reasonable than PHP. It has case sensitivity on the first character of each identifier, but PHP has case sensitivity on variables, but not on functions. It also lacks the header files of C, as seen by the fact that there wasn't a header file posted for the example. If it wasn't clearly satire, this language would actually have fans and apologists. "Why do you care about the greek question mark? It's a European language, use the preprocessor to replace it why any character you want, it's that flexible!"
- larssorenson 12y agoI'm kind of excited about the REGEX macro definitions
- boomlinde 12y agoAre you serious? I absolutely loathe PHP and its idiosyncrasies, but at least you don't have to literally tell it to PLEASE do something. To INTERCALs defense, the only thing I can say is that it's at least a good joke.
- cstross 12y agoFor added lulz, you might want to look into CLC-INTERCAL, a dialect that introduces it's own unique take on object orientation, internationalization, and quantum operations. (EDIT: I forgot to add, CLC-INTERCAL also introduced the computed COME FROM statement. It was originally written in Perl, but subsequently became self-hosting, or maybe self-infesting ...) Of course, it has extensive documentation by way of a support gopher site: http://clc.intercal.org.uk/ http://clc.intercal.org.uk/
- spain 12y agoAdd indexing from 1 and it would be perfect.
- chriswarbo 12y ago> Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. — Stan Kelly-Bootle (from http://en.wikipedia.org/wiki/Argument_to_moderation http://en.wikipedia.org/wiki/Argument_to_moderation )
- cstross 12y agoWhy index from 1 or 0 when you can overwrite $[ in perl and index from ANYWHERE? (Dammit, as of Perl 5.16 this is not merely deprecated but outsourced to a module ... mutter, grumble)
- draegtun 12y agoIIRC Fortran also allows you do to do this. Another would be Rebol: >> a: [0 1 2 3 4 5] == [0 1 2 3 4 5] >> a/1 == 0 >> a/2 == 1 >> a: next a == [1 2 3 4 5] >> a/1 == 1 >> a/2 == 2 >> a/0 == 0
- acheron 12y agoThere are two types of people: 1. People who index from 1. 1. People who index from 0.
- peterfirefly 12y agoIndexing with floats means you need to do rounding. May I suggest a modified version of Banker's Rounding? http://en.wikipedia.org/wiki/Rounding#Round_half_to_even http://en.wikipedia.org/wiki/Rounding#Round_half_to_even
- sebastianconcpt 12y agoYeah because making the first thing to be the zero thing in a collection is completely logic and does not break common sense consistence or anything.
- peterfirefly 12y agoTry MUMPS: http://en.wikipedia.org/wiki/MUMPS http://en.wikipedia.org/wiki/MUMPS sed also takes some getting used to: http://en.wikipedia.org/wiki/Sed http://en.wikipedia.org/wiki/Sed Many modern languages sort of have 'DO COME FROM' in the form of exceptions. Having to execute PLEASE regularly (but not too often) is not that different from a buggy version of Oracle PL/SQL I had to use once, where single-line comments sometimes made the next line be ignored as well. Or a research language called Emerald for which the implementation needed extra comments or dummy statements to make the compiler not crash + the garbage collector was buggy so you needed to create and manipulate dummy objects Just So to make the garbage collector throw /them/ away instead of the ones you actually cared about. I'd say the only unique aspects of Intercal are the stupid numbers and the delightfully twisted way they added threads to it (by having more than one DO COME FROM statement with the same label).
- jschwartzi 12y agoSed is like the predecessor to Brainfuck. Every keyword worth using is a single letter, and there are the match space and hold space to keep track of. Plus if you accidentally forget a -r at the beginning, regexes that would work in any other program may not in Sed. Sadly I get more mileage out of Sed and Tr than any general-purpose text processing language(Perl) for batch processing text.
- progmanal 12y agoLucky, Mumps also has the single letter distinction.
- qhfgva 12y agoI haven't thought of that for years. When I was doing my masters I actually TAed a class (CS for non-majors) for one of the creators of MUMPS and used that language for the labs. It was sort of hilarious learning it and trying to help newbies use it. Can't complain too much since he gave me a very generous letter of recommendation.
- mseepgood 12y agoThe headline is incorrect. The video is not about INTERCAL, it's about BS.
- ajkjk 12y agoHe uses slides very well. It's common knowledge that reading off your slides is generally bad and makes for terrible presentation, but he does better than just avoiding that. The slides are always something he can look at at the end of a point, like a 'turn' of sorts. Sometimes it's to demonstrate what he's talking about; sometimes it's comic effect to show what he was referring but not by name before; sometimes it's a segue to a new heading that fills the beat after the previous one. Not that 'giving good presentations' is so rare a skill that it needs to be called out, but, he's so consistently good about slide usage that I think his style is worth explicitly noting and copying.
- pjmlp 12y agoOn my case, I learned to create slides that only drive the presentation without much content. Just some key points or diagrams that help to explain the presentation. The moment the audience can read everything the presenter is about to tell, it is the end of the presentation. As part of the audience, such presentations full with text are the ones where my brain switches off.
- iand 12y agoAnd yet slides without text are useless after the event.
- lepton 12y agoRight, it's important then to supply an accompanying paper, such as an industrial white paper or a published research paper.
- Uehreka 12y agoThis is why I often get annoyed when people post slide decks on HN. The presentation was often really good, and so the slides (being there only to supplement the presentation) make no sense out of context.
- hrabago 12y agoThis is by design. Slides are supposed to be visual aids only. They are an accessory of the speaker, not vice versa. When I prepare slides, I would use the notes field accompanying each slide for additional information that would be useful for someone reviewing the slides after the event. That way, I can still distribute them and get use out of them after the event, without sacrificing their effectivity during the event.
- rcknight 12y agoMy favourite talk at buildstuff this year, Mark is hilarious!
- varfoobar 12y agoThe talk has a few uninteresting parts, but the shopping trolly operator (!=!) made me laugh.
- windskye 12y agoWhen I worked at a financial services company with a bank, the bank used some esoteric proprietary language provided by a banking software company. Building the app required shipping the code to the supplier, who then incorporated the changes into a single binary which was shipped to all their customers, with the differences at runtime tagged to the customer. Yes, a single binary for all.
- elo21 12y agoWhen I worked at a financial services company with a bank, the bank used some esoteric proprietary language provided by a banking software company. Building the app required shipping the code to the supplier, who then incorporated the changes into a single binary which was shipped to all their customers, with the differences at runtime tagged to the customer. Yes, a single binary for all.
- binarymax 12y agoShame, I tried utf256.com and it doesn't exist ;) Great talk. I love how pointing out all the horribleness of languages makes me realize there must be something better to be had. Now we just need a language that removes all the nonsense he describes (and can of course be programmed by Business folks!)
- dvirsky 12y agoAwesome talk (I've seen only the first 15 minutes, gotta get back to work). BTW Although it's not a joke language and people actually use it (and some apparently like it), K was worth mentioning there right after APL.
- yourad_io 12y agoVery nice video, great use of slides as mentioned elsewhere. In case someone was going to take encyclopaedic knowledge away from this, the Greek semi-colon is actually a mid-dot-like period character (not exactly mid-dot, as I think that's quite fat). And since we're on the subject, is no separate unicode "Greek questionmark" character, so you'll have a hard time compiling BS 1.0. Although the fix is obvious - through the UTF256 character submission website ;)
- longlivegnu 12y agowas really expecting a talk about ruby
- HCIdivision17 12y agoSpoiler: I'm waiting for the release where block comments are added, which is just anything between two lines consisting of 5 spaces. That has to be one of the most psychotically evil ideas I've seen since #define TRUE FALSE. The only improvement I would suggest is to use \r\n instead. Version control is mentioned, and if this is used, git will happily do some incredible things to the code for compatibility reasons.
- nialo 12y agoSo, is there an implementation of this anywhere? I'd like to write a compiler targeting it.
- azeirah 12y agoWhy is nobody talking about utf-256? that has to be, by far, the best feature in this language.
- larssorenson 12y agoI like the compiler hitting the website to download the registered characters and if no internet access is available "making it appear to be your fault"
- 725686 12y agoIs the guy drinking a beer?
- merlincorey 12y agoThat's how you give talks at conferences at pretty much every conference I've ever been to.
- Zikes 12y agoFor years I developed in a language called Sigmac, for the Arris CAD system. I love esoteric languages, but Sigmac was downright hateful. It made you feel like the company was punishing you for daring to use it. Some of the great "features" of the language: * It has no scope. None. Everything is a global. Which it uses to great advantage because * Functions can't return values! If you want to make a string uppercase, for instance, you would first store that string in the smn_transfer global variable, then call the function :j_caps, then read the smn_transfer string. Fortunately it had a working syscall system, so I did as much of my work as I could in an accompanying script written in a much saner language, like Perl.
- muyuu 12y agoThat's a bit like old Casio calculators. It worked for small things but I cannot imagine a big application written in that. Nostalgia overdrive just seeing this beauty: http://www.rskey.org/CMS/index.php/7?manufacturer=Casio&model=fx-7500G http://www.rskey.org/CMS/index.php/7?manufacturer=Casio&mode...
- cowardlydragon 12y agoSo it's like JavaScript...
- bvanslyke 12y ago... if you don't know about the "var" keyword.
- pekk 12y agoMore like "if the person who wrote this code didn't want to use the var keyword"
- ptx 12y agoJavaScript has function scope, allows return values and doesn't normally allow syscalls. So the languages are nothing alike on any of the points in the comment you're replying to.
- greiskul 12y agoUsing goto as the only loop construct is too easy, you can statically know where your code is going all the time. It would be more fun to use setjmp longjmp from C, where you can dynamically assign where a label is pointing to, and it works across scopes.
- larssorenson 12y agoThe title does not properly convey the awesomeness that is the awful language he invents.
- cdibona 12y agoWe released an Intercal style guide as part of an April fools day thing. http://cadie.googlecode.com/svn/trunk/INTERCAL-style-guide.html http://cadie.googlecode.com/svn/trunk/INTERCAL-style-guide.h... And a small script: https://code.google.com/p/cadie/source/browse/trunk/CADIE.I https://code.google.com/p/cadie/source/browse/trunk/CADIE.I I could put intercal on the resume because of this...not that I did or will, but I could...
- breadbox 12y agoSpeaking as the original author of both of those documents (and a significant fraction of all INTERCAL code), I can affirm that I have INTERCAL on my resume. It's only come up once in an interview, sadly. Someday someone will ask me to write INTERCAL on the whiteboard....
- bunderbunder 12y agoI'm unreasonably disappointed that he failed to include "on error goto next" from VB6.
- cbd1984 12y agoWorse languages are used in industry: http://en.wikipedia.org/wiki/BANCStar_programming_language http://en.wikipedia.org/wiki/BANCStar_programming_language https://github.com/jloughry/BANCStar https://github.com/jloughry/BANCStar
- deleted 12y ago[deleted]
- bvanslyke 12y agoBS could take from Haskell (libraries) and go a bit further by requiring every function to be an infix operator. Because being pronounceable and Googleable is overrated.
- dllthomas 12y agoPronouncable is one thing, but as to "Googleable": symbolhound.com haskell.org/hoogle
- abandonliberty 12y agoI feel like any discussion about worst languages would be incomplete without brainfuck [0], an 8-command turing complete joke. [0] http://en.wikipedia.org/wiki/Brainfuck http://en.wikipedia.org/wiki/Brainfuck
- bsaul 12y agoThis is really a good way of approaching computer science theory of programming language. For example, i remembered there was something really nasty with javascript closures, and was surprised he didn't mention it. Then i went and look at what it was really that sometimes bugged me, and just realized it was just a combination of heavy closure use together with function-level variable scope (rather than block based), that sometimes made you need to wrap the content of a for loop in an a anonymous function, just to capture the current state of the loop increment. Really interesting talk.
- vorg 12y agoThere's problems not just with Javascript closures but also with Groovy closures. According to the Groovy devcon 2 report at http://javanicus.com/blog2/items/191-index.html http://javanicus.com/blog2/items/191-index.html "no agreement was reached on [...] whether we should have any syntax denoting the difference between a true lexical Closure and one of these Builder blocks. The historical reasons go back to Builder blocks looking just like Closures, and I'm afraid this long standing mistake must be removed from the language before any true progress can be made, as no sensible specification rules can be applied while the dichotomy exists. I headed back to London with a very disappointed James Strachan" In Groovy language creator Strachan's last ever email on its mailing list 2 days later at http://groovy.329449.n5.nabble.com/Paris-write-up-tt395560.html#a395569 http://groovy.329449.n5.nabble.com/Paris-write-up-tt395560.h... "Note that no other dynamic language I'm aware of has any concept of dynamic name resolution in the way you suggest; names are always statically bound to objects in a sensible way in all dynamic languages I'm aware of (lisp, smalltalk, python, ruby etc). I see no argument yet for why we have to throw away decades of language research and development with respect to name resolution across the language as a whole"
- ptx 12y agoHis one complaint about Python (the whitespace problem) is fixed in Python 3, which will raise a TabError when the module is loaded if you mix tabs and spaces.