我不知道你的具體工作是什么。如果你是某冷門領(lǐng)域的專家而變得不可或缺,或者你們的公司十分穩(wěn)固,以你現(xiàn)有的技術(shù)就足以安度你的職業(yè)生涯,那我不知道你是否有失業(yè)的危險。不管怎樣,請你先不要急著寄出那些告訴我你們的公司對用VB3十分滿意或你們除C以外永不用其它語言的信件,并保留起那些講述.NET將如何把Java掃地出門、XML將如何取代關(guān)系型數(shù)據(jù)庫、或你怎樣能用匯編語言或C寫任何軟件而任何其它開發(fā)工具都不重要的信件。
現(xiàn)在,想象一下如果你像很多受裁員和公司倒閉影響的同行一樣失去了工作,那將會怎樣。如果你突然需要搬往它處該怎么辦?如果你的公司突然做了技術(shù)轉(zhuǎn)向又怎么辦?
在目前的就業(yè)市場,經(jīng)理們是根據(jù)當(dāng)前和未來的開發(fā)需要招聘雇員。作為開發(fā)人員,你所掌握的知識是你找工作和保住工作的關(guān)鍵。你要了解技術(shù)的發(fā)展方向,跟上技術(shù)的變化,這一點十分重要,即使你永遠(yuǎn)不用再找開發(fā)方面的工作。
這里是我選出的當(dāng)前最重要的十大開發(fā)技術(shù),最重要的排在前面。看完本文后,請務(wù)必加入talk.editors.devx討論組,提出你選出的十大技術(shù)。
1. XML
首先,你要了解XML。我不是說僅僅是XML規(guī)格本身,還包括一系列相關(guān)的基于XML的語言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema (XSD)、XPath、XQuery和SOAP。那些在過去5年內(nèi)從未碰過鍵盤的人,可能不知道XML為何物。XML是一種文本文件,使用與HTML類似的標(biāo)記。XML能定義一個樹狀結(jié)構(gòu),并能描述所含的數(shù)據(jù)。
XML最好的一點是既能存結(jié)構(gòu)化數(shù)據(jù)也能存非結(jié)構(gòu)化數(shù)據(jù)。它既能存貯和描述“規(guī)格的”(regular)表格數(shù)據(jù),也能容納和描述“粗糙的”(ragged)文件數(shù)據(jù)。
XHTML是現(xiàn)今寫HTML的首選方法。因為它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件,XHTML格式的文件更容易處理。
XSLT和XSL是用于把XML文件轉(zhuǎn)成其它格式的語言??赊D(zhuǎn)換的格式包括:文本文件、PDF文件、HTML、以逗號為分隔符的文件,或其它XML文件。
DTD和XML Schema描述XML文件所能包含的內(nèi)容的類型,并讓你“驗證”XML文件內(nèi)容的合理性,而不用寫特殊代碼以確保內(nèi)容符合規(guī)則要求。
XPath和XQuery是用于從XML文件中抽取單個項目或一組項目的查詢語言。XQuery擴(kuò)展了XPath,因而更重要。XQuery與XML的關(guān)系正像SQL與關(guān)系數(shù)據(jù)庫的關(guān)系。
SOAP是Web服務(wù)之間的一個標(biāo)準(zhǔn)通訊協(xié)議。盡管你不需要對SOAP標(biāo)準(zhǔn)一清二楚,你應(yīng)該熟悉一般的schema和它的工作原理,以便能應(yīng)用這門技術(shù)。
2. Web Service
Web服務(wù)是XML流行后的一個直接產(chǎn)物。因為你能用XML描述數(shù)據(jù)和物件,因為你能用schema確保XML文件內(nèi)容的合理性,因為XML是基于文本的規(guī)范,XML為跨平臺通訊標(biāo)準(zhǔn)提供了一個極其方便的基本格式。如果你還從來沒碰到Web服務(wù),你可能很快就會碰到,在未來5年內(nèi),你幾乎肯定會碰到。熟悉Web服務(wù)十分重要,因為它是目前所有跨不同機(jī)器、不同語言、不同平臺和不同地點的通訊協(xié)議中最簡單的一個。不管你需要與否,Web服務(wù)是邁向互用性的重要一步。
XML工作組主席John Bosak曾說XML“給Java一些事做”。實際上,Web服務(wù)讓所有語言都有了一些事做。Web服務(wù)讓在大型機(jī)上運行的COBOL應(yīng)用軟件能調(diào)用在手持設(shè)備上運行的Java應(yīng)用程序、能讓Java applet與.NET服務(wù)器交談、能讓微機(jī)軟件與Web服務(wù)器無縫連接,并提供了一個相對容易的方法,讓企業(yè)不光能向外界提供數(shù)據(jù),還能提供功能,而且是一種與語言、平臺和位置都獨立的方法。
3. 面向?qū)ο蟮木幊?(OO)
很多程序員仍認(rèn)為OOP是象牙塔里的技術(shù)。但如果你想一下是什么語言在過去的10年里占主導(dǎo)地位,你就會理解OOP不是象牙塔里的技術(shù)。OOP從Smalltalk開始,傳到C++和Pascal (Delphi)。Java使OOP大踏步地邁向主流,幾年后的VB.NET和C#則完全確立了OOP的優(yōu)勢地位。盡管這些語言中的多數(shù)并不要求你必須會OOP,但我覺得如果你不了解OOP的基本概念也不知道如何應(yīng)用這些概念,你能找到的編程工作將越來越少。
4. Java、C++、C#和VB.NET
我把這些語言列在一起,并不是建議你成為每一種語言的專家。我的理由是:學(xué)習(xí)編程最有效的方法之一是看代碼,而你能看到的大量的代碼很可能不是用你所喜愛的語言編寫的。
在過去幾年,各語言的能力越來越接近?,F(xiàn)在,你可以用VB.NET寫Windows服務(wù)、Web應(yīng)用程序或命令行程序。即使你只使用一種語言,你也應(yīng)該學(xué)一些其它語言,以便能看懂那些樣例,并將其翻譯到你所用的語言。這4種語言是基本核心,還有其它一些滿足不同需要、頗具用途的語言,如FORTRAN、COBOL、APL、ADA、Perl和Lisp。
5. JavaScript
盡管名字有些相像,但Java與JavaScript并無關(guān)聯(lián)。為什么一個腳本語言會如此重要呢?因為所有主流瀏覽器都用JavaScript。如果你需要寫Web應(yīng)用程序,你就有足夠的理由學(xué)JavaScript。JavaScript可以用作ASP或ASP.NET的服務(wù)器語言,也可以當(dāng)做用于擴(kuò)展XSLT的功能語言(functional language)。JavaScript是Mozilla/Netscape中用于激活基于XUL的程序接口的首選語言。JavaScript的一個變種ActionScript是Flash MX的編程語言。將來,JavaScript很可能成為新設(shè)備的編程語言,以及大型應(yīng)用軟件中的宏語言。
與JavaScript相對照的是VBScript。盡管Microsoft的軟件對VBScript有良好的支持,但VBScript在未來的開發(fā)工作中很可能是一個糟糕的選擇。就是Microsoft也傾向于用JavaScript(或Microsoft自己的變種:JScript)寫客戶端程序。在選擇腳本語言時,請選擇JavaScript。
6. 正則表達(dá)式(Regular Expressions)
查尋關(guān)系數(shù)據(jù)庫可以用SQL,查詢XML可以用XPath和XQuery,查詢純文本文件則可以用正則表達(dá)式。例如,你可以用一個命令從一個HTML文件中查找并刪除所有的注釋。各種開發(fā)語言內(nèi)置的一些簡單的文本查詢功能,如"IndexOf"函數(shù)或VB中經(jīng)典的"InStr"函數(shù)或"Like"操作符,根本不能與正則表達(dá)式相提并論?,F(xiàn)在,各種主要的開發(fā)語言都提供使用正則表達(dá)式的途徑。盡管正則表達(dá)式本身既難懂更難讀(是回到早期計算機(jī)時代的一種倒退),但它卻是一個功能強(qiáng)大而且未被充分利用的工具。
7. 設(shè)計模式
正像OOP通過把對象分類以簡化編程一樣,設(shè)計模式對一些普遍的對象之間的交互進(jìn)行分類,并賦予一個恰當(dāng)?shù)拿Q。OOP用得越多,設(shè)計模式就越有用。一些最常用的模式的名稱已經(jīng)變成了軟件開發(fā)領(lǐng)域共同使用的術(shù)語,所以要跟上信息的主流,你就要對設(shè)計模式有相當(dāng)?shù)睦斫狻?
8. Flash MX
如果你需要在客戶端得到比HTML和CSS更多的圖形和更強(qiáng)的編程功能,F(xiàn)lash是你的答案。用Flash編程比開發(fā)Java applets或?qū)?NET代碼要快得多,也容易得多。
在最新版本 (MX) 中,F(xiàn)lash不僅僅是畫圖和制造動畫的工具,它已經(jīng)成為一個編程功能強(qiáng)大的開發(fā)環(huán)境:能調(diào)用SOAP Web服務(wù),也能調(diào)用遠(yuǎn)端服務(wù)器上的ColdFusion、Java或.NET程序。Flash無處不在。它的引擎存在于世界上大多數(shù)客戶端計算機(jī),包括手持設(shè)備、置頂盒、甚至是新的書寫板電腦。所以使用Flash能大大擴(kuò)展你的程序的應(yīng)用范圍。
9. Linux/Windows
熟悉Linux。在一臺舊機(jī)器或新機(jī)器上安裝Linux。下載圖形用戶界面,在其基礎(chǔ)上寫一些程序。安裝Apache,寫一個Web應(yīng)用程序。這個世界不再僅僅是屬于Windows,這種趨勢可能還會持續(xù)下去。如果你是一名中堅的Linux開發(fā)人員,那就拋棄你對Windows的憎惡,看看你能否做一些Windows編程。Windows能繼續(xù)在臺式電腦上稱王是有其原因的,這不僅僅是因為Microsoft控制了這個市場。
沒人知道你們公司會在什么時候決定從Linux轉(zhuǎn)向Windows(或從Windows轉(zhuǎn)向Linux),或者你想跳到一家用另一種平臺的公司,或者你想出了開發(fā)一個殺手軟件的好主意,所以你要爭取擁有在不同操作系統(tǒng)上的編程經(jīng)驗。
10. SQL
盡管SQL不像本文討論的其它技術(shù)那樣新,而且SQL的重要性在未來10年內(nèi)很可能降低,但它仍然是一項基本技能。很多開發(fā)人員還沒有掌握這門技術(shù),或掌握得不夠,不足以有效率地使用它。不要依賴具有圖形用戶界面的SQL生成器替你做事情,你要自己手工地寫查詢命令,直到你熟悉基本的SQL語法為止。了解SQL不僅能幫助你日后學(xué)習(xí)XQuery,你還有可能馬上發(fā)現(xiàn)能簡化或改進(jìn)目前項目的方法。 培養(yǎng)好奇心
最后,(對,我意識到這是第11門技術(shù)),好奇心是你最重要的技能。要去嘗試各種東西。新語言或新技術(shù)對你當(dāng)前或?qū)淼墓ぷ骺赡苡杏?,也可能沒用,但并不是你所學(xué)的每一件事都是為了工作。不要害怕失敗,萬事開頭難,學(xué)新技術(shù)也是如此。大多數(shù)失敗是因為人們希望太快地學(xué)到太多的東西。要對每一點進(jìn)步感到滿意,不要讓時間(或缺乏時間)妨礙你。相反,你要安排時間留心、研究、試驗新的開發(fā)技術(shù)和工具。
你可能永遠(yuǎn)也沒有必要成為這些技術(shù)的專家,而且我的選擇可能根本不適合你的特殊情況,但通過培養(yǎng)好奇心,你將會發(fā)現(xiàn)你應(yīng)該了解的東西。
編輯注:現(xiàn)在就到talk.editors.devx討論組去評論羅素的選擇,并提出你自己的清單。
羅素·瓊斯是DevX的執(zhí)行編輯。E-mail地址是:rjones@devx.com。