日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

程序员思维是什么?程序员思维从哪里来?程序员思维到哪里去?

發(fā)布時(shí)間:2025/3/15 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序员思维是什么?程序员思维从哪里来?程序员思维到哪里去? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ?? 程序員思維是什么?
  程序員思維從哪里來?
  程序員思維到哪里去?
  好吧,這是三個(gè)終極的問題。沒有標(biāo)準(zhǔn)答案,也沒有什么不標(biāo)準(zhǔn)的答案。我只是試圖給出自己的一個(gè)思考的總結(jié)。

  再解釋程序員思維是什么問題這個(gè)問題是什么時(shí)候,我們先用類比法看一下什么是程序員思維。

  類比法,是個(gè)好方法啊,就像字典中的同義詞解析一樣。我們就類比生活中的一些例子罷了,來解釋什么是程序員思維。有些人,說編程就像解題,一個(gè)題干出出來了,我們需要利用所掌握的知識(shí),一步步,井井有條的解決出來。而編程了,則是根據(jù)客戶的一個(gè)需求,利用自己技能把其變成計(jì)算機(jī)軟件,來幫助解決現(xiàn)實(shí)生活中的問題。有些人,說編程就像操作機(jī)器,你像一個(gè)司機(jī),你操作方向盤讓車向左走,他不會(huì)向右左。我們編程也是同樣的道理,你輸入一條加法指令,計(jì)算機(jī)也不會(huì)幫你做減法。有些人,說編程就像作家,作家,是將冰冷冷文字賦予了生命,來賣錢。程序員,是將毫無生氣的一些指令,變成那好玩游戲,哪方便的app。這些,都是很形象的類比。我們這里套用馬克思*韋伯在《新教理論與資本主義》中首次提出了一個(gè)概念能夠很好的解釋上面列舉的事情的共性——工具理性。所謂“工具理性”,就是通過實(shí)踐的途徑確認(rèn)工具(手段)的有用性,從而追求事物的最大功效,為人的某種功利的實(shí)現(xiàn)服務(wù)。工具理性是通過精確計(jì)算功利的方法最有效達(dá)至目的的理性,是一種以工具崇拜和技術(shù)主義為生存目標(biāo)的價(jià)值觀,所以“工具理性”又叫“功效理性”或者說“效率理性”的定義。可以將程序員思維,定義為是在理性思維的框架下,利用相應(yīng)工具,來解決相應(yīng)實(shí)際的問題。

  再回答程序員思維從哪里來,這個(gè)問題時(shí)候,我們回顧了計(jì)算機(jī)語言歷史:

  1940之前

  第一個(gè)編程語言比現(xiàn)代的計(jì)算機(jī)還早誕生。首先,這種語言是種編碼(en:code)。 于1801年發(fā)明的提花織布機(jī)(或稱甲卡提花織布機(jī),英文:en:Jacquard loom),運(yùn)用打孔卡上的坑洞來代表縫紉織布機(jī)的手臂動(dòng)作,以便自動(dòng)化產(chǎn)生裝飾的圖案。 Ada Lovelace在1842年至1843年間花費(fèi)了九個(gè)月,將意大利數(shù)學(xué)家Luigi Menabrea關(guān)于查爾斯·巴貝奇新發(fā)表機(jī)器分析機(jī)的回憶錄翻譯完成。她于那篇文章后面附加了一個(gè)用分析機(jī)計(jì)算伯努利數(shù)方法的細(xì)節(jié),被部分歷史學(xué)家認(rèn)為是世界上第一個(gè)電腦程序。這個(gè)故事我們上面也說過。 Herman Hollerith在觀察列車長(zhǎng)對(duì)乘客票根在特定位置打洞的方式后,意識(shí)到他可以把資訊編碼記載到打孔卡上,隨后根據(jù)這項(xiàng)發(fā)現(xiàn)使用打孔卡來編碼并紀(jì)錄1890年的人口統(tǒng)計(jì)資料。 第一個(gè)嚴(yán)格意義上的計(jì)算機(jī)程式碼是針對(duì)他們的應(yīng)用面設(shè)計(jì)的。在20世紀(jì)的前十年主要是用十進(jìn)制來算數(shù),后來人們發(fā)現(xiàn)不只是用文字,也可以用數(shù)字來表現(xiàn)邏輯。舉例來說,阿隆佐·邱奇曾以公式化(formulaic)的方式表達(dá)λ演算。圖靈機(jī)是一種紙帶標(biāo)記(tape-marking)機(jī)器(就像電話公司用的那種)操作方法抽象化后的集合。圖靈機(jī)這種透過有限數(shù)字(finite number)呈現(xiàn)機(jī)器的方式,奠定了程式如同馮·諾伊曼結(jié)構(gòu)計(jì)算機(jī)中的資料一樣地儲(chǔ)存的基礎(chǔ)。但不同于λ演算,圖靈機(jī)的程式碼并沒有辦法成為高階編程語言的基石,這是是因?yàn)樗饕挠猛臼欠治鏊惴ǖ膹?fù)雜度。 就像許多歷史上的”第一次”一樣,第一個(gè)現(xiàn)代編程語言也很難界定。最一開始是因?yàn)橛布拗贫薅苏Z言,打孔卡允許80行(column)的長(zhǎng)度,但某幾行必須用來記錄卡片的順序。FORTRAN則納入了一些與英文字詞相同的關(guān)鍵字,像是”IF”、”GOTO”(原字詞為go to),以及”CONTINUE”。之后采用磁鼓(magnetic drum)作為內(nèi)存使用,也代表計(jì)算機(jī)程式也必須插入(interleave)到磁鼓的轉(zhuǎn)動(dòng)(rotation)中。和現(xiàn)今比較起來,這也讓編程語言必須更加依賴硬件(hardware-dependent)。 對(duì)部分的人認(rèn)為必須在”編程語言”的狀態(tài)確立之前,根據(jù)能力(power)以及可讀性(human-readability)的程度來決定歷史上第一個(gè)編程語言是什么語言。提花織布機(jī)和查爾斯·巴貝奇所制作的差分機(jī)(en:Difference Engine)都具備在大量限制下,簡(jiǎn)單描述機(jī)器應(yīng)執(zhí)行行為的語言。也有種并非設(shè)計(jì)給人類運(yùn)用的受限特定領(lǐng)域語言(en:domain-specific language),是將打孔卡運(yùn)用到自動(dòng)演奏鋼琴(en:player piano)上。

  1940年代
  最早被確認(rèn)的現(xiàn)代化、電力啟動(dòng)(electrically powered)的計(jì)算機(jī)約在1940年代被創(chuàng)造出來。程式設(shè)計(jì)師在有限的速度及內(nèi)存容量限制之下,撰寫人工調(diào)整(hand tuned)過的組合語言程式。而且很快就發(fā)現(xiàn)到使用組合語言的這種撰寫方式需要花費(fèi)大量的腦力(intellectual effort)而且很容易出錯(cuò)(error-prone)。 Konrad Zuse于1948年發(fā)表了他所設(shè)計(jì)的Plankalkül編程語言的論文[1]。但是在他有生之年卻未能將該語言實(shí)作,而他原本的貢獻(xiàn)也被其他的發(fā)展所孤立。 在這段期間被開發(fā)出來的重要語言包括有:

  1943 – Plankalkül (Konrad Zuse)
  1943 – ENIAC coding system
  1949 – C-10
  1950與1960年代
  有三個(gè)現(xiàn)代編程語言于1950年代被設(shè)計(jì)出來,這三者所衍生的語言直到今日仍舊廣泛地被采用:

  Fortran (1955),名稱取自”FORmula TRANslator”(公式翻譯器),由約翰·巴科斯等人所發(fā)明;
  LISP,名稱取自”LISt Processor”(列舉處理器),由約翰·麥卡錫等人所發(fā)明;
  COBOL,名稱取自”COmmon Business Oriented Language”(通用商業(yè)導(dǎo)向語言),由被葛麗絲·霍普深刻影響的Short Range Committee所發(fā)明。
  另一個(gè)1950年代晚期的里程碑是由美國(guó)與歐洲計(jì)算機(jī)學(xué)者針對(duì)”算法的新語言”所組成的委員會(huì)出版的ALGOL 60報(bào)告(名稱取自”ALGOrithmic Language”(算法語言))。這份報(bào)告強(qiáng)化了當(dāng)時(shí)許多關(guān)于計(jì)算的想法,并提出了兩個(gè)語言上的創(chuàng)新功能:

  巢狀區(qū)塊結(jié)構(gòu):可以將有意義的程式碼片段群組成一個(gè)區(qū)塊(block),而非轉(zhuǎn)成分散且特定命名的程序。也就是我們所熟悉的模塊化設(shè)計(jì)。
  詞匯范圍(lexical scoping):區(qū)塊可以有區(qū)塊外部無法透過名稱存取,屬于區(qū)塊本身的變量、程序以及函式。就是我們所熟悉的作用域。
  另一個(gè)創(chuàng)新則是關(guān)于語言的描述方式:一種名為巴科斯-諾爾范式 (BNF)的數(shù)學(xué)化精確符號(hào)被用于描述語言的語法。之后的編程語言幾乎全部都采用類似BNF的方式來描述程式  語法中上下文無關(guān)的部份。BNF主要使用在了Algol 60的設(shè)計(jì)上面。而Algol 60對(duì)之后語言的設(shè)計(jì)上帶來了特殊的影響,在其他部分的語言設(shè)計(jì)中這種設(shè)計(jì)思想很快的就被廣泛采用。并且后續(xù)為了開發(fā)Algol的擴(kuò)充子集合,設(shè)計(jì)了一個(gè)名為Burroughs(en:Burroughs large systems)的大型系統(tǒng)。而延續(xù)Algol的關(guān)鍵構(gòu)想所產(chǎn)生的成果就是ALGOL 68:

  語法跟語意變的更加正交(orthogonal)
  采用匿名的歷程(routines)
  采用高階(higher-order)功能的遞回式輸入(typing)系統(tǒng)等等。
整個(gè)語言及語意的部分都透過為了描述語言而特別設(shè)計(jì)的Van Wijngaarden grammar來進(jìn)行正式的定義,而不僅止于上下文無關(guān)的部份。Algol 68一些較少被使用到的語言功能(如同步與并列區(qū)塊)、語法捷徑的復(fù)雜系統(tǒng),以及型態(tài)自動(dòng)強(qiáng)制轉(zhuǎn)換(coercions),使得實(shí)作者興趣缺缺,也讓Algol 68獲得了很難用(diffcult)的名聲。尼克勞斯·維爾特就干脆離開該設(shè)計(jì)委員會(huì),另外在開發(fā)出更簡(jiǎn)單的Pascal語言。 在這段期間被開發(fā)出來的重要語言包括有:

  1951 – Regional Assembly Language
  1952 – Autocode
  1954 – FORTRAN
  1954 – IPL (LISP的先驅(qū))
  1955 – FLOW-MATIC (COBOL的先驅(qū))
  1957 – COMTRAN (COBOL的先驅(qū))
  1958 – LISP  
  1958 – ALGOL 58
  1959 – FACT (COBOL的先驅(qū))
  1959 – COBOL
  1962 – APL
  1962 – Simula
  1962 – SNOBOL
  1963 – CPL (C的先驅(qū))
  1964 – BASIC
  1964 – PL/I
  1967 – BCPL (C的先驅(qū))
  1967-1978:確立了基礎(chǔ)范式
  1960年代晚期至1970年代晚期的期間中,編程語言的發(fā)展也有了重大的成果。大多數(shù)現(xiàn)在所使用的主要語言范式都是在這段期間中發(fā)明的:

  Simula,于1960年代晚期由奈加特與Dahl以Algol 60超集合的方式發(fā)展,同時(shí)也是第一個(gè)設(shè)計(jì)支援面向?qū)ο筮M(jìn)行開發(fā)的編程語言。
  C,于1969至1973年間由貝爾實(shí)驗(yàn)室的研究人員丹尼斯·里奇與肯·湯普遜所開發(fā),是一種早期的系統(tǒng)程式設(shè)計(jì)(en:system programming)語言。
  Smalltalk,于1970年代中期所開發(fā),是一個(gè)完全從零開始(ground-up)設(shè)計(jì)的面向?qū)ο缶幊陶Z言。
  Prolog,于1972年由Colmerauer、Roussel,以及Kowalski所設(shè)計(jì),是第一個(gè)邏輯程式語言。
  ML,于1973年由羅賓·米爾納所發(fā)明,是一個(gè)基于Lisp所建構(gòu)的多型(polymorphic)型態(tài)系統(tǒng),同時(shí)也是靜態(tài)型別函數(shù)編程語言的先驅(qū)。
這些語言都各自演展出自己的家族分支,現(xiàn)今多數(shù)現(xiàn)代編程語言的祖先都可以追朔他們其中至少一個(gè)以上。 在1960年代以及1970年代中結(jié)構(gòu)化程式設(shè)計(jì)的優(yōu)點(diǎn)也帶來許多的爭(zhēng)議,特別是在程式開發(fā)的過程中完全不使用GOTO。這項(xiàng)爭(zhēng)議跟語言本身的設(shè)計(jì)非常有關(guān)系:某些語言并沒有包含GOTO,這也強(qiáng)迫程式設(shè)計(jì)師必須結(jié)構(gòu)化地編寫程式。盡管這個(gè)爭(zhēng)議在當(dāng)時(shí)吵翻了天,但幾乎所有的程式設(shè)計(jì)師都同意就算語言本身有提供GOTO的功能,在除了少數(shù)罕見的情況下去使用GOTO是種不良的程序風(fēng)格。結(jié)果是之后世代的編程語言設(shè)計(jì)者發(fā)覺到結(jié)構(gòu)化編程語言的爭(zhēng)議實(shí)在既乏味又令人眼花撩亂。 在這段期間被開發(fā)出來的重要語言包括有:

  1968 – Logo
  1970 – Pascal
  1970 – Forth
  1972 – C語言
  1972 – Smalltalk
  1972 – Prolog
  1973 – ML
  1975 – Scheme
  1978 – SQL (起先只是一種查詢語言,擴(kuò)充之后也具備了程式結(jié)構(gòu))
  1980年代:增強(qiáng)、模組、效能
  1980年代的編程語言與之前相較顯得更為強(qiáng)大。C++合并了面向?qū)ο笠约跋到y(tǒng)程式設(shè)計(jì)。美國(guó)政府標(biāo)準(zhǔn)化一種名為Ada的系統(tǒng)編程語言并提供給國(guó)防承包商使用。日本以及其他地方運(yùn)用了大量的資金對(duì)采用邏輯編程語言結(jié)構(gòu)的第五代語言進(jìn)行研究。函數(shù)編程語言社群則把焦點(diǎn)轉(zhuǎn)移到標(biāo)準(zhǔn)化ML及Lisp身上。這些活動(dòng)都不是在開發(fā)新的范式,而是在將上個(gè)世代發(fā)明的構(gòu)想進(jìn)一步發(fā)揚(yáng)光大。 然而,在語言設(shè)計(jì)上有個(gè)重大的新趨勢(shì),就是研究運(yùn)用模組或大型組織化的程式單元來進(jìn)行大型系統(tǒng)的開發(fā)。Modula、Ada,以及ML都在1980年代發(fā)展出值得注意的模組化系統(tǒng)。模組化系統(tǒng)常拘泥于采用泛型程式設(shè)計(jì)結(jié)構(gòu):

  泛型存在(generics being)
  本質(zhì)(essence)
  參數(shù)化模組(parameterized modules)
  盡管沒有出現(xiàn)新的主要編程語言范式,許多研究人員仍就擴(kuò)充之前語言的構(gòu)想并將它們運(yùn)用到新的內(nèi)容上。舉例來說,Argus以及Emerald系統(tǒng)的語言配合面向?qū)ο笳Z言運(yùn)用到分散式系統(tǒng)上。 1980年代的編程語言實(shí)際情況也有所進(jìn)展。計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)中RISC假定硬件應(yīng)當(dāng)為編譯器設(shè)計(jì),而并非為人類設(shè)計(jì)。借由中央處理器速度增快的幫助,編譯技術(shù)也越來越進(jìn)展神速,RISC的進(jìn)展對(duì)高階語言編譯技術(shù)發(fā)展來不小的貢獻(xiàn)。 在這段期間被開發(fā)出來的重要語言包括有:

  1980 – Ada
  1983 – C++ (就像有類別的C)
  1984 – Common Lisp
  1985 – Eiffel
  1986 – Erlang
  1987 – Perl
  1988 – Tcl
  1989 – FL (Backus)
  1990年代:互聯(lián)網(wǎng)時(shí)代
  1990年代未見到有什么重大的創(chuàng)新,大多都是以前構(gòu)想的重組或變化。這段期間主要在推動(dòng)的哲學(xué)思想是提升程式設(shè)計(jì)師的生產(chǎn)力。許多”快速應(yīng)用程式開發(fā)” (RAD) 語言也應(yīng)運(yùn)而生,這些語言大多都有相應(yīng)的集成開發(fā)環(huán)境、垃圾回收等機(jī)制,且大多是先前語言的衍生語言。這類型的語言也大多是面向?qū)ο蟮木幊陶Z言,包含有Object Pascal、Visual Basic,以及C#。Java則是更加保守的語言,也具備垃圾回收機(jī)制。與其他類似語言相比,也受到更多的觀注。新的腳本語言則比RAD語言更新更好。這種語言并非直接從其他語言衍生,而且新的語法更加開放地(liberal)與功能契合。雖然腳本語言比RAD語言來的更有生產(chǎn)力,但大多會(huì)有因?yàn)樾〕淌捷^為簡(jiǎn)單,但是大型程式則難以使用腳本語言撰寫并維護(hù)的顧慮[來源請(qǐng)求]。盡管如此,腳本語言還是網(wǎng)絡(luò)層面的應(yīng)用上大放異彩。 在這段期間被開發(fā)出來的重要語言包括有:

  1990 – Haskell
  1991 – Python
  1991 – Visual Basic
  1993 – Ruby
  1993 – Lua
  1994 – CLOS (part of ANSI Common Lisp)
  1995 – Java
  1995 – Delphi (Object Pascal)
  1995 – JavaScript
  1995 – PHP
  1997 – REBOL
  1999 – D
  現(xiàn)今的趨勢(shì)
  編程語言持續(xù)在學(xué)術(shù)及企業(yè)兩個(gè)層面中發(fā)展進(jìn)化,目前的一些趨勢(shì)包含有:

  在語言中增加安全性與可靠性驗(yàn)證機(jī)制:額外的堆棧檢查、資訊流(information flow)控制,以及靜態(tài)執(zhí)行緒安全。提供模組化的替代機(jī)制:混入(en:mixin)、委派(en:delegates),以及觀點(diǎn)導(dǎo)向。元件導(dǎo)向(component-oriented)軟件開發(fā)元編程、反射或是存取抽象語法樹(en:Abstract syntax tree)更重視分散式及移動(dòng)式的應(yīng)用。
與數(shù)據(jù)庫的整合,包含XML及關(guān)聯(lián)式數(shù)據(jù)庫。支援使用Unicode編寫程式,所以源代碼不會(huì)受到ASCII字符集的限制,而可以使用像是非拉丁語系的腳本或延伸標(biāo)點(diǎn)符號(hào)。
圖形化使用者接口所使用的XML(XUL、XAML)。在這段期間被開發(fā)出來的重要語言包括有:

  2001 – C#
  2001 – Visual Basic .NET
  2002 – F#
  2003 – Scala
  2003 – Factor
  2006 – Windows PowerShell
  2007 – Clojure
  2009 – Go

  從這些編程語言簡(jiǎn)史和人們?nèi)粘P枨?#xff0c;我們可以回答這個(gè)問題了。所有的程序員思維都是來自于需求兩個(gè)字。隨著對(duì)現(xiàn)實(shí)信息管理的壓力太大的,我們慢慢才有計(jì)算機(jī)發(fā)明。為了,更好的管理計(jì)算機(jī),于是便有了編程語言,起初的語言,是面向機(jī)器的了,后來隨著世人更加理解的角度,就進(jìn)一步面向過程,為了使人更加理解世界萬物,就有了面向?qū)ο蟮恼Z言,綜上所述,程序員的思維,從何而來,從世間萬物的需求而來,從更好的解決問題的需求而來。如果大家對(duì)Python感興趣的話,可以加一下我們的學(xué)習(xí)交流摳摳群哦:649,825,285,免費(fèi)領(lǐng)取一套學(xué)習(xí)資料和視頻課程喲~

  有了程序員的思維從何而來的這一個(gè)冒解決了,我們就能夠很快的回答,程序員思維你要到哪里去了?

  一切程序員思維的宗旨就是,為了更好的解決問題,更好解決需求,于是在這一光輝思想的引導(dǎo)下了,我們就發(fā)明各種各樣設(shè)計(jì)模式,為了使其代碼高內(nèi)聚低耦合,這些都是使其我們程序員花這小的代價(jià)來滿足最大需求。

總結(jié)

以上是生活随笔為你收集整理的程序员思维是什么?程序员思维从哪里来?程序员思维到哪里去?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。