コードゴルフはコンピュータプログラミング・コンテストの一種。参加者は与えられたアルゴリズムを、可能な限りもっとも短いソースコードで記述することを競う[1]。バイナリサイズではなく、ソースコードの文字数がスコアとなる。「Perl golf」など、トーナメントで使用されるプログラミング言語の名前がつけられることもある。ショートコーディング、コードパズル等とも呼ばれる[2]。
この用法における「ゴルフ」という言葉は、1999年にPerlのニュースグループ上で初めて使用されたとされる[3]。その後、RSA暗号の暗号化プログラムが、5行のPerlプログラミングで実装されたことによって一般的となった[4]。同様の非公式なコンテストがAPLのハッカーらなどによって行われていたことも知られている。PHPでは十分な機能のウィキが1287文字で実装された[5]。その後、コードゴルフ用プログラミング言語の作成がきっかけとなり、多くのプログラミング言語においてもゴルフという言葉が使用されることとなった。よりシステム的、実践的である簡潔なプログラミングはen:Spartan Programming[※ 1]として知られている[6]。
「コードゴルフ」という用語は、参加者が高スコアではなく低いスコアを目指す得点形式であるため、そのようなスポーツやゲームの中でも一般的であるゴルフから名づけられた[1]。
ソースコードを短縮する手法として、次のようなものがある。
コードゴルフを念頭に置いたいくつかの新しい言語が作られている。もっともよく知られているものとしてGolfScriptやFlogscriptがあり、コード上での簡潔な表現のアイデアを構築できるようになっている。これらはチューリング完全な言語である。コードゴルフ用言語は、一般的に難解であると考えられており、コードゴルフ以外の実用アプリケーションとしては、実行速度、可読性、機能において制限されている[要出典]。 バイナリラムダ計算はアルゴリズム情報理論をより具体化するために設計されたが、コードゴルフ用途にとどまっている。難解プログラミング言語のウィキにコードゴルフ用言語のリストが存在する[11]。
以下に円周率を1000桁表示するGolfScriptの例を示す。
;''
6666,-2%{2+.2/@*\/10.3??2*+}*
`50<~\; #ページの都合上、出力を省略
-> 3141592653589793238462643383279502884197169399375
一般的なプログラミングサイトなどで見られるコードゴルフ問題では、実装するプログラミング言語を特定しないこともある。しかし、例えば特定の言語の使用を制限するなどして、出題者が問題の形式を限定することもできる。このような「言語を特定しない」問題が作られることによって、コードゴルフに特化したプログラミング言語の派生設計につながった。例としては、REBOLの派生であるREBMU[※ 2]が挙げられる。オンライン上のコンテストでもライブでのコンテストでも時間制限が設けられることがある。