Just a kid with a computer here. I am familiar and have reached a reasonable level of fluency with javascript and python, with typescript being a somewhat satisfying switch I made.
It’s been 4 years, I haven’t touched another language. I wanna study something future proof and genuinely helpful. The reason I never went beyond js and py was because I already had everything I needed, I could make anything I wanted. I really want to dip my toes in the strong programming waters.
Can you suggest a language?
C# is what I use at my day job and I think it’s a very good language. It’s feature rich (some people make fun of it for the fact the language team keeps adding new features). If you are familiar with Python and Typescript, that means you are reasonably familiar with object-oriented design. So, depending how you look at it, it may be very rewarding (since you will be able to quickly build on things you already know) or boring (since conceptually you will be mostly doing OOD). If you are interested in this path, Kotlin may be another interesting language which looks quite similar to C#.
Functional programming is all the rage now. So, if you want a real challenge that will help your programming skills no matter what, you may want to start looking into a language in this family. Haskell and F# come to mind. But there are many others.
Rust is also very trendy. In some instances it’s replacing C and C++. It makes one think about lower level details of software. It’s also a good language to learn if you want to be familiar with WASM. So, it may be an interesting challenge to take. Lemmy is written in Rust, so you may as well contribute to the platform. There is a lot to be done :)
If you don’t already feel proficient in SQL, that would be an important skill to obtain along the way. Databases aren’t going anywhere and it’s a whole different world.
That said, you may want to focus on general things like design patterns and development methodologies (TDD, etc.) to broaden your horizons. Writing code is one thing. Writing high quality code with few bugs is a difficult thing to do and a great skill that only comes when one understands the best practices of software engineering.
Hopefully this helps. Good luck with your endeavors.
This was really informative, thank you for taking your time!
No problem. In another comment I saw that you said you “[n]ever wrapped [your] head around dot net”. If that’s the case, I would suggest you looking into it (or something similar) before going into the more advanced (functional programming, C/C++/Rust) route. You can try to implement a backend in C# to one of your projects and see how .NET works (BTW you need to be looking at .NET Core, not the older .NET Framework stuff. Anything after .NET 5 is fine). Or you can try implementing a Lemmy/kbin clone. İn my experience, completing a project is critical to learning. Of course everybody learn in a different way, and you know you better than anyone else.
One last note: learning different languages is not really that important unless the language changes the way you think. Again, good luck :)
In my experience, learning a new language makes you much better at the languages you already know, and each one you learn is an easier challenge than the last - it helps me understand what is shared across programming vs what is a specific style (or wart) in a language I already know. So I definitely recommend exploring widely!
In general, I’d encourage you to follow your gut and curiosity - whatever you’re most interested in will end up being less effort/more fun, and likely the most/best growth for you - so, scratch that itch!
Some different options that you might take a look at:
My favorite by far is Clojure - it’s practical and minimal and can be used for everything (full-stack + scripting), and interactive programming is really nice (vs the typical write + compile/run-the-world loop). Unfortunately, learning to read/write lisps is a bit mind-bending and tooling-intensive, so expect to invest time in your tools before you can really get going with it. (Connecting to a running repl from your editor is an excellent paradigm for writing code, but it’s really on you to manage and debug the tools that support that workflow, and that’s just difficult at the beginning.)
Elixir is another modern option that’ll teach you some new patterns/paradigms, like the actor model (via OTP) and pattern matching. I’d be writing more elixir these days if I hadn’t found Clojure :)
Haskell is totally different and quite difficult, but generally worth it. It’s especially difficult to pickup without a mentor/team to learn it with. It can be very minimal and will change the way you think about functions and types (it did for me, anyway). I don’t find it to be very practical (i’ve become quite opinionated about strict types), but I know folks who do. I wrote a post about using ‘lenses’ in Haskell a few years ago, a glance at some of the code will show you how different it is from other languages: https://medium.com/@russmatney/haskell-lens-operator-onboarding-a235481e8fac
Rust is increasingly popular, and for good reason - plenty to find on this, large community, definitely not bad choice at all from the sound of your path so far.
Obligatory: Don’t learn programming languages. Learn programming problems and which languages were developed to solve these problems.
Also, you say you’ve reached a reasonable level of fluency with javascript and python. What does that mean? Having a grip on the syntax is different than being comfortable with half a dozen libraries and building an application that solves real user problems.
If you’re learning for the joy of learning that’s great! But maybe then try something completely different than the C family of languages. Try Prolog or Assembly and try to make some applications!
I appreciate your comment. I understand where you’re coming from. I love the problems on codewars. Also by fluency I mean learning how to write neater code and of course, getting a better grip on the syntax.
Assembly is an interesting pick. I played with pseudo-assembly on a game called Shenzen-IO. Really fun, though I know real assembly is far more complex. Don’t think I wanna get into that right now but I’ll definitely use it sometime this year. Haven’t heard of prolog, I’ll look into that. Thanks!
Edit: I misinterpreted what you meant by programming problems.
After having worked with python and JavaScript quite a bit, I enjoyed diving into the C#/.NET ecosystem.
If your goal is to make a career out of programming I would look at what languages are in demand in your region.
Never wrapped my head around dot net. What can I do with it? I don’t see a lot of projects with it.
Primarily cross platform websites and applications.
A great open source .NET project is Jellyfin.
Also, a fun fact is StackOverflow uses .NET :)
This won’t be a common suggestion, but I encourage you to pick up assembler as early as possible. It’s basically one-to-one with what your processor sees, and most of all, it’s actually a lot of fun to play with. In learning it, you’ll come to understand a great deal about how other languages work “under the hood”, too. HLA (“High Level Assembler”) is a decent place to start if you want some basic structures like if statements in there too.
I took a look at it. The syntax looks scary and there’s tons of words that seem simply alien. Any idea where I should start from? I haven’t toyed with programming at a level this low.
It’s not actually that bad once you know what they mean and do. I’ll look something up for you when I’m home later, but for now, I’m sure that there are a bunch of simple tutorials for it on YouTube.
If you speak Assembly, everything is open source!
Here’s a decent start: https://youtu.be/wLXIWKUWpSs?list=PLmxT2pVYo5LB5EzTPZGfFN0c2GDiSXgQe
The man uses NASM specifically, on a Linux architecture. It’s what I use when I’m doodling around with it, and he’s reasonably well articulated. I might even go through this one just to refresh my memory. If you want to use something like MASM or GASM, the changes should be pretty minimal. HLA is also a decent stepping stone to pure assembly, though it isn’t in theory a true assembler. There’s a book called “High Level Assembly Language” which serves as an excellent introduction.
There are probably better tutorials out there, too, but once you understand this, everything else will get a lot easier. Assembler is hair on a programmer’s chest. You can’t always decompile an executable; but you can always disassemble it!
If you prefer something gamified, I suggest looking up TIS-100. It’s a progressive mystery game that incorporates assembly instructions. Fun stuff.
Just skimmed through one. He explains it quite well. I’ll save the links to try and learn it sometime next month. Thank you!
Have fun!
the three letter combinations actually are acronyms or diminutives for all the normal syntax of a programming languages, if you have a cheat sheet and study a bit everyday it greatly helps. Remember that each processor has its own language also.
There is this excellent video which shows how a simple C program looks in assembly (don’t worry about it being C, the program is simple enough to be understood without C knowledge). There’s also this which does what the video shows automatically for you. Neither of these are fully sufficient to understand assembly but they are still incredibly useful resources.
Also: watch out for AT&T syntax vs Intel syntax if you’re doing x86. It took me way to long to figure this out. And as another commenter mentioned look at TIS-100, but also some other similar games (sorted from easiest to hardest, TIS being harder than all of these): Human resource machine, EXAPUNKS, Shezhen I/O, and Box-256
I’ll add it to my watchlist for next month. I wanna get started with it once I’ve tried out rust.
And I’ve played quite a bit of Shenzen-IO actually. I have a full paper book labelled and marked haha. I even made little notes to remind me how to make loops and little hacks. That’s one reason I’m considering getting into real assembly, I hope it’ll be as fun.
I’ve come across TIS-100. Looking at the steam store images made me give up before even trying haha. I wonder if it’ll torture me like Shenzhen or be a nice tutorial.
Didn’t know about the AT&T / Intel thing. Thanks!
I’d move up to a compiled language. If you want to program professionally I’d recommend C++. You could also look at rust which may end up being very popular in the future, it’s also the backbone of Lemmy.
If you have more interest in Android apps you could look at Java or Kotlin as well.
Rust is also in the Linux kernel, I’d say it’s pretty popular at this point
Rust has been on my radar for a while. I installed cargo and just never used it haha. Any docs/videos/other learning methods that you recommend in particular?
Same with me. I just started going through rust book a few days ago. I think the best thing to do is to just start.
Something with strict typing and more OOP.
Java, c#. Those would also be languages you’ll most likely end up using at a job (besides js / typescript for Web dev)
I agree with the other comments in this thread pointing you to Rust as a strongly-tyoed, compiled language to learn. It’s already popular, and only growing! I’m only average at it but hope to contribute to Lemmy’s source here soon.
Yeah I’ve been meaning to get my hands on it as well. Do you recommend any docs/videos/something else in particular? I learnt py and js by cloning a repo and dismantling things until something stopped working haha. I’d appreciate advice!
Well, a good way to start is just to go to https://www.rust-lang.org/ There they have a link to the rust book and a rustlings course which are a good way to dip your toes in.
I learn best by making and breaking stuff, so I did a bunch of Advent Of Code challenges in Rust to get used to the paradigms & syntax. If you don’t mind paying a bit, I got a lot out of these two books:
- Rust in Action by Tim McNamara
- focuses on lower-level concepts & has you build some small projects
- Hands-On-Rust by Herbert Wolverson
- focuses on developing a rogue-like terminal-based game using a Rust game engine. Great introduction, and at the end you have a working, modifiable game!
Once you are more familiar with the language, I love watching John Gjengset’s Crust of Rust YouTube channel to watch how a senior developer approaches problem solving in the language, as well as how he maintains his (numerous) open-source Rust libraries.
I hope any/all of these resources are useful to you!
Thanks for taking your time! I’ll check them out.
- Rust in Action by Tim McNamara
Rust or C would be lower level languages that integrate well with Python. Or, could go into something weird like Erlang or Elixir.
C if you want to do low-level programming. Clojure if you want to do high-level programming.
Is C not reaching obsoletion? I haven’t heard a lot about it being used anywhere. I’ve only heard of clojure before, I’ll look at that!
Those neat little python libraries that makes it go really fast is written in C. It’s a neat little trick to have up your sleeve if you want to take your python profencie to the next level.
New C standards are still being published every couple years, it’s actively maintained with new features. If you’re interested in robotics, avionics, or really low power applications you’ll find lots of C jobs.
Linux is written in C. Many native extensions are written in C. If you are able to program in Clojure and use Java native interface and C to write performance critical code, you are covered on all ends.
Rust all the way, unless there comes a better language (which I don’t believe for the next 5 years), it’ll be my language for all future projects (including frontend).
I had a similar trajectory to you in my early languages. Then I decided I wanted to have at least one more performant language under my belt so that I didn’t have to hit everything at work with the good old Python hammer. I also wanted to be able to easily ship binary packages for multiple platforms, so I wanted something compiled.
I looked at C, in which tons of my favorite small but powerful utilities were written. But there are so many niceties you can get in more modern languages. I spent a few weeks each learning Rust & Go, and found the latter much easier to work with. I felt like I was able to “think in Go” and never quite got there with Rust. I’m sure many people feel just the opposite, but that’s kind of the point. There are so many choices out there and any “mainstream” language would be fine for you to learn.
As someone else mentioned, the best thing you can do are work on your programming fundamentals which often transcend language. But if you want to put yourself in a position to have some of those fundamentals enforced, consider a strongly typed, compiled language which gives good feedback during development.
Well if you know already JS and Python, I think you are covered on the dynamically typed languages side. I would go on either a functional programming language or a statically typed one next. There are a lot of choices in both categories. Anyway, it’s also important to improve knowledge of algorithms, OSes and even computer architecture a little bit (assembly is still a good didactic tool, imho). Good luck!
JS, Python, Go, and Rust … if you have even three of those covered you’ll be in great shape.
deleted by creator
COBOL is probably the last language I expected to recieve as a suggestion, other than esolangs. I’m told COBOL doesn’t have fundamental functions like recursion and there’s really no support or libraries for it. I don’t see this being really practical in the real world.
With that being said, there are quite a few jobs for it. It’s certainly an interesting suggestion but I’m afraid I can’t really get into this without familiarizing myself with more strongly typed languages.
I dunno if this’ll really be of the same level of demand for the next decade or two but it’s certainly opened my eyes about it. I had no idea a language like that would be useful till date.
Edit: I’ve found out that there are frameworks and libraries for COBOL. Damn.
deleted by creator