程序設計/選擇
選擇程式語言
[編輯]很多人在下定決心要從事程序編寫工作的時候會想「我要學哪種語言?」,或者「哪種語言比起其他語言更好?」。實際上,他們更應該想的是「我如何才能成為一個好的程式設計師?」,或者換種說法,「一個好的程式設計師需要哪方面的知識和素質?」。
在程式語言的選擇上,如果僅是泛泛而談的話,一種語言對於另外一種語言,一般不會有絕對的優勢。但是各種程式語言最初都是為了特定的目的而設計的,這也就是說,你如果要判斷一門程式語言優劣的話,一定要根據你所要進行的開發的種類而定。舉個例子來講,如果你的程序工作在dos環境下並且要很多地和硬件交互的話,那麼C語言可能會是一種不錯的選擇,但是假如你現在只想寫一個網頁,那麼你就必須學習HTML了。當然維基百科所使用的php語言也是一種選擇。python和java近些年來也非常熱門。
對於初學者來講,一般都希望可以選擇一種容易理解的,或者是比較流行的語言進行入門。下面我們從幾個方面來對目前的語言作一個大略的比較。
入門問題
[編輯]一個初學者應該如何入門呢?
在這裏,我們所說的「初學者」是指那些以前從來沒有接觸過程序開發或者很少接觸程序開發的人。對於一個初學者來講,可能他們對於程式語言的理解仍然處於非常懵懂的階段。在這種情況下,如果有人向你推薦從組合語言開始入門,那麼一定不要相信他的話。
雖然目前有各種類型的語言,比如結構化的語言,面向對象的語言,等等。但是如果沒有特定的目的而只是想學習程序設計基本理論的話,我們推薦你從一門結構化的高級語言開始入門,比如Pascal或者BASIC。
為什麼不從更為流行的Java或者功能更為強大的C語言開始入門學習呢?
首先,我們知道,各個語言之間都存在一些相通的元素,比如都有變量和常數的定義,都有一定的程序控制流,大部分的語言都有函數定義,等等。如果你能夠熟悉一門語言的這些要素,再去學習其他的語言時候就會事半功倍。
其次,越是功能強大的語言,也就意味着它的複雜度越高。對於一個頭腦中只有很少程序開發概念的人來講,在這些複雜的特性面前,他們往往會感到不知所措:哪裏才是應該重點理解的內容呢?看起來彷彿每個特性都很重要,結果很可能是什麼都難以深入理解。而且過早的學習一些特性比較多的語言容易使初學者產生挫折感,從而喪失掉繼續學習的動力。
所以我們推薦初學者從一些簡單的語言開始學習。在能夠把握住一些語言中的要素之後,再循序漸進地學習那些功能更強大,複雜度也更高的語言。
當然,世界上沒有絕對的事情,並不是每個人都需要從最簡單的學起。只要你有足夠的智慧和決心,你就可以按照你自己的想法去學習。
如何成為一名好的程式設計師
[編輯]這是一個很多人關心的問題。實際上並沒有標準的答案。
這個問題的關鍵是,什麼樣的程式設計師才是足夠「好」?在現實中,我們接觸到各種各樣的人。什麼樣的人是一個「好」人呢?可能1000個人會有1000種不同的回答。在程式設計師的問題上,也是同樣的情況。
通常來講,一個「好」的程式設計師首先要掌握一門或者很多門的程式語言(否則他可能並不是一個程式設計師)。並且在開發中,他能夠運用所掌握的語言靈活地解決各種問題。
好的程式設計師應該是善於思考的人,很多人在腦子裏想像程式設計師時會認為他們是編程的機器,但是實際上,寫程式並不是一個機械性地活動,而是需要思考,創造的。
好的程式設計師還應該是一個善於交流,能夠融入到開發團隊中的一個人。現代軟件的開發,已經不再是過去那樣僅僅憑藉一兩個人就可以做到的事情了。在現實中,十幾人,幾十人甚至上百人的軟件開發團隊隨處可見,所以在衡量一個人是否適合程序開發工作時,往往把「團隊合作精神」放在很重要的位置。
好的程式設計師應該是一個勇於實踐,探索和學習,並且能夠勇敢地進行自我否定的人。在資訊業,技術更新的腳步越來越快。也許在一夜之間,一場新的技術浪潮就會撲面而來,帶來的效應是大量的舊技術被淘汰,這就要求處於這個行業中的人要不斷的學習,充實自己。同時不能夠守舊,因為技術始終是在向前發展的,它不會停下腳步來等待你,如果你不緊隨它的腳步,就只能被時代所拋棄。
如果我們把上述幾點作為「好」的程式設計師的特徵的話,那麼我們知道,想要成為一名好的程式設計師,就要善於思考,要具備團隊合作精神,同時要不斷地學習和進步。此外,還需要敬業,勤奮,等等。
簡介:目前比較流行的幾種語言
[編輯]在這一小節中,我們將會介紹幾種目前比較流行的程式語言。
目前來講,被使用最多的幾種語言應該包括C語言,C++,Java,以及微軟平台下基於.NET的幾種語言。
和很多的結構化語言相比,C語言更加接近於硬件底層。這種特性也使得C語言比其他的結構化語言,比如BASIC或者Pascal更加難於學習。C語言的這種特性使得它在很長一段時間內被認為是功能最強大,也是使用最多的高級語言。現在由於軟件項目中大量使用面向對象的語言,C語言作為一種結構化的語言使用範圍也越來越小,但是在一些特定的領域內,C語言仍然是很好的選擇。
在很多人看起來,C語言和C++很相似,而且,C++支持C語言語法。所以如果你會使用C語言,那麼用一個C++的編譯器編譯你所寫的ANSI C語言程序,一般都可以順利通過。但是C++並不只是一個C語言的擴展版本。實際上,在C++和C語言之間存在着一個很大的區別就是面向對象和結構化的思想之間的區別。C++具有幾乎全部的面向對象的特徵,而C語言則是一種標準的結構化語言。C++在標準化之後迅速成為了程序開發的主流語言。
另外一種非常流行的程序語言是Java。Java的優點之一是它的跨平台特性,即藉助於運行於不同平台上的Java虛擬機(JVM),用Java編寫的程序可以在多種不同的作業系統甚至硬件平台上運行。這是由於Java編譯器並不把程序編譯成為可以直接在機器上運行的二進位程式檔案,而是編譯成「位元組代碼」,在執行Java程序的時候,系統利用Java虛擬機將這種「位元組代碼」翻譯成本地機器可以識別運行的可執行代碼。這也使得Java程序比起C++或者其他語言編寫的程序執行相對要比較慢一點,而且Java程序更容易被反編譯。Java的語法和C++具有很多相似的地方,因此,如果你在學習Java之前就已經對C++比較了解,可能會感覺比較容易一些。不過C++有一些特性卻是java沒有的。
BASIC(比如Visual Basic或者QBasic)的使用也很廣泛。由於Visual Basic的易用性,直到今天,它仍然被非常普遍地使用着。Visual Basic.Net是Microsoft為了讓Basic能利用.Net的各種特性,對傳統的Basic進行改造而產生的,它和傳統的Basic卻已經有了很大的區別。
我們在前面提到過,由於Basic是最容易學習的語言之一,它常被用來當成學習程序設計的入門語言。
匯編語言在今天已經不再像過去一樣被普遍地使用了,但是學習匯編語言會幫助你明白計算機是如何工作的,在你使用高級語言編程時,使用匯編語言的經驗也可以讓你明白什麼樣的代碼在機器上運行更加高效。儘管如此,如果你不是確實有需要或者有興趣,我們不推薦你從匯編語言開始學習程序設計。關於計算機體系結構以及如何編寫高質量代碼的知識你完全可以從相關的書本上得到。
C#. 為了適應.Net的各種特性,Microsoft為它量身定做了一門全新的程式語言C#。C#語法同樣繼承於C, C++, 以及Java,吸收了它們的很多優點,完全面向對象,良好的內存管理,能夠充分利用.Net提供的各種特性。C#的標準化工作進行得很好,提交給ECMA,標準號為ECMA-334。C#在很多地方都學習了Java,語法簡潔,而在很多細節上設計得很體貼程式設計師,比如delegate, 繼承中類方法的重寫,out, ref等關鍵字。通過非託管的代碼,甚至可以直接使用指針等底層特性,直接進行內存操作等。但由於這些細節的設計,也增加了一定的語言複雜度。與Java相比,在跨平台方面也有一定能力,目前開源的Mono項目正努力使.Net能夠在不同的作業系統平台上運行,取得了相當的成功。總而言之,C#簡單易學,易於使用,而又功能強大,是一門值得學習的新型語言。(小插曲:C#的創始人是Anders Hejlsberg,他也是Delphi的創始人,可能是這個原因,Delphi和C#有很多相似的地方。)
(註:由於我對.Net體系下各種語言不是很熟悉,所以希望熟悉.Net的朋友能夠幫助續寫一段.Net平台下各種語言的大概介紹)。
在本章中,我們將介紹學習程序設計過程中些需要關注的一些問題以及大多數程序語言都具有的一些共有元素。
如果你只希望學習一門特定的語言的話,你可以跳過本章直接閱讀你希望學習的那門語言的相關教程,但是我們推薦初學者快速瀏覽一下本章以獲得一個總體的印象。
程式語言
[編輯]程式語言根據執行方式的不同,分為三大類:編譯型語言、解釋型語言、半編譯型語言。
編譯型語言
[編輯]編譯型語言是指將源文件編譯成本地執行的二進制文件,執行的就是本地二進制代碼,效率非常高,但平台可移植性比較差。比如傳統的匯編、C語言等。
解釋型語言
[編輯]解釋型語言通常稱為腳本語言,用這種語言編寫的程序不需要進行編譯,通過它的解釋器就可以直接執行,這種語言往往語法不是非常嚴格,在不同平台中易於移植,使用靈活,但執行效率較低。比如JavaScript、Perl、TCL/TK等。
半編譯型語言
[編輯]半編譯型語言則介於二者之間,需要經過編譯,但不編譯成本地二進制碼,而是一種中間代碼,獨立於CPU,因此具有一定的平台獨立性,使用近年來快速發展的JIT技術,執行效率也比較高。比如Java、.Net下的各種語言。由於半編譯型語言依靠JIT技術獲得巨大成功,很多解釋性語言正考慮或者已經開始向半編譯型語言轉型。