萬盛學電腦網

 萬盛學電腦網 >> 電腦基本常識 >> 十八年開發經驗分享

十八年開發經驗分享

class="area">

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

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

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. 幫助文檔的獲取

如果有自己的使用習慣的話,

copyright © 萬盛學電腦網 all rights reserved