開始學習函數式編程后對編程的一些新感受

工具與方法
服務器君一共花費了166.475 ms進行了6次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

最近開始學習函數式編程,打算深入進去,掌握函數式編程的思路。具體學習足跡可以看看 現代魔法學院的《編程范式篇》。以后關于技術類的東西,大部分都會整理成專題,章節,發布在學院中,而博客則回歸更為輕松隨意的狀態。

我們絕大多數程序員都是用命令式編程,因為學校教的編程就是命令式的,什么C、Java等等(當然他們也可以用函數式編程)。函數式編程和命令式編程不是一個相對應層次的概念。理論上,函數式編程的理論基礎是Lambda演算,指令式編程基于圖靈機。從程序員角度來看,函數式編程不支持賦值操作,一個函數的執行只會返回一個值,不會有任何副作用,所以看上去,一個函數就是一個大的表達式。

這里不再深入去談函數式編程,更多可以看看前面提到的那個專題。

1. 編程到底是什么?

編程(程序設計)實際上是一個對現實世界中的事物抽象,并由計算機語言實現的過程。核心的步驟就包含三個:理解、抽象、實現。

不同的理解思路,會導致完全不同的抽象結果;不同的抽象結果就會提供各不同的理解。最后根據理解和抽象,由特定的語言完成時間,但其結果要想完全理解還需要前兩個步驟支撐。

有點像建筑中的“房子是什么,房地產設計,蓋房子”。

2. 編程的發展過程到底有哪些?

程序設計的歷史,按照我的理解大致的幾個主要階段:

  1. 計算機程序設計歷史前階段;主要是紙帶、存儲器等原始方式。
  2. 計算機語言初級階段;主要以匯編語言為主,面向的主要內容是“數據存儲+指令集”;
  3. 計算機廣泛工業語言設計階段;主要以C語言為主的大面積應用,此時由C語言更面向人易懂的方向發展。并且操作系統,編譯器,數據庫軟件開始發展;面向的主要內容是“程序=算法+數據結構”。此時在計算機軟件設計學科中主要運用的還是“面向過程”的設計思路。
  4. 計算機語言高級發展階段。主要是一些面向對象語言的出現。主要體現在C++語言的出現。主要面向的內容是“應用=對象+通訊”的方式。甚至很多語言開始“一切皆對象”的設計理念。面向對象的語言主要在該階段得到了大力提倡。因為C++的復雜,Java的出現降低了復雜度,又充分利用了面向對象的特點。讓面向對象的設計更是得到了大面積的推廣和應用,尤其在企業級應用開發中。
  5. 各類語言頻繁出現的繁榮各階段。各類變成設計語言如面向WEB變成,函數式語言,面向并發的語言,終端設備的編程語言等等;這個階段不好做評論。

3. 編程的過程解決的問題有哪些?

  1. 匯編語言:解決CPU指令集和存儲系統的交互問題,提供“可編程”的能力
  2. 面向過稱語言:提供小面積的問題解決思路,一個系統的代碼如果不多,通過面向過程思路將系統劃分為多個過程(多個函數+各類數據結構)進行系統設計。提供了初級規模的系統設計問題。
  3. 面向對象語言:當面向過程面對復雜的系統,復雜的世界時。如何“更好的理解和抽象”編程問題,變得更加重要。通過面向對象語言的特點“封裝、繼承、多態”,讓程序分析和設計能容納更大的編程范圍和系統規模,也讓程序設計人員更好的理解和抽象提供了非常重要的作用。
  4. 面向**語言:面向WEB,面向高并發,面向切面,函數式語言,終端開發等是在現有程序設計語言基礎上不斷改進,并解決特定領域特定問題的發展衍生;

4. 面向對象編程思想的重要性體現是什么?

大家都知道,面向對象的三大特性“封裝、繼承、多態”,但個人認為其中的“封裝”是面向對象的最核心的特點。

究其原因,主要是“封裝”讓一個人可以理解的系統范圍可以變得更廣,可以讓我們“更好的理解和抽象”我們所看到的世界。之前一個老師提到面向對象時,提到的是“間接”,我想間接也可以認為是“封裝”的升級版。面向對象的思想帶來“可維護性,可擴展性,可理解性”等讓我們能在效率和水平上更加長進的東西。

5.?編程,就是控制復雜性

且慢!

面向對象雖然有如此多好處,C++與Java都因此得以廣泛地使用。但是,一味地追求可維護性,卻忽略了一點:編程,就是控制復雜性。還記得編程發展史初級階段那會的“數據存儲+指令集”,“程序=算法+數據結構”么?函數式編程語言,能夠讓你的編程更純粹,更加直接地面向問題的本質。(《函數式編程有哪些優點?》

6. 總結一句話

無論是面向過程、面向對象、還是函數式編程,都是編程范式,即編程的方法。而具體用什么編程語言則是工具。

我們編程的目的就是解決具體問題,而不是說比較工具與方法的優劣。比如你要砍一棵樹,用斧子橫砍能夠砍倒,用鋸子斜鋸也能鋸斷,而非要比較斧子和鋸子的優劣而意義不大,橫著砍和斜著鋸也沒多大關系。我們的目的就是要木材,這就是編程最本質目的。

當然,我還是推薦多掌握幾個工具,多學會幾個方法。比如你現在只會PHP(斧子),命令式編程(砍),那么你見到什么樹都只能用斧子砍。假如你再懂Python(鋸子),函數式編程(鋸),那么對某些樹效率就會高很多。

不嚴謹的一個比喻,僅作參考。

本文地址:http://www.snpmgr.live/librarys/veda/detail/2497,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.snpmgr.live/librarys/veda/detail/2497

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《人月神話》 弗雷德里克·布魯克斯 (作者), 汪穎 (譯者)

《人月神話》原文:The Mythical Man-Month: The Essays on Software Engineering, 2nd ed.在軟件領域,很少能有像《人月神話》一樣具有深遠影響力并且暢銷不衰的著作。Brooks博士為人們管理復雜項目提供了最具洞察力的見解。既有很多發人深省的觀點,又有大量軟件工程的實踐。本書內容來自Brooks博士在IBM公司System/360家族和OS/360中的項目管理經驗。該書英文原版一經面世,即引起業內人士的強烈反響,后又譯為德、法、日、俄中等多種語言,全球銷量數百萬冊。確立了其在行業內的經典地位。

更多計算機寶庫...

燃烧吧足球登陆