The British Columbia Institute of Technology recently asked me to speak to new students about my career path. What are my recommendations for a successful career? for learning software development? Here are seven ideas (since I am a magician, I called them "magic" tricks to career success).
- Become a code butler. This is hard because most people will disagree with this approach. You're not the boss. Your job is to provide information and to do what you're told. That's why they pay us the big bucks.
- Guard your life. Do not work too hard. It can be tempting to work more than 40 hours per week. If you do work more than 40, make a hard stop at 50. If necessary, reactivate your life: plan enjoyable activities, self-care, and involvement with family and friends.
- Set S.M.A.R.T. Goals. Specific, measurable, action-oriented, realistic, and time-limited. Distinguish between ultimate and immediate goals (hint: the latter should take less than one hour). Write down your ultimate goals somewhere. It does not matter where. I wrote down some goals on my blog.
- Embrace dialectic. Question yourself. Aspire to Socratic disinterest. Expose your ideas to the light of day: write a blog, write a book, contribute to open source, answer forum questions, share your ideas in public presentations.
- Make a serious study of assertiveness. This will also involve learning to keep your anger on a leash and learning to make your fear your agenda. The Assertiveness Workbook by Randy Paterson is a terrific resource.
- Let go of perfection. Focus on 80%. Avoid demanding perfection of yourself and of others. Realize that few people demand perfection of you. If they do, that's where assertive becomes helpful.
- Keep your appointment with your Self. There is something inside us all that is worth listening to. Some Jungian's call it Self, some Christians call it God, some Buddhists call it Buddha Nature... whatever it is, it summons us to do something with our life. Without violating practical responsibilities (the mortgage and RESP payments are important), answering this call, to the extent possible, gives our life meaning, purpose, and passion. "What would you do if your life were important?"
Learning Software Development
- Read the official docs or specifications. The effort is worth it. Blog posts and StackOverflow answers can be very helpful; the official documentation and specifications, though, teach us much more. Find the RFCs. Refer to them directly.
- Focus on fundamentals. Learn design patterns, algorithms, and security. Knowledge of these will pay far greater dividends than will knowledge of the newest technology fad.
- Go deep on one language, topic or framework. It does not really matter which one. I chose C#.NET. It is worth checking out trends to make sure to choose one that might also lead to employment.