This is very Microsoft-centric, but is still probably the best resource on the Internet for programming. (If anyone knows of anything better, I'd LOVE to see it.)
The Code ProjectI say that it's the best resource because it's simply FULL of open source software projects
with complete tutorials. Some are more complex than others, and some have problems, but still, there are just so many there that it would be difficult for you to imagine something that there isn't at least a partial solution for it there, or a related solution.
There are articles there for C#, VB.NET, F#, iPhone, Android, C++, LAMP, Java, and a lot more. There are desktop, server, web and mobile tutorials. Everything.
You will be very hard pressed to find a better source for learning. Especially if you like to learn through examples.
I've found that examples are almost 100% necessary for a lot of SDKs and APIs. Often they are so complex, and so convoluted, that unless you spend several weeks learning them inside out (for the smaller ones -- years for larger ones), there's no way for you to possible begin to use them. Even relatively simple things can be nearly impossible to do unless you are shown how to do it.
Here's an example.
Imagine you need to create a list. A very long list. It doesn't matter what it is, but let's just say that we're creating a list of phone numbers and people's names. The format is really unimportant, but let's just say we follow this format:
<Last name>, <First name>, <phone number>
Simple comma delimited, and very easy to handle.
Now, the list will be 1 person per line like this:
Doe, John, 123-4567
Doe, Jane, 987-6543
Smith, Jake, 456-7890
etc.
Now, in C# (.NET or Mono), you can create a string to hold the list like this:
string myList;
You can create an entry like this:
string last;
string first;
string phone;
string line = last + ", " + first + ", " + phone;
So, there you have a "line" that you can add to "myList".
So, you can add a person to the list like this:
myList = myList + line + "\r\n";
"\r\n" is for a new line.
So, that's all pretty easy.
However, if your list is long like first mentioned, you just cannot do things that way. It will NOT work. Sure, the logic is perfect, and theoretically it *can* work, but it won't for practical reasons: the time it takes is too long.
Instead, you need to use a StringBuilder:
StringBuilder sb = new StringBuilder();
And you would add people like this:
sb.AddLine(line);
That will increase performance and your long list will work.
When you are done adding people, you simple get the list like this:
string finalList = sb.ToString();
So the *REAL* problem isn't *the problem* (creating a long list), the real problem is that there is a special way to do it that nobody ever told you about... Yuck.
There are SOOOOO many special tools out there that it's almost impossible to know them all.
Sure, you *could* do it in C. Heck, you can do anything in C. For that matter, you could do it in assembly language too. However, as a human being, you have a limited lifespan, and will likely die before you manage to finish getting anything useful done in either C or assembler. So you're stuck with using a much higher level language that has a lot of arbitrary ways of doing things that you simply cannot know beforehand, unlike C or assembler that have a very small set of functionality that you can exhaustively know.
With things like The Code Project, you can get all those examples that show you how to get things done. It's just so much faster and easier if you can see it done rather than having to figure it all out yourself.