I have some background in Python and Bash (this is entirely self-taught and i think the easiest language from all). I know that C# is much different, propably this is why it is hard. I’ve been learning it for more than 4 months now, and the most impressive thing i can do with some luck is to write a console application that reads 2 values from the terminal, adds them together and prints out the result. Yes, seriously. The main problem is that there are not much usable resources to learn C#. For bash, there is Linux, a shit ton of distros, even BSD, MacOS and Solaris uses it. For python, there are games and qtile window manager. For C, there is dwm. I don’t know anything like these for C#, except Codingame, but that just goes straight to the deep waters and i have no idea what to do. Is my whole approach wrong? How am i supposed to learn C#? I’m seriously not the sharpest tool in the shed, but i have a pretty good understanding of hardware, networking, security, privacy. Programming is beyond me however, except for small basic scripts
Depends how you learn. Being mindful of what your goal is helps. C# can be used for console apps, it can also be used to make ASP.Net websites, further afield you can program the Unity games engine with C#. Each of these will have “absolute beginner most basic first steps” type tutorials out there. They’ll all have some similarity as you’ll need to just learn the C# syntax one way out another, but it miles easier doing this if you’re vaguely interested in the types of apps you’re heading towards.
If all else fails, message me, I was there once, about 20 years ago…
Start with “absolute beginner” courses. Here’s one from Bob Taylor. He puts out a lot of good stuff.
Sit your self down and study it for a good bit, then build some things. https://youtu.be/0QUgvfuKvWU
For bash, there is Linux, a shit ton of distros, even BSD, MacOS and Solaris uses it. For python, there are games and qtile window manager. For C, there is dwm. I don’t know anything like these for C#, except Codingame
It seems like you find an environment that requires the language and then kinda sink-or-swim? If so then yes, your whole approach is wrong. You need a process with a lot more structure. Get a Udemy course or a book from the library.
Check out this reference (not mine): https://gist.github.com/DanielKoehler/606b022ec522a67a0cf3
The first difference that I would point out is c# use of static typing, where python is dynamic. This author is using the
var
keyword to avoid specifying a type for variables. The type is, instead infered by the code that follows the equals sign.The next main difference is the use of whitespace. Python is very whitespace aware, it uses indentation and line breaks to organize code. C# is whitespace agnostic in most cases and separates blocks of code using curly braces {…}, statements must end with a semicolon;
In C# collections are organized by how the data is accessed and whether elements can be added or removed. Arrays are initialized with a set of items and can’t be made longer, a List can be added to and can be removed. The key point is that all items in a collection are of the same type.
Complex objects (that have properties and methods) can be structs, classes, or records but they all basically do the same thing and interact in the samish way. You have to use the
new
keyword to make a new instance.Classes and records can inherit from another where as structs cannot. Properties must have a type, methods must return a type or
void
. Method parameters must be typed, when calling a method the provided parameters must be of the proper type.An interface describes requirements an implementing class, record or stuct must meet (i.e. properties and methods). You can’t make a
new
interface, it’s more of a qualification.I hope this helps some
Is it bad if i barely understand anything in this comment?
Quite bad actually, since most of this stuff is not specific to c#, and are just basic programming concepts. This leads me to believe that your python experience is “coby and paste stuff in until it looks like it works”, and you never took the time to understand what the code does.
I wouldn’t say it’s that bad, it probably means you lack vocabulary rather than anything else.
Most probably, yes. A lot of these are fundamental concepts of most modern object-oriented languages that I am familiar with. It may be worth refreshing your basic programming skills/concepts with a book you like. There are plenty available online for free in C#, Java, C++, Go, etc.
Refreshing what? I don’t have anything to refresh here. I only have experience with scripting languages, which are not object oriented at all
Python is an object oriented language.
This is going to sound harsh but… You need to take an intro to programming course.
I didn’t know what your doing in Python, but you’ve not learned to program in Python. Maybe just copy pasting or making small changes to existing stuff? Working in a specific framework? Are you writing code from scratch?
You need to understand datatypes (a concept Python tries to hide from you and imo does a disservice to novices), structures, conditional is, loops, etc. These concepts aren’t language specific.
Yes, i write from scratch in python, but only basic things. The most advanced are reading from a file and defining an own function. I’m in a programming course already
I learned it because I had to write a WPF desktop application, so you could start with WPF tutorials. I was already very familiar with Java, which is very similar, so it wasn’t too hard. Last time I used it was in Unity. You might want to find a good free online course for C# to get a good grasp of C#/Java’s style of OOP, design patterns, and all that kind of stuff.
I have a Python background and I’m learning C# right now. Unity development is done in C# if your interested in games or 3D applications. There’s a ton of resources for that kind of think out there and I find its a fun context to learn in. I’ve also had decent results recreating tutorials written for other languages using LLMs. Just start with step 1 as a premise and state the overall goal, then ask for incremental changes at each step an ask questions and for alternate solutions. Just watch out for those hallucinations.
This is how I feel about music
Tim Corey on YouTube has excellent beginner C# material. I would start there.
- Start writing a small game in Godot using GDScript (basically Python)
- Use the Godot docs to read about C# alternatives to GDScript as you go, compare them and see how they differ
- Translate bit by bit of your game to C# using the docs
- Congrats, you have written a game in C#
I learned C# from the Aurora guide book I picked up with Neverwinter Nights back in the day.
What is aurora and what is this guide book?
Aurora is the engine Neverwinter Nights ran on. The scripting system was driven by C#. The guidebook was the official “strategy guide” but for the toolset, not the game itself.
I heard Watch Dogs uses C# too. Should i start modding these games, with mods that add additional logic? I only have experience with localization and texture mods
Start with the goal to create something, be it a console app, website, web api, or game. It’s hard to just study a language abstractly and learn it. Use the Microsoft Learn documentation as reference, and look for open source .NET projects on GitHub to get different perspectives on how to build things with .NET. There is a free course on freecodecamp that will get you started by building an app, and I believe it was done in partnership with Microsoft
one of the most popular languages, used in one of the most popular game engines, has no learning resources?
Press X to doubt
Yeah but then you have to learn MATH and I’m not doing that.
Don’t learn a language unless you need to use it for something.
That’s why you’re finding it hard. If you needed to program a game, decided on Unity, and had a specific thing to do, it would be easy to figure out how to do that in C#.
Java and C# are very similar, worst case scenario learn Java, then C# will be easy.
That’s a waste of effort IMO C# is a bit easier imo
Starting with Visual Studio (not code) helps a ton. Make a simple winforms application with a button and some labels and you will start to see how it ‘starts up’ from program.cs to your form.
I did it once but needed a lot of assistance and it was very confusing