#050 - Python is Faster than Rust
· Summarized
Key takeaways
- The role of a software architect is diverse and requires both technical and people leadership skills.
- Practical experience through building real applications is essential for software engineers to enhance their coding skills.
- Remote work requires intentional efforts to maintain team culture and engagement.
- Performance issues are often related to system architecture rather than the choice of programming language.
- Effective benchmarking and measurement practices are crucial in identifying and resolving performance bottlenecks in software development.
Summary
Understanding Software Architecture
John Crickett explains the multifaceted role of a software architect, emphasizing that it differs across organizations. He outlines that software architects engage in influencing decision-making without direct authority, providing guidance on best practices, programming languages, and system designs, while also ensuring teams retain a sense of ownership over their projects. He compares technical leadership to people leadership, presenting insights into how engineers can choose to focus on either pathway as they advance in their careers.
Coding Challenges: Building Practical Skills
John's side project, CodingChallenges.FYI, serves as a platform for software engineers to enhance their skills through hands-on coding projects rather than algorithmic challenges like LeetCode. He believes that active coding is essential for learning and emphasizes the importance of building applications to gain practical knowledge and confidence in various programming languages.
Navigating Remote Work Dynamics
The conversation touches on the complexities of remote work, highlighting both advantages and potential pitfalls, such as disengagement and a lack of team culture. John shares how remote work dynamics can sometimes lead to lower engagement among team members and stresses the importance of fostering a collaborative and communicative culture to encourage productivity and team connection.
Performance vs Programming Languages
A major theme of the episode is the discussion around programming languages and performance efficiency. John argues that architecture, rather than choice of programming language, plays a crucial role in scaling applications. He shares compelling anecdotes about real-world applications and emphasizes how understanding the hardware and optimizing code for performance—known as 'mechanical sympathy'—is key for achieving efficient outcomes.
The Importance of Measurement and Benchmarking
John elaborates on the value of benchmarking to identify performance bottlenecks, asserting that proper measurement is often overlooked in software projects. He illustrates the dangers of drawing conclusions without comprehensive testing and highlights common pitfalls, such as basing performance assessments on incomplete data.
Sponsors
- boot.dev · Learn back-end development
- Backend Banter · Listen on your favorite podcast player
- John Crickett's Twitter/X · Follow John Crickett on Twitter/X
- John Crickett's Linkedin · Connect with John Crickett on LinkedIn
- Coding Challenges · Explore coding challenges by John Crickett
- Coding Challenges on Substack · Subscribe to Coding Challenges on Substack
- Research on Deindividuation · Research mentioned in the episode
- Wikipedia on Deindividuation · Learn more about Deindividuation
Show notes
In today’s episode, we welcome John Crickett, veteran software engineer, having worked at Staff, VP, and C-Suite positions over the years, and now focusing on helping thousands of engineers worldwide, through his coding challenges that have you building real applications, as well as helping with the soft skills through his articles and posts about software development.
Today we cover a LOT of ground where we explain exactly what a Software Architect is, discuss different leadership types, advice to get a software job, remote work, unpopular opinions on programming languages, performance and scale, and a couple other things, so stay tuned because this episode is a true fountain of knowledge.
Learn back-end development - https://boot.dev
Listen on your favorite podcast player: https://www.backendbanter.fm
John Crickett's Twitter/X: https://twitter.com/johncrickett
John Crickett's Linkedin: https://www.linkedin.com/in/johncrickett/
Coding Challenges: https://codingchallenges.fyi/
Coding Challenges on Substack: https://codingchallenges.substack.com/
Research mentioned at 27:33 : https://www.researchgate.net/publication/232514133_Effect_of_self-differentiation_and_anonymity_in_group_on_deindividuation
More on the topic of Deindividuation: https://en.wikipedia.org/wiki/Deindividuation#Major_empirical_discoveries
Timestamps:
00:12 Who is John Crickett
01:13 What is a Software Architect
03:04 People vs Technical Leadership
03:53 What kind of decisions does a software architect make?
04:43 Is there a lot of "Thought Leadership" involved?
05:23 Do you prefer Technical or People leadership?
07:47 How did John start his coding career?
11:39 Most people don't start working at "sexy" companies
13:58 Juggling off-topic
14:32 What are the Coding Challenges?
19:03 Remote work and downtime
22:56 The wrong culture might spoil the remote environment and people care less about the work
27:05 Anonymity turns people into assholes
29:58 Why did we have a phone call when this could've been an e-mail?
33:42 Doing LeetCode vs Building Projects
36:54 Most of the time you'll be using already existing solutions
40:05 Is there too much abstraction nowadays?
41:56 Using the Command Line is cool again!
43:44 When talking about scale, what matters most is the architecture, not the language or framework
51:30 Why just switching to a "faster" language isn't enough
53:48 Go vs Rust performance comparison
54:44 Learning how to write performant code is more important than the programming language itself
55:25 The importance of benchmarking
58:33 Where to find John
Follow this show on AudioBrevity and new episodes get summarized for you. Create a free account