走向成功的資深工程師之路

今天要分享一篇有趣的文章,可以有助於我們幫目前服務的組織創造出更多的價值,應該是很有用的建議,可以同時有助於我們個人和正在工作的專案上。

資料來源:Ten Principles for Growth as an Engineer
https://medium.com/@daniel.heller/ten-principles-for-growth-69015e08c35b


 

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 而已,一位好的軟體工程師的工作應該是做出能讓公司邁向成功好決策,而這件事的前提是你能明白哪些事情重要、哪些不是。

Q:如何設計出

  • 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 寫好然後就閉上眼祈禱其他事情會順利到位;你的工作是搞清楚你到底要怎麼透過你的努力來創造出自己的價值。

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

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]

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

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.

進取心:
在軟體開發中,最常見的誤解就是以為會有一群大人幫你做決定、幫你負責任,甚至還會幫你擔起團隊以及公司的使命。不要再等別人來叫你做事了,想想到底有什麼該做的。管理者不可能靠自己想明白所有事情,他們需要仰仗各位工程師的聰明才智以及創意啊!

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

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

advocate
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 或是書,把你平常工作上看到的技術文件從頭到尾讀一遍。關鍵在於「持之以恆」,建立好習慣能確保你的職涯不斷提升。

Q:與工作有相關新技術這麼多,要去學什麼好呢?時間該用在那裡?

 

  • 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 的專案,以及專業、互相尊重的合作兩者同樣重要。

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

n.名詞

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]

vt.及物動詞

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.

結論:有些人很有天份,不管我們的天份是多或少,時間在那裡,成就就會在那裡,付出在哪,成就就在哪。

 


相關文章:

[翻譯] 領導專案走向成功的資深工程師之路
https://medium.com/the-bayesian-trap/%E7%BF%BB%E8%AD%AF-%E9%A0%98%E5%B0%8E%E5%B0%88%E6%A1%88%E8%B5%B0%E5%90%91%E6%88%90%E5%8A%9F%E7%9A%84%E8%B3%87%E6%B7%B1%E5%B7%A5%E7%A8%8B%E5%B8%AB%E4%B9%8B%E8%B7%AF-d7992395277a

約耳談軟體(Joel on Software)
http://local.joelonsoftware.com/wiki/%E9%A6%96%E9%A0%81

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

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

git最初的開發動力來自於BitKeeperMonotone[7][8]。git最初只是作為一個可以被其他前端(比如Cogito或Stgit[9])包裝的後端而開發的,但後來git內核已經成熟到可以獨立地用作版本控制[10]。很多著名的軟體都使用git進行版本控制[11]

股神巴菲特教孩子的六點
http://max-everyday.com/2017/01/warren-edward-buffett/

妳做了什麼,成就妳是什麼
http://max-everyday.com/2017/05/what-you-made-of-what-you-do/

What you made of you do

職場1萬小時定律
http://max-everyday.com/2016/12/10k-hours/

別只看「沒有」,向你的困境借東西:火星爺爺(許榮宏) Logan Hsu at TED
http://max-everyday.com/2016/05/logan-hsu-ted/

 

Facebook網友回應

相關文章

寫留言

你的電子郵件位址並不會被公開。 必要欄位標記為 *