views:

155

answers:

7

I have a solid foundation in programming (Java, Python, Haskell). I would like to pick up C#.

What would be an ideal project that would help me learn C# well enough to be sufficient for the workplace? Something that would help me learn all the subtleties and tricks.

Going through something like http://projecteuler.net/ or similar wouldn't help me much since I already know how to program.

Thanks.

+5  A: 

Anything that you find interesting, especially if its something that you could make use of in future. There is no one answer for all.

m.edmondson
I agree. What you need most is motivation. Doing something you are interested in is the best way to get it.
jgauffin
+4  A: 

Well, Project Euler isn't just a learn-to-program resource, but also "What is the best way to solve this in my language" resource. so I would suggest you reconsider your prejudices.

However, I would also recommend building a lot of simple apps:

e.g.:

  • Todo List
  • Calendar
  • Simple Forum / Blog

etc...

John Gietzen
I like the forum/blog idea. I wonder if mono supports web development well enough.
Absolute0
Do mathematical problems require you to use different syntax within the same programming paradignm? I doubt it would be any different from how you'd implement the problems in Java.
Absolute0
@Absolute0: Well, learning a new language is one part "Syntax", one part "Standards", and one part "Library", and two parts "Practice". So, even though the syntax between java and C# are similar, I think that http://projecteuler.net would certainly help with the rest.
John Gietzen
+1  A: 

I've always used Project Euler (PE for now) to learn a new language, and I'm unsure why you are against it. After awhile, learning a new language boils down to knowing the basics such as syntax and built in language libraries, which is exactly what PE tests (especially the first hundred or so problems). You'd be surprised about the number of times that what is easy in one language to implement, is remarkable complex in another.

Shynthriir
+1  A: 

I run a .NET group to help teach programmers new to .NET. I encourage participation in a monthly activity that I call Code-Swap. In Code Swap, we agree on a simple, yet non-trivial application - something that participants can accomplish in a couple of weekends - and everyone makes their attempt.

We started with simple games: Boggle, checkers, Yahtzee, etc... and even hangman.

The real value comes from the fact that participants can ask each other, "how did you tackle xyz?" And it is surprising how something as simple as hangman can make use of "complex" programming principles like anonymous functions or generics. Add to this that there are multiple rendering paradigms (WinForms, WPF, console, SilverLight) and you can learn a lot just by programming a simple game.

Chris Judge
A: 

I've dabbled with C#, and the only worthwhile advice I can offer is to learn the naming differences from Java to C# (package versus namespace, etc.).

Try browsing through Github, or SourceForge and seeing if there are any C# projects that catch your eye.

indienick
A: 

I teach students how to program in C# and I have found that trying to get them to redevelop an application they know well as a learning exercise always helps. They don't have to mess with requirements or think of something to do, they can just get on with the development and coding.

The project I usually give them to do is to develop a MSN Live Messenger clone. It makes them write server code and client code. You can also easily expand this to include ADO.NET for authentication and message logging to a DB. It it also great to learn a lot of the great networking bits and pieces in .NET such as WCF, web services and even remoting.

Just a suggestion but as I say, works well for me.

Iain Kelwick
A: 

Pick one (fairly complex) application which you have developed before in another language, preferably a language with least similarity to C#, like Python.

Then go all in and redo that program in C# (not just rewriting old language with new syntax) but really follow the principles of the new language. Whenever you get the chance, try to use advanced concepts of the language instead of doing it as simple as possible.

Hopefully by the end of that experience, you should feel good about your skill in C#.

P.S. In my experience, I hardly finish project which I just make up, so I encourage finding one you are really interested in or one you have done (completely) before.

Just my $.02

codinguser