When I graduated from college, I had a semi-functional understanding of Visual Basic .NET. I had a C class and several Java classes but my very limited student worker job experience was in VB.NET. My first job was in a VB.NET shop so life was pretty good for the next 2 or so years. I worked on getting my understanding of coding to be functional. At this time there was no patterns, or techniques. It was just good old get the job done and to hell with maintenance because that is tomorrow me’s problem. Then life got bad and I wanted a new job. The issue? C# was king and I didn’t know it. I had to learn a new language.
C# is not that different, heck you had Java and C experience.
That is true. I remember taking a test from a head hunter. Even though, I had told him my entire C# less work history, he wanted me to take a C# test anyway. I scored a 78%. A heck of a good score 4 years after I saw any C syntax language. However, not good enough for the job. So I embarked on learning the C#. This was a very different experience. I was a pretty awful programmer. More of a hacking scripter than a classically trained programmer. I was clever and used what I knew to execute so I was not down and out on myself even with my failure.
So you learned a new language, whoopee.
It was more than that. I did not really understand programming. I had to train myself using nothing but my motivation to complete it. It was an interesting experience. I did not realize how many people could not do that task until years later.
The Rough Learning
Before all this new training started, I had to learn a few lessons. One of the first was learning about basic PC Support tasks of deploying PC and transferring data. This was a pre-req of doing the development work I was hired for and I made the agreement to do it. I hated it but I did it anyway. Then there are the stories, some of the best of my career. That’s a topic for another day.
Next we had to set up a web server for an intranet. We needed a deployment platform for the instruction on how to This required me to learn about Apache, Apache Security and MySQL. We did after all set up a WAMP stack. During this time, I was pushing through a couple of VB.NET books. A Introduction to Programming Using Visual Basic .NET and Using Visual Basic.NET. The former was my VB.NET textbook and the latter was a book everyone in my group thought was the God edition of the language. We were stupid kids.
Even after learning all those that, I was really only a level 3 or maybe a 4 in Visual Basic.NET on a 10 point scale.
The Carpet Get Yanked
Then we ran into the first massive barrier. My group committed the cardinal sin in the bureaucracy. A sin so heinous, so serious that it may never be forgiven. Our little rag tag shop completed a project. On time and under budget, that shit had to stop. On a grey day in October, the big boss retired. In November, our world ended, the new big boss was announced. He was not a friend of our big boss and so his favorite toys, my group, was cast out to the desert of ineffectiveness know as the IT division.
My new boss knew my first name after he read it off of a sheet of paper. He had no idea of what I was useful for or what I did or even my last name. One day, I was a Visual Basic Developer on the rise and the next a PL/SQL programmer working on Oracle. So I got to experience formal training procedures for the first 2 weeks. It was not pretty. On the bright-side, he turned out to be one of my best bosses.
This is getting long winded, can you get to the point already?
So all these different technologies, in different areas of IT, made me stretch and strain. If there was a way to learn IT, I had played with it by my third year of my career. When I wanted to go back to .NET but was facing the obstacle of C#, I devised my method for learning a new language.
First, find the most basic, painfully redundant beginners book you can find in the language you want to learn. The simple reason is that different languages focus on different concepts of computer science. If you knew them before, you forgot them now. You need to learn it. The advanced books treat it as understood. You don’t understand it. The bright side is the book can be old and there for cheap, you are learning the most basic concept. If’s and while’s don’t change. The more advanced you are, the faster you will get through it. When in doubt, grab the Head First series.
Second, follow it up with another beginners book. Drilling requires repetition and you need the practice. It will also give you a chance to fill in whatever gaps are present in your current knowledge, slowly. Give new ideas there fair share of time to peculate. Again this will be fast. My favorite source is a good YouTube beginners tutorial on double speed or the Learning series from O’Reilly.
Now you are likely a level 3-5 developer and are dangerous. Finally get a intermediate book, I like the Programming series from O’Reilly and go a layer or two deeper. This will be much slower going but at the end you have about a 3 or 4 weeks of reading and practice and have all the tool to be a competent if unspectacular developer on that language.
Wait a minute all that tedious work to learn a new language and I have tools to be competent. Why am I not competent?
The simple answer is that you have not experienced the language without training wheels. You need to spend the next few days or weeks, practicing all those new things you learned. Apply design patterns in the language, make 4 function calculators and fractional calculators. Work out how to unit test and deploy things. You need to play and make things.
Oh yeah, there is one other thing. You are not going to like it but try this entire process on a language you have experience in already. Do it on one that you already know. Practice the process and you will likely learn things about your anchor language that you never knew or forgot. Cleared up muddy areas in your vocabulary and theoretical understanding. It really is an interesting experience to be a beginner again without having to focus on syntax or basic technique. You might be surprised how many things you had the opportunity to learn but where not listening as the overwhelming mass of beginning programming smashed into you when you learn a new language the first time.