My friend wants to learn programming. Should he learn with a teacher, or learn alone from the internet or a book? Learning alone things can be a great skill in this era, but, is this actually good? Is it better than a teacher? Should he pay to a teacher, instead of learning alone?
That depends entirely on they way he learns best. I prefer a classroom where I can interact and ask questions. Others learn better alone and undisturbed.
To save money, have him try learning alone first. If he finds he is not making any progress take an intro course.
Different people learn in different ways. Some people will learn well, even better from a book, or off various webpages. Others will learn exponentially better from a teacher.
I'd say, sit him/her/it down with a book and/or a good website and see if they can self-learn. It's a free place to start. If that doesn't work, then perhaps a teacher is a good idea.
That said, having someone that can talk to that does know programming is always a good thing. I suppose that's what sites like SO are here for, as far as self-learners go. Books are great, but when you get stumped, having someone to bounce an idea off of to get you unstumped again is a great help.
Disclaimer: I'm very much a self-learner and self-taught, so I'm liable to be biased.
I'd agree with the statements above. Especially, very early on, getting a good grounding in the basic concepts of programming is very important, and your friend should pursue whatever method he/she learns best with.
If your friend is going to go the teacher route, he/she should be aware that no matter what, at some point in picking up programming, there will have to be a lot of independent book (and online documentation and support communities) learning.
When I teach programming and related skills I have found that people vary enormnously in how they learn best. I have found at least the following:
- Formal lectures. (I hate doing this but some people like the structure)
- Class workshops.
- Guided reading through a book
- Solving a problem
- Being mentored
- Working through other people's code
Of these 1 is not possible for your friend. I used to help run a virtual course for guided reading (in fact it was the first course on the 'Net, 1994, run by Marcus Speh on "Object Oriented Programming in C++ and won a best of web prize). Working on an open source project (4) is an option.
When I was in a company I ran a self-help programming course on C++ (using VaxNotes!). If there are no self-help guided programming courses on the web then there should be!
Does he even like programming?
I'd suggest that he should start reading about the subject. And then follow this:
if ( he.likes("programming") ) {
if ( he.isSelfLearner ) {
he.buys("book");
} else {
he.goes("course");
}
} else {
he.doesSomethingElse();
}
:)
Like Matthew says, different people learn in different ways - but to really understand things you need a blend of different sources. Just learning from the internet is likely to lose a lot of the context and often examples are stripped down and simplified to make things easier to understand. There's nothing wrong with that as such, but if you then use those skills in the real world without the 'missing stuff' you can easily develop very bad habits without ever knowing you have them.
Personally I think a blend of book learning, just-in-time learning from Google, keeping up with times via blogs and access to experienced programmers (could be in a classroom, but also community events, taking part in open source projects, work colleagues are just as valid) is required to be a really good programmer. Where you start or how you balance those things is really down to the individual.