Study Plan | Any suggestions
I just started learning C#, now I'm at the stage of consolidating OOP (Classes, polymorphism, etc.) and studying abstract classes and interfaces. I need any advice on what I can add to my training plan or what I should remove. I'm learning C# for several directions. These are mainly development and games. As a developer, I want to make applications, services, APIs, mobile, and more. I haven't decided yet. Perhaps my first project is to start making a C# bot for my discord server, although I originally planned to start with games. Thank you for your feedback!
You can also recommend any open-access resource for self-study of C#, I would be very grateful!
Here's the rest of my Stage 1:
5. Collections and Data Structures:
- Arrays, Lists, Dictionaries -
-
- Basic LINQ queries for filtering, sorting, and transforming data Stage 2 I'll write below, the limitation, sorry for the length of the text:(
- Arrays, Lists, Dictionaries -
foreach
loop for iteration
- List<T>
, Dictionary<TKey, TValue>
, Queue<T>
, Stack<T>
6. Exception Handling:
-
try
, catch
, finally
- Throwing exceptions
7. LINQ (Language Integrated Query):
- Basic LINQ queries for filtering, sorting, and transforming data Stage 2 I'll write below, the limitation, sorry for the length of the text:(
8 Replies
1. Delegates and Events:
- Understanding delegates, and their use in event handling - Lambda expressions and anonymous methods - Events and event handlers 2. Asynchronous Programming:
-
- Generic types and methods - Constraints on generics - Collections and data structures with generics (e.g.,
- Value types vs. Reference types - Garbage Collection in C# -
- Introduction to unit testing with MSTest or NUnit - Writing and running tests - Using mocking libraries (e.g., Moq) 6. Design Patterns:
- Common design patterns: Singleton, Factory, Observer, Strategy, etc. - When and how to use them
- Understanding delegates, and their use in event handling - Lambda expressions and anonymous methods - Events and event handlers 2. Asynchronous Programming:
-
async
and await
keywords
- Task
, Task<T>
, async
methods
- Handling multiple threads in C# using Thread
or Task
- Basic understanding of CancellationToken
3. Generics:
- Generic types and methods - Constraints on generics - Collections and data structures with generics (e.g.,
List<T>
, Dictionary<TKey, TValue>
)
4. Memory Management:
- Value types vs. Reference types - Garbage Collection in C# -
Dispose
and IDisposable
(for cleanup in managed/unmanaged resources)
5. Unit Testing:
- Introduction to unit testing with MSTest or NUnit - Writing and running tests - Using mocking libraries (e.g., Moq) 6. Design Patterns:
- Common design patterns: Singleton, Factory, Observer, Strategy, etc. - When and how to use them
Dependency Injection I dont think I saw it listed its a commonly use pattern
and rather than individually learning things it would also be very good if you actually go dirty into making some $projects and actually put the things you're learning to use so u can try and solve problems that use them and actually see it working etc
Collections of application ideas that anyone can solve in any programming language to improve coding skills:
https://github.com/dotnet/dotnet-console-games
https://github.com/karan/Projects
https://github.com/florinpop17/app-ideas
I'd probably move value/ref types up quite a bit, as it might cause a lot of confusion, but otherwise that seems okay. I second Leos suggestion about DI, and also suggest learning how to do settings/configuration via
Microsoft.Extensions.Configuration
as thats 1: very common, 2: extremely useful, 3: the defacto standard way to do that in .NET appsoh right not really c#
but have some spot for learning how to use git or versioning control app if u havent yet
it will save u a lot of sleepless nights
I would even go as far as saying learn it before getting into serious programming
thanks all!
it's in my step 3 at the very end, I can attach it here. I just thought it would be too much. And I still have at least six months to go before step 3, I think
Thanks a lot for the rest of the advice, at first I studied theory and practiced. I was looking for tasks, I solved them on LeetCode, recently I used ChatGpt for OOP, asking him to compose a task based on certain topics. I don't know how correct this is, but this minimal practice helps me. Although he describes the task in detail, he writes specifically what needs to be done at the code level, that is, to create such a constructor, etc. I haven't tried my hand at creating small projects yet. but I didn't know about Microsoft.Extensions.Configuration, I will definitely study it in the near future, thank you both!)
I'll attach Stage3, in case someone else wants to make comments :d
1. Working with Files and Data:
- Reading/writing to files (text, binary, JSON, XML) - Serialization and deserialization 2. Database Access:
- Introduction to SQL - Using Entity Framework Core for ORM (Object-Relational Mapping) - CRUD operations with a database 3. Building Web APIs with ASP.NET Core:
- Basics of web development with ASP.NET Core - Creating RESTful APIs - Authentication and Authorization with JWT - MVC Pattern and Dependency Injection 4. GUI Development (WPF or Windows Forms):
- Creating desktop apps with WPF (Windows Presentation Foundation) - XAML basics for UI design - Handling user input and events 5. Designing and Building Software Projects:
- Project structure (folders, files) - Dependency injection, IoC containers - Version control with Git (GitHub, GitLab)
- Reading/writing to files (text, binary, JSON, XML) - Serialization and deserialization 2. Database Access:
- Introduction to SQL - Using Entity Framework Core for ORM (Object-Relational Mapping) - CRUD operations with a database 3. Building Web APIs with ASP.NET Core:
- Basics of web development with ASP.NET Core - Creating RESTful APIs - Authentication and Authorization with JWT - MVC Pattern and Dependency Injection 4. GUI Development (WPF or Windows Forms):
- Creating desktop apps with WPF (Windows Presentation Foundation) - XAML basics for UI design - Handling user input and events 5. Designing and Building Software Projects:
- Project structure (folders, files) - Dependency injection, IoC containers - Version control with Git (GitHub, GitLab)
DO NOT use GPT for anything.
using a tool where u can't verify the veracity of facts will do more damage then help you along the way. It advised that u keep it out and just do it all manually searching and researching your self for now.
I would further split these as:
- Reading/writing to files (text, binary)
- Serialization and deserialization (JSON, XML)
and Introduction to SQL you might as well learn a bit into Ado.net
so you can understand most of the differences from it vs using an ORM
and be careful with the mistake people do the most which is creating repositories while using efcore(which already gives u repositories)
for item 4 this is a very resourceful website for the basics and how things works https://wpf-tutorial.com/
I would grade Dependency injection higher up specially before ASP.net core
because the hosting asp.net core uses already involves dependency injection
so at least having a basic concept of how it works will help u dig deeper into it
there is the pattern dependency injection and there is also the microsoft library that leverages a lot of the grunt work around it so its 2 separated things to learn
again git(not even github which is a platform that uses git) I would put these as priority at the top before u even learn how to code simple because these are life saving tools that help u not lose your code, compare it against older code and save your code in a way it has a history
so you write a feature
commit that feature
oh my code doesnt work anymore
look at the history see what was changed against what was working
oh I see this shouldn't have been changed
you fix it all working again
if u dont have a versioning control like git
then u add a feature, any older code is no lost
so you can't even look at it to compare and has to figure things out or even start from scratch
@leowest Thank you for such great feedback, I will listen to your advice