If we let ourselves, we shall always be waiting for some distracton or other to end before we can really get down to our work. The only people who achieve much are those who want knowledge so badly that they seeek it while the conditions are still unfavourable. Favourable conditions never come.
- C.S. Lewis, "Learning in War-Time"
Learning about what we don't know is often more important than doing things we already know how to do.
Context
- You have picked up a basic set of skills.
Problem
- You have a low level understanding of software development.
Solution
- You've been drinking steadily through a straw, but it's time to drink from a fire hose.
- Read, watch, attend, participate. Know when to apply the fire hose and a straw. Don't over due both.
Action
- Attend a local user group within the next month.
- Research a related national conference you'd like to attend.
- Start reading a book by one the conference speakers.
- Contact the author with some questions after you're finished with the book.
Context
- You want to get better at things and to develop Concrete Skills in those areas.
Problem
- You're not given the room to experiment and try things, (even if you're completely wrong, you want to prove it to yourself why).
Solution
- Take the time to practice without any interruptions, in an environment where you can feel comfortable making mistakes.
Action
- Find an exercise in one of these books (Programming Pearls, More Programming Pearls, Etudes for Programmers), and create one of your own.
Context
- Experience is built upon failure as much as success.
Problem
- The environment you're in doesn't allow for failure. Where you try bold things and aim high.
Solution
- Pick something that interests you, something that you'd find fun to research and build it.
Action
- Find something fun you'd like to build and spend some time working on it.
Context
- We find the source of truth by reading the source code of someone's program, not by talking to them in an attempt to get their intentions.
Problem
- You may not have people to proofread your work and give you feedback.
- You may not be reading enough source code to know that yours need improvement.
Solution
- Be able to read source code and understand what it does.
Action
- Pick an algorithmically sophisticated open source project and browse it's source code. Write a blog post about it, identifying the algorithm, data structures, and design ideas that are new to you.
Self-examination is hard, but I believe we can learn more from studying our failures than from our successes.
Context
- You may be promoted, but not be prepared based on your skill level.
Problem
- As the number of years and projects you have under your belt increases, you find yourself awaiting the epiphany that will magically make you "experienced."
Solution
- Become skilled rather than experienced.
Action
- Draw a Personal Practices Map for your working habits. Concentrate on the connections between any practices that have not changed in a while. Ask yourself how your map would change if you discovered that one of those practices was actually counterproductive. Closely examine one of those practices and find out if there are other ways to achieve the same goal. These don’t have to be better ways; it’s enough for them to be different. Now ask yourself what would happen to your map if you were to adopt one of these different practices.
Context
- You keep doing things repeatedly, but the details escape you.
Problem
- You do not learn from you past.
Solution
- Keep a journal or a blog. Where you keep record of what you learned. But don't just write down things and learn it there; revise your material often, making sure that the data is up-to-date.
- You could have two journals a private one where you're more honest and open, and a public one where you're more comfortable sharing the things you struggled with and their outcomes.
Action
- Grab a notebook, and start jotting down your thoughts about these topics and the ideas that come to your mind. In the future they might become a blog post, an article, or even a book.
Context
- You have been an apprentice for a little while and people have started to look to you as a source of knowledge.
Problem
- Up until now you have been focusing on your self improvement. To become a skilled developer you'll need the ability to communicate effectively and bring other people up to speed quickly.
Solution
- Try sharing the lessons you have learned.
- If possible prepare a presentation.
- This doesn't have to be on an in depth talk.
- Depending on the subject you could try to simplify it as much as possible to make it friendly.
- "When one person teaches, two people learn."
Action
-
Think back to the last significant lesson you learned. Write a blog post about it. Provide the information you wish had existed and that would have helped you learn.
-
Having written the blog post, imagine you’re being asked to prepare a workshop for a conference that will teach other people the same lesson. Sketch out that workshop. See if the act of thinking about how you would teach others in an engaging way causes you to rethink the lesson and the blog post.
Context
- It's hard to evaluate yourself. Success or failure tends to come as a surprise to you. When you receive some sort of feedback, instead of good it does more damage to your self-assessment.
Problem
- It will be difficult to have a self-assessment based on your team, as the skill level of your team mates may vary.
Solution
- Try gathering some sort of objective data about your performance sooner than later.
- Pair programming.
Action
- Find something in your working environment that you can measure and, more importantly, affect. Track that metric for a while. As it changes, ask yourself what it’s telling you about your world. See if you can use it (and other metrics) to understand the effects of the changes you are making to your working environment.
Context
- Failure is inevitable. In fact, someone who has never failed at anything has either avoided pushing at the boundaries of their abilities or has learned to overlook their own mistakes.
Problem
- You learning skill shave enhanced your successes, but your failures and weaknesses remain.
Solution
- This is not about wallowing in self-pity about past mistakes nor is it an exercise in seeking perfection. Instead, the goal is to gain self-knowledge about the patterns, conditions, habits, and behaviors that lead you to failure. Armed with that self-knowledge, you can make conscious choices and temper the tendency toward idealism when applying Draw Your Own Map with an awareness of your boundaries and limitations.
Action
- *see book for details