Co-authors Andy Hunt and Dave Thomas discuss their book 'The Pragmatic Programmer' emphasizing the craft of programming, being a jack of all trades, and continuous improvement. They highlight the mindset of a pragmatic programmer, offering tips like caring about your craft and thinking consciously about your work. The podcast explores strategies for investing in your knowledge portfolio, staying relevant as a programmer, and the importance of effective communication in software development projects.
Programming is a craft that requires listening, advising, interpreting, and engineering skills.
Being adaptable in technology choice and having a diverse background are essential for programmers.
Continuous improvement through small daily actions is crucial in programming.
Investing in knowledge and skills regularly is necessary to stay relevant in tech industry.
Quality software delivery should be balanced with project deadlines by engaging stakeholders.
Deep dives
Stone Soup - Stone in boiling water
The soldiers returning home from war were hungry. When they saw the village, their spirits lifted. They were sure the villagers would give them a meal. But when they got there, they found the doors locked and the windows closed. After many years of war, the villagers were short of food and hoarded what they have. Undeterred, the soldiers boiled a pot of water and carefully placed three stones into it. The amazed villagers came out to watch. This is stone soup, the soldiers explained. A villager ran off, returning in no time with a basket of carrots from his hoard. A couple of minutes later, the villagers again asked, is that? Well, the soldier says a couple of potatoes would give it body. Another villager. And more and more, so that's the end of the quote, but more and more, the villagers keep asking like, well, what else could we add? What else could we add? And by the time that they're done, they have this amazing vegetable soup that they share with everyone in the village. So the idea is that instead of being deterred or discouraged or frustrated that they couldn't get vegetables and food from these villagers, they did what they could, which was put stones in a pot of water and start to boiling them. And that action on their part was a catalyst for change that inspired everybody to like participate and be that catalyst for change.
Software Entropy - Broken Windows Theory
The broken windows theory explains how one broken window left unrepaired can lead to a sense of abandonment and eventual decline in a city. This concept extends to software development as well, where not fixing small issues can lead to deteriorating code quality and software rot. By addressing and not leaving 'broken windows' in the codebase, software developers can maintain a high level of quality and prevent decay in the overall system.
Quality Over Perfection & Early Feedback
Focus on delivering great software promptly rather than striving for perfect software in the distant future. Providing users with a prototype early can lead to valuable feedback and improvement opportunities, guiding the development towards a better final product. Companies often balance between shipping software with some imperfections versus delaying releases for extensive bug fixing, considering the trade-offs between timing, features, and quality.
Regular Investment in Knowledge Portfolio
Similar to managing an investment portfolio, regularly investing in your knowledge and skills is crucial as technology evolves rapidly. Treat knowledge as an expiring asset that requires continuous renewal and growth. Just like maintaining and growing a financial portfolio, allocating time for learning and skill development ensures that your knowledge remains relevant and valuable in the ever-changing tech landscape.
Continuous Learning and Growth
Investing in continuous learning and skill development is essential for staying relevant and competitive in the dynamic tech industry. Treat knowledge as a perishable asset that requires regular updating and expansion. By dedicating time and effort to learning new technologies, best practices, and industry trends, you can enhance your expertise and adaptability, ensuring long-term success in your career.
Balancing Quality with Ship Dates - Trade-offs
Navigating the balance between delivering high-quality software and meeting project deadlines often involves trade-offs. Understanding when to prioritize quality standards over expedited delivery is crucial. By making quality a key requirement issue and engaging stakeholders in the decision-making process, developers can ensure a sustainable approach to software development that aligns with business objectives.
Empowering Change and Innovation
Being a catalyst for change involves inspiring progress and innovation in software development. Encouraging a culture of continuous improvement and fostering a mindset of adaptation can drive positive transformations. By embracing change and taking proactive steps to enhance processes and technologies, developers can drive innovation and contribute to ongoing success in their projects and organizations.
Emphasizing Craftsmanship and Quality
Prioritizing craft and quality in software development ensures the creation of robust, reliable, and maintainable solutions. Building software with attention to detail and excellence leads to enhanced user experiences and long-term satisfaction. By valuing craftsmanship as a fundamental practice, developers can establish a reputation for delivering exceptional software that exceeds expectations.
The concept of investing in your knowledge portfolio
Investing in your knowledge portfolio is compared to investment portfolios, emphasizing the importance of regularly diversifying your skills, balancing high-risk high-reward investments, buying low, and selling high. The podcast discusses the significance of having a diverse skill set to adapt easily in the future, mentioning examples of investing time in specific technologies yielding different outcomes.
Enhancing communication skills and soft skills
The importance of effective communication and soft skills in programming is highlighted, stressing the need to understand and cater to your audience, choose the right moment, style, and involve appealing ways of delivery. The podcast emphasizes consistent communication, active listening, and responding promptly to maintain clarity and understanding in interactions, providing a list of actionable steps to improve soft skills and communication strategies.
The Pragmatic Programmer: From Journeyman to Master
Preface (Chapter 1)
Welcome to Iteration: a weekly podcast about programing, development and design through the lens of amazing books, chapter-by-chapter
NEW BOOK Pragmatic Programmer
by Andy Hunt and Dave Thomas
This book will help you become a better programmer
this book was written in freaking 1999! I was 7.
programming is a craft
"as a programmer, you are part listener, part advisor, part interpreter, and part dictator. you try to capture elusive requirements and find a way of expressing them so that a mere machine can do them justice. you try to document your work so that others can understand it, and you try to engineer your work so that others can build on it. What's more, you try to do all this against the relentless ticking of the project clock. you work small miracle every day"
"you shouldn't be welded to any particular technology, but have a broad enough background and experience base to allow you to choose good solutions in particular situations"
What makes a pragmatic programmer
early adopter / fast adapter
inquisitive - you ask questions
critical thinker
realistic
jack of all trades
Tips
Tip 1: Care about your craft
"We who cut mere stones must always be envisioning cathedrals."
Tip 2: Think about your work - never run on auto pilot
"great lawns need small amounts of daily care, and so do great programmers."
"1% better every day. 365% bettere every year"
kaizen - continuous small improvements
Tip 3: Provide Options, Don't make lame excuses
basically, take responsibility
when something can't be done, explain what can be done to salvage the situation
Challenge
How do you react when someone - such as a bank teller, a mechanic, or a clerk - comes to you with a lame excuse. What do you think of them and their company as a result?
One broken window, left unrepaired for any substantial length of time, instills in the inhabitants of the building a sense of abandonment - ... so another window gets broken. People start littering. graffiti appears.
police in NY and other major cities have cracked (no put intended) down on small stuff in order to keep out the big stuff.
systems rot quickly with one broken window. wow. this cuts me deep. haha.
don't let entropy win!!!
in the opposite case, where there are no broken windows - and its extremely pristine - you don't want to be THAT guy that makes a mess.
Tip 5: Be a catalyst for change (gradual deception and you can get what you want haha)
"The three soldiers returning home from war were hungry. When they saw the village ahead their spirits lifted—they were sure the villagers would give them a meal. But when they got there, they found the doors locked and the windows closed. After many years of war, the villagers were short of food, and hoarded what they had. Undeterred, the soldiers boiled a pot of water and carefully placed three stones into it. The amazed villagers came out to watch. "This is stone soup," the soldiers explained.
"Is that all you put in it?" asked the villagers. "Absolutely—although some say it tastes even better with a few carrots...." A villager ran off, returning in no time with a basket of carrots from his hoard. A couple of minutes later, the villagers again asked "Is that it?" "Well," said the soldiers, "a couple of potatoes give it body." Off ran another villager."
Tip 6: Remember the big picture
(don't be the frog who gets boiled gradually)
Tip 7: Make quality a requirements issue
There will always be tradeoffs. When to ship?
Great software today is often preferable to perfect software tomorrow. If you give your users something to play with early, their feedback will often lead you to a better eventual solution.
Challenges
look at some software you use. can you find evidence that companies are comfortable shipping software they know is not perfect. as a user, would you rather wait for them to iron out all of the bugs? have complex software and accept some bugs? opt for simpler software and have fewer defects?
Tip 8: Invest regularly in your knowledge portfolio
knowledge is an expiring asset
it becomes out of date as new techniques, languages, and environments are developed
JP's pick: https://www.youtube.com/watch?v=ZZUY37RQS-k - "Staying relevant as a programmer"
invest regularly
diversify
balance portfolio regularly between high risk, high reward investments
buy low and sell high
reviewed and rebalanced periodically
the same can be said for your KNOWLEDGE portfolio
Diversify: "The more technologies you are comfortable with, the better you will be able to adjust to change"
GOALS - I LOVE this section.
learn at least one new language every year. Different languages solve the same problem in different ways.
read a technical book each quarter. after you've mastered the technologies you're currently using, branch out and study some that DONT relate to your project
read non technical books
take classes
participate in local user groups (meetups)
experiment with different environments (windows, linux)
stay current
get wired (twitter - follow big players in the space)
It doesn't matter whether you ever use any of these technologies on a project, or even whether you put them on your resume. The process of learning will expand your thinking, opening you to new possibilities and new ways of doing things.
Tip 9: Critically Analyze What you read and hear
Don't get swayed by media hype. I'm looking at you create-react-app!
i was at JS.la and mentioned how create-react-app is the best configuration free react setup. someone challenged me and said it's just the best marketed
Tip 10: It's Both What you Say and the way you say it
Having the best ideas, the finest code, or the most pragmatic thinking is ultimately sterile unless you can communicate with other people. A good idea is an orphan without effective communication
kind of way we're doing this podcast!
know your audience
understand the needs and interests of your audience
think about all the people and stakeholders and domain experts you have to communicate with as a software engineer
very much, "How to win friends and influence people"
know what to Say
know your audience
choose your moment - not 4pm on a friday or when your boss is having a bad day
choose a style - know how to deliver your message
make it look good (make it pop). think about how sexy laravel docs are
involve your audience
be a listener
get back to people. ALWAYS respond back to emails. think about how it feels when people don't reespond back to you. even just a "Ill get back to you later" response is better than no response
these are great soft skills!
Get the Snipd podcast app
Unlock the knowledge in podcasts with the podcast player of the future.
AI-powered podcast player
Listen to all your favourite podcasts with AI-powered features
Discover highlights
Listen to the best highlights from the podcasts you love and dive into the full episode
Save any moment
Hear something you like? Tap your headphones to save it with AI-generated key takeaways
Share & Export
Send highlights to Twitter, WhatsApp or export them to Notion, Readwise & more
AI-powered podcast player
Listen to all your favourite podcasts with AI-powered features
Discover highlights
Listen to the best highlights from the podcasts you love and dive into the full episode