What are good programming languages with a small surface area? Languages like C and Go? With large languages like C++ and Rust, I get decision paralysis, and I end up spending too much time with language details.<p>I tried hard to like Go, but as of now, I just don't like it. What languages would you recommend that I check out? I already know Python and C, and I would like to learn something more performant than Python.
F#/OCaml may not have a small total surface area (I'm not that deep in it), but you can do a whole lot knowing basic constructions.<p>If you haven't used a functional language there's an alternative approach without the cognitive overhead of thinking about statements executing in time (most of the time). For a non-static typed example, Elixir (but that usually also brings in Phoenix framework). Zig is another interesting one for different reasons.
There are not many languages (in active use) with a small surface area. Go is small, Lua is another. However, a small language does not always mean simple - you may still encounter code that is difficult to unravel.<p>New programming languages tend to range from medium-to-large in size.<p>Here are number of keywords in some languages. Note: this is a bit of a blunt measure of a language's size so you may not consider it a measure of small surface area:<p>- Lua (21 keywords)<p>- Go (25 keywords)<p>- Julia (30+ keywords)<p>- Python (30+ keywords)<p>- Javascript (30+ keywords)<p>- Ruby (40+ keywords)<p>- Crystal (50+ keywords)<p>- Rust (50+ keywords)<p>- Nim (60+ keywords)<p>- C# (70+ keywords)<p>- PHP (70+ keywords)<p>Languages still in development<p>- Odin (30+ keywords)<p>- V lang (40+ keywords)<p>- Zig (40+ keywords)
In terms of surface area, I think is hard to beat languages in the Smalltalk family. Smalltalk has only six reserved words: true , false , nil , self , super and thisContext. To emphasize the simplicity, there is even a smalltalk postcard to show the whole syntax fits on it. See <a href="https://richardeng.medium.com/syntax-on-a-post-card-cb6d85fabf88" rel="nofollow">https://richardeng.medium.com/syntax-on-a-post-card-cb6d85fa...</a><p>I think this postcard remark may be a bit misleading sometimes, as in practice the complexity is shifted from syntax to the large class library in the system image, that packs a lot of functionality. But yet the environment is sweet and has great discoverability, with functionality like search by example. See <a href="https://youtu.be/HOuZyOKa91o" rel="nofollow">https://youtu.be/HOuZyOKa91o</a><p>The Smalltalk flavor I strongly recommend is Pharo. There's a MOOC[1] on it, and there are several free books that cover the basics of the language itself[2][3], data visualisation[4] and numeric stuff[5]. [1]. <a href="https://mooc.pharo.org/" rel="nofollow">https://mooc.pharo.org/</a> [2]. <a href="https://github.com/SquareBracketAssociates/PharoByExample9/r" rel="nofollow">https://github.com/SquareBracketAssociates/PharoByExample9/r</a>... [3]. <a href="https://books.pharo.org/deep-into-pharo/" rel="nofollow">https://books.pharo.org/deep-into-pharo/</a> [4]. <a href="http://agilevisualization.com/" rel="nofollow">http://agilevisualization.com/</a> [5]. <a href="https://books.pharo.org/numerical-methods/" rel="nofollow">https://books.pharo.org/numerical-methods/</a>
Clojure is tiny in that there are very few special forms (less than 20 according to [0]) and most things are just plain functions.<p>More importantly, it is developed extremely conservatively which means<p>1) you don’t need to learn the syntax/feature of the month (like eg javascript/python)<p>2) the code you wrote a decade ago will still work.<p>That said, it does sit on top of Java/JS so you can access those parts easily if you need to.<p>[0]: <a href="https://clojure.org/reference/special_forms" rel="nofollow">https://clojure.org/reference/special_forms</a>