Just over a year ago, Omar Tuchfeld posted High throughput Fizz Buzz, a fastest-code challenge where answers should aim to output Fizz Buzz as quickly as they can. Their challenge was nominated in Best of 2020, and was well-received, but otherwise wasn't a massive standout of a challenge.
Near the end of October, ais523 posted an answer to this challenge that blew away all other competition. The 8 answers posted before this answer had scores around 8 or 9 GiB per second - ais' hit 31 GiB/s on their machine, and an incredible 55 GiB/s on the OP's machine. In fact, this was so incredible that it was posted to Hacker News, a well frequented website about anything tech related.
A couple of weeks ago, ais' post was posted again on Hacker News, and the site has experienced a brief uptick in activity, especially on that challenge. Both of these two events got me thinking about the impact that this site has had on the world of code golfing, and, through this blog post, I aim to explore that impact.
The beginnings of code golf
The exact origins of code golf are, unsurprisingly, fairly unknown. After all, the concept of making code more concise isn't exactly revolutionary. However, by 1999, references to Perl golf were floating around, and various references to APL and J golf were popping up more frequently. For a significant number of years, code golf was primarily limited to Perl, APL and J - and even then, many people avoided APL and J due to their tacit nature and, in APL's case, odd symbols.
It wasn't until 2007, when Golfscript came into existance, that the concept of a "golfing language" become a thing. Before now, most golfing was done with practical languages, often Perl due to its symbolic commands and loose structure. APL and J used single/double character commands, but they weren't designed specifically with conciseness in mind - Golfscript was deliberately intended to be as short as possible for any given task.
If you follow the field of esoteric languages - as most users of this site do - then you're likely aware of how out of date Golfscript is now, compared to modern golfing languages such as Jelly, 05AB1E, Vyxal and more. However, unlike more practical languages such as Perl, Python or even APL, you'd be hard-pressed to find these languages outside of some very niche areas of programming.
Code golf on Stack Exchange
As I've discussed before, code golf on Stack Exchange began on Stack Overflow, and was largely dominated by Golfscript, APL and J, with the odd Perl answer winning from time to time. However, as the on-topicness of code golf was contentious, it didn't really go far, beyond inspiring the creation of a new member of the Stack Exchange family of sites: Code Golf and Coding Challenges. In fact, for the first year or so of this site's history, nothing much happened in the publicity department.
All that changed when Polynomial decided to rickroll the entire site. Within days, this was tweeted by Jeff Atwood, the founder of Stack Exchange, as well as being posted on Hacker News. This caused the first spike in new user activity since the site launched a year ago, and is likely one of the first examples of Code Golf Stack Exchange leaking to other sites on the internet.
However, code golf was by absolutely no means limited to Code Golf Stack Exchange. The site Anarchy Golf published its first challenge on the 29th of January 2007, almost exactly 4 years before CGCC launched, and 18 months before the first code golf challenge was posted on Stack Overflow, and, in the years since, there are multiple sites for code golf around the internet.
Despite not being the first site to the online golfing scene, I would argue that Code Golf Stack Exchange's biggest impact, by far, on the world of code golf originates from two main factors: activity and freedom of language.
This section is very brief - CGCC is the most active code golf website available. The most recent challenge posted on Anarchy Golf (aka anagol) was 4 days ago (as of writing), code.golf has a new challenge every week or two and Code Golf Codidact's most recent challenge is almost a fortnight old. For comparison, CGCC averages over 2 new challenges per day. Without a doubt, CGCC is the most active site dedicated to code golf on the internet. But, activity only plays a part - people will compete on slower sites, as evidenced by the existence of, well, every site less active than CGCC. The other factor is freedom of language.
Freedom of Language
As I've mentioned, I would say that the biggest code golf sites, behind CGCC, are anagol, code.golf and Code Golf Codidact. However, if you take a quick browse through the first two, you'll notice something that differs from CGCC and Code Golf Codidact (which was based on CGCC): they have a set list of languages that can be used. Compare this to CGCC's policy that allows any programming language, even non-programming languages.
This is, in my opinion, the biggest difference between CGCC and other code golf sites, and the cause behind CGCC's primary impact on the code golfing world: the development of new languages.
If you've been at all active in the golfing spaces over the past few years, you must be aware of the latest generation of golfing languages - what I term the "third gen" languages† - such as Jelly, 05AB1E and Husk. For those unaware, these are languages that primarily utilise custom codepages to allow them to use 256 different characters for commands, rather than the 95 characters available when limited to only printable ASCII (Editor's note: we seem to be entering the fourth generation of golfing languages now [July 2022], with fractional and irrational byte counts). As a result, they have far more commands available in a single byte, and so are generally much shorter. However, taking a look at the languages available on anagol and code.golf, we can see that only Jelly makes the cut, and that's only on anagol. Those who wish to use the best golfing languages need to find somewhere else to do so, and, due to its activity, that's often CGCC.
Indeed, by looking at the history of golfing languages, we can see that CGCC is a prime driver: aditsu created CJam as a better version of Golfscript, Jelly was developed by Dennis as an improvement on both J and CJam, and so on. A countless number of golfing languages have been developed by CGCC users, and the vast majority of these are unable to be used on the other large code golf sites. In short, CGCC, by allowing any language to compete, has driven the development of golfing languages, and these golfing languages are pushing the boundaries of how short code can become.
Furthermore, this freedom of language has allowed the development of a related, but distinct, class of languages: esoteric programming languages. These are languages that are designed more to push the limits of what a programming language is, rather the specifically to compete and win at code golf. And, through the freedom afforded by CGCC, many well-known esoteric languages have been created and the limits of existing languages have been extended. The shortest known Hello, World! program in brainfuck is only 72 bytes - shorter than Java - and was found by a CGCC user, KSab. Another CGCC user, Kamila Szewczyk, has created a Lisp intepreter, written in Malbolge, often termed the most difficult language to program in. There are countless answers on CGCC that demonstrate users pushing esoteric languages to their extremes, just to answer a simple code-golf question. And that's not even getting started on the esolangs created by CGCC users.
Martin Ender, former site moderator, has created multiple esolangs, including Hexagony, the first 2D language based on a hexagonal grid, rather than square; Labyrinth, a 2D language that modifies the grid as the program is executed; and, Stack Cats, a symmetric esolang where each command undoes the operation done by its corresponding command in the other program half. In a semi-recent interview, Martin credited this site - CGCC (or, PPCG, as it was at the time) - for his introduction to the esoteric side of languages. I'm sure that a lot of users here can relate to that. I myself only started looking at language development after joining the site, and a lot of users use their own languages to answer challenges.
While I clearly consider the language side of CGCC to be the primary impact this site has had on the worlds of code golf and programming, there are a few other things that I'd be remiss for not mentioning.
Created by Dennis primarily to provide a testing environment for the many languages used on the site, TIO has since developed far beyond CGCC. It's being used more increasingly on Stack Overflow to effectively demonstrate users' answers, people are using it at work to help colleagues and is considering useful enough to Dyalog for them to donate $500 per year to help cover the costs. It's a truly incredible resource, created originally for CGCC.
In addition, thanks to TIO, Wolfram Language (Mathematica), a typically non-free language, can be run (albeit with some limited functionality), making TIO one of the few ways that people can use Mathematica without having to pay for it.
You may be aware that Adám works for Dyalog. In fact, part of his job is specifically to be part of this site, and through this, Dyalog has and aims to hire users from the site as interns and employees. Dyalog, through Adám, has stated that they believe code golfers have the right mindset for using and developing APL, and our site is clearly a good place to look for those kind of programmers.
Math and science
In short, I believe that CGCC has had a large impact on the world of code golf, and a not-insignificant impact on programming as a whole. Through our policy of freedom of language, we've encouraged and revolutionised the development of golfing languages, extended the capabilities of existing esoteric languages, and have resulted in a number of useful impacts across multiple areas. I look forward to seeing what we can do in the future!
†: For reference, I consider the first generation to be Golfscript, APL and J; and the second generation to be the languages that evolved from the first gen, while still only using ASCII characters - this includes CJam, Pyth and Brachylog v1.