資料來源:Ten Principles for Growth as an Engineer


I decided then to write up the practices that I think lift a newly minted software engineer from amateur to professional: the path from fixing bugs as an “Engineer 1” to leading major projects as a “Senior Engineer.”

我決定寫一這篇文章總結這十幾年來的工作經驗,這些準則能有助於提升業餘工程師的水準到專業級:「一個只會修 bug 的工程師1號」到「領導專案走向成功的資深工程師」之路。

I firmly believe that those skills can be taught, but for my part, I learned the ideas you’ll read below The Hard Way over ten years in Silicon Valley. I’ve covered some ground in that decade;


I hope that reading this list, however incomplete it may be, saves you some of the mistakes that educated me; I sure wish someone had sent it to me when I was 22.

希望在讀完以下這個可能還不夠完整的清單後,能讓你別犯下相同的過錯;如果有個人可以在我 22 歲時就告訴我這些事情的話該有多好。


  • Reason about business value: Reason like a CEO. Understand the value of your work to your company and take responsibility for reasoning about quality, feature-richness, and speed. Your job isn’t just to write code; your job is to make good decisions and help your company succeed, and that requires understanding what really matters.

像公司的 CEO 一樣去理解商業價值。瞭解你的工作對於公司的價值,並且學著對更多 coding 以外的事情負起責任,像是產品的質量、功能的豐富性,以及速度。你的工作絕對不只是 coding 而已,一位好的軟體工程師的工作應該是做出能讓公司邁向成功好決策,而這件事的前提是你能明白哪些事情重要、哪些不是。


  • Unblock yourself: Learn to never, ever accept being blocked; find a way by persuasion, escalation, or technical creativity. Again, your job isn’t just to write the code and wait for everything else to fall into place; your job is to figure out how to create value with your efforts.

學著永遠不要接受任何封鎖;找到方式去突破阻擋你進步的所有人事物,不管是用說服自己、循序漸進,或是用你的技術來發揮創意。再強調一次,你的工作不僅僅是把 code 寫好然後就閉上眼祈禱其他事情會順利到位;你的工作是搞清楚你到底要怎麼透過你的努力來創造出自己的價值。

KK[pɚˋsweʒən] DJ[pəˋsweiʒən]


1. 說服,勸說[U]
2. 說服力[U]
3. 信念;信仰[S1][+(that)]
It is my persuasion that such people should not be allowed to enter this country. 我確信這種人不應被允許進入我們的國家。
4. 宗派;派別;教派[C]
5. 【口】種類,類別[C][S1]

KK[͵ɛskəˋleʃən] DJ[͵eskəˋleiʃən]


1. 逐步上升;逐步擴大[U][C]


  • Take initiative: The most common misconception in software is that there are grown-ups out there who are on top of things. Own your team’s and company’s mission. Don’t wait to be told; think about what needs doing and do it or advocate for it. Managers depend on the creativity and intelligence of their engineers, not figuring it all out themselves.


KK[ɪˋnɪʃətɪv] DJ[iˋniʃətiv]

1. 主動的行動;
2. 首創精神;進取心[U]
He did not have the initiative to start his own business.
3. 主動權[the S]
They had lost the initiative.
1. 開始的;初步的;創始的

KK[ˋædvəkɪt] DJ[ˋædvəkit]

n.[C] 可數名詞

1. 提倡者;擁護者[(+of)]
They are advocates of free trade.
2. 辯護者;律師

很感謝之前公司的主管 James Hsu,教的很多東西,Database 的效能的調校,還有對交付的任務和需求應該存疑的態度。


  • Improve your writing: Crisp technical writing eases collaboration and greatly improves your ability to persuade, inform, and teach. Remember who your audience is and what they know, write clearly and concisely, and almost always include a tl;dr above the fold.

好的寫作技巧除了讓合作更順暢之外,對於說服別人、通知、教學也都非常實用。記得誰是你的聽眾以及他們知道些什麼。寫的清楚、精確,最好總是能加上 tl;dr 在最上方用精簡的文字總結一下你到底想表達什麼。

TL;DR(也可以寫成tl;dr)是網路用語,取自縮寫:Too Long; Didn’t Read.



  • Own your project management: Understand the dependency graph for your project, ensure key pieces have owners, write good summaries of plans and status, and proactively inform stakeholders of plans and progress. Practice running meetings! All this enables you to take on much bigger projects and is great preparation for leadership.

瞭解各個 Project 間的相依性(最好能畫出 Dependency Graph 來),確定每個關鍵的部分都有人為其負責。為每個計畫以及專案的狀況寫下摘要,並且主動通知相關的人計畫內容以及進度,練習去安排會議吧!這些跟專案管理有關的所有事情,都能訓練你去掌握更大的專案,同時也是為你的領導能力在做準備。


  • Own your education: Pursue mastery of your craft. Your career should be a journey of constant growth, but no one else will ensure that you grow. Find a way to make learning part of your daily life (even 5 minutes/day); get on mailing lists, find papers and books that are worth reading, and read the manual cover to cover for technologies you work with. Consistency is key; build habits that will keep you growing throughout your career.

在你專業的領域追求卓越。你的職涯應該是一段不斷向上發展的旅程,但是除了你之外沒有人能擔保你能一直成長。所以,找到一個好的方式讓學習成為你日常生活的一部分。(就算是一天只有五分鐘也沒關係); 找到值得你讀的 mailing lists、papers 或是書,把你平常工作上看到的技術文件從頭到尾讀一遍。關鍵在於「持之以恆」,建立好習慣能確保你的職涯不斷提升。



  • Master your tools: Mastery of editor, debugger, compiler, IDE, database, network tools, and Unix commands is incredibly empowering and likely the best way to increase your development speed. When you encounter a new technology or command, go deeper than you think you have to; you’ll learn tricks that will serve you well again and again.

編輯器、debugger、compiler、IDE、Database、network 工具,還有 Unix 指令,熟練上述這些東西都能讓你自己的實力有顯著的提升,也可能是提升開發速度最好的方式。當你遇到一個新的技術或是指令時,比你以為你必須的再鑽的深一些;你會在這些經驗中一次又一次學到讓你受益匪淺的技巧。


  • Communicate proactively: Regular, well-organized communication builds confidence and goodwill in collaborators; knowledge-sharing creates an atmosphere of learning and camaraderie. Share knowledge and set a regular cadence of informing stakeholders on project goals, progress, and obstacles. Give talks and speak up judiciously in meetings.



  • Find opportunities to collaborate: Good collaboration both increases your leverage and improves your visibility in your organization. Advancing your craft as an engineer requires you to have an impact beyond the code you write, and advancing your career requires, to a certain degree, building a personal brand at your company. Cross-functional projects and professional, respectful collaboration are critical to both.

優良的合作關係在職場上是一個好槓桿,同時也能提升你在組織中的能見度。要讓你的工程師生涯更進階一些就得發揮影響力,這在某個程度上來說就是要在你的公司裡面建立起屬於你自己的個人品牌。Cross-functional 的專案,以及專業、互相尊重的合作兩者同樣重要。

KK[kræft] DJ[krɑ:ft]


1. 工藝,手藝[C][U]
He learned his craft from an old master.
2. (需要手藝的)行業,職業[C]
He learned the mason’s craft. 泥水匠這一行。
3. 同業;行會;行會成員[the S]
4. 手腕,狡猾,奸計[U]
She is a woman full of craft. 詭計多端
5. 船;飛機;太空船[C][M]


1. 【美】精巧地製作[H]

Cross-functional team doesn’t mean everybody has to know everything – this seems to be a common misinterpretation though. Cross-functional just means that the team as a whole has all skills needed to build the product, and that each team member is willing to do more than just their own thing.

Cross-functional 指的不是團隊中的每個人都十項全能能做所有事情,而是不只負責自己工作,還能 cover 其他部分。比如團隊有有人是 Java 高手,但願意幫忙做壓力測試或其他的專業領域工作。


  • Be professional and reliable: Think of yourself as a professional and act like one. Come to meetings on time and prepared, then pay attention. Deliver what you say you will and communicate proactively when things go wrong (they will). Keep your cool and express objections respectfully. Show your colleagues respect and appreciation. Minimize your complaining; bring the people around you up, not down. Everyone appreciates a true professional; more importantly, it’s the right way to behave.



Max 的心得:讀完這些別人提供的建議(或準則)沒什麼特別的感覺,也看不出什麼重點,看完也不知道自己接下來應該要做什麼,還是一臉的茫然,沒有感覺因此會從「業餘級」變成「專業級」,要進級只能再靠自己去自學去思考。花了時間讀完這一篇別人的心得,並不會讓自己的 coding 技巧或解決問題能力變強。看看約耳遇到的事情,似乎比這篇別人的心得實用。

我在年輕的時候在研究線上遊戲的外掛時,我用 vb 6.0 寫了一個腳本的程式叫 iMax Macro, 在外掛社團裡遇到另一個年輕人叫kgame,那時候他還只是高中生,他當時寫了「KKMacro」,他的功能超多的之外,他的架構很有彈性,透過和他的程式的比較,我發現自己在設計上有很大的差異,也會去想,也許怎麼設計會更好。

後來我去寫 iOS App,我寫了很多「落漆」的 code 和 function,巧遇剛入社會的新鮮人Lyle Wang 還有 Jack,這些神人等級跟我們差異很大,他們學習新領域的速度超快,而且能夠幫我解決很多我都不懂的問題。

後來我發現在 github 上和 stackoverflow 上幾乎都有我要解決的問題的答案,github 上還有很多好心人公開較佳的解法或架構,照著套用就可以比較stable 或比較好 maintain.




[翻譯] 領導專案走向成功的資深工程師之路

約耳談軟體(Joel on Software)

雖然很多都是 2000年左右的文章,離今天很遙遠,但很多觀念上還是很實用。主要的幾個差別就是這段時間裡 python, ruby 和 git 等新的工具風行了起來,在 2000年時沒有這東西。

git/ɡɪt/[5]關於這個音訊檔案 音訊)是一個分散式版本控制軟體,最初由林納斯·托瓦茲(Linus Torvalds)創作,於2005年以GPL釋出。最初目的是為更好地管理Linux內核開發而設計。




What you made of you do


別只看「沒有」,向你的困境借東西:火星爺爺(許榮宏) Logan Hsu at TED




LINE 免費貼圖 2020-01-28


這周首推日本+台灣的貼圖。防役等同作戰,武漢肺炎比想像中的嚴重,請購買「外科口罩」即可。「中國大陸」國務院在2 […]

Read More

學歷史的大用:呂世浩(Shih-Hao Lu) at TEDxTaipei 2014


分享一部參考性佳的影片,有助於我們人生遇到挫折或決擇時,可以下更有智慧的決定。看完影片Max的心得: 張良怎麼 […]

Read More

Always And Forever-空中補給合唱團


醬子學英文的感覺,超讚!很享受~ Always And Forever-空中補給合唱團 https://www […]

Read More