Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm learning C# via the "Essential C#" Lynda.com video tutorials and plan to read a couple of books that cover things in more depth afterwards. My question is where I should head to learn more after that? I've done things like project Euler in the past, but I find they don't really help me learn anything other than basic program control flow and features.

I've looked at many open-source projects but pretty much everything still looks overwhelmingly complicated at this stage. What would you recommend I look at to help me build useful applications that are a bit beyond the millions of console applications I must've written thus-far? Should I be looking at books specifically on learning/working with the .NET framework, or just biting my lip and continue working through open source projects until they start to make sense?

share|improve this question
5  
Write an application for yourself. Find something in your life that would be better automated and create a project from it. –  Hunter McMillen Apr 11 '12 at 15:29
    
Feet to the fire. I learned by taking on a big project with no C# experience. I went from a PHP webdev to building a large application that included custom networking protocols, database ORMs, multi-threaded background monitors, IPC, dynamic 2d plot generation, etc... I barely slept for 6 months and sprouted a few gray hairs (at 25) but I can build large complex applications now. Not recommended. –  Evan Plaice Apr 19 '12 at 4:21
add comment

put on hold as off-topic by MichaelT, gnat, GlenH7, Bart van Ingen Schenau, Kilian Foth 8 hours ago

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – GlenH7, Kilian Foth
If this question can be reworded to fit the rules in the help center, please edit the question.

5 Answers

If you already know programming, then the best learning exercise is porting a program you have in the old language to the new one. You don't have to worry about requirements or scope, just making the thing work. As a bonus, you also learn how things are different in the new language.

If you don't, then project Euler or codechef or other 'problem' sites provide a lot of bite sized problems to work through. That's good to get used to debugging the language, but often not so good for program design. Personally, I like small games for that. The rules are well set, but can be implemented a variety of ways that allow for more program design leeway for you to learn with. Your mileage may vary; pick something interesting to you that you know how it should behave, but not necessarily how to make it work.

share|improve this answer
add comment

The vast majority of useful software is not particularly complex, it's just a large conglomeration of simple software. Usually a new hire fresh out of school will be given a relatively simple bug fix. The trick is to not try to understand the entire software all at once, but to pick something small and focus on it. Change a button's label, for example. Repeat until you are comfortable trying something more involved.

Writing your own software works the same way. You start out with the tiniest part that works, and slowly build it up, one line at a time.

share|improve this answer
    
+1, practical and optimistic. –  Emmad Kareem Apr 18 '12 at 23:02
add comment

Although reading other people's code is tremendously useful and enlightening, there is no substitute for getting your own feet wet. So you've written a million simple command-line tools? Great, now go look for a new challenge.

Maybe you want to get into GUI programming? If so, check out the major GUI toolkit libraries for your preferred platform(s). Or maybe web development? Then go find some good reading on the basics (HTML, HTTP, Javascript, CSS), pick a suitable platform, and get cracking. Or maybe you're more into image processing? Then learn all there is to learn about image file formats, image manipulation algorithms and theory, and write your own tool, or maybe a plugin for some image manipulation application.

Once you've written a few real-world applications, and run into a few walls, you probably want to read up on overall software architecture strategies, such as Model-View-Controller, Three-Tiered / Multi-Tiered, Service-Oriented, etc.; most of these won't make much sense unless you have run into the problems these intend to tackle. The same goes for design patterns, so by all means, read about those as well, but for all that's sacred, do your own thinking and judging.

share|improve this answer
add comment

When you know the basics you can go and learn some advanced stuff :D .

We all need some userful stuff programmed start with that think what would ease some of your problems :D. For example i wanted an auto cliker so badly i couldn't sleep eat drink and some other stuff :D, and I was thinkig hmmm i just learned Java im going to make my own auto clicker the way I think it should work.

I started writing the code and then I got stuck :D i took my book's and started finding stuff i knew but couldn't remeber when i was writing the code. After two days of work i had my own auto clicker hihih.

And it was a horrible auto clicker but it was mine .

What i wanted to say with this is find some interesting topic in the world and try to convert it to an applicaton.

Userful is relative my auto clicker was userful to me but when someone else would look at it he would say nahh it's kinda dumb :D.

share|improve this answer
add comment

You need to decide what are your learning the language for. Assuming you are sticking with Microsoft, If you plan to be a professional software developer, there are probably no jobs for people with only C#.

C# is core but in addition, you need to know the following areas at a minimum (at least above average knowledge):

  • OO

  • GUI (Web skills)

  • Databases (SQL skills)

  • Linq (e.g. Linq to Entities)

The GUI choice is a big one, I suggest the ASP.NET path, but you choose:

  • ASP.NET (in addition to HTML, JavaScript)

  • Silverlight

  • Desktop (WPF or Silverlight)

In addition to the above it is good to know about ORM / Entity Framework and Services.

If the above sounds too much, it is, but this is what the market demands.

Again, if you are seeking professional work, look into job sites and see what they are looking for. You would be able to get an idea about the skills the market demands. There are employers looking for fresh graduates, entry level developers and interns with varying requirements. Aim for to fulfill those demands and put a plan then execute it.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.