怎麼成為一個優秀的程式設計師 而不是一個優秀的碼農?

zhihu發表於2014-09-14

  優秀的程式設計師會告訴你打根基的重要性,會勸你在厚積薄發前要隱忍。

  優秀的碼農會告訴你學啥底層、啥啥啥一拖就好了,學了python還要啥自行車啊,資料結構排序函式二分搜尋這不都內建了嗎?工作中永遠用不到,學演算法有啥用啊?成為高手有很多種方法彙編是個屁啊?

  +++基礎的分割線+++

  列舉幾個我認為比較重要的根基並附入門書

  程式語言,《程式設計語言-實踐之路》《concepts of programming languages》

  計算機通用知識,《csapp》

  演算法、資料結構,《演算法導論》

  程式設計、結構,沒有書推薦

  軟體工程,這個詞大家理解不同,我以為,《人月》《程式碼大全》《the pragmatic programmer》《sicp》、講測試講重構的都是軟體工程,其實上面設計模式也是軟體工程,哈哈

  這些書,初時讀來感覺全無作用,而且要讀多次才能體會其中意味,所以叫它根基也是十分合適,你根基越深才能爬得越高嘛。

  +++方向的分割線+++

  啥是優秀程式設計師?

  記者和很多網民說熊貓燒香作者是高手

  公司裡你出什麼bug他都能告訴你原因用什麼軟體有問題他都能回答你的你就覺得是高手

  有人說徒手做產品的全棧才是高手

  各語言的作者都是高手

  有不寫程式碼,扔出一個restful論文的

  還有人說高德納是神,他如果是神,那他那些程式碼一定是在考驗我們,嗯

  。。。。

  上面這些的確都算是高手,我琢磨著前兩年被開掉的moto公司員工裡肯定也有做功能機的高手和寫廉價板驅動的高手

  你想自己選自己的方向還是被人忽悠方向?

  我的想法是自己都嘗試玩玩,然後做自己喜歡的方向。當然,程式設計師的生態金字塔是上面做工具、基礎設施給下面人用來給普通人程式設計序,所以你選方向可以參考一下這個金字塔模型

  +++爬坑的分割線+++

  方向定下,然後就是做事了,一大誤區就是 【追求最好的東西】,於是非得弄清楚:

  • php是最好的語言嗎?
  • OpenGL比directx差嗎?
  • 程式設計師要先學數學嗎?
  • 最好的c語言書是譚浩強寫的嗎?
  • 放屁要先脫褲子嗎?
  • linux發行版那麼多該選哪個?
  • 某大牛說IDE不如編輯器
  • 聽說黑客都是用記事本寫程式的
  • C#是升調記號應該讀csharp而java不應念 [加wa(輕聲)]
  • 。。。

  如果你是一個*nix世界的玩家的話,你應該知道有一個jargon來上面的毛病,叫yak-shaving,我以前提過幾次yak-shaving,但是很多人看不懂,它的字面意思是Any seemingly pointless activity which is actually necessary to solve a problem which solves a problem which, several levels of recursion later, solves the real problem you're working on.

  但一般都引申其意使用它,我這裡舉例一下:

  你本來要開啟軟體寫一個helloworld,軟體提示你升級,你點了升級,提示你xx庫不夠新,然後你更新xx庫,提示你要升級yy驅動,然後你升級yy驅動,系統告訴你要編譯這個驅動,你必須下載s.f版本的編譯器和庫,你更新編譯器,系統說s.f版本編譯器必須在e.n系統上執行,然後你就升級系統了,幾個小時過去,你發現系統升級導致了幾個軟體損壞,然後你更新那些軟體,去找解決問題的方法,不知不覺到了半夜,你累成了狗,卻發現問題還有一大堆,而helloworld也沒寫成。。。。

  這些問題我都遇到過,我的建議是挑一本大牛說的書就是了,看會了其他也會了。當然,如果你不幸不認識大牛(都上知乎了只要會搜尋這種事情不可能發生),或者單純好奇——就像我當年那樣的話,那就每種都試試,不過有的答案你自己知道就好,像是編輯器emacs比vim更好,寫程式ide比編輯器更好這種話,你是不應該亂說出來的。

  對了,像是不同正規化的程式語言、不同的開發環境是應該嘗試體驗一下的,不過這種建議書上都寫了,我這裡說顯得有些廢話了。

  所以說,不能被無關的東西弄偏了目標,要專注,堅持。

  等你學深了一門語言,就算是學另一們其他正規化的語言也不會太難,你學會了opengl,dx也就看看就能寫了。

  你看看武俠小說裡,段譽就是一個傻逼,仗著有時發出有時發不出的脈衝波和繞圈圈就能快跑直線的bug技就加上一門佛學能獨步武林最終迎娶了白富美,出任了CEO,走向了人生巔峰,喬峰永遠是一招降龍十八掌,更誇張。而慕容覆文武雙才,基本精通天下武學,每天讀書4時辰練功4時辰,論用功誰能和他比啊。。。可到了30多歲還是一事無成,pk連段譽這種新手都搞不過,最後被人搶了老婆,就是因為方向不對,而且太不專注了。

  所以求多不如求專,深度到了,再花20%的時間去擴充套件一下廣度即可。

  +++重要的分割線+++

  以上東西你都做好了,要花個2年時間的樣子,對於學生來說,如果你有一個好的學校背景,人生可以就此揚帆起步了

  但這不是終點,俗話說人靠衣裝,美靠包裝。包裝是門學問,這裡的包裝不是讓你西裝領帶亮皮鞋黑絲套裙白襯衫整一個營銷狗hr的造型,是說專業技能上的包裝。

  為什麼這是最重要的部分呢?因為別人一般不和你說這麼多,尤其是懂得包裝的人,更不會傳你這些不傳之祕啦。。。。。

  包裝自己的第一步是提高實力

  沒有實力的包裝那是空中樓閣,只能靠每天日常搞外包的忽悠架構大資料雲端計算過活,明眼人也能看出來,所以純屬作秀,沒有意義。

  在某個領域(編譯器、虛擬機器、開發架構、前端。。。)成為專家(專家的定義嘛,,我的理解是能在簡歷裡寫精通)後,包裝的實力就算具備了。

  包裝的第二步是定位

  提到美國會有一大堆人跳出來說是人類的希望民主的大救星,提到google就是最純的技術公司不作惡、軟體業的翹楚開發界的標杆、心美人美白蓮花。。。哪怕你列舉google賣假藥、惡意打壓yelp、挾持web標準等等等等這些事,他們也會說百度更差(咦這不5角錢常用的語句嗎怎麼被民主進步人士盜取了?。。。),可我根本沒提到百度好嗎。。。

  這全是包裝造成的,所以包裝的巨大威力,以此可窺之。

  google是搜尋引擎,百度難道也說自己是搜尋引擎?不,百度說自己是最懂中文的搜尋引擎。。。哈哈哈,你別笑,這的確很管用,就像google說自己不作惡是好女孩一樣。

  程式設計師的包裝定位,無非稀缺和獨特這兩點。物以稀為貴,稀缺就是要做到不可替代,這很好理解,比如你知道世界第一高峰是珠穆朗瑪峰,如果沒看過禪師精選集你很難知道第二高峰是喬戈裡峰,但文青特別偏好乞力馬扎羅山,不爬不跟你結婚,為啥?獨特性嘛。。。我不跟你比高,我和你比文化底蘊,於是就贏了。

  由於你有實力,所以你應該儘量把自己的實力包裝成稀缺屬性,你是專家嘛。。然後你實力多,應該把獨特的實力包裝出來,避免和他人共同曝光,以免被人壓在身下。

  我說一個我朋友包裝自己的故事,他進公司接手了一個專案,已經是被隔壁組開發了3,4個月的一個軟體,其實這軟體2個月也能做好的,但是隔壁人忙而且也不上心,不熟悉這個技術,加上又不是自己的老闆,所以做事拖沓了那麼久才做好。他接手後一刻沒閒,晚上帶回家也做,做到半夜,10天做成,然後整個公司的人都知道他的名字了,他也就立穩腳跟了。

  這個包裝的主題是,技術實力強,開發速度快。

  包裝的第三步是推廣

  推廣就是讓人知道你做得好,強化你的個人品牌,可以用部落格、知乎、mailing-list、github等,通過寫文章、參加線下聚會演講、回答問題、幫助他人等方法。這個用好了是門學問,用不好就是裝逼,不展開了。。。

  記住不要匿名,匿名你基本啥也得不到

  有人明明技術實力強,但是由於沒有包裝好,或被埋沒了才能,或被貼上了各種不應該有的標籤,或被人偏見看待。比如 趙劼 的c#和 vczh 的微軟標籤

  有人明明實力一般,但是善於鼓動小白,包裝得好,所以有一批忠實粉絲,這種人我都不太敢說名字了,呵呵。。

  所以優秀的程式設計師應該善用包裝啊

  +++結尾的分割線+++

  上面說了那麼多,但是堅持做來需要不少推動力,有人能考上清華,但是也能在大學墮落,有人能取得成績,但是也會固步自封。。

  要想優秀,得有巨大的推動力,你為啥想成為優秀的程式設計師?你的推動力是什麼?

  好比,我們說,嫖娼是有巨大道德壓力、金錢壓力和風險的事情,為啥知乎上那麼多嫖客樂此不疲並努力給自己洗腦合理化這件事呢?因為在他們的眼中嫖娼是最有趣的事情、是不吃飯不睡覺也不能不做的事情、是不做就活著沒勁的事,有了這種死也要死在床上的精神,還怕什麼呢?

  這就是推動力

相關文章