你周圍肯定有很多同你一樣的程序員,有認真考慮過你們之間的差別嗎?換句話說就是,你認爲那些優秀的程序員和普通的程序員之間的區別是什麼?希望本文能讓你有所思考~
當我開始在閱讀《技術的本質》的時候,我就開始在思考這樣一個問題,我們在使用技術還是工具。
※ 技術與工具
在某百科上說:
一項技術是關於某一領域有效的科學(理論和研究方法)的全部,以及在該領域爲實現公共或個體目標而解決設計問題的規則的全部。
對於技術不同的人的理解可能是不同的,和上圖中的使用工具類似的是,和工具一樣,技術也在不斷地成長和進行。
網站的成長史似乎可以簡化爲下面的過程,可能還會有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的核心是內容。於是,
我們把一個又一個的迷團解開了,剩下百無聊賴。
當我們在討論生產率的時候,得知高級語言會比低級語言來得有生產率,但是效率可能會因人而異。高級語言來自於低級語言,這些似乎沒有那麼重要。人們熟悉了不同的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
這個問題沒有一個真正的答案取決於你所做的事,而問題的關鍵在於你知道的只是彙編
,而不知道有其他東西的存在。
這裏的意思不是讓你把上面的都學了,而是對於我們所處的領域我們應該有一個寬泛的瞭解。瞭解並不一定是親身實踐,如上一標題所說,我們只需要去吸收別人的知識及經驗,一個有趣的答案便是從別人身上學習會更快。
只是在那之前,我們需要去學會學習,因爲你可能處在某個位置,沒有其他人做過。
而對於標題的答案來說應該是:
優秀的程序員不僅僅只是使用工具。
via:https://github.com/phodal/awesome-developer/blob/master/entries/different.md