http://blog.csdn.net/fuchunyi/archive/2006/10/22/1345708.aspx
這周去拜訪一個客戶,他們正在實施RUP,問及效果如何,聽到了一些關(guān)于迭代化開發(fā)的新問題。
這位客戶是一家集成商,主要為甲方開發(fā)應(yīng)用軟件系統(tǒng)。實施迭代化開發(fā)的主要目的是控制項目風險,應(yīng)用項目的最大風險一般都在于需求,采用迭代化可以通過迭代產(chǎn)生的原型系統(tǒng)來收集甲方客戶的反饋,從而及早修正對于客戶需求的誤解。但是開發(fā)團隊并沒有象預想中那樣收集到甲方的反饋,甲方還是習慣于用傳統(tǒng)的瀑布模型來評價、驗收系統(tǒng),他們并沒有對項目過程中交付的原型系統(tǒng)進行認真的確認,所以也沒有太多的意見反饋給開發(fā)團隊,很多需求的變更還是要到系統(tǒng)正式驗收時才被提出來。因為在甲方的觀念中,他們還不太認可項目結(jié)束之前所提交的中間結(jié)果。
另外,項目的合同是按照瀑布模型的階段來簽的,需求分析、概要設(shè)計、詳細設(shè)計、編碼完成、驗收測試是項目回款的里程碑。采用迭代化開發(fā)之后,在原定的概要設(shè)計交付時間點上,可能需求分析和概要設(shè)計都只完成了部分的工作,比原定計劃要晚一些;而詳細設(shè)計和編碼工作都已經(jīng)開始了一部分,比原定計劃要提前一些。這樣就不能按照原定時間點來要求甲方就需求分析和概要設(shè)計那部分工作量付款,對于中國的集成商而言,項目回款是比合同簽定都要重要的工作。
這些問題給我們的經(jīng)驗教訓是應(yīng)用項目開發(fā)采用迭代化開發(fā)流程,也需要讓客戶理解這一點,項目工作說明書中的工作單元內(nèi)容也需要跟迭代化開發(fā)流程來符合。軟件開發(fā)流程關(guān)系到所有的涉眾(Stakeholder),僅僅是開發(fā)團隊理解并實施這一流程是不夠的。
還有一個反饋來自于很多項目團隊,認為迭代化開發(fā)概念上聽起來很有道理,但在項目中實施后往往感覺不到采用這處方法后對項目有什么太大的幫助。迭代化開發(fā)的主要目的在于控制項目風險,常見的項目風險如技術(shù)架構(gòu)、客戶需求等等。但是日常工作中的項目往往沒有太多的風險,我們開發(fā)的往往是重復性的項目,電信事業(yè)部做的就是不同運營商的BOSS項目,社保事業(yè)部就是為不同省份開發(fā)社保系統(tǒng),雖然有特殊需求,但系統(tǒng)架構(gòu)和基本需求完全一樣;更多的項目是對現(xiàn)有系統(tǒng)的維護性開發(fā),實現(xiàn)客戶提出的變更請求和改正軟件缺陷,一般不會涉及到系統(tǒng)架構(gòu)的改動。在這種類型的項目中,迭代化開發(fā)體現(xiàn)的不是對風險的控制,而是系統(tǒng)增量式開發(fā)而不斷給涉眾所帶來的信心和鼓舞,開發(fā)人員可以在較斷的時間周期內(nèi)看到自己所開發(fā)的系統(tǒng)可以“跑”起來了,客戶則可以看到整個項目在不斷地往前推進。
媽的, 想起來就有氣, 現(xiàn)在的公務(wù)員一個比一個牛, 本來應(yīng)該為人民服務(wù), 態(tài)度卻一個比一個差....
最近想辦居住證續(xù)辦, 想打個電話咨詢一下, 試了N多個, 有的 還好借了告訴你個號碼, 讓你去打, 但一直戰(zhàn)線, 更有的那起來就掛掉, 拿起來就掛,,,,,,
TNND!!!!
http://www.bcb-tools.com/AuthorNotes.htm
http://dotnet.csdn.net/n/20061011/95958.html
微軟首席執(zhí)行官鮑爾默表示,提前部署(on-premise)軟件與通過互聯(lián)網(wǎng)發(fā)布的服務(wù)之間的界線在日益模糊,微軟正在順應(yīng)這一業(yè)界趨勢。
鮑爾默在Gartner 的Symposium/ITxpo 會議上接受了Gartner分析師史密斯和伊馮的采訪。鮑爾默在采訪中說,許多網(wǎng)站可以被稱作“點擊運行”,服務(wù)通過網(wǎng)站發(fā)布,但在PC上運行。
他表示,我認為我們正處于一種轉(zhuǎn)型中,軟件正在由前互聯(lián)網(wǎng)時代發(fā)展到我們所謂的“Live時代”,網(wǎng)站提供了“點擊運行”能力,但軟件仍然需要在PC上運行。
由于有大量的臺式機和服務(wù)器軟件產(chǎn)品,與Salesforce.com或Google相比,微軟對托管服務(wù)的態(tài)度還不夠積極。
據(jù)鮑爾默稱,微軟計劃推出面向消費者和企業(yè)客戶的服務(wù)化軟件,提供通過互聯(lián)網(wǎng)的服務(wù)和企業(yè)防火墻后面的服務(wù)器。
去年,微軟將Windows 和開發(fā)者工具部門與負責MSN Web 服務(wù)的部門進行了整合,它目前正在開發(fā)一系列名為Live的托管服務(wù),其中一些服務(wù)旨在補充現(xiàn)有的“提前安裝”軟件。
鮑爾默表示,軟件+ 服務(wù)與服務(wù)化軟件之間的差別在于人們是否想利用手機、PC的處理能力。甚至考查一下目前的互聯(lián)網(wǎng)服務(wù),它們也都使用了客戶端的處理能力,例如AJAX、即時通訊服務(wù)。
鮑爾默表示,在這一服務(wù)化大潮中,盡管不能永遠保持第一,但微軟不會放棄。他說,我們或許不是第一,但我們在不斷努力。在搜索方面也是一樣,我們不會輕言放棄。
親愛的技術(shù)支持: 我急需您的幫助。我最近將"女朋友7.0"升級到"妻子1.0",發(fā)現(xiàn)這個新程序意外地啟動了孩子生產(chǎn)程序,而且占用了大量的空間和珍貴的資源。這在產(chǎn)品的使用手冊中沒有提到。 此外"妻子1.0"自動將自己安裝到其他的所有的程序中,它隨系統(tǒng)同時啟動,監(jiān)控整個系統(tǒng)的狀態(tài)。 "男人夜出2.5"和"高爾夫5.3"無法再運行,一旦運行該程序系統(tǒng)即行崩潰。試圖運行 "周日足球6.3"經(jīng)常失敗,而"周六購物7.1"卻代之運行??磥砦覠o法保留"妻子1.0",因為它和我喜歡運行的任何程序都不相容。我打算回到"女朋友7.0",可是這個程序又無法卸載。 請您幫幫我吧! 喬 給喬的回信: 親愛的喬:這是個很普通的問題,產(chǎn)生于你對基本原理的不了解。很多的男人健"女朋友7.0"升級到"妻子1.0",以為"妻子1.0"是一個"實用與娛樂程序"。然而"妻子1.0"卻是個操作系統(tǒng),是被設(shè)計用來運行所有程序的。你不可能清除"妻子1.0",也不可能回到"女朋友7.0",因為"妻子1.0"的設(shè)計中不具有這個功能,無論是卸載、刪除或是清除已經(jīng)安裝在系統(tǒng)中的這些程序文件,都是不可能的。 有些人曾試圖安裝"女朋友8.0"或者"妻子2.0",結(jié)果是產(chǎn)生了更多的問題(參見手冊中的贍養(yǎng)費/孩子的養(yǎng)育/律師費用)。我安裝過"妻子1.0",我建議你保持現(xiàn)在的安裝狀態(tài),妥善解決遇到的困難。 當任何錯誤或問題出現(xiàn)的時候,不論你認為是什么原因引起的,你必須運行"C:\我道歉"程序,并且避免使用"退出鍵"。必要時可能需要運行"C:\我道歉"多次,希望最終能使操作系統(tǒng)恢復到初始狀獺。 "妻子1.0"雖然是一個需要高保養(yǎng)的程序,但同時對人可能是非常有益的。要想充分地利用它,需要買些額外的軟件比如"鮮花2.0"和"巧克力5.0"。不要在任何情況下安裝"秘書(短裙版)",因為"妻子1.0"不支持這種程序,而且系統(tǒng)多數(shù)時候肯定會崩潰。 祝你好運!
Life like a long run contest
e.g 3000 meters.
sb abort it at 1000 meters.
sb abort at 2000
but only ones who finished running are sucessfully.
But who will became these ones???
http://www.javaresearch.org/article/showarticle.jsp?column=2&thread=32387
摘要
我們常常在Web應(yīng)用中需要啟動一個自己寫的服務(wù),本文的目的是給你提供一個解決方案。
原理
本方案的原理是寫一個實現(xiàn)了ServletContextListener接口的類,該類中有兩個方法: public void contextInitialized(ServletContextEvent sce),它是在應(yīng)用啟動時調(diào)用;另一個方法是:public void contextDestroyed(ServletContextEvent sce),該方法是在應(yīng)用結(jié)束時調(diào)用。把我們要啟動的后臺應(yīng)用邏輯放在contextInitialized方法中實現(xiàn);把釋放后臺應(yīng)用占用資源的工作放在contextDestroyed來處理。但我們啟動的后臺任務(wù)常常是有要求的,比如時間,頻率等,我在這里使用了一個開源組件:quartz。
步驟
1.寫業(yè)務(wù)調(diào)用類:
// DumbJob.java
import org.quartz.*;
import java.util.*;
public class DumbJob implements Job {
public DumbJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException
{
//在這里寫業(yè)務(wù)處理代碼。什么,你不知道?那你別問我?。?-<
}
}
本類的主要功能是由quartz中調(diào)度類按照指定的規(guī)則進行調(diào)用執(zhí)行必要的業(yè)務(wù)邏輯。
2.寫調(diào)度類
// TestShedule.java
import org.quartz.*;
import java.util.*;
public class TestShedule{
static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
static Scheduler sched;
public static void run()throws Exception{
sched = schedFact.getScheduler(); //獲取調(diào)度管理器
JobDetail jobDetail = new JobDetail("myJob",
sched.DEFAULT_GROUP,
DumbJob.class);//創(chuàng)建工作
CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//創(chuàng)建觸發(fā)器
sched.scheduleJob(jobDetail, trigger); //添加到調(diào)度管理器中
sched.start();//啟動調(diào)度管理器
}
public static void stop()throws Exception{
sched.shutdown();
}
}
本類的目的是設(shè)置調(diào)用規(guī)則,在這里我用了“0/10 * * * * ?”表示每10秒鐘就執(zhí)行一次,有關(guān)表達式的說明請參閱quartz的api文檔。
3.編寫服務(wù)啟動類:
//ServiceLoader.java
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ServiceLoader implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
try{
TestShedule.run();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
public void contextDestroyed(ServletContextEvent sce) {
try{
TestShedule.stop();
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
在contextInitialized中調(diào)用TestShedule.run()啟動后臺任務(wù);在contextDestroyed中調(diào)用TestShedule.stop()停止后臺任務(wù)。
4.部署服務(wù)啟動類
在web.xml文件中增加如下一行配置:
rootServiceLoader index.html
5.啟動web服務(wù)即可。
總結(jié)
其實實現(xiàn)這個功能的方法很多,我在這里是應(yīng)用了ServletContextListener接口和開源api quartz,希望能對你的開發(fā)有所幫助。
資源
quartz: http://www.opensymphony.com/quartz
ServletContextListener在javax.servlet包中
http://blog.csdn.net/myan/archive/2006/09/25/1281151.aspx
相信很多人都聽過一個禪宗故事,說是兩個僧人趕路,趟過一條小河的時候,看到一個漂亮的少婦困于其中,向他們呼救。其中一個有心施以援手,但想到佛家的色戒,便猶豫起來,不知如何是好。可另一個和尚卻大大咧咧地沖過去,抱起少婦,趟過小河。于是前者的心里就很不舒服,一路上悶悶不語,后來實在忍不住,就問自己的同伴,既然身為佛門中人,怎能不顧清規(guī)戒律,如此輕薄。然而那位和尚卻回過頭來,淡淡地說:“我已經(jīng)把她放下了,你還抱著呢?”
也許不太貼切,但是這幾天中外豪杰們圍繞Ruby和Rail爆發(fā)的口水戰(zhàn),讓我不由得想起這個小故事。
前幾天著名大嘴Joel Spolsky在自己的一畝三分地里對Ruby進行了FUD性的攻擊,引發(fā)互聯(lián)網(wǎng)上一片口水戰(zhàn),Ruby之父matz和Rails之父DHH都卷入其中。似乎是要與此相呼應(yīng),在國內(nèi)技術(shù)論壇上,這幾天圍繞Ruby的爭論也突然攀登新高峰了。國外的大氣候和國內(nèi)的小氣候都有共同特點,就是站在傳統(tǒng)技術(shù)立場上的人對于RoR的火爆看不下去了,首先站出來發(fā)難,從而引發(fā)Ruby支持者們的回擊,然后雙方廝殺在一起,連帶旁邊相干不相干的看熱鬧的、拉架的、含沙射影的、慷慨激昂的,瞬間就浩浩蕩蕩,橫無際涯了。而爭論來爭論去,無非還是Ruby的性能問題、可用性問題、前景問題,等等等等。
可能是老生常談了,但倒R派的觀點讓我想起多年前我們這些C++ fans對Java的鄙視言論。那個時候C++程序員們說,Java只能用來在頁面上用applet作一些可笑的小動畫,Java只能對對火柴棍排序,Java慢得像牛車,Java有內(nèi)存泄露,Java狂耗內(nèi)存,Java愚蠢的弱類型容器可以把鯨魚裝進一個筆筒,Java居然沒有指針,Java做不了系統(tǒng)程序設(shè)計,Java寫不了操作系統(tǒng),Java解決不了我手頭的超超級復雜的巨牛無比的難題,諸如此類,不一而足。冠冕堂皇的理由可以找出一大籮筐,但大皮襖下面無非就是一個“私”字而已。骨子里的想法是,我費了好大的牛勁才混了個C++三品頂戴,你Java一鬧騰,就把我的似錦前程給攪黃了,怎能不妒火中燒,羞憤交加?
可是這些年過去了,當時我們吐那點酸水起了什么作用了嗎?Java統(tǒng)治了企業(yè)計算,統(tǒng)治了手機應(yīng)用開發(fā),統(tǒng)治了大學教育。不但如此,Java在開源領(lǐng)域里也如日中天,接Eclipse之威在桌面應(yīng)用中也占了一座大山頭。一些傳統(tǒng)上屬于系統(tǒng)程序的項目,比如編譯器、語法分析器、高性能的服務(wù)器軟件等等,也大量轉(zhuǎn)用Java開發(fā)。不錯,Java還是不能用來寫F-22戰(zhàn)斗機的火控系統(tǒng),但是這跟我們這些坐在cubic里寫民用軟件的家伙有個鬼的關(guān)系!人們對于簡單、標準化和生產(chǎn)率的要求不可阻遏地突破了早期對Java筑起的FUD防線。面對Java的空前絕后的成功,我們這些當年曾經(jīng)對革命力量翻白眼吐舌頭的家伙,在沉默的面對現(xiàn)實之后,已經(jīng)完成了一次觀念上的滌蕩。我們已經(jīng)認識到,技術(shù)的發(fā)展趨勢是不以個人利益為轉(zhuǎn)移的,干這行就要有順應(yīng)技術(shù)大潮的勇氣,要有不斷破舊立新的魄力。我覺得我已經(jīng)放下了曾經(jīng)有的那種盲目的固執(zhí)和一廂情愿。
然而時間沒過多久,隨著Java成長和騰達起來的一代人(其實不少也就是我的同齡人),又開始重蹈覆轍。面對以Ruby為代表的新興動態(tài)語言的蓬勃發(fā)展,他們也有點坐不住了??扛锩鸺业娜俗钆赂锩斈甑南吕锇腿朔碜鲋髁?,搖身一變成闊佬了,就開始對新的革命力量擺譜使臉色,甚至以FUD戰(zhàn)術(shù)加以彈壓了。與當年如出一轍,手段還是以攻為守,情緒還是慷慨激昂,筆法還是義正言辭,什么Ruby未經(jīng)驗證啦,什么Ruby性能低劣啦,什么Rails可擴展性不佳啦,什么Ruby不能解決“大型的”、“復雜的”、“企業(yè)級的”、“高性能的”問題啦。最要命的是,哪怕自己90%的時間不過是在字符串處理,這些闊佬們也還是一致宣稱自己做著世界一流的、大型的、復雜的、企業(yè)級的、非Java不可、沒Java不行、沒Java就要上吊抹脖子跳樓挖坑的巨牛無比的大項目,聽著讓人心驚肉跳兼之無比崇敬。你說Java還能火幾年?我說怎么也得5年!5年?那是上升期!少說十年,后面還有平臺期。你還別不服,反正我退休之前Java說什么也別想涼下來,誰也別想威脅我的頂戴花翎。企業(yè)級啊,架構(gòu)師啊,經(jīng)驗啊,高手啊,我混成這樣我容易嗎我?誰冒出來我就跟誰急,我就用口水淹死他!
可惜,這些大話對于我這種記性不幸沒那么差勁的人來說,太似曾相識了,讓我一眼就看出這言論背后的“私”字來。想來也真是輪回,當年我們C++這一批人放下的東西,原來你們Java這一批人還抱著呢。不過,技術(shù)的大潮真的是后浪推前浪,往后看吧,我相信,當年C++擋不住的東西,今天Java也擋不住。大趨勢已經(jīng)擺在這了,接不接受、什么時候接受,那是個人的問題,但是總體的發(fā)展是無可逆轉(zhuǎn)的。
Ruby的興起,其實只不過是一個積累了幾十年的技術(shù)趨勢的能量釋放。世界上第二個程序設(shè)計語言Lisp及其后續(xù)家族成員都是最最動態(tài)的語言。早在七十年代,伴隨著圖形界面的出現(xiàn),Smalltalk就以其純粹的面向?qū)ο蠛图兇獾膭討B(tài)性獲得有識之士的認可。自1986年代Perl出現(xiàn)以來,大量開發(fā)者就認識到,動態(tài)語言開發(fā)效率高,限制少,能夠自由的表達思想,輕松完成在傳統(tǒng)語言中非常困難的工作。很多人都預言動態(tài)語言遲早會成為主流。然而在整個1990年代,無論是計算機硬件條件還是軟件工程的水平,都還不夠成熟,再加上Perl自身存在一些問題,動態(tài)語言始終只是作為主流語言的一種有力的補充而存在。2000年之后,PHP大流行,在Web開發(fā)領(lǐng)域三分天下有其一。但是PHP本身完全是為Web而做,當擴展到其他領(lǐng)域時,就凸顯出先天不足的劣勢,因此地主穩(wěn)坐,霸業(yè)難成。直到現(xiàn)在,無論是硬件條件、軟件開發(fā)的方法,還是客觀應(yīng)用環(huán)境都逐漸成熟,在這個時候,Ruby借Rails框架贏得廣泛關(guān)注,當然不是偶然的現(xiàn)象。在TIOBE全球程序設(shè)計語言排名表中,Ruby排名一年間跳升15位,而根據(jù)O’Reilly公司對于圖書市場的統(tǒng)計,Ruby相關(guān)書籍的銷量在2005年增長15倍的基礎(chǔ)之上,今年又增長了7倍,已經(jīng)超過Python和Perl。再看看是誰在關(guān)注Ruby,拋開一手把Ruby炒熱的“Pragmatic Programmer二人組”Dave Thomas和Andy Hunt不說,一大批編程老槍都在嘗試或者已經(jīng)轉(zhuǎn)向Ruby,這其中的著名人物包括Robert C. Martin、Martin Fowler、Bruce Tate等。如果這些還不夠令人印象深刻的話,我們應(yīng)該注意一下近期有關(guān)Ruby的一些事件。最近Sun雇用了開源項目JRuby的兩名主要開發(fā)者,讓他們可以全職開發(fā)JRuby,從而正式將Ruby語言搬上JVM。同時,微軟也在上個月的一次有關(guān).NET語言的技術(shù)會議上邀請RubyCLR的主要開發(fā)者John Lam發(fā)表演講,外界傳言他將加入IronPython開發(fā)者Jim Hugunin所在的團隊,從而加速Ruby for .NET的開發(fā)進程。另一個致力于Rich Internet Application的軟件巨頭Adobe于幾天前剛剛發(fā)布了用以將Flex 2.0整合到Ruby on Rails中的SDK。對于那些整天盯著巨頭們臉色行事的人來說,這些消息就算不是金口玉言,至少也是明確的跡象了吧。
然而,比上面一切都更為重要的是,今天的世界已經(jīng)變了,已經(jīng)不是15年前C++統(tǒng)治一切的那個世界,也不是10年前Java中彩票的那個世界,甚至也不是5年前Visual Basic狂練葵花寶典的那個年代。互聯(lián)網(wǎng)改變了太多的東西,經(jīng)濟形態(tài)和公司業(yè)務(wù)的形式和途徑都已經(jīng)并且仍在發(fā)生迅速的、根本性的變化。開放、互聯(lián)、敏捷、整合、平等、自由、高速、專業(yè),所有這些給我們帶來了新的經(jīng)濟運行模式,也對軟件的開發(fā)提出了新的要求。Ruby,以及Ruby所代表的一類動態(tài)的、自由的程序設(shè)計語言和開發(fā)思想已經(jīng)迎來了它們的時代,它們將和其他的科技一起,在下一個輪回中改變我們的工作,改變我們的生活,改變我們的觀念,直到下下個輪回將它們掃進歷史的功勞簿中為止。
所以,該放下的時候,就勇敢地放下吧。當然,如果想再跟發(fā)展大勢打一打,那就打一打,反正在技術(shù)進步的路上,保守的一方終究是要被解決的。
http://tech.csai.cn/sa/200608111524241005.htm
構(gòu)架師(Architecture)是目前很多軟件企業(yè)最急需的人才,也是一個軟件企業(yè)中薪水最高的技術(shù)人才。換句話說,構(gòu)架師是企業(yè)的人力資本,與人力資源相比其能夠通過構(gòu)架、創(chuàng)新使企業(yè)獲得新的產(chǎn)品、新的市場和新的技術(shù)體系。那么什么是構(gòu)架師、構(gòu)架師的作用、如何定位一個構(gòu)架師和如何成為一個構(gòu)架師呢?這是許多企業(yè)、許多程序員朋友希望知道的或希望參與討論的話題內(nèi)容。
我在此拋磚引玉,就上述幾個問題把我的體會和理解做簡單闡述。
所謂構(gòu)架師通俗的說就是設(shè)計師、畫圖員、結(jié)構(gòu)設(shè)計者,這些定義范疇主要用在建筑學上很容易理解。小時候到河中玩耍,經(jīng)常干的事就是造橋,步驟如下:1、在沙灘上畫圖;2、選擇形狀好看、大小適合的石頭;3、搭建拱橋。其中我們挑出來畫圖的那位光PP小孩就是傳說中的 “構(gòu)架師”了。
在軟件工程中,構(gòu)架師的作用在于三方面:1、行業(yè)應(yīng)用構(gòu)架,行業(yè)構(gòu)架師往往是行業(yè)專家,了解行業(yè)應(yīng)用需求,其構(gòu)架行為主要是將需求進行合理分析布局到應(yīng)用模型中去,偏向于應(yīng)用功能布局;2、應(yīng)用系統(tǒng)技術(shù)體系構(gòu)架,技術(shù)構(gòu)架師往往是技術(shù)高手中的高手,掌握各類技術(shù)體系結(jié)構(gòu)、掌握應(yīng)用設(shè)計模式,其構(gòu)架行為考慮軟件系統(tǒng)的高效性、復用性、安全性、可維護性、靈活性、跨平臺性等;3、規(guī)范構(gòu)架師是通過多年磨礪或常年苦思頓悟后把某一類構(gòu)架抽象成一套構(gòu)架規(guī)范,當然也有專門研究規(guī)范而培養(yǎng)的規(guī)范構(gòu)架師。他們的產(chǎn)物往往也分為應(yīng)用規(guī)范和技術(shù)規(guī)范兩類。
與建筑學類似,如果軟件系統(tǒng)沒有一個好的構(gòu)架是不可能成為成功的軟件系統(tǒng)的。沒有圖紙的建筑工地、沒有設(shè)計的造橋工程都是不可以想象的混亂世界。建筑工程如是,軟件工程中亦然!
由于國內(nèi)合格、勝任的軟件構(gòu)架師極為少見,直接導致了我國民族軟件產(chǎn)業(yè)水平的落后。在未來以信息產(chǎn)業(yè)為主導的社會,信息產(chǎn)業(yè)水平的低下將直接影響國家核心競爭力。究其原因,無企業(yè)非急功近利、個人缺乏引導。
企業(yè)的急功近利是有無法克服的原因的,那就是社會發(fā)展總體水平。“生存是第一位的,賺錢是第一位的”,多年來許多客戶抱怨國內(nèi)的軟件公司無法信任、系統(tǒng)項目累做累敗、公司越換越差,但因國外不可能給中國做應(yīng)用系統(tǒng)項目還不得不找國內(nèi)軟件公司做。由于人月費用低、公司開發(fā)成本高,軟件企業(yè)對于應(yīng)用只能草草了事,拿錢走人(很多公司拿不到后期尾款)。這樣的環(huán)境下,企業(yè)幾乎無法投入更多資源培養(yǎng)自己的構(gòu)架師,加上眼花繚亂的跳槽風氣企業(yè)更是不愿投入……
那么要成為構(gòu)架師的途徑似乎只有現(xiàn)在較為流行的軟件學院和個人自我培養(yǎng)了。關(guān)于軟件學院我接觸過不少,其宗旨絕大部分都是造就(or打造)企業(yè)需要的軟件構(gòu)架師(or程序員or人才)。教師來源與企業(yè)、學員來源與企業(yè)、人才輸送到企業(yè)是他們辦學的手段。盡管各個如雨后春筍般出現(xiàn)的軟件口號差不多,但除了中科院、清華、北大等大院??梢韵嘈乓恍┲?,恐怕更多的就是為了圈錢賣學位了事……我有個朋友二十幾個人的小公司也想搞軟件學院:)
構(gòu)架師不是通過理論學習可以搞出來的,不過不學習相關(guān)知識那肯定是不行的。參考軟件企業(yè)構(gòu)架師需求、結(jié)合北京網(wǎng)暢公司構(gòu)架師培養(yǎng)計劃以及目前構(gòu)架師所需知識,我總結(jié)構(gòu)架師自我培養(yǎng)過程大致如下僅供參考:
1、構(gòu)架師胚胎(程序員)學習的知識是語言基礎(chǔ)、設(shè)計基礎(chǔ)、通信基礎(chǔ)等,應(yīng)該在大學完成,內(nèi)容包括 :java、c、c++、uml、RUP、XML、socket通信(通信協(xié)議)——學習搭建應(yīng)用系統(tǒng)所必須的原材料。
2、構(gòu)架師萌芽(高級程序員)學習分布式系統(tǒng)、組建等內(nèi)容,可以在大學或第一年工作時間接觸,包括 :分布式系統(tǒng)原理、ejb、corba、com/com+、webservice(研究生可以研究網(wǎng)絡(luò)計算機、高性能并發(fā)處理等內(nèi)容)
3、構(gòu)架師幼苗(設(shè)計師)應(yīng)該在掌握上述基礎(chǔ)之上,結(jié)合實際項目經(jīng)驗,透徹領(lǐng)會應(yīng)用設(shè)計模式,內(nèi)容包括:設(shè)計模式(c++版本、java版本)、ejb設(shè)計模式、J2EE構(gòu)架、UDDI、軟件設(shè)計模式等。在此期間,最好能夠了解軟件工程在實際項目中的應(yīng)用以及小組開發(fā)、團隊管理。
4、軟件構(gòu)架師的正是成型在于機遇、個人努力和天賦
軟件構(gòu)架師其實是一種職位,但一個程序員在充分掌握軟構(gòu)架師所需的基本技能后,如何得到這樣的機會、如何利用所掌握的技能進行應(yīng)用的合理構(gòu)架、如何不斷的抽象和歸納自己的構(gòu)架模式、如何深入行業(yè)成為能夠勝任分析、構(gòu)架為一體的精英人才這可不是每個人都能夠遇上的餡餅……
然而學海無涯,精力有限,個人如何能夠很快將這些所謂的構(gòu)架師知識掌握?這是秘密,每個人都有自己的獨門家傳秘笈就不敢一一暴露了。不過有一點就是廣泛學習的基礎(chǔ)之上一定要根據(jù)個人興趣、從事領(lǐng)域確定一條自己的主線來努力