The below is, more than I’d like to, a collection fo sentiments rather than thought-through suggestions.
I came up with most of it before @andrerfcsantos posted his suggestions; I feel his are way catchier than the ones here below, which seems an important quality.
Objections
Functional paradigm / programming / languages because the category seems nigh meaningless to me. I feel Haskell and Lisps are too different from each other. If we group them together, why not include Python as well? And Rust? And R and Julia of course…
dynamically typed languages because sadly this category has not yet grown up into a proper paradigm, and so (for now) remains somewhat of a nonapple category as well.
statically typed languages because it is boring / too broad. Java is statically typed. This category could be strengthened into Fancy Type Systems.
Young languages for lack of coherency and lack of purpose. (Test of Time is fine by me though: those languages have proven useful!)
By deployment platform because hard to explore on Exercism.
Thoughts & Suggestions
An advantage of narrow categories (i.e. containing few languages) is that they make communicating with others (‘community engagement’) easier: (relatively) more students who are on ‘the same page’ are available. In contrast, e.g. communicating about OOP can be more difficult if the one is learning C#, the other Python, and yet two others Lisp and Smalltalk.
Exotic Workflows like Lisp’s REPL-driven dev., SmallTalk’s/Pharo’s IDE, whatever Prolog does, perhaps Unison (I wouldn’t know), maybe Lean (not available on Exercism).
Domain Specific Languages: Elm, PureScript, Awk, maybe Emacs Lisp and VimScript, probably many others. Strictly speaking shell languages are DSL’s too but they deserve their own category.
Low-level Languages (well…). Maybe split up into subcategories in the C tradition (e.g. similar call mechanisms, compiles down to C, …) and outside the C tradition (e.g. Fortran, COBOL for all I know). I know next to nothing about under-the-hood approaches, but I’d like to.
Some category containing Julia: its interestingness is accessible very early on in the learning process.
Assemblies: Wasm, X86, …
Any Concurrency category should definitely include Haskell, as its concurrency story is among the best ones around.
Macros: the Lisps, especially Racket, but also Rust and Julia.
Shell languages! Sadly, Exercism does not yet feature a PowerShell track.
Glue languages. I’m thinking Python (and Ruby?), shell languages, JavaScript (sometimes), R (if I’m feeling generous), and Go (I guess, being unfamiliar with it).
Exploring of languages’ interestingnesses through Exercism looks challenging to me. Are there ambitions here?
I think that the easiest idea to implement is probably the intended use case, or the average use case, of a language. Surely Perl can be used for scientific computing and C for web development, but they were never intended to be used like that.
The problem with a paradigm-oriented approach is that it’ll be difficult to have 12 clear-cut categories, and there will be guaranteed resistance on any categorization chosen (especially for multi-paradigm ones). Are C, Rust and Golang primarily Systems languages? Should C be considered a Procedural language, and C++ Object Oriented? Do we consider TCL and Perl “scripting” languages? My initial group suggestion would be the following (a subset of languages in parentheses for reference):
Low Level (Assembly)
Structured (COBOL, ABAP)
Procedural (C)
Object Oriented (C++)
Functional (Haskell)
Pattern-matching/Data Driven (AWK, Red)
Symbolic (Lisp)
Logic (Prolog)
Prototype-based (Javascript)
Lightweight (Wren, Lua, TCL)
I’m having trouble determining the last two, there isn’t an appropriate Concurrent/Parallel or Actor-based language, Multi-paradigm would be cheating as it would include a lot of already covered languages. “Generic” (Java) doesn’t really cut it. I’d have loved for this to work as a way to show the evolution of languages, but that’s more like a cyclic graph rather than a tree moving forward.
Erik’s categorization works around this issue, and focuses more on “branding” if I may say so.
A voting feature sounds like a great idea, regardless of the categories chosen
I think this is a much more helpful categorization, I think a lot of us look to learn new languages to get new perspectives so perhaps breaking down that category using some form of tags with the concepts that @meatball and @ErikSchierboom suggested would be handy?
Erik and I have spent a couple of hours trying to get something that incorporates all the languages on the site. We’ve experimented with both functional grouping categories and more interesting ideas (thanks Andre for some great ideas of that type!).
The languages in blue are the ones that we’re going to highlight in our intro videos for each month (generally because we know they have solid syllabuses on Exercism and think they’ll have wide interest). Lots of languages fit into multiple categories, but every language on Exercism is in one of the categories here, so we don’t mind if every category doesn’t contain every language.
I’d love ideas on what the names could be for each category. We tried to do month names e.g. “Analytical April” but failed after that one Please let me know your thoughts on those!
PureScript is a dialect of Haskell, and as far as I know ReasonML is a member of the ML family, so these two should maybe be grouped with Haskell and StandardML. (Although, ceteris paribus, I would recommend Haskell over PureScript for learning resources reasons.) Then again, PureScript also competes with Elm, so…