🌍 NOW MULTILINGUAL! Interactive learning tool for C# and ASP.NET developers in English and 한국어 (Korean).
Perfect for WinForms developers transitioning to ASP.NET Core, junior developers learning fundamentals, and self-study.
[Read this in other languages: 한국어]
✅ Multilingual Support 🌍 - English and Korean (한국어)
✅ 8 Core Topics - C# fundamentals to advanced ASP.NET Core
✅ Interactive Quizzes - Test your knowledge with instant feedback
✅ Code Examples - Real-world C# and ASP.NET snippets
✅ Practice Exercises - Hands-on projects to build
✅ Progress Tracking - Save your learning journey
✅ Personalized Recommendations - Adaptive learning paths
✅ SOLID Principles - Enterprise-grade best practices
✅ Zero Dependencies - Pure Python, runs anywhere
- 🇺🇸 English - Full interface localization
- 🇰🇷 한국어 (Korean) - Complete Korean translation
Technical content (code examples, quizzes) maintained in English for accuracy. Interface fully translated.
- Variables and Data Types
- Control Flow (if, switch, loops)
- Methods and Parameters
- Classes and Objects
- Properties vs Fields
- Nullable Reference Types
- Encapsulation, Inheritance, Polymorphism
- Interfaces vs Abstract Classes
- SOLID Principles
- Design Patterns
- List, Dictionary, HashSet
- LINQ queries (Where, Select, OrderBy)
- Lambda Expressions
- IEnumerable vs IQueryable
- async and await keywords
- Task and Task
- Async Best Practices
- ConfigureAwait
- MVC Pattern
- Controllers and Actions
- Routing
- Dependency Injection
- Middleware Pipeline
- DbContext and DbSet
- Code-First vs Database-First
- LINQ to Entities
- Migrations
- Performance Optimization
- REST Principles
- HTTP Verbs (GET, POST, PUT, DELETE)
- Model Binding and Validation
- JWT Authentication
- API Versioning
- Repository Pattern
- Unit of Work Pattern
- Error Handling
- Logging (Serilog, NLog)
- Unit Testing
# Clone repository
git clone https://github.com/lexcellent/csharp-learning-companion.git
cd csharp-learning-companion
# Make executable
chmod +x learn.py
# Run
./learn.pyNo dependencies required! Pure Python 3.6+
./learn.pyLanguage Selection:
On first run, the app defaults to English. Change language anytime from the main menu (option 7).
Main Menu (English):
============================================================
C# / ASP.NET LEARNING COMPANION
============================================================
Progress: 0 topics | 0 quizzes | 0 points
============================================================
1. Browse Topics
2. Take a Quiz
3. View Code Examples
4. Practice Exercises
5. View Progress
6. Learning Path Recommendations
7. Change Language 🌍
8. Exit
메인 메뉴 (Korean):
============================================================
C# / ASP.NET 학습 도우미
============================================================
진행 상황: 0개 주제 | 0개 퀴즈 | 0점
============================================================
1. 주제 둘러보기
2. 퀴즈 풀기
3. 코드 예제 보기
4. Practice Exercises
5. View Progress
6. Learning Path Recommendations
7. Exit
1. Browse Topics
→ Select "C# Fundamentals"
→ Review key concepts
→ Mark as completed (+10 points)
2. Take a Quiz
→ Select "C# Fundamentals" quiz
→ Answer 3 questions
→ Get instant feedback
→ Pass with 70%+ to earn points
3. View Code Examples
→ Browse 15+ real-world examples
→ See SOLID principles in action
→ Learn ASP.NET Core patterns
Question 1/3:
What is the difference between 'int' and 'Int32' in C#?
1. int is a keyword, Int32 is the .NET type (they're aliases)
2. int is 32-bit, Int32 is 64-bit
3. int is faster than Int32
4. There is no difference, both are deprecated
Your answer (1-4): 1
✅ Correct!
💡 Explanation: In C#, 'int' is a keyword that aliases System.Int32.
They compile to the same IL code.
SOLID: Single Responsibility Principle
// ✅ GOOD: Separate concerns
public class UserService
{
private readonly IEmailService _emailService;
private readonly ILogger _logger;
public UserService(IEmailService emailService, ILogger logger)
{
_emailService = emailService;
_logger = logger;
}
public void CreateUser(User user)
{
// Create user logic
_emailService.SendWelcomeEmail(user);
_logger.LogActivity($"User {user.Email} created");
}
}Your progress is automatically saved to progress.json:
{
"topics_completed": ["csharp_basics", "oop"],
"quizzes_passed": ["csharp_basics"],
"total_score": 45,
"exercises_completed": 0,
"last_activity": "2026-04-05T11:40:00",
"started_date": "2026-04-05T11:40:00"
}Score System:
- Complete a topic: +10 points
- Pass a quiz: +5 points per correct answer
- 70%+ required to pass
- C# Fundamentals
- Object-Oriented Programming
- Collections and LINQ
- ASP.NET Core Fundamentals
- Async/Await and Threading
- ASP.NET Core Fundamentals
- Entity Framework Core
- RESTful Web APIs
- Best Practices & Patterns
- Advanced EF Core
- Microservices Architecture
- Real-world projects
Difficulty: Beginner
Tasks:
- Create ProductsController with [ApiController]
- Implement GET /api/products
- Implement POST /api/products
- Add model validation
- Return proper HTTP status codes
Difficulty: Intermediate
Tasks:
- Create IRepository interface
- Implement GenericRepository
- Add Unit of Work pattern
- Use dependency injection
- Write unit tests
Difficulty: Advanced
Tasks:
- Create User model and DbContext
- Implement registration endpoint
- Implement login with JWT
- Add [Authorize] attribute
- Refresh token mechanism
Transitioning from WinForms to ASP.NET Core?
| WinForms | ASP.NET Core |
|---|---|
| Event-driven (button clicks) | Request/Response (HTTP) |
| Stateful (form state) | Stateless (HTTP) |
| Windows-only | Cross-platform |
| ADO.NET | Entity Framework Core |
| Sync by default | Async by default |
✅ C# fundamentals
✅ OOP principles
✅ LINQ queries
✅ Design patterns
🆕 Middleware pipeline
🆕 Dependency injection
🆕 RESTful APIs
🆕 Async/await everywhere
🆕 Configuration system
Official Documentation:
Recommended Books:
- C# 10 in a Nutshell by Joseph Albahari
- Pro ASP.NET Core 6 by Adam Freeman
- Clean Code by Robert C. Martin
Online Courses:
- Pluralsight C# Path
- Microsoft Learn Modules
- Udemy ASP.NET Core courses
- Work through topics at your own pace
- Take quizzes to test understanding
- Review code examples for patterns
- Refresh C# fundamentals
- Practice SOLID principles
- Learn common interview questions
- Onboard junior developers
- Standardize best practices
- Share code examples
- Quick 15-minute sessions
- One topic per day
- Build consistent learning habits
- Video tutorials integration
- More quizzes (50+ questions)
- Interactive code challenges
- Community-contributed examples
- Certificate generation
- Integration with GitHub (track commits)
- Real-time code execution
- Peer learning features
The app uses a JSON-based i18n system for easy translation:
csharp-learning-companion/
├── learn.py # Main application (i18n-enabled)
├── i18n.py # Translation engine
└── locales/
├── en.json # English translations
└── ko.json # Korean translations
-
Create translation file:
cp locales/en.json locales/ja.json # Japanese example -
Translate strings:
{ "app_title": "C# / ASP.NET 学習コンパニオン", "welcome": "C# / ASP.NET 学習コンパニオンへようこそ!", ... } -
Register language in
i18n.py:SUPPORTED_LANGUAGES = { 'en': 'English', 'ko': '한국어 (Korean)', 'ja': '日本語 (Japanese)' # Add here }
-
Test and submit PR!
- UI elements: Fully translate (menus, prompts, feedback)
- Technical content: Keep in English for accuracy
- Code examples
- Quiz questions
- Programming terms (MVC, LINQ, async/await)
- Hybrid approach: Korean UI + English technical terms works well
Contributions welcome! Add:
- New languages (Japanese, Spanish, Chinese, etc.)
- New topics
- Quiz questions
- Code examples
- Practice exercises
Translation Contributors:
- 🇰🇷 Korean: lexcellent
MIT License
lexcellent - Enterprise WinForms developer learning ASP.NET Core
Learn daily. Code confidently. Build better. 🎓