程式設計師的困境

2015-12-17    分類:程式設計師人生、首頁精華2人評論發表於2015-12-17


Recently I interviewed tens of candidates for a kernel programmer's position. These candidates are from big, good companies, which are famous for chips or embedded OS/systems. Many of them claimed they have at least 10 years on-job experience on kernel. Their resumes look fairly shiny — all kinds of related projects, buzz words and awards…
最近我為一個核心程式設計師的職位面試了十幾個候選人。這些候選人都來自一些不錯的大公司,這些公司在晶片或嵌入式作業系統領域十分有名。這些候選人大多聲稱自己在核心方面有著十年的在職工作經驗。他們的簡歷看起來非常耀眼——各種相關的專案、術語和獎項……

But most of them cannot answer a really basic question: When we call the standard malloc function, what happens in kernel?
但他們幾乎無人能夠回答一個非常基礎的問題: 當我們呼叫標準的 malloc 函式時,核心中會發生什麼?。

Don't be astonished. When I ask one of the candidate to write a simple LRU cache framework based on glib hash functions, he firstly claimed he had never used glib — that's what I expected — I showed the glib hash api page and explained the APIs to him in detail, then after almost an hour he wrote only a few lines of messy code.
先別吃驚。當我要求其中一位候選人基於 glib 的雜湊函式寫一個簡單的 LRU 快取框架時,他先是表示從來沒用過 glib——如我所料——於是我幫他開啟了 glib 雜湊 API 的頁面,並向他詳細講解了這些 API;然後大約一個小時以後,他只寫出了幾行凌亂的程式碼。

I don't know if the situation is similar in other countries, but in China, or more specifically, in Beijing, this is reality. "Senior" programmers who worked for big, famous foreign companies for years cannot justify themselves in simple, fundamental problems.
我不知道其它國家是否也有類似的情況,但在中國,或者更具體一點,在北京,這就是現狀。那些在不錯的大公司裡工作了多年的“資深”程式設計師們無法在一些簡單的、基本的問題上證明自己。


Why did this happen? 這到底是怎麼回事?The more I think about it, the more I believe it is caused not only by themselves but also by the companies they worked for. These companies usually provide stable stack of code, which has no significant changes for years. The technologies around the code wraps up people's skills, so that they just need to follow the existing path, rather than to be creative. If you happened to work for such kind of code for a long period and did not reach to the outer world a lot, one day you will find yourself to be in a pathetic position — they called you " EXPERT " inside the team or company, yet you cannot find an equally good job in the market unfortunately.
當我在這個問題上思索得越多,我就更加相信,這不僅有他們自身的原因,同時也歸咎於他們所供職的這些公司。這些公司通常提供了一個穩定的程式碼堆,往往幾年都不會有大更新。這些程式碼的專有技術把人們的技能框進一個定式,以致於他們只需要遵循現有的路徑,而不需要發揮創意。如果你碰巧為這類程式碼工作,而且與世隔絕了很長一段時間,那麼有一天你會發現你自己已經陷入一個可悲的位置——他們在團隊或公司內稱呼你為 “ 專家 ”,但不幸的是,你無法在市場上找到一份同等待遇的工作。

This is so called " Expert Trap ". From day to day, we programmers dreamed of being an expert inside the team/company; however, when that day really comes we trapped ourselves. The more we dig into existing code, the deeper we trapped into it. We gradually lose our ability to write complete projects from scratch, because the existing code is so stable (so big/so profitable). What's the worse, if our major work is just to maintain the existing code with little feature development, after a while, no matter how much code we've read and studies, we will find we cannot write code — even if the problem is as simple as a graduate school assignment. This is the programmer's dilemma: we make our living by coding, but the big companies who fed us tend to destroy our ability to make a living.
這就叫作 “ 專家陷阱 ”。日復一日,程式設計師們都渴望在團隊或公司內成為一名專家;但是,當那一天真正到來時,我們卻早已作繭自縛。我們在既有程式碼中鑽得越深,我們自己就陷得越深。既有程式碼是如此穩定(如此寵大、如此好用),讓我們漸漸地失去了從無到有獨立編寫完整專案的能力。更糟糕的是,如果我們的主要工作就是維護這些既有程式碼、很少開發新功能,那麼過不了多久,無論研讀了多少程式碼,我們都會發現自己不會寫程式碼了——哪怕是一個像畢業大作業那樣簡單的任務。這就是程式設計師的困境: 我們以編碼為生,但那些養活我們的大公司卻在無形中磨滅了我們的生存技能。


How to get away from this dilemma?如何打破這種困境
For personal –對於個人:
  • First of all, Do your own personal projects. You need to "sharpen your saw" continuously. If the job itself cannot help you do so, pick up the problems you want to concur and conquer it in your personal time. By doing so, most likely you will learn new things. If you publish your personal projects, say in github, you may get chances to know people who may pull you away from your existing position.
  • 首先, 打造你自己的私人專案。你需要不斷地打磨自己的技藝。如果工作本身並不能幫助你做到這一點,就撿起那些你感興趣的問題,然後用你的私人時間去攻克它。通過這個方法,你應該會學到新東西。如果把你的私人專案釋出出去,比如在 GitHub 上,你說不定會認識一些人,幫助你大踏步地向前邁進。
  • Do not stay in a same team for more than two years. Force yourself to move around, even if in the same organization, same company, you will face new challenges and new technologies. Try to do job interviews every 18 months. You don't need to change your job, but you can see what does the market require and how you fit into it.
  • 不要在一個團隊中停留超過兩年。強迫你自己四處轉轉,哪怕在是同一家公司內,你會面對新的挑戰和新的技術。試著每隔 18 個月就出去面試工作。你並不需要真的換工作,但是這能讓你看到真實的市場需求,以及怎樣與時俱進。
For team/company –對於團隊和公司:
  • Give pressures and challenges to the employees. Rotate the jobs, let the "experts" have chance to broaden their skills. Start new projects, feed the warriors with battles.
  • 給予員工壓力和挑戰。實行輪崗制度,讓“專家”們有機會擴充他們的技能。啟動新專案,用戰役來磨鍊你的勇士。
  • Hold hackathon periodically. This will help to build a culture that embrace innovation and creation. People will be motivated by their peers — "gee, that bustard can write such a beautiful framework for 24 hours, I gotta work hard".
  • 週期性地舉辦黑客馬拉松活動。這有助於營造一種崇尚創新和創作的企業文化,人們會受到同伴的激勵——“擦,這個混蛋居然可以在 24 小時內寫出這麼漂亮的框架,我也得加把勁兒了!”
via:原文出處: I.M.H.O 譯文出處:CSS魔法

  • 本文固定連結: http://www.itjhwd.com/cxykj/
來自:IT江湖
評論(2)

相關文章