Tuesday, April 21, 2015

The Effective Engineer

最近發現這本Effective Engineer,一開始還以為是Effective C++系列的書,原來是現任於Quip的工程師寫的,內容應該是關於如何有效的選擇出最有影響力的工作任務來做,來提升自己。正好是我喜歡看的內容。二話不說就馬上買來看了

To be effective engineers, we need to be able to identify which activities produce more impact with smaller time investments. Not all work is created equal. Not all efforts, however well-intentioned, translate into impact.

第一章提到的這個點正是最近常想的事情,時間老是不夠用,但有許多事情是要花時間才的做完的,像是想要加入一間頂尖的公司,那得先花時間準備面試不是嗎?想要完美的呈現魔術表演,那得先花時間準備把戲,想瘦身也得花時間去運動。這麼多事情,加上每天吃飯洗澡睡覺開車瑣碎的小事,每一件都花一點時間,如果什麼都不想,日子就會一點一滴地流走,結果一點效果也沒有看到。所以如何挑出最有影響力的事情,然後用最少的時間去完成,才是聰明人的方法,work smart instead of work hard,以前附中的會讀又會玩的最高指導原則好像也有類似的精神喲。


overall leverage can only be increased in three way:
1. How can I complete this activity in a shorter amount of time?
2. How can I increase the value produced by this activity?
3. Is there something else that I could spend my time on that would produce more value?


"Dedicate Time on the job to develop new skills"

上班日總是覺得工作越來越多做不完,Task list上要做的事情一直增加,覺得自己跟不上進度嗎?
或許拿Google著名的20%時間是最好的例子,20%的時間相當於一個工程師每個禮拜中撥出一天來做side project來讓公司變得更好,對應到個人上面也一樣,我們也應該撥出時間來讓自己工作更有效率,與其花一整天八個小時,更建議大家每天花一到兩個小時來練習,這是為了培養出一個習慣。至於要練習什麼?  Edmond提供了十點建議:

1. Study code for core abstractions written by the best engineers at your company.
2. Write more code. [註1] 這點又再次被強調,看來達人們的建議都指向同一方向 :)
3. Go through any technical, educational material available internally.
4. Master the programming languages that you use. [註2] 正在練習中
5. Send your code reviews to the harshest critics.
6. Enroll in classes on areas where you want to improve.
7. Participate in design discussions of projects you're interested in.
8. Work on a diversity of projects [註3]
9. Make sure you're on a team with at least a few senior engineers whom you can learn from.
10. Jump fearlessly into code you don't know.

[註1] It's easy to think you understand something you've read, only to find large knowledge gaps when you actually set out to do it.
這句話我在同意也不過了,越聰明的人,領悟力可能也很好,看解答後好像一下就會了的樣子,但過兩天等短期記憶消失後還能夠在順利的寫出答案來嗎? 恐怕很難吧。
[註2] Make sure that at least one of your languages is a scripting language (e.g. Python or Ruby) that you can use as your Swiss army knife for quick tasks.
[註3] Interleaved practice of different skills is more effective than repeated, massed practice of a single skill at preparing people to tackle unfamiliar problems.


工作以外的時間呢?
- Invest in skills that are in high demand [註4]
- Read books  作者本人一個星期可以看完一到兩本書!
- Join a discussion group (e.g. book club, reading group)  
- Attend talks, conferences, and meetups [註5]
- Build and maintain a strong network of relationships. [註6]
- Write to teach [註7]
- Tinker on side projects, pursue what you love

[註4] 手機上的上網人口增加,手機銷售數量超過PC,當這些趨勢繼續,要是能具有mobile     development的技術說不定就能有更 多的機會。
[註5] 在十八世紀,一位叫做Benjamin Franklin的政治家和發明家組織了一個稱為"club of mutual improvement"的聚會,在每週五的晚上一群朋友們聚在一起,積極的討論著道德政治哲學,讓每個組員有系統地強化他們的能力。
[註6] "Lucky people dramatically increase the possibility of a lucky chance encounter by meeting a large number of people in their daily lives. The more people they meet, the greater opportunity they have of running into someone who could have a positive effect on their lives." The luck factor, Richard wiseman
[註7] "Writing also provides an opportunity for mindful reflection on what you've learned." Physics Nobel Prize winner Richard Feynman 這點也再次被許多成功人士分享,當我們將所學的知識寫下來時,會幫助自己在已知的地方有更深入的了解,原本不懂的地方也能pinpoint出那些不了解的細節與觀念,哪個是自己還沒了解的,這些事不寫下來是不會發現的!