10 Steps To Become Better .NET Developer
Friday, November 19, 2010 at 15:20 Tweet in
Azure,
CC.NET,
CQRS,
Castle,
Cloud Computing,
CouchDB,
DDD,
IoC,
Linux,
Mono,
NHibernate,
NServiceBus,
ORM,
autofac,
xLim Here's a list of things you might want to learn about in order to become a better .NET developer. Better developers are eligible to higher paychecks, exciting projects and more freedom in their lifestyles.
- Learn Unit Testing
- Get familiar with distributed Version Control Systems: Git or Mercurial.
- Learn about IoC Containers: Autofac, Windsor Container and StructureMap.
- Contribute to Open Source Projects of your choice.
- Learn about Continuous Integration and try setting up TeamCity, Hudson or CruiseControl.NET.
- Learn about NHibernate Object Relational Mapper, but be prepared to outgrow it for NoSQL persistence like CouchDB, MongoDB or RavenDB.
- Check out the buzz about cloud computing, try Windows Azure Platform and also give a shot to running your .NET App with Mono on Linux (some free offers to try).
- Familiarize yourself with messaging architectures and try NServiceBus, MassTransit or RhinoQueues; then learn about alternative to MSMQ - AMQP and RabbitMQ.
- Read Domain-Driven Design and apply it in your projects.
- Get Started with CQRS Architectures and practice it in a learning project.
As you can see, the list is not endless. There are just ten distinct topics structured in the recommended order of learning and practicing. Diligently walking through them is certain to get you way above the level of Senior Developer, opening a whole set of opportunities all around the world.
And if you happened to learn, understand and master all these steps and still don't have interesting job or project offer - drop me an email; I might get you in touch with folks desperately looking for developers with this set of skills.
PS: On August 2012 we started a new podcast to help aspiring developers. Check it out.
Reader Comments (44)
Not sure how those make a good .NET developer. Some of them can be applied to many other languages .
Yes, of course. Good .NET developer does not limit his vision and thinking by a single platform.
What if I use some other ORM instead of NHibernate? Am I considered not that good .NET developer? )
OmariO, the list is not "the only way to become a better developer", there are many others ))
Yet personally I believe NHibernate is the project to learn in order to get the best insight into the details of Object-Relational Mapping and what a proper ORM tool should be capable of doing.
Plus the technologies listed reflect the most common requirements in the niche where I'm working.
I would also add Redis to point 6 (the fastest NoSQL solution of all :). In which I maintain a mature and full-featured Open Source C# Redis Client and Redis Windows Server Builds
I actually think the most exciting things happening with .NET is happening in the MONO world where it is being used to power scripts in Second Life, The Sims, Unity3D and Mobile platforms like MonoTouch and MonoDroid, etc.
So it is definitely a good idea to have your software running supported on MONO.
Also it is worth considering looking into different web frameworks like Mono Rail different view engines like Spark or NHaml and different web service frameworks like Open Rasta or ServiceStack.net (which also runs on MONO :).
I'd like to propose my own list of tips.
Good post; I'm curios to know what kind of salary you think a developer with this skill-set fetches? From a higher paycheque, more freedom perspective, I can think of several things a dev can do in their career that are not on this list and are not deeply technical in nature.
Nice post man! However I think that higher paychecks and exciting projects are mutually exclusive :)
Umm, the whole paycheck thing is probably about 10 times more complicated than simply having the right technical skills. I mean, for serious money, leveraging just the technical part is something of a bad idea. You need to be able to organize, lead and, ultimately, to actually deliver working products.
I've found that the most assured way to increase one's salary is to ask for more. Regardless of how much my skill set improved, I've never been offered more money I didn't ask for and threaten to leave over.
And you become a jack of all trades :) Which is not a very bad thing :)
@Nariman, Thank for the comment!
To my knowledge, developer with such a skillset can make starting from 80-100k USD per year in USA. There should be real practice and experience behind this skillset, of course.
As for the highest numbers in a limited time, I agree that a person can earn more, for example, by configuring Sharepoint sites and doing quick freelancing with XAF/Lightswitch. It will not be fun, though. There are multiple other ways with passive income approaches or self-employed projects.
Yet, ultimately this .NET development path (the one I outlined in the blog post) leads to even higher numbers and more fun (due to the immense synergy and capabilities to create business value). However that part would require a bit of skills that are not purely development-oriented.
All the best!
@Petr, only to a certain extent. At some point you will find that you are already working for yourself (there are multiple forms here). This, if done right, would combine exciting projects and interesting paychecks.
Best regards!
@Dmitri, this, I think, depends on what you count as being serious money)) Besides, farther you go from the classical office job (i.e. usual Software Developer), more options you have ahead of you.
That's, of course, my personal opinion and perception only. Time will tell.
Take care!
@Raj, I wouldn't say this list is a Jack of all trades thing. It focuses only on distributed domain development on .NET stack.
One can obviously add things like web development, UI composition etc, Ruby/Php/Java in order to become a Jack of All Trades. But personally I believe there are more efficient ways to spend time.
All the best!
@kevcoder, indeed, there are multiple ways to raise your salary in the short term. And they don't necessarily deal with becoming a better .NET developer.
However, I'm personally more passionate about development and pushing state of art than just about money alone.
Nice idea, and delighted to see unit testing and CI made the list. But are those the only quality-oriented practices a good .NET developer needs? What about TDD, OO design and refactoring, for example? Or acceptance test-driven development? There are those of us who would argue that reliance on frameworks like IoC containers is no substitute for good design. .NET developers should focus at least as much on quality-driven practices as they do on tools and technology.
I also really feel that getting better just to earn more money and do more exciting stuff is not a very good goal to aim for. Get better because you love to create software and you care about the quality of the software you create. Google are not going to hire you because you know Castle Windsor and NHibernate :)
A pretty good list of things to learn, but certainly filtered through one person's perspective. The thing that I think is most important, but miising is: Learn a different technology stack (RoR, Java, Flex, Lift, etc) and figure out how they relate/differ from your known stack. You are guaranteed to bring back great ideas that you were sheltered from by focusing on a single stack.
@Jason, Thanks you for such an insightful comment.
I would definitely agree with you, that there are quite a few things missing from the list. Some of these would actually be learned by participating in open source projects (this which force developer to get better and more realistic view on software development focused on delivering something real). For the rest - unfortunately I had to exclude a lot of good things from the .NET list to keep it focused, balanced and short.
As for the generic lifestyle and perception I also agree. First, my ideal environment is when you do what you are truly passionate about, learn about the field and share the knowledge, while still getting paid for the effort. Second, actual stacks and frameworks are limiting indeed. Yet, if you learned by heart a few similar technologies, then you will eventually get the real idea behind them. Actual implementation will no longer that important. That's what Google will be looking for (or at least, Microsoft))
@Brian, I absolutely agree. That's exactly the reason why I'm currently learning about Cloud Platforms outside Azure, and other non.NET approaches on building systems (really impressed by Heroku, by the way). However this is something I would hesitate to recommend to everybody at this point. It might be better (from the learning process) to learn various aspects of .NET stack first, and then look out for better ideas and methodologies on the other sides, importing (or using them together) as good things show upon the horizon.
I really like posts like this one: clear stated steps to self improvement.
How much do you think it can take from a guy who has a degree on computer engineering and so knows something about programming (mostly java but also a bit of C#) to go from point 1 to point 10?
@roby, this depends on the determination and free time.
I'd say 2 full weeks for a crash course overview and then intense 10-12 months (40-60 hours per week) to learn and practice a lot to get the knowledge and properly structured thinking about the problems at hand.
It took me roughly six years to get 1-8, but I didn't have degree in CS (took economics instead) and was working in parallel. YMMV))
Good luck with these steps, should you decide to take this road. It is worth it!
Design principles are also good for developers on any platform:
SOLID
Law of Demeter
You ain't gonna need it (YAGNI)
Tell, don't ask
Idempotence
to name a most known
@vsevolod, different design principles can have different value and weight depending on the platform (i.e.: compare development of Web UI with HTML/CSS/jQuery/REST APIs with high-scale stream event processing in the cloud).
Fortunately while getting involved with the specific platform, tools and projects, developer is forced to learn design principles essential to success there (if he wants to progress). I agree that knowing them in advance is helpful to avoid a few pitfalls while moving forward.
Great post!
Thanks, Anders.
I'm glad you liked it!
Good points, I like the general idea of learning these things and why they benefit the software application that is being built. And I agree, this isn't just points about being a better .NET developer, its about being a better developer in general.
Lee,
Thanks for the feedback! Hm, it sounds like we'll need to compile generic "Better developer" list that does not affiliate with any single stack, while taking the best from each and showing the core principles. Sounds like fun.
Thank you for the idea!
That's a great list to start with.
There ought to be a way to put together a list that anyone could contribute to. Kind of a "How to be an awesome/badass/rock star/cool/happy/great programmer" that anyone can add or contribute to... i.e. a wiki?
hmmm, that's a thought.
Adron, I believe there are quite a few lists like this over at the internet already. For example, the one in StackOverflow.
Wiki, is a great idea that I've been toying with for a while. This blogging platform does not support easy collaborative editing, however I'm thinking about putting up wiki.abdullin.com and pushing all stable articles over there for everybody to benefit from and contribute, if they are interested.
I'll definitely blog about that, when it happens.
Thanks for the comments!
Rinat.. this post is very special for me.. because I have studying all steps in your list, now I'm not feeling along.. thanks
Ehudes, I'm glad that it encouraged you! However, this list is just the beginning of even more exciting things to work with (both from practical and cool perspectives))
What about learning stuff like C#, ASP.NET, .NET runtimes, SQL, XHTML, CSS, JavaScript, jQuery, etc., etc.? Sometimes I think people get too caught up in being able to say they know all this stuff at the expense of being good developers, and some employers even look for someone who's says they've used all this stuff when they should be finding good programmers. I've given up trying to learn every bit of technology someone throws out. Being a good .NET developer, to me, means being a good programmer.
Jonathan, thank you for the critical approach. I value it!
Here's my own perception (which is based on the limited experience I have).
ASP.NET is a highly inefficient development model (esp when compared to non .NET web platforms and natively non-blocking web server implementations). I'd recommend to stay away from focusing on it. SQL - same story: relational databases are a complex and coupling abstraction, that just kills performance. Learning them might be good from the point of learning limitations and finding reasons to avoid (just like I did), but in the long run - is just a waste of time.
Regarding XHTML, CSS, JavaScript and jQuery - I prefer to leave these details along with the actual web UI design (focused on the usability) to the real web designers. Focusing on the server-side technologies (in order to make WebUI design simpler) within the principles of Cloud CQRS seems to yield highest ROI in terms of time and effort invested.
Your post is good for the .net developer. But if you want to be more than better please visit: [somelink]
These days, I would really add
WPF (need to know mostly everything to use it correctly)
Silverlight (similar to wpf in many ways)
MVVM + most used frameworks
MEF
WCF
Linq
Task parallel library + Dataflow
Reactive Extensions
C# 5 Async CTP
Moq
Design Patterns using c#4 for understanding the basic principle of composition vs inheritance, delegate
Even if those aren't use in more than 70% of projects, since they fix so many problems in multiples aspects of old and current .net development there's no way it's not the future of .net.
I'm learning Reactive extensions these days and wow.. once you know how to use it... you can really encapsulate event streams in a meaningful and flexible manageable form.
Thank you for your great article; learning now NServicebus, Autofac, RavenDB and DDD/CQRS+ES(loakd-cqrs)!!!
Maybe when I'll be ready I'll contribute to the Lokad project!!!
May I ask you a list of books a good developer should not miss?
Thank you again you are really leading by example here! :)
I just graduated, and i am willing to become a VB. Net developer, but after saw your posting, i found myself is nothing, depressed.
Hua, don't worry. I myself graduated with knowledge of various religions, how to plan cattle herd or how to measure inflation rate.
Practical development and design skills can be acquired on any basis.
Hi Rinat ,the post shows the right direction about how to move in NET Development field ,for persons who want to be a good .NET developer.I also want to appreciate your thoughts for helping the persons who are not getting job.
So CQRS and DDD are new silver bullets? Didn't Greg Young say that CQRS is good for about 10% of projects? Maybe it would be better to invest time in learning something else like functional languages?
Den, CQRS and DDD are definitely not silver bullets. However DDD is an extremely powerful tool to have, should you need to face "enterprise" grade problems. Value of certain learning directions (functional languages being one of them) depends mostly on your own priorities and planned career choices.
Very Much Interesting.. if any one follows these steps i am sure they will be at top with .Net Application Development
This isn't just points about being a better dot net developer, its about being a better developer in general . Thanks for sharing information.