“What language should I learn next?” is an exceedingly frequently-asked question among programmers, sysads, and devops. Any active online forum will entertain the subject eventually, and many return to it repeatedly.
My own current favorite answer is one others rarely mention: SQL. Here’s why:
Conventions and assumptions
This exchange is typical of the genre. Nearly everyone involved assumes that knowing more languages benefits ones career and is personally satisfying. “The next language” should lie outside the span of those already known, but perhaps not too far. It should have “good peripherals”, including a congenial community of practitioners, reliable references, and demonstrated usefulness. Participants often cite the effect on ones own thinking as one of the principal gains of learning specific languages.
On my own behalf, I’ve suggested Forth, Lisp, ML, Smalltalk, and even more obscure languages in the past. More recently, I’ve often advised students who have only been using Java, Python, C#, or similar languages for barely a year or two. The first thing I tell them is that HTML is the most practical language they can acquire next. While not particularly uplifting as an abstract definition, it’s used in billions of documents, and practice with HTML helps gain familiarity with the concepts necessary for XML and SVG, both of which are sure to pay off. HTML is the language of expression on the Web, and thus essential to daily business.
bash, for those focused more on Windows or Unix, respectively, are also useful. The syntax and semantics of these workhorses have little to recommend them, though, for those already familiar with a classroom language.
SQL provides a more interesting combination of features. Tim O’Reilly is only the most prominent of several commentators to preach that the “Center of Value [is] Shifting from Software to Data …” SQL, of course, is nearly indispensable for getting at existing datastores. This makes SQL supremely practical.
At the same time, SQL is a nice stretch for computing students. As a declarative language, it nicely contrasts with conventional procedural languages, and introduces ideas that functional and logic programming exploit more deeply.
When I urge near-beginners to “learn SQL”, I of course am abbreviating, “learn a part of SQL”. Standard SQL has grown beyond the comprehension of all but a few specialists, and vendor-specific variations make comprehension of all of SQL infeasible for any mortal. To learn the basics, however, is easier and quicker than it’s ever been, if only because all the necessary resources are now freely available on the Web. For deeper reading, see any of the books written by C. J. Date or Joe Celko.