1. 程式人生 > >在做程式設計師的道路上,你掌握了什麼概念或技術使你感覺自我提升突飛猛進?

在做程式設計師的道路上,你掌握了什麼概念或技術使你感覺自我提升突飛猛進?

憑藉著優秀的搜尋素養,複製黏貼,拿來主義的能力(我不是在諷刺,這是一種程式設計必須的能力),成功地解決了一個又一個陌生的需求。

關於搜尋技巧

   任何一個開發人員,都應當具備搜尋能力,甚至是一定要具備搜尋能力,搜尋引擎的寶藏,是無窮無盡的,同樣具備搜尋意識的不同程式設計師,卻因為搜尋技巧的差異最終在程式開發質量、專案實施效率、甚至是工程產品質量上出現數倍的差異,因此,掌握高效、先進、靈活的搜尋方法和技巧,是非常非常非常(重要的事情說三遍)有用的。其中主要的方法介紹如下:

1)搜尋源選擇

  • 雖然英文的程式設計資料更為準確高效,但中文的程式設計資料數量上卻佔優,因此遇到問題第一搜索選擇還是百度
  • 谷歌對於專業中文詞彙的處理能力有時候甚至比百度還要強,而且谷歌能搜出大量的英文資源,因此谷歌也是首選之一,但是由於谷歌被封鎖,因此需要進行VPN、SSH等FQ操作,或者在百度搜索“谷歌映象”關鍵詞,通過谷歌的映象網站進行訪問。
  • 除了搜尋引擎,專業的技術網站、論壇、社群也是非常直接有效的搜尋源,比如國外的StackOverFlow網站,國內的Cnblogs部落格園、OSChina開源中國等,都具備搜尋功能,將問題關鍵詞輸入其中,也許也會很快的得到相關答案。
  • 對於QQ群,建議不要使用,除非QQ群主或者成員是非常閒或者非常非常熱心的人,否則在QQ群詢問技術問題,是非常低效率的搜尋方式。

2)關鍵詞構造

    搜尋關鍵詞的構造,直接影響搜尋效率和正確結果的過濾,沒有什麼特別的技巧,關鍵在於搜尋積累,但是總體遵循的原則是,準確和簡潔,比如當出現一個描述,如何用C#對XML進行序列化和反序列化,非常愚蠢的關鍵詞構造就是“如何用C#對XML進行序列化和反序列化”,而正確高效的關鍵詞則是“C# XML 序列化 反序列化”,或者在谷歌裡面搜尋則是“C# XML Serialization”。在平時的程式設計中,一定要注意相關方法和經驗的積累

3)聯想搜尋

    聯想搜尋,不屬於搜尋引擎的範疇,卻是在搜尋中很有用的高階技巧,舉一個通俗的例子,比如想使用C#,利用某個.NET類處理一種HTTP通訊,但是一直搜尋不到完美的結果,不過換個思路,考慮到VB.NET也是.NET體系,和C#完全相通,那麼也可以試著用VB.NET關鍵詞進行搜尋,搜尋到完美程式碼後再臨摹成C#程式碼。這樣的聯想搜尋,不僅能夠幫助搜尋正確結果,也是對大腦思維的訓練,值得多多嘗試。

4)資源搜尋

    開源的框架、產品、工具、控制元件等開發輔助類東西越來越多,穩健性和迭代性越來越強,去尋找一款成熟的工具或者外掛,也成為了大量開發者的必備方法和技能,而如何高效的搜尋出想要的資源,也成為了一門學問,其核心方法就在於知曉資源網站的地址,常見的例如有開源中國、Github、CSDN下載、pudn等。資源類網站需要平時多積累,到用到的時候會非常關鍵。

你覺得自己走過了很長的路。這時候大概三年過去了,確實不短。

但也漸漸意識到似乎缺了什麼東西,有一種不滿足感,以前你只追求高效率地完成工作,現在你想追求得更多一點。

你也許想知道用過的某個庫的實現原理,也許想實現自己的版本,你想理解框架的架構模式,想獲得這種能力,你想把語言本身用得更自如更生動,想真正擁有它,而不是使用它。

你學會了做功能,用各種庫,各種框架,專案形形色色,需求千姿百態,變化莫測。

這是你從developer到engineer的關鍵時刻。你將要學會的程式設計能力,而不是為功能而程式碼的能力,你越來越多關注質量,而不是數量。

如果你是PHP程式設計師,你將理解的這個概念可能是“data driven”,你嘗試讓資料來驅動程式,而不是層層巢狀的邏輯,無休無止的if else,你想把程式變短變平,你想把複雜的邏輯程式設計簡單的“配置”,你想讓這些配置來幫你寫邏輯,而不是自己手動去敲邏輯程式碼。理解它以後,你會發現原來這麼多的程式其實可以有更好的寫法,更“快好省”的結構設計。你不再覺得“業務邏輯”是浪費時間,你看到了把任何業務邏輯轉化為資料驅動的設計的途徑,這時候你不再是原來那個PHP程式設計師了,packagist上的庫你看過去,都是你的朋友,因為你知道在某個時候,你需要他們支撐(簡化)你的一個設計,以前你看到一個包,看它的API,找到一個,require進來,發現可以,完了;現在你想看看它的“設計”,想的是“可以怎麼用”,對我的專案有什麼意義。

如果你是JS程式設計師,這個概念也許是事件驅動也許是非同步程式設計,你懂得了以事件為中心來設計一個完成的架構,你駕馭了非同步程式的技巧,以前你總是覺得駕馭不了複雜的專案,感到恐懼,錯綜複雜的事件流,非同步程式寫起來各種不自然,UI互動,因為你總是追著每個具體的功能跑,而沒有想過高一兩個層次的設計,事件如何統一起來管理,而不是讓它們亂竄,UI的模組怎麼分割,分割以後怎麼互動,對你的要求不是去設計一個具體的模組,而是為設計任意多模組提供一種可擴充套件可維護的機制,你需要設計規則,決定程式的結構、層次、模式。這時候你不再只是document.getElementById那時候的JS程式設計師,這時候你具備了程式設計的“元”能力:剖析問題,設計程式。你會覺得即使不給你任何框架和庫,自己也能設計出一套方案來。你選擇庫或者什麼技術,開始處於非常具體的“需要”,而不是聽說它“很好用”,那時候是它在選擇你,你很被動。“我想用A,因為這時候A是最佳選擇”,你有一種清晰感,也開始有了品位,判斷力。

你不再是“碼農”了,你是Engineer,你做事開始有了邏輯(你不確定以前做的事對不對好不好,只管做,現在你比較清楚了),很多東西在你腦子裡開始有了主次,你用設計、架構來解決問題,而不是光用程式碼和搜尋引擎。“你”開始真正成為解決問題的主角,而不是你“用到的東西”。你真正地駕馭了語言,這個語言可以怎麼用,應該怎麼用,而不是寫成什麼樣算什麼樣。你能比較輕鬆的從別人的東西里看出苗頭來。

這個時候,你走上了技術能力的phase 2。