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

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

      • 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   ( @chris@programming.dev ) 
          link
          fedilink
          English
          12 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.

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

        •  kekmacska   ( @kekmacska@lemmy.zip ) OP
          link
          fedilink
          English
          1
          edit-2
          2 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

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

  •  masterspace   ( @masterspace@lemmy.ca ) 
    link
    fedilink
    English
    10
    edit-2
    2 months ago

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

  •  404   ( @404@lemmy.zip ) 
    link
    fedilink
    English
    8
    edit-2
    2 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#
  •  sudo   ( @sudo@programming.dev ) 
    link
    fedilink
    7
    edit-2
    2 months ago

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

  • 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

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

  •  Rimu   ( @rimu@piefed.social ) 
    link
    fedilink
    English
    4
    edit-2
    2 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.

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

  • 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

  • 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