㈠ c語言入門該學些什麼要看些什麼書
究竟怎樣學習C語言呢
1:工欲善其事,必先利其器
這里介紹幾個學習C語言必備的東東:
一個開發環境,例如turbo C 2.0,這個曾經占據了DOS時代開發程序的大半個江山。但是現在windows時代,用turbo C有感覺不方面,編輯程序起來很吃力,並且拖放,更沒有函數變數自動感應功能,查詢參考資料也不方便。建議使用Visual C++,這個東西雖然比較大塊頭,但是一旦安裝好了,用起來很方便。
一本學習教程,現在C語言教材多如牛毛,但推薦大家使用《C語言程序設計》譚浩強主編 第二版 清華大學出版社,此書編寫的很適合初學者,並且內容也很精到。
除此以外,現在有很多輔助學習的軟體,畢竟現在是Window時代了,學習軟體多如牛毛,不象我們當初學習,只有讀書做題這么老套。我向大家推薦一個「集成學習環境(C語言)」,里邊的知識點總結和常式講解都非常好,還有題庫測試環境,據說有好幾千題,甚至還有一個windows下的trubo C,初學者甚至不用裝其它的編譯器,就可以練習編程了,非常適合初學者。還有一個「C語言學習系統」軟體,不過感覺只是一個題庫系統,如果你覺得題做的不夠,不妨也可以試試。
2:葵花寶典
學習計算機語言最好的方法是什麼?答曰:讀程序。
沒錯,讀程序是學習C語言入門最快,也是最好的方法。如同我,現在學習新的J#,C#等其他語言,不再是抱著書本逐行啃,而是學習它們的常式。當然,對於沒有學過任何計算機語言的初學者,最好還是先閱讀教程,學習完每一章,都要認真體會這一章的所有概念,然後不放過這一章中提到的所有常式,然後仔細研讀程序,直到每一行都理解了,然後找幾個編程題目,最好是和常式類似的或一樣的,自己試圖寫出這段已經讀懂的程序,不要以為常式你已經讀懂了,你就可以寫出和它一樣的程序,絕對不一定,不相信你就試一試吧,如果寫不出來,也不要著急,回過頭來再繼續研究常式,想想自己為什麼寫不出來,然後再去寫這段程序,反反復復,直到你手到擒來為止,祝賀你,你快入門了。
3:登峰造極
寫程序的最高境界其實就是掌握各種解決問題的手段(數據結構)和解決問題的方法(演算法)。
是不是寫出底層程序就是程序設計高手呢?非也,寫底層程序,無非是掌握了硬體的結構,況且硬體和硬體還不一樣,要給一個晶元寫驅動程序,無非就是掌握這塊晶元的各種寄存器及其組合,然後寫值讀值,僅此而已。這不過是熟悉一些io函數罷了。那麼怎樣才算精通程序設計呢?怎樣才能精通程序設計呢?舉個例子:你面前有10個人,找出一個叫「張三」的人,你該怎麼辦?第一種方法:直接對這10個人問:「誰叫張三」。第2種方法:你挨個去問「你是不是張三?」,直到問到的這個人就是張三。第三種方法:你去挨個問一個人「你認不認識張三,指給我看」。不要小看這個問題,你說當然會選第一種方法,沒錯恭喜你答對了,因為這個方法最快,效率最高,但是在程序設計中找到解決問題的最優方法和你用的手段卻是考驗一個程序員程序設計水平的重要標志,而且是不容易達到的。剛才這個問題類似於數據結構和演算法中的:Map數據結構,窮舉查找和折半查找。所以掌握好數據結構和一些常用演算法,是登峰造極的必然之路。最後給大家推薦嚴尉敏的《數據結構》清華大學出版社,希望每一個想成為程序設計高手的人研讀此書。
二,語言學習方法
談談偶的學習方法,拋磚引玉!
學習不論講不講方法,最終都能學會。但是別人1個月學會了,而你卻100年才學會,這不就晚了么?:)所以說,學習還是要講究方法的。學習方法正確,事半功倍;學習方法不正確,事倍而功半。
什麼才是學習C語言的捷徑?我的答案是看書。書中所寫,是前人數十年經驗所寫,看十本書,就相當於汲取了前人數十年的功力,那麼你的內功也會迅速上升1甲子。:)書當然要看好書,只有好書才營養豐富。假如你花了1天時間看了一本破書,而該書介紹的知識雖然對於你來說是全新的知識,但是由於書中組織不當、或者深度不夠,使你獲取的營養很少,還不如自己研究一天來的快,這種書就不值當看了。學習C語言要看那些好書?我認為首先要把基礎書給看扎實了,比如《C語言之四書五經》中介紹的4本。(雖然這些書很多已經絕版了,但我相信電子版也是很有益處。況且,如果你真的想看,我相信你一定有辦法搞的到。)這些書你會在很短的時間內看完(比如一兩個月),這取決於你的基礎和悟性。之後要看那些書呢?我不妨再列幾本。Bjarne Stroustrup的《C++程序設計語言》(The C++ Programming Language)一定要看,這本書裡面對於C的一些基礎概念的定義,比我見過的其他任何C語言書都要全,都要仔細;Bjarne Stroustrup的《C++語言的設計與演化》(The Design and Evolution of C++)和David R.Hanson 的《C語言介面與實現 創建可重用軟體的技術》(C Interfaces and Implaementations Techniques for Creating Reusable Software)一定要看,這兩本書講述了如何用C來實現異常處理、實現類型的封裝和擴展等一些大的項目中經常用到的高級技術。其他的書,操作系統的要看,編譯原理的要看,演算法的要看,模式的也要看。讀書破萬卷,coding如有神。總而言之,就如《傳》中雲:「生而知之者,上也;學而知之者,次也;困而學之又其次也。」我們不能總是因困而學之,而要做到兵馬未動,糧草先行。
看書是學習的導向,書中能一一介紹清楚概念,但書卻不能把應用的細節一一介紹給你,因為應用總是招數繁復,變化多端。因此我們要想熟悉招數,懂得書中所講怎麼使用,還要多讀源碼。Linus給別人解答問題的時候,常說Read the ****ing source code;候捷也在其文中提到「源碼之前,了無秘密。」這就是大師的箴言呀。源碼就像是動畫、就像是幻燈片,把書中的招式一一演練給你看。可以說高手的經驗大都是源自代碼。源碼和書一樣,也是要看好的,不要看差的。在此,我推薦看Linux kernel source code 和 Linux tcp/ip source code。這兩套代碼都是開源的,垂手可得。此外,還可以配合著Andrew S.Tanenbaum的《操作系統的設計與實現》(Operating Systems:Design and Implementation)、毛德操 胡希明的《Linux內核 源代碼情景分析》、Jonathan Corbet,Alessandro Rubini,Greg Kroah-Hartman合著的《Linux設備驅動程序》(Linux Device Driver,3e)、W.Richard Stevens《TCP/IP詳解(3部)》 (TCP/IP Illustracted )、W.Richard Stevens《UNIX環境高級編程》(Advanced Programming in the UNIX Environment,新版增加了Linux kernel的內容)等書來看,方便的很當然程序不是看出來的,是寫出來的。我高中的時候每天堅持寫6個小時程序,《數據結構》和排列組合、圖論方面的習題反復做了N遍。到現在雖然已經時隔五六年,很多內容早已淡忘掉,但卻培養了我很強的編碼能力和調試能力,直到現在還對我的工作有很大的幫助。
學習忌貪多、忌浮躁、忌急功近利、忌目中無人。把學習計劃放的長一些,培養一個好的學習方法,一步一步慢慢走,終能成為高手。
考軟體工程師
(1)熟悉計算機基礎知識;
(2)熟悉操作系統、資料庫、中間件、程序設計語言基礎知識;
(3)熟悉計算機網路基礎知識;
(4)熟悉軟體工程知識,理解軟體開發方法及過程;
(5)熟悉軟體質量及軟體質量管理基礎知識;
(6)熟悉軟體測試標准;
(7)掌握軟體測試技術及方法;
(8)掌握軟體測試項目管理知識;
(9)掌握C語言以及C++或java語言程序設計技術;
(10)了解信息化及信息安全基礎知識;
(11)熟悉知識產權相關法律、法規;
(12)正確閱讀並理解相關領域的英文資料。
㈡ 我想自學uml
與UML相關的圖書
《UML2.0實戰教程(Trufun)》中包括一個簡單的案例分析,對於學習設計很有幫助。
《UML用戶指南(第2版)》,個人認為的章節劃分比較合理。
《UML與軟體建模》的第十二章包括了將UML轉換成C++語言的內容。如果你使用的是Java或其他語言也可以參照該章的內容自行處理。
《系統分析師UML實務手冊》
《統一建模語言(UML)參考手冊——基本概念》
《面向對象分析與設計(UML.2.0版)》
這些都能在網路中下載,如果覺得比較好可以再買紙質圖書(第一本沒有紙質圖書)。
如果你有自己的電腦的話,建議直接下載電子圖書閱讀,當然這些圖書很多內容都有重復,你覺得哪本書你能看懂就看哪不圖書。
不過《UML2.0實戰教程(Trufun)》以及《UML與軟體建模》第十二章非常推薦。
㈢ 程序員轉需求分析師最好看哪些書籍特別是uml方面的
程序員轉需求分析師,最好多看看面向對象的分析設計。面向對象的分析(OOA),這類的資料。。你已經有了開發經驗,轉需求分析師應該很有優勢。加油哦!!
trufun.net上有很多實用的需求分析資料,你可以參考。
㈣ 學習C、JAVA、資料庫要看哪些書
朋友,你好!
看到你無比誠懇的提問,就知道你是一位非常有上進心的人,從你的文筆,能感覺到你的邏輯思維很不錯,很有潛力。雖然本人不才,不過很想盡力回答你的問題,在這里發表一下我的看法,也麻煩你讀完它們。
首先我先吐槽一下樓上的回答,有答非所問的,有兩個說了N本書的人(那些書說實話,世界上找不到幾個人是全部看完了的,說白了,不適用,理論知識,你又不是考博士去的)。
進入正題:
你學了2個月左右,如果比較充實的話,你應該已經能自學各種編程語言和思維了,你現在不斷的思索未來是個好習慣,不過在這里先提醒你一下,不要誤入歧途:有遠見可以,不過請不要好高騖遠,不要浮躁,國人的一大缺陷就是浮躁,連復興國家這種大事都想在幾十年內搞定。。。扯遠了哈。
問題一,C語言學習程度:根據你的描述,現在正在學習C語言,我推薦你認真的學完這門語言。理由:所有的語言的文法(語法)幾乎都抄自這門語言,可以說一通百通,而這門語言又很容易學習,涉及面也是最廣的,從你手上帶的電子表(單片機)到你現在用的操作系統,還有你玩的電腦游戲,無一不涉及到C語言,因為早期的所有軟體系統骨架全是C語言寫的,人們捨不得丟棄這些比較「完美」的骨架,所以一直在這骨架上搭建其他的系統和軟體,最後無法舍棄這些骨架了,所以C語言可以火到現在。再次嘮叨,請認真學習這門語言,哪怕你工作以後永遠不使用它。
推薦書籍,「譚浩強的那本C語言書」,或者目錄相近的你覺得能看明白的就行了,書不用太挑剔,都是模仿過來模仿過去,而且這些書也都只是講講文法,並不涉及到實際應用,總之,一本足矣。
問題二,JAVA方向以及書籍:你自己說過,你肯定是走JAVA方向,我也這樣認為,現在JAVA方向和C#方向是國內主流,它們門檻都比較低,我也是JAVA方向的,所以這里能多給你點建議。學完C語言以後,你學習JAVA的文法(語法)就會很輕鬆了,除了面向對象思想要理解外,其他的都能很快吸收,你應該在學習文法的同時領會面向對象思想,你看完(自己提前看吧)你們的JAVA教材後,注意多看面向對象那幾章,熟悉以後,請馬上去買本(或者網上下電子版本)《Thinking in Java》(中文名JAVA編程思想),它能徹底讓你掌握面向對象思想。之後,你不要考慮用JAVA開發桌面應用程序(在國內工作幾乎用不到),你應該開始重新撿起HTML、javascript這些WEB相關的東西了,同時自己熟悉JSP以及配置TOMCAT服務端(自己沒有WEB包或者不會建立的話先去網上下載點JSP程序,TOMCAT主要是學習如何配置那些xml配置文檔),JSP的話一定要苦學,要找幾本書看(未來的工作啊),JSP書不好推薦,隨便找幾本看看吧,都一個模子造的,都挺好的,不存在經典不經典,就是學起來有點苦澀,而且實話有點難,都是學習的別人用JAVA建立好的規則上的(說白了你不是在學JAVA,也不是在學文法,是在學應用了哦,應用前人開發的容器、規則、介面、對象,以後會理解的)。WEB編程學習,前期沒有美工支持,自己頁面設計能力不行的話,你發現你做出來的例子都很沒用很醜陋,沒什麼成就感,請注意不要放棄。當你能獨立開發JSP程序部署JSP程序到TOMCAT上以後,你可以開始學習SSH框架了(找工作的敲門磚,你最應該學的東西),SSH即struts,spring,hibernate這三個傢伙,不知道請網路查一下,相關的書籍多如牛毛,找幾本自己喜歡的吧,比如封面好看,目錄排布好點的就可以(都是一個模子),然後再買本實例書籍,專門講實例的,比如開發圖書管理系統,購物系統的SSH書籍。學完了(自己能獨立開發WEB應用了)以後JAVA方向你已經可以出山了,完全可以找工作去了,前面提到JAVA方向門檻低,是事實,熟悉SSH的都能找到工作。
問題三,資料庫:不多說哦,上面說的那些東西學的時候自然要涉及到資料庫,你會參照書上的下載並使用的,簡單的說幾個流行的,sqlserver、oracle、access、mysql這四個很流行,mysql是免費的,停止升級了已經,其他的也有免費版本,不過不好使,必須學sqlserver,其他的看公司情況,進了公司,有一段磨合期足夠你學會一種新的資料庫了,也是一通百通的東西,書籍嘛,就是網路,不會的查詢語句,都能網路到,然後就是查看資料庫自帶的聯機幫助文檔。
問題四,入行以後干什麼:按要求辦事,前面有磨合期供你適應公司以及項目,多注意溝通同時充電就好了,同時寫博客記錄你在工作時學到的技巧和碰到的問題的解決方案,積少成多,10年成精。
問題五,升職:多去考點證書,學歷要有,自考也行,職稱證書要考,充電的時候多學習管理層次的書籍,軟體工程必學~~~其他的你自然會知道的,時間有限,而且多說無益,不要依賴,相信自己,感覺你是個潛力股,加油吧朋友!
希望我的回答符合你的需要(說不定我說多了偏題了,呵呵,不好意思了)
㈤ C++程序員UML實務手冊的作者簡介
邱郁惠,中國台灣資深UML專家和暢銷書作者。邱老師研究OOAD、UML和MDA十餘年,自UML誕生起一直從事UML的普及和指導工作,從事過專案、教學及寫作。曾擔任《物件導向雜志》主編,編著有《系統分析師UML實務手冊》、《C++程序員UML實務手冊》、《SOC設計UML實務手冊》,其繁體版一經出版即攀升至天瓏書局銷售排行首位。此外,邱老師還從事UML認證培訓工作。
㈥ 剛開始學C語言,要看些什麼書(介紹幾本)
《程序員》推薦C++ 圖書三人談
主持人:熊節(透明),《程序員》雜志編輯,C-View成員
嘉 賓:孟岩(夢魘),聯想公司掌上設備事業部應用開發處任職,C-View成員。與侯捷先生合譯《C++ Standard Library》一書
金尹(惡魔),上海天宇公司CTO,在《程序員》連載有「自由與繁榮的國度」系列文章
透明:「學C++用哪本書入門」,這是被問得最多的一個問題。但是哪一本書是最好的入門書?似乎很難找到答案。《C++ Primer》太厚,《Effective C++》對讀者要求比較高,《Essential C++》又常常被批評為「太淺」。
其實說穿了:no silver bullet。想從一本書學會C++,那是不可能的。有朋友問我如何學C++,我會建議他先去找本數據結構書,把裡面的習題全部用C++做一遍,然後再去看《Effective C++》。myan經常說「要在學習初期養成好習慣」,我對此頗不以為然。
個人認為,《Essential C++》適合作教材,《C++ Primer》適合作參考書,《Effective C++》適合作課外讀物。
惡魔:很後悔當初買了《C++ Primer》。因為從我個人角度來看,它的功能效用基本是和《The C++ Programming Language》重合。當然對於入門來說,它還是很不錯的。但是《C++ Primer》太厚,一來導致看書極其不方便,二來系統學習需要花比較長的時間。對於目前這個越來越快餐化的時代來說,的確有很多不適合的地方,不過可以作為初學者的參考書。現在我以一塊K3 CPU的代價把它借給了別人,希望我那位同事能夠從中得到一些益處。
如果已經具備了C基礎,我建議看國內的書,例如錢能的《 C++大學教程(第二版) 》。(如果沒有C的基礎還是看譚浩強的C語言)。這本書對C講得還算比較清晰,有很多習題值得一做,特別是最後的struct和union兩個部分。其中的一些演算法比較拖沓和繁瑣(比如樹和鏈表的遍歷演算法),讀者可以嘗試修改這些例子,作為最後對C語言的一些總結測試。
夢魘:這個問題讓我想起四五年前的情形。今天對於C++有一點認識的人,多半是從那幾年就開始學C++了。那時根本沒有品牌觀念。從書店裡找一本C++書,如果看著還算明白,就買下來。我記得那時候宛延闓、張國鋒、麥中凡教授的書都受到很高的贊譽。我個人最早的一本C++書是Greg Perry的一本書,今天想起來,其實是一本打著C++旗號的C語言教程。對我作用最大的一本書是國防科技出版社出版的一本書,書名記不得了,作者叫斯蒂芬·布萊哈。
透明:還記得以前曾批評過一本C++書,是北航出的,整本書就沒有出現過class關鍵字。那本書,說穿了其實只是介紹了C語言和iostream庫的用法,根本不能算C++。而當時我常常推薦的一本書是電子科技大學張松梅老師的C++教程。那本書,直到今天來看也沒有太大的問題,唯一的缺憾就是由於年代久遠,許多東西已經過時了。而對於一本技術書籍來說,「過時」是最不可接受的。
總體來說,那時使用C++的人真是在「盲人摸象」。不過這也有好處,就是對C++的很多細節能搞清楚,以後看到經典好書時比較容易理解;當然壞處就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什麼不一樣。
夢魘:整個90年代,其實大部分人對於C++的認識都似是而非。一開始是等同於Borland C++,後來是等同於Visual C++和MFC。所以一般來說,打著BC和VC旗號的書賣得很好,人們覺得這就是C++。而我比較幸運,布萊哈的那本書雖然從現在的眼光來看談不上高超,但基本路子是對的。可能是因為原書是給UNIX程序員的培訓教材,所以沒有讓我一開始就形成「C++ == VC++」的認識。
其實一直到1996年,我們那裡搞計算機的都是唯Borland C++馬首是瞻的,到了VC 4.0出來,一下子格局全變了。1997年VC5推出之後,書店裡MFC書鋪天蓋地,學MFC的人,頭抬得都比別人高一些。不過現在看來,那時候大部分的MFC書都是三流貨色。我曾經有一段時間認為,那一批程序員中間有不少被誤導了。根本原因就是相對的封閉。
透明:我覺得一本書的價值有兩方面:第一,教給你實用的技術;第二,促使你去思考。對於一本介紹VC(或者說MFC)使用方法的書,我根本不希望它能促使我有什麼思考,所以我就一定要求它在技術上精益求精完美無瑕。我剛開始用VC的時候,買的第一本書就是潘愛民老師翻譯的《VC技術內幕》(第四版),沒有受到那些「三流貨色」的誤導,應該說是很幸運的。
夢魘:1999年機械工業出版社開始出版「計算機科學叢書」,其中的《Thinking in C++》第一版受到了廣泛的歡迎。其實我一直不認為這本書很出色,雖然拿過一次大獎。然而我們都得承認,這本書在C++書籍領域里第一次建立了品牌觀念,很多初學者開始知道,不是隨便買哪一本都一樣的。再往後就是2000年的《 深入淺出MFC(第二版) 》第二版,以及侯先生在《程序員》上發表的那一篇《C++/OOP大系》,加上整個大環境的變化,品牌觀念深入人心,C++書籍市場終於開始逐漸與世界同步。
回想往事,我的感覺是,那個需要戰戰兢兢選擇入門書的時代已經過去,今天的C++初學者,大可以放心地買口碑好、自己讀起來思路順暢的書,入門不再是太大的問題。還有一些程序員已經學了幾年C++,但看到今天出版的一些新書,感覺比較陌生,這也不是什麼問題。侯先生經常說「凡走過必留下足跡」,所謂「走彎路」,未必不是一件好事。
至於具體的推薦表,就不好一概而論了。總之在我的印象里,《Essential C++》、《C++ Primer》、錢能教授的C++教程,都不錯。甚至有人一上來就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜歡,也沒什麼不可以。
透明:我同意你的觀點。不管怎麼說,編程是門實踐性非常強的學問。要想對C++對象模型有深入的了解,最好的辦法就是寫一串程序去看結果;要想學會OOP,也只能從項目中學。對於初學者,最好的學習方法就是不停地寫程序,寫真正有用的程序,寫到有問題的時候就去查書,於是自然就會知道哪本書好哪本書不好。不過我們的教育制度能不能讓大學里的學生們有這樣的學習機會,我表示懷疑。
以我的經驗,學C++有兩個門檻:入門和使用。完全看不懂C++,這是一個門檻,但是只要有一本合適的入門書,很快就能跨過。要想真正用上C++,卻不是件很容易的事情。尤其對於學生來說,接觸到的東西多是「玩具」,很難有實戰的機會。所以經常看見有人問「C++到底能做什麼」,這是C++學習中一個比較麻煩的問題。我們都是做了相當長時間的C++程序之後才看到一些真正經典的書,也正是因為走了相當長的彎路之後才知道這些書的經典之所在。所謂彎路,我想也是一種必須的積累。就算一開始就看《Essential C++》和《C++ Primer》,沒有兩三年的時間恐怕還是難有所得。
惡魔:有兩句十分有道理的話,一是我大學的C語言老師說的「寫程序不如說是抄程序」,另一句是一網友說的「好的設計來自借鑒,天才的設計來自剽竊」。對於我這個理性批判主義者來說,這兩句話的確不太適合。但是無論從哪個角度來講,對於初學者來說,剽竊大師的作品是通向成功的最快捷徑。
我個人認為,對於C++的初學者來說,首先要確定自己專業領域內主要使用的特性的方向。因為C++的特性如此眾多,初學者想貪多基本是不可能成功的。C++的編程範式基本可以分為ADT+PP、GP和OO三個方向。對於ADT+PP範式來說,初學者的主要問題不是學習C++,而是學習C的使用。對於這樣的初學者,國內的幾本書還是寫得比較清楚,符合中國人的習慣,比如譚浩強的《C語言教程》、錢能的《C++語言大學教程》。這兩本書我首推第一本,因為這一本我潛心研究了一年,這本書當中很多程序是可以剽竊的,而且可以對這些程序進行加工和提升。比如結構這一章中,它所給出的用struct來實現鏈表、二叉樹的演算法是相當蹩腳的。學習ADT+PP的初學者將這本書揣摩透以後可以嘗試修改這兩個程序。另外這本書的第二版稍微涉及了一些關於「類」的內容。學習ADT+PP的初學者,可以不被OO中的一些專有特性擾亂自己的思路,對於類層次扁平、無繼承、無多態的程序編寫是有很大好處的。
透明:你好象比較推崇國內教授寫的書。現在社會上有種不好的風氣:一捧就捧上天,一貶就貶下地。就好象對待譚教授的書,前幾年是奉為經典,這幾年又有很多人使勁批評。學C++更是有點「崇洋媚外」,總是覺得初學就應該看《Essential C++》。我看這種觀點也是片面的。
惡魔:當然《Essential C++》也值得看看。但是我個人覺得這本書沒有譚浩強的《C語言教程》來得好。主要原因是:第一,C++的所有特性都點到了,但是不深,看了以後會三心二意沒有方向;第二,可以抄襲借鑒的例子太少。《C語言教程》中有很多有趣的問題,比如猴子吃桃、漢諾塔等等,這些例子對於剛剛涉及C/C++語言編程的人來說是學習編程很好的例子。《Essential C++》只能是前兩本書看透以後,作為學習C++特性的一個過渡性的書籍。讓讀者真正領略到什麼是C++的編程、和C編程的不同點在哪裡。
透明:我發現一個很有趣的現象:初學者往往喜歡問「哪本書比較好」,這讓我很是不解。這有點像一個剛學打籃球的人問「王治郅和科比誰比較厲害」。當然科比更厲害一些。但如果你是想學打籃球,這兩個人都非常非常有資格教你,你跟誰學都能學得很強——關鍵不是在於你選哪個老師,而是在於你自己用多少功夫去學。
透明:回到原來話題。學會了C++的語法,能看懂C++代碼之後,必須有些書來指導進階(或者叫指點迷津)。我覺得《設計模式》很好,能夠讓讀者看到一些精妙的用法。不過正如我經常說的,模式帶來的麻煩和好處一樣多,甚至麻煩還要更多。而且,C++本身的問題使得在C++中使用GoF模式愈加麻煩。
夢魘:《Design Patterns》這本書絕對是不可以沒有的,而且中英文版都不可少。最初我看中文版,說實話看不懂,但是也不覺得人家翻譯得不好,所以就想,大概是原文就很難懂,加上自己水平有限。於是總是想著再找幾本patterns的書來看。後來找到幾本書,口碑還不錯,不過水平高下,一比就出來了,還是那本《Design Patterns》最經典,最耐看。英文版出來之後,兩個版本對照看,明白多了。現在覺得,其實就設計模式來講,把這本看明白了就很不錯了,不用再花費很多心思找其他的書。我現在的包里始終夾著這本書,隨身攜帶,有備無患。
至於說設計模式的副作用,和可能帶來的弊端,我的體會也挺多。不過是這樣,我們想一想,究竟什麼情況下設計模式可以用得很好呢?一種是有經驗豐富的人引導,比如要是Robert Martin帶隊,你在某個地方用錯了設計模式,他就會指出來,說這里不對,將來會產生什麼樣的弊端。對於他來說,豐富的實踐經驗足以支持他進行「預測型」設計。但是大部分人沒這個能力,因此我們只好走第二條路和第三條路,就是「試探型」設計和「重構型」設計。遇到一個問題,你覺得用某種模式挺合適的,就大膽地用了,成功是積累經驗,發現不好,出了問題了,只好改回來,那也是積累教訓。這叫做「試探型」。至於重構,應該算是最有組織、成功率最高的工程化方法。先把問題「quick and dirty」地解決了,所有的暗礁都暴露出來,然後再根據實際情況採用合適的模式優化設計。現在XP和UP都高度重視refactory,UP在Elaboration和Construction階段都鼓勵抽出專門的iterations進行重構。所以說如果組織快速的軟體開發,當然比較傾向於這條路——打成功率嘛。
透明:講到重構,我順便說說《Refactoring》這本書的影響。從工程本身的角度來說,你所謂的「重構型設計」是沒有什麼問題的。但中國的開發者(也包括我在內)往往比較沖動,比較容易相信銀彈的存在。曾經有那麼一段時間,我在Java中嘗試過了重構的方法之後,又拿到C++中去嘗試。結果發現,在Java中速度非常快的重構過程,到C++中就被減慢了。究其原因,就是因為C++和Java的約束條件不同。拿著Java中成功的案例直接套C++,不失敗才怪。
所以,我必須說:《Refactoring》這本書很有價值。但對於C++程序員來說,它的價值是讓你思考,思考這種方法的可行性。如果一個C++程序員沒有打算遷移到Java,那麼我必須告訴他:《Refactoring》這本書不是讓你照著它用的,甚至不是讓你去相信它的。對於C++程序員,《Refactoring》全書可以放心相信的只有第13章,其他的部分,都必須非常謹慎地對待。
夢魘:我還要就「試探型」的方法多說兩句,我覺得對於個人發展來講,「試探」也是必不可少的,撞牆不可怕,高水平的人不都是撞出來的嗎?你失敗了一次,就知道這個模式有什麼潛在的問題,下次再用,就會多看幾步,像下棋似的。撞的多了,路數就出來了。
我不知道你們是否有這個感覺:用錯了模式,吃了虧,再回過頭去翻翻《Design Patterns》,看到人家早就指出來這個問題,不過就是那麼幾句話,原來看上去乾巴巴的,現在覺得句句都講到心坎上,GoF的形象馬上就高大起來,還帶著光環,感覺是既興奮又懊悔。
透明:現在回頭來看,我更欣賞myan推薦給我的《Designing Object-Oriented C++ Applications Using Booch Method》。這本書能夠幫助C++程序員理清思路培養習慣,可惜國內沒有引進。相比後來商業味濃厚的UML系列書籍,我覺得這本書對於面向對象的闡釋精闢獨到,至今未有能出其右者。
夢魘:剛才我們兩人都說到Robert Martin,他可是我的榜樣。那本1995年的《Designing Object Oriented C++ Application》,我覺得是每一個C++軟體工程師都應該反復研讀的書。可惜不僅國內沒有引進,在國外的名氣也不大。如果你覺得面向對象的那些道理你好像都明白,可就是一遇到實際問題就使不上勁,那這本書就是你的最佳導師。
提到理清思路,還有一本書不得不提,就是Andrew Koenig的《Ruminations On C++》。每個人都應該問自己,我學了這么多年的C++,究竟什麼是C++最基本的設計理念?遇到問題我第一個直覺是什麼?第一個試探型的解決方案應該具有那些特點?如果你不能給出明確的答案,就應該認真地去讀這本書,讀完了你就有了「主心骨」。
透明:插一句話,談談「推薦書」的問題。入門書基本上是放之四海而皆準的,所以推薦的意義也不大。而入門後的發展方向,每個人不同,這個時候就需要「高人」的指點。舉個例子:我學C++的時候,myan還不認識我,所以也沒有給我推薦書,我還是學過來了,所以即使你當時向我推薦了《Essential C++》或者《C++ Primer》,我也不會太感謝你;但在我認真研究OO的時候,你推薦Robert Martin那本書給我,對我幫助就特別大,而且我從別的地方也很難找到類似的推薦,所以我就很感謝你。
一個程序員,必須有framework的意識,要學會用framework,還要主動去分析framework(在這方面,《Design Patterns》能有一定的幫助)。但是,真正高質量、成氣候的framework的書恐怕也就只有針對MFC的。從這個角度來說,MFC縱有千般不是,C++程序員都非常有必要先去用它、熟悉它、研究它,甚至藉助《深入淺出MFC》這樣的書來剖析它。不然,很難有framework的意識和感覺。
當然,另一個framework也很好,那就是STL。不管用不用MFC、STL,對這兩個東西的掌握和理解都是極有幫助的。最近我又在看《深入淺出MFC》,雖然已經不用MFC編程了,但幫助是一定有的。
夢魘:MFC和STL方面,我還是比較推崇侯先生的兩本書《深入淺出MFC》和《STL源碼解析》。
《深入淺出MFC》這本書,名氣自然是大得不得了,不過也有不少人批評。其實書也沒有十全十美的,批評當然是少不了的,不過有的時候我看到有人評論這本書,把它跟Inside VC相比,真的是牛頭不對馬嘴。
你剛才其實說得很對,程序員應該有一點framework意識。而這本《深入淺出MFC》與其說是在講MFC編程,不如說通篇是在拿MFC為例分析Application Framework的架構和脈絡。所以無論你對於MFC本身是什麼態度,這本書對每一個C++程序員都有很大的益處。
透明:是的。《VC技術內幕》會告訴你「DYNAMIC_CREATE這個宏怎麼用」,《深入淺出MFC》則告訴你「DYNAMIC_CREATE這個宏是怎麼實現的」。所以,如果你只需要在VC下寫一些小應用程序,《深入淺出MFC》的價值並不太大;但是,如果你需要設計一個稍微大一點的東西(不一定是framework),MFC的設計思想就會有所幫助。
夢魘:另外,我覺得對於MFC也應該有一個公允的評價。過去是吹捧得天上有地下無,書店裡鋪天蓋地都是MFC的書,搞得大家只知有MFC,不知有C++,甚至直到現在還有人問:「我是學MFC呢,還是學C++?VC++是不是比C++更高級的語言?」MFC成了一尊神像,阻礙了人們的視線。所以得把它從神壇上拉下來。這就是過去一兩年有很多人,包括我在內批評MFC的一個目的。可是現在大家視野開闊了,.NET也出來了,MFC不再是神像了,少數人就開始以貶損MFC為樂了。我覺得這種態度是不對的。
什麼叫好的框架?我覺得在十幾年的時間能夠象MFC這樣保持穩定並且不斷進步的框架就是好的框架。可能我們在一些具體的設計問題上有不同看法,覺得「這個地方這么設計不是更漂亮嗎?」很多時候是的,但是這不重要,重要的是MFC成熟穩定、有十幾年的成功經驗,這是最了不起的東西。
另外一點,MFC中間包括著學習Win32 API編程的最佳資料。這是除了其framework方面之外的另一個亮點。我現在使用Win32 API開發,但是經常參考MFC的源代碼,收獲很大。
透明:STL方面,我對於剖析它的源代碼興趣並不大,畢竟裡面源代碼多是演算法問題。所以,《STL源碼剖析》我也只是隨便翻翻就束之高閣了。我覺得這本書用來做計算機系的數據結構和演算法教材不錯,不知道有沒有老師樂意這樣做。
對於STL,我的態度一向都是「應用至上」。不過,我一直認為SGI STL本身就是一本精彩的書,一本數據結構和演算法的經典參考書,同時也是泛型技術的參考書。想知道一個演算法是如何實現的,看看STL源代碼就行;想知道如何使用type traits,STL源代碼裡面也有例子。看別人寫的書,總覺得隔著一層紗,有點撓不到癢處的感覺。SGI STL的代碼寫得非常漂亮,一個C++程序員如果不看看這本書,實在是可惜。
夢魘:至於STL,除了《STL源碼解析》之外,我舉賢不避親,強烈推薦侯先生與我合譯的那本《The C++ Standard Library》。這本書質量之高是無需懷疑的。我現在手邊常備此書,隨時查閱,對我幫助很大。
透明:C++和Java相比,最大的優勢就是它沒有一個專門的公司來管它,最大的弱點也是它沒有一個專門的公司來管它。Java程序員在學會簡單的語法之後,立刻進入SUN提供的framework,一邊用這個現成的framework做實際開發,一邊在開發過程中繼續學習Java一些幽深的特性。而這個時候,C++程序員恐怕還在問「VC和BCB哪個好」呢。這無疑是浪費時間。
夢魘:剛才你說Java和C++的優劣,這個話題已經成了我們這個年代永不消失的聲波了。我也不想再談這個。不過有一點我得說清楚:現在我們很多用C++的人吃了不少苦頭,探過脖子去看看Java,覺得它真是太可愛了,這種印象是不準確的。另外,Java也不簡單,而且會越來越龐大復雜。在很多場合,Java還不具有競爭力。至於將來如何,我看有些Java愛好者也過分樂觀了,似乎計算機科學界幾十年解決不了的問題都可以借著Java的東風解決掉,恐怕沒那麼容易。
透明:那當然。我再次強調:No Silver Bullet。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。
㈦ UML看什麼書比較好
《系統分析師UML實務手冊》,這個比較不錯,是個台灣寫的,內容好懂,裡面還有模仿實景的例子,有對話,沒有太多的復雜的概念,也沒有扯太多的設計模式等等等等。價格也不錯,哈哈,這個書的最後還有完整的實例,因此推薦一下。 完了自己可以看其他有點深度的UML方面的書籍。我自己現正在看《大象》,全名忘掉了,你去找個網一搜就可以了。這個書也不錯,讀寫來比較順。
㈧ C++程序員UML實務手冊的介紹
本書介紹了C++程序員如何利用UML進行建模,以便更好地進行C++程序設計主要內容包括:C++文件結構,重要的OO及UML概念,從類圖到C++,使用StarUML繪制類圖,從序列圖到C++,使用StarUML繪制序列圖,從用例圖及敘述到C++,使用StarUML繪制用例圖,從狀態圖到C++,用StarUML繪制狀態圖,活動圖概念,用StarUML繪制活動圖等。本書採用免費的開源軟體,包括C++開發工具Dev-C++,以及UML開發工具StarUML。 本書實例豐富,講解深入淺出,適合軟體開發人員參考,尤其適合C++程序員閱讀。
㈨ 為什麼掌握 UML 建模是成為編程高手的一條捷徑
UML建模是高於編程的,UML很好的體現了面向對象的思想,作為軟體工程領域的統一規范過程,掌握了UML,你可以是一個需求分析師,也可以是系統分析師,系統設計師,系統架構師,而軟體開發只是具體的實現過程。
如何成為電腦高手
要掌握的知識包括:
電腦基礎----對計算機硬體、體系結構不了解是不行的。另外像二進制、十六進制、補碼、位運算(與、或、非、移位)
編程語言----有人你說C/C++,有人說Java,還有人說別的。還是要看將來會用什麼。數據類型、順序控制、子程序、函數等概念,多數編程語言(高級語言)都類似的,精通一門後可以觸類旁通。
網路知識----現在的電腦沒有獨立運行的了,信息孤島時代已經過去了。很多軟體都是在網路上運行的。其中對TCP/IP協議一定要熟悉。
資料庫----資料庫應用是軟體中非常重要的部分。就算你不搞資料庫應用開發,也要對資料庫要了解。
數據結構----光會程序語言是不夠的,「演算法」就像程序的靈魂,會解決問題才能寫出好的程序來。
UML、軟體工程等----做「編程高手」,不是光靠自己聰明的腦瓜來寫程序的,現在是信息爆炸的時代,做軟體經常是很大的項目,需要很多人來做。開始就算你做寫代碼的最底層的程序員,也要根據設計人員的文檔來寫;等層次提高了,設計的任務就多了,就要能寫出各種文檔來:需求分析、模塊設計、詳細設計、測試用例....
數學----「演算法」是哪裡來的?最終歸結為數學模型!
英語----少不了要看一些英語資料。雖說現在多數軟體工具都漢化了,但最簡單你也要認識「if」「else」「for」「do」「while」「case」「this」「botton」「text」「list」等等吧。
學習方法方面提示一點:
一要能吃苦,要有專勁,要耐得住寂寞。
二要有人指點,尤其是在入門的時候。
三是實踐很重要。紙上談兵永遠也不會把你變成高手的,除了自己練習,做好事學的差不多了就趕緊找一個程序員的工作,從底層做起,接觸到了團隊開發最好。
【二】電腦編程的基礎知識
1:如果你能夠熟練的使用Windows的話,你就可以開始你的程序生涯了!
2:首先從C語言開始。有的朋友可能認為C語言太難了,應該從VB開始。雖然,對於一個初學者來說,用一些控制項堆砌成一個小軟體,是有一些成就感,但是,基礎才是最重要的!C語言對於數據類型的描敘,遠比VB裡面說的更為全面,清楚,明白,而這些卻是編程中的根本!
3:學C語言,從數據類型,基本表達式,再到條件語句,循環語句,然後學習函數,再加上一些簡單的數組知識,就可以了!一句話,到現在為止,你只要理解結構化程序設計的思想也就夠了!
4:有了以上的基礎,就要開始學匯編了。匯編開始的時候是很難,那些各種各樣的寄存器,分段的內存地址,是很難理解,可是這些知識理解了以後,後面的內容就簡單了,學習8086的那些指令,再加上一些偽操作,還有DOS和BIOS中斷的調用,就可以看懂書上的匯編程序了。
5:有了匯編的基礎,再來學習C語言中的精華部分----指針,可謂如魚得水了。現在要對C語言全全面面的學一遍了,譚版的教材要從頭到尾認認真真的看兩遍以上。
6:學完以上的內容,有必要研究一下數據結構了,線性表,堆棧,隊列,樹,圖,二叉樹,等等,都要滾瓜爛熟!
7:請時刻記住:浮躁是學習編程的大忌!
8:現在,你應該學習一些資料庫的知識,還有一些常用的演算法了!
9:如果以上的知識都學精通的話,就可以開始C++的課程了,找本C++上手的書,用一個星期的時間大概了解一下C++,然後找一本VC上手的書,再花一個星期的時間學習VC的界面和用法,就可以做一些簡單的應用了!
10:要想學好VC,沒有扎實的C++知識是不行的,以下書籍是VC程序員必須翻的爛熟的:C++Primer,Effective C++,Thinking in C++,More Effective C++
深入淺出MFC。
11:深刻理解C++面向對象的思想!
12:編程的時候,出錯是難免的,所以,MSDN一定要熟練使用;好的代碼風格會使調試的時候,更加簡單的查錯,所以,一定要養成良好的編程風格!
13:如果嚴格的走好了以上的每一步,踏上了編程的門檻,可以混口飯吃了!
至於在以後,編譯原理,操作系統,還有軟體工程等等基礎知識,是必不可少的!
14:如果現在再來學習JAVA,C#等別的語言的話,應該是觸類旁通,拿來就用了,
㈩ UML的問題
通俗一點說,UML就是面向對象的建模語言,在面向對象方法的編程中會用到UML,具體樓主可以看以下的資料:
統一建模語言UML
軟體工程領域在1995年至1997年取得了前所未有的進展,其成果超過軟體工程領域過去15年來的成就總和。其中最重要的、具有劃時代重大意義的成果之一就是統一建模語言(UML:Unified Modeling Language)的出現。
在世界范圍內,至少在近10年內,UML將是面向對象技術領域內佔主導地位的標准建模語言。採用UML作為我國統一的建模語言是完全必要的:首先,過去數十種面向對象的建模語言都是相互獨立的,而UML可以消除一些潛在的不必要的差異,以免用戶混淆;其次,通過統一語義和符號表示,能夠穩定我國的面向對象技術市場,使項目根植於一個成熟的標准建模語言,從而可以大大拓寬所研製與開發的軟體系統的適用范圍,並大大提高其靈活程度。
統一建模語言(UML)是用來對軟體密集系統進行描述、構造、視化和文檔編制的一種語言。
首先,也是最重要的一點,統一建模語言融合了Booch、OMT和OOSE方法中的概念,它是可以被上述及其他方法的使用者廣泛採用的一門簡單、一致、通用的建模語言。
其次,統一建模語言擴展了現有方法的應用范圍。特別值得一提的是,UML的開發者們把並行分布式系統的建模作為UML的設計目標,也就是說,UML具有處理這類問題的能力。
第三,統一建模語言是標準的建模語言,而不是一個標準的開發流程。雖然UML的應用必然以系統的開發流程為背景,但根據我們的經驗,不同的組織,不同的應用領域需要不同的開發過程。舉個例子來說,開發錯綜復雜的軟體是非常有趣的工作,但開發這種軟體與構造嚴格實時的航空電子系統是大不一樣的,後者是性命攸關的大事。因此我們首先把精力集中在設計通用的元模型上(統一不同方法的語義),其次是建立通用的表示法(提供對這些語義的形象化的表達)。雖然UML的開發者們將繼續倡導從用例驅動到體系結構為中心最後反復改進、不斷添加的軟體開發過程,但實際上設計標準的開發流程並不是非常必要的。
UML是一種定義良好、易於表達、功能強大且普遍適用的建模語言。它溶入了軟體工程領域的新思想、新方法和新技術。它的作用域不限於支持面向對象的分析與設計,還支持從需求分析開始的軟體開發的全過程。
面向對象技術和UML的發展過程可用上圖來表示,標准建模語言的出現是其重要成果。在美國,截止1996年10月,UML獲得了工業界、科技界和應用界的廣泛支持,已有700多個公司表示支持採用UML作為建模語言。1996年底,UML已穩占面向對象技術市場的85%,成為可視化建模語言事實上的工業標准。1997年11月17日,OMG採納UML 1.1作為基於面向對象技術的標准建模語言。UML代表了面向對象方法的軟體開發技術的發展方向,具有巨大的市場前景,也具有重大的經濟價值和國防價值。
標准建模語言UML的內容
首先,UML融合了Booch、OMT和OOSE方法中的基本概念,而且這些基本概念與其他面向對象技術中的基本概念大多相同,因而,UML必然成為這些方法以及其他方法的使用者樂於採用的一種簡單一致的建模語言;其次,UML不僅僅是上述方法的簡單匯合,而是在這些方法的基礎上廣泛徵求意見,集眾家之長,幾經修改而完成的,UML擴展了現有方法的應用范圍;第三,UML是標準的建模語言,而不是標準的開發過程。盡管UML的應用必然以系統的開發過程為背景,但由於不同的組織和不同的應用領域,需要採取不同的開發過程。
作為一種建模語言,UML的定義包括UML語義和UML表示法兩個部分。
(1) UML語義 描述基於UML的精確元模型定義。元模型為UML的所有元素在語法和語義上提供了簡單、一致、通用的定義性說明,使開發者能在語義上取得一致,消除了因人而異的最佳表達方法所造成的影響。此外UML還支持對元模型的擴展定義。
(2) UML表示法 定義UML符號的表示法,為開發者或開發工具使用這些圖形符號和文本語法為系統建模提供了標准。這些圖形符號和文字所表達的是應用級的模型,在語義上它是UML元模型的實例。
標准建模語言UML的重要內容可以由下列五類圖(共9種圖形)來定義:
·第一類是用例圖,從用戶角度描述系統功能,並指出各功能的操作者。
·第二類是靜態圖(Static diagram),包括類圖、對象圖和包圖。其中類圖描述系統中類的靜態結構。不僅定義系統中的類,表示類之間的聯系如關聯、依賴、聚合等,也包括類的內部結構(類的屬性和操作)。類圖描述的是一種靜態關系,在系統的整個生命周期都是有效的。對象圖是類圖的實例,幾乎使用與類圖完全相同的標識。他們的不同點在於對象圖顯示類的多個對象實例,而不是實際的類。一個對象圖是類圖的一個實例。由於對象存在生命周期,因此對象圖只能在系統某一時間段存在。包由包或類組成,表示包與包之間的關系。包圖用於描述系統的分層結構。
·第三類是行為圖(Behavior diagram),描述系統的動態模型和組成對象間的交互關系。其中狀態圖描述類的對象所有可能的狀態以及事件發生時狀態的轉移條件。通常,狀態圖是對類圖的補充。在實用上並不需要為所有的類畫狀態圖,僅為那些有多個狀態其行為受外界環境的影響並且發生改變的類畫狀態圖。而活動圖描述滿足用例要求所要進行的活動以及活動間的約束關系,有利於識別並行活動。
·第四類是交互圖(Interactive diagram),描述對象間的交互關系。其中順序圖顯示對象之間的動態合作關系,它強調對象之間消息發送的順序,同時顯示對象之間的交互;合作圖描述對象間的協作關系,合作圖跟順序圖相似,顯示對象間的動態合作關系。除顯示信息交換外,合作圖還顯示對象以及它們之間的關系。如果強調時間和順序,則使用順序圖;如果強調上下級關系,則選擇合作圖。這兩種圖合稱為交互圖。
·第五類是實現圖( Implementation diagram )。其中構件圖描述代碼部件的物理結構及各部件之間的依賴關系。一個部件可能是一個資源代碼部件、一個二進制部件或一個可執行部件。它包含邏輯類或實現類的有關信息。部件圖有助於分析和理解部件之間的相互影響程度。
配置圖定義系統中軟硬體的物理體系結構。它可以顯示實際的計算機和設備(用節點表示)以及它們之間的連接關系,也可顯示連接的類型及部件之間的依賴性。在節點內部,放置可執行部件和對象以顯示節點跟可執行軟體單元的對應關系。
從應用的角度看,當採用面向對象技術設計系統時,首先是描述需求;其次根據需求建立系統的靜態模型,以構造系統的結構;第三步是描述系統的行為。其中在第一步與第二步中所建立的模型都是靜態的,包括用例圖、類圖(包含包)、對象圖、組件圖和配置圖等五個圖形,是標准建模語言UML的靜態建模機制。其中第三步中所建立的模型或者可以執行,或者表示執行時的時序狀態或交互關系。它包括狀態圖、活動圖、順序圖和合作圖等四個圖形,是標准建模語言UML的動態建模機制。因此,標准建模語言UML的主要內容也可以歸納為靜態建模機制和動態建模機制兩大類。