程序員的核心競爭力是什麼?為什麼?

相關:
產品經理的核心競爭力是什麼?為什麼?
產品運營的核心競爭力是什麼?為什麼?


學習能力,尤其是自學能力,你啥時看到那些有名的程序高手在論壇上問「學習XX該看什麼書,如何快速學習XXX,學習XXX有什麼代碼推薦」之類的問題,他們想學什麼很快就能自己找到相關資料。這個行業發展太快,技術淘汰的速度也很快,3年不學新東西就可能落伍了。

動手能力,都是看書看資料,當別人還在糾結看什麼書,還在糾結書里的字句是什麼意思的時候,有些人的幾百上千行代碼都已經能運行了。

耐心和毅力,做程序員興趣固然重要,寫自己喜歡的代碼那是相當愉快的事情,但是程序開發中無論如何還有大量乏味無趣的事情,要能堅持,咬牙把這些做完。

表達能力,能在大庭廣眾下,把自己的想法邏輯清晰流暢地講出來,讓人聽懂。

那麼技術呢?技術不重要,有了以上幾種能力,市場上需要什麼技術,很快就能掌握了。

最後再說說工資的事,記住兩句話:
工資不是老闆對你過去貢獻的回報而是對你未來貢獻的預期。
現任老闆不可能給出讓你滿意的工資,下一任老闆才會。


終於有一個問題可以好好說說我遇到過的彎路了。我認為程序員的核心競爭力如下:
1. 整合現有資源的能力,什麼時候造輪子,什麼時候不造輪子,什麼情況下利用公司自己的輪子,什麼情況下利用開源的輪子。
2. 產品發展方向的規劃能力,一個技術類的框架,產品,平台,需要程序員明確什麼問題是要解決的,什麼問題是不要解決的,產品相對其他競爭產品的優勢在哪些方面。
3. debug能力,有了線上問題,可以一擼到底,無論問題在哪裡,操作系統,文件系統,虛擬機,框架,等等,都可以定位問題所在。
4. 文檔、pr能力,作出了產品,可以迅速了解優勢所在並推廣
5. 編碼習慣,比如嚴謹的持續集成,測試樣例先行,之所以說是習慣不是技巧,是因為好的編碼習慣,可以持續為團隊帶來更大收益,而好的編碼技巧沒有那麼大的效果。

切忌以下行為:
1. 長時間調研沒結果,學習了很多框架,做法,無法認真對比優劣,這就是不能抓住核心的問題
2. 被需求牽著鼻子走,失去了產品的規劃方向,或是走到哪算到哪,做出來的東西因為臃腫的需求越做越繁瑣
3. 隨口亂說release時間,總是失約


問:池老師,我是個不愛互動的人,但是您所有的文章我都看了,非常感謝您的引導,我入手了人生第一台 MBP。現在問題來了,但是找不到更合適的人解答,只能求助於您了,如果您有時間的話。問題是這樣的:我有個32bit unix file(開啟一個服務進程),在 Mac 上執行時錯誤提示是:exec format error,但是在 Linux 伺服器卻可以執行,為何?Mac 上有可以運行的方案嗎?期待您的回復,不勝感激。

答:Linux 和 OS X 是不同的操作系統,可以嘗試在 OS X 里重新編譯這個文件。

問:非常感謝!如果沒有文件源碼是不是就只能認命了?

答:可以在 Mac 上裝 Docker,然後對服務進行埠映射就可以了。

答:茅塞頓開。謝池老師。

以上是我和一位讀者的對話,這位小夥子在拿到答案之後像一縷煙塵一樣消失無蹤,之後再也沒有出現過。

在微信上加了很多 MacTalk 的讀者之後,經常會收到一些奇奇怪怪的問題,關於職場、關於選擇、關於朋友、關於 Mac、關於技術等等,不一而足。但是我能回答的卻很少。問題不好沒法回答,問題太複雜沒法回答,問題領域超出我的認知也沒法回答,耗時太長的問題我也沒時間回答,實在是慚愧的緊。好在偶爾也能夠幫助一些小夥伴解決一些實際問題,心理上略感安慰,比如上面這個問題。

把這段程序員之間的對話翻譯一下,大致是這麼個故事:

一位讀者有一個32位的 Unix 可執行文件,可以在某種版本的 Linux 伺服器上正常運行,運行這個文件作用就是起個進程,開埠,然後與其他程序進行交互。但是這個文件拿到 Mac 上完全沒辦法運行。就在他趴在 Mac 上愁腸百結萬念俱灰的時候,突然想到了「池老師」。不就是這個老傢伙把 Mac 誇的像一朵玫瑰一樣,讓每個程序員都去採摘么?現在扎手了,你不管誰管?於是他給我發來消息,意思就是管也得管,不管也得管,您看著辦。

我拿到問題一看,不難。Linux 和 OS X 雖然師出同門,都是從老前輩 Unix 那兒畢業的,但是後來畢竟各練各的,在 Linux 編譯好的程序不可能在 OS X 上用,但是在 OS X 上重新編譯一下可能就沒事了。我把這個想法告訴了這位程序員,得到的反饋是:對不起哥,沒有源代碼!

我被這個冷酷的回復震驚了,立刻意識到剛才的想法並不是最優解決方案,因為在重新編譯的過程中,各種包的依賴關係和編譯錯誤足以讓你焦頭爛額,我隨即提供了 B 計劃:在 OS X 上安裝 Docker,輕量級的容器 Docker 可以運行各種版本的 Linux,把文件扔到 Docker 里,然後通過主機和 Docker 之間的埠映射即可輕鬆解決這一問題。

雖然這裡面會涉及很多技術細節,但是方向是沒有問題的,所以這位程序員立刻表示「茅塞頓開」,然後「biu 」的一聲就在屏幕對面消失了,沒有留給我說「不客氣」的機會。

這個問題裝個 Linux 虛擬機也可以解決,但是虛擬機過於耗費資源,而且不如 Docker 靈活,所以不是最佳解決方案。Docker 是。

做為一個程序員,我們除了要掌握多門程序語言和多種資料庫,了解前端技術、後端技術,通曉網路七層架構,知道 TCP/IP三次握手和四次揮手,編寫漂亮的代碼,設計優美的架構……之外,我們還要解決研發、程序運行和產品上線過程中遇到的各種問題,而且被要求以最小的代價來解決問題……我們容易嗎?

除了編程技巧和程序設計能力,解決問題的穩准狠是衡量一個程序員是否優秀的重要因素之一,也是資深技術人員真正的價值所在。在科技浪潮澎湃、技術信息撲面而來的今天,一位剛畢業的大學生如果足夠勤奮,他可以在兩三個月之內掌握一門編程語言,並編寫出像模像樣的軟體,他們的學習速度甚至超過了我們這些老程序員,但是解決問題的能力是無法速成的,只能依靠時間、經驗和慘痛的教訓歷練而成。有時候還需要靈感和運氣。

很多軍迷讀了大量的軍事著作和歷史小說,常常羨慕那些名將的風采,並浩嘆自己「生不逢時」。但是名將不是那麼容易煉成的。歷史上叱詫風雲的名將鳳毛麟角,他們親自持刀上陣追擊敵人,見識戰場的慘烈,目睹敵人的屍體,看到戰友被殺,知道被刀看中會流血死去,他們冷酷無情,堅如磐石,在全軍即將崩潰的時候發現敵人的弱點並進行攻擊,在瞬息萬變的戰場進行決斷,在多次失敗後從無數士兵的屍體里站起來重新出發去挑戰那個戰勝你的對手,在所有人對你說「指導員,我們上吧」的時候,堅定的說出那三個字:再等等!

如果你做不到這些,那還是做個最終會被張飛槍挑的小兵吧。

優秀的程序員同樣如此,菜鳥常常羨慕高手在談笑之間讓難題灰飛煙滅,而自己卻苦苦思索而不得入門之法,殊不知這些高手同樣經歷了名將的那些腥風血雨。他們在清晨的微光里編寫代碼,在轟鳴的機房中調試程序,他們徹夜不眠就是為了解決一個 bug,他們要承受數據丟失或上線失敗的痛苦,默默吞下眼淚,準備下一次的戰鬥。不停的學習、實踐和思索,成千上萬個小時之後,高手史成。

同樣的問題,高手的解決思路和小球是截然不同的。一般來說,只要不是世界難題,給足時間、空間和人力,都能解決。如果你遇到問題告訴上級,這個問題交給我了,兩年之內搞的妥妥噠,那就不要怪項目組組團把你打出翔來,因為大家要的是分分鐘解決,不是兩年。在這個唯快不破的年代,我們沒有這麼多的時間,所以要通過逆向思維、經驗教訓、輾轉騰挪、借力打力等方式以最小的代價快速解決問題。這才是老程序員的價值。

再舉個例子,一個運行良好的線上應用在你修改 bug 增加功能之後重新上線出現了一些莫名其妙的問題,比如佔用資源增加或運行一段時間宕機等等,怎麼解決?

常規的做法就是通過閱讀日誌、模擬線上環境和調試程序來定位錯誤。容易的 bug 用這些方式基本就能搞定了,但是更隱蔽的 bug 會耗費大量的時間和人力。更好的方式是什麼?

首先,排查是程序問題還是環境問題,把線上程序恢復到運行正常時的老版本,如果出現了同樣的問題,那就是生產環境發生了改變。如果運行正常,要麼是你修改老 bug 時引入了新 bug,要麼是新增加的代碼出現了問題。

其次,閱讀產品的 changelog,根據代碼提交的時間線構建系統,通過二分法排查,定位是哪部分代碼引起的問題。

第三,排除了所有的不可能,剩下的無論看起來如何不可能,就是它乾的。

以上只是一個簡單的例子,實際的情況可能比這個例子複雜一百倍,需要我們綜合使用各種方式進行交叉比對和錯誤排查才能解決。這僅僅是遇到問題解決問題,更多的時候是需要你提出問題,並解決問題,那是更高的境界。

很多人學了那麼多編程語言,寫了十幾年程序,最終依然無法做到以最小的代價解決問題,不禁讓人扼腕嘆息。

程序員真正的競爭力是什麼?以最小的代價解決問題!知行合一,方可無敵於天下。


以前看過孟岩先生blog中的一段,感覺說的很好
技術路線的選擇重要但不具有決定性

那麼核心競爭力是什麼?我觀察圈子裡很多成功和不成功的技術人,提出一個觀點,那就是個人的核心競爭力是是他獨特的個性知識經驗組合
這個行業里擁擠著上百萬聰明人,彼此之間真正的不同在哪裡?不在於你學的是什麼技術,學得多深,IQ多少,而在於你身上有別人沒有的獨特的個性、背景、知
識和經驗的組合。如果這種組合,1,絕無僅有;2,在實踐中有價值,3,具有可持續發展性,那你就具備核心競爭力。因此,當設計自己的發展路線時,應當最大限度地加強和發揮自己獨特的組合,而不是尋求單項的超越。而構建自己獨特組合的方式,主要是通過實踐,其次是要有意識地構造。關於這個觀點,話題太大,我不打算贅述。


幾個程序員和幾個外行在嚷嚷,三句話不離數學演算法編譯這裝逼三寶。還說得津津有味好像真是那麼回事兒似的。
我說點野蠻實用的吧。
你的BOSS說,XX我們有個YY產品/項目/module/feature要做,你來負責。
你就應該最遲下禮拜一上班前將方案、預算、計劃發到BOSS郵箱里。
你還應該爭取、協調到必需的資源,在進度質量成本之間求一個平衡,向BOSS交付一個各方滿意的結果。

至於什麼數學演算法語言,那只是基本知識,你解決問題的一個個手段而已,你不是靠販賣這些知識為生的(諮詢,培訓,寫書一類),就不值得天天拿出來念叨。

若是用一句話總結,核心競爭力就是在既定條件下獨立解決問題的能力。

如果沒有這個能力,程序員們只能一次又一次地討論什麼30歲問題,35歲問題。


1.理論知識+演算法+數據結構

雖然這其實並不能算在核心競爭力里,但應屆生的offer能否獲得大部分就是以此決定的,這也是工作時別人能否信任你的前提,也決定著你未來能不能成為一個全面的程序員。雖然工作崗位的方向可能是確定的,但是各個方向的理論知識會讓你閃現更多的想法,讓你更具創造力和綜合應用能力。理論知識、演算法和數據結構是競爭的基礎,也決定著程序員的起點,其中演算法和數據結構尤為重要。

推薦閱讀:

序員必須掌握哪些演算法?

本科生如何才能進入騰訊,阿里等一流的互聯網公司?

2.動手能力

程序員是動手能力十分強的工作,對做項目的能力要求很高,當然也決定的程序員的高低。比如解決bug的能力。bug不可避免,重要的是盡量減少和解決bug。在實際編程工作中,bug 解決能力大致決定了你在開發團隊中的地位。

3.敏銳度

如果能對工作中任何小的問題有足夠的敏銳度,然後經過自己的思考,分析問題,解決問題,那麼,通過這種良性積累,成長空間是很大的。不僅對自己,對自己的代碼的質量也有很大的幫助,比如很多性能或程序邏輯上非致命的bug,可能進入特殊場景就會突然爆發,多一點敏銳度,就會減少這種危機,提高自己的代碼質量。通俗的來說,「敏銳度」就是「有感覺」:沒有深入探索,但是有直觀的第一反應(這裡可能會有問題),進而對這個點深究並加以解決優化。而這個敏銳度不是一蹴而就的,需要積累、悟性和主動性,也就決定著程序員之間的差距。

4.某個領域的專家

核心競爭力即獨一無二的優勢,如果每個方面都是粗略的了解,能動手做,那麼其他人也可以。所以精通某個領域,甚至成為不可替代的專家級人物,是競爭的關鍵之一。

5.學習能力/主動學習

IT行業不斷的出現新興事物,五年就是另一個時代。對程序員來說,學習能力決定你是呆在舒適圈還是跟著時代嘗試新的東西,讓自己不落伍。其實,每份工作都需要我們通過不斷的學習來適應時代,讓自己更全面。學習能力/主動學習是非常重要的,不然也不會出現大齡程序員就業危機了。

6.對自己的要求

有追求的程序員對自己要求很高,這決定著工作態度和工作質量。現在有不少程序員代碼寫的很亂,沒有任何優化,工作消極,所以只能成為平庸的程序員。有追求的程序員對自己敲的代碼負責,對公司的產品負責,不停的思考怎麼才能做好;怎麼寫注釋讓項目其他人員一下子看懂;如何優化等。這和熱情也有關係,但更重要的是對自己的要求。

7.溝通能力、管理能力

程序員的核心競爭力還可以上升到溝通能力、管理能力,除了以上幾點之外,如果溝通能力、管理能力出眾,也是競爭的有利因素之一。帶領團隊項目並不容易,你要和上級溝通直到上級滿意你的方案;你要和團隊人員溝通,讓他們在你的帶領下進行修改調試;要在時間和質量的權衡之下做出一個好產品;如何組建團隊讓團隊力量發揮到最大;展示的時候用什麼樣的方式展現出自己項目的highlight。

歡迎關注我的微信公眾號:九章演算法(ninechapter),幫助你了解IT技術前沿,通過面試、拿到offer、找到好工作!


推薦 @劉未鵬 的兩篇文章:


方法論、方法論——程序員的阿喀琉斯之踵

BY 劉未鵬

摘錄

方法論看似是個很抽象的東西,並且的確有一些方法論是抽象到 over-generalized (泛化過度)的地步,然而說實話在實踐當中我總是發現(正確的)方法論是再現實不過的東西,比如一個大家都明白的道理是:如果方向走錯了,那麼做的功就基本全白費了(還有比如「如果方法對頭,就能事半功倍,反之可能多走很多彎路」)——然而現實中有多少人能夠真正實踐這個方法呢?絕大多數人都是只顧解決眼前問題,抓了這頭丟了那頭,更多人是不知道問題是什麼,只管把頭腦中能聯想到的一個以前類似情況下的類似方案套用上來。以前我總是覺得一個公司裡面,CEO/CTO 這樣的角色是基本擺設,但我現在不這樣想了。在 How 層面把事情做好,做成一個精鑽的程序員,那頂多就是能把鉗子使好,這樣的事情很多人都能做到,熟能生巧嘛。換句話說程序員基本上是去解決一個定義好的問題,去實施一個定義好的方案。然而決策問題就不一樣了,決策問題是需要去定義問題是什麼,以及權衡最佳方案是什麼,不管是決策技術架構還是決策商業策略,都是非常複雜的思維過程,需要綜合和權衡大量的信息,這種能力就不是簡單楞著頭搞下去能練出來的了,很多時候需要抬起頭來看,免得只見樹木不見森林

當然,我自己還沒能到這個層面,尚需要不斷實踐和總結,所以只能稍微的談一點感受,再往下扯只怕就會流於空泛了。這一點上我還是舉一個程序員們喜聞樂見的例子吧,在程序員眼睛裡面,做一個項目,也許首先想到的是用什麼語言,什麼框架,什麼庫,在這個方向上那就是什麼看上去牛B用什麼,恨不能都用 haskell、lisp 來寫才爽,用 Java?那多沒意思啊,Java 那坨弱智語法我小學的弟弟都能掌握,也沒啥牛B的語言特性,忒沒成就感(只可惜真正判別弱智與否的並非用什麼語言技術,而是做出什麼產品滿足什麼需求)。這就是屬於只考慮單個孤立因素的簡單(或者說 Naive 的)決策,這個因素就是——只要讓我自己感覺爽——只可惜並不是讓自己感覺爽的做法就是真正解決問題的做法,始終要弄清問題是什麼,在後者意義上,一些對於技術型程序員往往沒有吸引力的話題其實有著極其重大的價值——比如什麼時候設計,什麼時候重構,什麼時候集成,再往上一層其實這些又都是次級問題,首要的問題還是這個產品滿足什麼需求,有什麼市場(即這件事情值不值得做),有一句話想必很多人常聽說,如果不知道要做什麼,套上十二層架構也無濟於事,方法永遠不是因,而是果。

再舉個例子,如果我想給我的網站做一個 feature ,我認為這個 feature 技術上很牛很強大,而且剛好有機會使用一下我最近修鍊的某某 framework 和某某語言,而且這玩意很有挑戰性,還不是一般人能夠做得了的,綜合以上三點,我立時覺得心癢難耐摩拳擦掌。然而實際上這個問題應該怎樣分析呢?首先,考慮到以上三點,這將會是一個投入相當大的項目,那麼其收益就必須要對得起這個投入,技術上很牛不代表商業上就牛,再牛再難做的 feature 如果不能帶來商業價值那就是負收益。總而言之,

1. 一件事情僅僅讓你感覺挺牛不代表這件事情就是值得做的; 2. 一件事情僅僅讓你感到很有興趣並不代表這件事情就是值得做的。


====================================================

什麼才是你的不可替代性和核心競爭力

BY 劉未鵬

摘錄:

我雖不是經濟學專業,但是翻開任何一本經濟學的教材,或者直接翻開 wikipedia 的 economics 條目,都會看到物以稀為貴這條鐵律。人才作為資源的一種,也是同樣的道理。而稀缺性,換種說法也可以叫做不可替代性。一種資源越是稀缺,不可替代性就越強。再加上如果這種資源是一種具有實實在在使用價值的東西(而不是荷蘭的鬱金香泡沫),那麼其價格就會越高。

問題是,如何構築你的個人知識體系,使得你的知識技能集儘可能成為不可替代的呢?我相信以下的知識技能組合是具有相當程度的不可替代性的

  1. 專業領域技能:成為一個專業領域的專家,你的專業技能越強,在這個領域的不可替代性就越高。這個自是不用多說的。
  2. 跨領域的技能:解決問題的能力,創新思維,判斷與決策能力,Critical-Thinking,表達溝通能力,Open Mind 等等。
  3. 學習能力:嚴格來說學習能力也屬於跨領域的技能,但由於實在太重要,並且跨任何領域,所以獨立出來。如何培養學習能力,到目前為止我所知道的最有效的辦法就是持續學習和思考新知識。
  4. 性格要素:嚴格來說這也屬於跨領域技能,理由同上。一些我相信很重要的性格要素包括:專註、持之以恆、自省(意識到自己的問題所在的能力,這是改進自身的大前提)、好奇心、自信、謙卑(自信和謙卑是不悖的,前者是相信別人能夠做到的自己也能夠做到,後者是不要總認為自己確信正確的就一定是正確的,Keep an open mind)等等。

=========

以上文章,均被選入暗時間 (這本書上市以來,已經印刷了21次)


附:

有哪些可以提高程序員技術檔次的書或博客?

如何成為一個傑出的程序員或軟體工程師?

苦果:像專家一樣思考,像外行一樣實踐


做為一個八年的程序員,說說我的一些感受。要想在程序員這條路上走的更遠,我認為有兩種能力至關重要:分析、解決問題的能力,和自我學習的能力,為什麼這麼說呢?
先談談分析解決問題的能力,本質上來說,老闆請你來都是來解決問題的,你能解決問題,才能體現你的價值,才有加薪的籌碼。一個項目、一個任務,或者一個bug,都可以看做是一個問題,你是否能夠快速的分析情況,脫離表象找到問題的根源,或者把一個大問題分解成若干可以處理的小問題,並在規定的時間內解決它,可以說是考量你技術水準的重要唯一標準。這個能力如何培養呢?兩種途徑:1.豐富的行業經驗,你經歷的多了,自然就會知道該怎麼處理了,俗話說沒吃過豬肉還沒見過豬跑嘛,大概就是這個意思。2.有意識的學習一些方法論,鍛煉自己的結構化思維,不僅僅是對工作,對生活的方方面面,都挺有用的。推薦關注一下劉未鵬的《暗時間》,是專為程序員寫的方法論,他本身也是一名程序員。我見過一些厲害的PM,基本上不摸代碼了,但是聽手下人說一下情況,還是能快速的找到根結,離不開他們的從業經驗和系統的思維方法。

然後說一下自我學習的能力,總所周知,程序員是一個很苦逼的職業,技術更新日新月異,產品換代更是以月為單位計,不學習如何能長久?這裡的學習又分為兩大塊,一塊為技術知識的學習,包括編程技能,基本原理,演算法結構以及與工作環境密切相關的知識,另外值得特別一提的是經典開源代碼的學習,這是成為高手的必經之路;另一塊為產品知識、行業動態的學習,國內一般情況是寫代碼比較好或者比較久的人,就開始帶團隊,如果沒有這方面的積累,就會比較困難,另外就算一門心思做技術,多了解一些也有利於加深對需求、功能的理解,不是什麼壞事。

這兩種能力都是在平時工作中慢慢鍛煉起來的,需要長期的堅持和打磨。做為一個剛入行的程序員,要想把事情做好,獲得更多的機會,也有幾個方面的技能需要注意:

1.編程能力,這個毋庸置疑,做為一名程序員,能寫代碼、寫高質量的代碼,可以說是基本功,離開了這個,就像無根之木,無源之水,談再多也沒用。這個可以和公司內的高手學,私下利用業餘時間豐富理論知識,多看一些開源代碼,從模仿到動手嘗試、再創新。

2.溝通能力,聽說讀寫都很重要,對新手來說聽和說尤其值得注意。聽是說一個任務下來,要聽清楚問題是什麼,需求是什麼,有什麼條件,聽清楚了再動手。說是要表達有條理,說的清楚來龍去脈,說的清楚解決問題的思路。我見過很多程序員,包括工作過好幾年的也有,連一個複雜點的問題是怎麼回事,都說不清楚,東一下西一下,一點邏輯結構都沒有,很明顯他的思路就是混亂的。
這裡還要補充提兩點,一個是問,不清楚的一定要問,不要裝,其實你進公司做三天事,你大概是個什麼水平,什麼樣的思維模式,你的領導就一清二楚了,裝也沒用。另一個是反饋,一件事領導交待給你,你要在關鍵結點給他反饋,告訴他做的怎麼樣了,有什麼困難,下一步準備怎麼做,需要什麼支持等等。不要等到領導來問,才告訴他你有什麼問題搞不定,我不知道別人怎麼樣,反正我對這種情況是深惡痛絕的,這樣搞兩次以後,我基本上就不會把很關鍵的任務交給這個人了。

3.良好的工作態度,不同的公司有不同的文化氛圍,有比較看重的價值觀,就不一一列舉了。竊以為對於程序員來說,最重要的一個態度,就是不能湊合。一般的程序員在發現問題以後,東試試西試試,能解決問題就行了,但是優秀的程序員覺得不會妥協,一定會試圖去分析產生問題的原因,根本的解決方法,甚至要去看Linux內核代碼也毫不妥協。
4.通用工作技能的掌握,包括時間管理、項目管理及個人管理等,介紹這方面的書籍比較多,就不再詳敘了,有興趣可以找到很多信息。


「玩演算法的碼農,打拚靠藍條,像是法師。數學就等於藍條最大值,數學差,魔法值不高,很快就到瓶頸了。外語影響回藍速度。經驗和智力加急速和穿透的。不玩演算法的碼農,像是戰士,打拚靠血條,體質加生命,精神加生命回復,經驗和敏捷加急速和破甲。」


推薦一位IT精英的博客,博客地址:

  • zhuweisky - 博客園

不為繁華易匠心

做技術是需要匠心的。什麼是匠心?我們原本是有匠心的,我們如今還有匠心嗎?我們為什麼沒有匠心了?為什麼我們要重拾匠心?如何重拾匠心?


一. 做技術是需要匠心的

中國古時的玉匠,切磋琢磨,用繩與砂漿,費數十載心力,終將渾然璞玉製成傳世珍品,千年遺音在,猶見當年寂寞心。

日本傳統的刀匠,將千錘百鍊之鋼反覆鍛鑿、淬火、打造、磨製,每一處技至精微,每一處心入幽明——刀中有魂!

歐洲中世紀的石匠,在哥特式教堂的飛檐上雕刻出了靈獸狀噴水嘴,雖不為世人所見,仍一絲不苟——每一鑿中都有天堂!

米蓋朗基羅花四年雕刻出了震驚世人的《大衛》,曹雪芹批閱十載創作出了藝術巔峰的《紅樓》——任何偉大的作品背後都有一顆匠心。


二. 什麼是匠心?

匠心是對於作品而言的。

匠心是傾注於作品之中的精神、情感、乃至魂魄。

匠心發自於愛,是對作品視如己出的拳拳之心,是恆久忍耐又有恩慈。

匠心是出於這份愛的對於完美的追求,是追求中不避艱苦,是追求中自得其樂。

匠心是涵泳在作品之中的自我實現,是我與作品的相互完成,彼此造就。

在匠心看來,作品是我的至親之物,棲居著我的精神,安放著我的靈魂。

匠心即是愛心 + 恆心 + 一片苦心 + 七竅玲瓏心 + 出離心 + 寂寞心 + 金剛心 + 歡喜心 + 其人雖已歿,千載有餘情。

三.我們原本是有匠心的

我們原本是有匠心的。

當年Ken Thompson 和 Dennis M.Ritchie 一起在貝爾實驗室里苦心孤詣。

如今,沒有人不知道Unix意味著什麼,C意味著什麼。

他們的匠心也彰顯在Unix和C中令無數人為之驚嘆、感懷。


四.我們如今還有匠心嗎?

如今,我們再也難得見到「作品」問世。

甚至於「產品」也是少見。見得最多的則是「商品」。

對於我們而言,做什麼東西並不重要,重要的是做這個掙不掙錢。於是我們沖著掙錢做了各種項目,C/S、B/S、前端、後端、資料庫、Java、.Net、安卓——彷彿無所不知,無所不曉,十年之後回首,覺得自己已然是全才。

我們從事了大量的勞動,寫了幾十萬行代碼。我們的工資越來越高,並為此沾沾自喜。

可是,這樣的成就,無非是一個熟練工人的成就。

我們何曾擁有匠心?

五.我們為什麼沒有匠心了?

隨著大生產時代的到來,那種田園詩般的男耕女織、帶月荷鋤歸的工作方式,早已一去不復返。社會分工越來越細碎化,我們面對的是一個又一個的局部。在這之中需要的是規格化、標準化、量化和同質化。換言之,你所做的工作必須是合乎統一規範的,具有統一規格的單元,如此才能拼接到整體的工作中。因此,任何的創造性,任何私人性質的感情和精神的注入,歸根到底,只是錯誤的根源。 ——我們於何處安放匠心?

如今,商品成為了一切物所具有的普遍的形式。沒有什麼不是商品。商品是以交換為目的的。我們生產任何勞務、產品、或服務,都是為了交換,為了換取一般等價物,即貨幣,即金錢。因此,錢成為了衡量一切的準繩。如今不乏偉大的商品誕生,可是偉大的作品卻乏善可陳。商品需要的是批量生產,需要對消費者投其所好,當然商品也需要創意,可是那不是匠心!在一個由商品拜物教統治的時代,我們於何處安放匠心?

世界如此繁華,匠心未免太奢侈了!我們在喧嘩與騷動中度日,有太多的追求,太多的比較,太多的你追我趕,太多的惶惶終日。每天有看不完的新聞,刷不完的微博,做不完的手頭工作。我們為無盡的事情發愁,疲於奔命。匠心未免太奢侈了!早在我們出生的那一刻,我們就開始照著大家來活,大家都在讀書,大家都在考學,大家都在找工作,大家都在結婚,大家都在買房,大家都在炒股,當我們跟著大家忙忙碌碌的時候,匠心自始就已沉淪!


六.為什麼我們要重拾匠心?

假使我們沒有匠心,我們將不會在工作中獲得真正的快樂。因為我們不能自覺自由地工作,我們的工作是boss定義的,而不是自己定義的。如此一來,我們就與我們的勞動之間切斷了血肉聯繫。我們的勞動成為了壓迫我們、奴役我們的異己力量。我們淪為被迫勞動。我們真正的生活在下班之後開始。我們不停地抱怨:要不是為了幾個臭錢,我才不要干這些。如何才能回歸到那種田園詩般的勞作之中——我們必須重拾匠心!

唯有在擁有匠心之後,我們才能走向真正的自我實現。馬斯洛將人的最高層次的需求定義為自我實現。一個自我實現的人,一個將自己的才能發揮到最大限度的人,才是那個獲得最大心理滿足的人。現實生活中唯有少數精英才能夠成為自我實現人。但是這並不妨礙我們追求自我實現。一個有著庸碌之心的人,是不可能走向自我實現的。唯有重拾匠心,我們才能佔有工作的全部意義,才能不避艱苦、精益求精,與自己的作品相互完成,彼此造就。

七.如何重拾匠心?

對於如何重拾匠心的問題,恐怕要留給每一個人來思考。而且是一個需要始終思考的問題。

在這裡我並不想給出答案。

只希望能在這篇文章中能夠看見你,看見我,看見大家。

能見眾生便是如來,不易匠心方得始終。


參考閱讀:

程序員的出路之一

——————————————————————————————————


如果用一句話來回答,就是——解決問題的能力。
如果要啰嗦一點,就是——使工作成果達到交付標準的能力。
如果可以再啰嗦一點,就是——使自己和自己所在(或帶領的)的團隊,交付符合交付標準的成果的能力。


程序員的核心競爭力就是快速搞定問題的能力和自我學習能力。


  1. 學歷代表過去,能力代表現在,學習能力代表未來。
  2. 精通one,學習another,關注next。

昨天在手機上草草寫下「解決問題的能力」。晚上腦子裡總是不斷跳出這個問題。解決問題的能力實在不是個好答案。包括「學習的能力」,「做事的態度」什麼的都不是好答案。每個行業不都應該是這樣的嗎?什麼才是碼農的核心競爭力呢?

計算機行業發展到今天,門檻其實已經很低了。大量現成的技術和平台,讓你可以像搭積木一樣完成日常工作。即便「不求甚解」,做出來的東西很多時候也工作得很好。那麼為什麼有的人能脫穎而出成為高手,有的人只是變成熟手?我覺得是探究細節的熱情。計算機科學實在是太熱愛抽象和封裝了。只要有抽象,任何問題都可以解決*。可惜,抽象這玩意兒,就像是紙包不住火,底層的細節總是會在一些詭異的情況下影響到上層*。高手之所以是高手,就是因為他們會有興趣去了解下層的那些細節吧。

p.s. 說起來,這好像也不是計算機行業獨有的現象啊,設計師會關心布料和皮革的性質,廚師會關心食材的產地,etc……看來我的答案也不是好答案呢……

*1. All problems in computer science can be solved by another level of indirection, except of course for the problem of too many indirections. (後半截我故意截掉了,哼
*2. All non-trivial abstractions, to some degree, are leaky.

p.p.s 無論從事什麼行業,到了一定程度以後,專業(寫代碼的)水平不再是評價的唯一標準。與人合作的能力會越來越重要。別人評價小明的時候,要麼說「小明的代碼經常錯誤百出,跑不起來又看不明白,完全就是不合格的程序員,哪個白痴把他招進來的?」,要麼就是「小明的代碼寫的很好,高效穩定。而且小明這個人啊。。。」 看到沒有?專業只是基本要求而已。達到合格線以後,別人的評價就和專業沒關係了,之後都是對你這個人的印象怎麼怎麼樣。你在同事之間,老闆眼裡,業界中的形象(名聲)決定了你的升遷(錢)和機會(錢)。

怎麼樹立自己的形象?首先最基本的,專業靠譜。上面說了,代碼要好好寫,另外開會什麼的別遲到,老闆派的任務要按時完成,總之就是多快好省地完成工作。第二,樂於學習,樂於分享。你是專家沒錯,你還得讓別人知道你是專家。分享是個不錯的方法,而且幫助同事進步也是幫助公司提高效率的好方法,大家(老闆)自然看在眼裡的。第三,勇於攻堅。很多時候很多問題在當下是沒有現成方案的,你願意去(幫老闆)扛下來嗎?還有,這也是培養自己從一個solution implementer轉變成problem solver的機會。最後,別人喜歡和你一起工作嗎?小明很牛逼但是個大傻逼,要是得到這麼二逼的評價,你也是走不遠的。


我認為這是個很好的問題。雖然我也經驗尚淺,但還是談談自己的想法拋磚引玉吧。

@vczh V大提到了編譯器是鐵飯碗,我覺得更總結概括的說,底層的東西會比上層的更有競爭力,這一條幾乎是絕對正確的。但同樣我認為做這些的人畢竟是少數(大概所有程序員的10%有嗎?),所以對於大部分程序員來說,朝著這個方向是OK的,但是也不必強求。

所以對大部分也許一輩子都不會接觸這麼底層的普通程序員,什麼才是最核心的競爭力?我認為是自主學習能力。


IT,尤其是編程算是技術點更新換代很快的一門工科,很難有學好一門技術/語言能吃遍整個職業生涯的情況。所以我總認為那些鼓吹"編程是吃年輕飯,過了30就不行了「的人,很多是因為自己就只掌握學生時代學的,或者第一份工作中用的那個語言/技術。縱向發展研究的不夠深,橫向上又沒有學到新的技術。這樣的話,當然競爭不過年輕人。

另外,我認為 @曙方 引用那篇文章的標題很好,技術路線的選擇遠沒有你想像中那麼重要。知乎上很多問題都是為:XX語言到底怎麼樣,XX框架又沒有前途,我該學XX還是YY。語言有差異,也有相對的「好」與「壞「,但是對於個人而言,糾結於某個語言」好不好「,還不如去想想自己到底喜歡用什麼語言寫程序,然後把這一門鑽研的夠深。

知乎上很多黑Java的,但這不妨礙 @RednaxelaFX 菊苣能在這個領域做到極致;很多黑JS的,也不妨礙有 @賀師俊 這樣的菊苣;黑宇宙第一語言PHP的就更別說了,但也不妨礙PHP在FB的地位。所以吧,與其花功夫在揣摩將來流行的趨勢,不如撿一個自己順手的學到極致,這才是競爭力

回到主題上來,為什麼我要說最核心競爭力是自主學習能力呢?因為在我自己工作兩年的經驗上看來,大部分人不缺乏學習能力,但是沒有人push,也很難主動的去新的。這非常能理解,國內加班很嚴重,PM一直push你產品的進度。在這種情況下,大部分人更願意選擇「安全」的做法,即用自己最熟悉的技術/框架/設計模式,以實現功能為第一目的。但事實上老是重複自己懂的東西,很難真正進步,而僅僅是「實現」為目標,又很難往深處去了解技術/框架本質的東西。

以JS程序員為例,大部分人達到熟悉jQuery這個檔次就停步了。因為對絕大部分開發任務來講,jQuery到這個程度基本上就不會出現某個功能不會實現的窘境。但是拿一個通讀過jQuery源碼的人來比,兩者差的遠遠不僅僅是jQuery本身的知識。能通讀掌握jQuery源碼的人,至少在對JS理解,在如何實現一個庫等等軟性|能力比前者不知道強多少。

所以在現在的我看來,自主學習,這兩者同樣重要。


優雅的發脾氣,擺出一副牛逼的姿態。


導語:核心競爭力最早由普拉哈拉德和加里·哈默爾兩位教授提出,通常認為核心競爭力,即企業或個人相較於競爭對手而言所具備的競爭優勢與核心能力差異。注意,以上都是廢話,說白了就是你的優勢,而且最好是獨一無二的的優勢,這就是核心競爭力。

最近經常有人問我,怎樣在和別人競爭的過程中勝出,程序員怎樣才能毫無忌憚的跟老闆提漲工資的事,這讓我想到了核心競爭力這個概念。有了核心競爭力,你就能如願的在競爭中勝出,就能肆無忌憚的去找老闆談漲工資的事了。那到底什麼才是程序員的核心競爭力呢?那就得從程序員的這個行業發展背景和技術更新中獲得了,我們都知道互聯網的發展現在已經不能僅僅簡單又飛速來形容了,技術的更新迭代速度更是比高鐵還快。通過以上分析,所以我認為程序員的核心競爭力只有兩點:學習能力和責任。


為什麼這麼說呢,待會我細說,雖然這兩點看起來簡單,但是做起來其實挺難的。我下邊就聊聊什麼是學習能力和責任,而不是其他的。


1、學習能力

這裡的學習能力,不僅僅指的的是通過別人來學習,更重要的指的是自學能力。我們說了,互聯網的發展速度很快,而IT行業的技術更新迭代更快。如果你堅守在固有的知識面,肯定會被這個時代所拋棄,更別談核心競爭力了。所以,學習能力顯得尤為重要。與時俱進是程序員,尤其是一個好程序員的座右銘,看看那些技術大牛,每天更新博客,這都是在記錄自己的新知識,這就是學習能力。看個書,解決個bug,搜個資料對於大神級的人物來說是手到擒來,so easy!這就是學習能力。


這麼多能力,什麼解決問題的能力,表達能力,溝通能力,我為什麼偏偏就說學習能力呢?因為學習能力強的人,一般解決問題的能力也強,這是遙呼相應的能力,其他能力都是基於學習能力的。所以學習能力是程序員核心競爭力里必不可少的選項。這就像豬沒有了風一樣,不可能飛起來!


2、責任

責任,這是我想應該是泛指了。這裡的責任也是態度,不僅僅是責任心。當然了有責任心的人,態度也不會差,但是態度好,不一定有責任心。假如你沒有學習的態度,即使學習能力再強,也是無用的啊!所謂的態度決定一切就是這樣的。


責任,我們對自己敲的代碼是要負責任的,對於公司的產品是有責任的。要是一直想著就這樣吧,反正還沒出問題,先這樣,等出問題了再說的態度去做一個產品,你的核心競爭力就在逐漸的消失。如果心裡一直想著怎麼才能做的更好,你就是在進步,在加強自己的優勢和能力,用好的技術能力武裝了自己,還怕干不倒自己的競爭對手?


我記得我在我寫的文章《新時代的coder如何成為專業程序員》中曾經寫道:專業程序員會為他們的職業生涯、預算、日程安排承諾、錯誤、技能技巧負責。一個專業的程序員不會將責任推卸給別人。實事求是地說,現在的程序員都對工作非常消極,沒有人督促就慢慢悠悠的做,代碼也是寫的亂糟糟的,沒有任何優化,別人看你寫的代碼看的頭都大了。一個好的程序員是對自己的代碼有追求的,不僅能完成功能,還能寫的一手好代碼,跟寫的一手好字似的。優美的代碼才能讓人賞心悅目,負責的態度才能提高自己的責任感。有了責任感才能讓自己更好的成長。


最後來個總結:學習能力是核心競爭力的基礎,責任是核心競爭力的必然要求。學習是具有可持續發展性的,態度和責任更是可持續發展的要求,你具備了這兩樣可持續發展性的東西,你就具備了程序員的核心競爭力。記住:不要當一名熟練的代碼民工(碼農),這樣永遠都不會有質的提高,要做就做時代的弄潮兒,跟著時代前進,或者是革新這個時代。


結束語:說了這麼多,其實跟沒說一樣,其實就是廢話,因為我相信大家都知道,就是可能做不到,如果能夠做到,估計現在混的應該很不錯,還請希望堅持哦!


著名的移動互聯網專家,自媒體人,運營的公眾號「非著名程序員」,每天一篇原創技術分享和移動互聯網知識分享,微信公眾號:smart_android ,頭條號和百度百家賬號都是「非著名程序員」。


自我提升能力,研究問題能夠看到本質,在中國,英語也可以算上核心競爭力之一。


本人就是做IT技術的,做了10多年,今年34歲了,目前做CTO也做了3年多了。
從寫php起,到寫C++,差不多寫了6年,發現一個現象,互聯網裡的技術是越來越簡單了

後面幾年年想明白了一點事情,技術是為產品服務的,是為商業模式服務的,是為生意服務的。不要想著我要寫出如何複雜的演算法,那畢竟是少數人。
要承認自己是個普通人,真正要想明白自己的定位。 目前市面上的技術除了搜索、圖像處理、操作系統等等幾個比較複雜的領域,需要極高技術的,其他大部分的都是不太複雜的技術,大部分程序員也是在做著一個一個不同的「項目」,但用到的技術都差不多,都不太複雜的,如果你一直從事這樣的工作,用差不多相同的技術去完成一個一個不同的項目,那你就是吃青春飯的。

程序員要想讓自己越來越有價值,越來越值錢,需要不斷超越自己。
那樣才會「越老越值錢」。
怎麼做,自己才會越老越值錢呢?才不會是吃青春飯呢?
個人覺得目前無外乎幾條路
1、架構
互聯網最近幾年非常火爆,無論是遊戲、廣告、團購、外賣、電影、打車、共享單車等等等等,用到的技術都不是那麼的複雜,因為本身生意就不是那麼的複雜。 你找任何一個IT技術人員,都能給你開發出來,用到的技術大家都耳熟能詳的。
LNMP(Linux + Nginx+Mysql+PHP),大致是如此,無外乎再有些其他變種,Nginx自己開發了,Mysql用了別的,加了點memcache、redis做緩存,PHP語言或者java語言或者其他語言。或者性能要求高,不用DB了。
無非就是接入層+邏輯層+cache層+數據層。
年輕的碼農就是在這些常用軟體下,按照產品的商業邏輯去完成一些一些商業代碼,項目雖然不同,但是技術本質上沒有什麼區別。
唯一的,就是隨著用戶不斷增多,80%靠吃青春飯的程序員寫的代碼就不行了,支持不了快速增長的用戶,支持不了高並發。
所以無論互聯網項目如何變化,唯一不變的,讓自己有價值的就是分散式的架構體系。 設計一個好的系統架構,隨著業務不斷增長,只要加多幾台機器就行了。
這~~~~~就是你值錢的地方,越老架構經驗越足,越老越值錢。
以分散式架構體系的不變經驗去應對不斷變化的商業模式,不斷新增加的各種軟體,IT人才能立於不敗之地。

2、管理+生意
不想當將軍的不是好士兵。
到一定階段,如果你不管理別人,就是別人管理你,要知道,技術僅僅是為產品、為商業模式服務的,就是個工具。
要在不斷的做項目過程中,去理解這門生意,理解如何在人數增多的情況下讓項目跑的更快。 無論你做的什麼項目,歸根結底就是門生意,要不斷提高自己對生意的敏感度,不斷觀察團隊,打磨團隊,讓團隊支撐項目跑的最快。
這樣你的價值能低? 越老帶團隊經驗越多,對生意的理解越透徹,越老越值錢。
所以,讓要自己增值,不吃簡單碼農的青春飯,就要改變自己的想法。 積累架構經驗、積累管理經驗、積累對生意的理解,對商業的敏感。

工作個10年之後,管理和經商思維越來越足,自己都可以當老闆了。
很多人看的多,想得多,做的少。
我不僅做技術,還在不斷思考如何做生意,如何運用自己的互聯網知識。
P.S.:工作之餘,在麗江還開了家客棧:麗江王子別墅客棧
客棧微信公眾號:王子別墅客棧
歡迎大家過去作客~
不斷思考推廣運營,不斷思考互聯網跟實體的結合
開業一年,攜程好評數達到600條,微信公眾號推廣文章超過5萬真實閱讀
淡季入住率也達到了60%,旺季入住率99.9%

地址:麗江市古城區束河路天域陽光3期福瑞苑30棟 (束河古鎮正門口)
攜程:http://hotels.ctrip.com/hotel/4036364.html

360攝像頭直播客棧院子:http://jia.360.cn/pc/view.html?sn=36051728549amp;from=singlemessageamp;isappinstalled=1
客棧2樓直播玉龍雪山:http://jia.360.cn/mobile/view.html?sn=36051729367amp;from=singlemessageamp;isappinstalled=1
客棧介紹:
1、一畝地的獨棟別墅,三層樓+地下室的娛樂設施,10個房間 一樓每個房間里都有獨立花園,其中3個房間可以直接看到玉龍雪山 二樓每個房間都有陽台,其中2個房間超大陽台可以直接看到玉龍雪山 三樓是豪華套房,超大陽台可以直接看到玉龍雪山
2、地下室做了電影院KTV、還有麻將房
3、100M光纖入戶,電視機都是50寸以上樂視高清電視,購買了2年的樂視會員,看超清大片 4、傢具都是定製,衛浴都是科勒,高端洗浴用品
5、入住2個晚上以上免費接機
6、餐廳廚師點餐,管家一對一諮詢服務


有個妹子。

------------------------------

抖完機齡來回答,一般來說,越是科班的知識,越需要積累,比如OS,組成原理,演算法,數據結構。在工作中積累經驗,例如領域知識,項目管理之類的也是很重要的。


推薦閱讀:

零售行業的核心競爭力是什麼?
水處理設計從業人員的核心競爭力是什麼?有哪些適合長期發展的單位?
萬合天宜的核心競爭力是什麼?
對於性格內向的人,他們的競爭力和優勢在哪裡?
公益組織的核心競爭力通常有哪些?

TAG:程序員 | 核心競爭力 |