The c2 wiki never ceases to amaze me. It carries the evolution of ideas and thinking about software development. A lot of those ideas are good Life Hacks too. Every time I go there to read, I find it difficult to leave. There are lots of good ideas there to reflect on. Here is one of them.
Situation: You have a push-down stack for all your goals. When you hit an obstacle, you push “remove the obstacle” onto the stack. Then, when the obstacle is cleared, you pop the stack, and you are back at your original problem.Problem: For some reason, the problems you push onto the stack keep getting bigger and bigger and bigger, dwarfing the original problem, each one dwarfing the one before it.Forces that seem to make this problem necessary or inevitable:
- A stack is easier to understand and use than some more complicated goal structure. And, goals seem to be hierarchical. Stacks are good for traversing hierarchies.
- The bigger problems, if solved, will make a number of other problems easier, not necessarily just the one you originally wanted to solve. They may have value in their own right. They are worth solving thoroughly.
- The goal inflation is not infinite; it seems that the goals shrink down again to something reasonable after the stack gets to a depth of about seven or so.
- If you’re just having fun, you might have fun exploring all these different things.
- But you’ve only got so much time, and you don’t want to give up your original goal, nor do you want to delay it for years and years. You feel like you are working on the irrelevant.
My own push down stack of hierarchy of needs for Build Skills (just to make it easier to read, I have reversed the stack).
- What skills will have most impact?
- Job Skills for students – because it helps them to leverage learning to find (better) jobs. But it also gets them an early start to focus on things that matter in real life.
- What are Job Skills (I focus on tech jobs because that is what I know best)? Software Skills and Communication Skills.
- Software skills gives them knowledge and confidence. Both are needed to get good jobs from cool companies (BTW, my concept of good jobs is certainly not working for one of the Big Companies). In the beginning every one should work for small/medium startups where their work has some impact.
- How do they acquire software skills? They can start with a simple yet powerful language like Python (or Ruby, PHP). They need to build something useful and usable.
- Why communication skills? For a developer, communication with the team is very important.
- What are specific ways of practicing communication skills in software? The Programmer’s Food Pyramid has a nice model to start with.
- They have to learn to explore, experiment. They also need to learn to learn.