1. 程式人生 > >【新手向】程式設計師相關概念梳理

【新手向】程式設計師相關概念梳理

PC機的時代來了又走了,網路的時代來了又走了,移動網際網路的時代已經到來了這麼久。在剛過去的網際網路大會上大佬們又說移動網際網路的風口也已結束了,接下來將是人工智慧的時代。無論如何,這些日子中各類傳統行業備受衝擊,程式設計師的需求量則是越來越大(當然現在可能是中高階程式設計師)。我有很多中學同學大學同學轉行成為了程式設計師,包括我自己也是。一路走來,確實有很多東西可以分享的。
    程式設計師又名碼農,當然是要寫程式碼的,但很可能這隻佔小部分時間。與同事溝通、思考方案、看程式碼、改錯、學新技術等等同樣是程式設計師的日常,接下來我就係統的來介紹程式設計師相關的方方面面。要了解程式設計師的生活可以看美劇《矽谷》


程式設計師的價值在於編寫軟體,作業系統就是最大的軟體。軟體和硬體一起,能大大提高生產、溝通的效率,並提供新的娛樂方式。 硬體是實實在在的硬碟、顯示器、CPU等等,那麼軟體是什麼?軟體就是資訊,是物質的排列規則,是硬體的靈魂。
軟體可分為面向企業和麵向個人使用者的,同樣軟體公司也可分為這兩類。面向企業的更強調順暢溝通、降低成本和後續維護,面向個人的更強調商業模式、市場運營和版本迭代。在一個軟體公司中,崗位大致有:研發、產品、測試、美工(UI)、市場、人力資源(HR)、行政等。其中研發和產品一般是公司的核心,待遇也最高。產品是設計軟體是什麼樣子,測試是測試軟體有沒有問題,美工是提供各種圖片制定軟體介面標準,市場是推廣產品明確使用者需求,人力資源是招人等。

研發又分為產品開發和技術研發。產品開發是不斷開發新版的軟體,技術研發是研究更底層或者更先進的技術。產品開發又分為客戶端和服務端,客戶端開發使用者使用的產品,服務端在伺服器上負責為這些產品提供資料。客戶端又分為移動端、電腦端和網頁端,分別使用不同的語言進行開發。要了解具體要求和各大公司可以到看準網(我沒收錢)

就像人類有多種語言一樣,計算機語言也有很多,有的古老有的年輕。它們同樣遵循語言學,有著明確的語法和單詞,同時比人類的語言更為嚴密。目前流行的語言有java、javascript、python、html、object-c、swift、c#、c++、c、mathmatica、matlab等等。至於為什麼它們叫這些奇奇怪怪的名字我也說不清,有中文語言“易語言” 但多用於中小學生入門。其中安卓開發、服務端開發用java,網頁開發、測試用html、javascript、python,蘋果開發用object-c、swift,windows開發用c#,linux開發、底層開發用c++、c,數值計算用mathmatica、matlab。

雖然語言很多,但各類語言的結構是類似的,包括引用、定義、賦值、表示式、條件、迴圈、函式。具體可以買本《XXX30天從入門到精通》、《深入淺出XXX》等,或者到知乎上搜一搜推薦書單。要開始寫程式,首先要搭好開發環境(即安裝好各類軟體),第一次做往往很蛋疼。因為這這意味你將開始接觸底層,手動配置很多屬性面對很多報錯。
程式寫好後進行編譯(翻譯),編譯器會將程式連結上相應的庫(即需要引用的別的程式),然後把程式一步步翻譯成作業系統和硬體可以接受的程式。如果沒有錯誤的話程式就可以運行了。一般程式是呼叫相應語言的庫和第三方庫,這些庫再呼叫作業系統給出的介面(api),作業系統再來操作具體的硬體。所以作業系統、計算機網路、編譯原理是程式設計師的三大基礎課,但寫程式實際打交道的更多是各種庫。要補各種計算機課的話,可以上網易雲課堂

充分了解自己語言相關的庫,對於一個程式設計師來說是必要的。瞭解方式是可以看書、看程式碼、看部落格,最根本也最難的方式是看官方文件(一般都是英文)。庫分為控制元件庫和邏輯庫,控制元件即直接顯示在介面上的各種東西,比如一個按鈕、一個文字、一個進度條等。邏輯即處理各種事件,比如點選一個按鈕後、收到從伺服器獲取的資料後。由於現在軟體越來越龐大更新的越來越快,軟體也像計算機系統、計算機網路一樣分了很多層級。
常見的一個分層方式是:介面層、邏輯層、資料層,即MVC模式。其中邏輯層又可再細分,分成高層邏輯、中層邏輯和底層邏輯。高層邏輯與功能相關,換了一個功能就得重寫程式碼。中層邏輯與功能無關,但與語言有關,可以用在別的功能上,但不能用在別的語言上。底層邏輯與語言也無關,一般是用c++或者c寫的,可以被任何語言呼叫,因而可以應用在各種裝置上。通過這樣的分層,減少了重複程式碼,減少了各個程式間的依賴關係,從而更適合大家協作更易於擴充套件和維護。
在此基礎上,框架和設計模式又出現了。框架就是別人幫我們設定好了程式的分層方式和各層級的聯絡,我們往裡面填東西就好了。用寫文章來打比喻,框架就是文章的目錄,每一個章節的主題。而設計模式比框架更為抽象,是指一個框架應該遵循的原則。我們理解了設計模式,就可以去設計自己的框架了,在文章中就是對應議論文的總分總、小說的起承轉合等。各類語言中正流行的庫和框架可以上大名鼎鼎的https://github.com/上搜搜,這些我一直聽人提起但很晚才接觸到,目前也算是我的弱項。至於設計模式則可以一邊多學習優秀框架,一邊買兩本書看看。
終於說到git了,上面的github網站就是使用了git的一個程式碼管理平臺。git是程式設計師的協作神器,是一個分散式版本控制工具。通過git我們可以同時在很多臺電腦上儲存同一個程式各種各樣的版本,並快速方便的在這些版本間來回切換,這對於多個程式設計師一起寫一個軟體幾乎是必須的。一般使用命令列來操作git,所以程式設計師還得學會命令列、vim(命令列文字編輯器)的操作。
除此之外,在一個企業中,客戶端的程式設計師還得與服務端的程式設計師協作,得與產品協作、與美工協作,並及時的把進度報告給專案經理,所以還有其它的協作軟體或網站。在此不一一細說,這些進了公司之後學起來還是挺快的。當然,如果是小公司或者個人開發者,很多協作的東西也可以不用會,可以當面溝通或者完全外包給別人。如果產品和美工什麼的也都自己來解決,雖然沒有任何溝通成本,但跨界這麼多實在是有點難搞有些頭大,我就試過這種感覺哈哈...

好了,說了這麼多。如果你沒有任何基礎而想成為程式設計師,那麼你該怎麼辦呢?首先是瞄準好兩三年後將會流行需求量較大的技術進行學習,具體可以上網搜搜。其次交學費不困難的話可以考慮報個短期培訓班入個門熟悉下開發環境,當然更重要是選好方向找好書單。邊學寫程式、邊學計算機理論,寫程式的進階路線:語法——邏輯——使用庫,邊看書邊寫程式碼邊熟悉開發工具。學計算機理論的進階路線:計算機組成原理——作業系統——計算機網路,邊看視訊邊看書。這個不太好實踐,興趣不大的話把基礎理論背熟能解決常見筆面試題就好了。此外還有個演算法,越大的公司越為看重,如果你數學學的好可能對它很有興趣,數學不好就還是別折磨自己了。總而言之演算法就是減少重複、不必要的計算量和資源使用來提高程式效能,儘量最優的解決問題。關於演算法有本聖經一樣的書:《演算法導論》。我就是學演算法出身的,但實際工作中暫時還沒有直接派上過用場。寫了這麼多,算是把程式設計師相關的概念大致介紹了一遍,希望你對寫程式這個詞的概念更瞭解了,也知道程式設計師的世界是怎麼樣的了。如果有更多相關疑問歡迎交流,睡了兩天懶覺明天又得早起了誒,good night~