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?
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)
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!
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.
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.
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.
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!
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!
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.
JS, Python, Go, and Rust … if you have even three of those covered you’ll be in great shape.
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
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!
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.
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