Really recommend reading this book. Apprenticeship Patterns
Light read, finished it in 2 days.
What does it mean to be an apprentice?
Overlapping values of craftmanship that stood out to me:
- a growth mindset
- a need to always be adapting and changing based on the feedback you get from the world around you
- a desire to be pragmatic rather than dogmatic—a willingness to trade off theoretical purity or future perfection in favor of getting things done today
- a belief that it is better to share what we know than to create scarcity by hoarding it
- a willingness to experiment and be proven wrong
- a dedication t an internal locus of control—taking responsibility for our destinies rather than just waiting for someone else to give us the answers
- a focus on individuals rather than groups
- a commitment to inclusiveness. We think a useful system should be able to identify and absorb the best ideas from all elements of the software development community
List of patterns
- A Different Road: You have discovered that the direction you want to go is different from the path toward software craftsmanship.
- Be the Worst: Your learning has decelerated as you’ve quickly surpassed everyone around you.
- Breakable Toys: You work in an environment that does not allow for failure, yet you need a safe place to learn.
- Concrete Skills: You want to work on a great development team, yet you have very little practical experience.
- Confront Your Ignorance: You have discovered wide gaps in your knowledge, and your work requires that you understand these topics.
- Craft over Art: You need to deliver a solution for your customer, and you can choose from a simpler, proven solution or take the opportunity to create something novel and fantastic.
- Create Feedback Loops: You can’t tell if you’re suffering from “unconscious incompetence.”
- Dig Deeper: You have only superficial knowledge of many tools, technologies, and techniques and keep hitting roadblocks as you try to tackle tougher problems.
- Draw Your Own Map: None of the career paths that your employer provides is a fit for you.
- Expand Your Bandwidth: Your understanding of software development is narrow and focused only on the low-level details of what you’ve worked on in your day job.
- Expose Your Ignorance: You have discovered wide gaps in your knowledge and are afraid that people will think that you don’t know what you’re doing.
- Familiar Tools: You are finding it difficult to estimate your work because your toolset and technology stack are changing so rapidly.
- Find Mentors: You find that you’re spending a lot of time reinventing wheels and hitting roadblocks, but you aren’t sure where to turn for guidance.
- Kindred Spirits: You find yourself stranded without mentors and in an atmosphere that seems at odds with your aspirations.
- Learn How You Fail: Your learning skills have enhanced your successes, but your failures and weaknesses remain.
- Nurture Your Passion: You work in an environment that stifles your passion for the craft.
- Practice, Practice, Practice: The performance of your daily programming activities does not give you room to learn by making mistakes.
- Read Constantly: There seems to be an endless stream of deeper and more fundamental concepts that are eluding you despite your quickly acquired proficiency.
- Reading List: The number of books you need to read is increasing faster than you can read them.
- Record What You Learn: You learn the same lessons again and again, but they never seem to stick.
- Reflect as You Work: 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.”
- Retreat into Competence: You feel overwhelmed as you are faced with the vast reaches of your ignorance.
- Rubbing Elbows: You have the feeling that there are superior techniques and approaches to the craft that are eluding you.
- Share What You Learn: You are frustrated that the people around you are not learning as quickly as you are.
- Stay in the Trenches: You have been offered a promotion into a role that will pull you away from programming.
- Study the Classics: The experienced people around you are constantly referencing concepts from books that they assume you have read.
- Sustainable Motivations: You find yourself working in the frustrating world of ambiguously specified projects for customers with shifting and conflicting demands.
- Sweep the Floor: You are an inexperienced developer and need to earn your team’s trust.
- The Deep End: You’re beginning to fear that your career is not resting on a plateau, but is in fact stuck in a rut.
- The White Belt: You are struggling to learn, because the experience you have seems to have somehow made it harder to acquire new skills.
- Use the Source: How do you find out if your work is any good given that those around you may not have the ability to tell good code from bad?
- Your First Language: You are familiar with a few languages, but lack fluency in any of them.
Thoughts
Confront your ignorance
Really liked this statement: On the other hand, it is also possible to Expose Your Ignorance without confronting it. People who do this merely shrug apologetically when confronted by their ignorance, as if to say “that’s just the way it is.” This leads to a lifetime of being humble, ignorant, and overly dependent on other members of the team. Eventually, it leads to teams where each member defends her own little silo of knowledge and shrugs when a problem crosses into someone else’s territory.
The Long Road
Although he saw that these exceptional people were miles ahead of him, they were all walking the same road.
Craft over Art
I would describe programming as a craft, which is a kind of art, but not a fine art. Craft means making useful objects with perhaps decorative touches. Fine art means making things purely for their beauty — Richard Stallman in “Art and Programming”
If you starve because you are too much of an artist and your creations are too beautiful to be delivered in the real world, then you have left the craft. If your desire to do beautiful work forces you out of professional software development and away from building useful things for real people, then you have left the craft.
The things we build for customers can be beautiful, but must be useful.
“it is by fixing things that we often get to understand how they work.”
Use your title
Don’t be fooled by an impressive title. Your mother might think you deserve it, but impressive titles and responsibilities do not indicate that your apprenticeship is over. They only serve to remind you that there is a shortage of craftsmen in our industry.
Accurate Self Assessment
It is very easy to rise above the mediocre in the field of software development because too many people become satisfied with staying only slightly ahead of the curve