成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十八年開發經驗分享:學習篇

開發 后端 前端
我認為專利和知識產權是獨占并被保護的,但是經驗和知識是應該分享的。為了這十八年來的幫助與被幫助,為了我寫的文字還有人愿意看,我想寫出這個系列來,與各位同行分享自己的經驗,共同進步。這個系列的內容主要來自個人的實際經歷,我不想談一些什么經典或者范例的東西。我覺得自己體會到的東西和同行分享才更有意義,也更具有實用價值。同時我相信寫出這個系列的文字,也是我對自己經驗的一個認真的回顧和歸納,這一定是很有裨益的。

作為本系列的第一篇,想談談程序員的學習問題。之所以第一個要談的問題就是學習,是因為我覺得這個問題最重要,也是最讓相當一部分程序員比較犯愁發憷的問題。本文如果能給這部分程序員帶來一點幫助或者啟發,那么目的就達到了。學習問題在那篇小結中寫了一小段,這次可以相對較為詳細的談談這個問題了。 

既然要談學習,那么首先需要明確一個問題,我們打算學什么?這里先對這個紛繁世界中的知識做一個分類:

A.教材上的知識

這部分內容來自計算機專業的課程教材。也有可能會涉及一部分來自其他相關專業或者相關課程的內容。 

B.編程語言

每一個程序員只有在會使用一門語言的情況下才有可能從事開發工作,所以學習并掌握一門語言是最低要求了。 

C.SDK

光有一門語言是不夠的,從事任何實際的軟件開發都需要一個類庫或者開發包才可以完成。比如C語言中的庫函數,C#中的.NetFramework類庫,Windows的API等等就屬于這個范疇。 

D.開發工具

以如今的情況來說,沒有開發工具理論上也是可以開發軟件的,但效率就是一個問題,所以掌握并使用一個開發工具完成開發任務應該也是一個最低要求。 

E.領域知識

軟件總有用戶,于是開發這些用戶使用的軟件,那么程序員就需要了解用戶所在行業的知識,至少需要知道一些基本的必須的知識。還有一部分的內容也劃分為領域知識,比如從事Photoshop這類軟件的開發那么圖形相關的知識就必須了解一些,從事工控軟件的開發,那么對控制方面的知識也要有所了解。 

以上的分類是在本文中我對知識的理解,一個程序員知道這些知識后從事一個軟件的開發應該是沒有問題了。下面分別來討論一下這些知識的學習問題。 

一.教材知識的學習

做為一個已經從業的程序員來說,我不認為計算機專業的所有專業課程(包括專業基礎課,我在讀大學的時候還有這個說法)都是有用的。實際上對于大部分程序員來說,只需要很少的一部分知識就足夠了。這些知識主要由三門課程組成:數據結構,編譯原理,操作系統。對于大部分的程序員來說,其他課程的內容不是沒用,而是在實際工作中用不上。 

數據結構這門課程的重要性,可以理解為是程序員的圣經,怎么如何形容其重要性都是不過過分的。這門課程中需要掌握的內容,我個人觀點如下:

1.  掌握所有線性數據結構的知識,比如表,棧,隊列等(廣義表可以不作要求)

2.  二叉樹的基本操作和基本使用

3.  圖中需要知道遍歷和了解最短路徑算法,以及相關的一些概念 

當然對于某些程序員來說,這是不夠的,因為從事的具體的軟件開發工作會有不同的要求。但是對于大部分從事MIS軟件開發的程序員來說,這些知識夠了。掌握這些知識可以有兩個層面的要求。第一個是完成足夠的習題,從而可以熟練的答題,第二個是能夠在實際工作中使用數據結構描述實際的事物。做到這兩點要求應該說不算太高,注意多加練習就可以了。目前來說這門課程的經典教材也不少,相信只要按部就班的學習完就是合格的了。 

編譯原理這門課程主要是學習方法和思想而不是課程中的知識本身。因為畢業出來能從事編譯器開發的人實在是太少太少了。這門課程需要掌握了解的東西不多,我個人的觀點主要是以下幾個:

1.  確定有限自動機和非確定有限自動機的使用

2.  詞法分析程序的實現

3.  語法分析的方法 

自動機在實際應用中的體現就相當于是狀態轉換圖,這個工具非常的重要,希望能夠務必掌握。我們在開發EntityModelStudio時,設計界面交互部分的內容就是先設計出狀態轉換圖然后再寫代碼的,否則直接開發的話就會面臨開發失去控制的風險,同時重構和維護也會相當麻煩。所以這個工具極其強大,非常實用。另外提一下,非確定有限自動機,這個工具的能力和確定的有限自動機是等價的。但是由于它的不確定性,更符合人的自然思維習慣,從而在某些設計場合相對會方便很多。這一點是很實用的,也是很吸引人的。 

掌握詞法分析程序的實現,可以大幅度拓展開發能力和思考能力。這部分東西理論上描述可能比較麻煩,但是實際使用時還是很容易上手的,所以非常值得學習一下。語法分析程序不需要掌握了,畢竟開發編譯器的機會是微乎其微的。但是相關的方法和思想希望能夠了解,這可以幫助程序員用電腦的思維來思考問題。 

操作系統需要掌握的東西只有兩個:

1.  五大管理的基本方法,尤其是涉及內存管理的策略

2.  線程或者進程的同步技術 

操作系統是復雜的,但是教材中介紹的這些管理方法相對來說是簡單易懂很多了。這一難一簡之間體現了基本知識的重要性,基本知識在實際開發中的應用的廣泛性。好好的體會,就可以明白用簡單方法解決復雜問題的技巧。線程進程的同步,這個就不用多說了,大家都知道它的作用,如果實在不想掌握的話那我也非常愿意相信你的理由一定是充分的,否則你絕對不會那么做。 

最后我想強調的是,無論你如何看待這些知識:可能覺的沒用,可能覺的太難,可能是不感興趣,但是如果你想做程序員的話,那么請你務必最大可能牢固,最大可能熟練的掌握它。 

二.編程語言

對于一個程序員來說,一般需要掌握2,3門語言是基本的,并且學習一門新的編程語言也是基本功級別的能力,所以這部分主要談談快速學習一門新的編程語言的方法。我學過的語言有這些(這里編譯器和語言的概念等同了并且不按先后次序):Foxbase,C,C++,匯編,Visual C++,Delphi,FoxPro,VB,C#。就我個人的體會來說,這些語言可以分為三種類別:非面向對象的,面向對象以及支持可視化設計的。 

這三種類別的語言有一些共同的內容,而這些內容也是我們在學習一門新的編程語言時首先需要知道的,可以說是關鍵的知識點。這些內容大致如下:

1.常量,變量,數組,不同的數據類型

這部分需要掌握常量,變量,數組的定義,初始化,不同數據類型的使用。數組中元素的讀寫,作為參數如何定義,作為返回值如何定義。有些語言還支持數組大小的重新定義。 

2.函數(或者叫子程序)

函數如何定義(比如參數和返回值),如何調用(這里存在異步調用和同步調用的問題),全局的還是非全局的。 

3.流程控制

分支結構:if語句,if else語句,switch語句;循環結構:for語句,while語句,do…while語句,有些語言可能是Loop。 

4.最基本的輸入輸出和文件操作

最基本的輸入輸出語句可以幫助你在學習語言的過程中完成簡單程序的練習任務,比如:輸出到控制臺,dos操作系統中輸出到屏幕等等。文件操作也要知道,至少以后寫個程序生成日志文件就會了。 

以上內容在學習一門新的編程語言時,希望能首先掌握,這能讓你很快的入門,并盡快使用新語言寫出代碼。另外還可以關注一下其他方面的內容,比如: 

1.了解語言的新特性

這個階段只需要了解,不需要掌握,記住有這些新特性,在需要用的時候想起它們就可以了。 

2.了解一下幫助文檔中,該語言的所有關鍵字

這部分內容有可能讓你發現一些很有用的東西。 

好了,知道這些內容差不多一門新的語言就算入門了。當然還有其他很多東西,但是這些內容可以在具體開發中遇到時再去找例子就可以了。下面談談這些語言的差異。對于面向對象的語言來說,需要知道面向對象三大特征:封裝,繼承,多態在具體的一門編程語言中是如何表達的或者等價表達的。對于支持可視化設計的語言來說,還需要知道如何設計窗體,以及常用控件的使用。按照這個方法,從一門已經會的編程語言到學習另一門新的編程語言應該是比較快的。對于還在大學中學習的人來說,我的建議是C++或者Pascal中的一個,VB或者C#中的一個或者其它可視化開發語言中的一個學習一下。如果可能學習一下匯編是最好的。 

三.SDK

掌握一個SDK才能使程序員在掌握一門語言的基礎上進行實際的開發,如果僅僅是一門語言那是不夠的。所謂SDK舉例子來說就是Foxbase的命令和函數,C的庫函數,C++的類庫(比如微軟的MFC),Windows的API,.NetFramework,這些都是我所說的SDK。程序員可以根據自己的實際開發需要,有選擇的學習相關的內容。我的建議是,可以先google,然后查文檔,一般的問題都可以很快解決的,慢慢的也就逐步掌握了。比如說我不知道C#如何使用線程,那么我就用google查找,關鍵詞是“C# 線程”,然后從結果中找到需要的內容。很多時候結果中的代碼是可以直接使用的。然后再去看一下MSDN的幫助文檔,了解一下相關的類和方法的說明,這樣這部分的知識就可以認為是掌握了。下次使用時就知道怎么用了。我的C#就是這么入門的,大概google問了二三十個問題左右。 

另外一個建議是買一本書學習也是可以考慮的,這也是一個不錯的方法,只是買到好的書需要緣分。就我個人來說,絕大部分的情況下是看電子書,直接從網上下載的。 

四.開發工具

除非你只用獨立的文本編輯器寫代碼,并且用命令行編譯,否則你一定需要一個開發工具,尤其是一個帶IDE的開發工具。對于你使用的開發工具而言,需要了解的基本內容如下:

1.  項目或者工程的創建,屬性修改,打開關閉等基本操作

2.  具體開發時的環境設置

3.  項目中的文件組織及管理

4.  常用功能的使用,比如:編譯,執行,斷點設置,代碼跟蹤,調試信息輸出,實用的快捷鍵,調試時變量查看,查找/替換等等

5.  從幫助文檔中了解IDE的新功能。因為這些功能有可能對你是非常有幫助的。

6.  幫助文檔的獲取 

如果有自己的使用習慣的話,還可以了解一下如何定制IDE環境以滿足自己的開發習慣。首先了解這些內容可以幫助你相對快一點適應一個新的IDE。 

五.領域知識

一個從事技術工作的程序員需要了解與技術不相干的領域知識,確實有點無奈。但是在具體的開發中,不了解這些知識就無法更好的理解用戶的需求,也無法更好的完成開發任務以及與同事領導的溝通。所以這個步驟是重要的必要的,有時候有可能還會帶來更嚴重的后果。在有些項目中如果不能很好的了解這些領域知識,項目中的成員有可能會被替換掉,我個人就有過這樣的經歷。所以這里特別列出來強調一下。 

差不多這些知識應該夠用了,下面再提幾個額外的內容,這幾點雖然和開發不是太直接相關,但是確實也很重要。它們是英語,數學,讀源代碼和讀書,有余力的程序員可以盡量提高這幾方面的水平,這是很有用的學習途徑和方法。對于英語而言主要是讀和寫,這樣就可以閱讀英文資料并用郵件,論壇或者聊天工具和老外溝通。由此獲得的幫助是非常顯著而高效的。這里要說明一下,微軟論壇上的回復的質量非常之高。 

對于數學我的理解主要是三個部分,都是很具體的:

1.中學里學過的知識

這部分知識很重要,這是我們用簡單方法解決復雜問題的基礎,同時使用的幾率也非常高。如果全部忘記的話,建議多少復習一下,或者用到的時候回顧一下。 

2.離散數學

我需要承認在開發中直接使用離散數學知識的場合我一次都沒有遇到,但是如果沒有離散數學的知識,那么我就無法思考,很多問題就無法解決。 

3.組合數學

這門課程屬于研究生級別了,相對難度會大一些。我的觀點是你不需要全部掌握,知道一部分就可以了,比如:鴿巢原理,母函數,以及常用的計數方法和技巧。尤其是技術方法這部分在問題的分析簡化,工作量的評估,算法設計以及軟件測試方面都有非常實用和具體的應用價值,是很值得掌握的。是否可以使用這部分知識,在實際工作中表現出來的效果至少相差一個等級。 

一個好的源代碼具有不可估量的價值,潛心學習一下可以讓你從一個門外漢變成一個開發老手,所以注重培養從讀源代碼學習編程知識的能力。我的體會是,閱讀源代是一個非常有效(有用并且高效率)的方法來提高自己的開發水平或者解決實際問題的能力。我第一次認真學習的源代碼來自當初的程序員大本營。一個例子是實現Visual Studio 6.0中Workspace的界面,另一個是如何實現給主菜單加入圖標。兩個例子大概花了我一個半月的時間并且寫了幾篇心得,記錄下學習的內容。應該說收獲很大。再比如,下一個版本的EntityModelStudio中會加入代碼編輯器,這個支持語法高亮和行號的編輯器就是在讀懂開源代碼后我們自己獨立重新開發的。在閱讀源代碼的時候希望能注意兩點:

1.  最好能配置好環境可以單步跟蹤代碼,這樣理解代碼的速度和效果會好很多。

2.  快速的定位那些自己想看的代碼。這里建議可以使用IDE提供的查找功能,看文件名,類名等方式來定位。如果實在不行,考慮注釋代碼,來快速定位。 

第四個內容是讀書,閱讀是學習的一個最基本和最重要的途徑。在這里我不想列出任何需要閱讀的書目,這是因為當下流行的所謂經典或者著名的開發書籍我讀得很少,所以也說不出體會。我看過的書都比較老了,比如:

1.  BorlandC++4.5使用及開發指南

這是我的C++的教材,C++部分先后看了不下6次

2.  一本1970年發行的軟件工程的書,這是我第一次接觸軟件工程

3.  代碼大全第一版,我覺得第二版沒有第一版好

4.  用于面向對象的設計和分析方法,這是美國哥倫比亞大學的一個教授寫的。是清華大學原版教材中的一本,非常好,是OOD的絕好教材。 

目前有印象的就這些,以后想到了再補充吧。其他讀過的書還有很多,都是具體的編碼的書就不再一一列舉了。有些書需要仔細閱讀的,比如講設計,講方法的書,有些書需要很快的瀏覽完,比如講具體編程的書。我的體會是,一本幾百頁的書,你應該花1,2小時就能過一遍,最好是20分鐘到40分鐘就能過完。在實際開發中,用到的時候再看書,查找需要的內容。如果你需要花很長一段時間全部學完一本書的話,那么你看的第一本書可以這樣,否則我覺得你的學習方法就有問題了。至少一本書中不可能所有的東西都是你馬上要用到的,你沒有必要立刻學習,所以應該學會快速閱讀的技巧。當然這是個人觀點,取舍對錯自行判斷吧。 

你不能寄希望于一次就能買到一本理想的書,也不能希望在一本書中學到自己需要的所有內容。遇到一本好書是需要點運氣和緣分的。我的總體感覺是,外國知名出版社的圖書的質量明顯好一些,還有臺灣一些出版社的圖書也還不錯。建議大家可以買一些絕對知名和權威的書籍,這樣相對風險會小一些。對于那些書名為XXX大全,XXX寶典,精通XXX,XXX權威這樣的書,我是很不看好的,當然這是自己的看法,僅供參考。 

最后說一下不要學習的東西,這是在本文發布前剛發現的問題。幾天前在群里聊天,一個人說想解析暗黑的通信協議,然后做外掛。我對這方面很不在行,但是這明顯是一個非常耗費時間,難度也非常大的事情。我在這里給出的建議是,一個職業的程序員需要知道自己的價值,自己的知識和精力應該花在能夠創造實際價值的地方。不要僅僅出于愛好或者熱情去做一些成本很大的事情,與其炫耀自己的能力,不如踏實的做好本職工作。如果實在想做可以作為業余愛好,適可而止。 

好了這次就寫到這里了,感覺還是有點倉促。再次聲明以上內容都是一些個人的看法,限于本人的經歷和知識面,不妥或疏漏之處在所難免,希望同行們能指出來,讓我也提高一下。下一篇的題目暫定為“問題解決篇”,主要介紹如何在工作中使用這些知識解決實際問題的方法和心得。

原文鏈接:http://blog.csdn.net/binarytreeex/article/details/8174445

責任編輯:林師授 來源: BinaryTreeEx的博客
相關推薦

2012-10-29 10:00:31

2019-11-29 10:15:52

開發技能代碼

2009-12-22 19:26:51

WCF綁定

2009-09-16 08:54:02

思科認證CCIECCNA

2013-04-07 09:22:31

編程語言編程

2018-03-12 11:39:27

企業家公關品牌

2013-06-25 10:59:25

卡牌游戲策劃手機游戲

2011-07-08 13:15:52

JSP

2009-09-02 08:42:35

思科認證CCNA思科認證CCNA

2011-06-14 09:27:43

高性能WEB開發

2011-07-07 10:49:41

JavaScript

2018-05-07 15:28:45

項目開發管理

2011-05-16 09:30:30

jQueryWCF

2011-07-08 15:20:30

seamjsf

2010-01-14 18:14:22

VB.NET開發特點

2011-04-25 16:56:34

Greedy Bank游戲開發獨立開發者

2011-07-20 10:30:29

C語言

2011-07-10 15:07:37

2011-07-22 13:37:32

2011-08-10 09:42:08

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一级电影在线 | 欧美国产日韩在线观看成人 | 婷婷在线免费 | 久久国产精品偷 | 夜夜夜操 | 少妇诱惑av | 欧美日本韩国一区二区三区 | 美女久久视频 | 国产成人在线视频 | 欧美精品综合在线 | 91色在线 | 日韩视频一区在线观看 | 久久久婷 | 国产精品一区二区三区在线 | 成人精品一区 | 国产精品小视频在线观看 | 亚洲色在线视频 | 99精品欧美一区二区三区综合在线 | 亚洲不卡一 | 成人h动漫精品一区二区器材 | 91se在线| 亚洲精品日韩精品 | 人成在线视频 | 狠狠av | 久久婷婷色 | .国产精品成人自产拍在线观看6 | 91精品国产欧美一区二区 | 久久午夜精品福利一区二区 | 国产一级片在线播放 | av网址在线 | 欧美日韩国产精品一区二区 | 蜜桃av人人夜夜澡人人爽 | 国产福利在线 | 国产福利资源在线 | 日韩成人在线视频 | 国产精品一区二区三区四区 | 中文字幕在线观看精品 | 久久久久久国产精品免费 | 精品久草 | 欧美精品video| 丁香婷婷综合激情五月色 |