NO IMAGE

 

本系列文章由ex_net(張建波)編寫,轉載請註明出處。

http://blog.csdn.net/ex_net/article/details/7583396

作者:張建波    郵箱: [email protected]  電話:13577062679  歡迎來電交流!

 

另:我正在組建創業團隊,從事物聯網、智慧小區、計算機系統整合軟體、平臺開發,尋求計算機、電子資訊、營銷的夥伴加入,年輕人需要有夢想。

       就業不如創業!以其給別人打工,不如給自己打工!我們都是熱血青年,攜手去打造屬於我們自己的天空!

       由於本人現處雲南昆明,誠摯歡迎你的加入!

 

 

近日有一位同學發了個資訊來問我關於大學生如何強大起來。

原文如下:

大學期間c 等專業課,一定要學的十分牛嗎?會影響你在以後的發展嗎?怎么能是自己變的強大起來?謝謝我是大一的學生希望前輩給些建議

其實,關於這個話題,一直以來都有很多同學、朋友和我一起探討。只是本人覺得,我還沒有“成功”。如果現在談這個話題,可能有點“班門弄斧”了。

回憶過去—-我的PC萌芽時期

(我眼中的計算機10年曆程)

我自己從中學時代到現在,一直從事計算機相關的工作、學習。這麼些年的學習、工作也積累了些經驗,今天拿出來和大家一起交流、探索。

記得95年開始,接觸了MS-DOS,那個時代,可能會點“DOS命令”就可以算高手,再懂點BASIC語言就算是程式設計師了吧。在那個時代,從MS-DOS、MSDOS6.22、windows31、windows95、windows98、windowsME一路走過來。

在MS-DOS時代,每1個“玩電腦”的人,可能都是“高手”。畢竟無論你做什麼事都得敲命令。到了2012年的今天,會玩電腦、會操作的電腦的人不一定懂計算機了,這就是為什麼計算機可以普及的一個原因吧。

DOS的時代,產生了很多“英雄級人物”,王江民、求伯君、樑肇新、

KV300,改寫中國計算機防毒世的產品,也是創造“單月銷售超過千萬的歷史最好記錄”。當然今天的“KV防毒雄風已經不如當年了”

在wps的時代了,什麼是office、什麼是word,估計很少有人知道!不像現在,國人只知office!WORD、PPT成為了行業標準。

在我的成長路上,樑肇新所撰寫的“程式設計思想”一書對我影響較大。不過,現在這本書已經很難找到了,因此我摘錄了部分“法則”

http://blog.csdn.net/ex_net/article/details/6916451

“超級解霸”相信很多搞計算機的70、80後都不陌生,Skin(換面板)就是從哪個時代的產物。超級解霸的成功可能緣於VCD吧,97,98年盜版VCD鋪天蓋地,電腦播放VCD可能是作為多媒體電腦的一個重要特徵之一。除了win95、win98是必裝軟體外,就是“超級解霸”了。

在這一階段我學會了DOS命令、BASIC語言、作業系統的安裝。回憶當時的行情,裝一次系統是RMB:100元,隨便幫人整整電腦大概50元一次。心動的我,都有點想放棄學業,去做一個“電腦技師”了,每天除了學習,就是拎著自己“攢”的“系統盤”四處幫人“整電腦”。說實話,那個時候的系統盤無非是“D版的win95、win98系統”而已,現在說出來,自己都會覺得臉紅(盜版)。

一個合格的電腦技師其實就是“系統盤”“工具盤”“啟動盤”。有了這3張盤,基本可以“走遍天下都不怕!”

回憶起2000年,我到雲師大參加“全國計算機等級考試2級”,看到旁邊的一位年長的同學“問”監考老師“老師,[ te bo c ](TurboC) 怎麼調出來?”,當時還覺得奇怪暗暗自喜(TC都找不到,還來考試!)。結果奇蹟發生了,不到40分鐘,這位學者完美交卷了。經過監考老師的檢查“成績不為0” !那麼估計就是100分了。

一個經典的入門程式碼,雖然很多同學都會寫?但是真正可以理解這段程式碼的核心的同學是少之又少。

hello word!

hello word作為入門程式碼,每一個初學者的入門課程。實際上,我是比較反對用hello, world作為入門課程的。至於為什麼,我也說不準,只是覺得這個太枯燥了。很多“學完”C語言的同學,腦子裡好像覺得C語言就是用來做“字元列印\加減乘除的”。

在1995年到2000年的時間裡,還發生了很多知名事件,面對每一次事件,都是一次學習的機會。

事件一、邏輯炸彈

97年的邏輯炸彈,讓很多KV300的“盜版使用者”嚐盡了苦楚。

計算機中的“邏輯炸彈”是指在特定邏輯條件滿足時,實施破壞的計算機程式,該程式觸發後造成計算機資料丟失、計算機不能從硬碟或者軟盤引導,甚至會使整個系統癱瘓,並出現物理損壞的虛假現象。

結果這次事件,我學會了Debug。知道了硬碟分割槽表、瞭解了BIOS中斷。

計算機啟動的基本流程

(1)首先是主機板加電

(2)BIOS進行自檢,在一些很老的電腦上還可以看到如下的介面

在這一階段,計算機有BIOS完成自檢。主要進行CPU、RAM(記憶體)、硬碟、光碟機等裝置的檢測。自檢成功後往往可以聽到“滴“的一聲。

很多計算機維修工程師初期主要是靠”聽音識別故障”

例如:Award BIOS 的報警聲音

通常情況下,如果有問題就會按“DEL鍵”進BIOS修改引數,或者檢查。

在那個時候,經常出現由於啟動順序設定不對、硬碟主從盤設定不對、或者硬碟的工作模式設定不對造成無法啟動

(3)BIOS自檢完成後, BIOS就把啟動權交到了OS(作業系統)

這一個環節實際上將CPU的執行地址跳轉到啟動盤(軟盤、光碟機、硬碟)的啟動扇區。

例如:

如果要讓計算機可以從軟盤啟動,那麼可以用 format /s a: (該命令在 dos 、win95/98/ME 下有效)

如果要計算機從光碟啟動, 那麼首先要製作可以啟動的軟盤,然後將軟盤映象為img檔案,通過燒錄軟體燒寫到CD-ROM的指定扇區。

對於windows系統,如果要讓計算機從硬碟啟動,那麼需要在硬碟分割槽後,設定“啟動分割槽”很多初學者對硬碟分割槽後,安裝完系統,發現計算機無法啟動時。往往都是由於沒有指定“啟動分割槽”。尤其是用GHOST恢復的系統。

設定啟動分割槽實際上就是把該分割槽的標誌位設定為:80h

(4)系統從80h開始啟動,然後依次載入windows的核心,逐步完成windows 的作業系統啟動

事件二、CIH病毒

CIH病毒是一種能夠破壞計算機系統硬體的惡性病毒。據目前掌握的材料來看,這個病毒產自臺灣,最早隨國際兩大盜版集團販賣的盜版光碟在歐美等地廣泛傳播,隨後進一步通過Internet傳播到全世界各個角落。

在99年的4月26日,我像往常一樣開啟電腦,準備打字。確發現電腦開機後藍藍的一片,顯示一些莫名其妙的字元。傻乎乎的我,關機、開機、再關機、再開機。折騰了老半天。直到幾天後到昆明才打聽到中CIH了。作為全球第一款破壞硬體的病毒,它的出現真實震動了世界。

其實,CIH的出現也是伴隨著半導體技術的發展產生的,98年後Flash 的出現,讓很多主機板生成商,將BIOS程式放入了Flash的快閃記憶體晶片內。這就為CIH破壞主機板提供了物理條件。在那個時候,我從“高人”朋友指點後,學到了用“程式設計器”將程式從Flash晶片讀取後燒寫進“紫外線擦寫的ROM晶片”裡。這一招對抗CIH是相當管用的。

名詞介紹:

FLASH:Flash 是快閃記憶體,可以反覆讀寫的一種儲存介質,掉電後資料不會丟失

紫外線擦除ROM:紫外線擦除ROM是一種特殊的EEPROM晶片,該晶片要擦除資料時就用太陽晒晒,寫資料時用12V以上的電壓寫入。因此,只要不見陽光,就不怕CIH病毒。

事件三、千年蟲Y2K

計算機2000年問題,又叫做“2000年病毒”、“千年蟲”、“電腦千禧年問千年蟲題”或“千年病毒”。縮寫為“Y2K”。是指在某些使用了計算機程式的智慧系統(包括計算機系統、自動控制晶片等)中,由於其中的年份只使用兩位十進位制數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運 算時(如多個日期之間的計算或比較等),就會出現錯誤的結果,進而引發各種各樣的系統功 能紊亂甚至崩潰。

說實話,千年蟲在我印象中並沒有那麼可怕。因為他就沒在我身上發生。可憐我那個時候,還擡個小板凳陪著父親一起,看著windows的那個時鐘1分1秒的走過。終於到了2000年了。呵呵

不過千年蟲問題上,學會了計算機的硬體程式設計方面的知識。

事件四、dot-com泡沫

網際網路泡沫(又稱科網泡沫或dot泡沫)指自1995年至2001年間的投機泡沫,在歐美及亞洲多個國家的股票市場中,與科技及新興的網際網路相關企業股價高速上升的事件

記得,在那個時候,“個人主頁”是很多電腦愛好者的象徵、嗜好吧。56K的小貓在2000年進入了我家,也就在這個時候第一次體驗到“上網衝浪”。

免費空間、免費域名、包括現在流行的“花生殼”都是那個時候的產物。不過時至今日只有“花生殼”活了下來,個人主頁被現在的Blog取代了。

在2000年,經常聽到“誰、誰、誰”的個人主頁獲得了多少“點選量”,點選量==Money!!!,我也被深深的吸引了,每天都去自己點選自己的主頁,希望多點點選量。當大家都在沉迷在“提升點選量”的時候,網際網路泡沫出現了。大量的個人主頁死掉了,點選量從剛開始的100次=0.1元錢,直線貶值到1000=0.01元了。就像股市一樣開始一路狂飆。我印象裡記得,最後好像是跌到了10000次=0.01元了把。。。。

本想靠這個賺點小錢的我開始失望了。。。我開始後悔,我怎麼比別人慢半拍呢?我要是早1年做,也許可以賺點。

事件四、共享軟體

網際網路泡沫出現後,自我感覺良好的我,開始吧目光轉向了DBMS系統了,隨著IT行業的發展,計算機進入到了各個行業,DBMS系統一個系統玩玩可以賣到1,2萬元,甚至更貴。

 Y2K後,我進入了高中,也就在這個時候,我不在滿足僅僅會裝系統,會敲幾個命令,會寫幾行BASIC了。目光盯上了“資料庫”,因為我覺得資料庫就是金子。的確,在2012年的今天,資料任然是很多業務系統的核心。

98年前,因為“年齡”問題,不能創業,看著別人修電腦、大把大把的賺錢,自己只能感嘆!

2000年前, 只恨自己發現“網際網路”太晚,錯過了“創業”最佳時機!

現在,感覺機會來了!開始了一路狂學,FoxBase、Visual FoxPro、Visual Basic

不過很可惜,當自己吧FoxPro 學會了,發現世界變了,單機版的資料庫應用系統已經不流行了。

軟體從:單機版 已經 發展到 多機聯網了

現實: 小商店 已經 發展到了 連鎖店模式了

不得已,又開始了“網路程式設計”學習。這個時候開始了.NET進軍了。

隨著時間的推移,到了2003年左右, 國產共享軟體已經發展到了巔峰,基本“只要你想到的軟體,都有了”,這個世界不在缺你!突然間發現自己失去了方向,學了那麼多年的技術,突然間覺得“英雄無用武之地了”。

共享軟體是在80年代發展起來的,當時是依靠軟體發行商發行磁碟來發放軟體試用版,並通過郵購或者信用卡收取軟體註冊費。隨著網路的高速普及和網路技術的快速提高,給共享軟體創造了前所未有的發展機遇,使共享軟體的傳播、收費、註冊變得非常便利,只需坐在電腦前通過網路就都能實現,共享軟體迎來了輝煌時代。

微軟4億美元價格收購了Hotmail的傳奇深深影響了很多人。

Foxmail、FlashGet、NetAnts 創造了一個個奇蹟,也激勵了很多熱血青年,當然也包括我在內。

不過,說實話截止到2006年,我還是一事無成!

總結一下,截止到2006學過、碰過的技術、語言

啟蒙語言:BASIC,第1次是在小霸王學習機上“玩”過,為什麼稱之為“玩”呢?因為俺那個時候是小學的文化,真是無法理解PRINT、GOTO。呵呵

入門語言:FOXBASE 語言,也許是路沒走對,學習了一個相當難整的東西,不過好在中國人發明了“雅奇MIS”,由了它的幫助,可以自動生成80%左右的程式碼。

第1次全面的學習:Visual Basic6.0 ,從這個時候開始,總算走入了程式設計的殿堂。隨著程式設計學習深入,發現VB對系統的操作、控制能力不強。因此開始了API學習。通過windows API操作,讓 VB 去呼叫系統的資源。用VB去呼叫API,主要是為了建立“異形視窗”“不規則視窗”。

自從迷上了程式設計,尤其是通過VB開啟了程式設計殿堂的大門。隨之而來的就是我開始了漫漫“長征路”

VB 、C語言、C 、Pascal、Java、J 、C#、C .NET常見的語言,幾乎都學了一個遍,生怕自己落後!

起步篇

 (思想決定高度)

      回憶完了過去,看看現在的我,也許真的應驗了老人說的“30而立”,真是快到了30,才醒悟!

20歲(女)——桃李年華;
24歲(女)花信年華;
至出嫁—— 梅之年;
至30歲(女)——半老徐娘;
20歲(男)——弱冠;
30歲(男)——而立之年;
40歲(男)——不惑之年、強壯之年;
50歲——年逾半百、知非之年、知命之年、艾服之年、大衍之年;
60歲——花甲、平頭甲子、耳順之年、杖鄉之年;
70歲——古稀、杖國之年、致事之年、致政之年;
80歲——杖朝之年;
80~90歲——耄耋之年;
90歲鮐背之年;
100歲——期頤。

    其實,計算機語言就像“武功招式”,無論你學的再多,再深,你也僅僅是個工具玩家!因為如果你不具備“程式設計素質”,學再多的語言也是無用的。從2008年以來,我投身了教育事業。通過自己教學、實驗,結合自己大學時代的課程。

      得出一個結論,在校大學生到底學了些什麼?其實,我感覺他們僅僅學會了玩弄工具。VB、VC、Java、.NET學了一個遍。

      資料庫:Access、MS SQL2000、Oracle都學,成天熱衷於各大廠家的“傑作”

      從自身來看,大學生應該學習的是“思想”而不是“工具、語言”。

      如果要真正的成為“高手”,一定得有思想,“程式設計的思想”。

      面臨一個問題的時候,選擇什麼語言、用那種開發工具、採取何種平臺去完成這件事,是比較關鍵的。

 

    2011年下半年,我與朋友一起開始了人生的第2次創業,共同組建科技公司,從事軟硬體產品開發。我的思想、方向也開始了變化。在團隊組建初期,公司招聘了很多人,都是應屆畢業生。說實話,通過他們可以看出校園學的知識與工作崗位需要的知識,真是差距很大。尤其是解決實際問題的能力不足。因為我自己從事了3年的教師工作,因此逐步形成了定期對他們培訓的計劃,通過定期培訓,逐步給團隊成員灌輸“程式設計的思想”。

      在我看來,程式設計的思想就是解決實際問題的思路。無論多麼複雜的業務,最終一定是可以分解為“輸入”—–“輸出”的。學過微控制器的同學,有沒有發現CPU的管腳都是“標示”為I/O,在硬體上,計算機是按照輸入、輸出設計的。那麼軟體也是一樣。

   那麼如何提高自己的程式設計思路呢?

      我總結了以下幾點:

             (1)重視“需求分析”,學過計算機軟體工程、系統工程的同學都會背這一篇。

             (2)多多查閱資料,面對一個專案(問題)時,多用google、百度查詢相關資料。主要是查詢別人對該問題的“解決方案”、“系統架構資料”

             (3)學會“畫圖”比學會“語言”重要,尤其是繪製系統架構圖。

                        例如,我最近正在計劃開發的一個系統平臺。

             

              良好的繪圖基礎是成功的開始。(當然,我現在還沒有成功,可能沒有資格這麼說。但是我相信,將來的某一天我成功了,那麼這句話一定是“至理名言”)

            (4)對待技術,要學會“淺嘗輒止”,因為IT行業是高風險行業,每天都會有新技術產生。你不可能每天都去跟隨新技術跑的。尤其新技術往往帶有“廠商”利益。

                     例如:symbian 、Android、IOS之爭,誰能笑到最後?

                                 誰都不好確定,既然無法確定,作為小角色的我們,怎麼辦呢?

            (5)萬變不離其宗

                    軟體無論怎麼變,單機變多機,C /S變  B/S,但是核心都是為人民提供服務,只要可以提供服務,滿足使用者的需求。沒有人會管你是用什麼技術開發的!

                     可能會有些人吹噓:“你看我們的軟體是採用了xxx 技術,xxxx平臺,最新最強的 xxxx平臺”,這一切都是廣告語。使用者關心的只是,能不能用?好不好用!

                     而我們要做的就是,選擇自己最熟悉的技術、最穩定的方法,完成使用者的需求。

 

                    軟體開發在我看來,就是解決使用者需求的過程!程式設計(敲程式碼)僅僅是這項活動中的體力活而已!

    

 

程式設計切忌“蓋空中樓閣”,學習切忌“囫圇吞棗”

       軟體的程式設計,在我理解為有2層含義: 一是設計,二是敲程式碼。例如,“學生成績管理系統”,很多老師都喜歡作為課程設計或實驗的題目,甚至作為畢業設計。

       題目雖好,但是70%~80%的結果都是令人失望的。因為大多數交上來的“作品”都是用程式碼堆砌的,沒有任何“設計思想”可言。

       好的軟體,靠的是“設計”,而不是程式碼。

      從我的個人經歷來看,如果一個不懂DOS、不懂DEBUG除錯技術的人,是很難寫出高水準的程式的。就算能寫出“程式碼”也只能是皮毛。任何技術的發展,都是傳承在此之前的“優秀技術”總和。

      由於DOS是一個黑暗的時代,因此“蘋果”開創了“桌面”操作時代,當然可能很多人為認為windows是微軟公司發明的。其實究竟是“喬布斯”還是“比爾蓋茨”都不重用了,重用的是DOS到Windows的轉變,將電腦的“使用難度”降低了。這就是一個設計理念的改變,計算機不再是“科學家”的玩物。

     當然,Windows的出現,也改變了“程式設計”。Basic語言被冠上了 Visual,C 語言被冠上了Visual。

     沒有“Visual 可視”的年代,就算是最基本、最簡單的 Basic程式設計,你也得懂“DOS命令”、懂計算機中斷地址。

    可能有人會問 學DOS命令有什麼好處呢?

        至少在沒有防毒軟體時,中了“ARP攻擊”你還可以臨時拯救哈計算機。呵呵

    在DOS時代,bat(批處理)技術也是一門高深的“程式設計技術”。如果把DOS學會掌握了,那麼Linux的Shell程式設計,也會事半功倍!

    Linux下,一直沒有一個Visual Studio 航母級的整合開發環境,大量的軟體編譯、配置、安裝都還依賴於shell,因此很多初學者往往很難入門。

              如果你對 Linux C/C 程式設計感興趣,也可以在Linux下用 Eclipse來學習開發 http://blog.csdn.net/ex_net/article/details/7251664

   DOS時代,所有的程式都可以通過DOS中斷、BIOS中斷獲取到計算機的控制權。但是在Windows 2000/XP 下就很難這麼操作了。

  如果程式設計是從Windows XP環境下 C 起步,那麼可能對  windows API這個東西會覺得莫名其妙的。

  如果程式設計是從Windows XP環境下 C# 或 Java起步,那麼可能對  windows API 是什麼都可能不知道了!

  那麼windows API 這個東西有必要掌握嗎?對於打算從事計算機軟體設計、程式設計的同學來說,是很有必要的。通過windows API學習,你的軟體設計思想可以拓寬了很多,你將不在受制了語言的約束。

    舉個例子:

        Q1、編寫一個程式,將計算機在某一個時刻關機。

               給你5分鐘,你可以想到辦法嗎?(C語言、C 、JAVA。。。。凡是能看到的語言,你都可以選擇)

       

       Q2、編寫一個程式,可以在Linux或Windows 下將計算機在“某”一個時刻關機。

               給你5分鐘,你可以想到辦法來實現嗎?

      

       以上這2個問題,解決的辦法至少有幾十種。你可以寫出幾種?但是無論你怎麼寫,怎麼程式設計,怎麼去實現它,最終的核心程式設計思想都是一樣。

      (1)呼叫DOS中斷關機

      (2)呼叫作業系統API介面關機

               例如: windows:

                               BOOL ExitWindowsEx( UINT uFlags, // 關閉引數   

                                                                         DWORD dwReserved // 系統保留,一般取0  

                              );

               

     (3)呼叫作業系統 Shell,呼叫程式關機

                Linux :  system(“halt”)  或  system(“init 0”)

                windows:  shell(c:/windows/system32/shutdown.exe)

        以上程式碼或方法僅僅適用於C / C , 如果是C# 或 Java 那麼怎麼辦呢?

        在C#下, 可以通過呼叫API函式來完成,僅僅比VC多一個操作,就是要把Windows API函式進行封裝

       在Java下, 稍微有點麻煩。 得通過JNI呼叫了。首先將關機的函式封裝在C程式碼裡, 然後用 gcc 或 g 編譯。然後再在Java裡進行本地呼叫。實際上Java僅僅充當了GUI作用,而所有的操作程式碼均在C程式裡完成了。

      當然,這麼做,很可能還無法實現,因為可能遇到C程式沒有許可權。那麼怎麼辦呢?

      換個思路,用VC寫一個後臺服務程式負責關機,然後採用 Socket程式設計,監聽本機的某一個埠(例如8000),至於協議(TCP、UDP)隨便了。

     這樣做後,其實無所謂客戶端程式了, Java、C#、只要是可以提供Socket訪問的語言,都可以通過TCP或UDP和服務程式通訊完成關機了。

 

     。。。羅羅嗦說了這麼多。。。

             其實就想告訴大家2個觀點

                       觀點1:“對待技術一定要【廣】,當你知道的知識越【廣】,你解決問題的思路就越【寬】。你解決問題的能力就越高”

                       觀點2:“不要認為過時的技術就沒用”,技術是不會過時的,而是換了個地方應用。

            

             計算機從z80、8086、80286、80386、80486、80586、奔騰、奔騰4、酷睿。。。。。一路走來。

             如果學電子的同學有沒有去對比 z80、8086 和 C51、S51這些微控制器的,如果你去對比,你會發現原來微控制器與最早最早的計算機是驚人的相似!

 

 

程式設計不應有門戶之見

       很多朋友經常問我:

             學Java好?還是學C#好?

             學C好?還是學C 好?

            軟體是採用C/S 還是 B/S 好?

          諸如此類的問題多而再多。我是一個“實用主義”者,信奉的是“拿來主義”。對於語言、工具,我個人認為沒有必要去在意。工具也好、語言也好,都是給人們用來解決問題的。以其在一顆樹上吊死,還不如柳暗花明又一村!

           不同的語言都有不同的用途和領域。就像如果基於80C51微控制器程式設計,你非要去找C#或Java程式設計,可能嗎?(也許今後可能,因為有些公司的ARM處理器已經支援Java程式了)

           就拿做動態網站來說,ASP、ASP.NET、PHP、JSP、CGI,到底學什麼好呢?  這個問題真是很難回答?

           但是無論你學什麼,總會找到工作的。

            因為:無論是用ASP 還是 PHP,其實結果一樣的,既然結果是一樣的,那麼僅僅是實現的過程不同而已。問題的關鍵在於,你對結果的預期、對過程的把握!

            如果,老闆交代你做一個網站,你首先應該想到的是“預期結果”佔什麼樣?然後才是選擇哪種工具來“幹”這個活而已。

          

             學的語言再多,如果不能總結出適合自己的思想,那麼還是白學了!

            我經常對我的學生、朋友這麼講:

                     懂C語言的話,學C 最多隻要1周,

                     懂C 語言的話,學Java最多1天

                     懂Java語言的話,學C#最多幾個小時

              如何才能到達上面的境界呢?關鍵還是在於“程式設計思想”。因為解決問題的關鍵是“思想”,而“語言”僅僅是工具。

              好比種地一樣,有3畝地要播種,你可以用“鋤頭”,也可以用“雙手刨”,當然也可以用“播種機”。

 

         

 

                          未完待續,今天就先寫到這裡吧!

                          夜已深,小孩已經入睡了,希望明天是個好天氣!