this post was submitted on 13 Jul 2023
15 points (100.0% liked)

Learn Programming

1635 readers
1 users here now

Posting Etiquette

  1. Ask the main part of your question in the title. This should be concise but informative.

  2. Provide everything up front. Don't make people fish for more details in the comments. Provide background information and examples.

  3. Be present for follow up questions. Don't ask for help and run away. Stick around to answer questions and provide more details.

  4. Ask about the problem you're trying to solve. Don't focus too much on debugging your exact solution, as you may be going down the wrong path. Include as much information as you can about what you ultimately are trying to achieve. See more on this here: https://xyproblem.info/

Icon base by Delapouite under CC BY 3.0 with modifications to add a gradient

founded 1 year ago
MODERATORS
 

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?

all 40 comments
sorted by: hot top controversial new old
[–] canpolat 13 points 1 year ago* (last edited 1 year ago) (1 children)

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.

[–] [email protected] 2 points 1 year ago (1 children)

This was really informative, thank you for taking your time!

[–] canpolat 3 points 1 year ago* (last edited 1 year ago)

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 :)

[–] nibblebit 6 points 1 year ago (1 children)

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!

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago)

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.

[–] russmatney 6 points 1 year ago

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.

[–] graham 6 points 1 year ago (1 children)

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.

[–] [email protected] 2 points 1 year ago (1 children)

Never wrapped my head around dot net. What can I do with it? I don't see a lot of projects with it.

[–] graham 3 points 1 year ago

Primarily cross platform websites and applications.

A great open source .NET project is Jellyfin.

Also, a fun fact is StackOverflow uses .NET :)

[–] [email protected] 5 points 1 year ago (2 children)

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.

[–] Hexarei 4 points 1 year ago

Rust is also in the Linux kernel, I'd say it's pretty popular at this point

[–] [email protected] 2 points 1 year ago (1 children)

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?

[–] TastyIron 3 points 1 year ago

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.

[–] coloredgrayscale 4 points 1 year ago

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)

[–] Sparrow_1029 4 points 1 year ago (1 children)

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.

[–] [email protected] 1 points 1 year ago (1 children)

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!

[–] Sparrow_1029 3 points 1 year ago (1 children)

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!

[–] [email protected] 1 points 1 year ago

Thanks for taking your time! I'll check them out.

[–] philm 3 points 1 year ago

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).

[–] bengineerdavis 3 points 1 year ago

Rust or C would be lower level languages that integrate well with Python. Or, could go into something weird like Erlang or Elixir.

[–] wedesoft 3 points 1 year ago (1 children)

C if you want to do low-level programming. Clojure if you want to do high-level programming.

[–] [email protected] 1 points 1 year ago (3 children)

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!

[–] [email protected] 3 points 1 year ago

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.

[–] UlrikHD 3 points 1 year ago

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.

[–] wedesoft 2 points 1 year ago

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.

[–] wyrmroot 3 points 1 year ago

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.

[–] Blackthorn 2 points 1 year ago

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!

[–] maxamillion 1 points 1 year ago

JS, Python, Go, and Rust ... if you have even three of those covered you'll be in great shape.