views:

131

answers:

4

Recently, I feel that I've reached a wall I need to vault over to continue improving myself. I was reading the book Pro ASP.Net MVC2 written by Steve Sanderson and he holds your hand throughout the chapters, all the while introducing Dependancy Injection and abstract interfaces.

I realized this is completely new for me and very hard for my mind to grasp and apply. Sure, I followed the code, but as all developers know there is a point where something in your mind clicks and everything is clear.

I haven't reached that point yet.

The book explains in the introduction, a couple of developer stereotypes. SmartUI developers, those who program actions within control events; the Layered developers, those that use a three-layer architecture.

I fall into the latter, but I do know professional developers that are 100% SmartUI devs. Professional meaning they are paid for creating applications.

What can a developer do to vault over this hurdle? I'm sure everyone faces it at some point. Being a good 3-layer developer, what's the next step for me?

Should I read about Dependency Injection? Should I first learn and become adept with Unit Testing and be comfortable with Test-Driven Development?

What should my next move be?

Feel free to change the tags to something more descriptive.

+3  A: 

Reading to learn is nice academic lesson, but if you want to master it you need to use the techniques.

What I find best is to work on a project that is over my head, until I can figure out the solution, and I may find limitations of the technology quickly this way.

Until you use it you won't really be able to understand it.

Also, if someone asks you about these technologies, if you can't explain them, you don't really know them.

So, you could work on trying to write up a blog as you work on this program, to explain what you did and why, so that you can better understand what you did, as you explain why you did it, and what you learned.

James Black
+1  A: 

The best way to learn about tools and techniques in software development is to apply them in a real project. If you want to learn about dependency injection, find or start a project that uses dependency injection and let that motivate your reading. Same for unit testing or some new framework or language.

For the specific topic of dependency injection, I found this page on the Guice wiki a pretty nice overview of what DI actually buys you: http://code.google.com/p/google-guice/wiki/Motivation?tm=6

David Winslow
+2  A: 

Similar to what James said, I have two suggestions (or possible approaches) that could help you:

  • Find a small(ish) open source project that is considered 'best of breed' and improve upon it. You'll learn new techniques by looking at other people's code, while finding challenges yourself
  • Start something new yourself, and ask lots of questions when you get real stuck (here, forums, etc)

I suggest something small because there are very few large projects that follow the "best practices" preached in books. I know many on here will disagree, but big projects and fully Object Oriented code don't always go together well.

Andrew
Mmmm i wouldn't agree with the open source approach, you are better off writing your own app using the principles you are trying to learn. With OS you have to conform to the structure and standards already in place (which may not be the best environment to learn within), and you may not get to work in an area of the app that suits your goals.
slugster
I'm not advocating becoming a long-term open source contributor (or even one at all), but rather using it as a platform to learn. The problem with starting from scratch is that it takes a LONG time to correctly apply "best practices" from a book to a green field solution. If you can learn your way around a *small* well respected open source C# project, and start making modifications, it can be a far faster way of becoming comfortable with the concepts. The same could be said of taking a well thought-out sample app from a book and running with it.
Andrew
+1  A: 

This is kind of what happened with me too. I can totally relate to your situation.

I overcame my hurdle by building my own blog engine in MVC, using structuremap as an IOC and in a test driven fashion. It was definitely fun and I learned all about these concepts along the way.

I would suggest you choose a side project, implement it using MVC, use IOC and test driven all the way.

For IOC, read this article by Rob Conery. http://blog.wekeroad.com/smackdown/200-page-manual-on-inversion-of-control-plus-or-minus-199/

LightX
"The number of places you have to look at to figure out what the code is trying to do goes up by at least one. And somewhere in heaven an angel cries out." Thanks for that link! Very informative and simple to understand. I'm going to subscribe to his RSS feed.
Sergio Tapia