手機網(wǎng)站解析域名百度一下你就知道了
自主知識獵取的學(xué)習(xí)方法
北京百育炎華教育咨詢公司
http://www.c1945.com
?
?
- ?物流系統(tǒng)規(guī)劃報告 項目管理系統(tǒng)設(shè)計 項目管理相關(guān)文檔 OA 系統(tǒng)需求分析 OA 系統(tǒng)詳細(xì)設(shè)計 人力資源系統(tǒng)設(shè)計 數(shù)據(jù)庫設(shè)計報告 [CRM 詞匯大全]
[彩信業(yè)務(wù)原理] [微軟內(nèi)容服務(wù)器介紹] [軟件項目開發(fā)技能要求] [UML 用例圖設(shè)計]? [網(wǎng)上營銷系統(tǒng)方案書] [電子政務(wù)方案書] [項目管理系統(tǒng)方案書]
[軟件投標(biāo)技巧] [網(wǎng)上證券系統(tǒng)方案書]? [軟件投標(biāo)書規(guī)范] [技術(shù)發(fā)展與技術(shù)生涯] [E-LEARNING 方案書] [面向?qū)ο蠼7椒?/span>] [微軟項目開發(fā)準(zhǔn)則 MSF] - [web 服務(wù)與應(yīng)用整合] [用戶界面設(shè)計原理]? [網(wǎng)絡(luò)管理概述] [JSP 基本知識]? [電子商務(wù)] [XML 技術(shù)]? [IDC 數(shù)據(jù)中心建設(shè)方法] [大型MIS軟件開發(fā)的幾點體會]
- [Office 建立辦公自動化環(huán)境] [網(wǎng)站建設(shè)10步曲]? [解決方案設(shè)計方法]
?
?
本文節(jié)選自“百育兔子”系列軟件之[企業(yè)項目開發(fā)資源版],詳情到我公司網(wǎng)站查詢。
?
第一階段:概念和術(shù)語
無論學(xué)習(xí)什么語言,首先簡單了解一下基本概念和術(shù)語,不必深入研究,但要大概知道這些概念和術(shù)語,就像學(xué)習(xí)英語首先要掌握單詞一樣,至于如何靈活運用,以后編碼中體會。但是,如果連這些基本概念和術(shù)語都不了解,則以后學(xué)習(xí)中,遇到了也會糊涂,甚至看不到代碼的深層含義。自學(xué)第一步,了解基本概念,比如:面向?qū)ο?#xff0c;窗體,控件,web service。
第一階段學(xué)習(xí)方法
1、? 要了解概念和術(shù)語,請閱讀 MSDN 幫助文件,專門看“入門”部分,就可以看到技術(shù)的基本輪廓;比如,.net 2003 的 msdn。
?
?
2、? 要了解更多專業(yè)術(shù)語,比如:SOAP 等單詞,可以看 msdn 的詞匯解釋。比如,.net 2003 msdn 中。
?
?
3、? 其他辦法,就是到搜索引擎中搜索你希望了解的知識,使用關(guān)鍵詞,如果是多個關(guān)鍵詞,中間使用空格分開,命中率高。
?
理解各種概念和術(shù)語的時候要注意,有些概念和術(shù)語,只是作為一種原理的講解,編程序基本用不上,知道就行了。比如,windows 中的進程,如果你要是看到相關(guān)資料,肯定是長篇累牘地說進程技術(shù),實際上,這是操作系統(tǒng)的一種運行程序的原理,你編碼的時候根本用不上。當(dāng)你運行一個 exe或者調(diào)用 dll 的時候,在操作系統(tǒng)來看,它就會以進程方式運行,達到并發(fā)運行等效果。這是操作系統(tǒng)的事情,不用你在編程的時候考慮什么。編寫的程序自然就是進程了。但如果你被這種概念搞糊涂,以為是一種編程技術(shù),那么就麻煩了!因為根本不要,除非你自己想開發(fā)一個 windows 操作系統(tǒng)。
因此一定要分清楚哪些是原理知識,與編程無關(guān);哪些是編程中要用到的概念和術(shù)語。如果編程中要用到,對應(yīng)的語言語法和類庫中肯定有相關(guān)的函數(shù)、類或者控件。比如:線程。實現(xiàn)程序的并發(fā)運行(多個代碼段并發(fā)運行),以前在 vb 中只能使用 timer 控件來模擬,而在 .net 和 java 中,則提供了類的方法,就是 thread 類。如果讓游戲中多個人物同時各自運動,關(guān)鍵是同時,使用線程技術(shù)就簡單了,否則怎么辦呢?這個時候,這個線程的概念就中要了。
類似的還有網(wǎng)絡(luò)編程(qq等)的 socket,實際上就是操作網(wǎng)卡和使用 tcp/ip 協(xié)議。如果研究原理,那就復(fù)雜了,你只要理解這個東西能夠進行網(wǎng)絡(luò)編程,并使用好 socket 類就行了。
如同學(xué)漢語,我們沒有必要研究漢語的發(fā)展史,以及漢語是怎么誕生的,那是語言學(xué)家的事情,我們只要知道每個漢字、詞匯的用法,并能學(xué)出文章就 ok了。
如果你的女朋友愛上你,你不必研究為什么愛上你,甚至研究她的 DNA 中是否有可以按上你的成分,你只要懂得愛她就行了。
?
總之,這個階段略知一二即可,不要鉆牛角尖,把自己類似,并掉到概念的陷阱中無法自拔!
這就類似數(shù)學(xué)中的“公理”,大家必須認(rèn)同,然后才能依據(jù)公理推出定理。沒有人去研究為什么有公理,既然是公理,那就必須默認(rèn)!
?
第二階段:代碼操練
當(dāng)知道了一些概念和術(shù)語后,就可以進行大量代碼練習(xí),根據(jù)開發(fā)工具提供的功能的分類進行。體會編程語言技巧和各種技術(shù)知識。微軟提供了大量的代碼練習(xí)例子,已經(jīng)發(fā)送給大家了。每個技術(shù)(vb.net/c#)都包含不同基礎(chǔ)知識的聯(lián)系程序,文件組成結(jié)構(gòu)如下:
?
n???????? 語言知識
n???????? 窗體編程
n???????? Web 編程
n???????? 數(shù)據(jù)庫訪問
n???????? Web service
?
不要打開代碼看一眼就走,要仔細(xì)看看代碼是如何編寫的,并自己模仿重新編寫一次,這些代碼解釋了很多基礎(chǔ)知識的運用方法,非常有用!!
?
大體思路是:
1、? 掌握語言語法知識和編程理論(只有兩種:結(jié)構(gòu)化和面向?qū)ο?#xff0c;目前 .net 和 java 都是面向?qū)ο蟮木幊趟季S)。方法也是查 msdn。比如,要知道 OOP 技術(shù),到 msdn 中搜索:
?
?
2、? 掌握界面設(shè)計方法:窗體、頁面和控件
任何程序都要有界面,否則沒法使用,界面分為窗體和瀏覽器兩種,窗體界面以微軟的控件和 java 的 awt&swing 控件為主;瀏覽器界面則以 html 標(biāo)記為主?;诘膰H標(biāo)準(zhǔn)不同,必然界面設(shè)計方法也不同,但很類似。要知道如何設(shè)計界面,也可以通過 msdn。
n???????? 在早期 vb6.0 的 msdn 中,詳細(xì)說明了窗體開發(fā)的技術(shù):
n???????? 在 .net 中,只是提出了窗體編程技術(shù)的升級,方式升級,控件升級等,但方法策略不變。下圖是早期 6.0 中的 msdn,要想理解微軟技術(shù)知識,不妨走一次回頭路,從早期資料中獲得基礎(chǔ)知識:
?
?
3、? 掌握類、屬性、方法函數(shù)和事件
這些內(nèi)容講解最清楚的還是 6.0 的 msdn。
?
4、? 掌握數(shù)據(jù)庫處理技術(shù)
微軟的數(shù)據(jù)庫處理技術(shù)很統(tǒng)一,就是 ado(.net)技術(shù)。這是開發(fā)工具操作數(shù)據(jù)庫系統(tǒng)的接口。其實更多的數(shù)據(jù)庫處理技術(shù)則在數(shù)據(jù)庫系統(tǒng)中。開發(fā)工具大多是在調(diào)用數(shù)據(jù)庫系統(tǒng)的對象(table 等)和程序(sql 語言程序,如:select、storeprocduer,view 等)。
要掌握更多數(shù)據(jù)庫技術(shù),應(yīng)該看數(shù)據(jù)庫系統(tǒng)的開發(fā)指南。比如 sql server 的開發(fā)指南(聯(lián)機叢書):
?
?
5、? 掌握調(diào)試技術(shù)
任何編寫的代碼肯定要調(diào)試,主要圍繞以下問題:
n???????? 代碼拼寫錯誤?
n???????? 使用的語法錯誤?
n???????? 算法設(shè)計錯誤?
n???????? 系統(tǒng)配置錯誤?
n???????? 調(diào)用關(guān)系錯誤?
調(diào)試技巧在 msdn 6.0 中有明確說明,可惜,.net 中就不再提出了。似乎微軟認(rèn)為學(xué)習(xí) .net 的都是高手。
?
?
6、? 掌握底層開發(fā)技術(shù)(API 和圖形圖像處理)
許多看似神奇的程序,往往是通過底層開發(fā)實現(xiàn)的,因為我們常用的開發(fā)工具提供的內(nèi)容并不會如此豐富。最典型的就是微軟的技術(shù),常規(guī) mis 系統(tǒng)開發(fā)和一般編程都可以,但如果要操作更加復(fù)雜的內(nèi)容,則需要下載安裝相關(guān)的開發(fā)工具,其實是更多的類、函數(shù)和接口程序甚至是控件。裝上這些 sdk,你的開發(fā)工具就多了很多控件和類庫了。微軟統(tǒng)一提供了幾百兆的 sdk 軟件包,可以下載,名字是:windows xxx platform sdk。典型的有:
n???????? 三維圖象,使用 directx sdk,做游戲等;
n???????? 語音技術(shù),使用 ms agent sdk,做語音識別;
n???????? 系統(tǒng)底層,使用 相關(guān) API,比如,各種設(shè)備驅(qū)動程序,使用 DDE SDK,就可以開發(fā)網(wǎng)卡、打印機、顯卡驅(qū)動了,我們很少用;廠商的開發(fā)人員使用;
?
對于 java 來說,則更加慘烈一些,幾乎除了 java 語言之外,所有的都需要 sdk(jdk)和api。要找全這些 api 才能開發(fā)大程序。
第三階段:從小項目開始綜合運用所學(xué)知識
這也是我們實訓(xùn)的起點,讓大家學(xué)會綜合運用各種技術(shù)。在培訓(xùn)中,我們采用了“倒行逆施”的方法,就是讓大家先有應(yīng)用技術(shù)的感覺,然后,再理解技術(shù)基礎(chǔ),那就容易多了。但,大家不要指望短短的學(xué)習(xí)就可以掌握全部,還需要按照老師指導(dǎo)的方法和本指南的方法,自學(xué)其他知識,將來一定有用,會讓自己不斷擴展知識面,不斷豐富和提高。
?
“順藤摸瓜”學(xué)習(xí)法
目前,互聯(lián)網(wǎng)很發(fā)達了,我們隨時可以從網(wǎng)上得到很多技術(shù)資料。但是,當(dāng)我們面對一些源代碼例子的時候,卻不知道如何下手來學(xué)習(xí)。下面告訴大家一個方法,就是順藤摸瓜。
比如,以下代碼是微軟提供的練習(xí)代碼中的一部分。主要講解如何編寫多線程程序,如果我們希望學(xué)習(xí)多線程技術(shù),可以看這個例子,當(dāng)然,假設(shè)你已經(jīng)具備了基本的 c# 編程技術(shù):
?
?
程序演示了線程之間的互操作和協(xié)同工作方式。我們看一看其中一部分代碼,字體放大的部分表示我們應(yīng)該學(xué)習(xí)和研究的,從 msdn 幫助中找到這些知識:
?
using System;
using System.Threading;
using System.Drawing;
using System.Windows.Forms;
// This class encapsulates a two second process for non-threaded, threaded, and thread-
// pool operations.
public delegate void OnProcessesComplete();
public class ProcessGroup
{
???? // Constructor
???? public ProcessGroup(Label ActiveLabel,Label ThreadNumLabel,Label IsPoolThreadLabel)
???? {
???????? lblActive = ActiveLabel;
???????? lblThreadNum = ThreadNumLabel;
???????? lblIsPoolThread = IsPoolThreadLabel;
???????? // Add one to the shared property numberOfProcesses.
???????? numberOfProcesses += 1;
???? }
???? private Label lblActive;
???? private Label lblIsPoolThread;
???? private Label lblThreadNum;
???? // static members
???? private static bool highIntensity ;
???? private static int numberOfProcesses? = 0;
???? private static int processesCompleted;
???? private static int ticksElapsed;
???? public static int GetTicksElapsed
???? {
???????? get
???????? {
????????????? return ticksElapsed;
???????? }
???? }
???? public static bool SetHighIntensity
???? {
???????? set
???????? {
????????????? highIntensity = value;
???????? }
???? }
????
???? public event OnProcessesComplete Completed;
????
???? // Initialize static members for another run
???? public static void PrepareToRun()
???? {
???????? processesCompleted = 0;
???????? ticksElapsed = Environment.TickCount;
???? }
???? // This procedure runs a two second process, updating the appropriate labels,
???? // forcing refresh in case Main thread is starved.
???? ?public void Run()
???? {
???????? // Show that we are active in green.
???????? lblActive.Text = "Active";
???????? lblActive.ForeColor = Color.Green;
???????? lblActive.Refresh();
???????? // Update ThreadNum label with current thread number.? GetHashCode will contain
???????? // a unique value for each thread.
???????? lblThreadNum.Text = Thread.CurrentThread.GetHashCode().ToString();
???????? lblThreadNum.Refresh();
???????? // Update the IsThreadPooled label with Yes/No depending on whether the current
???????? // thread is a pool thread.
???????? if (Thread.CurrentThread.IsThreadPoolThread)
???????? {
????????????? lblIsPoolThread.Text = "Yes";
???????? }
???????? else
???????? {
????????????? lblIsPoolThread.Text = "No";
???????? }
???????? lblIsPoolThread.Refresh();
???????? // if highIntensity is selected loop based on TickCount for two seconds to max
???????? // out the CPU, otherwise let this thread sleep for 2 seconds.
???????? if (highIntensity)
???????? {
????????????? int ticks? = Environment.TickCount;
????????????? while (Environment.TickCount - ticks < 2000)
????????????? {
????????????? }
???????? }
???????? else
???????? {
????????????? System.Threading.Thread.Sleep(2000);
???????? }
???????? // Process is finished, display inactive in red
???????? lblActive.Text = "Inactive";
???????? lblActive.ForeColor = Color.Red;
???????? lblActive.Refresh();
???????? // Add to the shared property ProcessCompleted.? if all processes are done,
???????? // raise a completed event.? This is necessary for the threaded processes,
???????? // to allow the user interface to know when to enable buttons, and update
???????? // time elapsed, since they return immediately.
???????? processesCompleted += 1;
???????? if (processesCompleted == numberOfProcesses)
???????? {
????????????? ticksElapsed = Environment.TickCount - ticksElapsed;
????????????? Completed();
???????? }
???? }
???? // This subroutine is callback for Threadpool.QueueWorkItem.? This is the necessary
???? // subroutine signiture for QueueWorkItem, and run is proper for creating a Thread
???? // so the two subroutines can! be combined, so instead just call Run from here.
???? private void RunPooledThread(object state)
???? {
???????? Run();
???? }
???? // Add a queue request to Threadpool with a callback to RunPooledThread (which calls
???? // Run()
???? public void StartPooledThread()
???? {
???????? // Create a callback to subroutine RunPooledThread
???????? WaitCallback callback = new WaitCallback(RunPooledThread);
???????? // && put in a request to ThreadPool to run the process.
???????? ThreadPool.QueueUserWorkItem(callback, null);
???? }
???? // Start a new thread, running subroutine Run.
???? public void StartThread()
???? {
???????? Thread newThread;
???????? newThread = new Thread(new ThreadStart(Run));
???? newThread.Start();
???? }
}
其中,放大的部分基本是你搞不懂的部分,那就需要學(xué)習(xí)了。然后可以通過這個完整的程序,體會線程編程的作用和能夠解決的實際問題。
“順藤摸瓜”的具體步驟是:
1、? 找到完整并能夠運行的程序代碼;
2、? 運行程序,先看看這個程序有什么效果,解決了什么問題;
3、? 逐個打開每個代碼文件,按照上面的方法,快速瀏覽代碼,將遇到的自己含糊或者不懂的部分記錄下來;
4、? 逐個查找?guī)椭Y料,逐個理解,不要試圖一次都明白;
5、? 然后自己重新建立一套程序,把自己明白的代碼部分粘貼到自己的程序中;
6、? 把自己剛剛理解的部分,親自編寫一遍,不要看原來提供的代碼,靠自己的理解來編寫;
7、? 如此循環(huán),直到把所有代碼重新編寫了一遍;
8、? 運行你自己的程序,會發(fā)現(xiàn)問題,調(diào)試程序,從調(diào)試程序中會得到更多體會;
?
.NET 程序的總體結(jié)構(gòu)
任何 .NET 程序,就是一個程序文件。雖然 .net 可以在一個文件中定義多個類,但通常象java 一樣,都是一個類使用一個文件比較好。但每個文件都具備以下的總體框架結(jié)構(gòu),只是有些程序少了其中一部分,因為程序簡單,這個框架也是我們編碼和學(xué)習(xí)的基本思路:
?
?
?
?