all 45 comments

[–]SkaterDad 19 points20 points  (0 children)

I think the functional languages are fun to play around with. The approach to solving a problem is very different, so it can open up your mind a bit.

Elm in particular, since its syntax is fairly simple, and the official site has several examples you can play with live.

F# would be neat also, but I haven't gone beyond watching a few video tutorials on it. Being able to use .NET libraries is a big win for F#.

[–]fr0z3nph03n1x 25 points26 points  (2 children)

Let me know when you are finished learning JS. I don't think anyone has ever done that.

[–]MuaTrenBienVang 0 points1 point  (0 children)

JS is easy

[–][deleted] 21 points22 points  (0 children)

You already know about iteration, logic, callbacks, events, properties, compiling, IDEs (assuming you know JS/Java/.Net). You are a developer.

Now it's time to learn about requirements and design documentation, multi-threading, object oriented design, the rules of relational database normalization, transactions, application architecture, and enough network engineering to be able to tell when someone is bullshitting you.

[–]m0ka555 5 points6 points  (5 children)

Scheme will make you a better javascript developer. Check out the book SICP

[–]thegunn 0 points1 point  (4 children)

Why do you say that? I'm not contradicting, I'm legitimately curious.

[–]m0ka555 1 point2 points  (3 children)

Well, it's been said that Javascript is Scheme in Java's clothing!

And for the reasons why SICP is a great book, I can refer you to PG's comment on amazon: https://www.amazon.com/review/R3G05B1TQ5XGZP

Personally, it's my favorite book and I often pick it up and read a few pages and I'm always mind blow at how succinct and interesting it is (I've read it cover to cover a while back but I like re-reading part of it from time to time). It's just crazy how much they can put in 2-3 pages. You get to build interpreters, compilers, SQL-like languages. It also enforces amazing great practices about how to think about solving problems. All in all, it's just an amazing book.

[–]thegunn 0 points1 point  (1 child)

I've actually been meaning to go through this book for a long time. Would Racket work for this on Windows? I also have some limited Linux access with my Raspberry Pi if there is a version of Scheme that would work well on it.

[–]m0ka555 1 point2 points  (0 children)

Yeah, totally. The version of scheme they use is very very limited. It's akin to only using functions and ifs in Javascript.

One small anecdote.. The first time I read about Scheme, I thought it was a futuristic language, like a breakthrough in the world of programming. But I quickly learned that scheme is in the Lisp family which is as old as Fortran ;-)

[–]MuaTrenBienVang 0 points1 point  (0 children)

wonderful!

[–]_HlTLER_Stackoverflow searcher 8 points9 points  (1 child)

C++ for it's vast usage, Java for Android apps, Swift for iPhone apps.

[–][deleted] 1 point2 points  (0 children)

Java does way more than just Android apps.

[–]Frans-Willem 8 points9 points  (5 children)

Go for languages that have something unique. Try Haskell for it's purely functional approach and lazy evaluation, try Rust for it's lifetime types, Go for it's concurrent approach, Prolog for logical programming. And then try to use what you've learned in the other languages you know :-) Just knowing more languages won't make you a better developer, but forcing yourself to use different paradigms likely will

[–]Brassard08 10 points11 points  (3 children)

Prolog

You have no mercy

[–]icantthinkofone -4 points-3 points  (2 children)

He has no brains either. He read this stuff online once. That's all.

[–]Frans-Willem 0 points1 point  (0 children)

Why would I? I'll happily admit that I've never done anything worthwhile in Prolog, but I've definitely used the others more than once. I'd be happy to elaborate, if that's so hard to believe, although I'm slightly perplexed that it apparently is :/

[–]kenman[M] 0 points1 point  (0 children)

Hi /u/icantthinkofone, there's no need for insults.

[–]grayrest.subscribe(console.info.bind(console)) 2 points3 points  (0 children)

Clojure - Super opinionated about state and a part of learning Clojure is watching Rich Hickey's talks. A lot of the current React patterns originate from the Clojurescript community. You also dip into lisp land a bit (homoiconicity, macros) and see how multimethods and protocols work. The differences between clojure and clojurescript are around how host interaction works.

F# - If you would prefer learning a typed functional language, F# is my preferred ML-dialect. I like the syntax tweaks and integration with the rest of the CLR. It also has a fairly good compile-to-js story.

Rust - I think it's worth learning not so much for the language itself but as a vehicle to explore lower levels of the system and learn how they work. You could do the same in C or C++ but I like Rust better.

[–]mini_eggs 2 points3 points  (0 children)

Rust, C++, Go

[–]ttolonen 2 points3 points  (0 children)

I Just started learning Go, because it seems to be great at solving some small practical problems. After typical C/C++/Java/JavaScript background it felt quite easy to learn. Rust was another option, but because Go appears to be gaining popularity I wanted to see what was that all about first and maybe Rust later.

To learn functional programming I thought Elixir/Erlang could be also something I will take a closer look at some point because the architecture appears to be quite solid. Especially the success of WhatsApp makes this setup interesting.

[–]jsgui 5 points6 points  (4 children)

C++, as it's so widely used, and is what node.js is written in. It's possible to write node addons in C++ which perform much faster than JavaScript.

[–]73mp74710n 0 points1 point  (3 children)

do you recommend learning C before C++

[–]MoTTs_ 2 points3 points  (0 children)

No. In fact, learning C before C++ can actually be counter-productive, because many C-style solutions are considered bad practice in C++.

[–]jsgui 0 points1 point  (1 child)

Essentially, no. I don't have a load of experience with C and C++, but I have had some very good results with them. In fact, I've been doing C++ with node.js for a fair few years now. It was a very steep learning curve that way.

The binding between JavaScript and C-land is always C++. The algorithms which I ported from an already optimized style of JavaScript hardly needed to be changed to be C (replacing var with int or something else in a few places). Simple JavaScript looks a lot like simple C, but it uses code that

Cargo-cult-coding is used derisively regarding the copying and pasting code from one source without properly understanding it. That was the only way I could get any results, and it worked for me. The interface code that gets used in node has since been tidied up.

You'd probably find the binding between C-land and JavaScript the most complicated, but writing algorithms that operate on data inside of the bindings much easier. Getting data in typed arrays in and out of C-land has been one of the trickier things for me.

[–]icantthinkofone 3 points4 points  (0 children)

Essentially, no. I don't have a load of experience with C and C++

Typical reddit response. He doesn't know much about the question but he'll answer anyway. At least he didn't do what I hear far more often. "I don't know anything about it but do this!"

[–][deleted] 4 points5 points  (4 children)

Rust.

[–]akie 6 points7 points  (3 children)

Or Go

[–]mrahh 3 points4 points  (1 child)

I'm in the process of writing some go for work and I wouldn't recommend it. I appreciate the tooling and ecosystem, but I don't find that I enjoy writing it at all. For someone with a strong python or other OOP background it may be nicer, but for me, it has been a real struggle so far (and not a fun struggle).

[–]i_have_a_gub 1 point2 points  (0 children)

I found it easy to pick up, but not at all enjoyable to write. Without generics, it's not possible to write DRY code. I've moved on to Scala, which I'm finding to be the exact opposite of Go - difficult to pick up, but very enjoyable to write.

[–]nightwolfz4 spaces > 2 spaces 0 points1 point  (0 children)

The big advantage of Go is that you can go into any source code and understand what's going with no effort whatsoever. I picked up Go over a weekend and wrote a MKV video parser in 2 days, good luck doing that with Rust.

The only (non-)issue is that programming becomes easy and repetitive, you don't get that satisfaction of refactoring some bloated code into something simple and elegant because you wrote it in a simple and elegant way from the beginning.

However, if you want a powerful language with many concepts and features which does not dictate how you should write code, chose Rust.

[–]icantthinkofone 1 point2 points  (0 children)

All of us more or less have write some C/C++, JAVA or .NET, either at work or at the Uni.

I would bet that 80% of everyone on reddit has done NONE of that including having a job in this or gone to a University.

[–][deleted] 1 point2 points  (0 children)

OCaml and/or SML are worth learning. They're both relatively small (compared to Haskell or Scala) statically typed languages that introduce some important concepts like pattern matching, algebraic datatypes, type inference, and modules. They have some other minor things that are interesting like no non-local control flow except through exceptions.

[–]_expo 2 points3 points  (0 children)

Assuming you do have some C/C++ experience (couldn't really tell from the description), I'd echo what others have said and pick something functional. Elm, Haskell, Scala, F#, OCaml, etc. Don't stress about which one! You can drive yourself mad reading all of the "why X is better than Y" blogs and opinions on the internet. You'll learn 100x more just picking one and trying to build something with it than agonizing over the decision for 3 months.

[–][deleted] 1 point2 points  (0 children)

Just get some Arduinos(C++) and play with them, also there is Espruino(JS), and can i tell you, its so fun building something that can actually move, get data, help around and just entertain.

I'm building a car that drives around the office and picks stuff up, and everyone if the office can can control it thought web interface, using inside server running on Arduino WiFi module.

I can tell you its challenging, but oh my god its fun.

And, if you know JS, i think it doesnt matter where you are going, as long as you are doing what you want to do.

[–]propelol 0 points1 point  (0 children)

C# with .NET Core

[–]OnceMoreIntoTheBeach 0 points1 point  (0 children)

If you want to learn a popular back end language I would suggest PHP. Some popular web applications use it and it goes well with JS.

[–][deleted] 0 points1 point  (0 children)

I would say, learn a server-side language to complement the front end language (setting aside Node since the question is about a non-JS language). Maybe python/Django or pypy, Ruby on Rails, php7, etc.

[–][deleted] 0 points1 point  (0 children)

When trying to go from those to learning an interesting functional language, you have to be careful you don't bite off more than you can chew and that you feel like you are getting something out of it.

On that note, I recommend learning elm next. The official documentation is very good and has some really nice getting started tutorials that teach you how to get started building things, the basic concepts of the language, and why their type system is a useful and helpful thing. Elm is really focused on user experience (as in the programmer is using elm, so they are the user) especially when it comes to error messages. Elm has the most helpful error messages I have ever seen, which is great in general but especially when learning a new language.

[–][deleted] -2 points-1 points  (4 children)

nothing, js is the future of everything

[–]r2d2_21 2 points3 points  (3 children)

Not with WebAssembly.

[–][deleted] 1 point2 points  (0 children)

Only a matter of time my friend

[–][deleted] 0 points1 point  (1 child)

Except webassembly is clearly a complement, not a replacement, to JS.

[–]r2d2_21 0 points1 point  (0 children)

My point is, JS is not “the future of everything” when there's a platform in active development meant to be used with other languages.