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

  • Kresten
    link
    fedilink
    16 months ago

    I just jumped in, start making some cool projects

    • @[email protected]OP
      link
      fedilink
      English
      16 months ago

      With basically no knowledge? I could create a new project using chatgpt but i will not learn c# with that

      • Mark with a Z
        link
        fedilink
        5
        edit-2
        6 months ago

        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.

        • @[email protected]OP
          link
          fedilink
          English
          16 months ago

          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

          • Mark with a Z
            link
            fedilink
            76 months ago

            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.

            • Kresten
              link
              fedilink
              English
              26 months ago

              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.

          • @[email protected]
            link
            fedilink
            36 months ago

            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.

  • @[email protected]
    link
    fedilink
    16 months ago

    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.

    • @[email protected]OP
      link
      fedilink
      English
      2
      edit-2
      6 months ago

      Is java easier to understand than c#, for someone who only has some experience with scripting languages?

      • @[email protected]
        link
        fedilink
        26 months ago

        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.

      • @[email protected]
        link
        fedilink
        16 months ago

        I personally find Java easier in the sense you have to get things done with pretty simple tools, while C# you have 10 different options for a problem.

        Also makes it easier when looking at other people’s code since everyone uses the same basic tools.

      • Mark with a Z
        link
        fedilink
        46 months ago

        C# is like Microsoft-branded java. No real difference in the language, but some of the tooling for java is worse.

    • @[email protected]
      link
      fedilink
      English
      8
      edit-2
      6 months ago

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

      • TehPers
        link
        fedilink
        English
        26 months ago

        Not only this, but C# has diverged enough from Java that anything but the absolute basics isn’t going to help much with C#.

  • @[email protected]
    link
    fedilink
    166 months ago

    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.

    • @[email protected]OP
      link
      fedilink
      English
      56 months ago

      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

      • @[email protected]
        link
        fedilink
        126 months ago

        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.

        • Chris
          link
          fedilink
          English
          16 months ago

          The comment above stands on its own. Code can be overwhelming - start by going through an existing program and write a comment for every single line - describing exactly what each line does. You’ll pick it up faster than you think.

      • @[email protected]
        link
        fedilink
        16 months ago

        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.

        • @[email protected]OP
          link
          fedilink
          English
          2
          edit-2
          6 months ago

          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

          • @[email protected]
            link
            fedilink
            26 months ago

            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.

            • @[email protected]OP
              link
              fedilink
              English
              16 months ago

              Ah ok, i understand. I sometimes ask AI to explain it, i try to memorize the explaination and write it

  • @[email protected]
    link
    fedilink
    46 months ago

    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.

  • @[email protected]
    link
    fedilink
    46 months ago

    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.

  • @[email protected]
    link
    fedilink
    6
    edit-2
    6 months ago

    I found C# to pretty much be python just with strict types and semicolons. Jumped right into it really on my first job and it worked out pretty fine, granted I got to orient myself in the existing project where I started.

    You are perhaps already familiar, but some things stand out like public/private annotations and other class related things like interfaces which work to create a more organized and controlled use compared to pythons “we are all consenting adults” approach were nothing ever really truly blocked from you. It depends a little on what you want to do/use it for, there’s frameworks and different uses like WPF / .NET for the frontend.

    While it may be too basic for you, ZetCode was useful for me back when learning PyQt in python, so you might find some use with the C# intro: https://zetcode.com/all/#csharp

    • @[email protected]OP
      link
      fedilink
      English
      16 months ago

      You propably don’t know how bad i’m in C#. Basic console apps are giving me trouble. I think it is very different from python. Like nothing is the same, at all

      • @[email protected]
        link
        fedilink
        46 months ago

        I sure don’t sound helpful saying this, but it’s mostly about finding the equivalent to the python action/types, and typing them out when making functions and variables. Though 99% of the time, you are completely fine defining variables as var to avoid excessive typing.

        I assume you dealt a bit with classes in python, if not then you’re doing double time with both changing language and learning object oriented classes at the same time.

        If there is any specific I can try to give some clarity since I also came from Python to C#.

          • @[email protected]
            link
            fedilink
            16 months ago

            Then you have a bit more to do yeah, you should look into object oriented programming and classes. Classes are pretty much everywhere in C#. At the beginner level they aren’t as bad as they seem but you need to understand it’s basics. The guide I linked in another comment also has short introduction to using a class for example.

  • @[email protected]
    link
    fedilink
    26 months ago

    My first projects were super janky gui stuff that was ported over from Java (very similar syntax, but connected with the visual studio built-in gui editor) and improved to a proper “c#” style using resharper (a jetbrains tool that boosts the capabilities of visual studio) Nowadays you can get a free version of Rider that will include those style tools, so I’d recommend that. But if you use Visual Studio, you can create a Winforms project which can let you drag components to make UI and easily assign code to events. If you are used to raw HTML webpage creation, you might be able to get away with using something like WPF or (cross platform) Avalonia to make a UI, but these are a bit more intense since they use something called the Model-View-Viewmodel framework. It needs you to know how to ‘bind’ variables to events using the observable class, which can be tricky the first few times you use it. I’d look into picking a simple project where you can learn how to use classes effectively (C# is based around Object Oriented Programming much more than bash and self-taught Python would cover). Also would recommend following some of the very simple Unity tutorials to get a handle on the syntax, such as the Unity-made Roll-a-Ball tutorials. These tutorials show the concepts for class-based design and overriding functions.

  • Rimu
    link
    fedilink
    English
    5
    edit-2
    6 months ago

    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.

  • @[email protected]
    link
    fedilink
    86 months ago

    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

      • @[email protected]
        link
        fedilink
        English
        76 months ago

        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.

        • @[email protected]OP
          link
          fedilink
          English
          16 months ago

          Refreshing what? I don’t have anything to refresh here. I only have experience with scripting languages, which are not object oriented at all

          • @[email protected]
            link
            fedilink
            English
            56 months ago

            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.

            • @[email protected]OP
              link
              fedilink
              English
              2
              edit-2
              6 months ago

              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

      • @[email protected]
        link
        fedilink
        5
        edit-2
        6 months ago

        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.

      • Caveman
        link
        fedilink
        46 months ago

        I wouldn’t say it’s that bad, it probably means you lack vocabulary rather than anything else.

  • @[email protected]
    link
    fedilink
    56 months ago

    Why you need or want to learn C#? I think depending on the answer we can find a good starting point on how to approach your learning because is not just about the language, also about the ecosystem.

    • @[email protected]OP
      link
      fedilink
      English
      36 months ago

      Because it is required in my school. And we barely have any classes, even then, the teacher is not really good at teaching it. He thinks we will learn by copy-pasting it from the board. This is literally what we have to do in class. And for some reason, he is the principal

      • @[email protected]
        link
        fedilink
        36 months ago

        Do the other students feel the same way? It might be worth starting a study group amongst your peers to help one another out.

        Have you reached out to your teacher? they should be able to either help you catch up or steer you towards resources that better suit your pace/ learning style.

        • @[email protected]OP
          link
          fedilink
          English
          36 months ago

          Yes, they do but we are not a good community, they are not really helpful. The teacher is the principal. He barely has time to come to the lesson, i doubt he has the time and intrest to care about students who can’t understand what is going on. Plus he is not that approachable person, very strict and not that helpful

      • @[email protected]
        link
        fedilink
        16 months ago

        Ok, so if is for school, what is the context? Is a class about C#, about OOP, or programming languages, or creating a website or creating a videogame. I’ll try to cover different focuses.

        C#, if is just about the language, I’d think is a bit strange, I feel that at school level you want to relate a programming language to a more fundamental concept that you can find in other languages as well, rather than sth this specific. Anyway, things like memory management: memory allocation, value/reference, garbage collection, or things like async/await, Tasks, LINQ, polymorphism, the different types and keywords and the .NET framework are important at this level.

        C# is a multi paradigm language so you can implement stuff mainly in OOP, but also functional, imperative and others, I’m going to assume that the idea is to use it more as OOP, if you have used already OOP in Python you just need to find what are the features and constraints of C# around this compared with Python.

        A console project may help you to understand these concepts, but at the end it will depend in what you want/need to learn to focus on what kind of project is better to implement for learning. If is just the concepts in OOP in C# any simple project can help you on that, for instance you can use a Code Kata and you can add specific requirements about covering OOP concepts so you force you to learn and practice that, even if is over engineered.

        If your plan is more related to a project implementation, that’s a different story, because now you have to consider not just the building process, but also the deployment process, so not just about the language, and in this it matter less some specific stuff about the language and more about how to implement some stuff using already libraries, so is more about putting things together having in mind good practices, and also how you pack the binaries and distribute them. Other stuff, where the app will run, how do you monitor your app while is running, do you need persistence? Do you need logging, do you need security, etc.

        • @[email protected]OP
          link
          fedilink
          English
          16 months ago

          The class is: algorythms and data structures. The teacher teaches just that, instead of C#. The most we had to do with c# is copying something from the whiteboard. Yet, there will be a c# test and everybody is terrified, me included. I never used python as OOP. In python we only do reading from file and creating own functions, these are the most advanced things. I don’t understand why we have to learn 2 languages at once, even 1 is a very big task for someome who is completly new to programming, and that’s how i began, and i’m still propably. And for first i just need it to work and to understand it, nothing special

  • @[email protected]
    link
    fedilink
    English
    13
    edit-2
    6 months ago
    1. Start writing a small game in Godot using GDScript (basically Python)
    2. Use the Godot docs to read about C# alternatives to GDScript as you go, compare them and see how they differ
    3. Translate bit by bit of your game to C# using the docs
    4. Congrats, you have written a game in C#
        • @[email protected]OP
          link
          fedilink
          English
          1
          edit-2
          6 months ago

          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

    • Caveman
      link
      fedilink
      76 months ago

      That’s a waste of effort IMO C# is a bit easier imo