views:

390

answers:

10

I am not the only programmer, but I'm the only .NET developer, everyone else works with Perl, Ext JS, and related technologies. I'm primarily self taught, using Codeproject heavily to learn new techniques.

Without any mentors at my company specifically knowledgeable in .NET, I'm unsure whether classes, or online tutorials, books, or perhaps some other avenue might be most effective at helping me to become a better developer.

My goal, optimistically, is to become a developer capable of managing the next .NET developer we hire, or at least to integrate well with him/her.

I'm currently taking on the task of documenting my programs in such a way as to receive review from the more experienced developers at my company regardless of them not knowing .NET, and I expect this will be rather general, but hopefully still beneficial.

Does anyone have suggestions or advice for how to most effectively learn good practices without direct oversight?

+2  A: 

I am in the same situation you are in. I learn mostly from

  • previous projects/mistakes, especially when you take over an old project from someone else (50%)
  • google (25%)
  • forum/stackoverflow (25%)
Funky Dude
+7  A: 

Without mentors around, there are several things you can do to improve your skills:

  • Take classes...especially if your employer will pay for them.
  • Read books. They're the next best thing to a class.
  • Read developer blogs. They may not teach you best practices, but they'll keep you abreast of what's new in the development world. That'll help you keep from falling behind.
  • Courtesy of the Community Listen to Podcasts (Hanselminutes, Stackoverflow, etc.) and watch Screencasts (Dimecasts has tons of good content).
  • Participate in the community. We may seem harsh at times, but you'll hear the most about best practices, coding techniques, design patterns, etc. and different ways to apply everything.
Justin Niessner
Excellent suggestions. I would also add listen to podcasts.
Matt Wrock
See http://stackoverflow.com/questions/1644/what-good-technology-podcasts-are-out-there
Ryan Michela
What can be done to "participate in the community"? I intend to start reading, asking questions, and hopefully answering when questions are within my knowledge. Are there places where my code could be criticized by more experienced developers, like perhaps open source projects that might utilize younger, less experienced programmers?
mlusby
Excellent suggestions. "We may seem harsh at times" -- Also read as controversial or no candy coating(in a good way). That's a common trait I see among great developers.
Abhijeet Patel
Participating in the community could include getting into the local .Net or Alt.Net groups as well as knowing what Microsoft evangelists are in your area for another source of information on some things.
JB King
@Abhijeet I think that humility should be pursued instead. Ortega y Gasset used to say "there's never enough reason to be arrogant"
Mauricio Scheffer
@Mauricio: Agreed. I was merely stating an observation
Abhijeet Patel
A: 

Join some OSS project which works with .NET to get feedback on your code from experienced .NET developers. In addition looking at other people's code is a great way to learn new things - just as you have been doing. I also agree with Justin also that reading blogs like Eric Lippert's is very rewarding

Anders K.
A: 

Take advantage of the chance to learn the languages and technologies being used by by your colleagues.

They'll introduce you not just to syntax, but more importantly to techniques, idioms, and paradigms that you won't find in .Net, but that will challenge you to think about how you could apply or build those thing in .Net, or why .Net doesn't have or shouldn't use those things.

Why is Perl weakly typed (or is it)? What's Perl better at than .Net? What is .Net great at the Perl is just terrible at? Why do these differences exist? How might you implement a Perl interpreter in .Net? Why might you want to?

Why's everything in a JavaScript a hash? How does .Net class inheritance compare to JavaScript prototypes? Are JavaScript's first-class functions a great tool or a source of obscurantist abuse, compared to .Net's strongly and statically typed classes?

What are the fundamental data structures in each language? For each language, why are those types fundamental to that language? What were the different design decisions (or lack of decisions) that motivated and informed each language's design and implementation? Can you discern any common "ancestral" languages among the languages used at your workplace? Why don't we have "One Language To Rule Them All"? Should we?

Finally, excellence at any one language is really great to have, but unless you're sitting on that language's Standard Committee or writing compilers/interpreters for that language, a broader knowledge of the underlying algorithms and data structures and patterns that are common across languages is probably more important to your development as a programmer -- and certainly to managing programmers, if that's your goal.

tpdi
+1  A: 

Look for local .NET user groups. In most cities, you are likely to find at least one. User groups are a great place to develop contacts, ask questions about the technology and basically get answers to problems you may be experiencing. If there are no user groups in your area, try looking online.

Edison
A: 

My goal, optimistically, is to become a developer capable of managing the next .NET developer we hire ...

In that case, you should be looking to expand or improve your people/project management skills as well as developing your technical programming and design skills in your chosen technology.

I also subscribe to the view that it is not a good idea to focus too much on a particular technology; e.g. .NET. Too much specialization tends to limit your career prospects.

Stephen C
+4  A: 

I have always worked like that. My ways to improve are:

  • Reading high-quality blogs
  • Applying what these high-quality blogs recommend (whenever it fits your project and when time allows, of course)
  • Reading high-quality open source project's source code
  • Writing as much code as you can, always keeping in mind what you've learned and always trying to raise the quality bar. Practice does not make perfect. Only perfect practice makes perfect.
  • Keep an eye on stuff that's unrelated to your own line of work. For example, if your main job is coding ASP.NET in C#, read stuff about functional programming, F#, Haskell, other web frameworks like django, Ruby on Rails, etc. I'm not saying that you learn them, just see how things can be done differently. It will broaden your perspective.
  • When you gain some self-confidence: contribute to open source projects, write a blog.

About books: IMHO the books that are highly-technical (i.e. "Buzzword 2.0 in Action!") aren't worth your time. Everything happens so fast that they'll probably become obsolete 6 months after their release. The only books worth buying are those that deal with the underlying CS or architecture issues.

About classes: it's very hard to find high-quality non-university classes that aren't a waste of time/money. Most of the time you can learn faster by yourself.

Also be wary of codeproject, there are lots of articles there with errors and/or general bad advice.

Mauricio Scheffer
+2  A: 

Change employers. I'm not trying to be a jerk, seriously. The most growth your going to have as a developer is by working every day with someone significantly better than you.

csharptest.net
Ok, then change jobs so that you can work with someone who writes "you are" instead of your. English is my third language. Piece of advice (from my technical writing class back in college): do not use abbreviations unless absolutely necessary - for instance: do not as opposed to don't, I have as opposed to I've, et cetera. Also, make sure to pronounce "et cetera" correctly. It bothers me when native speakers do not.
Hamish Grubijan
A: 

If you are free to choose how you develop, and you get new projects fairly often, pick a new technology you're not familiar with to use on each project. Of course, do your research first and make sure it makes sense for the project.

At my last company, I was pretty free to use whatever I wanted as long as it made sense and worked. I always tried to use something new on each project. The last project I worked on, I used NHibernate. No one told me to learn NHibernate, but I took it upon myself to use it to expand my knowledge. Of course, I made sure NHibernate was acceptable first.

The best way to learn something is to use it. Classes and books are good, but nothing will make it stick more than using it in a real project.

Aaron Daniels
A: 

A year ago I was pretty much in the same boat and it's interesting when I look back at the things I wasn't so good at. Awareness of the technology you are using is an important one, many people have suggested reading books/blogs etc which are good.

One thing that may help you, is to look at the MCTS material, starting with a foundation exam (I'm working toward 70-536 .NET 2.0 Framework exam) to make sure you have a good base. One of the advantages of this is one that it is credited by Microsoft so you can add it to your CV for the future and it gives you a more structured approach than just reading books.

Secondly read up on design practises, or even design principles (such as Gang Of Four). Do your best to not cut corners, and develop your code in the best re-usable way. This keeps you thinking about design and maintainability which is extremely important.

Finally I'd probably suggest trying to ensure you're not doing the same thing over and over. Don't just work with databases, or UI's etc... Try to get a mixture of things to try new techniques and learn new stuff.

Ian