-
豆瓣🔗:
-
Talks at Google🔗:
大概是3、4月份读的英文版,发现7月份出了翻译版,对我来说中规中矩的书籍吧。发现读了挺多书但做到的少得可怜,实践好难🤧,但还是要觉察自己的行为和心理,去努力实现。
笔记:
Introduction
There will always be more effectiveness techniques to learn.
This book examines and describes what it means to be an effective engineer, and it distills the key lessons that I’ve learned.
So what makes an effective engineer? Intuitively, we have some notion of which engineers we consider to be effective. They’re the people who get things done. They’re the ones who ship products that users love, launch features that customers pay for, build tools that boost team productivity, and deploy systems that help companies scale. Effective engineers produce results.
An effective engineer, therefore, is defined by the rate at which he or she produces value per unit of time worked.
Despite being a book for software engineers, you won’t find a single line of code in The Effective Engineer.
More important for effectiveness, but often overlooked by engineers, are the meta-skills. These skills help you determine where to focus your time and energy so that more of your effort translates into impact.
And even though everyone’s narrative was different, many common themes emerged.
Whether you want to increase your impact on the world, get promoted more quickly, waste less time grinding away at mindless tasks, or work fewer hours without sacrificing results, The Effective Engineer gives you the tools you need.
Focus on High-Leverage Activities
Mentoring activities included everything from reviewing code, outlining technical skills to learn, and pair programming, to discussing engineering tradeoffs, explaining how to prioritize better, and offering guidance on how to work well with different team members.
Mentors also planned a sequence of starter tasks and projects to increase the new hires’ mastery of our systems.
Codelabs, an idea I borrowed from Google, were documents that explained why we designed core abstractions, described how to use them, walked through the relevant code, and provided exercises to validate understanding.
Effective engineers aren’t the ones trying to get more things done by working more hours. They’re the ones who get things done efficiently—and who focus their limited time on the tasks that produce the most value.
Another way of thinking about leverage is the commonly-mentioned Pareto principle, or 80–20 rule—the notion that for many activities, 80% of the impact comes from 20% of the work. That 20% comprises the high-leverage activities, activities that produce a disproportionately high impact for a relatively small time investment.
engineers viewed recruiting and interviews as distractions from getting their work done
—an attitude that’s common to engineers at many companies.
Key Takeaways
• Use leverage to measure your engineering effectiveness. Focus on what generates the highest return on investment for your time spent.
• Systematically increase the leverage of your time. Find ways to get an activity done more quickly, to increase the impact of an activity, or to shift to activities with higher leverage.
• Focus your effort on leverage points. Time is your most limited asset. Identify the habits that produce disproportionately high impact for the time you invest.
Optimize for Learning
I dug around in the source code of libraries written by early Google legends like Jeff Dean and Sanjay Ghemawat
I attended tech talks given by renowned architects like Joshua Bloch, who designed core Java libraries, and Guido van Rossum, the creator of the Python programming language.
And with each transition, I’ve optimized for learning and found myself growing, both professionally and personally, more than I could ever have done if I had stayed within the comforts of the Googleplex.
That year was a formative experience for me.
I also stretched the limits of my own comfort zone.
still have ample space to improve, but I learned that like many other skills, engaging in dialogue with strangers gets better with effort and practice.
People with a fixed mindset believe that “human qualities are carved in stone” and that they’re born with a predetermined amount of intelligence—either they’re smart or they’re not.
They may initially lack aptitude in certain areas, but they view challenges and failures as opportunities to learn.
he studied new web technologies, distilled relevant engineering lessons from her PhD, and practiced for the whiteboard interviews common at many engineering companies—and she got the job.
means accepting responsibility for each aspect of a situation that you can change—anything from improving your conversational skills to mastering a new engineering focus—rather than blaming failures and shortcomings on things outside your control.
means optimizing for experiences where you learn rather than for experiences where you effortlessly succeed.
Compounding leads to an exponential growth curve.
Knowledge gives you a foundation, enabling you to gain more knowledge even faster.
When companies pay you for cushy and unchallenging 9-to-5 jobs, Cohen argues, “what they are actually doing is paying you to accept a much lower intellectual growth rate.
Similarly, setting yourself up for long-term success requires thinking of yourself as a startup or product in beta, a work-in-progress that needs to be invested in and iterated on every single day.
What will you learn today to improve yourself by 1%? That 1% is a high-leverage investment to develop the skills and the knowledge to make use of future opportunities
Some work environments are more conducive than others for supporting a high personal and professional growth rate
Here are six major factors to consider when choosing a new job or team and the questions you should be asking for each of them:
Fast growth.
Google, for example, invests significant resources in its engEDU program—a set of classes, professional seminars, design documents, and programming guides geared toward helping employees grow as engineers and leaders.
Facebook has a six-week onboarding program called Bootcamp, where new engineers learn about the company’s tools and focus areas and do their initial hands-on development.
Surrounding yourself with people who are smarter, more talented, and more creative than you means surrounding yourself with potential teachers and mentors.
my three years at Quora, for example, I had opportunities to work on a broad range of technical challenges (including experimentation tools, real-time analytics frameworks, site speed, infrastructure, recommendations, spam detection, and mobile development) as well as organizational challenges (including training interviewers, creating onboarding resources, building the mentoring program, and coordinating the internship program). It would have been difficult to work on such a diversity of projects at a larger company, where the problems might be tackled by specialized teams and where the processes might already be well-established.
adjacent disciplines
These are the disciplines related to your core role and where increased familiarity can make you more self-sufficient and effective.
If you’re a product engineer, adjacent disciplines might include product management, user research, or even backend engineering. If you’re an infrastructure engineer, they might include machine learning, database internals, or web development. If you’re a growth engineer, adjacent disciplines might be data science, marketing, or behavioral psychology.
Whichever route you decide, here are ten suggestions to take advantage of the resources available to you at work:
Study code for core abstractions written by the best engineers at your company.
You can also do the same with any well-designed, open source projects that your company uses or is considering using.
Write more code.
Since actively programming expends more effort than passively reading code, you’ll find that practicing the craft is a high-leverage activity for improving your programming skills.
Google, for instance, has a wide array of codelabs that teach core abstractions and guides of best practices for various languages, all written by veteran engineers.
Optimize for getting good, thoughtful feedback rather than for lowering the barrier to getting your work checked in.
These could be courses offered on the company campus, at nearby universities, or online through educational initiatives like Coursera, edX, Udemy or Udacity. Online education is exploding; you can easily sign up for classes in machine learning, mobile development, computer networking, compilers, and more, many of them taught by professors from world-class institutions like Stanford or MIT.
Work on a diversity of projects.
If you find yourself always doing similar tasks using similar methods, it’s going to be hard to pick up new skills.
Moreover, research on learning confirms that the interleaved practice of different skills is more effective than repeated, massed practice of a single skill at preparing people to tackle unfamiliar problems.
Fear of failure often holds us back, causing us to give up before we even try.
Learning opportunities aren’t limited to the workplace. We should always be asking: How can I improve? How could I have done this better? What should I learn next to best prepare me for the future?
but the practice of adopting a growth mindset toward them still makes us better learners and more willing to stretch beyond our comfort zone.
Here are ten starting points to help inspire a habit of learning outside of the workplace:
Read books.
Bill Gates reads a lot and mostly non-fiction, using books to discover how the world works.
Books offer a way for you to learn from the lessons and mistakes of others: you can re-apply that knowledge without having to start from scratch. This is such a high-leverage investment that I’ve actually trained myself to speed read.
When you write to teach other people, you gain a deeper understanding of ideas you’re already familiar with and pinpoint the details that you didn’t fully understand. That’s the technique that Physics Nobel Prize winner Richard Feynman used to learn faster. 34
These days, platforms like Blogger, Tumblr, Wordpress, Medium, and Quora make it easy. Presenting at conferences can have similar benefits.
But by adopting a growth mindset and optimizing for learning, you’ll be best prepared to make the most of whatever opportunities do come your way.
Key Takeaways
View failures and challenges through a growth mindset, and see them as opportunities to learn.
Learning compounds like interest. The more you learn, the easier it is to apply prior insights and lessons to learn new things.
Locate learning opportunities outside of the workplace. Challenge yourself to become better by just 1% a day. Not all of your learning will necessarily relate to engineering skills, but being a happier and better learner will help you become a more effective engineer in the long run.
Prioritize Regularly
No matter how much of an expert you might be, a well-designed checklist can significantly improve your outcomes.
That value is measured in terms of products shipped, users acquired, business metrics moved, or sales made, rather than in terms of hours worked, tasks completed, lines of code written, or meetings attended.
Quadrant 2 activities include planning our career goals, building stronger relationships, reading books and articles for professional development, adopting new productivity and efficiency habits, building tools to improve our workflows, investing in useful abstractions, ensuring that infrastructure will continue to scale, learning new programming languages, speaking at conferences, and mentoring our teammates to help them be more productive.
One piece of advice that I consistently give my mentees is to carve out time to invest in skills development. Their productivity might slow down at first, but with time, the new tools and workflows that they learn will increase their effectiveness and easily compensate for the initial loss.
Subconscious followup is important because procrastination primarily stems from a reluctance to expend the initial activation energy on a task.
To increase my focus, I block off sites like Facebook, Twitter, etc. through my /etc/hosts file 28 and use a timer program called Focus Booster to time my 25-minute sessions.
Invest in Iteration Speed
The key is to be mindful of which of your common, everyday actions slow you down, and then figure out how to perform those actions more efficiently.
Key Takeaways
• The faster you can iterate, the more you can learn. Conversely, when you move too slowly trying to avoid mistakes, you lose opportunities.
• Invest in tooling. Faster compile times, faster deployment cycles, and faster turnaround times for development all provide time-saving benefits that compound the more you use them.
• Optimize your debugging workflow. Don’t underestimate how much time gets spent validating that your code works. Invest enough time to shorten those workflows.
• Master the fundamentals of your craft. Get comfortable and efficient with the development environment that you use on a daily basis. This will pay off dividends throughout your career.
• Take a holistic view of your iteration loop. Don’t ignore any organizational and team-related bottlenecks that may be within your circle of influence.
Appendix
“putting first things first,” I learned that people tend to neglect important but non-urgent activities and spend a lot of time dealing with tasks like emails, phone calls, and meetings that may be urgent but ultimately unimportant.
Recommended Blogs To Follow
http://martinfowler.com/. Martin Fowler, author of the book Refactoring, writes about how to maximize the productivity of software teams and provides detailed write-ups of common programming patterns.
Notes
Paul Graham, “Maker’s Schedule, Manager’s Schedule,” July 2009, http://www.paulgraham.com/makersschedule.html.
On any Linux-based system (like a Mac), you can add a line like 127.0.0.1 www.facebook.com to route network requests to that domain to localhost, effectively blocking the site.