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 :)
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 :)
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.
deleted by creator
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.
deleted by creator
Just skimmed through one. He explains it quite well. I’ll save the links to try and learn it sometime next month. Thank you!
deleted by creator
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!
deleted by creator
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
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.
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).
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.
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!
What programming language you should pursue learning really depends on what you’re trying to create, what problem you are trying to solve, what career you’re pursuing, etc.
From your criteria of future proof and genuinely helpful, I would suggest COBOL! Though full disclaimer, if you look at my post history, well… clearly I have some bias here!
In all seriousness, COBOL certainly meets the criteria of being a future proof language. COBOL continually stands the test of time, whilst many other languages have been born, been used, and have died within the 64 years of COBOL’s existence. That’s because, ultimately, COBOL is great at what it does in the industries that it is used in. Furthermore, COBOL uses English-like syntax, meaning these decades old COBOL applications with varying levels of documentation are still able to be maintained since COBOL code is inherently self-documenting.
People have always joked about how COBOL is a “dead” or “dying” language. But this just… isn’t true. In the 70s C/C++ was meant to kill COBOL. In the 80s it was Pascal. In the 90s… Java. And yet here we are in 2023 and COBOL is still alive and kicking no matter how much people want us to believe that it is not. There is every reason to believe that COBOL will continue to thrive long into the future.
Is COBOL a genuinely helpful language? I’m not sure if you’re referring to it being helpful for yourself, or helpful to other people. But there is value in learning COBOL just to understand why and how the things we use in our everyday lives work, such as when we pay for something electronically. It would be very hard to go through even one day without using a COBOL application. Also, there is always a demand for programmers trained in COBOL to maintain and modernize existing systems.
I have a list of beginner COBOL resources over here if learning COBOL sounds interesting to you!
Here is some additional reading on why it is worthwhile learning COBOL:
- Micro Focus Blog: Top 10 Reasons to Learn COBOL
- The Overflow: Brush up your COBOL: Why is a 60 year old language suddenly in demand?
- CIO: Why it’s time to learn COBOL
- TechWell: Why You Should Learn COBOL
- ILoveLanguages: Why You Should Learn COBOL: The Versatile And Portable Language
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.
Sorry this reply is late! Just wanna add a bit more context now I’ve read your reply!
Most people’s understanding of what COBOL can and can’t do seems to be based on the 1985 COBOL release. And to be fair, when looking at a old legacy COBOL application, it will most likely be a COBOL 85 application.
However, COBOL has had newer releases since 1985. As of 2002, COBOL actually does have recursion. COBOL gets updated roughly every decade to include new programming concepts.
Though in practice, most companies which have COBOL applications will use some kind of dialect which may cover the features that COBOL is missing which is needed for their specific purposes. These dialects get updated much more often than the standard COBOL release. Companies will often pay the maintainers of these dialects to add features they want implemented as well.
Working with COBOL isn’t so much about writing new COBOL applications, rather it’s about modernizing existing ones. For example, reusing the existing business logic contained within COBOL programs written decades ago. Though that said I believe it is estimated that there are 5 billion new lines of COBOL still being written every year!
But certainly, knowing COBOL isn’t often a prerequisite for entry-level COBOL positions since most companies will assume that younger programmers will not have learned it, and will invest the time into training their new employees in COBOL as well as the specific dialect they use, if they use one. For me, I got my graduate position working with COBOL with no prior COBOL experience.
Nonetheless, I’m glad I managed to pique your interest, and good luck in your future learning endeavours no matter what languages you decide to pursue! If I was going to recommend a different language to learn, I’d suggest Java and C# like many other people have here in this thread. I work with C# extensively alongside COBOL. Both Java and C# are ones you’ll very likely encounter if pursuing a career in programming.
JS, Python, Go, and Rust … if you have even three of those covered you’ll be in great shape.