軟體因計算機而存在,而計算機的實質是數學,所以計算機的知識本質上就是數學知識,
也可以這麼說數學知識也是計算機的基礎知識,計算機的基礎知識也是軟體的基礎知識。在。軟體發展的過程中,軟體的知識也在慢慢地積累,很多軟體知識與數學並無直接的聯絡,而。在這裡我們所要說的就是純軟體的基礎知識。
我們可以把軟體的知識分為兩個部分,專業技能知識和領域知識或說行業知識。
1,專業技能知識
一門程式語言及庫
你可以在書店裡找到各色各樣的關於程式設計方面的書籍,但是我建議你只需要深入地掌握
一門便可,而且任何程式設計師都需要熟悉C語言。你所深入掌握的語言可有多種選擇。如果你從事的是驅動程式開發,我想必須要掌握組合語言,C語言也是個不錯的選擇,而如果是做UI的話C++也許更好,Java語言比較適合網路程式的開發,當然JavaScript在google肯定很受推崇。
對於程式設計師來說,程式語言就相當於遊俠手中的武器,可以是長劍,也可是以是短劍,可以是大刀,也可以是匕首。這些武器各有所長,而要發揮這些武器的長處必須基於一套路數上,那麼對於程式設計師來說就是基於某一種程式語言的程式碼庫。如GNUC的庫就是libc或ulibc。如果你是用C語言,而且你是在類UNIX平臺下開發,那麼你就必須正確理解libc的工作原理,你程式碼裡所呼叫的每一個函式的輸入與輸出,可能的錯誤,可能的歧義,對系統可能產生的影響。比如某一個函式是否是可再入的,還是不可再入的,如果出現了多執行緒同時呼叫的情況會發生什麼錯誤等等細節上的問題。
一種程式設計思想
全世界都驚歎於毛澤東的領導和軍事才能,而在他的才能表象之後是什麼,是他的革命
精神,是他的睿智的思想。程式設計也一樣,如果沒有了程式設計思想就沒有了指導前進的動力,就沒有了創造的靈感的土壤。軟體知識發展到現在比較常用的程式設計思想就是結構化(模組化)和麵向物件化(設計模式)。
有些語言是在模組化大行其道的歷史背景下被髮明出來的,如C語言,而有些語言則是為了滿足面向物件的程式設計思想而構造出來的,如C++。有一部分程式設計師會認為C語言是結構化的程式語言無法實現面向物件的程式設計思想。其實不然,C語言同樣可以很好地實現面向物件的程式設計思想,只不過有些面向物件的工作由程式設計師來做而已。同樣,面向物件的程式語言也可以用於寫模組化的程式。
一種信仰
就我所接觸過的系統裡,Windows我只會安裝,使用,VC/VB也只能做一些簡單的開發,而MACOS體驗過一次安裝,不過最終還是失敗了,iPhone的系統還沒有機會體驗過。曾經在AIX下做過開發,目前正在Fedora9下做開發,目標板的CPU是SH4,將來也可能是MIPS。
不管是MACOS,Windows,UNIX,Linux等都有各自的追隨著,我把這種現像稱為信仰。就拿我自己來說,我信仰Linux,Linux核心的原始碼對於我來說就是神話。
我覺得在Linux下工作是一件很娛悅的事情。如果你每每解決一些比較棘手的問題,都會
有一種成就感,這是在Windows平臺下感受不到的。所以對於這一信仰,我覺得至少需要知道它的安裝,啟動,配置,安全,如載入程式GRUB,ftp,telnet,sshd,smbd,named等等伺服器的配置,網路安全的配置等等。
如果你要在Linux下進行開發,你必須瞭解Linux的API,標準庫,也就是libc。如果你
的程式是多執行緒的,你還得掌握libpthread.so裡的函式使用方法。GCC,GDB,LD,AS,AR,以
及Makefile和make等等工具的使用。如果你能掌握find,awk,sed,grep,od,nm,objdump
等實用工具的話,將會大大提高你的工作效率。
這,就是我的信仰。
總之一句話,一種程式語言及庫,一種程式設計思想和一種信仰。一切OK!
2,領域知識/行業知識
我記得我的第一份工作是銀行的交易開發程式設計師,當時是一家外包公司把我外派到工商
銀行,我對工商銀行的業務一無所知。不過初出茅廬不怕虎,硬是一個人完成了一個我一無所知的專案,而僅憑我對自己技術實力的自信。
但事後我卻有些後怕,因為我並不明白,為什麼那個整數要乘以個0.456存入到資料庫,
也不知道銀行對資料的精確度是多大,等等細節上的問題我一無所知。那我只能求上天保佑,哪天不要多扣了人家的錢,天啊,這事我也做了?!當然不至於那麼嚴重:)
後來我確實發現自己對於銀行這套業務系統瞭解起來比較吃力,我寧願花點時間寫些小
的C程式也不願花時間去肯那些苦澀的業務流程文件。所以在那家公司呆満一年後我辭職了。
我想,大部分程式設計師都想做一些相對技術含量高的開發工作,像那種整天與資料和資料
庫打交道的開發工作,隨便有點志向的程式設計師也不願意去做,當然如果錢足夠多的話我還是願意的:)
但現在我發現我錯了。因為這部分也是軟體知識的一部分。就拿我目前的工作來說,技術上不會有太大的困難,但是藍光規格以及其涉及到的規格相當的多,恐怕沒有十年時間無法做到精通。這就是領域知識或說是行業知識。有些人一生只做一件事,還不一定能做好,而我現在只做了不到兩年,雖覺時間不長但也不短,縱是一無所獲。
所以,我覺得自己仍不是一名合格的開發者。軟體開發的基礎知識包括專業知識和行業
知識,如果基礎知識不完整,那麼這個程式設計師不會是一個合格且高效的程式設計師。
軟體因計算機而存在,而計算機的實質是數學,所以計算機的知識本質上就是數學知識,
也可以這麼說數學知識也是計算機的基礎知識,計算機的基礎知識也是軟體的基礎知識。在。軟體發展的過程中,軟體的知識也在慢慢地積累,很多軟體知識與數學並無直接的聯絡,而。在這裡我們所要說的就是純軟體的基礎知識。
我們可以把軟體的知識分為兩個部分,專業技能知識和領域知識或說行業知識。
1,專業技能知識
一門程式語言及庫
你可以在書店裡找到各色各樣的關於程式設計方面的書籍,但是我建議你只需要深入地掌握
一門便可,而且任何程式設計師都需要熟悉C語言。你所深入掌握的語言可有多種選擇。如果你從事的是驅動程式開發,我想必須要掌握組合語言,C語言也是個不錯的選擇,而如果是做UI的話C++也許更好,Java語言比較適合網路程式的開發,當然JavaScript在google肯定很受推崇。
對於程式設計師來說,程式語言就相當於遊俠手中的武器,可以是長劍,也可是以是短劍,可以是大刀,也可以是匕首。這些武器各有所長,而要發揮這些武器的長處必須基於一套路數上,那麼對於程式設計師來說就是基於某一種程式語言的程式碼庫。如GNUC的庫就是libc或ulibc。如果你是用C語言,而且你是在類UNIX平臺下開發,那麼你就必須正確理解libc的工作原理,你程式碼裡所呼叫的每一個函式的輸入與輸出,可能的錯誤,可能的歧義,對系統可能產生的影響。比如某一個函式是否是可再入的,還是不可再入的,如果出現了多執行緒同時呼叫的情況會發生什麼錯誤等等細節上的問題。
一種程式設計思想
全世界都驚歎於毛澤東的領導和軍事才能,而在他的才能表象之後是什麼,是他的革命
精神,是他的睿智的思想。程式設計也一樣,如果沒有了程式設計思想就沒有了指導前進的動力,就沒有了創造的靈感的土壤。軟體知識發展到現在比較常用的程式設計思想就是結構化(模組化)和麵向物件化(設計模式)。
有些語言是在模組化大行其道的歷史背景下被髮明出來的,如C語言,而有些語言則是為了滿足面向物件的程式設計思想而構造出來的,如C++。有一部分程式設計師會認為C語言是結構化的程式語言無法實現面向物件的程式設計思想。其實不然,C語言同樣可以很好地實現面向物件的程式設計思想,只不過有些面向物件的工作由程式設計師來做而已。同樣,面向物件的程式語言也可以用於寫模組化的程式。
一種信仰
就我所接觸過的系統裡,Windows我只會安裝,使用,VC/VB也只能做一些簡單的開發,而MACOS體驗過一次安裝,不過最終還是失敗了,iPhone的系統還沒有機會體驗過。曾經在AIX下做過開發,目前正在Fedora9下做開發,目標板的CPU是SH4,將來也可能是MIPS。
不管是MACOS,Windows,UNIX,Linux等都有各自的追隨著,我把這種現像稱為信仰。就拿我自己來說,我信仰Linux,Linux核心的原始碼對於我來說就是神話。
我覺得在Linux下工作是一件很娛悅的事情。如果你每每解決一些比較棘手的問題,都會
有一種成就感,這是在Windows平臺下感受不到的。所以對於這一信仰,我覺得至少需要知道它的安裝,啟動,配置,安全,如載入程式GRUB,ftp,telnet,sshd,smbd,named等等伺服器的配置,網路安全的配置等等。
如果你要在Linux下進行開發,你必須瞭解Linux的API,標準庫,也就是libc。如果你
的程式是多執行緒的,你還得掌握libpthread.so裡的函式使用方法。GCC,GDB,LD,AS,AR,以
及Makefile和make等等工具的使用。如果你能掌握find,awk,sed,grep,od,nm,objdump
等實用工具的話,將會大大提高你的工作效率。
這,就是我的信仰。
總之一句話,一種程式語言及庫,一種程式設計思想和一種信仰。一切OK!
2,領域知識/行業知識
我記得我的第一份工作是銀行的交易開發程式設計師,當時是一家外包公司把我外派到工商
銀行,我對工商銀行的業務一無所知。不過初出茅廬不怕虎,硬是一個人完成了一個我一無所知的專案,而僅憑我對自己技術實力的自信。
但事後我卻有些後怕,因為我並不明白,為什麼那個整數要乘以個0.456存入到資料庫,
也不知道銀行對資料的精確度是多大,等等細節上的問題我一無所知。那我只能求上天保佑,哪天不要多扣了人家的錢,天啊,這事我也做了?!當然不至於那麼嚴重:)
後來我確實發現自己對於銀行這套業務系統瞭解起來比較吃力,我寧願花點時間寫些小
的C程式也不願花時間去肯那些苦澀的業務流程文件。所以在那家公司呆満一年後我辭職了。
我想,大部分程式設計師都想做一些相對技術含量高的開發工作,像那種整天與資料和資料
庫打交道的開發工作,隨便有點志向的程式設計師也不願意去做,當然如果錢足夠多的話我還是願意的:)
但現在我發現我錯了。因為這部分也是軟體知識的一部分。就拿我目前的工作來說,技術上不會有太大的困難,但是藍光規格以及其涉及到的規格相當的多,恐怕沒有十年時間無法做到精通。這就是領域知識或說是行業知識。有些人一生只做一件事,還不一定能做好,而我現在只做了不到兩年,雖覺時間不長但也不短,縱是一無所獲。
所以,我覺得自己仍不是一名合格的開發者。軟體開發的基礎知識包括專業知識和行業
知識,如果基礎知識不完整,那麼這個程式設計師不會是一個合格且高效的程式設計師。