非計算機專業,計算機如何入門?

今年剛考上研,最近比較閑,老闆已布置任務,讓學編程。

研究生專業是金融,老闆主要做risk managemant 。

本人現在的水平只會office……其他的如spss,access,eviews上課學過,略懂,matlab在路上。

老闆的意思是要學會C,演算法,而且對演算法的要求挺高,我只有四個月,抓牆。

以我現在的情況,從哪裡開始?

在噹噹買書中,求推薦。

C目前手上有一本C++大學教程,電子工業出版社的。

其他的需要買哪些書邊學邊操作呢?

此外,目前機子上還沒有編程軟體,應該下哪些呢?

求列表推薦進階書籍和軟體。謝謝!


終於看到了一個自己會的問題了,首先說明,我也是個菜鳥,然後上次逛知乎時,看到了 @蕭井陌 的一個專欄,有一篇文章,《編程入門》.....最近閑的蛋疼,就按照上面的內容畫了張思維導圖,當然,也加入了自己的一些東西........................希望沒有侵權吧.........

先附上原文的鏈接 編程入門指南 v1.2 - 蕭井陌的專欄 - 知乎專欄

下面是圖,希望對你有幫助啊

...........................................................................................................................................................


哈佛的計算機入門:Free Online Computer Science Course Featuring Harvard Faculty

Udacity的:Intro to Computer Science Class Online (CS101)

斯坦福的:Stanford School of Engineering

Oracle的:Oracle Academy Introduction to Computer Science

英文需要幫助的話有愛詞霸,有道詞典,扇貝網等等等等。。。還通常有一大堆過了四六級的師兄師姐親戚朋友。。。

或者百度「計算機導論 清華/ 北大。。等等」

又或者最牛逼就是這種神功了——葵花寶典:

需要詞典的話老俞的紅寶永遠默默在新華書店等著你。。。

學習愉快:


你老闆的要求是不可能的。C/C++是非常麻煩的語言,C++又是特別麻煩的那種。對於沒有編程基礎的人,四個月勉強能掌握語言特性(其實都懸)。

你最好從Python、R一類的語言入門。


2015年3月3日 更新

更新了《提問的智慧》網站地址。之前的打不開了。

現在已經在我的One Piece的路上,在這兒,有許多許多的小夥伴,我們志同道合,臭味相投。每天都過得非常的開心!

謝謝大家!

======================

題主你好,逛知乎已經有幾個月了,終於有機會回饋社區了:)

我是一個計算機專業的大三學生,馬上就要去找實習單位開始尋找我的one piece.

對於題主的問題,我覺得有點大了,這個問題就好像我問一個學習金融的人這樣一個問題:對於非金融專業的學生,怎麼入門金融學?

OK,我先說說我對計算機的理解吧,因為我覺得這對學習計算機比較有好處。

我所認為計算機是什麼呢? 他是一種輔助設備,能夠拓展人類的能力。能夠輕易完成人類很難做到和很費時間和精力才能做到的事情。

Okey,理解說完了,開始乾貨:

計算機分為硬體和軟體,硬體就是你看得見摸得著的,軟體是你看得見摸不著的。介於題主是想說入門,我就不推薦計算機有關硬體的東西了,我主要推薦的是軟體的方向。

通常對於計算機專業的人來說,了解計算機的硬體組成是非常有必要的。因為這不單單只是告訴你現象,還告訴你的本質。

學習計算機的軟體(還有硬體):首先,你要看一本叫《計算機科學技術導論》的書(事實上不管你專攻硬體還是軟體,這本書看看絕對沒錯),這本書包含了很多的基礎內容,

比如2進位(「計算機世界」的語言,計算機非常笨,哦,也就是cpu非常笨,只能明白01010101,其他的統統不知道),

計算機硬體的組成(運算器,控制器,存儲器,輸入輸出設備),

彙編語言(因為010101對於人類來說過於麻煩和難以理解,所以就把一段010101用幾個字母定義,例如「mov」),

然後就是c語言,一些很懶的使用彙編語言的程序員覺得彙編語言還是不夠方便,所以就發明了高級語言---c語言。(可以看出來計算機的發展史真的是一群很懶的人的奮鬥史:),我希望有幸成為他們其中的一員。)

當然,裡面還說了很多其他的東西。

看完了《計算機科學技術導論》以後,好吧,這是開胃菜,正菜開始上桌了。

C++ 。推薦書目:《C++ primer》 ,C++是一門計算機高級語言,計算機語言是拿來幹什麼的呢?就是和計算機交流的,你看,你和英國人說話要說英語,要和廣東人說粵語,要和荷蘭人說荷蘭語。一樣的道理。隨著「hello world」在那個黑黑的界面中顯示出來的時候,你甚至會懷疑:這TM就是編程?!

哦,這只不過是萬里長征中的第一步。後面還有好多有趣的東西呢。

你要開始了解什麼是變數,什麼是常量,什麼是循環,什麼是,什麼是判斷語句,什麼是繼承,等等等等。

如果你學習完了語法部分(就是上述說的),那麼,恭喜你,基本上已經可以和別人說:我學過編程了。

好嘞,開始下一步:

因為題主的研究生是金融的,而且boss是做risk management的,那麼演算法就是必不可少的了。

《演算法藝術及信息學競賽》 這本書還不錯,介紹了一些基本的演算法(當然裡面不會告訴你怎麼進行風險管理,那是金融專業的事)。我只是粗略的過了一遍,所以就不獻醜了。不過研究演算法感覺就像在原始叢林裡面爬山,一般人進去就跪了,有了大量的經驗以後才能生還。

《數據結構》 ,在計算機科學或信息科學中,數據結構(英語:data structure)是計算機中存儲、組織數據的方式。通常情況下,精心選擇的數據結構可以帶來最優效率的演算法。(來自維基百科),這是修鍊的內功心法之一。

《操作系統》,了解了操作系統的原理以後,才能更好的操作我們正在使用的系統。屬於中級的課程吧。

《編譯原理》, 如果說計算機語言是魔法咒語的話,編譯原理就是告訴你,這些魔法咒語是怎麼生效的

《計算機組成原理》 哦,這個非常有趣,和操作系統有很大關係,但是這個是從硬體的層次上面(大部分來說)來解釋計算機的組成

《軟體工程》 估計題主暫時看不到這裡的了,什麼是軟體工程呢?我的理解就是,把寫軟體規範化。形成一種規範以後好處就不言而喻了。

實話說,在學習的過程中會出現很多問題:

比如說語言選擇的問題,你會聽說JAVA無所不能,C#簡單方便,python優雅至極,php開發速度快到帶你飛。

我個人覺得,語言不是重點,語言只是個工具而已,重要的是人,就好像我們都會寫中文,為啥俺和莫言的差距咋就這麼大呢!

個人建議是:發揮各個語言的優勢,在不同的情況使用不同的語言。

比如說:

1.想要開發個簡單的網站,PHP是不二的選擇(你可以想像用C++寫網站的「快感」么?)

2.windows下的程序,C#絕對是王道,還有比微軟自家的東西更懂自己的么?

3.android開發,平台的限制,最好還是用JAVA。

4.考慮到性能問題,如果你是個大神(那是不可能的,如果這樣你就不會問怎麼入門了)那絕對會使用到C++,對於一般的凡人,JAVA的回收機制以及夠用了。

如果你想要買書,個人覺得最好不要買國人寫的,因為國內大部分都是你抄我我抄你的節奏,最好買國外的書。圖靈系列的我覺得不錯。

我個人覺得,學習計算機並不神秘和複雜,甚至有些可怕的簡單,有付出,就一定有回報。因為計算機的嚴謹性,他永遠不會出錯,你給出了正確的方法,就會得到正確的結果。

這裡推薦題主一個小網站,名字叫做提問的智慧:

http://www.beiww.com/doc/oss/smart-questions.html

在計算機世界,只要你會提問,就會有答案。

Best Wishes


凡是讓你打基礎的,都是站著說話不腰疼 非計算機專業學生怎麼走上計算機技術之路?


從數學系轉到計算機讀研的來回答一個,希望幫助lz快速上手,避免踩坑。

先說結論,不推薦c語言,除非你的實驗室有很多代碼之前是用c寫的,需要你去接管它們。首推Python因為簡單,或者lz也可以試試OCaml,因為金融業用的也不少.

lz研究生專業是金融,而非計算機,那麼主要需要編程的地方應該是數據分析。lz說只有四個月,應該是指初期拿來學習編程的時間吧,四個月之後應該就要上手實際的研究或者項目了。這種情況下,不推薦學習c/c++,除非你的導師師兄已經有了大量的c/c++代碼,你需要接管這些代碼。c/c++的入門時間是比較長的,對於非計算機專業出身的同學,四個月想要做實際的開發還是比較困難的。在此我推薦兩種選項給lz,這兩種語言上手速度比c快,而且更容易做金融數據分析

1. Python. Python的主要優勢是簡單,不需要考慮既然機硬體,可以專註於演算法。lz可以用兩三周熟悉python的基本語法,然後熟悉一下矩陣運算包numpy,再買本書或者到網上學習一下專門做數據分析的包pandas,再看看簡單的機器學習,用用scipy和scikit-learn,lz就可以上路啦。這些內容四個月完全足夠。lz可以去http://continuum.io 上下載anaconda,上面提到的軟體都包含在裡面了。然後在http://python.org 上可以找到python教程。在numpu pandas scipy scikit-learn各自的官網上都能找到對應的教程。

2. 如果lz對自己的數學和演算法能力有一定信心,可以試試學習OCaml這門語言。OCaml在金融業被不少人採用,最著名的就是量化投資公司Jane Street啦,Bloomberg也用OCaml做風險管理。OCaml是一門函數式編程語言,比Python上手困難一點,但表達能力很強大,代碼通常非常簡潔,而且運行速度接近c語言,某些場景甚至比c還快。至於如何學習OCaml,可以去官方網站https://ocaml.org 下載編程軟體和教程,上面有很完善的學習資料。


好久沒有寫知乎回答了,本篇回答就說說本人的學習代碼之路吧。

首先說說我本人的情況:
我是一個完全非計算機專業的學生,如果非個人選擇的話,我的一生都可以不用跟計算機語言打交道。然而我打交道了,因為我喜歡計算機,喜歡享受擼代碼的樂趣。所以,現在我接觸的語言還算多吧。從小學6年級到初二的期間,當時是有一台步步高的電子詞典,就擼起了RBG代碼,一種還算簡單的代碼,然後初二看了大半本的大學C語言的教材。之後擱置了很久,到了大學,才重新學起了計算機的東西。大一上課是有教C語言,不過這個時候已經覺得不難。大二暑假是因為要處理大量數據,要用到excel的宏處理,自學了VB,還有MatLab,然後大三上學期學了C++,並通過了全國二級的考試。大三寒假參加了網路的培訓,學習了網路的很多原理,因為覺得比較重要又自學了Linux和Python。之後實習是做了.Net的開發,開始自學了C#,JavaScript,Html。

接下來說說本人覺得可行的語言學習之路
=======第一階段,剛入門========
剛入門的時候,我的建議是看C的前面基礎部分,因為這個時候最重要的是學到編程的基本思維。基本的邏輯概念。如:
1,數據類型:像void,int,string,float等等。
2,數據的運算:加減乘除的寫法,i++和++i 的區別等等。
3,邏輯:像if 判斷,do, while, for 循環等。
4,整體概念:不同函數的調用 def(),遞歸等。
像這些,其實,看哪本書都差不多,而C這本書會寫得比較詳細吧,C++,C#對這些也不太多講,因為每個語言的側重不一樣,而看C對於以上四個點能夠了解得比較充分。另外要提醒的是,如果看C的時候,看到指針之類的其實可以先放一放,涉及到內存,佔用空間這些都是比較深入底層了,以後不一定會用到呢。

=======第二階段,牛刀小試========
牛刀小試我建議是學VBs , Python ,Html + CSS + php
這個時候可以開始試著寫自己的代碼,實現自己的需求了。所以這個階段最重要的是——反饋。你寫的東西的效果要立馬呈現出來,這樣你就能在不斷地嘗試中不斷進步,不斷地知道,原來要這樣呀,這樣進步是最快的,又不會感覺到枯燥,滅了興緻。
1,學會搭環境:比如python的環境,path系統變數等。
2,對文本的處理:Excel用宏處理VBS寫,自動處理表格內容。用python也寫寫處理txt文件文字。
3,搭簡單的界面:用VB就行啦,並能夠寫些彈出窗口。
4,做一些簡單的網頁,當然就是用Html+Css+php啦,不用一個星期就能做出成果來了。
5,學一學正則表達式咯
這個時候能處理文件是一件很高興的事,能用宏處理那簡直已經是對工作效率有很大的提升了。這裡建議也學是因為python難度其實是跟vbs差不多的啦,因為我當時寫vbs也遇到無數的坑,所以要論學一個代碼的艱難的話,python其實還是跟vbs並肩的。但是Python的擴展性更高,學python能實現你以後更多的需求。

======第三階段,小型應用程序=======
這個時候建議是開始學」Class類「,建議是看C++及C#的書。
面向對象,是一個飛躍,真的是一種思維的轉變。所以我學的時候也是感覺難度挺大的。學會了這個,就可以用C#寫一些簡單的小程序。
1,學習類相關的概念,比如公有成員,私有成員,繼承,派生,多態,父類,子類等等。
2,用小的有界面的程序,用VS2013,下載大量的C#代碼源碼,看一看,基本就懂了。像我寫了個《績點統計工具》。

========第四階段,學習框架=========
框架啊框架,就是別人封裝好了,你在別人的框架上面開發你自己的東西。
這個部分嘛,我只接觸MVC框架,和前端框架Ext JS,jQuery
這個部分要學的話我建議可以用VS,直接新建一個MVC框架的Project,然後你就會看到這個是http://ASP.Net的用來做動態網頁的程序。然後開始學習這個框架是怎麼用的咯。

========第五階段,數據交互==========
數據交互的話,就是像ajax,XML,Json,以及跟資料庫交互的方法。

========第六階段,深入底層=========
涉及的是C,C++,Linux等等。
這一部分開始對數據類型控制,演算法(時間複雜度,空間複雜度)有需求。
如果不是實際需求,其實也不會到了這一步啦。要學到深入底層一般就已經是想要專門做開發或是做嵌入式的程序員。

老實說,我也只是走到這一步,正在學演算法,所以我沒辦法往下碼字了,嘿嘿嘿。各位觀眾大佬爺,如果以上說得有如有不妥,請批評指正吶。


我和題主正好相反,是計算機科班出身,現在是從事金融方面工作。

我估計你老闆是要你掌握C和基本的數據結構與演算法,因此我就根據自己學習的經驗,給你推薦兩本書就可以了。至於計算機其他方面的內容,按照你的題目描述,也沒必要花時間去了解,畢竟用到再學吧。

1 C語言

http://www.amazon.cn/Essential-C-中文版-李普曼/dp/B00E19SLYI/ref=sr_1_2?ie=UTF8qid=1431923374sr=8-2keywords=essential+c

如果你關注C,並且可能用到C++, 這是最好的入門教程了。

2 演算法與數據結構

演算法的門類實在太多,如果要說演算法,通常我們指的是排序,樹和圖的演算法,這些是演算法的基礎。

仔細看看,特別是排序和樹部分,是數據結構中最重要的部分。

《數據結構與演算法分析:C語言描述(原書第2版)》 維斯, 馮舜璽【摘要 書評 試讀】圖書


既然要求是C
以及演算法 ,那麼其實從底層學起才是最好的選擇,畢竟你要知道怎樣的東西才是能用計算機算的。具體如下:

Yale N.Patt的《計算機系統概論(第2版)》:講解了底層、彙編、C

Eric S.Roberts的《C程序設計的抽象思維》:介紹了C、數據結構、演算法以及如何把它們組織為程序

演算法再深入的話,看《演算法導論(第3版)》

我同樣是非科班,學這個純興趣,無人指導,彎路不少,自信上述是最適合自學的路了。


我猜你是想寫代碼. 點擊圖片看大圖. 如果看不懂就先去學英語, 參考樓上說的紅寶書(我沒看過紅寶書).


很多大學用 《計算機概論》(http://book.douban.com/subject/4027938/)這本書作為大一學生的入門課,內容還算簡單,推薦一下,不過不會涉及到具體的編程問題.

還有一本書也是很多知名大學用來給大一學生入門的書籍《計算機程序的構造和解釋&>(http://book.douban.com/subject/1148282/),裡面涉及到了具體的編程知識,使用scheme,雖然是本好書,不過不推薦國內沒有基礎的完全新手


python吧,功能強大,不僅如此,基本matlab能實現的,它利用一些庫也能實現。python,入門就看python簡明教程,要熟悉python語法就做些euler上的題目(20道左右差不多了),進階就靠官方手冊,還有各種各樣的第三方庫。


反對WenRou的答案,我覺得很多對計算機感興趣的人,看完導論和c++ primer只會感嘆一生:"計算機果然是geek才能掌握的東西啊." 然後就下定決心搞好原專業了。
建議題主先看一下老闆是不是懂編程,是不是只聽過c才要你學c,問一下要你學c做什麼,再問一下專業人士的意見,決定學什麼。


網易雲課堂 翁愷的c語言教程 和浙大的數據結構 另外隨便找個oj不斷敲就行 一個字 就是干!


通過你的描述,我覺得根據你的需要沒有必要系統的了解計算機原理,基本演算法的東西,matlab用好就足夠了。學好matlab語言,掌握金融處理的工具箱,至於演算法,應該從你關注的方向相關論文入手。因為你的專業相當於是對計算機技術的應用,由於分工的存在計算機底層的原理,讓計算機專業的人探索好了,我覺得對於DMA,流水線的掌握不會使你的分析結果有任何影響。此外,由於你研究領域的專業性,基本的演算法肯定也是無能為力的,而參考相關領域前沿的論文, 理解他們用的演算法,則是你需要做的。我不知道你的老闆為什麼讓你學C,如果只用作分析計算,C語言顯然沒有matlab更順手,如果你老闆想對某個金融分析軟體進行二次開發,或者要開發一個獨立的金融分析軟體包,C倒是有用處。


去上脫產培訓班吧。

每天白天認真聽課,晚上回去反覆反覆再反覆練習。效果顯著。

有人帶著學一般情況下還是比自學快的。

從你考上研到入學期間差不多也快半年。剛剛好。


圍觀了前排大大們的回答之後感覺很震撼,原來計算機要學的東西這麼多。不過題主是考上研究生導師要求學習相關知識的,我想應該是為研究生階段做研究提供編程基礎就好,而不是要從事計算機專業的工作。很多研究生在研究的時候會有一些數據處理的過程,多多少少都會用到C、Python或者MATLAB等編程語言。我也是商學院研究生一枚,給題主分享一下我的計算機入門感受以及一些建議,希望也能幫到有類似需求的小夥伴吧。

1.計算機基礎知識

考慮到題主說自己現在的水平只有Office,所以還是推薦一本關於計算機基礎知識的書籍。中國水利水電出版社的《計算機科學技術導論》,學習這本書主要是了解一下計算機學科的體系框架,不過切記不要深究其中的內容,重點看第一章計算機運算基礎和程序設計基礎就好。因為這本書是面向計算機相關專業學生的教材,對於我們來說想要搞懂操作系統、處理器、內存管理這些知識真的是很難的。短時間內根本搞不定的。

2.一種編程語言

題主學C的話,我推薦教材《C語言編程:一本全面的C語言入門教程》。這本書內容很完整,而且由淺入深,示例又豐富,很適合基礎薄弱的自學者使用。需要注意的是,在學習過程中,題主要跟著書上的操作一步步的來,從安全環境到寫出第一個「hello world」到後面簡單的排序。這一部分,我覺得了解C語言的主要開發過程,C語言的語法以及編程中要注意的一些特性就好了。有什麼不懂的可以在網上搜索答案或者請教身邊的大神解答,但是不要自己鑽牛角尖,實在不能理解就先記住,以後再實際情境中再去理解。其實很多計算機專業的人,也不是對這些概念都很懂的。

3.數據結構與演算法

學完C語言基礎之後,想必已經能解決一些基本的編程問題了。題主可以試著去做書上提供的編程練習題,如果基本能夠自己做出來的話那學習效果已經很棒了。不過我估計是那種理解得比較慢的,我當時學完C語言最重要的感受就是:我能夠通過計算機二級考試了,但是我還是不會自己寫程序解決問題。

於是我在知乎上看了大量的相關回答,我決定去學習一下數據結構與演算法的相關知識。我用的是《劍指 offer》,這本書講了5個方面:1.數據結構與演算法;2.如何寫出高質量的代碼;3.如何解決複雜問題;4.如何優化代碼;5.面試中的軟技能。這本書每章後面都有很多數據結構與演算法的題目,可以一邊看書一邊把《劍指 offer》上的題目做一遍。

有了數據結構的基礎我再去學習演算法就簡單多了。但是這個這個階段花幾天的時間搞清楚演算法到底是什麼之後,我覺得題主可以暫時放下書本了。假設完全看四個月的書,研究生開學之後你可能還是無法完成導師教給你的任務。因為你沒有鍛煉自己運用程序處理問題的思考能力。畢竟咱們不是計算機專業的,最重要的是會應用。所以題主可以去LintCode上找一些演算法題,如背包問題、二叉樹等等可能以後要用到的演算法,先自己動手實現一下,然後參考LINTCODE 答案查詢的正確答案進行修改。

四個月的時間挺緊張的,不過也來得及。一起加油!


這個問題我應該有發言權。

高中文科,94年某理工類高校貿易經濟專業,文理兼收的,98年畢業。

畢業後在一國企工作期間,時間寬鬆,2000年前後,過了CCNA和MCSE,單位還給報了費用,其中MCSE後三門沒有參加培訓,為給單位減輕負擔自學的。

後來一同事說這些商業認證只是名字好聽,其實含金量不行的,說她在NJ工作的哥哥是科班,而且過了高程(那時候的軟考分四個級別)。甚是不忿,再加上當時有個軟體工程專家網(好象後來的希賽與它有很密切的關係),有時會去逛逛,裡面有幾個過了系分的十分囂張。反正閑也是閑著,開始轉向軟考,後來也算是打通關了。當然,最後的目的有所轉變,可能只是為了混個高級職稱吧。

所以我將自己定位成票友應該是合適的。對於樓主的問題,我認為樓主學金融的,又能考上研,數學應該可以。所以對於學一些計算機知識用於解決本專業上問題,你的基礎是足夠的。但是你的老闆讓你去學C,其實不是很必要。我想你本科時應該學過至少兩門計算機方面的課,一門是講編程的,我們94年那會是BASIC,會介紹一基本的演算法。另一門是綜合一點的,亂七八糟的什麼都講一點,我們那會是DOS和DBASE3。其實這個課程設置在今天看來也還是很好的,對於非計算機專業的人來講,熟練使用一種操作系統,熟悉一種資料庫,再掌握一門高級語言就足夠了。學C的作用一是可以做出效率更高,與底層更接近的軟體,但是這種需求在今天已經少了很多,而且也有專人在做。另一個作用就是幫助你更加深入地理解計算機,但是我覺得對於非專業人員,這個不是很必要,因為人的時間是有限的,除非你有很多空閑時間而且有相關愛好。封裝與透明大大減輕了用戶的負擔,用戶的主要精力應關注自身的業務。一個麵包師沒有必要為了烤出更好的麵包而去研究如何種出更好的小麥。


零基礎4個月學會C/C++還有高要求演算法?這個不太可能……裝個vc++6.0,現在的書大部分都是用這個調試


編程

這是每個遊戲編程FAQ里都有的問題。這個問題每星期都會在遊戲開發論壇上被問上好幾次。這是個很好的問題,但是,沒人能給出簡單的答案。在某些應用程序中,總有一些計算機語言優於其他語言。下面是幾種用於編寫遊戲的主要編程語言的介紹及其優缺點。希望這篇文章能幫助你做出決定。

1、C語言

如果說FORTRAN和COBOL是第一代高級編譯語言,那麼C語言就是它們的孫子輩。C語言是Dennis Ritchie在七十年代創建的,它功能更強大且與ALGOL保持更連續的繼承性,而ALGOL則是COBOL和FORTRAN的結構化繼承者。C語言被設計成一個比它的前輩更精巧、更簡單的版本,它適於編寫系統級的程序,比如操作系統。在此之前,操作系統是使用彙編語言編寫的,而且不可移植。C語言是第一個使得系統級代碼移植成為可能的編程語言。

C語言支持結構化編程,也就是說C的程序被編寫成一些分離的函數呼叫(調用)的集合,這些呼叫是自上而下運行,而不像一個單獨的集成塊的代碼使用GOTO語句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的「空心粉式代碼」代碼要簡單得多。事實上,C仍然具有GOTO語句,不過它的功能被限制了,僅當結構化方案非常複雜時才建議使用。

正由於它的系統編程根源,將C和彙編語言進行結合是相當容易的。函數調用介面非常簡單,而且彙編語言指令還能內嵌到C代碼中,所以,不需要連接獨立的彙編模塊。

優點:有益於編寫小而快的程序。很容易與彙編語言結合。具有很高的標準化,因此其他平台上的各版本非常相似。

缺點:不容易支持面向對象技術。語法有時會非常難以理解,並造成濫用。

移植性:C語言的核心以及ANSI函數調用都具有移植性,但僅限於流程式控制制、內存管理和簡單的文件處理。其他的東西都跟平台有關。比如說,為Windows和Mac開發可移植的程序,用戶界面部分就需要用到與系統相關的函數調用。這一般意味著你必須寫兩次用戶界面代碼,不過還好有一些庫可以減輕工作量。

用C語言編寫的遊戲:非常非常多。

資料:C語言的經典著作是《The C Programming Language》,它經過多次修改,已經擴展到最初的三倍大,但它仍然是介紹C的優秀書本。一本極好的教程是《The Waite
Group"s C Primer Plus》。

2、C++

C++語言是具有面向對象特性的C語言的繼承者。面向對象編程,或稱OOP是結構化編程的下一步。OO程序由對象組成,其中的對象是數據和函數離散集合。有許多可用的對象庫存在,這使得編程簡單得只需要將一些程序「建築材料」堆在一起(至少理論上是這樣)。比如說,有很多的GUI和資料庫的庫實現為對象的集合。

C++總是辯論的主題,尤其是在遊戲開發論壇里。有幾項C++的功能,比如虛擬函數,為函數呼叫的決策制定增加了一個額外層次,批評家很快指出C++程序將變得比相同功能的C程序來得大和慢。C++的擁護者則認為,用C寫出與虛擬函數等價的代碼同樣會增加開支。這將是一個還在進行,而且不可能很快得出結論的爭論。

我認為,C++的額外開支只是使用更好的語言的小付出。同樣的爭論發生在六十年代高級程序語言如COBOL和FORTRAN開始取代彙編成為語言所選的時候。批評家正確的指出使用高級語言編寫的程序天生就比手寫的彙編語言來得慢,而且必然如此。而高級語言支持者認為這麼點小小的性能損失是值得的,因為COBOL和FORTRAN程序更容易編寫和維護。

優點:組織大型程序時比C語言好得多。很好的支持面向對象機制。通用數據結構,如鏈表和可增長的陣列組成的庫減輕了由於處理低層細節的負擔。

缺點:非常大而複雜。與C語言一樣存在語法濫用問題。比C慢。大多數編譯器沒有把整個語言正確的實現。

移植性:比C語言好多了,但依然不是很樂觀。因為它具有與C語言相同的缺點,大多數可移植性用戶界面庫都使用C++對象實現。

使用C++編寫的遊戲:非常非常多。大多數的商業遊戲是使用C或C++編寫的。

資料:最新版的《The C++
Programming Language》非常好。作為教程,有兩個陣營,一個假定你知道C,另外一個假定你不知道。到目前為止,最好的C++教程是《Who"s Afraid of C++》,如果你已經熟知C,那麼試一下《Teach Yourself C++》。

3、我該學習C++或是該從C開始

我不喜歡這種說法,但它是繼「我該使用哪門語言」之後最經常被問及的問題。很不幸,不存在標準答案。你可以自學C並使用它來寫程序,從而節省一大堆的時間,不過使用這種方法有兩個弊端:

你將錯過那些面向對象的知識,因為它可能在你的遊戲中使得數據建模更有效率的東西。

最大的商業遊戲,包括第一人稱射擊遊戲很多並沒有使用C++。但是,這些程序的作者即使使用老的C的格式,他們通常堅持使用面向對象編程技術。如果你只想學C,至少要自學OO(面向對象)編程技術。OO是模擬(遊戲)的完美方法,如果你不學習OO,你將不得不「辛苦」的工作。

4、彙編語言

顯然,彙編是第一個計算機語言。彙編語言實際上是你計算機處理器實際運行的指令的命令形式表示法。這意味著你將與處理器的底層打交道,比如寄存器和堆棧。如果你要找的是類英語且有相關的自我說明的語言,這不是你想要的。

確切的說,任何你能在其他語言里做到的事情,彙編都能做,只是不那麼簡單 —
這是當然,就像說你既可以開車到某個地方,也可以走路去,只是難易之分。話雖不錯,但是新技術讓東西變得更易於使用。

總的來說,彙編語言不會在遊戲中單獨應用。遊戲使用彙編主要是使用它那些能提高性能的零零碎碎的部分。比如說,毀滅戰士整體使用C來編寫,有幾段繪圖程序使用彙編。這些程序每秒鐘要調用數千次,因此,儘可能的簡潔將有助於提高遊戲的性能。而從C里調用彙編寫的函數是相當簡單的,因此同時使用兩種語言不成問題。

特別注意:語言的名字叫「彙編」。把彙編語言翻譯成真實的機器碼的工具叫「彙編程序」。把這門語言叫做「彙編程序」這種用詞不當相當普遍,因此,請從這門語言的正確稱呼作為起點出發。

優點:最小、最快的語言。彙編高手能編寫出比任何其他語言能實現的快得多的程序。你將是利用處理器最新功能的第一人,因為你能直接使用它們。

缺點:難學、語法晦澀、堅持效率,造成大量額外代碼 —
不適於心臟虛弱者。

移植性:接近零。因為這門語言是為一種單獨的處理器設計的,根本沒移植性可言。如果使用了某個特殊處理器的擴展功能,你的代碼甚至無法移植到其他同類型的處理器上(比如,AMD的3DNow指令是無法移植到其它奔騰系列的處理器上的)。

使用彙編編寫的遊戲:我不知道有什麼商業遊戲是完全用彙編開發的。不過有些遊戲使用彙編完成多數對時間要求苛刻的部分。

資料:如果你正在找一門彙編語言的文檔,你主要要找晶元的文檔。網路上如Intel、AMD、Motorola等有一些關於它們的處理器的資料。對於書籍而言,《Assembly Language: Step-By-Step》是很值得學習的。

5、Pascal語言

Pascal語言是由Nicolas Wirth在七十年代早期設計的,因為他對於FORTRAN和COBOL沒有強制訓練學生的結構化編程感到很失望,「空心粉式代碼」變成了規範,而當時的語言又不反對它。Pascal被設計來強行使用結構化編程。最初的Pascal被嚴格設計成教學之用,最終,大量的擁護者促使它闖入了商業編程中。當Borland發布IBM PC上的 Turbo Pascal時,Pascal輝煌一時。集成的編輯器,閃電般的編譯器加上低廉的價格使之變得不可抵抗,Pascal編程了為MS-DOS編寫小程序的首選語言。

然而時日不久,C編譯器變得更快,並具有優秀的內置編輯器和調試器。Pascal在1990年Windows開始流行時走到了盡頭,Borland放棄了Pascal而把目光轉向了為Windows 編寫程序的C++。Turbo Pascal很快被人遺忘。

最後,在1996年,Borland發布了它的「Visual
Basic殺手」— Delphi。它是一種快速的帶華麗用戶界面的 Pascal編譯器。由於不懈努力,它很快贏得了一大群愛好者。

基本上,Pascal比C簡單。雖然語法類似,它缺乏很多C有的簡潔操作符。這既是好事又是壞事。雖然很難寫出難以理解的「聰明」代碼,它同時也使得一些低級操作,如位操作變得困難起來。

優點:易學、平台相關的運行(Delphi)非常好。

缺點:「世界潮流」面向對象的Pascal繼承者(Modula、Oberon)尚未成功。語言標準不被編譯器開發者認同。專利權。

移植性:很差。語言的功能由於平台的轉變而轉變,沒有移植性工具包來處理平台相關的功能。

使用Pascal編寫的遊戲:幾個。DirectX的Delphi組件使得遊戲場所變大了。

資料:查找跟Delphi有關的資料,請訪問:Inprise Delphi page。

6、Visual Basic

哈,BASIC。回到八十年代的石器時代,它是程序初學者的第一個語言。最初的BASIC形式,雖然易於學習,卻是可怕的無組織化,它義無反顧的使用了GOTO充斥的「空心粉式代碼」。當回憶起BASIC的行號和GOSUB命令,沒有幾個人能止住眼角的淚水。

快速前進到九十年代早期,雖然不是蘋果公司所希望的巨人,HyperCard仍然是一個在Windows下無法比擬的吸引人的小型編程環境。Windows下的HyperCard克隆品如ToolBook又慢又笨又昂貴。為了與HyperCard一決高下,微軟取得了一個小巧的名為Thunder編程環境的許可權,並把它作為Visual
Basci 1.0發布,其用戶界面在當時非常具有新意。這門語言雖然還叫做Basic(不再是全部大寫),但更加結構化了,行號也被去除。實際上,這門語言與那些內置於TRS-80、Apple II及Atari里的舊的ROM BASIC相比,更像是帶Basic風格動詞的Pascal。

經過六個版本,Visual Basic變得非常漂亮。用戶界面發生了許多變化,但依然保留著「把代碼關聯到用戶界面」的主旨。這使得它在與即時編譯結合時變成了一個快速原型的優異環境。

優點:整潔的編輯環境。易學、即時編譯導致簡單、迅速的原型。大量可用的插件。雖然有第三方的DirectX插件,DirectX 7已準備提供Visual Basic的支持。

缺點:程序很大,而且運行時需要幾個巨大的運行時動態連接庫。雖然表單型和對話框型的程序很容易完成,要編寫好的圖形程序卻比較難。調用Windows的API程序非常笨拙,因為VB的數據結構沒能很好的映射到C中。有OO功能,但卻不是完全的面向對象。專利權。

移植性:非常差。因為Visual Basic是微軟的產品,你自然就被局限在他們實現它的平台上。也就是說,你能得到的選擇是:Windows,Windows或Widnows。當然,有一些工具能將VB程序轉變成Java。

使用Visual Basic編寫的遊戲:一些。有很多使用VB編寫的共享遊戲,還有一些是商業性的。

資料:微軟的VB頁面有一些信息。

7、Java

Java是由Sun最初設計用於嵌入程序的可移植性「小C++」。在網頁上運行小程序的想法著實吸引了不少人的目光,於是,這門語言迅速崛起。事實證明,Java不僅僅適於在網頁上內嵌動畫 — 它是一門極好的完全的軟體編程的小語言。「虛擬機」機制、垃圾回收以及沒有指針等使它很容易實現不易崩潰且不會泄漏資源的可靠程序。

雖然不是C++的正式續篇,Java從C++ 中借用了大量的語法。它丟棄了很多C++的複雜功能,從而形成一門緊湊而易學的語言。不像C++,Java強制面向對象編程,要在Java里寫非面向對象的程序就像要在Pascal里寫「空心粉式代碼」一樣困難。

優點:二進位碼可移植到其他平台。程序可以在網頁中運行。內含的類庫非常標準且極其健壯。自動分配合垃圾回收避免程序中資源泄漏。網上數量巨大的代碼常式。

缺點:使用一個「虛擬機」來運行可移植的位元組碼而非本地機器碼,程序將比真正編譯器慢。有很多技術(例如「即時」編譯器)很大的提高了Java的速度,不過速度永遠比不過機器碼方案。早期的功能,如AWT沒經過慎重考慮,雖然被正式廢除,但為了保持向後兼容不得不保留。越高級的技術,造成處理低級的機器功能越困難,Sun為這門語言增加新的「受祝福」功能的速度實在太慢。

移植性:最好的,但仍未達到它本應達到的水平。低級代碼具有非常高的可移植性,但是,很多UI及新功能在某些平台上不穩定。

使用Java編寫的遊戲:網頁上有大量小的Applet,但僅有一些是商業性的。有幾個商業遊戲使用Java作為內部腳本語言。

資料:Sun的官方Java頁面有一些好的信息。IBM也有一個非常好的Java頁面。JavaLobby是一個關於Java新聞的最好去處。

8、創作工具

上面所提及的編程語言涵蓋了大多數的商業遊戲。但是也有一個例外,這個大遊戲由於它的缺席而變得突出。

「神秘島」。沒錯,賣得最好的商業遊戲不是使用以上任何一門語言編的,雖然有人說「神秘島」99%是使用 3D建模工具製作的,其根本的編程邏輯是在HyperCard里完成的。

多數創作工具有點像Visual Basic,只是它們工作在更高的層次上。大多數工具使用一些拖拉式的流程圖來模擬流程式控制制。很多內置解釋的程序語言,但是這些語言都無法像上面所說的單獨的語言那樣健壯。

優點:快速原型 — 如果你的遊戲符合工具製作的主旨,你或許能使你的遊戲跑得比使用其他語言快。在很多情況下,你可以創造一個不需要任何代碼的簡單遊戲。使用插件程序,如Shockware及IconAuthor播放器,你可以在網頁上發布很多創作工具生成的程序。

缺點:專利權,至於將增加什麼功能,你將受到工具製造者的支配。你必須考慮這些工具是否能滿足你遊戲的需要,因為有很多事情是那些創作工具無法完成的。某些工具會產生臃腫得可怕的程序。

移植性:因為創作工具是具有專利權的,你的移植性以他們提供的功能息息相關。有些系統,如Director可以在幾種平台上創作和運行,有些工具則在某一平台上創作,在多種平台上運行,還有的是僅能在單一平台上創作和運行。

使用創作工具編寫的遊戲:「神秘島」和其他一些同類型的探險遊戲。所有的Shockwave遊戲都在網路上。

資料:Director、HyperCard、SuperCard、IconAuthor、Authorware。

9、易語言

全中文支持,無需跨越英語門檻。全可視化編程,支持所見即所得程序界面設計和程序流程編碼。中文語句快速錄入。提供多種內嵌專用輸入法,徹底解決中文語句輸入速度慢的問題。代碼即文檔。自動規範強制代碼格式轉換,任何人編寫的任何程序源代碼格式均統一。參數引導技術,方便程序語句參數錄入。無定義類關鍵字。所有程序定義部分均採用表格填表方式,用戶無需記憶此類關鍵字及其使用格式。命令格式統一。所有程序語句調用格式完全一致。語法格式自動檢查。自動檢查並提示所輸入語句的語法格式是否正確,且可自動添加各類名稱。全程提示與幫助。滑鼠停留立即顯示相關項目提示。編程時提示語法格式,調試時提示變數當前內容,隨時按下F1鍵可得到與當前主題相關詳細幫助等。名稱自動管理。用戶修改任一名稱定義,其它所有包含該名稱的程序代碼均自動修正。集成化開發環境。集界面設計、代碼編寫、調試分析、編譯打包等於一體。學習資源豐富。詳細的幫助文件、數十兆的知識庫、數萬用戶的網上論壇、教材已出版發行……

10、結論

你可能希望得到一個關於「我該使用哪種語言」這個問題的更標準的結論。非常不幸,沒有一個對所有應用程序都最佳的解決方案。C適於快而小的程序,但不支持面向對象的編程。C++完全支持面向對象,但是非常複雜。Visual Basic與Delphi易學,但不可移植且有專利權。Java有很多簡潔的功能,但是慢。創作工具可以以最快的速度產生你的程序,但是僅對某一些類型的程序起作用。最好的方法是決定你要寫什麼樣的遊戲,並選擇對你的遊戲支持最好的語言。不過對於初學者來說還是建議選擇從C語言開始入門。


推薦閱讀:

55寸液晶電視當電腦顯示器,對顯卡和CPU有要求嗎?
win7怎麼在任務欄恢復藍牙圖標?
matlab和什麼語言類似?
沒有電腦能學習計算機語言嗎,?
計算機專業研究生畢業剛剛參加工作,想要在2-3年後去美國灣區工作,需要作那些方面的準備?

TAG:計算機 | 編程學習 | 計算機學習 |