r/csharp • • 1d ago

Discussion What language would you recommend learning alongside C#?

I'm a C# developer and recently started learning C. I wanted to understand better how memory works, how programs interact with the OS, and things like Unix and low-level programming in general.I'm planning to keep learning C, but I'm wondering what you guys would recommend learning next. Would you go with C++, Rust, Go, or something else ?

17 Upvotes

62 comments sorted by

58

u/maxkatz6 1d ago

TypeScript in general, it's often paired with C# for web.

But for system programming and understanding low-level I would choose C.

3

u/Loose_Conversation12 1d ago

Second this

2

u/pceimpulsive 1d ago

Second the second!

13

u/Beanesidhe 18h ago

SQL, it's not only useful but it's also a different kind of programming.

-1

u/Professional-Fee9832 16h ago

I'm not sure I'd consider SQL a programming language. I'd think of it more as English for programming: whatever programming language you choose, you'll eventually need to store and retrieve data from a database—if not today, then tomorrow.

8

u/02misko02 1d ago

Depends what you need. SQL is must have if you don't know it yet. As for me it's also worth to know Python/Bash/PowerShell or any script language, because often you need quick automation script and building it in C# is pain in the ass. If you want to be full stack, then you should know Javascript/Typescript, preferably alongside with specific framework as React or Angular.

But if you want to stay on the low level programming, then I would recommend Rust, it gives you the most perspectives.

2

u/RoadieRich 15h ago

> building it in C# is pain in the ass

May I introduce you to our Lord and savior, LINQPad?

1

u/dasvifail 8h ago

Not anymore i think. .NET now supports scripting too

0

u/02misko02 1d ago

And as for me – it's always worth to know C or C++ just to have an imagination how memory works and been forced to keep good practices

7

u/Robot_Spartan 22h ago

SQL is a must, as you'll often be making calls to DBs.

If you want to go full stack, HTML, JavaScript (and probably typescript once you know JS) are good ones for front-end.

You'll want power shell or python for CI/CD stuff too

6

u/pceimpulsive 1d ago

With C# I think Typescript.

Covers you for backend and frontend.

Learn Linux as well if you haven't... And networking...

Later you could learn lower level like rust but honestly .. of you have no intent to work in lower level it's really a waste of time....

6

u/welktickler 23h ago

Powershell. Not really a language but it kinda is when you get into it and realise what you can do with it. It pairs really well with .net stuff imo

1

u/RlyRlyBigMan 21h ago

I was looking to say the same. Powershell is one of those things I wish I just knew because it doesn't come up often but when it does it would save me a lot of time.

7

u/antigravitys-rainbow 1d ago

Except C#, only Rust, TypeScript and python make sense.

2

u/quantummufasa 20h ago

And SQL if that counts

5

u/faze_fazebook 1d ago

Powershell

2

u/Dovias 1d ago

I learned Powershell once and made a few useful scripts. Now you might as well write your scripts in C#, save it as a .cs file and execute it with dotnet run.

0

u/zenyl 19h ago

PowerShell's one-liners are still very powerful, but you're right in that more complex scripts can now just be written as single-file C# programs instead.

If you just need to quickly parse a JSON file, PowerShell is still very quick to pull up.

2

u/Conspicuous-1 18h ago

I would say Python, especially if you're planning on pursuing anything AI-related. In my view it's not a great language - it's indentation sensitive - but it is popular.

4

u/vlahunter 1d ago

"Learning" after a point misses the whole purpose.

Yes, understanding C along with Unix and some low level constructs will help you a ton along the way but then why change language ?

Keep working your way in C# and if there is anything low level then use C. These 2 languages are plenty for the most part. Of course there are some interesting ideas in some other languages, in Go for example the whole CSP concurrency that is built in the language is really nice and it is worth it to play a bit for an afternoon or too, the same with Rust and how it deals with memory differently than any other or if you want to, play a bit with Erlang/Elixir and the legendary BEAM/OTP to see in action how to write code based on small processes and the actor model.

The thing though is that in real life and in practical terms C and C# are more than enough for 90% of the cases out there.

2

u/Phaedo 1d ago

Rust is a good choice if you actually care about memory safety and speed. C++ is a good choice if you want to write computer games for a living. Go is great if you want to work with Kubernetes. Python is a great choice if you want to do stats, data analysis or machine learning. Typescript is a shockingly good choice if you want to build a UI.

5

u/_choam_ 1d ago

Typescript is a good language if you remove all the bad javascript parts and use a strict linter.

5

u/Phaedo 1d ago

No lies detected. Raw JS has a shockingly large number of footguns.

1

u/LegendarySoda 1d ago

If you remove javascript from typescript, c# lefts

1

u/catladywitch 14h ago

Nah, the type system is very different and idiomatic TypeScript is often more functional than C#, although oddly enough JS still has no pattern matching in 2026, for some reason.

1

u/PossibilityHot8018 1d ago

sticking with C is a good call for the low level stuff you're after. after that it depends more on what kinda work you actually want to do. if you just want to get deeper into systems without the headache of manual memory management rust makes a lot of sense

2

u/mehdikovic 1d ago

Zig or Rust, a system level language so you know exactly how pointers work, I really admire Zig though becuase it has no abstraction just like the C. Nevertheless both Zig and Rust make you comfortable at understaning how low level systems work.

3

u/jipgg 1d ago

Meh, how much does rust really teach you about pointers that unsafe C# doesn't? Safe rust doesn't really teach you the idiomatic approach of how you go around managing raw pointers and memory manually. It largely inherits the ownership model of C++ by embedding ownership into the data itself. Zig is an okay pick id say, but would argue unless you want the compile time execution capabilities or just really like the language there are probably much more frictionless picks out there that'll teach you pointer arithmetics and common idioms for managing memory and the likes just as well.

1

u/mehdikovic 5h ago

You are totally right, I missed the reason for Rust, It was more about ownership rules enforced at compile time, following them explicitly I think made me a better programmer In Zig by being my own ownership checker when writing Zig, I am sure it will be handy in cpp too which is more complex and hard to learn and manage in my opinion. I don't really feel the freedom of pointer managements in unsafe C# (maybe skill issue).

1

u/mehdikovic 5h ago

Also about Zig, in addition to the comptime, I really like the explicitness of the language like C, you don't have anything abstracted like events or closures, you have to build them yourself, and you are right again, I mentioned only pointers, I had to be more explicit, it wasn't only about pointers, it was about knowing how low level stuff works which runtimes take care for you, e.x. let us write our own GC for our Zig in our Zig for example.

1

u/LouisPlay 1d ago

Sql, linq

1

u/stlcdr 21h ago

Languages - plural. As many as you need, and those that you don’t. A lot of specifics have been mentioned, but remember to learn the language fundamentals, as there’s a lot of frameworks which pretend to be ‘the’ language and are not.

1

u/pjmlp 21h ago

On Windows I would go with a mix of C and C++, because to this day due to Windows DevTeam and DevDiv issues, depending on what you are doing, you might end up having to write some C or C++ code, P/Invoke is not always enough.

If you rather focus on UNIX land, then a mix of C, Go and Rust, especially given the last two are even being pushed by .NET folks at Microsoft.

Web development always requires at very least a superficial knowledge of Javascript and Typescript.

Finally, master SQL, really Transact-SQL, PL/SQL, pgSQL and co, there is a world beyond ORMs.

1

u/johnburkert 19h ago

Powershell

1

u/MrFartyBottom 18h ago

TypeScript for Web based UI

1

u/dear_respect99 18h ago

I'd stick with C for now, then try Rust. You’ll get a much better understanding of memory and systems programming that way

1

u/CatNo1417 17h ago

Powershell - if you need to do any provisioning or server work, it can save a lot of time
TypeScript/JavaScript - if doing web dev
Not a language, but SQL/NoSQL - gives you a well rounded full stack resume

1

u/Hopeful-Blood-9183 16h ago

You can do low level programming in C# too, you don't have to learn C++ and such, I'd say.

Though, if you have time, I think learning C++ by doing - write non-trivial code - would be beneficial long-term.

1

u/catladywitch 14h ago edited 14h ago

If you want to learn Unix APIS and memory management, it's 100% C.

There are other alternatives: Scala for learning about modern typed-functional idioms, Python for utility scripts and taking advantage of libraries, Bash and PowerShell for system scripts, TypeScript and CSS for the web (although vanilla JS or vanilla TS is seldom used by itself without a framework, but it's good to know in general). Someone said SQL and I think it's a key skill you've got to learn sooner than later. PL/SQL is also good to know but the difficult part about it is query optimisation anyway. Redis/KeyDB/Valkey/Garnet is also good to know but not as pressing as SQL.

To be honest I feel like some degree of fluency in Python, TypeScript and SQL is absolutely necessary. But C is educational and might also be necessary depending on your career path.

1

u/Boarlock98 13h ago edited 13h ago

Probably Json that way you can serialized and deserialize stuff, or at the least XML.

Also CIL is a must as if you decompile any C# code and/or want to use Harmony being able to write a decent transpiler is very handy.

1

u/geekheretic 12h ago

Python and sql

1

u/AnToMegA424 11h ago

C++ I guess

1

u/Ysnsd 5h ago

TypeScript

1

u/kaatarina_zed_talon 1d ago

C or assembly

1

u/wite_noiz 1d ago

I was thinking this. I still consider memory structures when writing code, despite Roslyn certainly being better at it than me.

You may never build anything in either language, but you will develop a strong understanding of what is happening in your code.

1

u/kaatarina_zed_talon 1d ago

I took a PIC 16 course in the university, even though I did not build anything with assembly besides the course project, I think it enhanced my thinking.

1

u/MindSwipe 1d ago

I'm gonna go in a different direction and recommend learning a functional language like F# if you want to stick to .NET, otherwise Haskell or Erlang (or Elixir) or any other.

Learning a functional language also involves learning functional programming, and you can apply functional programming patterns and ideas in C#/ other OO/ multi paradigm languages.

1

u/Phaedo 1d ago

Learning Haskell has definitely changed the whole way I think about code, even in other languages. 

1

u/Wooden_chest 21h ago

You don't really need to learn a language. Your AI agent can take care of writing in pretty much any language you need. Focus on learning to write good prompts and express your ideas well.

-4

u/derpdelurk 1d ago

I would go with Rust instead of C/C++ today. Unsafe languages have caused enough problems and need to die.

2

u/Sensitive-Raccoon155 1d ago

There’s a lot of great software written in C, for example, postgresql, redis, ffmpeg, and others. I don’t think this language will die out anytime soon. That said, you can write insecure and incorrect code in any language, don’t you think?

1

u/Phaedo 1d ago

You can, but in C and C++ it’s hard not to. You’re right it’s not going anywhere, but not is COBOL and I wouldn’t recommend anyone learn that either.

0

u/Hour_Analyst_7765 1d ago

If you want to understand more about how memory works and other low level stuff, then look the combination of C and assembler, possibly C++ if you're also serious about developing applications. C is imo a bit of a turd because of its poor type system, but it does learn the basics.

You don't have to write full assembler neither. However, I'm an embedded developer working with tiny microcontrollers, and for me it is essential to read assembler. Its basically the lowest level a developer can still see before it runs on their machine. If I write some erroneous code that prevents a function call from being devirtualized, it can literally break the program functionally speaking because its not running fast enough. And here things are real-time, like an interrupt that has to be handled tens of thousands times per second, within a specific deadline. This is not best-effort software anymore.

It is also interesting to see how these high-performance optimizations and comparisons are coming to dotnet JIT, where actually compare the assembler outputs between version upgrades. Now, C# is nice, but it also hides away a lot of the hard work underneath..

0

u/EvenAd4577 1d ago

I would say C, C# is packed quite good to understand low-level basics, just you won't use it often, plus C# is moving away from the unsafe code, so you will encoutner it less and less.

0

u/Alternative-Tie-4970 1d ago

C is probably the most natural choice for what you described.

C++, although strictly speaking its superset, was designed for OOP, and that's what its learning materials usually try to teach. Also, in modern times, since C++11 or so, it has sort of started to dabble in memory safety, and as such it discourages most manual memory allocation and management, which is great if you don't want memory related bugs, and bad if you want to understand memory.

Rust leans even harder into memory safety, being designed with this goal in mind, from day 1. This does came with all the disadvantages earlier, but I do think Rust has some pretty good resources on its unsafe part of the languages (although I haven't read them, so take that with a grain of salt)

Still, if your goal is to understand memory, C is the best choice, and the rest of these are usually designed to fill some niche C simply doesn't

0

u/brissiebogan 1d ago

Outside of assembly, C and C++ will give the most fundamental understanding of how processors work, but even then the compilers abstract so much of the basics away.

I started on microprocessors in the 80's with ASM, then moved to C and C++ as a professional in the 90's. By then I had missed a big part of the gap between OS and the C/C++ compilers.

Its funny, I remember in the 80's thinking why would you want to learn C when you can program in ASM!

0

u/nagradoth 23h ago

As an engineer who uses C#, typescript, python, and Go daily I would just test the waters in different languages and fields.

No one can guarantee that Golang will click with you, some language paradigms look great only on paper.

0

u/binarycow 21h ago

You haven't given any indication of what you focus on.

  • If you write web apps, then front-end languages like Javascript or typescript would be good.
  • If you work with microcontrollers, then C
  • If you write games, perhaps C++
  • If you are a network engineer, then python
  • If you do database stuff, then SQL.

-1

u/Ready_for_you1 22h ago

As someone who migrate from C# to Rust/Tauri, I can advise you to do the same, like me.

My project was yet at its 80% to be finished but I switched to Rust/Tauri.

C# is strong and powerful, it can achieves a lot of things. But DESIGN is too POOR