Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.
If this question can be reworded to fit the rules in the help center, please edit the question.

12 Answers
12

Self-education is not just good, but essential if you want to be an above-average developer.

The only person responsible for your professional progress is you. Sure, formal education, training courses, etc. can help, but at the end of the day, it is your career.

I'm fortunate enough to have benefitted from a very good education, and I have had good employers who have supported my learning in all sorts of different ways. However, the vast majority of what I have learned about programming I have picked up myself - by reading lots and practicing more.

Generally the more you know the more self learning becomes the only efficient way to teach yourself things.

Courses are great when you're just starting out as a kick start but after that you get a diminishing return for days sitting in a classroom as the course moves at the pace of the slowest participant. Once you've got a reasonable level of experience that's almost never you so you're always going to be wasting time.

Self study on the other hand allows you to pace yourself. If you get something quickly you can skim along, if you don't understand it go back and go over it again. If you think a topic is irrelevant you can ignore it.

What I've taught myself? In terms of things I've learned from scratch: HTML, ASP, VB.NET, JavaScript, LotusScript, a bit of Python, a bit of Java.

But in reality almost everything useful is self taught on the job. You may learn the basics on a course but where you really learn it is using it so I'd say 95% of what I know (if not more) is self taught.

Self-education is the core of programmer learning. University, colleagues, they all give you tips and hints when you need them but you still have to learn the larger part on your own. Books, blogs, articles, documentation, experimentation on your personal time, that's how you learn.

There are several aspects to self learning, the first of course being independent study where you seek knowledge and begin putting it to practical use. This could mean buying some books, studying open source code, experimenting until the wee hours of the morning or (usually) all of the above.

At some point, however, you are going to need one or several mentors to guide you through caveats, tough topics, best practices and solid engineering principles. An efficient self learner will seek these mentors much sooner than later, and get his/her code in front of as many highly experienced people as possible.

I learned BASIC, Pascal, C, PHP, rudimentary x86 assembly without taking classes, but that doesn't mean that I did not have a teacher to call upon when I needed one. So, given the fact that I learned a considerable amount from mentors that I found in the free/open source community .. I'd be hard pressed to say that I learned anything on my own or by myself.

This method of learning is the only method that works for me, reaching far beyond the study of programming.

As all others have said, you are going to have to do a lot of self-study as your career progresses. One thing that I haven't really seen spelled out here, though, is the reality is that you will find it very difficult to find that first job without some formal education in a related field, especially in a recession. A lot of resumes pass over the "filtering desk," and if there is nothing on there with related education on it, it is likely to be passed over. You may squeak by if you have a lot of related experience, but it depends on how closely somebody reads your resume (which, in the first round, is unfortunately not very likely). It's unclear if this applies to you, but it will apply to somebody, I'm sure.

On a (somewhat) unrelated note, self-study is great, but having the time to do so is even greater (and more rare, I would argue). We all fit it in somehow, but if you are given the opportunity to take some time each day to work on learning something, grab it and hold on with all your might.

Delphi.
I've learn Pascal in high-school and see once the IDE, like it, download some tutorials and start learning. And today, continuing the learning process. When you self-learn there are good parts and bad parts:
1) self-learning is the best method to learn, because you really understand what's happening there (good part)
2) you can make big errors by misunderstanding something/get a bad habit and then if you're continue in this manner, is very difficult to correct this.(bad part)

I learned most of my C/C++ knowledge in class, but all of my other programming languages, all of my theory, all of my project management, and tons of other knowledge that makes me the hacker I am were self-taught.

As others have said, self-education in our industry is not just good, it's necessary. This isn't like being a plumber or baking bread: technology is always evolving, and we have to move with it or become irrelevant.

It's worth asking: what are the implications of this? The best hackers aren't just code monkeys spitting out code -- we take the time to learn the big-picture stuff. Algorithms, complexity, language design, etc. will stay with us and serve us well no matter what language we find ourselves using, or what we find ourselves using it for. I've seen this type of hacker jump from one part of the tech industry to a completely different one, effortlessly.

Too many people think the "big picture" concepts are above the heads of all but academics, and I strongly disagree. When you take the time to learn them, you'll find that some are already practiced intuitively by good coders, and the rest make sense once you've become familiar with them.

Self-education is necessary unless you have a generous benefactor willing to support formal training time and time again. I've had to learn a lot of things on my own outside of a class room, to name some of the bigger ones:

ASP and ASP.Net would be things I had to learn on the job as where I worked wanted to make the new site re-write use these and thus I had to pick this up on my own rather than in a classroom.

IIS and MS-SQL Server would be another couple of things that I learned about as I needed and thus I'd say I was self-taught here. While I did have co-workers that could help with questions if I got really stuck just getting my head around these was something else back in the early days of my career.

AJAX would something a that a handful of years ago now I learned on the job in researching frameworks and trying to bring it into where I worked just before the Microsoft ASP.Net AJAX launched.

At the same time, only doing self-education can be dangerous as not everyone wants to do everything this way. For some people they may want more structure and not be so independent in driving their way through learning something.

@Kramii is correct; programmers will have to self-educate throughout their career

Q: What have i learned successfully by myself?

A: Everything

Teaching is a myth; the teacher can only make the information available, the student must listen and decide to learn or not, and what to learn. The teacher can only show you the path. In other words all education is fundamentally self-education

Now if you just mean 'what did you learn outside of a classroom that was useful', my answer would be

A: Almost Everything

because when I was in school the universities were in general 12-15 years behind the market in what they taught. For example, during the day the university was 'teaching' me procedural programming using PL/1, and at night I was writing an object-oriented programming language in Assembly.

The gap has become much smaller. Many compete for CS faculty positions and so they try hard to teach relevant stuff. Although, MIT has been hell-bent on Scheme for a while. Anyhow, companies can also get out of touch. While schools do not really teach Cobol anymore, some companies still use it.
–
JobDec 10 '10 at 15:45

@Job: the gap has become much smaller at some schools. There are still a lot of programmers being churned out of so-called 'java' schools; these schools don't teach advanced/current techniques at all. They don't even teach Java programming very well, from what i've seen.
–
Steven A. LoweDec 10 '10 at 16:53

Hm ... this leads to a decades-long argument about the right mix of theoretical and practical classes to be taught. Some will complain that there are not enough theorems; others (probably the majority) will complain that there is no class in their school on iPhone development.
–
JobDec 10 '10 at 17:21

@Job The top universities barely teach any specific industry software, they stick with theory and generics and assume their students are smart enough to pick up the tools and best practice independently.
–
OrblingDec 10 '10 at 19:28

Apparently all answers agree that self-education is everything. I don't think that's completely right. A good teacher can teach you a lot and especially can teach you fast. Obviously at some point you have to take the matters into your own hands and start researching, reading, trying. Even a book is written by someone (a teacher) and tries to teach you something. That same person could be standing in the room and replying to all your questions instead of making you waste time in searching. Searching and banging your head against the wall on the other hand will make the lessons learned very valuable and unlikely to be forgotten.

Especially for starting in a new subject I think a good teacher is very very very helpful. And those who are so keen on self-education should self-educate without wikipedia, without stackoverflow, without books and without blogs ;-)