views:

1542

answers:

22

When you can create classes and do the simple stuff (GUI, reading text files, etc...), where do I go from here? I've started reading Code Complete 2nd Edition which is great but is more of a general programming book. What topics should I learn next?

+40  A: 
Tom
Another aspect of this answer (which is great) is that if you just roll up your sleeves and *make stuff* you will be *practicing*. Just like pretty much anything else in life, the more you do it, the more naturally it comes to you. Things you struggled through last time are a breeze next time.
Rex M
+1 - you learn best by doing
nailitdown
I think I'll make an Internet browser! (Joking)
Lucas McCoy
+1 learning by doing, and doing a lot of different things, will get you the best exposure for improving your programming Kung Fu.
Chris Ballance
So right. The best thing to do is write real application that you more or less should be able to use yourself. Only then, you will be experience the problems one should be able to face when programming...
Tom Deleu
Agreed. Stop talking, stop asking, and just go do. Come back in 6 months of intense develop and ask questions, then rinse and repeat.
Simucal
If I had a nickle for every project I made that never left my desktop, I'd have a whole lot of nickles...
Marc Bernier
True, but building hobby projects is not the most effective way. Much faster way to learn is working with more experienced people.
Martin Konicek
@Tom inspiring, Thank you +1
Ninja Dude
+9  A: 

Write a desktop RSS reader. You'll get exposure to a bunch of different areas (parsing files, graphical apps, HTTP, the flakiness of the internet), and you might actually use the result on a daily basis. Picking a specific goal or feature to work towards will help you learn more quickly than something abstract.

twk
I think along with the first answer, that I'm going to do this. Thanks!
Lucas McCoy
+2  A: 

Write code, lots of it. And not those fluffy little HelloWorld-type programs.

Find either a real project that interests you or something you've already written that can be converted to C# and do that. Only by doing (and, unfortunately, making copious mistakes) do we learn.

paxdiablo
+17  A: 

Not to disagree with the folks who are saying "write stuff," but one topic that you should learn about next is the underlying fundamentals of the CLR -- the workings of the engine that sits behind all of these libraries. A good resource for this is Richter's "CLR Via C#."

itowlson
Oh yes, that book is awesome! Every .NET coder should read it.
Tor Haugen
+2  A: 

practice, look at open source projects, understand completely what it does and how it does it, especially complex libraries like mocking frameworks, ORM, etc

BlackTigerX
+7  A: 

Learn another language and apply the learned knowledge to C#.

F#, Scala, Haskell - lots to pick :)

Lemmy
This got voted down, but while this maybe isn't the *very* next step to take, there's a lot of merit to the suggestion. Learning just the basics of a different language (I went with Python and Scheme) will give you new ways of approaching problems in your primary language.
John Price
+4  A: 

Get ReSharper, keep all recommendations enabled and understand them.

Lemmy
+5  A: 

I agree with most of the answers so far, but I think that if you want to improve as a developer you can benefit greatly by not running solo. Try to find someone who can coach you. Over the years I've made my greatest leeps in depth of understanding by teaming up with programmers who were smarter and more experienced than I was. (They still are :-) )

Kim Major
+2  A: 

Visit CodePlex.com and GitHub.com and look for open source projects which you can contribute towards.

JMs
+2  A: 

looking at q/a of stackoverflow, c# topic. :-D

Avram
+1  A: 

The best way to learn is to actually get stuck in and build some cool apps, websites, whatever. Its still a good idea to keep up with the various websites to learn new stuff that you might not have come across though.

Maybe build the next facebook or google :)

Chez
A: 

With a new language, try to solve some of the Project Euler problems. Improving math and coding at the same time!

Riddari
In all honesty this does very little to improve you as a developer. Since college I've only had to write maybe 10 algorithms ever. Real world development is generally less about solving a math problem but solving a user problem.
Chris Marisic
+2  A: 

Also a good way is to get involved in a small project with multiple members (friends maybe), so you can learn from each other and see how other people do their stuff.

Alexander
+2  A: 
  • Read code
  • Write code
  • Test code
  • Read books (some suggestions), blogs etc.
  • Repeat
Brian Rasmussen
A: 

write good unit tests and try to get the code coverage as high as possible

+2  A: 

Write code yourself, and read the code that has been written be someone else. But, not anyone else; of a person of whom you're sure that he writes good, clean, smart code.

Frederik Gheysels
+3  A: 

Try reading the Mono source code to get a look at how a C# compiler written in C# looks. You'll learn so much about the language, compilers, and computer architecture. This is the great benefit of a project with source - you can learn from it.

+1  A: 

Learn best practices and software engineering and how to apply them to C#.

Learn Version Control, TDD, Domain Driven Development, Continuous Integration, MVC, MVP, A handful of patterns: facade, factory, repository vs. active record, etc.

Learn tools that will help you avoid reinventing the wheel: Validation Application Block, NHibernate, etc.

I found this free e-book from the guys at CodeBetter a few days ago: link text

I haven't read all of it but it looks like a good read.

adolfojp
A: 
  • Work in a team with better programmers - get employed
  • Work on large open source projects.

I disagree with most people here that learning by building stuff just by yourself is the best way.

Martin Konicek
Absolutely true... Teamwork is such a great resource for getting other perspectives and insights into coding principles/methodologies... and in real life, large-scale projects you're rarely a one-man-army.
Jörg B.
A: 

CLR via C# a great book !! helped(still helping) me a lot understanding the language also you can download the c# language specification book

Yassir
+1  A: 

If you want to become a better C# (replace with any other language), work on large scale applications, the kind that has certain features on 'musts' in it that you know you have no clue how to realize them, yet. All the easy ones around these core 'nuts-to-crack' will help you, too.. it's always good to get used to thinking in large, interwoven dependencies in projects which force you to think through and layout the architecture of your final product upfront.

This isn't particularly c# related, but if you want to become a better developer, these kind of projects (that implicitly include lots of ((c)lean) coding and testing etc etc) are the best learning grounds.

If none of the clients wants to 'give you the chance' to work on such a project with your current skill set just yet, go ahead (or in any case) and start coding on an opensource project and keep friends, colleagues and places like stackoverflow involved.

Be prepared and open to make 'errors' (as you might judge them afterwards)... because only with a gazillion errors made you see the slim/windy path in between them.

That being said, learn to not over-engineer or get tooo perfectionist too early. Bugs will be made, bugs may even remain in a final product considering certain impact conditions etc, learn to live with that as an engineer/developer.

Jörg B.
A: 

Suggest you read C# in Depth. It is a deep dive into C# that will greatly enhance your understanding of the language. The author, Jon Skeet, is rumored to be a lurker on this site...

Grant Palin