程式設計師差別的本質

phodal發表於2015-06-01

  當我開始在閱讀《技術的本質》的時候,我就開始在思考這樣一個問題,我們在使用技術還是工具。

 技術與工具

  在某百科上說

一項技術是關於某一領域有效的科學(理論和研究方法)的全部,以及在該領域為實現公共或個體目標而解決設計問題的規則的全部。

  對於技術不同的人的理解可能是不同的,和上圖中的使用工具類似的是,和工具一樣,技術也在不斷地成長和進行。網站的成長史似乎可以簡化為下面的過程,可能還會有ASP.NE等等,只是因為我接觸得比較少。

  • 靜態的HTML
  • CGI和Perl指令碼
  • PHP
  • J2EE
  • Django
  • Ruby on Rails
  • Nodejs

  實際上這是技術的一種演變,然而做為最核心的東西HTML似乎還是那樣的。作為新技術產生的核心——HTML也在不斷也進化中。然而,沒有想象中的那麼明顯,看上去像是不變的,只是技術在不斷地向前前進。對於我們來說這些都是工具,有時我們在用工具創造中新的工具,好比是技術本身,通過結合一些技術建立出新的技術。同進化史一般,我們沒有辦法從無到有創造出一個新的東西,沒有上帝。

  而作為一個普通的程式設計師,我們所做的只是在使用工具,從晶片到語言,從語言到框架,從框架到實現。

 程式設計的祕密

  每個人在技術的成長過程中都有不同的經歷,對於我來說現在的總結大概是如此(ps:有興趣可以參考過去的那些語言)。

  • 當我開始學習第一種語言LOGO時,我還小覺得很神奇,至少對於計算機還是保持神祕的。
  • 當我開始學習C++時,由於作者對於其優雅的宣稱,我覺得C++確實很優雅、
  • 當我開始學習Python的時候,我發現簡單才是我所要追求的。
  • 當我開始學習Ruby On Rails的時候,我發現生成可以很強大,但是因為強大,所以沒有意思。
  • 當我開始學習Django的時候,我發現這才是我想要的訂製。
  • 當我開始寫部落格的時候,我覺得比於HTML來說,Markdown才是適合我的。
  • 當我開始寫下此文時,我開始覺得我應該試著去做點什麼。

  於是我又回到了原點,開始迷茫我想要的是什麼?當我實習半年以後,我學到了更多的東西(實習半年後:正在變得高效),而我開始的時候我才在偶然的一次機會中才瞭解到,我們用的都是工具。只是,我們可以用工具創造出工具。

  程式設計只是用來解決問題的工具,優美與否對於解決問題的幫助,取決於是一次性問題還是長期問題。程式設計的核心是解決問題,正如SEO的核心是內容(詳情見:每個程式設計師必知之SEO)。於是,

我們把一個又一個的迷團解開了,剩下百無聊賴。

  當我們在討論生產率的時候,得知高階語言會比低階語言來得有生產率,但是效率可能會因人而異。高階語言來自於低階語言,這些似乎沒有那麼重要。人們熟悉了不同的IDE、不同的語言,相比於那些入門者來說,諳熟語言的人只是更加熟練罷了。同《賣油翁》的我亦無他,唯手熟爾般,對於有些東西只是因為用多了,然後熟悉罷了。事實真的是這樣麼?如果我們每天寫的是1+1=2,我們會知道1+2=3麼。

那麼所謂的優秀的程式設計師和普通的程式設計師的差別在哪?

 技術的成長

  這裡的技術指的不是個人在技術上的成長,而是技術自身的成長。

技術在某種程度上一定是來自此前已有技術的新的組合。

  一個優秀的框架、軟體、系統的產生必然會基於其他的已有技術或者框架,如:

  Ubuntu GNU/Linux

  • 核心是Linux
  • 編譯器GCC
  • 庫GLIBC等等
  • 指令碼語言Python等
  • Bash

  而這其中的一些小命令如ls、cd、wget也是這個系統的組成部分之一,我們無法找到一個不依賴於其他系統的軟體。如果你自己動手編譯過Linux,或者你會更有體會一個GNU/Linux系統需要什麼。從一個庫來說它是基於其他的基本庫,如C標準庫,而從C標準庫的編譯又依賴於編譯器,這些都迴圈中前進著。

 gcc4.7編譯出了gcc4.8
 gcc4.6編譯出了gcc4.7
 gcc4.5編譯出了gcc4.6
 等等

  這是對一個可以自身編譯自身的編譯器而言,我們無法忽視的是技術背後有許多細節。巨人是站在巨人的肩膀上,過去我們可能一群工程師一個月開發出來的軟體,在今天可能可以由一個工程師一天開發出來。因為我們可以基於前人的經驗及教訓,而這也是所謂的高生產率的程式設計師和一般的程式設計師間的區別。

  自然而然的優秀的程式設計師吸收了其他人的經驗以及教訓,換在今天來說,你今天所在的位置並不是因為你比別人聰明,或者是別人比你聰明,只是因為你吸收了更多的知識及經驗。當然,教育不公平不應該這邊的討論範圍。

 程式設計師的差別

  回到開始的話題,我們使用的如圖所示的工具的話,你會選擇

  • 石頭
  • 電鑽
  • 電腦

  中的哪一個,這是一個有趣的話題,正如。。

  • 彙編
  • C語言
  • Python
  • Django

  這個問題沒有一個真正的答案取決於你所做的事,而問題的關鍵在於你知道的只是彙編,而不知道有其他東西的存在。這裡的意思不是讓你把上面的都學了,而是對於我們所處的領域我們應該有一個寬泛的瞭解。瞭解並不一定是親身實踐,如上一標題所說,我們只需要去吸收別人的知識及經驗,一個有趣的答案便是從別人身上學習會更快。只是在那之前,我們需要去學會學習,因為你可能處在某個位置,沒有其他人做過。

  而對於標題的答案來說應該是:

優秀的程式設計師不僅僅只是使用工具。

相關文章