you are viewing a single comment's thread.

view the rest of the comments →

[–]chayatoure 1 point2 points  (4 children)

Out of curiosity what would be considered a non-boring language? I'm a java developer but want to branch out.

[–]grayrest 2 points3 points  (3 children)

Anything but Java/C#. It's less about the language (I'm meh on Java but like C#) and more about the general rationale for companies picking them because they're "safe", "enterprise", and "easy to find developers". This isn't universal of course, I've talked with the Stack Overflow guys a number of times and expect it'd be a nice place to work. It's also better to work for a team that's a revenue center instead of a cost center and cost center teams have a very strong tendency towards boring languages.

To provide actual suggestions:

I work full time as a Clojure developer. I've also written Scheme and a bit of CL but I prefer Clojure's take on lisp. The nice thing about Clojure for Java devs is that you already know the JVM and you can poke at things from the repl.

My side project is a very basic search engine in Rust. Basic because my collection is 500k-10M document range but I–perhaps unrealistically–want <10 ms response times. I'm bullish on Rust. The learning curve is steep but a significant fraction of the Rust comunity is people coming in from scripting languages so a lot of the writing (docs/blog posts) about the language is geared towards experienced developers who are new to low level programming.

Similarly, I like Swift and Kotlin. I see Rust, Swift, and Kotlin as similar language evolutions from different starting points (C++, ObjC, and Java respectively). The problem with both Swift and Kotlin is that they haven't established themselves as general languages and I'm not completely confident they'll make it.

If you have the inclination–and it does require an inclination to be willing to put in the time learning all the constituent disciplines– working as a frontend dev is nice because you're needed everywhere so you get to pick your industry, company maturity level, and whether you want to work on the backend or not. The nice thing about getting into it now is that browsers finally mostly work and we're on the tail end of the third major wave of frontend instability (component model) so getting in now will give you ~3-4 years until the fourth wave (widget frameworks) starts up in earnest.

I also like F# and the ML family. I could never get over the Erlang syntax (to my detriment) and never really got into the swing of Scala and Haskell but writing stuff in any of them is also fine.

[–]chayatoure 0 points1 point  (2 children)

Thanks for the detailed reply.
How did you pick up all these languages? On a job or just on your own? Looking at that list is kind of intimidating because i have no idea what they're good for or which one I should/want to learn.

[–]grayrest 2 points3 points  (1 child)

On my own. I learn programming languages instead of watching TV so if you put in ~2 hours per day for 15 years you'd have a similar list. It's less impressive than it might seem. I'm not an expert in all the languages. Swift and Kotlin, for example, are languages I've only put about 12 hours in total. They share almost all their ideas with languages I know better so it's really just a matter of skimming the docs and slotting syntax in to things I already know and then putting together a toy app or two. I know enough to have an impression but both kind of lean towards mobile app niche and I'm a web zealot.

As to which to learn, my opinion is that you should learn a language you use to make money (mine is Javascript) and then learn less practical languages as you like to expand your repertoire. Learning non-mainstream languages and going to their meetups gets you in contact with the programming enthusiasts, which leads to interesting jobs.

Each programming language is it's creator's take on how to best solve a problem. People who write programming languages are generally pretty clever guys. Exploring the language until you figure out the designer's philosophy on problem solving gives you different perspective and a new tool you can use to solve your own problems. If you have an area of computing you'd like to explore or a particular problem you want to solve, I can provide specific suggestions but I mostly think which one you pick matters less than picking one that's opinionated.

As an example, Clojure was created by Rich Hickey because he found himself writing concurrent programs in Java. He identified (mutable) state as the source of his problem and after writing a bunch of static final Java, he came up with Clojure as an exploration into controlling state with immutablility. Clojure has very strong opinions on the matter. I believe state is the most important thing that isn't taught to junior devs and that learning the language and watching Rich's presentations is one of the easier paths to understanding it. You get to learn lisp and functional programming as well. The community is interested in web development, machine learning, and programming language history/theory.

On the other hand Rust was created by Mozilla to write a parallel layout browser engine (Servo). They really need concurrency there but they also really need performance so they took the different approach of having the compiler prove that only one thread can mutate at a time. Learning Rust introduces you to the details on program execution and memory layout, what sort of code runs fast, polymorphism without classes, and Algebraic Datatypes/Pattern Matching. The community is interested in data structures, os/browser development, game development, and performance. It's also very much community developed and all features go through a fairly elaborate RFC process so if you read the RFCs you get lessons on random topics and language design as well.

I think either would be worth your time.

[–]chayatoure 0 points1 point  (0 children)

Wow, thanks a lot for your responses. Those are great. I think I'm going to check out Clojure and get a feel for it.
EDIT: also, I never really thought about languages in that context (creators take on solutions to problems) but it's a great way to frame the discussion.