Note: I can only speak from personal experience on this issue, so I could use more input.
To say that I have been “programming” since I was 13 would be a stretch. I knew how to write code, but I was crippled by how much Visual Studio.net generated automatically for me. I never learned many of those automated tasks manually.
Aside from a programming class in high school with a fantastic teacher, I’m entirely self taught. Being self taught is usually viewed as a great thing, though I cannot figure out why.
Like a British person’s teeth…
For an embarrassingly long time I had large “gaps” in my knowledge. As one of many early personal examples, I never learned how to properly use for loops, so I tended to avoid them. In addition, I didn’t realize you could access indexes in arrays with variables, and would instead copy and paste lines several times, filling in hard coded numbers.
Today, I still suffer from this. All but the most basic and common design patterns are still unfamiliar to me. In fact, properly organizing large projects is still a mountain of a task. I’m not done learning.
Perhaps this problem would not exist if I had taken a single course from start to finish. I would take on new information one idea at a time and in an organized manner, rather than jump around from tutorial to tutorial picking up bits a pieces, missing chunks along the way.
The dreaded intermediate phase
There are beginner guides galore to any programming language or library you could imagine, from professional companies such as Lynda and Envato, to independent bloggers such as Untold Entertainment, Michael James Williams and Emanuele Feronato.
Alas, few beginner tutorials prepare you for the “road ahead”. In my experience, the most difficult stage in learning a new language is \“I know the basics and the syntax. Now what?\” During the “intermediate” phase, technical manuals and papers are too advanced, while beginner tutorials are too simple. Either there are too few resources for intermediate developers, or they are too diffiuclt to find.
It certainly isn’t a help when beginner guides will take shortcuts (such as using timeline code rather than teaching to properly write classes) in an effort to make the new information easier to absorb. But similar to the “automatically-generated-behind-the-scenes code” in Visual Studio.net, this may have crippling effects on the students.
Can you really call yourself self taught?
On a related side note, successfully self-taught musicians sit down with their instrument of choice, and after much practice one day produce golden melodies from the tips of their fingers (or lips, depending on the instrument).
Can the same really be said for developers? I doubt anyone has summed up their history with “One day I sat down at a compiler, not having read a single book on Objective C. It was hard at first, but after months of trial and error, my fingers eventually produced gold.”
Yes, you may not have gone to an “official” school, but most books and online tutorials are set up in a manner similar to how you would learn a subject in a standard classroom.
Perhaps all the self-taught developer can say is “The internet taught me.”
What about you?
As mentioned, I can only speak from personal experience on being self educated. I have not taken any college level classes on software development, so I can’t compare my expertise before and after the course. Would I still be facing the same problems after leaving college, or did I miss something crucial learning on my own?
I need more input. Are you a self taught developer? If so…
- What has your experience been learning to become a better self taught developer?
- Are there more hinders self-taught individuals face? How can they be overcome?
- How do you overcome the “intermediate phase” of learning a language?
- Why is being self taught considered a positive thing? Is it?