程式之美 存乎於心

segmentfault.com發表於2016-03-07

  我是盛安德科技天津分公司的普通WEB開發人員,本人並沒有什麼特長,開發語言僅限於PHP和Javascript,同時也不是科班出身,在本次“我的程式設計之路”活動中現身主要是希望自己的經驗能夠讓剛剛走上程式之路的朋友們多一點借鑑。

 程式設計師——大有可為的職業

  程式設計師的人力缺口非常大,盛安德科技作為一個專門承接外包的公司對此更是感觸良多。雖然有時候我們也抱怨好專案太少,但是更多的時候是好專案來了卻發現根本沒有人去做。招聘廣告常年打,面試者寥寥無幾,能通過面試的更是滄海一粟。

  那好吧,我替大家問一聲,我們不是不想去應聘,而是面試了幾家都不成功,是不是你們根本不想招人,就是在炒作啊?就算僥倖成功了,進去工作的時候被罵的像死狗、工作累的像死狗、炒魷魚就像扔死狗,為什麼?

  其實很簡單,因為各個公司都是在招聘程式設計師,而會寫程式碼 != 程式設計師。
  你會換保險絲,但是你不是電工,對嗎?
  你會唱歌,但是你不是歌手,對嗎?
  你會做飯,但是你不是廚師,對嗎?
  那憑什麼你會寫程式碼就一定是程式設計師了呢?
  好吧,我承認你說的對,那麼達到一個什麼樣的標準才是程式設計師呢?
  我無法給出什麼答案,只能分享一些過往,期望能帶來領悟。

 程式設計師之路

  我在小學的時候就接觸到程式了,在蘋果機上按照課本的例子畫畫幾何圖形,弄個打飛機的小遊戲,初中的時候也是這樣,不過就是蘋果機換成了中華學習機而已。也許是這個時候埋下了某顆種子?不知道。

  從UCDOS, WPS到win31,win95,應用方式從打字變成玩兒遊戲,此外由於系統不穩定被迫學會了怎麼裝系統,除了“電腦很有趣”外,我對它沒有更多的印象了。

  也許興趣確實是最好的老師,遊戲玩兒多了(可能更重要的是體驗過遊戲修改器之後)就會有寫遊戲的願望,也就順便看了一些程式設計的書,反正只要不帶走在書店裡面隨便看。結果我發現,對於我這種沒上過正式高中的人來說,程式設計根本就是一件無法理解的事情,無論是彙編還是C,狗咬刺蝟啊。

  後來的事情可能年齡大一點的人就都經歷過了,聊天室、看網頁、OICQ,只是意外的,我從廣告上看到一個“網頁製作培訓班”的招生啟事。

 我說要有光

  一花一世界,一葉一菩提;程式碼自在方寸。我驚喜的發現,我能看懂HTML,對於用過WPS的我來說,一眼就看懂了HTML的奧祕。

  也許這輩子我也學不會C語言了,也許靠HTML永遠寫不出遊戲,但是,看到親手錄入的程式碼在瀏覽器中呈現出了原本僅在我腦海中的畫面,我忽然覺得,這樣也不錯,這是我期望的光。

  我想此時的我已經開始了自己的開發之路,雖然我還算不上是一個程式設計師,但是至少我有了目標,並且也願意為此而努力。

 並非天生我材必有用

  一個又有一個頁面製作出來,然後一個又一個的丟掉,直到有一天受命製作了一個內網的休閒網站。很簡單的網站,列出很多小說的超連結,可以線上觀看(txt格式)和下載(zip),90%的時間花費在尋找資源上,最終的頁面很醜,頂部一個標題,然後就是一堆url。但是,這些醜陋的頁面沒有被丟掉。原來並非天生我材必有用,而是沒用的早已被湮沒。

  我要去做有用的東西,雖然我還不是一個程式設計師。

 讓我站得更高一點

  薄薄的一本HTML教程輕鬆翻完,可能只用了一天不到,但是留給我太多的問題。為什麼Yahoo的網頁這麼好看,為什麼別人能做出一些很炫的效果(比如雪花),為什麼有那麼多為什麼?答案輕而易舉的得到了,四個字:檢視原始碼。

  HTML -> CSS -> Javascript -> Photoshop -> Flash –> PHP -> MySQL

  這個時候我覺得自己應該算得上是一個程式設計師了,或者說我已經不在意自己是不是一個程式設計師了,不斷地學習,不斷地練習,不斷地進步,不斷地超越自己,這就是我想做的、正在做的、並會繼續去做的事情。

 這是一個起點

  編碼、吃飯、睡覺,這種單調的生活持續了大約20天,我的第一個PHP專案完成了。開發工具就是Editplus,功能則是依附於業務資料庫構建一個輔助查詢系統。
在開發的工程中我學到了新的知識,對某些問題的處理有了新的思路,所以我相信我的下一個專案會做的更好。
所以,這隻能是一個起點。

 程式&程式設計師

  用文字描述客觀真理被稱為哲學,用數字與符號描述客觀真理被稱為數學,用0和1描述客觀真理,是程式,是過程的有序組合。

  程式設計師在不違背客觀真理的前提下,對過程進行有序的組合,使事物按照我們的意願發展從而得到必然的結果。

 程式之美

  有道是字如其人,程式碼亦然。它是開發者思想的結晶,在我看來欣賞程式碼與欣賞藝術品之類的東西大同小異。

 何為美

  錯落有致,別具匠心;輾轉靈動而又典雅大方;增一分則肥,減一分則瘦;不施粉黛卻渾然天成...

  觀眾怒曰:說人話!囧

  程式碼應該格式良好,雖然每個人喜好不一,但是其程式碼中的縮排、空格的使用必然是有規律的,而不是隨手為之。

  結構充滿彈性,耦合適當。

  沒有冗餘的程式碼,但是也不會放棄必要的檢查。

  讀起來很流暢。

 何為美

  物盡其用方為美。

  在官方文件中經常可以見到簡短的示例程式碼,但是有沒有人嘗試過自己去寫一個示例程式碼呢?如果你覺得這有什麼了不起,好的,試試看。

  1. 示例程式碼是當前話題的典型應用,就是最常見的用法;

  2. 如果有可能的話,該程式碼應該是可執行的;

  3. 不能喧賓奪主,示例程式碼不會讓讀者的注意力離開當前話題;

  4. 恰到好處的註釋,預測讀者此時可能想到問題並針對性的解釋;

  5. 要短。

 何為美

  指點江山,激昂文字,波瀾壯闊之美。

  初級程式設計師是站在開發者的高度編寫程式碼,中級程式設計師是站在使用者的高度編寫程式碼,高階程式設計師是站在專案價值的高度編寫程式碼,頂級程式設計師是用上帝視角考慮取捨,不寫程式碼。低頭看,萬馬奔騰;略昂首,高山仰止;再側目,節比鱗次,各逞機鋒。

 再問何為美

  子非魚焉知魚之樂。

  心之所向,身之所往。

  不滯於物,不殆於心,思而惘顧,行而桀黠。

 尾聲

  謹以此文分享我歷年來的感悟,希望有更多志同道合者加入程式設計師的隊伍。在我看來,即便是在職的開發人員也不乏大量的碼農,在規模較小的公司裡面更是一個程式設計師帶著一群碼農在為混口飯吃努力。想要發展首先就要有交流,但是沒有同伴你又能和誰交流?

  何為碼農?在個人能力上不思進取,在工資收入上費盡心思的就是碼農。所以,還是做程式設計師吧,等你。


 附言

  嘩啦啦寫了不少,結果發現徵文要求之中的很多內容卻都沒寫,就在末尾補註一下吧,避免被編輯說不符合要求而退稿。

 我喜歡的軟體

  常用的雖然很多,但是一定要說喜歡的還真沒有。

 我喜歡的硬體

  鍵盤和滑鼠,品牌無所謂,主要是質感。不會太輕,那就飄了;不能太重,會累;不能太靈敏,觸而不發代表我還在猶豫;不能太遲鈍,靈感如白駒過隙。反面典型就是手寫筆。

 工作、學習、生活中用到的神器

  我想神器未必是真的神器,我的神器是魚竿,哈哈。只要看到魚竿就會立刻從當前的狀態中解脫出來,重歸平靜。

 有沒有寫過一些黑科技(狂拽酷炫屌炸天)型程式

  很久以前(好像是07年吧,還沒有jQuery之類的東西)基於XMLHttpRequest做了一個內網站點,包括打卡,留言,技術分享,新聞幾個小功能。整體的佈局和外觀模仿的windowsXP,是的,首頁上各個應用的圖示,開啟後開啟一個浮動視窗,也可以最大化、最小化和關閉,當然也包括拖動。

  但是這也是一個完全失敗的作品,除了很炫(在當時來看)以外沒有任何的實用價值。因為追求效果,很多使用者操作被複雜化了,同時很炫的功能導致試用者的注意力被轉移了,沒人注意到技術分享功能本身,而是被各種個性化設定帶偏了,很多人嘗試了各種個性化設定,然後完全沒有心情去寫什麼技術資料了。

 推薦書籍

  對於中級及以下的開發人員,像C, C++, Java都有很多經典的書,前幾章都非常值得一看。你也許問我既然這麼好為什麼不看後面,好吧,因為後面我都看不懂。

  前面幾章事實上是對語言的整體介紹,是對語言締造者觀念的剖析,我們可以由此去聆聽大師們是如何理解物件的,怎麼看待和分析物件間的聯絡等等。

  我覺得很有用,而且每隔一段時間再看都會有不同的領悟。

  此外關於語言本身就沒什麼書籍可推薦了,很貴而且不如文件全面,如果有興趣的話不如看看UI設計思想、敏捷軟體開發之類的東西。

  我一直堅信程式無所不能,而對於程式設計師來說技術問題總是能夠解決的,但是就怕你想不到,或者不敢想。

 程式設計的大殺器

  沒有。要是說對程式設計師的大殺器我倒是可以推薦一個,ctrl-c + ctrl-v,絕對是對程式設計師的大殺器。

  1. 用這個手段開發的人很難進步

  2. 用這個方式開發的專案不好維護

 好習慣與坑

  好習慣就是注重細節和強烈的責任感,與之對應的就是坑。從大處說可能變身豬隊友坑了專案組;從小處說,變數名寫錯一個字元這種bug是最難發現和解決的,而且解決之後還收穫不到任何喜悅。你只會沮喪的想,浪費了4個小時原來只是把i寫成了l。

 展望未來

  根據前面的調子,這裡也不會有什麼出彩的答案。

  其實我挺反感曾出不窮的新技術名詞的,嗯,是的,只是反感新技術使用的名詞,不是技術本身,比如Saas,比如大資料。

  我個人並沒有覺得真的有什麼新技術出現了,通常這只是宣傳的需要而已。就像win31, 95, Me, 98直到現在的win10,這是技術發展的必然結果。

  用大資料來做例子,這是新的課題嗎?肯定不是,搜尋引擎早就面臨並一直在解決這個問題,那麼怎麼突然在最近流行起來這個話題了呢?

  我認為所謂的新技術通常是對前人在特定領域留下的寶貴經驗的一次總結,是為後來者提供一個用來踩踏的基石,並不是什麼神祕或者高階的東西。(例如現在爛大街的Ajax,最早是用隱藏的iframe,後來才有了XMLHttpRequest,然後才被稱為Ajax然後被廣泛使用,而在HTML5以前,所謂的ajax檔案上傳也仍然還是通過iframe模擬的。)

  我在回答某個問題的時候也說過類似的話:程式是建立在邏輯的基礎上的,開發功能的時候可以不用別人造好的輪子,但是不等於你可以抹殺那個輪子所代表的邏輯。在我看來,新技術就是輪子的名字而已,貢獻嗎?絕對!創新嗎?呵呵。

  所以,對於看好什麼技術這種問題,我的回答只有四個字,適者生存。

相關文章