My .NET Developer Roadmap for 2023
Вставка
- Опубліковано 27 сер 2024
- Give the roadmap a star on GitHub: github.com/Elf...
Check out my courses at dometrain.com
Hello everybody I'm Nick and in this video I will show you my brand new roadmap for .NET developers for 2023. This roadmap includes everything that a .NET and C# developer should know to excel in their career in 2023.
Workshops: bit.ly/nickwor...
Don't forget to comment, like and subscribe :)
Social Media:
Follow me on GitHub: bit.ly/ChapsasG...
Follow me on Twitter: bit.ly/ChapsasT...
Connect on LinkedIn: bit.ly/ChapsasL...
Keep coding merch: keepcoding.shop
#csharp #dotnet
Extra things to consider like: learn how to use the IDE (vs studio, code) or command line efficiently, api client (postman, rest client, curl etc), db client.
Definitly an important point in my eyes, as it really can boost the productivity of a developer :)
vs studio can ruin your first impression of C#😁
(i really know few people that picked another language as their first because of a visual studio)
Glad we got Rider
True, fun tip. Find a laptop with an awful touchpad and spend a couple days coding on it without a mouse. You will learn the shortcuts and hot keys fast.
@@stefano_schmidt sometime you really have to experience a not so good one in order to appreciate the good stuffs 😅
@@NickSteffen or move the mouse to the unnatural side yours
I love how this starts with the basics and moves up to being a complete standard of everything that can help your team build, deploy, and maintain complete back end products. This isn't just a checklist of what someone new to coding should know, it's handy for senior and principal developers. I'm keeping this handy.
Super agreed
I'm honestly shocked as someone entering their second decade in this biz that a lot of junior devs lack sql knowledge. It's super useful in so many situations.
Yes , SQL/RDBMS/Postgres is very important.
SQL is so underrated as a programming language
This is a fantastic roadmap. Im embarrassed to say after two decades experience doing windows and web apps, theres a few things on this list I had never heard of. Thanks for clueing me in on what I need to add to my tool belt next.
Consider making this colorblind accessible. 1 in 12 males is colorblind and has difficulty distinguishing green from yellow. Using different stroke widths could help differentiate boxes on your chart without depending on color perception. Alternately, Google around for colorblind accessible color palettes. Great video though, and thanks for sharing this updated roadmap!
Great point, sorry for that. It's something I take for granted but I shouldn't. I will take that into account next time.
No worries! As a colorblind person I make this comment all the time ;) I just opened an issue on the GitHub and I am happy to help work toward making this roadmap accessible!
I've been devving for the past 15 years, and I must say that is a very neat and comprehensive list. Well done man.
One important thing missing in my opinion is Domain Driven Design and it's correlation with microservices.
One very important, frequently overlooked lesson is, learning the principals well enough, to know when it's ok to break them.
Hi Ali
can we connect?
I think the Liskov substitution principle is quite important and not only good to know.
I have seen a few times where a derivation is significantly different from what the base class specifies just to make it "work" and that is the beginning of the end.
Of course this is also related to the other principles that a base class or interface (interface segregation principle) must be written in such a way that you are not forced to make such detours.
Are you able to give a specific example of this?
I always struggle with the reasoning behind this principle... I don't think I've knowingly violated this principle, but I'm not an amazing developer where all my class hierarchies are perfect. Ie, I've never thrown an exception on a method because the class isn't supposed to do it (like the classic "fly" on a duck class).
This is so helpful, especially since you've compacted the roadmap. Thank you!!! Also, it would be great if you made some sub-categories for "Understand how the web works" bc it's alot of info in and of itself.
Couple of things I would add:
To the API section an Orange Carter.
To the ORMs section FluentMigrations (especially if you are using Dapper since EF has in-built migrations)
If you aren't doing strictly APIs I think learning the Post/Redirect/Get pattern is a good idea too.
One category that I think it good to know is the discriminated union options (emulators???) like OneOf or ErrorOr and/or Korikovs CSharpFunctionalExtensionsLibrary that has Maybe and Result implementations.
Absolutely agree with this. Chat GPT was a huge bonus but you really need to give it the right context and understand what you're asking it for in order to get a good answer!
And, you also need enough knowledge to identify when it is confidently wrong. I like it for brainstorming, but I can't trust it for real implementations yet.
Great video! Not sure I 100% agree with Stored Procedures and Triggers leading to bad code. These are tools that have their place and in the hands of users who know how to use them in the correct scenario/context they can be quite powerful and effective.
The problem is that there is no correct scenario because there is always a better alternative
@@nickchapsas Im also curious about this. What’s the problem of abstracting your application from the raw sql code and putting it in the sql server instead of hard coding it in your c# code with dapper, while at the same time you get a few perks of using stored procedures like security, precompilation, optimization and maintainability.
I’m legit curious about your posture on stored procedures being a “bad alternative” by nature.
@@nickchapsas Nick , make video about this topic . I want to hear your opinion.
The problem about not using store procedures is that relational databases tend to increase on complexity (more joins, more columns). Thus, store procedures perform better than ORMs on these scenarios. This may not be your case, but enterprise projects and more over legacy projects tend to have SP for retrieving data quickly
Agreed. One of our complex query process in our enterprise app require thousands line of code in a single SP. We've tried other options and SP is the better choice!@@nicolaseckell9691
Some thing I would do differently:
- .NET CLI: "Good to know" in stead of "Must know" (I've never used this, except in CI pipelines)
- Version Control: add "Azure DevOps Repositories" as "Good to know".
- EFC: Lazy loading, eager loading, explicit loading as "Good to know"
- Logging: add Nlog as "Good to know"
- Task scheduling: Quartz seems to be another popular one
- Perhaps add a section for general things like DDD and CQRS.
- Could also maybe add a section for "project management" with tools like Trello and Azure Boards.
- Maybe even a section about documentation with conventions and tools for building proper wikis.
The only comment that caught me off guard was not using Stored Procedures. I would love to hear your thoughts on that in a video. Obviously, every use case can be different but how do you manage the performance of large databases without them?
They are an absolute no-no in every company I worked for that wasn't dealing with legacy software. Maybe worth a video?
@@nickchapsas performancewise it's still (if done right) the best solution and allow fine tuning like no driver does. But it requires SQL knowledge and understanding of execution plan to make it right.
In real world companies, you ever only see stored procedures in old old old projects, and they are a pain in the but. You are much better off learning ORM's like Dapper and EntityFramework, or whatever ORM is good/popular for your language
I've experienced more pain trying to use EF than I have with stored procs to the point that I hate EF with a passion that burns hotter than a thousand suns. I've only worked for companies that used stored procs though so I would love an explanation.
The company I work for uses store procs to not put the raw SQL CRUD Operation in the code base. We have a rule that no logic is allowed in store procs unless there are massive preformance benefits. I would love to hear your thoughts on this topic.
Hi Nick, I'm a Developer for about 20 Years. In my last interviews as a Senior Developer there were questions about Stored Procedures, GraphQL, gRPC, Dependency Injection, Response Caching, MediatR. There are so many companies that use a lot of niche products and have legacy code. Especially the last company said my knowledge was not deep and wide enough. o__O Feel like an idiot.
Don't. You're never going to learn everything and every company you will work at will use a ton of tech you have no or very little experience with. If there are things that pop up everywhere, focus on that and make sure you have some sort of learning plan. Otherwise just make sure you have some level of understanding of what certain tech is and why it could be used. Like I've never used GraphQL and gRPC professionally, but I have pretty good understanding of what it is and how it can be used. It's not difficult to build that knowledge with just few hours of reading blogs, etc. Don't let 'em get in your head :)
Survivorship bias and Peters effect could take place here.
You should not take into considerations opinions coming from someone's arrogant egoism.
May be your experience makes you a Frontend heavy developer, so you don't need to go deep in backend, because you prefer to focus on things in which you are an expert.
If you don't know some technology deep it is not a problem. How you do relate with that is what actually important.
I would aware what was the problem with the interviewer if he was a team-lead and allowed an offensive behavior to people he saw in the first time - it would not become better in future.
Other sample is when you worked as developer in companies where responsibility segregation was at high level. Then you are allowed not to know how to configure CI/CD servers or even pipelines, or how to configure a specific message queue server, because you did not do it, you designed solutions and wrote code within your scope.
I hope I delivered this message clearly. Sorry, if my grammar suffers, thanks 😄
I would include Azure Functions under Task Scheduling, not sure what AWS equivalent is but likely should be there as well.
AWS has Lambda with EventBridge
In my workplace, we heavily rely on stored procedures for the system that we're interacting with, in an Oracle database. However, it was built as early as 2008, so it could simply be legacy code that we unfortunately don't have the time to get away from. Though I will say that using stored procedures for some tasks might not be too terrible, because the advantage is that you can deploy bugfixes without deploying the entire project. Would like to get some input from other systems and projects, in case this one is completely out of touch with the modern reality.
I work in a startup and we use stored procedures when we have really complex queries that require either lots of joins, or access to other databases through linked servers connections, etc. We decided to abstract that from the actual C# code and rely on them for that task. I know some devs hate on them but I guess it’s like everything in life that has its own pros and cons
That's what I would imagine stored procedures still find grounds for. Outside the database, you lose a lot of performance because of the constant querying, whereas stored procedures let you be free to perform the queries you need knowing that it'll be highly performant.
Same here; we use stored procedures becuase of the sheer number of left and inner joins for so many tables; they preform better; I just don't see how not using them would make things better; not to mention being able to tweak queries and deploy them right a way
I was about to declare the same as people here. Store procedures are quite important in enterprise environments cuz data tables are long enough to be done like that
I would add NSwag to the library's SDK API as a means of automatically generating REST client code based on the OpenAPI specification
Hi Nick! I have just seen that you started as a passionate L2 player. That's exactly what brought me to IT too! What an incredible journey, sending love from Italy, keep up the great work!!
Very suprised by your stored procedures comment.
There is not a single library (EF, NHibernate etc) that can write as performant Sql syntax as a Sql developer, especially for complex queries. To implement a large complex object can require 10+ table joins. When one understands the underlying structure of the tables (read indexes and foreign keys), it is quite simple to create sub-queries to filter data first, then using the outer query to retrieve additional non-filtering data. This allows the query optimiser to use multiple indexes on a table.
I've just come off a new project where the first decision we made was to use stored procedures as they allowed us to tune Sql performance.
I appreciate your channel doesn't really focus on Frontend (Blazor, Winforms, WPF, MAUI etc...), but do you have any plans on covering those technologies in the future?
Indirectly. There is something coming soon :)
@@nickchapsas WinUI3 😈
What I would add is the evolution of concepts like this:
Don't repeat yourself (DRY) -> Write everything twice (WET) -> Avoid hasty abstactions (AHA)
And I would add also maybe some Object Oriented Programming concepts, maybe Test driven development (TDD), Domain driven design (DDD) or even some functional programming concepts to understand purity of a function and no side effects while writing code.
Test driven development - definitely just a thing to read once, there is a good book about it, but writing tests before coding itself is nasty. If it's a startup you won't have time for this. Better write code and test it after.
Great video. Some extra items I recommend like machine specifications, apim/apigee, open api spec, source code generator, circuit breaker pattern with Polly
I would say thanks to you for your tremendous effort and in flawless explanation. Love your way of doing code and taking approach. ❤
Great video by the way. As an ex Microsoft employee I know I am showing my bias but you did not mention Azure Active Directory which fits many more use cases in the Authentication and Authorization space than Microsoft Identity. I am guessing I will have to get caught up on more of your videos to understand why you appear to avoid much of that space as I myself will be spreading my wings a bit more. Congrats on your channel's upward mobility. You are a powerhouse and I look forward to seeing where you take your brand.
Perfect! I am a mid .NET developer and this list, I believe, will help me conquer the next level.
It's definitely nice roadmap, tell you as a developer with 15 years of experience.
This is an outstanding Roadmap. I am a C# developer, in many years I have interactions with most of the topic mentioned on this roadmap.
Also please make a video on what topics in C# we have to learn and practice as a developer.
Like what topics really gonna help us to improve my coding standards and efficiency of coding & building logic faster. 🙏🙏
Hi Nick - looking forward to seeing an updated roadmap for 2024 if you're planning one soon? Be good to see some security-focused aspects included such as Github Advanced security (codeql), Sonar, or Zap etc make their way into your list :)
Late to the conversation, but I might suggest one thing missing: Python. C# is a grown-up, professional language and my favorite for development. But at the rate the industry is adding ML and IoT, I'm finding it essential to be able to work between C# and Python. Over and over in data science applications, I need to learn what has been prototyped/scripted in Python and then "engineer" it in C#. And with MicroPython, there's now a growing need for interop skills at the CPU/microprocessor boundary. I'm finding I can translate more and more of my C# structures and code to MicroPython and have shared definitions/contracts/etc.
Hey Nick! Awesome video. I would love to know more about why you think Stored Procedures lead to bad code and bad practices.
Maybe a good idea for a video?
@@nickchapsas I think so!
Having your SQL queries in stored procedures is good for performance because the database server will cache query plans and statistics for the query. But in my opinion I don't think they're worth it and that's because of version control and code maintainability. When the queries are in your code, you can track changes like you would any other code change in your git repository. Also, if the schema changes on some table (e.g. a column renamed) and you need to go and update everywhere the table is used, it's easier to just ctrl+f in your code than try to query the database to find and update the stored procedures. Also, I think it's easier in general for development when making changes to a system or building new features as the modified queries are in your application running on your computer rather than in the database, unless I suppose if you were to have your own copy of the database on your machine. Lastly, there is software out there that will help you do version control on the database itself, but never tried any as they look expensive, and rolling your own doesn't work very well (I've tried).
Edit: One more thought I had - when you're actually reading code especially if written by someone else, you'll have to go to the database and look at the stored procedure to know "what does that do/how does it work" when you see a stored procedure being executed.
SQL queries inside or outside stored procs generate identical execution plans and they are cached in the same way.
@@nickchapsas My understanding was that plans and statistics were stored/kept in the database for stored procedures, while adhoc queries are only cached in a pool and will be eventually removed from the pool after enough different queries being run - but I'm happy to be wrong. I will have to research that. In any case I'm not using them.
I hope you will do some Entity Framework video's in the future. And some Blazor. Or in a course form. I'm not a real developer but do it next to several other things. And I'm learning a ton from all video's and the courses, of which I have done them all.
I'd like to add Autofac to Dependency Injection section, because it one of the most popular DI containers in the .NET world
Hello Nick! Thank you for your really insightful video. Currently trying to relocate to Swiss where people mostly use .NET / Java Spring Boot! 🙏
as a matter of just sharing my experience, I've been using Bing since the end of 2009 and so far I still preferred instead of Google: too much ads or not the answer I was looking for.
Hi, Nick. Could you change the colors for the Must know and Good know branches? Because color-blind people and their varieties could not recognize differences. I have 3 more people with the same problems in my circle of friends. And we can't (or it is difficult to) determine its color.
If you decide to add some symbol for each - it will be extra solution)
Thanks for your videos and researches :)
Seconding this comment as I am red-green colorblind as well
Very nice video. Nice to see some alternatives to look into, never heard of Refit or ReSharp before. Always used Flurl which I think is amazing already.
Also personally would remove Stored Procedures from the list :D. I have rewritten SO many stored procedures into Dapper sql queries it's unthinkable. So much easier to handle. :)
C# is powerful when doing oo, without follow strictly Liskov substitution, easily to abuse oo inheritance.
Thank you so much for providing this awesome roadmap! :)
Seems like a fine list to be a web-focused C# developer but as a general .NET developer I'd expect some knowledge of IL and CLR internals. Also knowledge of another .NET language like F# or one of the .NET dynamic languages like IronPython.
Thank you so much for showing me what to learn! Thank you!
Thanks!
Did you skip "Streaming" Category? I was really interested in that one!
Hi, I am an experienced developer and I continue to gain more knowledge through your videos. Kindly add your courses to Udemy. My employer will pay for me to take them.
For somebody that tells me that the "no no stored procedures" and chooses "postgres" as being a better engine makes me wonder based on what the recommendation was done...
Wow! Thanks for this detailed info 😊… wish this is a PDF
Please do a video on configureawait!
Thats a great list. Its highlighted a few areas to focus on. cheers
Hey nick! excellent video! Thanks man as always you're true pro! Your videos have only one flaw and I wish u will be able to make it up. A hair in the soup thing is you not using Visual Studio:))) And I wonder where are u from? I wasn't able to determine your accent...
I am surprised you didn't say anything about micro-services, mapping and Angular. The last is front-end, but here job postings are requiring it very much.
Would be cool to add marks on side that say JR Devs pos here, then senior here. That way to give idea of what level needs what. Great video tho, thx
Any suggestions on projects to do along with this roadmap? I've already worked with some dotnet projects at work but would love to have some to practice of my own :3
I was also wondering about that. Doing a project to put in practice most of it would be great.
The part “understanding the web” should be further specified, how much networking knowledge do I need as a web developer?
Understanding basic of https communication is enough or should I understand all 7 layers of OSI properly and every common network protocol?! Would I have to be able to write and read raw network packages?! “Understanding web” is too broad
An important one if someone wants to become a *professional* developer - learn how to TALK ABOUT IT.
If you know how to do stuff but can't put it into words, not many will be able to properly appreciate your abilities and won't employ you.
Love this list, but I would have put AI as must know now. I don't mean trying to make it wriite 100+ lines, but how to use it to write small snippets of code that you don't know as well. It is more powerful than a lot of beginer devs I have known over the years. So if you are a beginer it will make you so much better.
Hey, thanks for the overall roadmap.
Can you do like "minimum" requirements in order to apply for a jr job as a .net dev ? the "absolute must have"
Awesome list thank you.
Nice roadmap! I have been watching a lot of your videos lately. Great content! :) One question regarding NoSQL databases: Did you try out RavenDB at some point?
I have. Just not good enough for the systems I'm building
@@nickchapsas That would be interesting topic for a video, I can't image which requirements you couldn't make work and IMHO it allows the most architectural freedom with (filtered) replication, ETLs, Subscriptions and even adds attachments, counters and time series support . In addition it has the best testing story of all DBs as a .NET dev 😉
@@nickchapsascurious - can you share more? Is it DB features, operation side or something else?
Awesome, Nick!
loved your Flurl pronanciation :D
Good info thank you Nick
Damm i wish to have a roadmap like this for PHP and Java.. good job !!!
You could do a video on how you start a project from clr and version control etc, once asked for a simple project demo, this wouldn't be for the project itself, more like "welcome to my crib" i have this use that yada yada, a run down from start to finish using clr since you say is important and wtv else you do
Thank you, useful for me!
Why no Autofac in DI sub-tree?
Just wondering, at which point of the roadmap would you try to apply for jobs? After completing everything?
No way hahaha you will spend 3 years to learn everything. I think you need learn Git, WEBAPI, API, Database. You should know how get a data on the database and send to the frontend, i think its the minimium to star looking for a job.
@@juanlima4277 Thank you lol i was getting overwhelm here
Developers not using chatgtp or copilot are shooting themselves in the foot. Chatgpt is a MUST KNOW. The guys who are using it is going to outperform you with ease. I haven't been coding for 5 years. I just started up again. I guarantee you I will finish a project faster than everyone commenting even the man in this video. From finding solutions to errors to simple stuff like creating a model from a json file.
You should also look into vector dbs.
I know API development, but I would like to expertise onthis based on your roadmap. What shold be the best approach for the same. I am finiding myself lost when I start learning from some videos on different platforms and ending up learning very basics and not reaching anywhere where I can b confident to attend interviews to change my Profile.
I haven't heard of half of this stuff. I guess I've got some stuff to look up. Thanks, man! PS. I'm so used to American spelling in tech that when I saw Authorisation, I was like huh....oh duh
I am currently working as a junior game developer, but I did not like the game industry. That's why I found you while doing research without going too far from C#. My question is, are we going to learn everything on this list in order? Is there a tutorial with everything on this list under one roof? What should we do at the same time that we start learning what's on this list? Thanks.
Hey Nick, Thank you for your awesome content. Could you share your thoughts on Raven Db. Do you think is it a powerful database?
I would like to disagree with Stored Procedures. In most cases you don't need them.
I Agree with 'it is not necessary' on this roadmap. Just keep in mind that it is important technique on edgecases (like Reflections in Coding). I would not say it leads to bet code - it's more like an optmization for performance.
As always there are important usecases. Let's say in a (common) scenario where you have an exisrting database (may be from an existing application, like ERP os sth. like that) an you need to freaquently need to perferm queries against it. For performance reasons you defintly want to use stored precedures.
They are better optimized and are executed much directly without the need to compiled.
FYI the Bing ChatGPT won't provide full code samples. It will only give example snippets now. If you ask for a full sample it says how its the responsibility of the developer to know how to code. So if you want a larger code sample you may want to stick with ChatGPT.
Hi Nick, Thank you for the sharing your advise. I have a question on this. As you said Stored Procedures are not must have as they are not considered to be followed as good practices, however, you mentioned Dapper ORM is a must have. But I guess Dapper uses sql stored procedures or queries to do crud operations. Shall we use Dapper ? Or Dapper has another alternative to using SQL Stored Procedures ?
@nickchapsas please can you include the resources where to learn these all skills from that much more helpful
8 years in industry at fortune 100s and I have never seen any place ever use sql server
What do they use
@@Sara-qn8bn MySQL, SQLite, postgresql, etc…
Dear which tool you have used for this tree like diagram , please share the name of that ? , your kind input will be highly appreciated , thanks in advance
Not sure I'd say stored procedures are 'bad design' .. they have there use cases ... triggers are often very badly abused.. but stored procs are very commonly used and are pretty standard SQL tools.
If we need to learn all of this before to get a Job, it will takes me more than a life.
You might already know this but I just found out that the following syntax will be permitted for primary constructors(ends with semicolon):
class Person(string Name, int Age);
And it still does not create any properties but instead gives a warning :(
Yeah I saw that. I will revisit this topic with my thoughts
thank you very much!!!
I have to disagree about the stored procedures; for very heavy data driven application they are the better approach
Maybe we should add some FrontEnd and Mobile framework to the roadmap.
Great roadmap! I have been watching a lot of your videos lately. Could you please let me know what software you used to create the Roadmap? Thanks
I wondered the same and investigated the GitHub repo. It seems to be a Mind Map created in MindMeister.
How do people remember all of this?!? Just looking at this list alone has me worried haha - I'm only on my first week of learning c# as my first introduction to programming, thought I'd look up a roadmap and now I'm scared😅
very good roadmap, but i'd add Docker there. imho it becomes more and more useful even for juniors
Docker is there
@@nickchapsas yes, really, sorry
Hey Nick I think some basic azure stuff like Azure AD would be good to know
Just curious why you mention mongodb as not cloud first? with Atlas is super powerful and cost effective!
Do we have any course which covers all this..??
Am excited to know this...
Thank you, what would you recommend for the front end? A frameworks like Vue, Angular, or React? Something else? Blazor?
Cool thanks
NLog is quite comparable to Serilog in popularity, so it is probably a must too
I've never seen it used in anything but legacy projects in the past 8 years
Maybe design patterns can be added under the solid title. sorry if I miss it
its for middle or senior? i work few years, but know and use just half of that. So i middle or still junior?
Thank you that shared your mind)
OK, the goal is set. Now all I need is enough lifetime to learn all of that stuff. How hard can it possibly be . . . .
Should this be updated with ChatGPT in the "learn how to search for solutions"? or maybe generative Al deserves it's own section? 😅
Hi Nick what is the name of the tool you used to create this tree?
I must have missed a video where you stated why Liskov's sub principle has fallen out of favor. How do you protect from common generics issues without it?
hello, i was just wondering what do you prefer rather than stored procedures. i also dont use them but i have heard when dealing with millions of requests then stored procedures should be the way to go. could you help me understand that a little bit more. thanks for everything. have a great day
Overall I like the top to bottom most to least important stuff. The only think I think should be removed is SOLID because very few people understand it and those that do can't explain it (Same with DRY). People have been poorly explaining SOLID for over a decade, and it just needs to go away or be replaced with something that simpler to understand and is not really needed anywhere near the beginning of your journey.
I explained DRY once. Sorry you weren't there. I'm not gonna repeat it 😁
@@JohnDoe4321 I just think in general there is a superficial understanding of it. All context of the original intent is missing.