Programming Languages Through The Years

  • In this challenge, users will take turns completeing three fairly simple coding tasks in programming languages that are allowed to be progressively older.

    The first answer must use a programming language that was made in the year 2015. Once there is at least one answer from a 2015 language, answers may use programming languages that were made in 2014. Similarly, answers that use languages from 2013 are not allowed until there is at least one 2014 answer.

    In general, the use of a programming language from the year Y is not allowed until an answer using a language from the year Y+1 has been submitted. The only exception is Y = 2015.

    Finding Your Language's Year

    To answer this question, you must know the year your programming language was "made in". This is, of course, a subjective term; some languages were developed over the course of multiple years, and many languages are still being upgraded every year. Let the year a language was "made in" be the first year an implementation for that language appeared in the general public.

    For example, Python was "made in" 1991, though its
    development had been in progress since 1989, and version 1.0 wasn't
    released until 1994.

    If this year is still subjective, just use your common sense to choose the most appropriate year. Don't get bogged down in slight disagreements about year choices. Please provide a link to a source that says when your language was made.

    Different versions or standards of a programming language (e.g. Python 1, 2, 3) are counted as the same language with the same initial year.

    So, unless your language's year is 2015, you can only submit your answer once an answer has been submitted whose language's year is the year just before yours.

    If a valid answer with the same year as yours already exists, then you may answer. It doesn't matter if your language was developed earlier or later in the year.


    You must complete Tasks 1 through 3. Task 0 is optional.

    These tasks were more or less chosen to correspond to three important aspects of programming: providing output (Task 1), looping (Task 2), and recursion (Task 3).

    Task 0 - Language History (optional)

    Write at least a paragraph explaining the history of your chosen programming language: who developed it, why, how, etc. This is especially encouraged if you personally were around when the language came into being, and maybe even played a part in its development. Feel free to relate personal anecdotes about the effect the language had on you or your job, or anything like that.

    If you're too young to know much about the history of your language without a lot of research, consider leaving a note to older users that says they can edit your post and add in some first-hand history.

    Task 1 - "Hello, World!" Variant

    Write a program that prints

    [language name] was made in [year made]!

    to your language's standard output area (stdout for most recent languages).

    For example, if the language was Python, the output would be:

    Python was made in 1991!

    Task 2 - ASCII Art N

    Write a program that lets the user enter in an odd positive integer (you may assume the input is always valid), and prints out an ASCII art letter N made using the character N.

    If the input is 1, the output is:


    If the input is 3, the output is:

    N N
    N N

    If the input is 5, the output is:

    N   N
    NN N
    N N N
    N NN
    N N

    If the input is 7, the output is:

    N     N
    NN N
    N N N
    N N N
    N N N
    N NN
    N N

    The pattern continues on like this. The output may contain trailing spaces.

    Task 3 - GCD

    Write a program that lets the user enter in two positive integers (you may assume the input is always valid), and prints their greatest common divisor. This is defined as the largest positive integer that divides both numbers without leaving a remainder. It can be readily calculated using the Euclidean algorithm.


    8, 124

    12, 84

    3, 303

    5689, 21

    234, 8766

    You may use a built in function but try finding out if it was there in the first version of your language. If not, try not using it.


    • You may answer multiple times, but each new answer must use a language made at least 5 years before the language in your last answer. So if you answered with a 2015 language, you couldn't answer again until 2010 languages are allowed. If you start with a 2010 answer, you can't make a 2015 answer your second answer because 2015 is not before 2010.

    • If possible, write your code so that it would have worked in the very first version of your language (or as old a version as possible). (This is not a requirement because finding old compilers/interpreters for some languages may be difficult.)

    • Refrain from posting a language that has already been posted unless the posted answer has significant errors or you have a very different way of completing the tasks.

    • Golfing your code is fine but not required.

    • A trailing newline in the output of any program is fine.

    • For tasks 2 and 3, all input values below some reasonable maximum like 216 should work (256 at the very least).

    • Your language must have existed before this question was posted.

    • Very old programming languages may have different forms of input and output than what we think of today. This is fine. Complete the tasks to the best of your ability in the context of your language.


    Your submission's score is:

    upvotes - downvotes + (2015 - languageYear) / 2 

    Thus, 0.5 is added to the vote count for every year before 2015, giving the advantage to older languages. The submission with the highest score wins.

    Answer List

    The Stack Snippet below lists all the valid answers according to their language year.

    You must start your post with this Markdown line to ensure it is listed correctly:

    #[year] - [language name]

    For example:

    #1991 - Python

    The language name may be in a link (it will be the same link in the answer list):

    #1991 - [Python](

    Answers that don't follow this format, or have a year that is not allowed yet, or come from a user that already answered in the last 5 years are marked as invalid.

    <script src=""></script><script>$(function(){function e(e,r){var a=""+e.toString()+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter=!YOKGPOBC5Yad160RQxGLP0r4rL";$.get(a,r)}function r(e){if(e.items.forEach(function(e){var,a=e.owner.display_name,i=e.body.match(/<h1\b[^>]*>(\d{4}) - (.*?)<\/h1>/);if(i&&i.length>=3)var h=parseInt(i[1]),u=i[2];h&&u&&n>=h&&h>=t&&(!d.hasOwnProperty(e.owner.user_id)||d[e.owner.user_id]-h>=p)?(d[e.owner.user_id]=h,h==t&&--t,o.hasOwnProperty(h)||(o[h]=[]),o[h].push({language:u,user:a,link:r,score:e.score+(n-h)/2})):s.push(' <a href="'+r+'">'+a+"</a>")}),e.has_more)runQuery(++a,r);else{for(var i=n,h=[];o.hasOwnProperty(i);){for(var u=$("<tr>").append($("<td>").text(i.toString())),l=$("<td>"),c=$("<td>"),g=$("<td>"),f=0;f<o[i].length;f++){var v=o[i][f];l.append(v.language),c.append($("<a>").html(v.user).attr("href",,g.append(v.score),f+1<o[i].length&&(l.append("<br><br>"),c.append("<br><br>"),g.append("<br><br>"))}u.append(l).append(c).append(g),h.push(u),--i}$("#answers").find("tbody").append(h),s.length>0?$("#invalid").append(s):$("#invalid").remove()}}var a=1,n=2015,t=n-1,p=5,o={},s=[],d={};e(1,r)})</script><style>html *{font-family: Helvetica, Arial, sans-serif;}table{border: 4px solid #a4a; border-collapse: collapse;}th{background-color: #a4a; color: white; padding: 8px;}td{border: 1px solid #a4a; padding: 8px;}div{font-size: 75%;}</style><table id='answers'> <tr> <th>Year</th> <th>Language</th> <th>User (answer link)</th> <th>Score</th> </tr></table><div id='invalid'><br>Invalid Answers:</div>

    This should help.

    Wikipedia has a list for everything: this one for non-esoteric languages by year.

    I purged a lot of comments which appeared to be obsolete or chatty. Please notify me of any comments that should be undeleted. For extended discussion, please move to [chat].

    Should Task 3 actually use recursion or is it enough that it produces the correct result? If I need to write my own GCD function I usually just use a loop but I wrote a recursive one specially for this challenge. There are many submitted answers that just use a loop.

    @CJDennis: as you noticed, people have been using common sense in how to code those tasks. In some of the languages here it would be very un-idiomatic or outright impossible to use loops (because they have no such concept). In other languages, recursion is similarly unfavourable. Just solve the tasks in a way that fits your language well; all that's required is that the result matches. As a matter of fact, I like this challange in part because it can really highlight some of the _differences_ between languages, not just in syntax but in _the way you approach problems_.

    Awesome question, and reading through all the diverse answers is very enlightening. Signed up to codegolf just to be able to post an answer :-)

    I feel like making a second account just to get us past 1971.

    Being pedantic here, but I just noticed that one of the conditions for an answer being invalid is... "come[s] from a user that already answered in the last 5 years". Should probably be: "come[s] from a user who has already submitted an answer for one of the previous 5 years". Pretty sure that many a good answer would otherwise be invalid. ;-)

    If we can get it back to 1952, I have someone spinning up a historic machine that could do 1951 (Pegasus) solutions and test them!

    @BrianTompsett: I think we're done for. I've not been able to find a compiler or interpreter for any of the 1965 languages.

    @marinus - The rules do not require execution - well that is my reading. There is plenty of documentation on RPG II to enable a program to be written surely?

    @marinus there is a working 1965 version of RPGII plus some other 1960s compielrs on that site FYI...

    For completeness' sake, could "The only exception is Y = 2015." be changed to "The only exception is Y ≥ 2015."?

    I take issue with Perl 5 and Perl 6 being considered the same language. Perl 4 => Perl 5 => Perl 6 is about the same amount of difference as C => C++ => Haskell. I can understand Perl 1-5 being considered the same language to a point, since they are all mostly backwards compatible (some esoteric features that you shouldn't use were removed).

    What if someone makes a parser for Jacquard machine code? That's always possible...

  • swish

    swish Correct answer

    6 years ago

    2013 - Dogescript

    Dogescript is a language created in 2013 by Zach Bruggeman. It is nothing more than a syntax-replacement for Javascript to make it read like the internal monologues of memetic Shiba Inus.

    Hello doge

    console dose loge with "Dogescript was made in 2013!"

    ASCII Art

    such N much N
    much i as 0 next i smaller N next i more 1
    very doge is ("N" + " ".repeat(N-2) + "N").split('')
    s[i] is "N";
    console dose loge with doge.join('')


    such gcd_doge much doge, dooge
    rly dooge
    gcd_doge(dooge, doge % dooge)
    rly doge smaller 0

    Wow, such +1. Very answer. Much quality.

    I joined codegolf just to upvote this answer!

    I can't even read the GCD one with a straight face

    I can't not read gcd_doge as good_dog. Help

    Fantastic. However, according to, double quotes are not supported. Would love an explanation of the `s[i]` bit too!

License under CC-BY-SA with attribution

Content dated before 7/24/2021 11:53 AM