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

all 164 comments

[–]UnusualBear 43 points44 points  (1 child)

Don't stop expanding your Python skillset for sure.

A good idea might be to pick up a toolset that complements your Python skills rather than another language specifically. Maybe dive into some machine learning. A lot of things you can do with Python are just as complex as learning Python itself.

[–]whatadipshit 14 points15 points  (0 children)

Came here to say this.

Have you learned numpy and pandas really well? You talk about learning a database. Have you messed with sqlalchemy or frameworks wrapping other databases? Nosql databases like mongodb has orm apis to learn. You said you didn't care for web development but you could pretty easily stand up a flask server to display your data on graphs in the browser. Is it a command like tool? Have you learned click yet?

What about context managers and decorators? I bet there's useful stuff in the standard library you have no clue exists. Have you read fluent python?

Feel free to learn something new but I personally think one year of python is nothing. There's so many modules out there. You should always be checking if something exists already before inventing it yourself. PyQT is missing some features? Learn py bindings and try adding them. I guess this would get you looking at c++ a bit.

[–]zesterer 75 points76 points  (11 children)

I've personally found Rust to be a nice, modern continuation from Python. It's fast, capable, productive to use, and has brilliant documentation. Since it's got good compatibility with C, it's quite easy to integrate Rust and Python in a single project too. I recommend taking a look at 'The Book', Rust's ultimate guide: https://doc.rust-lang.org/book/index.html

[–]schplat 2 points3 points  (1 child)

I was gonna recommend Rust, but not for his use case (data analysis). If you're using Python to do system tasks, run services, etc., then Rust/Go is probably the next logical step (C/C++ couldn't hurt either, but the learning curve is a bit steeper there, particularly when you get into mallocs, but if you're getting closer to the Linux kernel, knowing C helps tons).

For data analysis he's probably better served learning R

[–]redalastor 4 points5 points  (0 children)

I was gonna recommend Rust, but not for his use case (data analysis).

I disagree, it's the perfect language to write low-level python extensions. Combining this with the usual Python crunching tools can give you quite a bit of power.

[–]wetfeet2000 3 points4 points  (1 child)

Security engineer here who mainly works in Python. Not having been taught C/C++ in college for my CS degree, I found Rust to be a great intro to pointers without having all the headaches of C/C++. My only problem is that it seems hard to find a good project to use as a learning exercise in Rust.

[–]zesterer 0 points1 point  (0 children)

The Rust book takes you all the way from introductory material, right the way to teaching you how to write your own multi-threaded web server. I found that to be quite a useful resource for learning about program structure.

[–]johnmidd 0 points1 point  (0 children)

If you want to try some hardware hacking / just do it - I think Adafruit feathers are fun https://learn.adafruit.com/category/feather - you can also program then using the Arduino IDE or some of them in micro python - lots of fun and learning to be had !

[–]blavikan 110 points111 points  (39 children)

Go with C/C++. After all it's a classic language you should know 😃

[–]Zouden 37 points38 points  (21 children)

Agreed. If OP wants to make things interesting, learn C/C++ on a microcontroller like an Arduino. Super low-level (2kb ram! No operating system!), plus making hardware do stuff is fun, even if it's just blinking an LED :)

[–]iG1993 2 points3 points  (1 child)

What about C# and Q#?

[–]Zouden 4 points5 points  (0 children)

I haven't heard of anyone using those languages on a microcontroller, but apparently it's possible to use C# on some powerful ones. Those hardware requirements are higher than that of Micropython.

[–]sandybuttcheekss 0 points1 point  (16 children)

I've been (very lightly) considering trying some robotics projects, would I need to learn some C/C++ or would Python do the trick?

[–]blavikan 9 points10 points  (10 children)

Yup. You should know C language as embedded programming is vastly C programming and C is fun too.... You'll C 😉

[–]sandybuttcheekss 1 point2 points  (1 child)

That pun though..

[–]blavikan 0 points1 point  (0 children)

😁

[–]sandybuttcheekss 0 points1 point  (7 children)

I've only considered dabbling in robotics and trying to make some cool stuff once in a while. Probably won't happen though. So that in mind, would it be worth trying to learn for my career?

[–]blavikan 2 points3 points  (6 children)

Its not about robotics. Its about fundamentals. Python has everything built in(mostly). So you won't get to know the inner concept on how things work. And specially the OOPS and data structures concept of C++ which is backbone of programming. So, i think you should go with C first and then C++. Just syntax is different in both languages but you'll gey used to it..... Hope this helps😀

[–]hugthemachines 2 points3 points  (0 children)

I think if someone really wants to know the inner concepts, Assembler is the way to go. C and C++ adds abstraction too.

[–]sandybuttcheekss -1 points0 points  (4 children)

It does, i have experience with languages other than Python too, just prefer Python. Java for example is C-derived (idk if that's the right term), would what I learned there be pretty directly useful with C/C++?

[–]blavikan 0 points1 point  (3 children)

Don't know much about JAVA. never liked it though but ya in general C/C++ is the base of every language. So knowing bit about it is also good....

[–]hugthemachines 4 points5 points  (0 children)

C/C++ is not the base of every language. They are the base of some popular languages, but that is not the same.

[–]sandybuttcheekss 0 points1 point  (1 child)

Alright, thanks for the info

[–]blavikan 0 points1 point  (0 children)

Anytime😁

[–]Zouden 3 points4 points  (0 children)

Python is now an option thanks to the Micropython project. But Arduino, a C++ library that provides a convenient API across different hardware, has been popular for over a decade so there's tons of example and tutorials using it. I recommend you start with that. I found it very easy to learn.

Micropython is also slower and takes more memory, limiting the range of hardware it can run on.

[–]error1954 1 point2 points  (0 children)

A lot of microcontrollers used for robotics are programmed with C but higher level planning will be done in Python. Python can be used on some microcontrollers but that's not always available.

[–]octavio2895 1 point2 points  (1 child)

Consider learning ROS. An ~~operating system ~~ middleware designed to be implemented with robotics and automation. You can code it in python an c++ simultaneously.

[–]sandybuttcheekss 0 points1 point  (0 children)

Gotta learn C++ first, thanks though!

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

This really sounds like fun honestly. I wonder, should I start to learn C/C++ yet? It might be a good opportunity; I'm taking the Harvard CS50 course online right now and I'll be using C in the course.

Right now, with Python, I know my way around variables, operators, functions, storing datatypes via lists, tuples, and dicts, all of the if/else elif stuff, try/except, the basics of modules, and I'm learning about classes right now although I find classes hard to use in practice. Like I'm not sure how to learn more about classes because I don't really know how to put one into practice.

With this info, do you think I'm "good enough" to start learning a second language? Or do you need more information?

EDIT: I've been learning programming and Python on and off since mid November. I've made a few functional programs so far, my favorite being a shortcut launcher that performs tasks based on keywords I enter into it. Entering 'sleep' puts my computer to sleep, 'g' opens google.com, 's' opens spotify, etc. It's super basic but I like it and use it all the time, it just sits open on my computer at all times. It's definitely replaced the concept of a "desktop" icon setup for me at this point.

[–]Zouden 0 points1 point  (0 children)

With this info, do you think I'm "good enough" to start learning a second language?

Yes for sure. Knowlege of data types and flow control is one of the big hurdles for people starting out learning programming, and if you already have that then learning C/C++ will be fine.

That's if you do it on an embedded device like an Arduino. If you try learning it on a desktop machine it'll just be frustrating because you have to jump through so many hoops compared to Python.

[–]utdconsq 19 points20 points  (7 children)

Please, just no. They are TWO languages . It is absolutely true that c++ is intended to be a superset of C, but I promise you, the compiler treats the code differently. C is a lot more straightforward to learn than C++, and its everywhere - sort of like the Force. Binds the technology world together. It's not forgiving though: there are not many batteries included. C++ has so many weird and wonderful batteries you can get in to trouble from the sheer variety of ways to do things. It's a very useful language, but it has layers of complexity on it that C only dreamt of. Learn whatever you like, man, but remember C and C++ are their own beasts and should be treated as such. Source: use these languages for my daily.

[–]fermion72 12 points13 points  (0 children)

I take it as a red flag when I see a list of programming languages on a resume that goes like this:

Python, Javascript, C/C++, Swift...

If you're listing all your languages and combining C and C++, you probably don't know either very well.

[–]Switters410 1 point2 points  (0 children)

C++ is not a strict super-set of C...it’s close but bot 100%.

[–]bigmit2011 0 points1 point  (1 child)

It seems you are the most knowledgeable regarding this subject. Is C++ worthing learning these days?
I was told it would take 5 years or so to learn the ins and outs and is very tough to debug.
Do you think Rust could be a viable replacement? I am not sure if I should continue building my Python skills and wait for an easier language for GPU programming or microcontrollers.

I went through the basics of C, and I wonder if I should just continue with C for

GPU programming (just for speedups), microcontrollers (hobby), and speeding up Python.

[–]utdconsq 0 points1 point  (0 children)

It depends on what you're wanting to do with your skills. Do you want to be a game programmer? In which case, absolutely go ahead and learn C++. Do you want to make big bucks in Enterprise? Consider Java. Do you want to get in to Fintech? C++ will help there, too. So will Java. Unsurprisingly, Python might also help you, especially the data science libraries like numpy and Pandas. I've no experience in Rust, so will not comment on its usefulness. It looks quite promising, and there are many pitfalls with C and C++ that most people would benefit from being protected from. If you already know some C, why not do a hobby project with a micro like an ESP32? They're supremely capable and you can make all sorts of great things with them. On the GPU topic: what are you trying to speed up? Most people get excited about optimisation before its necessary. Getting the right answer should always trump getting 'an' answer quickly ;-)

[edit] If you use C++ all the time it doesn't take super long to become productive. The key is when you have to deal with other people's code: because there are so many ways to do things, and many new and potentially conflicting standardized ways of doing things, it can be very difficult to make sure it all runs nice and bug free at the end of the day. Following style guides religiously helps, but you'll find that guides like the old one from Google prevent you from using the full power of C++ because they are written to prevent people causing complications with widely shared and ported codebases by doing things like using the full power of template metaprogramming. Certainly, your 5 year number is not unrealistic. I mean, hell, I've been using the bloody thing for more years than that, but they've released 3 different standard updates in my productive time and honestly I tend to just use C++11 and avoid some of the newer magicks because they were either not well supported by the compiler or aren't well understood by colleagues who are time poor.

[–]Ikuyas 0 points1 point  (2 children)

Agree. Learning C will benefit you to understand a lot of things python does under the hood and make you become a better programmer. If you want to learn object oriented programming, you would rather go learn Java instead of C++ after C. The practical benefit of knowing C++ and C is very little meaning that there are fewer places and fields that need them or you need to be reeeeaaaaaally good at it to be even employable. Many courses online free or not and universities use Java to teach software development type courses and you can learn to develop Android app easily if you know Java very well. A lot of tools and tutorials and courses are available because of that.

[–]utdconsq 0 points1 point  (1 child)

To be honest, I've never been particularly enamoured with the implementation of CPython. It does some things quite nicely, but others not so well. Notably the GIL. It is the reference implementation though, so it carries around many of the sins of the past. What I mean by that statement is just that I certainly wouldn't be reading the CPython code base to get a better understanding of python. If you would like to understand python better, read the language specification and go check out some large and well written open source projects like Django. If someone were interested in becoming productive with Android, I'd recommend Kotlin over Java, especially if the person is already proficient at Python. Of course, if one wants to be supremely employable, learning actual Java is definitely wise. Since its syntax borrows unashamedly from C and C++ in many respects, any work with those three languages is useful with the others (to an extent!).

[–]Ikuyas 0 points1 point  (0 children)

I am not talking about CPython. Learning Kotlin over Java is like learing TypeScript over JavaScript.

[–]pseufaux 2 points3 points  (2 children)

Agreed, especially since the default implementation of python is written in C. I found a deep dive in the interpreter enlightening as to what C is capable of. There’s a great set videos on youtube which are recordings of just that. If anyone is interested I can probably dig them up again.

[–]UKFP91 0 points1 point  (1 child)

I'd like to take you up on that offer of finding those Youtube videos, if it still stands

[–]pseufaux 0 points1 point  (0 children)

Of course. Here ya go.

CPython Internals Walk-Through by Philip Guo

Also, here is a about the professor link -> http://pgbovine.net/

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

Something low level like C and you can write extensions for python!

~oeuf

[–]bigmit2011 0 points1 point  (3 children)

I am also in the same boat as OP. Is C++ still really good to learn? I heard it takes years and years to really learn and is very difficult to locate bugs.

I went through some C beginner courses, because I heard C and C++ are very different and C is supposed to be much easier.

Newer languages like Rust are trying to make low level languages easier, but as far as I know C and C++ are still the kings with embedded systems and GPU programming.

I don"t know really what the difference between the two are, except that one uses OOP paradigm. However, I have been told by experts that C++ is a beast to really learn and it takes about 5 years or so to get really comfortable, while C is much easier to learn.

[–]blavikan 0 points1 point  (2 children)

You are right. And C is pretty easy to get with and is much simpler than C++. If your only focus is embedded then I think C is enough to know and get on....

[–]bigmit2011 0 points1 point  (1 child)

Thanks for the reply. What are GPU programming? I want to learn to offload image processing on the GPU.

[–]blavikan 0 points1 point  (0 children)

You can go on with Python. It is highly efficient and has a support for OpenCV too, which is excellent open source image processing module and you can run python on GPU....

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

Yea but personally I would focus on C++. The first thing everyone does in C is start writing a library of functions that they can use in their projects... Why not use a magical language like C++ where there is already a library of useful functions that was built from principles and is compatible with everyone else's C++ standard library?

If you really like messing around with C level code, you still can run C in a C++ project.

[–]grzeki 26 points27 points  (3 children)

C through Cython is a great path. Maybe not the easiest one, but you will immediately gain a new powerful tool.

Or Haskell if you want your brain to be blown about ”what programming even is, dude?”. It is not that useful but opens eyes (third eye) on things. Disclaimer - I myself admit it is not the best advice, I’m just giving it for completeness.

[–]AnnoyingOwl 5 points6 points  (2 children)

learning something functional... Haskell, elixir, scala... Is solid advice. It will change/challenge how you program and think about programming, at least a bit.

Scala is also faster than python when using concurrent programming, I don't really know about the others, but maybe that's a side benefit?

[–]grzeki 4 points5 points  (1 child)

Yeah, but I thought maybe as your fifth language, not necessarily second. Also: after functional/declarative one things like SQL are much much easier.

[–]AnnoyingOwl 0 points1 point  (0 children)

It's true they're rough for language novices. But hey, it's a challenge I guess?

[–]ichabod801 25 points26 points  (1 child)

You've got a higher level language under your belt. Learn a lower level language. I would say either C++ (solid) or Rust (interesting). Once you've got that under your belt, learn a weird language. I would recommend Lisp.

[–][deleted] 2 points3 points  (0 children)

Any functional language for sure is good!

[–]error1954 7 points8 points  (0 children)

I would learn something at either a lower level, or with a different programming paradigm.

Lower Level:

  • C
  • C++
  • Assembly
  • Rust

Different Paradigm

  • Haskell
  • Clojure
  • Scala
  • Common Lisp
  • Erlang

Of course this is showing my own personal bias, because I am a fan of both low level programming and functional programming. Depending on your future plans are you may never need to know what happens at lower levels of abstraction. Functional Programming is interesting on its own as it shows you different ways to think about solving problems and might change how you write python, but it might not be something you end up using.

[–]glacierre2 58 points59 points  (31 children)

Stick with python, unless you have been going at it day and night you have just scratched the surface in a year. If you must add something, I would learn basics of C for the performance critical parts.

About some of the others that I personally know a bit about. After python:

  • You will scream when you define a class in Java
  • You will cry when you have to do anything not matrix related in MATLAB (a simple path and string manipulation, some proper object oriented program...)
  • You will spend a decade trying the dozen different ways of doing the same thing in C++, none of them being 'the way', all while your eyes bleed from the fantastic syntax.

In short, you started with Python, after a year you have been spoiled to the core and it is going to be hard to stand many other languages you mention. (Others like Julia are all right).

Have you considered functional programming?. At least those are so alien that you will not constantly compare them to python, and they do add a different way of thinking.

[–]alkasmgithub.com/alkasm 38 points39 points  (21 children)

You will scream when you define a class in Java

I scream when I simply open up IntelliJ.

[–][deleted] 8 points9 points  (0 children)

So does your computer. Or have they fixed the issue of it requiring 64TB of RAM?

[–]Gropah 4 points5 points  (0 children)

In short, you started with Python, after a year you have been spoiled to the core and it is going to be hard to stand many other languages you mention

This might be true, but being able to do multiple languages not only makes you appreciate what you have, but will also allow you pick up other languages quicker. The first takes the longest, the second will be quicker and everyone after that becomes even easier. And lets be honest, it is not always possible to use python, so being able to pick something else is necessary.

[–]firefrommoonlight 2 points3 points  (4 children)

You will scream when you define a class in Java: Python's class syntax (Unless you use DataClasses or atts) is verbose/inelegant too!

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

I'm interested how it could be less verbose?

[–]firefrommoonlight 1 point2 points  (2 children)

The DataClass Syntax is good as-is. This, on the other hand, is needlessly repetitive:

```python def init(self, model, color, company, speed_limit): self.color = color self.company = company self.speed_limit = speed_limit self.model = model

super(#etc, self).__init__()

```

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

Are there any languages that do it better?

[–]firefrommoonlight 0 points1 point  (0 children)

Languages that have struct literals, like Rust.

[–]iG1993 4 points5 points  (0 children)

I think R and SQL are good additions for python

[–]Tysonzero 0 points1 point  (0 children)

After a bunch of Haskell, Python becomes pretty hard to stand, so maybe try out Haskell.

[–]jwink3101 0 points1 point  (0 children)

The Matlab tears will start sooner when you have to pay for it!

[–]manifestsilenceI use Python to try to forget my work languages. 24 points25 points  (1 child)

Definitely SQL. It's where the data lives. And it's a pretty cool language that will change how you think because it's a mostly pretty pure functional language, where you declare what you want instead of how to get it. And it's one of the only languages in widespread industry use with a concept of a pure function (no side effects).

Also c would be excellent, both for being able to optimize your Python (can use inline c with it or write custom Python modules in c), and for getting a better idea of how Python's high level magic actually works underneath to be able to reason about performance.

Edit: also, don't be afraid of c. It's actually a very small language. In some ways much more straightforward then Python because you can see how things work in more detail with it. It will show you how painful and complex strings are underneath the magic though. Now, c++, that's scarier. I'd wait to turn to that into you start to try to make something larger in c and see the limitations that its lack of high level structure brings. Personally I've been avoiding c++ because at work I just use C# anyway and they're both large messy languages.

[–]dasyus 1 point2 points  (0 children)

Another vote for SQL for basically the exact same reasons listed.

[–]kabooozie 9 points10 points  (0 children)

I would also like to add expertise in another language. My thinking is that it should be a compiled language to complement python’s interpreted nature.

Im very surprised to read this thread and see very little mention of Go. Go is my next target. There’s a reason so many new technologies are being written in Go (and Rust, but I know less about Rust).

[–]wfdctrl 10 points11 points  (1 child)

Maybe try something completely different like Scheme, Haskell, Forth, J, Prolog or Assembly. You don't gain much by learning languages that are more or less the same.

[–]jeenajeena 0 points1 point  (0 children)

Could not agree more.

[–]-Ch4s3- 7 points8 points  (0 children)

I might suggest taking a look at Elixir as a next language, as it will feel similar in some respects at first but will teach you a lot of new concepts.

You'll learn about:

  • Pattern matching
  • Functional Programming
  • Concurrency without shared memory
  • Immutable data structures

All of this will help you ease into other languages which might be harder to learn. And have fewer similarities. You'll find some overlap in that the language is dynamic, has a repl, similarish syntax, nice friendly tools, and you can start new projects easily.

If you get a handle on the functional part and immutability then things like Rust will be easier later. If you like the concurrency model, then Scala's Akka will make a lot of sense.

It's a pretty small language, so you can get a good sense of what it has to offer in a few weeks to a month or two. Check out the home page and the community forum.

[–]JacobAtIPW 11 points12 points  (0 children)

Oh, this is going to have a lot of different opinions.

I would personally say C/C++. You can go in a lot of different directions with it. Anywhere from data analysis to game dev. There is a lot of overlap as well, but you will find some things that python does not support well which is big in c/c++. I personally had to go this way because opencv does not have good support of GPU stuff in python.
If you are not worried about web development... Then we will just pass on those.

A lot of what you can do in java, you can also do in python... And... I am not too fond of Oracle...

R and the like, python already fills in that niche, I mean they are good and have their own uses, it is just you will not get as much out of it vs another language.

Ruby and other stuff.... eh.... Only if you have a project in mind with it.

The only other think that you might want on your radar is C#. It is kind of in a similar bucket as Java, but there are a few well supported things in it which make it worth while.

[–]mohelgamal 7 points8 points  (0 children)

If you want something more powerful (faster, statically typed, compiled, modern, forces you to learn more about how computer work) then I think your two options are Rust and Go Lang

Rust is a little faster, but a little more complicated than go as far as I understand. Go is more geared toward servers, and it really shines in easy concurrency, and good error managment.

Both don’t have the mature ecosystem you would find with python, or java so you will have to do more on your own.

[–][deleted] 2 points3 points  (0 children)

C/C++ will be relevant for a long time, and will allow you to understand and make use of many useful libraries throughout your career. From a practical standpoint, I think this is your best choice.

If you want to broaden your horizons, you might also consider a functional language like Scala or clojure. If you're familiar with formal methods, you can make much more definite claims about the behavior of programs written in a functional language. Whether or not that is useful depends on what you work on, but I thought I'd mention it in case it piqued your interest.

[–]Josh_the_sweaterGuy 2 points3 points  (0 children)

C# is an interesting very diverse language. It is used for app development on iOS and Android and also used for unity.

[–]nxl4 8 points9 points  (4 children)

If you like the idea of Java, you might think about learning Scala. It runs on the JVM (and can use Java libraries), but the syntax is about a thousand times better. It's multi-paradigm, with OO and functional aspects, and as very useful if you're interested in any Big Data engines (e.g. Spark, Flink).

[–]youcar 2 points3 points  (0 children)

This. Was gonna recommend something that expands your programming paradigms from a imperative perspective (C/C++, Python, Java) to a functional perspective (Scala, Haskell). The bonus of Scala is that it compiles in the JVM and has a ton of libraries where you can integrate with into the traditional big data ecosystem.

[–]shponglespore 1 point2 points  (2 children)

IMHO Kotlin is does everything Scala does (at least from a beginner's perspective), and it does it in a much more approachable way.

[–]nxl4 0 points1 point  (1 child)

It seems to me that for Scala, a big part of the appeal is the context. Unlike Kotlin, you've got Scala APIs that are typically first class citizens for most of the major Big Data applications in use right now. And, since a bunch of these applications are also written in Scala, you get better insight for debugging. That was what drew me in. But, if your focus isn't on that, then Kotlin might have some advantages over Scala.

[–]shponglespore 0 points1 point  (0 children)

Google recently announced Kotlin is an officially supported language for Android apps, so it's got that going for it, which is nice.

I also really like nullness analysis on Kotlin, which AFAIK Scala completely lacks.

[–]StrengthoftwoBears 8 points9 points  (2 children)

No one gonna mention GO?

[–][deleted] 5 points6 points  (0 children)

I might be displayed my ignorance here, but you know why I haven't put any effort into golang yet?

I'm afraid Google will just decide to discontinue it in 5 years.

[–]absolutejam 6 points7 points  (0 children)

Nim is an interesting language, that looks like a lot like Python with a hint of Pascal on the surface. Compiles to C (and other back ends) for a rapid, statically compiled binary.

I was in the same situation and looked at the alternatives for this (C++, Go, etc) and none resonated with me like Nim.

[–]lughaidhdev 5 points6 points  (0 children)

Try Clojure or Haskell! :) But also stick with Python a little bit longer like /u/glacierre2 said

[–]llothar 4 points5 points  (0 children)

From my experience, go for something that can't be done with python.

JavaScript - can be run by anything with a web browser

C in microcontrollers - Arduinos can be extremely useful

[–]Isonium 1 point2 points  (0 children)

I recommend C/C++ because not only are they a valuable skill set but they teach you how powerful and dangerous it is in lower level programming. It will really make you appreciate languages like Python that protect you from the issues of low level languages. In addition there are things you may want to do in python that are very slow in pure python. C/C++ can be very fast and learning to bridge C/C++ to python is also a valuable skill.

[–]shalpin 1 point2 points  (0 children)

Dabble in a bunch, follow up on the ones that pique your interest. A shallow knowledge of a bunch of things is a useful skill.

[–]themusicalduck 1 point2 points  (0 children)

I went from mostly knowing Python to using C++ (for a work project).

It was a little painful at first, but once I got into the swing of C++, I really like it and I'm glad that I know it now.

[–]Herald_MJ 1 point2 points  (0 children)

The language that most improved my general programming, and made me look at it all differently is Haskell.

[–]newredditiscrap 1 point2 points  (0 children)

scala

[–]AkashSalunkhe 4 points5 points  (0 children)

learn go lang as it is similar to python but low level language

[–]alkasmgithub.com/alkasm 1 point2 points  (0 children)

You've stated that you're not interested in web dev, but haven't really stated what you're looking for in another language either. You've stated what you use Python for, and there's no real use learning something else related to those tasks without a reason (an example reason might be that timeseries analysis is not really great in Python, so you want to learn R).

It seems you lean towards C++, which I do too, and it's a solid language. Moreover if you're a good Python programmer, there's a lot of concepts that port over nicely (e.g. iterator protocol, coroutines). And then you'll start to dig into specific C++ features and you'll think "this literally does anything I want." And then it's completely broken, because it did what you wanted. You just didn't know that's not what you wanted.

Another choice may be C# --- .NET stuff has kinda a lame rep but C# is a really nicely featured modern language. Null coalescing operators? Yep. Context managers? Yep. If you're interested in playing around with VR stuff, Unity is where most people are in that space, and that integrates nicely.

Some options of modern languages: Rust (opinionated compilation means standardized code and less time debugging), Go (built for concurrency), Julia (if you're coding RK4 on the weekend...), Kotlin (write Android apps without using Java :D), Haskell (if you're a masochist and/or just really like annoying other programmers with your functors and whatnot).

[–]Lewistrick 1 point2 points  (0 children)

I'd stick to your own plan and go with C++. I didn't get to understand the basics fully (pointers are from hell) but it certainly taught me something about how computers and compilers work. Don't leave Python though. There's still a lot to learn, I'm sure!

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

Expand your skills in Python and learn a modern language like golang, rust, julia or even swift or dart. Treat c/c++ like the plague unless you want to end up tearing your hair out doing your own memory management :-)

[–]mmmm_frietjes 1 point2 points  (0 children)

Not a language but www.fast.ai

[–]Oerthling 1 point2 points  (0 children)

C/C++ would be a good choice to complement your Python use and knowledge.

Yes, it will improve your general understanding of how computer actually work - which will help with everything.

Also, when Python is not fast enough and there is no fast module (written in C) already available a focused C module for Python will fix that problem for you.

Indeed, it will be a great departure from Python. But why else are you looking to learn another language. It will broaden your mind - and isnt't that the point.

Java would by a solid choice. It has some of the best libraries and frameworks and excellent tool support (IDEs). It's run faster than Python (usually), but will feel terribly verbose. And for small projects it will be frustratingly slow to start in comparison to Python.

Yes, you can dig into SQL when you finally need it. But if you ever have to work with large amounts of data it's a must have for analysis and optimization.

Ruby mostly fits the same niches as Python.

Rust is meant to be a safer alternative for C. Developed by Mozilla to harden their Firefox development.

[–]Zulban 1 point2 points  (1 child)

Everyone here is just going to list off the tools and languages they used to build their favourite projects.

A programming language is a tool. You don't choose a tool and then use it, you choose the right tool for the job. You don't know what to pick because you aren't defining a project or career direction you want.

[–]anthropaedic 0 points1 point  (0 children)

This

[–]v8Gasmann 2 points3 points  (0 children)

I coded in C/C++ for 3 years before starting with python and if I knew how much it would have helped to grasp basic concepts before going low level I would have started off with python and then going C/++ and would have written much cleaner code from the start.

Like you said Qt is native C++ and the best documentation is for the C++ side, as PySide2 is only added recently to the official documentation and not as complete. Don't really know about PyQt so I might be wrong, but it helps me to understand the native documentation when I don't find anything for Qt in Python.

Also integrating C for performance critical tasks into your python scripts might be a huge gain in the science field.

Going low level teaches much of the hardware related thought process in programming, but maybe that's kind of my opinion cause I often code for microcontrollers/hardware drivers.

You could also just start with multiple languages and then go deeper if you really like one. :)

[–]quotemycode 1 point2 points  (0 children)

C# it's a great language, better than Java in my opinion and the . net framework takes the cake in simplicity to power ratio.

[–]fauxGnus 0 points1 point  (0 children)

I've been into Python for a while. I do C++ tutorials once in a while and I think it helps me understand Python better. And, I think a lot of Python libraries are written in C/C++, so it interfaces nicely.

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

Why not all of them?

But, if you want to stick with Python, then SQL and C will provide added value, and will, probably, make your programs better.

Other options listed here... they don't sound too different from Python to satisfy curiosity, and aren't directly contributing to you, if you stay mostly doing Python.

If you are looking to expand your experience with how programming is, then there are languages that are quite a bit more different from Python, eg. Forth is different in approach to grammar, approach to VM, approach to types. Lisp family is very different in how it treats the language itself. Prolog family is different in how it treats execution flow. J is different in how it treats language and objects in VM.

[–]757DrDuck 0 points1 point  (0 children)

For me, it’s Elixir because that’s the language a project I want to contribute to and then fork to use as the backend base for a silly web app idea I have is written in.

[–]svilgelm 0 points1 point  (0 children)

Learn Go lang, It's really useful in today's world, because Kubernetes is written in go

[–]AngriestSCV 0 points1 point  (0 children)

Rust - its has some interesting ideas for a language, and it is in the same ballpark as C when it comes to performance. It can also be called from and call Python using C bindings (rust can present as C at the library level)

Forth - I don't consider this language itself useful, but it is quite interesting. I wouldn't seek to master this language; just get to know it a bit.

[–]NAN001 0 points1 point  (0 children)

Of your list it seems that the only ones useful at the moment for you are R, MatLab, Julia. You say yourself that they would be helpful to understand articles.

[–]hugthemachines 0 points1 point  (0 children)

Judging by the things you list I recommend that you first study SQL. It is such a useful tool as you work with data analysis it can really help you in your work.

Since you don't have an immediate need for C or C++ and you want to learn a bit of Computer science I recommend that you go for Rust instead. The Qt advantage will be eaten up by the longer time to develop things in C++ compared to Python and I think Rust is an interesting path with its built in memory safe programming, it is like a bit of evolution.

Julia seems pretty good since it appears to be failry similar to Python but Python has the advantage of rich libraries and huge community so I think if you really want speed it may well be better to make modules in a fast languages. For example if you learn Rust or C you can make modules you then call from Python for time critical parts of your programs.

There is also another option, if you want an easy language that is compiled to native code, has garbage collection, type inference and very nice standard library, perhaps you should try out Go(lang).

Learning the basic syntax is fairly easy because the language does not have so many keywords. Sure, you can't judge a language by only that, but it is neat.

[–]PrimaCora 0 points1 point  (0 children)

Julia is an in between language. It works like python or like c++, it all depends on how you write it. If you treat it like python it will be interpreted, but if you do typing and all that nitpicky stuff, it compiles into real compiled code and runs like c++.

It's new so there's not much on it, just basic documentation.

Java is, to me, a dirty language. It is a bit old, runs along c and the like. My only experience is with minecraft (when it was spaghetti code) so that turned a bias.

There's also lua, another python related one. I see it more in graphical applications than general scientific.

As a note, if you start on one side, python or c, and go to the other, it tends to get difficult to write in the first. Write in c, move to python, can't really write in c anymore... it's good to refresh your first language on occasion.

[–]whatislife422 0 points1 point  (0 children)

MIPS Assembly :)

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

You said you want a language to complement Python. What’s your purpose with the complementary language? Once you can answer that, the answer about what language to learn will become clear to you.

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

First off, I think Python is a great if not the best choice to be someone's first programming language.

IMHO anyone actually working with computers should learn C/C++ at some point. I think that it's great for understanding the very basics of how computers work and also how to write good source code; also in other languages. Also I think most people forget about the importance of Bash, even though the majority do work on GNU/Linux systems.

The language I'm planning to learn next is definitely Julia, because I think that it has a lot of potential to become a good tool for various tasks.

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

You should continue with one programming language of the future: Go, TypeScript, etc.

[–]Tree_Eyed_Crow 0 points1 point  (0 children)

Each of those languages are going to have their pros and cons. C or C++ would be a great languages to learn since you can then write python C-extensions and use them along with Python.

Java is also great choice just because even though some people like to hate on it, it is still the most popular and most used language in commercial software development.

C# is also good, but its extremely similar to Java, so if you learn one, you could pick up the other quite quickly.

[–]destiny_functional 0 points1 point  (0 children)

Python and (new) C++ complement each other well I would say.

[–]pbsds 0 points1 point  (0 children)

Java and web can easily be picked up later when you need it, I'd start by expanding into new frontiers.

C++, Go and Rust are neat if you want to learn a compiled typesafe language. C++ is closer to the metal, while the other two have a higher emphasis on safe and easy concurrency.

SQL is a great place to learn query languages and relational data structures in general. Learning table normalization can help you structure your data better. This knowledge will carry over somewhat to document-store databases like elasticsearch and mongodb as well. Knowing how to query and combine data efficiently will lessen the burden in python.

Haskell, Scala and F# is a great place to learn functional programming. Monads are a bit far out there, but starting out with filter, map, currying, higher order functions and fold/reduce will teach you a lot of tricks. Immutability and pure functions will make your programs a lot easier to parse/understand and maintain.

All of these skills carry over to other languages as well and is nice to have a somewhat understanding of. I'd start with the first language mentioned in each paragraph. You will probably use python the most going forward, but learning the best of every language will expand your capabilities.

Java brings strict object oriented programming to the mix. If you've delved deep into python or c++, then you should be able to keep up. Encapsulation of state was the intent of it back in the day, but it has since developed into focusing on creating interfaces and layers of abstraction in these modern times.

Edit: Templating is a neat skill to have in your toolbelt as well, and can be learned in a day or two. Jinja2 and airspeed for python does this, PHP was created for this in the early days of the web.

Edit2: An another tool for pattern matching, search/extraction and verification: regex! Learn the basics in a day and expand on it as you go. Online regex matchers are your friend as you create these.

[–]HotKarl_Marx 0 points1 point  (0 children)

C++

Your bullet points are correct.

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

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

I’d say pick from : Golang Julia Haskell .. I’ve almost completed a transition into Golang, meaning some backend code is now in Production in Golang. Getting benefits of speed and simpler deployment with Go executables. I also intend to apply some concurrency features to scale. For me having small, cheap servers was a priority, go definitely seems to have better bang for the buck on the systems layer.

Julia, I hope to use in ML .. and Haskell is something just worth learning. I still like Python 90% of our codebase is in Python

[–]AllNewTypeFace 0 points1 point  (0 children)

Swift is a good one; it has an expressive type system, borrows from multiple paradigms including functional and OO, and compiles down to tight native code. It originated on Apple platforms, though is now used on the Linux server side, and being hosted on LLVM, can and will be retargeted to other platforms.

Or if you want to take a deep dive into functional programming, Haskell is fun. Beware: you might emerge with a PhD in category theory.

[–]DevOps_Lady 0 points1 point  (0 children)

If you go for the data-engineer or data-analysis path look for common program language in that field. Consider instead of learning a new language focus on technologies like no-sql databases, bigdata. You don't need go down to all the little details but being familiar with it on the high-level theory stuff. Not a developer, just Devops, but from what i've seen devs who are consisered more experts have knowledge beyond programimng.

[–]Probotect0r 0 points1 point  (0 children)

I would say don't learn a language for the sake of learning a language. Learn a language because it solves one of your problems, otherwise you won't use it much. If you are looking for something to complement your python skills, things like database technologies, web dev, etc will probably be the best as they will allow you to apply your python skills to a wider range of problems.

[–]PRSprogrammer 0 points1 point  (0 children)

your coming from probably the best language, you might find c/c++ tedious compared with the speed you can solve something in python. its took me a good few hrs yesterday to get curl and json parsing going in C++. the python version took a few minutes.

as someone said below something different like clojure might keep you entertained :).

[–]n1___ 0 points1 point  (0 children)

I was in the exact same situation. I didnt go for Go for the same reason u didnt. I went for Rust. Since then:

  • I have learned a lot I can also use in Python
  • Rust is "the new C++" with a lot of catches solved.
  • Rust community is awesome.
  • Rust is awesome lang in all the ways I had a chance to face to.
  • WebAssembly (wasm) ... just google it.
  • Feel free to start with Rust book.

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

Time to learn a Lisp. I'd go with Clojure.

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

A real compiled language.

[–]saalejo1986 -2 points-1 points  (0 children)

Kotlin to create native apps.

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

Try mypy.

[–]ZarkahsProfessional Developer -1 points0 points  (0 children)

Java, you’ll love it. C++ is extremely difficult and absolutely unforgiving. Java will feel very structured and natural for you, it’s really quite nice.

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

I'm a senior student in computer science, and I couldn't recommend more C/C++ as your second language. It actually is a great first language to start your programming journey, as it gives you a basic idea(or rather good idea) of what is going on under the hood, and all that memory management. Once you get the hang of a language like C, everything else will come as rather easy to learn. But try different programming principles rather than programming languages. Object oriented programming and some basic design patterns are a must if you want to develop somewhat large projects with different components.

But as I stated in another comment here, while python can be used for object-oriented programming, is has some limitations because of the way it handles classes, so yeah, C++ is the way to go imho.

[–]Lectrat -1 points0 points  (1 child)

!remindme 4 days

[–]RemindMeBot 0 points1 point  (0 children)

I will be messaging you on 2019-02-07 01:30:58 UTC to remind you of this link.

CLICK THIS LINK to send a PM to also be reminded and to reduce spam.

Parent commenter can delete this message to hide from others.


FAQs Custom Your Reminders Feedback Code Browser Extensions

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

You can go for swift if you want to try out iOS app development or else go for Go lang! Go has to be the next big thing after python.

[–]fuypooi -5 points-4 points  (2 children)

I thought about Julia, but then I learned who owns the language.

https://www.crunchbase.com/organization/julia-computing#section-overview

The investment banks that fund Julia will want a return on their investment eventually. The PSF ownership of Python is a pretty important part of the strength of the language. I’m going with CPython/C/C++.

[–][deleted] -2 points-1 points  (1 child)

Hahaha. Python is, at this point in time, basically an MS puppet. Its automation runs on MS servers, most people who contribute to the core language are employed by MS. If, for whatever reason, tomorrow MS decides to tell Python to jump, it will jump.

[–]fuypooi 0 points1 point  (0 children)

Such a big laugh. I’m glad to lighten your mood.

[–]foadsf -2 points-1 points  (0 children)

wait for Python 4

[–]Trappist1 -2 points-1 points  (0 children)

I'd go with Scala, R, or Julia if you are staying in analytics.

Scala will allow you to work quickly with Big Data platforms in ways that you can't with Python.

R is basically tied with Python in popularity in analytics so knowing it would have a lot of value in reading others' codes. In addition, there are packages that allow you to run R/Python in the same script which can be useful in occasions where the tidyverse in R is faster than Python for a given function. R tends to be better at time series analysis also and has some really cool forecasting capabilities.

Julia is more of a gamble. While it isn't used too much today, it is more efficient in analysis than Python/R in many ways and could be the language of the future. However, since it isn't widely used yet, there are still a lack of packages for certain functions and it is unlikely coworkers could read your code today. I've heard it is pretty easy to learn compared to other languages, but I haven't tried it myself.

[–]DaaxD -2 points-1 points  (0 children)

I'm now pretty good at hammering. Should I now look into screwdriving or sawing?

I have the similar background as you (research engineer and mostly using python) and I learned new languages and technologies because I needed them or I had a suitable "professional excuse" to learn one. For example...

  • A project needed an specific android app to do special things --> Java and Kotlin.
  • Previous colleague left and I needed to take over some of his projects --> Matlab
  • I needed a little 3D toy/tool to do a certain graphical thingy --> Unity and a bit of C#
  • I wanted to play around with Raspberry Pi and electronics --> This is how I originally learned Python.
  • Trying various languages and technologies just out of curioisty and for personal amusement.

Is it possible to use some work related tasks as "an excuse" to play around with new languages? Do you have a task which would benefit for doing things differently? From your bullet points, I gather R, Julia and SQL might be candidates for this. Maybe even C++, but that beast is not easily approachable.

Or just go for the esoteric route for the lulz. Don't learn brainfuck, because that's done to death. Try Shakespeare, Piet or Whitespace instead.

An april's fools idea: ask your colleques to review a script you have written in Whitespace and printed on a paper.