第一篇:期貨學(xué)習(xí)路線
期貨交易是現(xiàn)有幾種能憑借動(dòng)力,耐力和技巧,以相對較少的資金投入來獲得無限潛在利潤的投資工具之一??梢哉f沒有任何資本投機(jī)像期貨交易那樣充滿投機(jī)性,迷惑性,風(fēng)險(xiǎn)性而又前景廣闊。
那么如何成功參與期貨交易呢?我個(gè)人認(rèn)為有如下幾個(gè)因素:
一、要對期貨市場擁有正確全面的理解:
這方面的知識我認(rèn)為不用買書,完全可以通過論壇新手學(xué)苑以及各大期貨論壇的帖子來獲得.通過大量的閱讀,你要弄明白以下幾個(gè)問題:
1、期貨交易不是一門科學(xué),它更多的是一門藝術(shù)。
2、沒有捷徑,沒有菜譜式的公式來獲得期貨交易的成功。
3、期貨市場中九虧一贏,對這樣的結(jié)果原因知道個(gè)大概。
4、如果一個(gè)人能清醒認(rèn)識到交易中虧損的風(fēng)險(xiǎn),能為獲得成功不懈努力并具有自律精神的話,期貨交易將為他提供一條通往巨額財(cái)富的謀生之路。
有了以上認(rèn)識后,還需要端正學(xué)習(xí)態(tài)度和堅(jiān)定信念。
雖然每個(gè)人來學(xué)習(xí)和期貨交易的最初動(dòng)機(jī)都不一樣,所受到的影響也不一樣。但是可以想象的到,大家聽到最多的就是期貨風(fēng)險(xiǎn)很大很大,幾乎沒有人能夠賺到錢。其實(shí)這是偏見,很多人過早被市場消滅,不是因?yàn)槠谪洷旧淼腻e(cuò),而是因?yàn)樽约旱乃季S和做法錯(cuò)誤,想想看,還像股票那樣全倉殺入期貨,不知道錯(cuò)在哪里,如何改錯(cuò)?不死才怪!在股票里沒死,是因?yàn)楣善笔锹顨ⅰ>秃孟竽蔷湓捳f的那樣,股票是溫水慢慢煮死,期貨是開水利馬燙死。如此說來兩者還有優(yōu)劣厚重之分嗎?
所以,我覺得交易什么不重要,重要的是你對市場對自己的了解有多深!
另外,該不該學(xué)習(xí)期貨?該不該交易期貨?這個(gè)問題我想沒有人可以給出正確的答案。很多人僅僅因?yàn)樽约夯蛑車速r錢就告訴新手不可以來交易;也有很多人因?yàn)橐粫r(shí)的運(yùn)氣就對新手特吹狂吹;更有經(jīng)紀(jì)人自己交易失敗不得不退出,卻鼓動(dòng)新手大做特做,這樣的行為都很不負(fù)責(zé)。
適合不適合?如何調(diào)整自己?誰也別問,你是自己的主人,對照大作手的話就成.投機(jī),天下最徹頭徹尾充滿魔力的游戲。但是,這個(gè)游戲愚蠢的人不能玩,懶得動(dòng)腦子的人不能玩,心理不健全的人不能玩,企圖一夜暴富的冒險(xiǎn)家不能玩。這些人如果貿(mào)然卷入,到頭來終究是一貧如洗。
二、行情分析方法的學(xué)習(xí)和掌握
行情分析方法非常重要,針對眾多市場是觀望還是入市參與交易,都取決于你對市場的準(zhǔn)確分析。要想做好分析工作,首先要學(xué)習(xí)所有的分析方法,然后根據(jù)自己的優(yōu)勢,確定自己的分析方法。目前行情分析方法有三種,基本分析,技術(shù)分析和心理分析。
基本分析:它要求我們具備經(jīng)濟(jì)情勢的能力。在新手尤其是股票新手當(dāng)中,很多人是由此入市操作的。在他們眼里這個(gè)分析是最容易進(jìn)行的,看看新聞,瀏覽一下某公司的投資報(bào)告,注意一下產(chǎn)量和銷量就可以操作了。其實(shí)這是非常錯(cuò)誤的,在各大投資公司,薪水最高的就是基本面研究員,這說明這個(gè)分析是非常難的和專業(yè)化的,一般的散戶無論是資歷還是財(cái)力是做不到全面及時(shí)的基本分析的。這方面請看看<史瓦格期貨基本分析>就會(huì)知道我們的無奈。但是這也不能說明我們就要完全放棄基本分析,我們可以學(xué)習(xí)根據(jù)重要事件對市場的影響來判斷后續(xù)的走勢。例如,如果一件重大利好沒有造成市場繼續(xù)上升就是多頭減倉或建空倉信號。
技術(shù)分析:它是借助于圖表和技術(shù)指標(biāo)的幫助來分析市場行為,幫助我們決定何時(shí)買入賣出或者不參與,也幫助我們判斷走勢的正常與異常。它包括:
1、圖形分析:頭肩,反轉(zhuǎn),連續(xù),支撐,壓力等。這個(gè)是最基礎(chǔ)的,也是陷阱最多的地方。學(xué)習(xí)參考書目《期貨市場技術(shù)分析》《期貨交易技術(shù)分析》《日本蠟燭圖技術(shù)》《甘氏理論:形態(tài)—價(jià)格—時(shí)間》《完全技術(shù)分析手冊》。
2、順勢分析:趨勢線,均線。都說順勢操作,可是如何發(fā)現(xiàn)趨勢的開始,如何確定趨勢是否延續(xù)?這個(gè)太難太難了!學(xué)習(xí)參考書目《趨勢跟蹤》《專業(yè)投機(jī)原理》《股市晴雨表》(《股市晴雨表》中的道氏理論對趨勢的理解非常重要)
3、結(jié)構(gòu)分析:季節(jié)性,循環(huán),波浪。結(jié)構(gòu)分析是幫助我們確定行情所處的位置,從而確定市場隨后的發(fā)展,這個(gè)學(xué)習(xí)是很深的,弄不好要陷入迷信的怪圈,大家要小心才好。剛開始可以只做了解,有了一定經(jīng)驗(yàn)和分析能力后,再來深入研究它。學(xué)習(xí)參考書目《艾略特波浪理論-市場行為的關(guān)鍵》《應(yīng)用艾略特波浪理論獲利》《江恩華爾街45年》《市場輪廓理論》《駕馭市場--優(yōu)秀交易商是如何造就的》
4、市場性質(zhì):它的重點(diǎn)是判斷超買或超賣的行情,主要是用于沒有明確方向的震蕩行情。學(xué)習(xí)書目《短線交易秘訣》《我如何從股市中賺得200萬》《震蕩盤操作策略》《箱型賺錢法》《市場韻律與時(shí)效分析》
在期貨交易中,技術(shù)分析人士占很大一部分,也許就是因?yàn)槭褂玫娜硕啵3J沟媒?jīng)典技術(shù)信號失靈。
心理分析:在技術(shù)分析中說到,經(jīng)典技術(shù)信號失靈,那么如何解決這問題呢?這就引出了心理分析。心理分析是非常復(fù)雜和難以掌握的,因?yàn)樗鼪]有什么指標(biāo)可以準(zhǔn)確量化,只能說是斗志斗勇吧。
它分為兩個(gè)方面:
1、自己心理分析:參考書目《重塑證券交易心理》《贏家操作心法》《最佳賣出點(diǎn)》《戰(zhàn)勝華爾街--成功投資的心理學(xué)與哲學(xué)》《股票投資心理分析》
2、大眾心理分析:參考書目《大眾心理與走勢預(yù)測 》《逆向思考的藝術(shù) 》《烏合之眾》《88種股市陷阱》
這里還要特別提到一本書,那就是《行為金融》。重點(diǎn)推薦的理由可在此書內(nèi)容簡介得知。
純金融理論并不是考慮人們的情感波動(dòng),認(rèn)識偏見和預(yù)期,而這些因素常常會(huì)導(dǎo)致人們做出并不高明的決策。盡管知道成功的希望渺茫,但對于回報(bào)豐厚、獲勝概率微小的機(jī)會(huì),人們?nèi)匀粶?zhǔn)備下手一搏,這從世界上到處風(fēng)靡的彩票抽獎(jiǎng)活動(dòng)可以看出。因此,社會(huì)的行為方式比數(shù)理化理論模型要有用的多,許多人會(huì)聽從一些傳言和小道消息或隨大流,而并不想對一些事情做出客觀公正的評判。本書的兩位作者,一名是經(jīng)驗(yàn)豐富的金融市場實(shí)踐者,另一名是在研究市場心理的專家,向我們闡述了行為金融的科學(xué)意義。該書探討了人們在尋求更好的投資機(jī)會(huì)有關(guān)決策的幾個(gè)問題,決策如何引起證券市場價(jià)格波動(dòng),投資者如何選擇信息和交流信息。
三、形成自己的分析體系并建立交易規(guī)則
通過大量的學(xué)習(xí)后,每個(gè)人或多或少擁有了自己的分析方法,但是這時(shí)候的方法基本都是書上看到或者別人那里聽來的,悟性好的人會(huì)知道其中的涵義,悟性稍差或者懶惰的人則根本不知。無論知道與否,別人的方法終究是別人的,依靠它們來操作很難獲利可這又是每個(gè)人必經(jīng)之路!那么若想在這個(gè)過程少花一點(diǎn)冤枉錢,就先用模擬交易或者歷史數(shù)據(jù)測試去
試驗(yàn)其有效性,然后用最少的資金去實(shí)盤。在這兩個(gè)過程中,根據(jù)自己的觀察和思考對原有的方法進(jìn)行更正和完善。
學(xué)習(xí)參考書目《混沌操作法》《克羅談投資策略——神奇的墨菲法則》《原版海龜交易法則》《成功交易--與金融大師談投資》《高績效期貨操作:名家交易策略》《甘氏理論:型態(tài)-價(jià)格-時(shí)間》
四、實(shí)現(xiàn)復(fù)制性學(xué)習(xí)到創(chuàng)造性學(xué)習(xí)的質(zhì)變
如果說交易學(xué)習(xí)很難,那么就應(yīng)該體現(xiàn)在這個(gè)過程中了。當(dāng)人們擁有了屬于自己的分析方法進(jìn)行操作后(太多的人是沒有耐心經(jīng)歷驗(yàn)證過程的),他們會(huì)慢慢發(fā)現(xiàn),他們所學(xué)到的方法在交易中竟然無法讓他們賺到錢,當(dāng)然有一些人剛開始是獲利的,但最終也要陷入虧損。于是又學(xué)新的方法,但還是不行。這時(shí)有的人或者去花高價(jià)尋找秘訣,或者責(zé)怪自己的心態(tài)不好,事實(shí)上,這個(gè)時(shí)候大家關(guān)鍵的問題是操作犯了一個(gè)嚴(yán)重的錯(cuò)誤,那就是拿來主義----無論什么方法,只要看到了,不問究竟或不懂究竟,拿來就用。
比如最著名的突破買入法,很多人都是在創(chuàng)新高時(shí)買入。這個(gè)方法在股票中無傷大雅,可是在期貨中卻常常是非常的被動(dòng)。因?yàn)樵谄谪浿校@個(gè)方法的最好使用時(shí)機(jī)應(yīng)該是高位或低位(常見的是低位)長時(shí)間橫盤整理后的突破第一筆倉介入。因?yàn)檫@一突破說明了新的趨勢很有可能從這里開始。而在趨勢形成后的過程中,再用這個(gè)方法,卻是非常的被動(dòng),可以看看倫敦銅,在上升趨勢中,有幾個(gè)突破是沒有跌回的?!而且在趨勢行進(jìn)中的突破買入使你的止損點(diǎn)非常的不合理,同時(shí)這樣的操作會(huì)讓你多次止損受傷。期貨是保證金制度,太寬的止損將使你的這筆交易風(fēng)險(xiǎn)報(bào)酬比很不劃算,太低的止損又沒說明你錯(cuò)了,所以最后的結(jié)果你總是受傷。而形態(tài)識別更是太多的陷阱在里面。
要解決這些問題必須跳出書本,從理論世界中來到現(xiàn)實(shí)世界,每天大量的看盤解盤,這個(gè)過程就像《烏合之眾》所說的那樣:取得成功的條件是判斷力,是經(jīng)驗(yàn),是開拓精神和個(gè)性。觀念只有在自然而正常的環(huán)境中才能形成。要促進(jìn)觀念的培養(yǎng),需要在現(xiàn)實(shí)中獲得大量的感官印象;他得親眼看到各種工具、材料和操作;他得身臨其境。在不知不覺中獲得細(xì)節(jié),默默推敲,在心中逐漸成形,并且或遲或早會(huì)產(chǎn)生出一些提示,然后著手新的組合,簡化,創(chuàng)意。改進(jìn)或發(fā)明。
當(dāng)有一天,你對他人的技術(shù)不再是拿來主義,而是詳細(xì)檢查方法和結(jié)果,并能通過圖表了解到背后人們的情緒因素,那么你的交易也就贏多于虧了。不過這個(gè)過程很長,沒有失望絕望是無法有這個(gè)質(zhì)變的。好在相對于股票,期貨的迷惑時(shí)間少很多。勤奮刻苦的人大概1---2年就能熬過去了,股票可就沒這么幸運(yùn),10年可能還不知究竟。這也是我熱愛期貨的一個(gè)原因所在。
五、培養(yǎng)高超的交易技能和技巧
期貨市場是買家和賣家因?yàn)槟撤N原因聚集在一起交換貨物、進(jìn)行交易的地方。在這個(gè)斗智斗勇的高級游戲中,要獲得勝利需要正確的行情分析同時(shí),更需要高超的交易技巧.然而如前輩所說,交易界里同時(shí)具備分析能力與交易技巧的人并不多見.因此這項(xiàng)學(xué)習(xí)既是挑戰(zhàn)更是機(jī)遇。
成功穩(wěn)健的交易是由一系列環(huán)節(jié)組成:買(賣)什么--何時(shí)買(賣)--怎么買(賣)--買(賣)入量占資金組合的比例多大--買(賣)入后的監(jiān)控--何時(shí)加倉--加倉后的監(jiān)控--何時(shí)平倉--對不可預(yù)知的意外情況防范措施--錯(cuò)誤的處理--系統(tǒng)無效時(shí)的行為等。這其中的任何一個(gè)環(huán)節(jié),初學(xué)者都不能很好的完成,甚至說有了幾年交易經(jīng)驗(yàn)的老手也都很難做到。想要掌握它,一方面通過冥想,在交易前盡可能把所有環(huán)節(jié)中自己的處理方式想象出來,這個(gè)過程要細(xì)致,不能
有紕漏;另一方面用最小量去實(shí)盤交易,在實(shí)盤中對自己的執(zhí)行能力和自己的優(yōu)點(diǎn)弱點(diǎn)進(jìn)行最嚴(yán)格的檢驗(yàn)和修正。
有專家說:“技能的高低在于熟練的程度”。一個(gè)司機(jī)車開的好壞,在于他開車的時(shí)間長短,在于他對車況的熟悉程度,在于他應(yīng)對不良路況反映的靈敏度,關(guān)鍵的一樣就是熟練的程度。你能想象一個(gè)未經(jīng)練習(xí),就直接開車上路的后果嗎?交易技能的高低雖然涉及不到生命安全問題,但是勢必會(huì)影響到交易績效。
<體育運(yùn)動(dòng)心理學(xué)>曾說,對于一種運(yùn)動(dòng)技能,如彈琴、打字、駕駛汽車等,要達(dá)到熟練必須經(jīng)過1000-1500小時(shí)的練習(xí)。這僅是一般性的熟練而言,至于在競技運(yùn)動(dòng)領(lǐng)域,要形成一種能夠在比賽中靈活運(yùn)用的技巧,顯然要經(jīng)過更長的時(shí)間。
體育如此,交易也是這樣。國債交易員查理D曾說,當(dāng)你經(jīng)過了5000筆交易后,你才會(huì)把交易中所有可能遇到的各種情況經(jīng)歷了。5000筆---這是什么樣的概念???!因此到了這個(gè)階段,如果波段交易技巧能夠比較成熟的掌握,那么可以用最小的倉位從趨勢波段過渡到短線甚至日內(nèi)。在短線和日內(nèi)的不斷交易中,執(zhí)行能力和技術(shù)水平會(huì)得到很大的鍛煉和提高,最終交易績效也將取得明顯提高?!毒珳?zhǔn)獲利K線戰(zhàn)技》說的好:理性而熟練的操作技巧,是來自慘痛教訓(xùn)。某些人的反應(yīng)敏銳,可以很快從這類失敗中吸取教訓(xùn)。歸納出一套勝算較高的運(yùn)作方法??墒遣⒉皇敲總€(gè)人都具有敏銳的反省能力,否則市場上就不會(huì)有那么多失敗者。
六、在學(xué)習(xí)和交易中培養(yǎng)嚴(yán)格的自律和謙卑精神
常聽說以交易為生很難,我想該是體現(xiàn)這以后的過程中。因?yàn)闆]有任何一行像保證金交易這樣嚴(yán)格要求我們?nèi)烁竦耐暾浴?/p>
當(dāng)我們千辛萬苦有了不錯(cuò)的方法,用起來也得心應(yīng)手時(shí),卻常常發(fā)現(xiàn)交易成績還是不穩(wěn)定,時(shí)好時(shí)壞,甚至損失慘重,造成這樣的原因主要是缺乏自律和謙遜心態(tài)。一方面因?yàn)檫@樣那樣的原因沒有按照計(jì)劃執(zhí)行,任由情形任意發(fā)展;一方面因?yàn)檫^于自大,或者固步自封,或者交易過量?;仡欉^去眾多前輩,他們的慘敗不是因?yàn)槿鄙俜椒?,也不是缺少技巧,就是因?yàn)槿狈ψ月珊蛯κ袌龅闹t卑,比如大作手。
不是嗎?每個(gè)擁有豐富交易經(jīng)驗(yàn)的人都或多或少擁有這樣的經(jīng)歷,常常犯些十分愚蠢的錯(cuò)誤,過后想起來都不能原諒自己。這就是《十年一夢》所說的那樣:明明知道,卻做不到。要做到理性,就要先承認(rèn)非理性。只有承認(rèn)自己的不足,才會(huì)去想完善措施,這個(gè)過程是一生一世的。惟獨(dú)你的素養(yǎng)和境界都提高上去了,那么你的交易才是真正的交易,沒有情緒,沒有自大。正如前輩們所說的那樣:交易好的人,為人也一定好!這個(gè)階段可以學(xué)習(xí)交易前輩的回憶錄,各行各業(yè)頂尖人物訪談以及陶冶情操方面的書,在學(xué)習(xí)他們的過程中,你會(huì)找到自己沒能成功的真正原因。
我剛開始交易時(shí),把交易想的十分簡單,成為百萬富翁只是近在咫尺的事情。經(jīng)過7年學(xué)習(xí)和磨練后,我一次又一次感嘆自己的不足和欠缺。當(dāng)我們想取得交易大師的成績時(shí),請捫心自問一下,我們擁有了大師的心態(tài),素養(yǎng)和技巧了嗎?電影《泰坦尼克號》有這樣一個(gè)畫面:當(dāng)那些男人把女人和孩子送到救生船后,他們沒有一絲的恐慌和悲哀,繼續(xù)安詳?shù)难葑?,和船一起慢慢沉沒。試問這個(gè)境界有幾人能達(dá)?!這樣的人做什么不能做成呢?!
七、永遠(yuǎn)保留學(xué)習(xí)的好習(xí)慣
無論你之前的交易多么成功,切不可放棄學(xué)習(xí)。一方面交易環(huán)節(jié)細(xì)致全面,市場也不斷變化之中,就算人性本質(zhì)不變,但人們的表達(dá)和應(yīng)變方式卻是與時(shí)俱進(jìn)的,這一切都需要我們時(shí)時(shí)關(guān)注和領(lǐng)會(huì);另一方面人是充滿惰性的,稍微放縱和膨脹自己,就會(huì)給交易帶來無比的禍害。
為保持最敏銳的頭腦,要時(shí)刻關(guān)注市場最近觀念和操作方法。這個(gè)可以從知名人士的相關(guān)文章和最近圖書取得。另外要對之前的經(jīng)典書籍不定期回顧和體會(huì),隨著自己水平的不斷提高,你一定會(huì)有更深的感悟和啟迪。
至此,這個(gè)帖子似乎可以結(jié)束了。但是,交易并不是這么簡單的線條,這幾個(gè)過程幾乎沒有明顯的界限。這里,我只能說在交易的初級和中級階段,方法和技巧更重要一些,在交易的高級階段,心態(tài)和自律更重要一些。(轉(zhuǎn))
第二篇:Java學(xué)習(xí)路線
怎么學(xué)習(xí)Java,這是很多新手經(jīng)常會(huì)問我的問題,現(xiàn)在我簡單描述下一個(gè)Java初學(xué)者到就業(yè)要學(xué)到的一些東西:
首先要明白Java體系設(shè)計(jì)到得三個(gè)方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition,我們經(jīng)常說到的JDK,就主要指的這個(gè),它是三者的基礎(chǔ),屬于桌面級應(yīng)用開發(fā),這部分如果學(xué)得好很容易拓展J2EE和J2ME。J2ME,The Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手機(jī),PDA等等。J2EE,Java 2 Platform,Enterprise Edition,就是所謂的企業(yè)級Java,適合企業(yè)的大型應(yīng)用開發(fā)。
J2SE:
新手最初學(xué)習(xí)的時(shí)候先要從J2SE開始學(xué)起,所包含的內(nèi)容主要分為:面向?qū)ο蟾拍畹睦斫?、Java基本語法的學(xué)習(xí),Java桌面圖形界面應(yīng)用程序的開發(fā),掌握常用的Java API等(關(guān)鍵是要學(xué)會(huì)怎樣查閱)。
重點(diǎn):Java基本語法(循環(huán)結(jié)構(gòu),數(shù)據(jù)類型,數(shù)組,運(yùn)算符等)、Swing,awt,事件機(jī)制、文件輸入輸出流處理等
難點(diǎn):面向?qū)ο笏枷氲睦斫猓ń涌?、類等)、線程、socket網(wǎng)絡(luò)編程等
視頻教程推薦:孫鑫的Java基礎(chǔ)視頻教程、張孝祥的Java基礎(chǔ)視頻教程,講的都很細(xì),而且這兩位老師在教學(xué)方面都有很好的經(jīng)驗(yàn)。
J2EE:
在學(xué)習(xí)了J2SE之后,你可以嘗試著慢慢過渡到J2EE,當(dāng)然,學(xué)習(xí)J2EE海需要很多非JAVA技術(shù)的支撐,比如數(shù)據(jù)庫技術(shù),網(wǎng)頁編程技術(shù)等等,待會(huì)我會(huì)詳細(xì)介紹這兩方面的內(nèi)容。J2EE有三個(gè)必學(xué)的框架,如果你說你學(xué)了J2EE,但又不會(huì)這三個(gè)框架的話,那會(huì)讓人笑掉大牙,這三個(gè)框架分別是Struts、Spring和Hibernate,雖然這三個(gè)框架應(yīng)用很廣,但不代表這三個(gè)框架就代表了J2EE,J2EE還有很多其他的東西,比如EJB,作為一款重量級(此重量級不是指重量級選手那個(gè)意思,此重量級非彼重量級)框架,雖然這個(gè)應(yīng)用慢慢的再被其他框架所取代,但EJB3.0的出現(xiàn)也給它帶回一些生機(jī),作為一個(gè)分布式應(yīng)用的框架,也是大家要去學(xué)習(xí)和了解的知識。
當(dāng)然,剛才說到J2EE包含的范圍很廣,即使我把我所了解的所有技術(shù)說出來,也并不能代表J2EE,這是一個(gè)很深很廣的學(xué)問,需要大家以后再工作的時(shí)候慢慢去發(fā)現(xiàn)了。我所了解的還包括:
JDBC:Java數(shù)據(jù)庫連接對象,基礎(chǔ)中的基礎(chǔ),Hibernate也只是對它的封裝而已 JNDI: Java 命名與目錄接口,J2EE重要規(guī)范之一 EJBS: 上面已經(jīng)提到過了
RMI: 提供遠(yuǎn)程調(diào)用方法的支持,主要用于程序分布式開發(fā) JMS: Java消息服務(wù),中間件技術(shù)
JAVA IDL: 提供J2EE平臺與CORBA交互能力和互聯(lián)能力的技術(shù) JTS: 組件事務(wù)監(jiān)視器 JTA: 事務(wù)劃分的一個(gè)技術(shù) JAVAMAIL: Java中的郵件技術(shù) JAF: Java啟動(dòng)框架,沒研究過 Log4j,一款日志處理的框架應(yīng)用
Junit:單元測試的好幫手
freemarker、velocity:兩款不錯(cuò)的模板引擎
與Flash的交互Flex:目前很多的SNS應(yīng)用就是使用到了這個(gè)技術(shù)
Web services:想知道我們論壇天氣預(yù)報(bào)的效果是怎么做的嗎?請關(guān)注這個(gè)技術(shù) SOA:面向服務(wù)架構(gòu),未來技術(shù)發(fā)展的趨勢之一 ……
不過前面介紹到得這些都不是J2EE的基礎(chǔ),是屬于框架應(yīng)用級別的.要真正把上面說到的知識掌握好,還是的學(xué)習(xí)J2EE最核心的東西:JDBC、JSP、servlet和JavaBean,后面三個(gè)也是學(xué)習(xí)SSH的基礎(chǔ)(StrutsSpringHibernate的簡稱).鑒于J2EE的內(nèi)容太過復(fù)雜,建議大家最初只學(xué)習(xí): JSP, servlet和JavaBean,等這個(gè)基礎(chǔ)掌握好再把SSH學(xué)習(xí)了,再對其他J2EE技術(shù)有個(gè)大致的了解就可以出去找工作了。當(dāng)然,找工作的前提除了把Java學(xué)習(xí)好,還會(huì)有一些其他的技術(shù)也是必須要掌握的。數(shù)據(jù)庫技術(shù):
數(shù)據(jù)庫幾乎是程序中不可或缺的一部分,在整個(gè)軟件開發(fā)中更是占據(jù)了重要作用.數(shù)據(jù)庫在整個(gè)軟件中扮演的是地基的角色,你要修房子,就要先打好地基,你要做軟件,就要先設(shè)計(jì)好的數(shù)據(jù)庫.目前數(shù)據(jù)庫幾乎都是關(guān)系型數(shù)據(jù)庫,代表的有: SQL Server,目前最新的好像是2008,我不是很喜歡追趕時(shí)髦,用的還是2005,不過也很不錯(cuò)了,在此之前還有2000.MySQL,最知名的開源數(shù)據(jù)庫之一,我很喜歡它的小巧耐用,學(xué)過SQL SERVER數(shù)據(jù)庫再學(xué)它,無師自通,易如反掌.ORACLE.甲骨文公司的產(chǎn)品,大型數(shù)據(jù)庫,正版的一般公司買不起.只有看看了,不過現(xiàn)在Java開發(fā)60%都是會(huì)使用到這個(gè)數(shù)據(jù)庫,再加上現(xiàn)在甲骨文已經(jīng)把sun公司收購了,JAVA和ORACLE得關(guān)系更加曖昧,各位得多花些時(shí)間在這上面了.除了這些,你還應(yīng)該了解一些桌面應(yīng)用軟件開發(fā)用到的數(shù)據(jù)庫,比如說sqlite。你在制作安裝程序的時(shí)候可以把這個(gè)數(shù)據(jù)庫打包進(jìn)你的安裝程序。
網(wǎng)頁編程基礎(chǔ):
網(wǎng)頁編程基礎(chǔ)要學(xué)的內(nèi)容也比較多,但主要集中在以下這三個(gè)技術(shù)之上,大家每天看的各種樣式的網(wǎng)頁都是它們呈現(xiàn)的: HTML:超文本標(biāo)記語言 CSS:層疊樣式表
Javascript:瀏覽器客戶端腳本語言
現(xiàn)在更是流行各種JavaScript庫,比如:Jquery、ExtJs等,你要是會(huì)其中的某一個(gè)庫的使用,找工作so easy。
J2ME:
如果你在學(xué)習(xí)了以上技術(shù)還不過癮,可以再學(xué)習(xí)手機(jī)程序的開發(fā),就我個(gè)人看來,開發(fā)手機(jī)程序技術(shù)其實(shí)蠻簡單的,難點(diǎn)在于優(yōu)化,比如怎么讓你寫的程序盡量的節(jié)約手機(jī)資源,“代碼誠可貴,手機(jī)價(jià)更高“,所以不得不比PC機(jī)多考慮很多成本和實(shí)用性問題。J2ME的學(xué)習(xí)的話,切忌不要單純的再模擬器上測試,一定要找真機(jī)測試,真機(jī)和模擬器的效果之間差別是很大的。更多手機(jī)開發(fā)技術(shù),有興趣的朋友可以和我一起探討。
開發(fā)工具:
開發(fā)工具的選擇主要還是看大家的習(xí)慣,我個(gè)人比較喜歡使用eclispe,功能很強(qiáng)大,也很好拓展其他的功能。當(dāng)讓初學(xué)你也可以選擇JCreator,或者最好就直接用記事本。等你熟悉了Java代碼之后,就可以使用JBuilder、eclispe或者netbeans這一類的工具了。
先說到這里先,以后大家一起完善這個(gè)帖子。盡量再給大家整理一些學(xué)習(xí)的資源在這里。也歡迎大家一起整理我文章中提到的一些技術(shù)資源和開發(fā)工具。最后,再和大家分享一句話:生命欣欣向榮,唯奮斗不息。也和大家分享一幅Java學(xué)習(xí)路線圖:
第三篇:嵌入式學(xué)習(xí)路線
語言基礎(chǔ) 1.C 與 C++ A.《c reference》 B.《c++ 編程思想》 C.《effective c++》 D.《more effective c++》 E.《effective c++ stl》 2.軟件設(shè)計(jì) A.《UML 2.0 Reference》 B.《設(shè)計(jì)模式-可復(fù)用的面向?qū)ο筌浖幕A(chǔ)》 C.《重構(gòu)》 D.《修改代碼的藝術(shù)》 E.《面向模式的軟件體系結(jié)構(gòu)》卷 1,卷 2,卷 3,卷 4,卷 5 3.Linux 開發(fā)基礎(chǔ) A.《鳥哥的 linux 私房菜》 B.《GNU make reference》 C.《Shell 編程》 D.《unix 高級環(huán)境編程》 E.《linux kernel development》 F.《深入理解 Linux 內(nèi)核》 G.《Linux 驅(qū)動(dòng)程序開發(fā)》 H.《Unix 網(wǎng)絡(luò)編程》 I.《Linux 進(jìn)程間通信》 4.嵌入式開發(fā)基礎(chǔ) A.《ARM 體系結(jié)構(gòu)》 B.《ARM 程序分析與設(shè)計(jì)》 C.《ARM 嵌入式系統(tǒng)基礎(chǔ)教材》周立功 D.《嵌入式操作系統(tǒng)μC/OS》 E.《嵌入式 Linux 基礎(chǔ)教材》 F.《嵌入式系統(tǒng)設(shè)計(jì)》 G.《嵌入式硬件設(shè)計(jì)》 H.《Qt4 圖形設(shè)計(jì)與嵌入式系統(tǒng)開發(fā)》 I.《嵌入式系統(tǒng)中的實(shí)時(shí)概念》 J.《實(shí)時(shí)設(shè)計(jì)模式》 5.專業(yè)選看 A.FPGA 設(shè)計(jì) B.《高性能嵌入式計(jì)算》 C.數(shù)字圖像處理,視頻編解碼基礎(chǔ) MPEG4,H.264,AVS D.Android,iphone,symbian 開發(fā)。
第四篇:大數(shù)據(jù)學(xué)習(xí)路線
大數(shù)據(jù)學(xué)習(xí)路線
年薪30W大數(shù)據(jù)學(xué)習(xí)路線圖:
一、Hadoop入門,了解什么是Hadoop
1、Hadoop產(chǎn)生背景
2、Hadoop在大數(shù)據(jù)、云計(jì)算中的位置和關(guān)系
3、國內(nèi)外Hadoop應(yīng)用案例介紹
4、國內(nèi)Hadoop的就業(yè)情況分析及課程大綱介紹
5、分布式系統(tǒng)概述
6、Hadoop生態(tài)圈以及各組成部分的簡介
7、Hadoop核心MapReduce例子說明
二、分布式文件系統(tǒng)HDFS,是數(shù)據(jù)庫管理員的基礎(chǔ)課程
1、分布式文件系統(tǒng)HDFS簡介
2、HDFS的系統(tǒng)組成介紹
3、HDFS的組成部分詳解
4、副本存放策略及路由規(guī)則
5、NameNode Federation
6、命令行接口
7、Java接口
8、客戶端與HDFS的數(shù)據(jù)流講解
9、HDFS的可用性(HA)
三、初級MapReduce,成為Hadoop開發(fā)人員的基礎(chǔ)課程
1、如何理解map、reduce計(jì)算模型
2、剖析偽分布式下MapReduce作業(yè)的執(zhí)行過程
3、Yarn模型
4、序列化
5、MapReduce的類型與格式
6、MapReduce開發(fā)環(huán)境搭建
7、MapReduce應(yīng)用開發(fā)
8、更多示例講解,熟悉MapReduce算法原理
四、高級MapReduce,高級Hadoop開發(fā)人員的關(guān)鍵課程
1、使用壓縮分隔減少輸入規(guī)模
2、利用Combiner減少中間數(shù)據(jù)
3、編寫Partitioner優(yōu)化負(fù)載均衡
4、如何自定義排序規(guī)則
5、如何自定義分組規(guī)則
6、MapReduce優(yōu)化
7、編程實(shí)戰(zhàn)
五、Hadoop集群與管理,是數(shù)據(jù)庫管理員的高級課程
1、Hadoop集群的搭建
2、Hadoop集群的監(jiān)控
3、Hadoop集群的管理
4、集群下運(yùn)行MapReduce程序
六、ZooKeeper基礎(chǔ)知識,構(gòu)建分布式系統(tǒng)的基礎(chǔ)框架
1、ZooKeeper體現(xiàn)結(jié)構(gòu)
2、ZooKeeper集群的安裝
3、操作ZooKeeper
七、HBase基礎(chǔ)知識,面向列的實(shí)時(shí)分布式數(shù)據(jù)庫
1、HBase定義
2、HBase與RDBMS的對比
3、數(shù)據(jù)模型
4、系統(tǒng)架構(gòu)
5、HBase上的MapReduce
6、表的設(shè)計(jì)
八、HBase集群及其管理
1、集群的搭建過程講解
2、集群的監(jiān)控
3、集群的管理
九、HBase客戶端
1、HBase Shell以及演示
2、Java客戶端以及代碼演示
十、Pig基礎(chǔ)知識,進(jìn)行Hadoop計(jì)算的另一種框架
1、Pig概述
2、安裝Pig
3、使用Pig完成手機(jī)流量統(tǒng)計(jì)業(yè)務(wù)
十一、Hive,使用SQL進(jìn)行計(jì)算的Hadoop框架
1、數(shù)據(jù)倉庫基礎(chǔ)知識
2、Hive定義
3、Hive體系結(jié)構(gòu)簡介
4、Hive集群
5、客戶端簡介
6、HiveQL定義
7、HiveQL與SQL的比較
8、數(shù)據(jù)類型
9、表與表分區(qū)概念
10、表的操作與CLI客戶端演示
11、數(shù)據(jù)導(dǎo)入與CLI客戶端演示
12、查詢數(shù)據(jù)與CLI客戶端演示
13、數(shù)據(jù)的連接與CLI客戶端演示
14、用戶自定義函數(shù)(UDF)的開發(fā)與演示
十二、Sqoop,Hadoop與rdbms進(jìn)行數(shù)據(jù)轉(zhuǎn)換的框架
1、配置Sqoop
2、使用Sqoop把數(shù)據(jù)從MySQL導(dǎo)入到HDFS中
3、使用Sqoop把數(shù)據(jù)從HDFS導(dǎo)出到MySQL中
十三、Storm
1、Storm基礎(chǔ)知識:包括Storm的基本概念和Storm應(yīng)用
場景,體系結(jié)構(gòu)與基本原理,Storm和Hadoop的對比
2、Storm集群搭建:詳細(xì)講述Storm集群的安裝和安裝時(shí)常見問題
3、Storm組件介紹: spout、bolt、stream groupings等
4、Storm消息可靠性:消息失敗的重發(fā)
5、Hadoop 2.0和Storm的整合:Storm on YARN
6、Storm編程實(shí)戰(zhàn)
第五篇:JAVA學(xué)習(xí)路線
1.JAVA學(xué)習(xí)路線
1.1 基礎(chǔ)語法及JAVA原理
基礎(chǔ)語法和JAVA原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險(xiǎn)的。學(xué)習(xí)JAVA也是如此,必須要有扎實(shí)的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。參加SCJP(SUN公司認(rèn)證的JAVA程序員)考試不失為一個(gè)好方法,原因之一是為了對得起你交的1200大洋考試費(fèi),你會(huì)更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉JAVA基礎(chǔ)知識;但是你千萬不要認(rèn)為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險(xiǎn)的。獲得“真正”的SCJP只能證明你的基礎(chǔ)還過得去,但離實(shí)際開發(fā)還有很長的一段路要走。
1.2 OO思想的領(lǐng)悟
掌握了基礎(chǔ)語法和JAVA程序運(yùn)行原理后,我們就可以用JAVA語言實(shí)現(xiàn)面向?qū)ο蟮乃枷肓?。面向?qū)ο螅且环N方法學(xué);是獨(dú)立于語言之外的編程思想;是CBD基于組件開發(fā)的基礎(chǔ);屬于強(qiáng)勢技術(shù)之一。當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z言的時(shí)候,你會(huì)感到特別的熟悉親切,學(xué)起來像喝涼水這么簡單。
使用面向?qū)ο蟮乃枷脒M(jìn)行開發(fā)的基本過程是:
●調(diào)查收集需求。
●建立用例模型。
●從用例模型中識別分析類及類與類之間的靜態(tài)動(dòng)態(tài)關(guān)系,從而建立分析模型。
●細(xì)化分析模型到設(shè)計(jì)模型。
●用具體的技術(shù)去實(shí)現(xiàn)。
●測試、部署、總結(jié)。
1.3 基本API的學(xué)習(xí)
進(jìn)行軟件開發(fā)的時(shí)候,并不是什么功能都需要我們?nèi)?shí)現(xiàn),也就是經(jīng)典名言所說的“不需要重新發(fā)明輪子”。我們可以利用現(xiàn)成的類、組件、框架來搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實(shí)現(xiàn)一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調(diào)用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個(gè)數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,JAVA DOC文檔(參考文獻(xiàn)4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔。
基本API指的是實(shí)現(xiàn)了一些底層功能的類,通用性較強(qiáng)的API,如字符串處理/輸入輸
出等等。我們又把它成為類庫。熟悉API的方法一是多查JAVA DOC文檔(參考文獻(xiàn)4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。
1.4 特定API的學(xué)習(xí)
JAVA介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進(jìn)行網(wǎng)絡(luò)游戲開發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開發(fā),就需要熟悉Servlet等API啦??傊枰鶕?jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。
1.5 開發(fā)工具的用法
在學(xué)習(xí)基礎(chǔ)語法與基本的面向?qū)ο蟾拍顣r(shí),從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時(shí)候不要急于上手JBuilder/Eclipse等集成開發(fā)環(huán)境,以免過于關(guān)注IDE的強(qiáng)大功能而分散對JAVA技術(shù)本身的注意力。過了這一階段你就可以開始熟悉IDE了。
程序員日常工作包括很多活動(dòng),編輯、編譯及構(gòu)建、調(diào)試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項(xiàng)活動(dòng)都有專門的工具,如果獨(dú)立使用這些工具的話,你將會(huì)很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯(cuò)。在JBuilder、Eclipse等IDE中已經(jīng)自動(dòng)集成編輯器、編譯器、調(diào)試器、單元測試工具JUnit、自動(dòng)構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進(jìn)去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開發(fā)變得更輕松。應(yīng)該說IDE發(fā)展的趨勢就是集成軟件開發(fā)中要用到的幾乎所有工具。
從開發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個(gè)學(xué)生到一個(gè)職業(yè)程序員轉(zhuǎn)變的里程碑。
JAVA開發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場份額是最大的。JBuilder在近幾年來一直是JAVA集成開發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開發(fā),在硝煙彌漫的JAVA IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for JAVA等而成就一番偉業(yè)。IBM在Visual Age for JAVA上已經(jīng)無利可圖之下,干脆將之貢獻(xiàn)給開源社區(qū),成為Eclipse的前身,真所謂“柳暗花明又一村”。浴火重生的Eclipse以其開放式的插件擴(kuò)展機(jī)制、免費(fèi)開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發(fā)展?jié)摿Α?/p>
2.學(xué)習(xí)要點(diǎn)
確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下JAVA的學(xué)習(xí)要點(diǎn),這些要點(diǎn)在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進(jìn)行匯總,不要嫌我婆婆媽媽啊。
2.1勤查API文檔
當(dāng)程序員編寫好某些類,覺得很有成就感,想把它貢獻(xiàn)給各位苦難的同行。這時(shí)候你要使用“javadoc”工具(包含在JDK中)生成標(biāo)準(zhǔn)的JAVA DOC文檔,供同行使用。
J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址:。
對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。
當(dāng)需要某項(xiàng)功能的時(shí)候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒有現(xiàn)成的實(shí)現(xiàn),有的話就不必勞神費(fèi)心了直接用就可以了,找不到的時(shí)候才考慮自己實(shí)現(xiàn)。使用步驟一般如下:
●找特定的包,包一般根據(jù)功能組織。
●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二。
●選擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對象。
●選擇你需要的方法。
2.2 查書/google->寫代碼測試->查看源代碼->請教別人
當(dāng)我們遇到問題的時(shí)候該如何解決?
這時(shí)候不要急著問別人,太簡單的問題,沒經(jīng)過思考的問題,別人會(huì)因此而瞧不起你。可以先找找書,到google中搜一下看看,絕大部分問題基本就解決了。而像“某些類/方法如何使用的問題”,DOC文檔就是答案。對某些知識點(diǎn)有疑惑是,寫代碼測試一下,會(huì)給你留下深刻的印象。而有的問題,你可能需要直接看API的源代碼驗(yàn)證你的想法。萬不得已才去請教別人。
2.3學(xué)習(xí)開源軟件的設(shè)計(jì)思想
JAVA領(lǐng)域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進(jìn)行分析,領(lǐng)會(huì)其中的設(shè)計(jì)思想,有朝一日說不定你也能寫一個(gè)XXX框架什么的,風(fēng)光一把。分析開源軟件其實(shí)是你提高技術(shù)、提高實(shí)戰(zhàn)能力的便捷方法。
2.4 規(guī)范的重要性
沒有規(guī)矩,不成方圓。這里的規(guī)范有兩層含義。第一層含義是技術(shù)規(guī)范,多到
http:///docs/codeconv/,中文的也有,啊,還要問我在哪,請參考3.2.2節(jié)。
2.5 不局限于JAVA
很不幸,很幸運(yùn),要學(xué)習(xí)的東西還有很多。不幸的是因?yàn)橐獙W(xué)的東西太多且多變,沒時(shí)間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。幸運(yùn)的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達(dá)成心愿。
JAVA不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫技術(shù)等知識。
軟件工程的由來
據(jù)說上個(gè)世紀(jì)60年代的程序員都是天才,寫程式就像寫日記一樣,吃過晚飯沒事干隨手就可以寫幾個(gè)出來玩,第二天還可以拿去賣錢。所以那時(shí)候程序員在大家眼中,跟那些搞美術(shù),音樂的是一類的,被稱為“藝術(shù)家”。
但事過境遷,就像任何人都不會(huì)嫌錢多一樣,永遠(yuǎn)都不會(huì)有人嫌CPU快的。于是,隨之而來的就是硬件的迅猛發(fā)展和越來越變態(tài)的軟件。記得以前常去同學(xué)家拷游戲,通常幾張軟盤就可以搞定,而現(xiàn)在的游戲,兩三張CD-ROM都算少的了。像如此龐大復(fù)雜的怪物,就算你是如何的天才,一個(gè)人肯定是搞不定的,否則,等你把程式寫出來,人家Intel連奔騰N都開發(fā)出來了。既要開發(fā)大型的軟件還要追求速度(這樣才能賺錢),于是很自然地,合作的概念被提了出來。
在開始合作的初期,由于大家都習(xí)慣了當(dāng)很有個(gè)性的“藝術(shù)家”,結(jié)果可想而知,一個(gè)是畢加索派的,而另一個(gè)是意大利印象派的,再加上一個(gè)畫潑墨山水畫的,要是像這樣湊出來的東西都能不出問題的話,那么Bill早就轉(zhuǎn)行了。所以,那時(shí)侯的大型軟件,據(jù)說“藍(lán)屏”比WINDOWS 98還多。
馬克思告訴我們,萬物都是從量變到質(zhì)變的。隨著問題的不斷涌現(xiàn),一些master們開始嘗試去總結(jié)經(jīng)驗(yàn),并歸納了一些規(guī)范去指導(dǎo)軟件的分析,設(shè)計(jì),實(shí)現(xiàn),測試,維護(hù),人員交流協(xié)作,項(xiàng)目預(yù)算及時(shí)限控制等方方面面,這就是軟件工程的前身。
軟件工程到現(xiàn)在已發(fā)展了30多年,可以說是相當(dāng)成熟的了?,F(xiàn)在開發(fā)軟件,據(jù)說都是一大幫人排排坐,按著一整套的規(guī)章制度來干活。于是,軟件開發(fā)成了“工程”,程序員也就淪為“工人”了。
最初提出問題的是Dijkstra。他于1968年寫給ACM的一封題為Goto Statement
Considered Harmful 的信中,指出了GOTO語句的負(fù)面作用,并提出了解決之道,其引發(fā)的一系列效應(yīng)最終帶來了軟件工程的誕生。(信的原文可在www.tmdps.cn/classics/oct95 上看到,不過,當(dāng)你看到本文的時(shí)候,天知道它還在不在那里?。?/p>
軟件工程的核心
無論是在上個(gè)世紀(jì)還是在現(xiàn)在,軟件開發(fā)所涉及的工作基本上都沒有變化,它們都起始于一個(gè)實(shí)際需要或某個(gè)靈感,然后就是分析,設(shè)計(jì),編碼,調(diào)試,維護(hù)。這些任務(wù)以某種方式動(dòng)態(tài)地結(jié)合起來就構(gòu)成了軟件開發(fā)的整個(gè)過程,這就是所謂的“軟件開發(fā)周期”。
但對于這些工作,具體怎樣做,什么時(shí)候做,每個(gè)人都有自己的一套方式,甚至有的人有幾套方式。這樣,當(dāng)幾個(gè)人合在一起干活的時(shí)候,最終的結(jié)果就只能是一片混亂。所以就需要一套規(guī)則,大家都按規(guī)則來辦事,問題就會(huì)少得多。好的規(guī)則就叫做規(guī)范,規(guī)范都是由一些master們根據(jù)經(jīng)驗(yàn)總結(jié)的,又經(jīng)過長時(shí)間的歷練,不斷地被補(bǔ)充修正,可以說都是精華,按照規(guī)范來干活,對于提高軟件質(zhì)量和工作效率自然大有幫助。
而軟件工程,說白了,就是這樣一套用于軟件的團(tuán)隊(duì)開發(fā),以提高軟件質(zhì)量和程序員工作效率為目的的規(guī)范。其核心就是,對于軟件開發(fā)的5個(gè)重要組成部分:需求分析,設(shè)計(jì),編碼,調(diào)試,維護(hù),如何組織這5個(gè)部分的工作,以及如何完成每一個(gè)工作。簡單來說,就是對于總體的組織和對于局部的實(shí)現(xiàn)。
規(guī)范只是提供一個(gè)好的例子,以描述一種思想,具體到每一個(gè)環(huán)節(jié)怎樣實(shí)現(xiàn),對于不同的公司或團(tuán)體則是各有千秋,因?yàn)楦揪筒豢赡艽嬖谝惶追胖煜陆钥尚械臉?biāo)準(zhǔn)。就像C++,也只是提供了一套標(biāo)準(zhǔn),不同的編譯器都有各自的實(shí)現(xiàn),對標(biāo)準(zhǔn)的支持程度也互不相同。所以,在不同的公司或團(tuán)體中,盡管核心思想都是大同小異,但具體到每一個(gè)步驟,往往都是不相同的。我手上就有一份GB8567-88的文檔模板,對于那些頂多只有幾千行的小程序來說,假如真按上面的要求全寫上了,簡直就是一種折磨!據(jù)說,當(dāng)前業(yè)界最權(quán)威的標(biāo)準(zhǔn)是CMM。
軟件開發(fā)過程的組織
如何組織軟件開發(fā)過程中的每一個(gè)步驟,就是軟件開發(fā)周期模型要解決的問題。其實(shí)開發(fā)軟件,就像是解決一個(gè)邏輯問題。想想自己平時(shí)是怎樣寫程序的。首先是要有一個(gè)想法,即我寫的這個(gè)程序是要干什么的;然后就是對要實(shí)現(xiàn)的核心功能大概構(gòu)思一種或多種實(shí)現(xiàn)方法,并從中選出一種自認(rèn)為是較好的;接下來就是將涉及的各種主要或次要功能分成各個(gè)模塊;最后就是分模塊來編碼和DEBUG。在我看來,除了第一步外,其余的步驟應(yīng)該是一個(gè)循環(huán)的過程。在編碼的過程中,你總是需要不斷地回過頭來修改原先的模塊設(shè)計(jì),甚至最初選定的實(shí)現(xiàn)算法。例如,最簡單的情況是,你通常都會(huì)突然發(fā)現(xiàn)在兩個(gè)成員函數(shù)中有相同的代碼,這時(shí),程序員的直覺告訴你,你應(yīng)該為你的類再添加一個(gè)private成員函數(shù)并將公共的代碼放于其中;又或者是,你突然發(fā)現(xiàn)一個(gè)模塊中的某個(gè)功能具有很高的通用性,完全可以提取出來作為一個(gè)獨(dú)立的功能組件,而你也確實(shí)應(yīng)該這樣做;要是倒霉一點(diǎn)的話,你很有可能會(huì)在最后調(diào)試的時(shí)候突然發(fā)現(xiàn),你的程序跑得太慢了,連你自己都無法忍受。于是你找呀找,終于找到了80/20中的那段可惡的20,原來是用了一個(gè)O(N)的算法,這時(shí)你就得老老實(shí)實(shí)地?fù)Q一個(gè)更好的算法。
總之,除非你是先知,否則,對于一個(gè)具有一定規(guī)模和復(fù)雜度的軟件來說,在“設(shè)計(jì)—編碼”這個(gè)過程中,實(shí)在有太多的不可預(yù)知性和變化性,你根本不可能全盤地把握住每一個(gè)細(xì)節(jié)。當(dāng)然,這是建立在我現(xiàn)時(shí)的水平之上的觀點(diǎn)。我不知道是否成為高手以后會(huì)有所不同,因?yàn)槲疑磉厸]有那樣的人。
既然軟件開發(fā)是一個(gè)具有不可預(yù)知性和變化性的動(dòng)態(tài)的過程,那么,對其每一個(gè)步驟的組織,即周期模型,就必須包容它的這種性質(zhì)。
現(xiàn)在來看一下最古老,最經(jīng)典,同時(shí)也是最倍受批評的瀑布模型。
瀑布模型是一種線性模型,其最大的特點(diǎn)就是簡單直觀。它將軟件開發(fā)過程規(guī)劃為“分析—設(shè)計(jì)—編碼—測試—維護(hù)”的線性過程,也就是說,你必須首先把你的軟件要干的每一件工作都分析得徹徹底底,再對每一個(gè)模塊,每一個(gè)接口,事無巨細(xì),都設(shè)計(jì)得非常完美,然后才開始編碼的工作,并且在編碼的時(shí)候就像在對著圖紙砌模型,根本不用再回頭作任何修改,當(dāng)然,是在把所有的代碼都寫完以后才開始測試的。
整個(gè)過程,光想一下就覺得冒冷汗!
瀑布模型完全忽視了軟件開發(fā)過程的動(dòng)態(tài)變化。恐怕只有那些已經(jīng)發(fā)展得非常成熟,且規(guī)模不大的系統(tǒng),例如:用Access做后臺,用VB畫前端的數(shù)據(jù)庫應(yīng)用程序,才有瀑布模型一展拳腳的地方。
相比之下,現(xiàn)在常用的一些周期模型則更接近于人的自然思維,例如螺旋模型就是一種我比較喜歡的模型。
軟件開發(fā)過程的實(shí)現(xiàn)
具體到每一步的工作要怎樣完成,我前面已提到過,是非常靈活的,只要把握住大體的方向就行。在進(jìn)行分析,設(shè)計(jì),編碼,調(diào)試,維護(hù)這幾部分的工作的時(shí)候,最核心的就是文檔的編寫。文檔的作用在于以下3個(gè)方面:一是可以幫助整理思路。把要完成的目標(biāo),系統(tǒng)的結(jié)構(gòu),每一個(gè)模塊的功能等整理一下,然后分門別類地寫下來,這樣在開發(fā)的過程中,就有據(jù)可依,在需要回過頭來修改設(shè)計(jì)的時(shí)候,也有證可考。二是便于交流。想象一下開會(huì)時(shí)的情形。一大幫子人爭先恐后,激烈辯論,然后會(huì)終人散,思想靈感也就隨之散了,結(jié)果是開了半天會(huì),什么也沒討論出來。這就是后來會(huì)議記錄被發(fā)明出來的原因。在腦子里的東西一多,就會(huì)散而且亂,用語言表達(dá)的時(shí)候,很容易會(huì)丟三落四,別人也很難把握住你的思想。但經(jīng)過整理寫在紙上以后,則會(huì)清晰得多,無論是別人還是自己,看起來都可以一目了然。三是可以作為以后維護(hù)時(shí)的參考資料。有一句名言:“筆和紙永遠(yuǎn)都比大腦可靠”,意思就是說,放在大腦里的東西說不準(zhǔn)哪天就忘了,但寫在紙上的東西,只要不發(fā)生什么意外,一般是丟不了的。當(dāng)過了一段時(shí)間,你需要再回過頭來修改你的程序的時(shí)候,你就會(huì)發(fā)現(xiàn),你以前寫下的文檔實(shí)在太有價(jià)值了。別指望你的源代碼,對于復(fù)雜一點(diǎn)的程序來說,單純的源代碼幾乎會(huì)扼殺掉你所有的時(shí)間。
至于文檔怎樣寫,教科書上大多都是一條一條列得滿滿的,就像一些地方政府的規(guī)章制度一樣,其實(shí)大可不必,只要能滿足需要就行。如果是在公司,則每個(gè)公司大多都有一套自己內(nèi)部的文檔模板,個(gè)人沒有選擇的余地。而對于像我這種業(yè)余的,寫個(gè)程序除了練練手藝,無非就是供自己和親朋好友玩玩,則根本沒必要搞得過于復(fù)雜。以下就是我自己的一份文檔模板的概要,麻雀雖小,但五臟俱全。
可行性分析 就是關(guān)于當(dāng)前項(xiàng)目能不能干的分析結(jié)果。主要考慮的方面包括:是否能把這個(gè)項(xiàng)目開發(fā)出來;假如可以的話,預(yù)計(jì)需要多少時(shí)間,能否滿足客人的時(shí)間要求;需要多少人力和資金的投入;最重要的是,這個(gè)項(xiàng)目能否賺錢,能賺多少。還要對可能存在的風(fēng)險(xiǎn)進(jìn)行評估,例如,萬一項(xiàng)目主管被車撞了要怎么辦。當(dāng)然,這對于我來說毫無意義,我在這里寫上只是為了保持完整而已。
項(xiàng)目描述 這是在決定立項(xiàng)以后,對當(dāng)前項(xiàng)目的一份扼要說明。必須包括以下幾個(gè)方面:
(1)項(xiàng)目的名稱或編號;(2)對客戶方的描述;(3)對開發(fā)人員的描述;(4)工程任務(wù)的描述;(5)工程的輸入和輸出;(6)開發(fā)環(huán)境;(7)其他的附加條件。在這里,對工程任務(wù)的描述是從整體的角度來說的,例如:能對當(dāng)前的象棋棋局進(jìn)行分析并作出最優(yōu)決策的人工智能系統(tǒng)。而工程的輸入輸出則可以這樣寫:輸入當(dāng)前的象棋棋局的數(shù)據(jù)描述;輸出最優(yōu)的棋步,包括選擇行動(dòng)的棋子和步法。
需求分析 就是對客戶要求的功能的定義。注意這里用了“定義”這個(gè)詞,這就意味著對客戶需求的說明,盡管不一定要是形式定義,但也必須是精確,無歧義的。同時(shí),還要列
出程序的功能模塊和邏輯流程,即與客戶的每一項(xiàng)功能要求對應(yīng)的程序功能模塊有哪些以及這些功能模塊是按照怎樣的邏輯步驟來逐項(xiàng)完成客戶的要求的。注意這里所說的功能模塊與編碼時(shí)所說的程序模塊的區(qū)別。對于客戶的一個(gè)復(fù)雜的功能要求,一般可以用分治法分為一個(gè)或多個(gè)子功能,每一個(gè)子功能對應(yīng)一個(gè)功能模塊,而每一個(gè)功能模塊則可以由一個(gè)或多個(gè)程序模塊來實(shí)現(xiàn)。功能模塊是建立在設(shè)計(jì)邏輯上的,而程序模塊則是直接面向?qū)崿F(xiàn)的。在用OO編程的時(shí)候,我通常以類作為程序模塊劃分的基本單元。綜上所述,這個(gè)部分的文檔必須包括3個(gè)部分:(1)客戶需求的詳細(xì)描述;(2)程序功能模塊的劃分以及其與客戶需求的對應(yīng)關(guān)系;(3)功能模塊的邏輯流程。
軟件設(shè)計(jì) 這就是對程序的每一個(gè)模塊的詳細(xì)設(shè)計(jì)的說明文檔。其由以下幾部分組成:
(1)程序模塊與功能模塊的對應(yīng)關(guān)系和相關(guān)描述;(2)實(shí)現(xiàn)每個(gè)功能模塊的程序模塊的邏輯流程和組織結(jié)構(gòu);(3)對每一個(gè)程序模塊的詳細(xì)描述。這個(gè)部分的文檔是改動(dòng)得最多的,如果與螺旋周期模型結(jié)合,甚至需要循環(huán)地對每一個(gè)模塊進(jìn)行深入設(shè)計(jì)和細(xì)化,所以,為了便于管理,我通常都對每一個(gè)較復(fù)雜的模塊都單獨(dú)立一份文檔。至于模塊的流程圖或結(jié)構(gòu)圖,一直都是我最頭疼的問題,那一大堆琳瑯滿目的畫法和符號往往令人無所適從。其實(shí)對于個(gè)人來說,只要能把意思表達(dá)出來,想怎樣畫都無所謂,關(guān)鍵是自己要有一套標(biāo)準(zhǔn),別在這個(gè)圖中,矩形表示過程,而在另一個(gè)圖中,則是表示I/O。對每個(gè)符號表示的意思進(jìn)行說明那是必須的,不然別人看起來會(huì)一頭霧水。假如嫌麻煩的話,就干脆使用那些被大多數(shù)人認(rèn)可的標(biāo)準(zhǔn),例如UML圖。但以后如果進(jìn)到公司,還是老老實(shí)實(shí)地按公司規(guī)矩辦事吧。
開發(fā)日志 我一直都認(rèn)為這是文檔中最有趣的部分。開發(fā)日志相當(dāng)于編碼階段的文檔,它的形式可以很隨意,主要是記錄一些在寫程序時(shí)突然萌發(fā)的靈感,或?qū)Υa的一些微小的修改,或?qū)Τ绦蚪Y(jié)構(gòu)的一些微小變動(dòng)等,還要對上述這些修改變動(dòng)作些說明,例如,為什么要改成現(xiàn)在的這個(gè)樣子。別小看這些記錄,它往往會(huì)成為你以后對程序進(jìn)行維護(hù)時(shí)的重要依據(jù)。要知道,人的IQ,EQ等,是會(huì)隨著人的生理和心理狀態(tài)的不同而變化的。在某個(gè)時(shí)刻,你可能會(huì)靈光一閃,做出了一個(gè)非常偉大的改動(dòng),但過了一段時(shí)間,當(dāng)你再回過頭來重新閱讀同一段代碼的時(shí)候,你很有可能只記得在這里的改動(dòng)是非常明智的,可是卻無論如何也想不起其明智在哪里。這時(shí),一份日志就會(huì)省卻你不少的麻煩。
測試分析 用于指出程序存在或潛在的缺陷和錯(cuò)誤,以及程序性能的數(shù)字描述。其包括幾個(gè)部分:(1)對被測模塊的描述;(2)測試人員;(3)對該模塊每個(gè)功能的測試的詳細(xì)描述;(4)指出當(dāng)前存在或潛在的問題。在測試描述中應(yīng)該包括輸入的數(shù)據(jù)集和輸出的結(jié)果,還有運(yùn)行的時(shí)間等。對于公司來說,對測試分析的要求是非常嚴(yán)格的。但對于我個(gè)人來說,我只是將其作為一份模塊測試的文字記錄,以防會(huì)忽略掉某些已知的缺陷和錯(cuò)誤,以及對一些核心模塊的時(shí)間和空間效率進(jìn)行簡單的測試,以便日后翻查。