Which programming language should I learn next?
December 12, 2019 3:41 PM   Subscribe

So I'm a software engineer. Recently, I made a schedule of the things I want to learn. Since I've got a lot of time on my hands now, I wanted to look into learning more about another programming language.

I also want to explain a little bit about my preferences. I'm more of a backend person. I tried out front end but I just don't have it in me to work with js, html and css. I've spent a lot of time working with Python, I also like to learn Rust in my spare time and I want to get learn more about functional concepts with Haskell, but not much more.

I'm also getting into finance and mathematics. I know this sounds like a lot, but I've figured out a schedule that lets me do all these things throughout the week. If possible I'd like to relate whatever I learn with finance and math.

Also, some people have suggested languages like Java and C#. I'm not sure I want to go down that road, I've tried those languages before and I have never been able to keep on learning about them. Unless there is some very unorthodox manner of learning those two languages I don't think I'll want to give them a go.
posted by Tarsonis10 to Technology (27 answers total) 9 users marked this as a favorite
 
How are you on databases and the languages and math people use with them? Or statistics?
posted by clew at 3:43 PM on December 12, 2019


Archive of Our Own is built on Ruby on Rails. And they have tutorials and software learning assistance. (I have no idea if that connects with finance and math.)
posted by ErisLordFreedom at 4:00 PM on December 12, 2019


Cobol? Might be a lucrative challenge.
posted by Jessica Savitch's Coke Spoon at 4:03 PM on December 12, 2019


You could effectively combine your interests by learning a javascript data visualization library like D3. There are a bunch of great tutorials online.

In the last decade or so, devs aren’t really writing HTML or CSS so I wouldn’t worry much about those. I’ve been a web dev for close to 15 years and have watched the industry evolve and especially the job requirements for devs.

I’ve been job-hunting on and off for the last five years in Portland, OR, and IME employers want javascript/python/ruby (almost interchangeably), React is huge, node.js is everywhere and everyone wants you to know AWS. Everyone.

I believe r is a popular - though pretty obscure- language for working with statistics and mathy things. I don’t know much about it but you may want to check it out. I have no idea how to successfully google “r” maybe that’s why it’s obscure.
posted by bendy at 4:04 PM on December 12, 2019


If you want to do things relevant to math and science, I say R. I can’t tell if you’re more interested in making money or doing research or just understanding the current world of mathy programming, but R gets my vote for all those cases.
posted by SaltySalticid at 4:04 PM on December 12, 2019


Response by poster: Well, I happen to know React, it was how I started my career and I've used D3 before. Also used AWS, and I'm currently working with Google Cloud, which is to be honest, pretty much the same as AWS.

As for making money? Well it's a goal but not really the first thing on the list. I want to run a business eventually, almost everything I learn goes towards that. Anyway, yes I want to make a profit, but that's not the reason I like doing this.
posted by Tarsonis10 at 4:13 PM on December 12, 2019 [1 favorite]


Best answer: Learn a functional programming language. It will teach you a new way of thinking, and then you can apply functional patterns and concepts in whatever language you work in, including the languages you are very familiar with.
posted by matildaben at 4:13 PM on December 12, 2019 [4 favorites]


If possible I'd like to relate whatever I learn with finance and math.

R? Kieran Healey's work gives a sense of what it can do with datasets in terms of visualisation, and there are plenty of other resources for data mining.

Another option from a different angle might be Golang, just to see if you can crack a statically-typed compiled language.
posted by holgate at 4:13 PM on December 12, 2019 [3 favorites]


I'm also getting into finance and mathematics.

Learn OCaml!
posted by 168 at 4:24 PM on December 12, 2019 [1 favorite]


Erlang is another one that will broaden your horizons. Not very relevant for finance and math, but it will give you new insight into distributed systems.
posted by qxntpqbbbqxl at 4:32 PM on December 12, 2019 [1 favorite]


I'm heard good things about doing numerical work with Julia, haven't tried it myself yet though.
posted by no regrets, coyote at 4:53 PM on December 12, 2019


Best answer: Scala? It's big in the machine learning space. My general understanding is people often prove out their models and pipelines in python first, but then redo everything in scala to make it fast.

But I'd personally keep with python and do down the ML route with it. So many avenues to explore there. Nah, not jealous at all ;)
posted by cgg at 4:55 PM on December 12, 2019 [1 favorite]


Best answer: From a Mefite who wishes to remain anonymous:
SQL! Being able to keep your data safe is important as a business owner. Being able to map your data needs is also important. Being able to understand what the database can do can save you a lot of time by not doing things in the application layer.

Also, regular expressions.
posted by LobsterMitten at 5:26 PM on December 12, 2019 [2 favorites]


I wouldn't rule out C and/or C++, becoming a skilled programmer is quite difficult, but even a cursory knowledge of them ends up being very useful. Explicitly dealing with pointers, memory, the stack/heap, is all very valuable.
posted by vogon_poet at 5:38 PM on December 12, 2019 [1 favorite]


If you want to go with R I'd say check this out: Stenci.la. I saw a talk by one of the developers recently and it's an open-source spreadsheet program that lets you use R for your data instead of the standard functions.
posted by bendy at 5:55 PM on December 12, 2019


ocaml
posted by cnidaria at 6:08 PM on December 12, 2019


R with the Tidyverse packages are a great base to do statistics, data science, and with the right packages, financial analytics.
posted by demiurge at 6:11 PM on December 12, 2019 [2 favorites]


Go
posted by sammyo at 6:42 PM on December 12, 2019 [1 favorite]


I'd of course say "How about Raku (nee Perl 6). It's really fun.

‘A Language a Day’ — Advent Calendar 2019 – Andrew Shitov’s Blog is doing a simple quick introduction to a variety of languages.

Haskell and Rust sorta have the functional and systems bits covered, so good picks. I think Julia and R are the finance/stats du jour.

If you haven't covered all the bases why not take a Grand Tour of checking out a little bit of everything. Some 6502 or 68k Assembly (not x86 because it's all whack). Check out FORTH (the old Starting FORTH) for some good old RPN stack computing. Some LISP variant, some Prolog for those early AI the hard way attempts. Some Perl (5) for the swiss-army-knife and whipitupitude and TIMTOWTDI. Some Erlang for fault tolerant distributed computing. Some Smalltalk / Squeak / Pharo to see where all of this OO started. If you're nuts, APL or one of its derivatives.

Most of these things are just a bit orthogonal to your Java/JS/Python/Perl/Ruby/Lua or C/C++/C# sort of basically all the same thing with different syntax. Like Haskell, get at least a bit familiar with all of the weird things in your spare time.
posted by zengargoyle at 7:53 PM on December 12, 2019 [1 favorite]


Second that R is not a bad choice for your listed preferences. It's primarily a statistical language and can dovetail with your interest in mathematics, but there are also some neat conventions they've done well (R Markdown and ggplot, both covered in Healy's visualization book referenced above, which is great but not primarily a programming book.) Like Python a ton of modules by contributing authors build up the language's capabilities.
posted by mark k at 8:08 PM on December 12, 2019


Best answer: Go as a language is mostly Rust with the hard-to-understand bits removed, and I wouldn't go there - you should find it simple enough if you need it, and while it will add to your employability it won't broaden your horizons. Its main difference is the encouragement to multithread - see also Erlang.

Erlang is a surprisingly Prolog-like language built on pattern matching with a handful of multithreaded messaging to boot, and is left-field enough that it will probably inspire you to think differently about things. Distributed systems is a part of it (I feel it inspired Go's functionality) but it has much more than that to offer that is different.

Perl and Raku are both unpopular in the modern world, but I still find it amazing what you can do with Perl that you can't easily do otherwise. Write Perl in particular when regexes are 90% of your solution. (Believe me, I know it's more than this, it paid my bills for a long time; but the world has caught up with it.)

Shellscript is not a language as such, it's an amalgam of what it does itself and how to use the tools it lets you run (sed, awk, even jq). But writing brief and elegant programs is almost an art form, and every deployment system and test suite benefits from you knowing how to apply it properly when you work with Unix. Use Bourne shell or bash, and know the difference between them.
posted by How much is that froggie in the window at 12:18 AM on December 13, 2019 [1 favorite]


Elixir - distributed systems, pattern matching - a very different paradigm for a functional language. Also, there are jobs.
posted by kokaku at 1:59 AM on December 13, 2019


Best answer: I do think R is a natural fit--you can easily find a finance book to work though that uses R. However, I do want to caution that people don't build applications with R the way you might be used to thinking of. A lot of "learning R" is not like learning other languages--for example, it has multiple OOP systems that, broadly speaking, you just don't need to know about (and I don't). On the other hand, if you get good at manipulating data with dplyr, you will definitely get a lot better at SQL because it's the same thinking and there's some light introduction to functional programming.

I never know what I think of Go. I have used it at work and for fun, but not extensively. On the one hand, it's kind of not that interesting. On the other hand it's really quite beautiful in its simplicity. They set out to make a language that was straightforward and where people could become productive quickly and they succeeded. If you have a little cli you've been thinking of making, it might be a good fit for a quick project.

I'm really coming to plug Clojure (or another lisp). I've found it a good balance of mind-expanding but not a pain in the butt (looking at you Haskell--fun, but I've never succeeded in actually building anything). I will disclaim by saying that I had a couple years of doing Scala before Clojure, so I'd already climbed up the basic functional programming learning curve (but you maybe did that with Haskell, which is much less forgiving than Scala).
posted by hoyland at 3:28 AM on December 13, 2019 [1 favorite]


Response by poster: Thanks for the suggestions, I have narrowed down my choices.

I'm in between Haskell, Erlang/Elixir and Scala.

I would go for R if I didn't already know Python, which does everything R does plus more.

I tried Go, I felt it tried to be too different, especially with the way it does package management. I chose Rust instead.

I know SQL but not nearly well enough, so that's on my todo list for later.
posted by Tarsonis10 at 6:11 AM on December 13, 2019 [1 favorite]


I found Elixir to be super fun to play around in - it has friendlier syntax than most functional languages.
posted by Ragged Richard at 8:27 AM on December 13, 2019


Best answer: Go is like a mediocre* pan from a restaurant supply store: restaurants use them because, at the scale they operate at, you assume that every tool you have on hand is going to fall apart sooner rather than later, so there's no sense in paying for quality when you'll just replace it all in a month anyway, but if you're looking for a pan for home use you might as well get something you actually enjoy using rather than just going for the most workmanlike option.

As far as functional languages go, Scala is great but IMO not the greatest starting point for learning the strongly-typed functional paradigm, since it's a very large and complicated language by virtue of also supporting OOP and Java interop. Elixir is super-cool, but I think you can't beat the perspective that working with a type system like Haskell's will give you: the levels of abstraction you can reach while still maintaining compile-time safety guarantees is really amazing, and even though you can take it well beyond the realm of practicality, what I think you'll take away is a much stronger intuition for the types of things as you develop a program (even in a dynamic language) and a better eye for when you can abstract away a repeated pattern in your code in a rigorous and extensible way.

* Although in my experience using it in production, it's actually more like a pan that everyone says is good enough but is actually leaching lead into the food, and it's only because there are so many factors to consider that we don't realize it's the pan that's making us sick.
posted by invitapriore at 11:03 AM on December 13, 2019


Clojure is quite interesting. Give it a try. The parentheses are not as daunting as you may think at first glance.
posted by schrodycat at 6:43 AM on December 15, 2019


« Older How do you pay for therapy?   |   Purpose of short sidewalks in front of businesses Newer »
This thread is closed to new comments.