I have got good grades and ~ 10 years of professional embedded s/w development. However I have come to realize that and also been pointed out in performance appraisals that although I have good theoretical knowledge and have even read lots of programming books - Code complete, pragmatic programmer etc.. , my hands on practical knowledge is weak and I am unable to translate my theoretical ability into practical expertise. I need to figure out a plan on how to do this. Any ideas in this regard? EDIT : I take too long in understanding specs and in developing code and and miss some aspects in development particularly domain knowledge.
|
|
The simple truth is that in order to gain practical programming experience, you have to actually program. While theoretical knowledge is great in guiding you toward solid, efficient and proven solutions, many facets of programming cannot be learned from a book (and I believe this to be true for any craft). There are no shortcuts. A master violinist has inevitably done over 10,000 hours of dedicated practice; a master chef has spent over 10,000 hours in the kitchen; to become a master programmer, you probably have to spend over 10,000 hours writing code. If you want to be good at anything, exercise. Write code, lots of it, and try to keep it challenging at all times - aim at a difficulty just at the top of your reach. If you do the same thing over and over, the benefit will rapidly decrease after the first few rounds, so aim for (partially) unknown terrain with every new project. BTW, it is OK to not finish most of your projects: once you feel there's nothing more to learn for you on this particular project, leave it and start a new one - just keep in mind that actually finishing a project is a crucial skill, and you will need to learn it at some point. Additionally:
Keep one thing in mind, though: There is no replacement for actually doing the thing you want to learn, so program. A lot. |
|||||||
|
|
Practical knowledge is really just another way of saying 'experience'. There's only one way to get experience, and that's why experiencing things - working, writing code, starting and completing projects. Also keep in mind the old question
In other words, if you keep 'experiencing' the same things then you aren't gaining any new experience. |
|||
|
|
Someone else must be gathering specs which leaves you out of the loop on understanding the domain. You need to take some time to have people teach you about what they do and why they do it. I've been asked to do some software training, but I'm also taking time to learn more about the domain. This will help both sides when it comes to new feature requests. Looking over a user's shoulder and asking questions is beneficial as well. Ask to read other documentation like office manuals or literature in the area. Read the websites your users read. As much as you may not be interested in the domain information, you'll need to force yourself to learn it or suffer the consequences in your reviews. |
|||
|
|
|
If you have studied for a long amount of time without actually practicing programming you've missed out a great part. The best and best way to learn is not theoretically, but practically. Most programmers you will ask "What is a good way of learning X language?" they will tell you to write some code in it. If you've never written code but learned theory you should try to put into practice what you've learned as soon as possible, get a compiler or an IDE for the respective language and get to work. As long as you know some theory you should be alright, but if you still find that you are lacking many things so far, you should start from scratch and learn that language WHILE practicing it. Recap what you've learned, expressions, basics, systems, structures, etc and write them in code. The best way of learning practical programming is by actually doing it. |
|||
|
|
|
There is an old joke: "How do you get to Carnegie Hall?"... "Practice". Pick a programming language you want to work with and go here: Write programs to solve the puzzles... and practice. |
|||
|
|
