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
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
learn java, way more material for that, but conceptionally very similar to c#. I suggest a book like “Head first Java”.
after that c# will be much easier to grasp.
I considered saying the same thing, but C# has been around almost as long as Java at this point, and I believe it’s commonly used for teaching, so I have a hard time believing there’s a shortage of learning resources. Starting with Java seems like a waste of time if your goal is to learn C#, because you can learn the concepts equally well in either language, but if OP starts with Java they’ll end up spending a lot of time unlearning Java quirks and APIs while learning the equivalent stuff for C#.
Not only this, but C# has diverged enough from Java that anything but the absolute basics isn’t going to help much with C#.
Is java easier to understand than c#, for someone who only has some experience with scripting languages?
C# is like Microsoft-branded java. No real difference in the language, but some of the tooling for java is worse.
no, i don’t think there is a big difference in ‘difficulty’ between both languages.
there is just more material for java, and as i said the languages are very similar, so learing to program in java wont be a waste of time if you plan to only use c# after that, because the concepts you learned a long the way will easily carry over.
I just jumped in, start making some cool projects
With basically no knowledge? I could create a new project using chatgpt but i will not learn c# with that
With basically no knowledge?
Well yeah. You find yourself some simple project and try to build it. When you don’t know how to do something, you look it up.
Like, make a command line clock, for example. Figure out how to get the current time, and then how to print it. And after that how to make it print the time once a second.
Edit: probably the most important skill in programming is breaking the problem into smaller pieces that you can then figure out. With experience, getting stuck like this becomes much less of a problem.
That’s just basically looking up the answer. Even if i find it (which is unlikely without asking an llm), i will not learn anything from it. I tried creating a wimforms application with the same method, and eventually succeeded. But i don’t know how i did it, and i couldn’t recreate it by myself. This is the problem
I learned everything I know about c# by looking it up on Google, copy and paste is king. Just keep working with it until you can make sense out of the code you’re copying. An llm would work similar but might feed you bs, everything you’ll want to know is on stack overflow. You’re unlikely to have an original, unasked question…I never have.
That’s just basically looking up the answer. … i will not learn anything from it.
Looking up the answer is the way to do it. You’re of course supposed to pay at some attention instead of copy-pasting without using your brains. As you keep doing things, you’ll develop a rough idea of how things are done.
Even if i find it (which is unlikely without asking an llm)
But i don’t know how i did it, and i couldn’t recreate it by myself.
You mean building the thing without any reference? Except for the most basics, you’re not supposed to memorize everything by the smallest details. Imagine asking a lawyer to know the details of every single law off the top of their head.
Seriously, go build that clock.
I agree with all the advice given in this thread. I just want to add that I think you should try to avoid chatgpt (or least use it in a way it explains the problem to you without giving you the answer), as it solves trivial problems easily, and solves complex problems with bugs.
It sounds like you’d benefit from having a project in mind. I always learned programming languages by building something I wanted, or by tinkering on someone else’s project.
That could be good in the future but i struggle with the basics too. I look at source code and have absolutely no idea what it does
Code is overwhelming. Even experienced professionals hate diving in to somebody else’s code. It’s scary, poorly documented and we always think we could have done it better.
Don’t let that put you off.
A lot of us are practical learners. So like you we stare at a wall of code but struggle to comprehend it. But if you dive in and start editing, experimenting etc you’ll change the output and understand why it was written in a certain way.
Eventually once you’ve got it sussed you’ll be able to adapt a script to do what you want it. That’ll trigger the dopamine reward mechanism and you’ll be hooked like the rest of us.
It sounds like you either have not integrated ChatGPT into your life yet or you’d never think of asking a tech-tool tech-related questions.
All my code in the last year has been written up by AI. Sure, for now you still need to know what you’re doing, the code pretty much always needs adjustments, but your first draft is never farther than one LLM query away.
If you tell him what you just told us, like “I’ve spent months and all I can do is parse some values, what could I code to expand my horizon?” you will have new angles in minutes and all key lines of the code will be explained to you.
this is just horrible advice
Using AI is cheating and no teachers like it. We are ecouraged to learn entirely without any LLM or similiar. Sure, i could pull it off, when the teacher is not watching, but that’s very risky
I thought you were learning by yourself. If you have a teacher/class and you need to consult the internet for advice that probably doesn’t bode well for your teacher’s performance.
I’m not suggesting to use AI to cheat on a test or something, even with the existence of AI we should still try to build our own knowledge and understanding. But I mean if you got some homework or whatever and you feel like your understanding should already be further developed why not ask an advisor which has time for you 24/7? What counts is your own progress and nothing else. The goal isn’t to let AI do the work and be done with it but to gain an understanding which your teacher seemingly couldn’t convey to you.
People seem to be misunderstanding your question. It doesn’t sound like you are lacking educational resources to learn C# but a lack of reasons. It sounds like you have been learning by getting you’re hands dirty with foss software.
C# is a sort of “enterprise-grade language” like Java. It’s meant for large applications developed by one or more teams for almost exclusively commercial purposes. If you want to learn it, deeply, you’ll have to come up with an excuse to write in it. A game is probably the best choice for this. Then learning c# is learning how to make your game.
If you’re looking for open source C# software to hack on you can try anything from the *arr stack. (Sonarr, radarr, lidarr).
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
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.
When I was learning c#, I found the .Net framework tutorials available on freecodecamp to be good.
Also, using the Jetbrains Rider IDE (assuming this is for private non-commercial purposes, as per the terms of their free license) rather than VSCode or Visual Studio. VSCode is still lacking in features when it comes to c#, and Visual Studio probably makes more sense if you’re already accustomed to c# dev.
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?
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
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.
This is how I feel about music
Tim Corey on YouTube has excellent beginner C# material. I would start there.
C# was the first language I learned in school, there’s plenty of beginner resources for it on Youtube. You can also try some projects using Windows Form Applications (janky but fun) or the Unity game engine, which has tons of resources online.
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
An IDE with auto-complete would help a lot.