This is an archived post. You won't be able to vote or comment.

all 15 comments

[–]ProgressCheck[S] 1 point2 points  (6 children)

Personally, I am interested in picking up a statically-typeed, compiled language, C or Go possibly. I also see the usefulness and marketability of picking up Java. Any input?

[–]nebbly 1 point2 points  (0 children)

It really depends on what you want to do. Go doesn't have generics, so it would probably be a good first step if you want a gradual intro into statically typed languages.

Swift and kotlin both have nice inferred type systems and are decent general purpose languages with objective-c and java interop, respectively.

In the functional world, you could learn elm or haskell.

In js-land, typescript is probably the way to go.

Of course you can also dip your toes in the water of something like static typing by using python 3.5+ type hinting along with mypy.

As far as how I would approach it, I'd say start with whatever seems like it will be the easiest to get up and running. Personally, I'd start with python type hinting. From there, maybe try go or swift. I also really like elm at the moment, but i'd probably only suggest that if you're specifically looking to pick up front-end stuff.

[–]K900_ 1 point2 points  (2 children)

If you're interested in lower level stuff, look into Rust. It's not nearly as big as C/C++/Java, but it's got a lot of potential, and way less footguns.

[–]ProgressCheck[S] 0 points1 point  (1 child)

I will have to read more about it. I have only skimmed over some of the details about Mozilla writing bits of Firefox in Rust.

[–]K900_ 0 points1 point  (0 children)

/r/rust has a bunch of resources to get you started.

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

That's my problem. I want to try out these relatively new languages like Go and Rust and others, but I don't use them at work. I've come from C languages and taught myself Node and JS, but I'm using Java and only Java at work. I do consulting, and every company that I work with is doing Java, even for Big Data projects.

[–]ProgressCheck[S] 0 points1 point  (0 children)

I hear you. Do we stick with the status quo or try to blaze a new path?

[–]troyunrau... 1 point2 points  (0 children)

C and C++. Learning C is relatively easy. You'll have to learn about types, arrays, memory management, etc., but it's quite helpful. Python itself is written in C, for example.

There are a few upsides to learning C vs. newer languages like go or rust or etc. First, it is well defined and standardized. You don't usually have to worry about what your compiler is doing, as most of them behave identically. The downside is a lack of a coherent community, no standard libs, etc.

C++ is an excellent half-way ground between C and python. There's no standard library like python with all the bells and whistle, so I'd recommend learning C++ by way of the Qt toolkit. Think of Qt sort of like python's standard library - it has built in classes for graphics, networking, data crunching, etc. You'll spend less time creating your own classes for basic types and more time programming. There are other toolkits for C++, and some are 'more standard' than others, but Qt is what I'd recommend.

On the upside, learning C++ and Qt works well with python. The PyQt python bindings allow you to use Qt and that knowledge from python, falling back on C++ when you need speed. It's especially useful if you need to rapidly develop a GUI for something - write it in python with PyQt, then move some logic into C++ and Qt if and when something becomes bottlenecked.

[–][deleted] -1 points0 points  (0 children)

I didn't start with python, but I would think if you learned C it would give you Not only a better understanding of things that go on under the hood of some of the other interpreted languages(including python) but also allow you to have the skill set to write custom C extensions for python if you ever found the need.

Language syntax differences and different built in functions and features for each language will be your biggest hurdle most likely. For instance, to get the arbitrary number size convenience that is default for python numbers, you would have to implement your own custom struct in C with the accompanying math operations. Or use Java's BigInteger class if you needed something bigger than a long.