views:

297

answers:

12

Possible Duplicates:
How and where can I learn programming?
Which books made you a better programmer ?
How to become a better programmer?

Hey SO:

I had an, albeit slightly inebriated, epiphany last night and decided that I need to really start learning more about programming.

I am primarily self-taught (started programming in grade school on my TI-83), and as such I have a relatively broad but general knowledge of programming languages. I have experience with html, css, asp.net, c#, vb.net, ti-basic (from the calculator), php, mssql, mysql, javascript, and probably a few other that I am forgetting at the moment.

I want to learn more C#, since I just started working with it a few months ago and I am enjoying it much more than VB.NET (for .NET languages).

Can you guys provide me with some starter resources and/or tips and tricks that you have used in the past to get acquainted with a particular language?

+1  A: 

I said this before, somewhere (also in an inebriated state), but: get a job at a company that requires a skill set you don't have. This requires lying, but you'll be amazed at how quickly you pick things up.

MusiGenesis
Good point, and I agree completely. Where I am working now, I was strictly programming in VB.NET. I started learning C# here because a few of the applications I am using (sitefinity, sharepoint for instance) use C# as backend rather than VB.NET.
Anders
Why would someone down-vote this? It works.
MusiGenesis
I didn't downvote but I disagree. You will learn absolutely nothing from working at a company where you were able to lie your way through a tech interview.
ChssPly76
@ChssPly76: to clarify my point, bluffing your way into a situation forces you to learn what you need to know to back up the bluff. This is how guys first get girls to sleep with them, after all.
MusiGenesis
@MusiGenesis - and to clarify my point :-) you will either have learned what you need _before_ the interview (thus making lying unnecessary) OR you will _not_ pass the interview OR you will join a company where the best programmer (that interviewed you) was either stupid enough to not see through your bluff or removed enough to not care about it - in either case you'll learn nothing. You'll be much better off learning by working on a project of your own. That said, I can totally back the "get a job to learn" advice as long as all interested parties know you're there to learn.
ChssPly76
@ChssPly76: and to REclarify my point ... er, I got nothin'. :P
MusiGenesis
+1  A: 
Ezombort
The original Effect C# is better to start off with in my opinion. Then .NET Framework Design Guidelines. After that, Pragmatic Programmer.Honestly though, write lots of code and work with people who are better than you.
Lobut
I agree, but it depends if you are more interested in the new .NET 3.5 features or general C# and .NET in my opinion.
Ezombort
C# in depth and CLR via C# also come highly recommended
Russ Cam
+4  A: 

I'd suggest you read some books as mentioned in this thread:

http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read

I think you can read a lot of 'technology' books, I mean the ones that go in-depth on a particular technology. However I personally learned the most when I started reading books that explained principles and practices rather than how a specific API or something works.

Stephan
I will definitely check these out. Thanks for the link.
Anders
+1  A: 

I like watching the Berkeley webcasts. There are lots of classes you can watch about data structures, functional programming, etc.

Ultimately, though, the best way to learn a language is to do.

Charlie Salts
+1 for a useful link!
Moayad Mardini
+2  A: 

If you haven't done that before, you should read "Code Complete", which will help you become a better programmer!

Moayad Mardini
I've seen this one mentioned a lot. I will probably be getting this one too.
Anders
I would down-vote this for the hell of it, if I didn't like having my rep be a multiple of 5. While there is much of value in Code Complete, the most thoroughly incompetent programmers I've ever worked with were all Code Complete afficionados. Code Complete is no magic bullet. Don't get me started on Design Patterns.
MusiGenesis
-1 to get me back to a multiple of 5. Sorry.
MusiGenesis
Musi, that's totally OK with me. I don't argue that CC is a magic bullet, but no other book is.
Moayad Mardini
+2  A: 

Personally, I'm a big fan of books (despite the fact that books seem so low tech.)

Off the top of my head, you really can't go wrong with the classic K&R's "The C Programming Language." At this point in time it's possible to spend the rest of your career not needing to actually use C in it's pure form, but the book still stands as one of the best programming books ever written, and since so much of the modern programming world expands on the basic assumptions made by C, getting a grounding in the foundationals, as it were, is always helpful. Personally, Java makes so much more sense with a background in what's "really" happening. Also, it's only about 250 pages. I ripped through it in a pair of weekends ten years ago.

As for the more modern stuff, I'm a big fan of "C# in a Nutshell". With C# specifically, I'm in a similar place - I've got a lot of backgrounds in other languages and I've picked up a lot of stuff with .Net /C# on the fly, but I was looking for a good grounding in the language as a whole (without two chapters on what a variable is.) C# in a Nutshell was exactly the book I was looking for.

Other than that, the best advice is to just write a lot of code. Pick some little project and knock it together. Personally, I used to play a lot of table top RPGs (D&D and so forth) and there's an almost bottomless well of tiny and not-so-tiny apps to be written there to do dice rolls, number crunching, record tracking, you name it. So, don't feel like you have to crank out some full-featured web-app at home - find something you're already doing and "electrify" it.

Electrons_Ahoy
O'Reilly seems to have a lot of good books, I will have to pick some of them up. When I was learning VB.NET, I was also spending a long time organizing my digital music collection. I wrote a program that allowed me to mass-edit the ID3 tags and rename the files according to custom tokens. That was fun! Maybe I should make a C# version...
Anders
O'Reilly does have an amazing line of books. They're not all winners (naturally) but most of them are pretty solid.In the same vein as the MP3 tagger, I have a few mini apps like that that I re-write every time I learn a new language. I like that approach, because I've got the logic down cold, so it's just a matter of learning the syntax and "philosophy" of the new environment.
Electrons_Ahoy
+5  A: 

Everyone seems to be posting about books, but there's a TON of great information online.

Obviously, trolling through SO questions is an incredibly effective way to pick up some thoughts on best practices, tips/tricks, etc.

Other great options:

  • InfoQ.com - tons of great articles, interviews, how-tos on everything from better code to better architectural choices. I love how this site will interview architects from sites you know well (e.g. ebay, twitter) and talk about how their architecture has evolved.
  • If you're interested in .NET, follow some of the thought leaders like ScottGu, Phil Haack, and Eric Lippert, to name a very few.
  • TEDtalks is a great way to see some bleeding edge ideas (plus, you can waste a bunch of time looking at other cool stuff too!)
joshua.ewer
+1 for trolling SO. I have learned a lot from this! Thanks for the links.
Anders
A: 

First, Stack Overflow. See this question about books, this one about web sites, and this one about things every .NET programmer should know (similar to an entry on Scott Hanselman's blog).

Also, I'd recommend the tutorials and articles that you'll find on the 4 Guys from Rolla web site.

At a higher level, you'll want to look in to Agile methodologies: books are discussed here on SO as well as other resources.

Once you have some experience under your belt in C#, be sure to get Jon Skeet's "C# in Depth" book!

Update: One other thing - I found that having ReSharper installed in VS was very valuable. It is great for drawing attention to those parts of your code that deviate from best practices. For example, I use a camel case variable naming convention but, well, sometimes I forget. ReSharper pointed out my misses. Also, it often helped me figure out more efficient constructs for a number of common operations or pointed out places where I could pull declaration and initialization together. Great stuff...

Mark Brittingham
Ahh, the bible of the religion of Jon Skeet :D. Will definitely check this one out.
Anders
Yes - although I was trying to provide a wide range of resources that I've found useful here and elsewhere. With that being said, Jon's book made me a materially different C# developer.
Mark Brittingham
A: 

http://www.asp.net/learn/ has videos and text tutorials in C# and VB.NET. I think it would be an excellent resource for you!

Jim Schubert
A: 

I'm self taught, and this is how I did it.

Take an inventory of your other interests and hobbies, pick one that you could extend by writing a little program for it (I built a stock market database with Python and MySQL, and I have a friend who is building an iPhone app for birding).

Then pick a good scripting language. I would suggest dumping C, C#, C++, Java because the time to implement a little project gets too long, and then it's not fun any more. I would suggest Python or Lisp, and use an SQLite database if you need a persistent dataset. If your project would like to have a server for HTML or data exchange via JSON, XML, Atom, I would suggest Google App Engine because it is so easy to get started (and free).

Another couple of good things about Python is that you will not need to get any books for it. The online documentation is great. And if you need to work something out, the interactive session works as a nice scratch pad.

Scan through the docs or a book the first time, start building your little hobby project, and then you'll have a better idea of where to look for information to solve all the little problems and questions you'll have.

Kris Walker
+1  A: 

Read. Read a lot. If you want to become a better programmer, don't focus on langauge-specific books like " in a nutshell" or "teach yourself in " or stuff like that, focus on books on concepts. "The Pragmatic Programmer" is probably the first and best book you can read. If you read nothing else, read that one. There are many others but focus on concepts like patterns, object-oriented design, development practices, etc. New languages and technologies will come naturally as you become a better programmer. The Head First series of books is pretty good (in my experience). Also, read blogs. Lots of blogs. They will give you links to other blogs as well as more stuff to read and most importantly they'll give you new concepts to explore. Finally, the only way to get better at coding is to do it. Code a lot. Write code for a variety of things. Find better programmers to review and critique your code (open source is good for this). Learn from their suggestions and input.

Jeff Tucker
A: 

Immediate (Fast)

I think the fastest way to learn any new language/platform is to first try a simple "hello world" like program or two using whatever the de-facto IDE is at the time. (Visual Studio 2008 in the case of C#/.NET). It always seems overly simple and almost pointless, but just doing that usually provides all kinds of information and gives you a feel for how close (or how far) it is going to be from what you already know. I also think it's useful to look at the whole toolset when learning something new. (Unless your intent is really just to learn another language.)

If you get serious about a new language/platform, then I personally think it is really important to fully read through a good book or two on the subject so you learn the details and background that you just don't get from only reading/writing code. I think a lot of people don't do this... and they sometimes still become good programmers, but rarely become great programmers.

Based on the languages you listed that you already know, I'm guessing you'd find it beneficial to learn more about about generic object-orientation principals before fully appreciating C#/.NET. But, if you deal with .NET long enough you'd probably learn most of the important tenants regardless.

And yeah... like already mentioned, nothing beats the learning curve ramp like actually having to use it in your day job.

Longer Term (Not so Fast)

I'm also self-taught. What has worked well for me to become a better programmer (especially a better paid programmer), is to force my self to also learn things that would normally be taught only via structured schooling or professional training. e.g. A self-taught programmer probably has little reason to learn things like database normalization, UML diagramming, pattern catalogs, methodologies, etc., but knowing those types of things well and being a pragmatic programmer can be very valuable (and is a relatively rare skill combination).

There are lots of suggestions for good books here and I'd agree with most of them if you learn fast from reading. If so, then I'd suggest checking out some of the online libraries available too:

Safari seems expensive at first...unless you were planning to buy more than a book or so every month. I much prefer real paper books for lengthy reading. (Maybe the Kindle will come down to a reasonable price someday and they'll integrate Safari there. That would be cool.) But, I still find Safari really useful when I'm learning some new technology/language/whatever. I checkout some relevant books there and then skim through to get a decent overview of what all is involved.

If you like to learn through lectures and college like curriculums, you might want to check some of the online offerings, like:

This isn't my favorite way to learn, but that these are offered for free is amazing to me. Some of the subject matter covered is hard to find in books or to self teach.

kaliatech