Study the code of software you like that you can found for example on CodeProject, GitHub, GitLab, SourceForge, etc.
Try to make similar software and adapt them, without plagiarizing outside of personal learning, like a notepad, a calculator, a file explorer, a bank manager... or a game.
Write code, don't stop to write.
And above all, read and re-read books.
Personally, I like Wrox (Wiley) books, they are very good: do not hesitate to read even old books if newer version not available.
Online course are great too, but they don't replace books and source code or professional training.
To be able to understand advanced and in depth subjects related to programming and the nature of computers, we must go to Assembly, not only IL, but native Assembly and machine code.
A special mention for these
- Beginning Visual C# 2008 Programming : start here, with this 2008 version, lastests are a little less good but cover new things while throwed out some.
- Beginning C# 2005 Databases : start here to learn ADO.NET databases and data bindings step-by-step using WinForms, this book is unique.
- Component-based development with Visual C# : for advanced front-end and back-end development, as well as frameworks, a must have.
- Dive into Design Patterns : a clean initiation as simple as it is expert and easy to understand on the whole of the OOP.
Some other
- Professional C# 7 and .Net Core 2.0 (Christian Nagel)
- Professional Visual Studio 2015 as vol I and 2017 as vol II (Bruce Johnson)
- Professional .NET 2.0 Generics (Tod Golding)
- Professional ADO.NET 3.5 with LINQ and Entity Framework (Roger Jennings)
- Professional Refactoring in C# & ASP.NET (Danijel Arsenovski)
- C# Design and Development Expert One on One (John Paul Mueller)
- C# 3.0 Cookbook (Jay Hilyard)
- C# 4.0 How-To (Ben Watson)
- Effective C# (Bill Wagner)
- More Effective C# (Bill Wagner)
- Code Complete (Steve McConnell)
- The Software Craftsman (Sandro Mancuso)
- Beginning Software Engineering (Rod Stephens)
Robert C. Martin
- Agile principles, patterns and practices in C#
- The Clean Coder
- Clean Code
- Clean Architecture
- Clean Agile
Fundamentals
- OOP Basic Principles
- C# Tutorial Level 0
- C# Tutorial Level 1
- C# Tutorial Level 2
- C# Tutorial Level 3
- C# Tutorial Level 4
- C# Documentation
- .NET Framework and .NET Core
- .NET Framework & .NET Core & .NET Standard & Future .NET
LINQ
- LINQ Made Easy
- LINQ Tutorial 1
- LINQ Tutorial 2
- Language Integrated Query
- Work with Language-Integrated Query
- Deferred vs Immediate Query Execution in LINQ
Generics
Naming
- C# Naming Conventions
- C# Coding Standards and Naming Conventions
- C# Coding Conventions (C# Programming Guide)
- Pragmatic Database Schema Naming Conventions, Practices, and Patterns
- Database Naming Standards
Commenting
- Putting comments in code: the good, the bad, and the ugly
- What Makes a Good Code Comment
- Comment (computer programming)
Advanced
- Upcasting and downcasting
- Upcast And Downcast Basics
- Understand 3-Tier Architecture
- N-Tier/(Layer) Architecture
- Related resources for DataGridView
- C# ZetCode
- C# Functionx.com
- Threading in C#
- .NET OpCodes Class
Others
UML
- UML Tutotrial
- UML Class Diagrams Reference
- UML Class Relationships
- UML Association vs Aggregation vs Composition
- The Unified Modeling Language Reference Manual
.NET Framework Source
Computers and Assembly
- Computer Fundamentals Tutorial
- Assembly Programming Tutorial
- Operating System Tutorial
- Operating System Concepts Book
- .NET via CLR
- MSIL Programming 1
- MSIL Programming 2
- MSIL Programming
- MSIL in Depth
Intel's CPU Developers Manuals
- 8086 to i486 Instructions Set
- 80486 Programmer's Reference Manual 1990
- x86 Developer’s Manual Volume 1: Basic Architecture 1997
- x86 Developer’s Manual Volume 2: Instruction Set Reference 1997
- x86 Developer’s Manual Volume 3: System Programming Guide 1997
- Intel® 64 and IA-32 Architectures Software Developer Manuals
Bibliography