haskell函數式編程入門
『壹』 如何系統地自學 python
是否非常想學好 Python,一方面被瑣事糾纏,一直沒能動手,另一方面,擔心學習成本太高,心裡默默敲著退堂鼓?
幸運的是,Python 是一門初學者友好的編程語言,想要完全掌握它,你不必花上太多的時間和精力。
Python 的設計哲學之一就是簡單易學,體現在兩個方面:
語法簡潔明了:相對 Ruby 和 Perl,它的語法特性不多不少,大多數都很簡單直接,不玩兒玄學。
切入點很多:Python 可以讓你可以做很多事情,科學計算和數據分析、爬蟲、Web 網站、游戲、命令行實用工具等等等等,總有一個是你感興趣並且願意投入時間的。
- 用一種方法,最好是只有一種方法來做一件事。
廢話不多說,學會一門語言的捷徑只有一個: Getting Started
¶ 起步階段
任何一種編程語言都包含兩個部分:硬知識和軟知識,起步階段的主要任務是掌握硬知識。
硬知識
「硬知識」指的是編程語言的語法、演算法和數據結構、編程範式等,例如:變數和類型、循環語句、分支、函數、類。這部分知識也是具有普適性的,看上去是掌握了一種語法,實際是建立了一種思維。例如:讓一個 java 程序員去學習 Python,他可以很快的將 Java 中的學到的面向對象的知識 map 到 Python 中來,因此能夠快速掌握 Python 中面向對象的特性。
如果你是剛開始學習編程的新手,一本可靠的語法書是非常重要的。它看上去可能非常枯燥乏味,但對於建立穩固的編程思維是必不可少。
下面列出了一些適合初學者入門的教學材料:
廖雪峰的 Python 教程 Python 中文教程的翹楚,專為剛剛步入程序世界的小白打造。
笨方法學 Python 這本書在講解 Python 的語法成分時,還附帶大量可實踐的例子,非常適合快速起步。
The Hitchhiker』s Guide to Python! 這本指南著重於 Python 的最佳實踐,不管你是 Python 專家還是新手,都能獲得極大的幫助。
Python 的哲學:
學習也是一樣,雖然推薦了多種學習資料,但實際學習的時候,最好只選擇其中的一個,堅持看完。
必要的時候,可能需要閱讀講解數據結構和演算法的書,這些知識對於理解和使用 Python 中的對象模型有著很大的幫助。
軟知識
「軟知識」則是特定語言環境下的語法技巧、類庫的使用、IDE的選擇等等。這一部分,即使完全不了解不會使用,也不會妨礙你去編程,只不過寫出的程序,看上去顯得「傻」了些。
對這些知識的學習,取決於你嘗試解決的問題的領域和深度。對初學者而言,起步階段極易走火,或者在選擇 Python 版本時徘徊不決,一會兒看 2.7 一會兒又轉到 3.0,或者徜徉在類庫的大海中無法自拔,Scrapy,Numpy,Django 什麼都要試試,或者參與編輯器聖戰、大括弧縮進探究、操作系統辯論賽等無意義活動,或者整天跪舔語法糖,老想著怎麼一行代碼把所有的事情做完,或者去構想聖潔的性能安全通用性健壯性全部滿分的解決方案。
很多「大牛」都會告誡初學者,用這個用那個,少走彎路,這樣反而把初學者推向了真正的彎路。
還不如告訴初學者,學習本來就是個需要你去走彎路出 Bug,只能腳踏實地,沒有奇跡只有狗屎的過程。
選擇一個方向先走下去,哪怕臟丑差,走不動了再看看有沒有更好的解決途徑。
自己走了彎路,你才知道這么做的好處,才能理解為什麼人們可以手寫狀態機去匹配卻偏要發明正則表達式,為什麼面向過程可以解決卻偏要面向對象,為什麼我可以操縱每一根指針卻偏要自動管理內存,為什麼我可以嵌套回調卻偏要用 Promise...
更重要的是,你會明白,高層次的解決方法都是對低層次的封裝,並不是任何情況下都是最有效最合適的。
技術涌進就像波浪一樣,那些陳舊的封存已久的技術,消退了遲早還會涌回的。就像現在移動端應用、手游和 HTML5 的火熱,某些方面不正在重演過去 PC 的那些歷史么?
因此,不要擔心自己走錯路誤了終身,堅持並保持進步才是正道。
起步階段的核心任務是掌握硬知識,軟知識做適當了解,有了穩固的根,粗壯的枝幹,才能長出濃密的葉子,結出甜美的果實。
¶ 發展階段
完成了基礎知識的學習,必定會感到一陣空虛,懷疑這些語法知識是不是真的有用。
沒錯,你的懷疑是非常正確的。要讓 Python 發揮出它的價值,當然不能停留在語法層面。
發展階段的核心任務,就是「跳出 Python,擁抱世界」。
在你面前會有多個分支:科學計算和數據分析、爬蟲、Web 網站、游戲、命令行實用工具等等等等,這些都不是僅僅知道 Python 語法就能解決的問題。
拿爬蟲舉例,如果你對計算機網路,HTTP 協議,HTML,文本編碼,JSON 一無所知,你能做好這部分的工作么?而你在起步階段的基礎知識也同樣重要,如果你連循環遞歸怎麼寫都還要查文檔,連 BFS 都不知道怎麼實現,這就像工匠做石凳每次起錘都要思考錘子怎麼使用一樣,非常低效。
在這個階段,不可避免要接觸大量類庫,閱讀大量書籍的。
類庫方面
「Awesome Python 項目」:vinta/awesome-python · GitHub
這里列出了你在嘗試解決各種實際問題時,Python 社區已有的工具型類庫,如下圖所示:
vinta/awesome-python
你可以按照實際需求,尋找你需要的類庫。
至於相關類庫如何使用,必須掌握的技能便是閱讀文檔。由於開源社區大多數文檔都是英文寫成的,所以,英語不好的同學,需要惡補下。
書籍方面
這里我只列出一些我覺得比較有一些幫助的書籍,詳細的請看豆瓣的書評:
科學和數據分析:
❖「集體智慧編程」:集體智慧編程 (豆瓣)
❖「數學之美」:數學之美 (豆瓣)
❖「統計學習方法」:統計學習方法 (豆瓣)
❖「Pattern Recognition And Machine Learning」:Pattern Recognition And Machine Learning (豆瓣)
❖「數據科學實戰」:數據科學實戰 (豆瓣)
❖「數據檢索導論」:信息檢索導論 (豆瓣)
爬蟲:
❖「HTTP 權威指南」:HTTP權威指南 (豆瓣)
Web 網站:
❖「HTML & CSS 設計與構建網站」:HTML & CSS設計與構建網站 (豆瓣)
...
列到這里已經不需要繼續了。
聰明的你一定會發現上面的大部分書籍,並不是講 Python 的書,而更多的是專業知識。
事實上,這里所謂「跳出 Python,擁抱世界」,其實是發現 Python 和專業知識相結合,能夠解決很多實際問題。這個階段能走到什麼程度,更多的取決於自己的專業知識。
¶ 深入階段
這個階段的你,對 Python 幾乎了如指掌,那麼你一定知道 Python 是用 C 語言實現的。
可是 Python 對象的「動態特徵」是怎麼用相對底層,連自動內存管理都沒有的C語言實現的呢?這時候就不能停留在表面了,勇敢的拆開 Python 的黑盒子,深入到語言的內部,去看它的歷史,讀它的源碼,才能真正理解它的設計思路。
這里推薦一本書:
「Python 源碼剖析」:Python源碼剖析 (豆瓣)
這本書把 Python 源碼中最核心的部分,給出了詳細的闡釋,不過閱讀此書需要對 C 語言內存模型和指針有著很好的理解。
另外,Python 本身是一門雜糅多種範式的動態語言,也就是說,相對於 C 的過程式、 Haskell 等的函數式、Java 基於類的面向對象而言,它都不夠純粹。換而言之,編程語言的「道學」,在 Python 中只能有限的體悟。學習某種編程範式時,從那些面向這種範式更加純粹的語言出發,才能有更深刻的理解,也能了解到 Python 語言的根源。
這里推薦一門公開課
「編程範式」:斯坦福大學公開課:編程範式
講師高屋建瓴,從各種編程範式的代表語言出發,給出了每種編程範式最核心的思想。
值得一提的是,這門課程對C語言有非常深入的講解,例如C語言的范型和內存管理。這些知識,對閱讀 Python 源碼也有大有幫助。
Python 的許多最佳實踐都隱藏在那些眾所周知的框架和類庫中,例如 Django、Tornado 等等。在它們的源代碼中淘金,也是個不錯的選擇。
¶ 最後的話
每個人學編程的道路都是不一樣的,其實大都殊途同歸,沒有迷路的人只有不能堅持的人!
希望想學 Python 想學編程的同學,不要猶豫了,看完這篇文章,
Just Getting Started !!!
『貳』 大學計算機系的學生,在入學前需要做好哪些准備
買電腦學電腦的人基本都要用電腦,最好買筆記本,上課的時候帶著比較方便。有了電腦一定要堅持,不要沉迷游戲,不然畢業就後悔了!在學校,老師只教你入門水平。如果你真的想學好,你最好參加一些比賽,至少做點什麼來提高你的水平。
在編程語言的學習中,不要盲目追求通俗。NET/ASP/PHP/Swift,掌握C/C++/Python最基本的工具,學完C語言後自學函數式的編程範式(Haskell就是一個很好的例子)。相信所有的學校都會教你面向對象的範式(OOP),但是函數式的教學很少,理解它不會對你有什麼傷害。打好編程基礎以後,以後會做一些工程項目,比如APP,網站開發。現在看你想用的語言和工具,就可以輕松完成任務了。
計算機不只是編程,演算法很重要,要學好離散。同時,對於一些演算法來說,還涉及到各種可能沒學過的數學知識。ACM比賽用Cpp代替java。Java不能通過同樣的結果。可以使用Leetcode。
『叄』 如何系統地自學 Python
按照這個大綱按部就班的學習,就能系統的學習Python了!
階段一:Python開發基礎
Python全棧開發與人工智慧之Python開發基礎知識學習內容包括:Python基礎語法、數據類型、字元編碼、文件操作、函數、裝飾器、迭代器、內置方法、常用模塊等。
階段二:Python高級編程和資料庫開發
Python全棧開發與人工智慧之Python高級編程和資料庫開發知識學習內容包括:面向對象開發、Socket網路編程、線程、進程、隊列、IO多路模型、Mysql資料庫開發等。
階段三:前端開發
Python全棧開發與人工智慧之前端開發知識學習內容包括:Html、CSS、JavaScript開發、Jquery&bootstrap開發、前端框架VUE開發等。
階段四:WEB框架開發
Python全棧開發與人工智慧之WEB框架開發學習內容包括:Django框架基礎、Django框架進階、BBS+Blog實戰項目開發、緩存和隊列中間件、Flask框架學習、Tornado框架學習、Restful API等。
階段五:爬蟲開發
Python全棧開發與人工智慧之爬蟲開發學習內容包括:爬蟲開發實戰。
階段六:全棧項目實戰
Python全棧開發與人工智慧之全棧項目實戰學習內容包括:企業應用工具學習、CRM客戶關系管理系統開發、路飛學城在線教育平台開發等。
階段七:演算法&設計模式
階段八:數據分析
Python全棧開發與人工智慧之數據分析學習內容包括:金融量化分析。
階段九:機器學習、圖像識別、NLP自然語言處理
Python全棧開發與人工智慧之人工智慧學習內容包括:機器學習、圖形識別、人工智慧玩具開發等。
階段十:Linux系統&百萬級並發架構解決方案
階段十一:高並發語言GO開發
Python全棧開發與人工智慧之高並發語言GO開發學習內容包括:GO語言基礎、數據類型與文件IO操作、函數和面向對象、並發編程等。
『肆』 如何選擇編程語言
很多語言,像C、Java、Python和JavaScript在幾十年來一直持續支配著他們的各自的領域。另一方面,也要看到近期流行的需求語言,像Swift、Google Go 和 Rust。
怎樣選擇學習哪一種編程語言,其答案取決於學習之後用它來做什麼。許多人的選擇標准僅僅是「學習一門語言最大的需求就是能找到一份高收入的工作」。但這個標准並非人人都適用,還有很多其它的方面要考慮。例如,在大學里使用Python這門語言給學生講授編程,其主要原因在於Python功能強大,學生們能夠很容易地掌握編程概念。對於初學編程的人來說,使用Python是一個不錯的選擇;對於想從事移動程序開發的人來說,學習Swift、C#、Java和JavaScript是很好的選擇;對於web開發來說,在CSS、HTML、JavaScript這樣的前端技術支持下,使用PHP、Java、Python和Ruby on Rails是第一選擇。
如果要完成像訪問關系資料庫這樣的更加具體化的任務,可以學習SQL編程語言。SQL語言並非是用來開發應用程序的,而是用來支持應用程序和資料庫之間的連接。更何況,很多數據驅動應用都在廣泛地使用SQL,如今,對SQL的需求已經超越了對許多工作表的需求。
如果你對硬體編程感興趣,想要開發嵌入式系統、操作系統、通信設備或者復雜的游戲引擎等,那麼選擇的語言依然是C/C++(主要是C)。
1.JavaScript——多用途編程語言
時至今日,對JavaScript的需求依然巨大,招聘網站上充斥著有關JavaScript及其相關技術的招聘信息。JavaScript由Brendan Eich設計,運行在Netscape瀏覽器中。那時,他或許做夢也沒有想到JavaScript會有如此超乎尋常的發展。
JavaScript是WWW的默認語言,並且幾乎每個web瀏覽器都支持JavaScript,它已經成為了web前端開發的世界標准。隨著Node.js的發展,JavaScript的應用領域又擴展到了伺服器端開發,如今和java、.Net、PHP、Ruby on Rails以及其它的伺服器端技術展開了競爭。
JavaScript除了應用於前端和伺服器端開發外,它也快速地發展成為移動應用開發的選擇。開發者可以使用許多流行的JavaScript框架來構建混合移動應用程序,比如ionic、kendo UI和Sencha touch等。
後來,隨著React native框架的興起(由Facebook提出),JavaScript又出現在了Android和iOS原生應用開發領域。
JavaScript無處不在!然而,JavaScript本身不會讓你擁有最高薪酬的開發工作,你還需要學習基於JavaScript的技術、框架和庫(比如Node.js、React、React Native、ionic、jQuery、D3.js和Kendo UI等等)。相關技術的選擇完全取決於你要從事的工作。
說到學習JavaScript,它是一種動態編程語言,並且非常容易入門。熟悉了JavaScript基礎知識之後,你就可以很容易地學習相關的技術,比如 jQuery、Node.js、Angular或React。
2.Python——最好的編程語言
Python是另一種編程語言,目前世界各地的開發者正在使用它進行快速應用程序開發。Python是一種模塊化的、易於學習的、面向對象以及注重可讀性的高級語言。
Python廣泛地應用於教育領域、web與internet開發、科學與數值計算以及大數據、機器學習演算法開發。
Python的深度和廣度使得它成為教育和研究領域的首選語言,世界各地的學生正使用Python來學習編程和構建研究項目。如今很多進行計算機編程的學生把Python作為他們學習的第一門語言。
Python已經廣泛地用於web和internet開發,並且有許多流行的框架,比如Django、Pyramid、Flask和Bottle。Django CMS和Plone是兩種廣泛使用的基於Python的內容管理系統,許多流行網站和web應用程序都在使用它們。
最近,由於對大數據分析和機器學習演算法的需求急速增長,對Python的需求也在快速增長。用Python編寫的許多開源庫能夠實現數據科學廣泛使用的一些核心的機器學習演算法。R是統計與數據科學領域廣泛使用的另一種語言,但是學習曲線比較陡峭。
庫方面,一些流行的Python庫例如用於數學、工程和科學領域的scipy、用於庫建模和數據分析領域的「pandas」,以及其它一些有用的庫,比如iPython、kivy、pyqt和pyside。
3.Java——大眾化的編程語言
Java是大眾化的編程語言,它也是一種永葆青春的語言,多年來一直是各個招聘板塊的寵兒。Java於1990年由 Sun Microsystems公司發布,後來被Oracle公司收購,Java的哲學理念是「編寫一次,到處運行」。
Java廣泛地應用於web開發、企業軟體開發和Android app開發。隨著對運行在Android平台上的移動app的需求不斷增長,對java的應用也達到一個新高度,這也是為什麼全球范圍內對java的需求依然第一的原因。
Java是高級的面向對象的編程語言,學習起來比C++更容易,但是程序的性能要比C或C++差一些。因此,一般不用java構建核心引擎、操作系統或嵌入式系統開發。
4.SQL——結構化查詢語言
SQL結構化查詢語言是一種能被資料庫理解的語言。SQL是由IBM工程師於1970年開發的,用來創建、更新和檢索「System R」這個資料庫管理系統中的數據。從那時起,SQL已經走過了很長的路,時至今日,它仍然是市場最需要的一種技能。
近年來,使用非SQL資料庫來處理大數據的這種需求給SQL蒙上了陰影,但持續的時間不會太長。不久人們就會認識到SQL提供的大數據分析方法更好,它是一種更具有擴展性、可驗證性和經得起時間檢驗的技術。
SQL語言用以輔助進行數據驅動網站、web應用程序、桌面應用程序以及移動應用程序的開發。SQL在任何應用領域都有應用。從學習的角度看,SQL比較容易掌握,並且由於有很高的市場需求,你可以僅僅通過SQL就能找到第一份工作。
然而,要找到一份高薪酬工作,還需要擁有設計、管理和維護多種資料庫,比如Oracle、MySQL、PostgreSQL、IBM DB2和Microsoft SQL Server等的經驗。
5.C#——排名第一的微軟技術
C#是最通用的語言之一,它使得編程像Java語言一樣簡單。C#是類型安全的、面向對象的編程語言,運行在.NET框架運行時環境中。C#代碼被編譯成符合CLI規范的IL語言(中間語言)。
C#語言正迅速成為構建微軟家族各種應用的首選,你可以用來構建客戶端—伺服器應用程序、資料庫應用程序、web服務、移動應用程序、游戲等等。
C#在游戲開發中也有很好的應用(高級的但並非是硬核心),頂級游戲引擎Unity 3D就把C#作為支持的語言之一,除此外只有JavaScript語言被支持。C#還是許多交叉平台應用程序構建工具(如Xamarin)所採用的編碼語言。你可以使用Xamarin產品套件構建交叉平台移動應用程序。
盡管匯編語言是首選的游戲引擎開發工具,要進行硬核心終端游戲開發,仍然可以使用C或C++,Rust語言也可以應用在該領域。
6.C/C++——古老而金貴的編程語言
有人說C++很古老,但卻一致被認為依然金貴。當涉及更注重性能的硬核心系統編程時,C/C++ 仍然是首選的編程語言。C比C++更接近硬體,並且能提供更好的性能。
許多開發者轉向Java,是因為和C++(&C)相比,使用Java更便於開發,而且在很多情況下性能可以通過對硬體部分進行更多的投資而抵消。但並非總是如此,比如對於嵌入式系統,你就只需要管理最少的硬體組件。
C和C++仍然屬於高級編程語言嗎?
C/C++擁有最好的編譯器、開發環境、庫和核心開發部件,還擁有一個在未來也不可能被替換的巨大的生態系統。現有的生態系統和高性能應用程序的需要,使得對C/C++的需求一直很高,而且C/C++開發人員的工資檔次也比較高。
7.Swift——第一個工業質量級的系統編程語言
Swift是相對較新的語言,並且正快速地流行起來。Swift是完全用於Apple的開發語言,例如iOS應用程序、OS X應用程序、watchOS應用程序和tvOS應用程序。Swift引入了C和Objective-c的優點,並且能和cocoa以及cocoa touch框架很好地協同工作。
Apple擁有自己的巨大生態系統,毫無疑問,Swift將成為在未來幾年中引領其發展的語言。如果你想進入Apple生態系統,Swift正是要學習的語言。
Swift學起來很容易,用起來很有趣,究其原因在於它引入了嚴格類型語言(如C、Java、C++)的所有特性,而使用起來和任何腳本語言(如 Ruby或Python)一樣容易和有趣。你可以通過Swift playgrounds嘗試使用Swift,並且可以馬上看到結果,無需擔憂程序的編譯和運行。
Apple聲稱Swift是第一個工業質量級的系統編程語言,它提供了類似腳本的語法,能使開發變得絕對輕松。
8.PHP——基礎的編程語言
許多人認為PHP不是程序設計的未來,但PHP巨大的生態系統使得在未來幾年裡全世界需要大量的開發人員對其提供支持。排名前三的內容管理系統——WordPress、Drupal和Joomla都是使用PHP構建的,而且迄今大概有80%的網站運行在PHP之上。所以,它是巨大的!
PHP是容易學習的語言,它可以作為你進入編程世界的入門語言。PHP屬於就業市場中炙手可熱的語言,你可以找到大量的需要PHP技能的工作機會。PHP開發者的薪資水平和Java、C++、Python或Swift開發者相比,通常偏低。
PHP生態系統包括上述頂尖的內容管理系統(如WordPress、Drupal和Joomla等 )和PHP框架(如Laravel、Symfony、Yii和FuelPHP等)。這些內容管理系統和框架能使開發者在幾天內就構建出可以投入使用的網站和web應用程序。
近年來隨著 Node.js、Django和Ruby on Rails的出現,PHP蒙上了一層陰影,但是PHP正在改進,更新的版本完全可以和新興的語言與技術展開競爭。
9.Ruby——適合學習的編程語言
Ruby是另外一種開源的、面向對象的、通用的編程語言,這是一種簡單的、有助於快速應用開發的語言。Ruby最有名的框架是Rails(Ruby on Rails),這主要被用來web開發。
它在伺服器端開發是很有用的,有很多公司都使用它,如:Bloomberg、Airbnb、Shopify、Hulu和Slideshare等等,且被用在一個或多個項目之中。
Ruby是用來學習的最好的編程語言嗎?
Ruby常常被用來與Python的可讀性進行比較,它提供類英語的語法,這讓 Ruby 成為一個完美的候選者,最適合作為第一個編程語言來學習。
10.Rust——發展迅速的新一代編程語言
Rust是後起之秀,並且承諾要成為新一代的熱門技術。它快速地成為硬核心開發人員所痴迷的技術,並且以非常快的速度發展著。Rust語言還在發展之中,還是一門新語言,因此,Rust的就業市場尚未形成,傳播的深度與廣度還不夠。
Rust語言由Mozilla公司於2010年開發,它是Graydon Hoare所負責的一個研究項目。而現在開發者社區喜愛它並負責對其維護,他們決心將Rust推向一個新的高度。
Rust是一種低級的系統編程語言,其目標是提供高性能、安全性和並發性,它是一個不錯的C/C++的替代語言。過去,C開發人員努力使用Rust編寫操作系統、資料庫、嵌入式程序、內核以及各種系統程序。
Rust是一種現代語言,它擁有高級語言的靈活性和C這樣的低級語言才有的高性能以及對硬體的可控性。
11.其他
下面是另外的一些很受歡迎的編程語言,它們和排名靠前的那些語言進行著激烈的競爭。
GO——Go是谷歌公司推出的一款相對較新的語言,對於web伺服器開發、網路開發以及命令行程序開發來說,它是又一個比較優秀的選擇。
R——當要進行數據分析和統計軟體開發時,你可以選擇R語言。隨著大數據和機器學習的興起,R得以不斷發展並和Python和Matlab展開了激烈競爭。
Perl——最古老的語言之一,但它正越來越受歡迎並顯示出偉大復甦的跡象。DevOps是新生事物, Perl正發展成為用於DevOps的深受歡迎的語言,它或許會成為像Python語言那樣的下一個重要語言。
VisualBasic .Net——微軟公司推出的一種面向對象編程語言,對於開發.Net程序以及web程序和XML web服務這樣的專業領域程序來說,這是一個很好的選擇。
Haskell——統治著函數式編程的世界。和面向對象編程相比,函數式編程具有完全不同的哲學理念。函數式編程在分布式系統開發中應用廣泛,分布式系統開發的關鍵需求是並行執行和並發性。人工智慧和數學計算是函數式編程的又一應用領域,Haskell的應用同樣如此。
『伍』 易語言好還是javascript好
先說易語言吧,雖然我不是很熟悉,但是具我了解易語言是收費的(就是由於這個原因我沒有去嘗試),雖然網上有很多破解版的易語言IDE(集成開發環境),具體是IDE收費(也就他們一家做IDE,語言用戶不是很大,別人也沒什麼星期做IDE)還是語言收費這個不是很清楚。大體上看易語言類似於C/C++,只是由英文標識符改成了中文標識符,相比於C#,javascript沒有那麼多高級的特性。
與易語言相比你提及的另外C++ C# javascrip都是開放標準的,也就是可以免費學習和使用該語言,開發IDE也是可以的。
C++ 語法比較多(雖然C#現在也很多),由於大體上兼容C,所以可以執行相對底層的操作。在新標準的C++11發布後,c++相較之前容易學習和使用。主要應用大多是一些與硬體相關比較大的程序,有書籍指出一些戰斗機程序用C++,當然我們生活中一般的很多大型3D游戲是C++編寫的。
C# 微軟開發的語言,微軟IDE visual studio ,開源的有mono的IDE,你都可以找到相對免費的IDE,語法上很接近C++,但是很多細節上去不同,不管是模板還是一般的對象的處理上。該語言是運行在CLR(公共語言運行時)上的,所以性能上相較C++這類語言低些,不過一般的軟體都可以開發,而且由於相對高級,所以開發效率快,加上微軟的很多框架WPF,ASP.NET,開發更是快速。也有一些引擎使用他,例如Unity3D。也就是說其實C#在硬體不斷升級的帶動下,現在已經可以開發3D游戲。
javascrip 雖然有java的字眼,但是和java語言不同,這個語言是動態類型的,應用領域也不同,javascript一開始就是為萬維網准備的,我們平時瀏覽網頁的時候網站把javascript代碼發送到我們的客戶電腦上,讓客戶電腦自己執行的程序。Unity3D也用Javascript做腳本語言。
上面大體上說說,如果你想學編程的話,其實可以先學python,這個語言相對入門簡單,但是其語言本身卻不那麼簡單,你可以深入學習。然後去學其他語言例如你說的C# C++ javascript,不過做網頁的基本都要先學 HTML CSS javascript。也要看你想從哪個方向入門。
關鍵的說 興趣還是最好的老師,就拿我來說吧,我比較感興趣做游戲,所以一開始學的是C++,後來學習乏力,無聊的時候就開始學java C# ,後來發現java C# 大多用於寫網頁,就又了解了網頁的HTML CSS Javascript。回來還是對游戲開發感興趣,接觸了免費開源的3D建模軟體Blender,發現Blender使用python開發,想要給Blender開發可以導出自己格式的3D模型就開始學python,發現python其實和java C#還是有一定競爭的,那就是網路,發現網路真是編程語言必爭之地,又發現了Go語言。有了解了一下函數編程語言學了一點haskell。
但是歸根到底我除了C++,其他語言都不是很好,並不是C++就比其他的語言好那麼多,而是由於我喜歡開發游戲。那麼我學其他的語言就沒用嗎,我覺得我的C++編程風格很大程度上來源於於我學習上述語言其他語言的歷程中的感想。
『陸』 編程好學嗎
程序開發首先是非常難學的,現階段的編程範式有三種,面向過程編程:代表語言C,面向對象編程:代表語言java、C++、C#,函數式編程:代表語言haskell,lisp。一般情況下每個程序都會學習和掌握一到兩個編程範式,不過好在相同編程範式的語言,其思想是共通,可以快速學習,但跨範式學習,就難度很大了,其編程的思維方式不同,所以縱然是語法相似,但其實很不好學。除了編程語言的學習,還得學習計算機理論基礎:演算法、數據結構、操作系統、計算機網路、操作系統、組成原理等等。最後要開發應用程序的時候,得學習一系列的框架。而且編程技術日新月異,新類庫新SDK每天都會推出,你需要日復一日不斷地學習新技術。如最新視頻解碼技術,游戲引擎等等,而這些新技術可是國內沒有書和任何資料的,需要你到英文官方網站去找實例看文檔去學,更要命的,新的技術和老的還沒太大關聯,你得重頭去學。而且老闆急趕項目不會給你什麼時間,一般三天就是極限了,你需要這么短的時間快速掌握一項新技術。所以難度很大的。
『柒』 想學編程不知道從哪裡開始
1、先要確定自己學編程是要干什麼?
2、再來找相對應的編程語言。
科普一下
編程語言:C、C++、Java、C#、Prolog、VB、Scala、Clojure、Haskell、Ada、Python、Ruby、Pascal(Delphi)、Fortran、Lisp、matlab、Perl、Erlang、Boo、Tcl、Bash、C
shell、Objective-C、PHP、PL-SQL、Transact-SQL、ASP、JSP、Lua、smalltalk、R、D,golang,Rust
涉及到的工具:sed、awk、grep
我們現在學一門語言,大部分是要用到了才學(基本上是中國的公司用什麼我們學什麼),基於興趣的不多。
解決問題case:已知大量事實,和事實之間的約束,要求挖掘關系。
應用程序case:從小到超大型應用程序,非完全互聯網應用
解決問題case:程序規模不是很大的偏數學問題
特殊應用case:需要大量處理字元串的應用
特殊應用case:需要一個膠水,粘結不同語言寫出來的程序
果斷用prolog族語言。
例如,漢諾塔、地圖著色、數獨問題、八皇後問題等這種考驗智商,並且需要從已知規則中發現模式的問題。擁有一大堆已知案例的應用(例如大部分的人工智慧情況)
除非你是研究者,程序員一般是遇不到這種問題的。當然頂級的程序員也確實得具備解決這些問題的能力。但是他們就算解決也是用c解決的。這屬於叫好不叫座的科研型語言。
這也是大部分軟體公司遇到的情況。一般有幾種沒辦法分出高下的解決方案:C++,Java,C#,VB。當然,這裡面可以有CLR和JVM的不同衍生。例如,理論上,你也可以用scala來代替(不過估計大型公司不會冒這個險)。還是在理論上,你也可以用函數式編程的Clojure和Haskell來做(估計沒人會那麼傻)。還是在理論上,也可以用Ada這種強悍的通用語言,但估計沒人願意接受比C++還復雜的編程語言。理論上(基本只能在理論上),不嫌棄的話smalltalk也行。還是在理論上,python、ruby等配合一定的圖形界面庫也可以勝任(但項目大到一定的程度是,你會欲哭無淚)。
但是,我另起一行。有個語言:D語言。我個人不認為不可以列入首選名單。但是貌似知名度不行啊。。。。企業支持少啊。。。。。確實是門優秀的語言。C++太尾大不掉,需要一種語言,讓C++成為純粹的C++。
最近谷歌強勢的推出了golang,背景是後台程序員C++寫的好的太缺,python寫的後台實在是效率不行。於是一個在這之間的,注重工程管理的,並且是全靜態編譯的golang誕生了,你會發現其擁有C++匹配的效率,也擁有python般豐富的編程庫。其go和channel機制著實讓人著迷,一出來就吸引了大量的後台開發人員,有的公司甚至後台全面轉向go。但是其之前版本的內存回收機制比較爛,所以也有無數坑。現在的golang已經基本解決了這些問題,編譯器也用golang重新實現了。可以說已經產品化了。
與golang競爭搶這個市場的還有rust,這是一個為並行而生,意在取代c++的編程語言。與golang的定位是相同的,但是目的是不同的。rust復雜,很復雜,上手難,但是一旦你掌握,這將是一個很強大的武器。已經有公司放棄golang轉向rust的。但是這個語言的致命缺陷就是復雜,我們已經有一個復雜的C++了,他啥都能幹,還要一個rust做什麼?當然,我不能把rust拍死,畢竟這門語言的牛逼程度時比較逼近C++的。不過我高度懷疑其會較好不叫座。
稍小一點規模的,無法接受面向對象的程序員,有不少用C的。雖然OOP程序員看他們像是不開化的人,但是他們有他們的哲學(我從嵌入式開發過來,相當長時間內也擺脫不了C,總本能的排斥OOP),但是如果讀者是一個nginx或者其他的c底層基礎設施絕對會對oop嗤之以鼻,內核的編程範式已經給c下了一個什麼叫對什麼叫錯的定義了。由於內核作為標桿,大家竟然同步的統一了編程風格。不用商量。nginx給那些歧視c的人上了生動的一課,現在哪一個互聯網公司能離開nginx?
曾經很多人用Pascal(包括擴展的Delphi),曾經很多人用Fortran,但是都明顯在退步。大型通用語言(C++、Java、C#)表明了他們在各種環境的適應能力。lisp系列也在一些問題上展現出古老的魅力。(但這個語言遠沒有《黑客與畫家》的作者給我們描述的那樣神奇,個人認為。不過我的C++風格思想佔了主導,可能沒辦法公正的評價lisp,但是據我的使用lisp經驗,在大部分情況下,我最後還是放棄了它。因為大部分情況下我總能找到用C++(或其他OOP語言)更好的原因)
另外,讀研的一般都用過matlab。這個工具,兩個字:強大!不過僅指科學計算方面。脫離了這個方面,就得考慮合不合適了,畢竟固定的矩陣思維不是啥情況都有效的。我用matlab最多的是神經網路,圖片和信號處理。毫不誇張的說,matlab活脫脫一個photoshop啊。。。(當然,你得會用。。。)不過matlab的神經網路確實不行,做的太差了,小規模的網路可以,3層不用BP的F網,幾十個就掛掉了。有這個需求的用ANN吧。(還是C++,偷笑)
首選利器是Perl,不過如果你習慣了sed、awk、grep,也能很方便的完成相同的功能,但perl是吸收三家所長做的。
其次是C++,別拍我。諸位用過regex嗎?就是boost里的那個,最近被並入C++11啦。有了正則表達式的C++,處理字元,無敵了很多哇。當然,Java程序員別拍我,我知道這種庫一個大型的通用語言都會有。我提C++,一般順帶著不否定Java和C#能以相似的代價完成相同的功能。
首選是python。倆字:精簡(呀,這么說一個強大的語言有點太輕浮了,但比起ruby,確實簡單吶。。。)(另外Boo在.net是可以用來取代python)
『捌』 我想學習編程,但是不知道該怎麼開始。
我建議最好是從基礎入手,而不是一開始就進行可視化編程。雖然如今國內絕大多數pc都是使用的windows,但是畢竟這知識這個世界的冰山一角。扎實的基礎自然會更有用處。編程其實重要的是程序思維,然後是演算法和數據結構。這些都是超出語言的,就是說不管是學c學java學delphi還是別的什麼,這一部分都是一致的。因此培養這部分的知識可以說是一本萬利的事情。初學肯定是通過語言熟悉思想熟悉演算法和數據結構,到一定的時候就是純粹的思想和演算法數據結構的學習,便已經脫離程序語言了。經歷過這些階段,換一種語言不過是重新了解一下描述的方式,就像你了解了中文思維,山東話和四川話的差別就不會太大;了解了拉丁語的思維,整個語系的語言都不過是簡簡單單的記憶工作,應用就好。入門的語言,理論上是怎麼方便學哪個,看那個順眼學哪個。當然這裡面還是有不同的推薦的。一般來說我比較推薦pascal、c/c++、java。並不是因為這三個東西很通用很有前途,而是它們實在是嚴整而有規則(c/c++還顯得稍微的寬鬆了一點),而嚴謹的語法要求和明確的概念區分是有利於編程思維的形成和演算法數據結構的學習的。同樣的因為這個理由我不推薦vb,而並不是因為它功能不強大(事實上vb在windows環境中是相當牛的語言)另外一個建議是,如果學c,不要一開始就用vc。ms提供的很多東西很方便,有很多很簡單的實現方法,但是它們不標准。vc與ansi
c標準是有很大的差距的。首先一個不遵循標準的c/c++程序是不通用的,換個編譯器說不定就不被承認了。所以我非常推崇gcc,理由之一是它完全符合
ansi
c標准,無論它的c還是c++編譯器都很嚴整,功能上一點也不缺乏(有人說gcc不能做圖形界面的程序,這一點完全錯誤,到處都有的qt庫和gtk庫都能做出很好的界面),另外一個理由便是它免費,畢竟稍微大一點的軟體企業就不會屈從與微軟的編譯器和平台,而一個免費的c編譯器無疑可以創造更多的利益;就算要轉vc,標準的c程序也是幾乎不要作任何改動的。當然,這一切的前提是,你真的很想很好的學編程,做一個這方面的精英。如果只不過是興趣,或者只是想拿一個ms的工程師認證然後在國內企業找份諸如設計vf、vb程序之類的工作,那完全可以忽略我上面的話,去找個認證培訓班,認認真真聽聽課,好好完成練習,從vb或者vc入手,考好認證是很不會太難的。畢竟現在很多很好的大學里都從來不缺乏計算機的課程,不會缺少演算法或者編譯原理的課程,不會沒有計算機科學的研究院,而那裡面出來的人一般都具備了很好的基礎知識,會更加容易成為前面所說的精英。