㈠ 學編程的報什麼專業
想學編程就要讀軟體工程.我也是中山人,在孫文學編程應該一般般吧.
計算機科學系
計算機科學與技術專業 培養具有良好綜合素質和開拓創新能力,系統掌握本專業的基本理論、基礎知識和基本技能與方法,具有實際應用和科學研究能力的計算機及其相關技術與產業領域的復合型應用技術人才。
主要課程:數學分析、高等代數、數理邏輯、集合論與圖論、計算機科學導論、程序設計基礎、數字電路與邏輯設計、計算機組成原理、數據結構與演算法、操作系統原理、匯編語言程序設計、資料庫系統原理、編譯原理、軟體工程導論、計算機網路、計算機體系結構、並行與分布式計算、計算機圖形學、信息安全技術、多媒體技術、Linux原理與應用等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。
網路工程專業 培養具有實際運用先進的工程化方法和工具從事網路規劃、設計、開發和維護等工作,具備工程項目的組織與管理能力的實用型、復合型網路工程技術與管理的高級人才。
主要課程:數學分析、高等代數、數理邏輯、集合論與圖論、計算機科學導論、程序設計基礎、數字電路與邏輯設計、計算機組成原理、數據結構與演算法、計算機網路、操作系統原理、計算機體系結構、計算機介面技術、通信原理、網路系統設計、密碼學與網路安全、無線通信與網路、Linux原理與應用等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。
信息安全專業 培養具有扎實的數理基礎,較好的外語和計算機技術運用能力,掌握信息安全的基本理論與技術、計算機與網路通信及其安全技術以及信息安全法律法規等方面的知識,能運用所學知識與技能去分析和解決相關的實際問題,具有較高的綜合業務素質、較強的創新與實踐能力,可以在政府、國防、金融、公安和商業等部門從事信息安全產品研發、信息系統安全分析與設計、信息安全技術咨詢與評估服務、信息安全教育、信息安全管理與執法等工作的高級專業人才。
主要課程:數學分析、數理邏輯、集合論與圖論、信息安全數學基礎、計算機組成原理、程序設計基礎、數據結構與演算法、資料庫系統原理、軟體工程導論、計算機介面技術、計算機網路、通信原理、資訊理論基礎、操作系統安全、Linux原理與應用、網路協議與驗證、移動計算、計算機密碼學、網路安全技術、計算機病毒、信息隱藏技術、電子商務技術、信息安全法律法規等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。
上述專業的畢業生適合在計算件軟硬體企業、網路公司、電信企業、金融、交通、銀行等各類企事業單位就職,從事計算機技術管理、計算機控制、軟體和信息安全產品的生產、開發、應用和維護工作,也可在政府管理部門、金融和經濟管理部門從事計算機應用、網路信息管理和維護工作,還可在高等學校和研究部門從事教學、科研工作。
電子與通信工程系
電子信息科學與技術專業 培養基礎扎實、知識面較寬、素質高、能力強,有一定創新能力、科學研究能力和解決實際問題的能力,適應21世紀社會和經濟發展的需要,能從事電子信息科學與技術領域的科學研究、教學與應用技術等工作的復合型人才。
畢業生具有堅實的數理基礎,掌握電子學與信息系統的基本理論和方法。熟悉電路與系統、電磁場與電磁波理論、微波與射頻技術、計算機網路以及通信和計算機應用等技術。具有較高的實驗能力和一定的分析和解決實際問題的能力;了解電子學與信息系統的新發展並具有一定的科學研究、應用研究、技術開發及教學等方面的能力。較為熟練地使用一種外國語閱讀專業書刊及外文資料。
學生畢業後適合在通訊、銀行、企業、機關等部門,從事電子技術和計算機技術管理、生產方面的開發應用,以及在高等學校和研究部門從事教學、科研工作。
主要課程:高等數學、概率論與數理統計、大學物理及實驗、高級程序設計、電路基礎理論、模擬電子技術及實驗、數字電路與邏輯設計及實驗、微型計算機原理及實驗、高頻電路、信號與系統、電磁場與電磁波、集成電路設計、資訊理論、微波技術與實驗、數字信號處理、計算機通信與網路、通信原理、EDA原理及應用、單片機原理及應用、數據結構與演算法、現代通信技術、資料庫系統原理等,學生還可選修學校及學院其他專業的相關課程。
自動化專業 自動化是以電子技術、計算機技術、檢測技術、通信技術和控制理論為基礎,研究自動控制系統的組成結構、控制規律及其應用的學科。該專業培養德、智、體全面發展,注重德、智、體、美、勞,具有健全的心理素質和健康的體格。基礎扎實、知識面寬、綜合素質高、實踐能力強,適應適應21世紀社會和經濟發展的需要,能從事自動化和計算機網路控制工程領域的先進技術研究、設計、應用開發及教學等方面的高級復合型人才。
畢業生應具有控制科學與工程學科扎實的基礎理論、基本技能和方法;具有對電子電氣電路、控制系統進行分析、設計和研究開發的能力;掌握信號自動檢測、數據處理的基礎知識與技能;掌握計算機與網路控制技術;有嚴謹的科學作風和創新能力;具有獨立進行科學研究、應用研究、分析和解決實際問題的能力。
學生畢業後適合在各類企業、國家政府部門、事業、通信、銀行、軍事等部門從事電子技術、計算機技術、通信技術及生產過程自動化方面的應用研究、產品開發及行政管理工作,以及在高等學校和研究等部門從事教學、科研及管理工作。
主要課程:高等數學、概率論與數理統計、工程數學、數值計算、高級程序設計、大學物理及實驗、電路基礎理論及實驗、模擬電子技術及實驗、數字電路與邏輯設計及實驗、電力電子技術、電機及拖動基礎、微型計算機原理及實驗、自動控制原理及實驗、信號與系統、現代控制理論、計算機控制技術及實驗、計算機通信與網路、數字信號處理、電氣與可編程式控制制器、過程式控制制工程、單片機原理及應用、自動測量技術、電力拖動自動控制系統、虛擬儀器技術、數據結構、操作系統、資料庫系統原理、科技信息檢索等,學生還可選修學校及學院其他專業的相關課程。
通信工程專業 培養基礎扎實、知識面較寬、綜合素質高、實踐能力強,適應21世紀社會和經濟發展的需要,系統掌握電路分析與信號處理理論、通信原理、網路理論、電磁場理論、傳輸原理、現代電信交換等專業基礎理論;掌握各類通信網、通信系統及其主要設備的構成原理、技術性能、設計、調試、運行維護和管理的基本知識;對國內外通信工程及相關學科的現狀和發展趨勢有一定的了解;有嚴謹的科學作風和創新能力;具有獨立對一般的通信系統和網路進行分析、設計和研究開發的能力。能從事現代通信工程和電信網路先進技術研究、設計、開發及教學等方面的高級復合型人才。
學生畢業後適合在電信企業、郵電管理部門、銀行、交通等部門從事通信、電子技術和計算機應用等方面的管理和技術開發工作,也可以在高等學校和研究部門從事教學和科研工作。
主要課程:高等數學、概率論與數理統計、高級程序設計、大學物理及實驗、電路基礎理論、模擬電子技術及實驗、數字電路與邏輯設計及實驗、微型計算機原理及實驗、高頻電路、信號與系統、電磁場與電磁波、微波技術實驗、通信原理、計算機網路、數字信號處理、資訊理論、操作系統、資料庫系統原理、數字通信系統及實驗、無線通信原理、現代電信交換、光纖通信、數字圖象處理、數據結構、單片機原理及應用、計算機視覺等。學生還可選修該學院其他專業的相關課程。
㈡ 學編程的要求有哪些
俗話說,沒有金剛鑽,就別攬瓷器活兒。套用到
IT
業,英語不行,就別做程序員。網上關
於程序員學英語的文章不少,
但我想談談我自己的看法。
首先詳細討論一下為什麼程序員離
了英語不行,然後針對程序員應該怎麼學英語說說我的體會。
英語是計算機的母語,是程序的母語,所以必然是程序員的母語。
程序中的變數名、函數名
起得好不好是決定代碼質量和可維護性的最關鍵因素。
高質量的代碼應該是這樣的:
代碼基
本上是自解釋的(
self-explanatory
),不需要太多注釋,不管代碼的規模有多大,具有相
關知識背景的讀過文檔的人都可以立刻上手、
立刻參與維護和開發。
要想使代碼能夠自解釋,
給變數和函數起個好名字很關鍵,
很顯然,
只能用英文起名字,
一是用漢語拼音起名字可讀
性很差,二是英文單詞通常比漢語更
expressive
(看吧,如果用漢語來說,就得說「表達
能力更強」、「更有表現力」這么羅嗦)
,由於程序的復雜性,變數和函數往往表示一些很
抽象的概念,
起個既准確又簡潔的名字並不容易,
可是很多時候,
用漢語需要很多字才能說
清楚的一件事,用英文一個單詞再加點詞形變化就能說清楚了。例如
APUE
上講
sleep
函數
的實現,
其中有個變數表示「本來應該睡到某個時刻,
但是提前被信號喚醒了,
喚醒時與本
來應該睡到的時刻相差的時間」,
如果為了簡潔而不求准確,
這個變數名至少也得叫「未睡
到」,而書中只用了一個單詞
unslept
,非常准確、簡潔地表達了這個意思。為了寫程序而
學英語需要學到什麼水平?我認為能起出這種變數名就夠水平了。很多在
IT
外企工作的中
國人,說話寫文章經常夾雜著英文單詞(比我嚴重多了因為我不在外企),非常可以理解,
確實是為了表達得更准確簡潔的需要,而不是純為了
play
zhuangbility
。總之,要寫程序
必須學好英語,
否則連變數名都起不好,
這雖然是一個非技術問題,但卻是個根本問題,比
任何技術問題都重要。當然,現在很多編程語言也支持用
Unicode
字元給變數和函數起名,
但是你見過有人用漢字寫程序嗎?根本不實用。
有人會辯駁說一頁英文翻譯成中文往往只佔
半頁,中文不是更簡潔嗎?但是你算算打一頁英文和打半頁中文哪個敲鍵盤次數多。另外,
要讀別人的代碼也必須學好英語,如果你不知道
unslept
是由
sleep
變形而來的,就體會
不到其中的精妙,
只有大量閱讀高質量的代碼,
才能寫出高質量的代碼,
創作都是從模仿開
始的。
說說英語對於看書學習的重要性。
中文技術書和英文技術書的水平根本不在一個量級上,
這
是有很多原因的,
不能全歸結於中文書的作者水平差。
最重要的是,
出中文書的低回報率決
定了作者不可能花太多心血在上面,你去
amazon
看看一本書賣多少美刀,再去
chinapub
看看一本書賣幾塊錢。
老外寫一本書,
可以做到全書沒有一個拼寫錯誤
(當然英文的拼寫檢
查工具更完善也是部分原因),中文能找出一本沒有錯別字的書嗎?
Knuth
可以懸賞讓全世
界讀者來找磋,
中文書作者有哪個敢這么做?不是因為老外態度有多認真治學有多嚴謹,
而
是因為他們賺到了,就應該拿出高質量的作品來,不然會被讀者罵的。
英文技術書的翻譯質量通常很差。
也不能歸結於譯者的水平差,
我也翻譯過書,
也努力想譯
好,但真的很難譯好。
IT
業的新名詞層出不窮,像「內核」、「網路」這種常見術語還好,
稍微專一點的術語都沒有統一的譯名。
我們在教學中發現,
很多學員看書時搞不清這本書的
名詞
A
和那本書的名詞
B
是什麼區別,
來問老師,
才發現原來
A
和
B
就是一回事兒。
這是一
個單詞對應多個譯名的情況,
還有一個譯名對應多個單詞的情況,
比如
field
、
domain
、
realm
都譯成「域」,
block
、
bulk
都譯成「塊」,
argument
、
parameter
都譯成「參數」,
attribute
、
property
都譯成「屬性」,雖然這些詞的意思本來就差不多,但是在一篇文章
里,作者可以換著用,不同的單詞表示不同的概念,翻譯完了一看,都成一個概念了。英文
書背後都有
index
,看到一半忘了某個名詞是怎麼定義的就可以翻
index
,而譯文通常沒有
index
,名詞都已經亂七八糟了,沒法做
index
。還有更發指的是,老外喜歡造詞,現有的
單詞上加一點變化和組合(例如有人喜歡說
automagically
),看著心領神會,想譯出來就
很費勁。
老外即使在技術書中也經常用一些生動的表達方式和俏皮話,
而中文的書面語言非
常死板,
生動的表達方式只存在於口語中,
如果寫在書上就很不像話,
這也是很難翻譯的一
個重要原因。看中文譯本,不僅質量差,而且跟不上時代,通常一本英文書出來,至少要等
一到兩年才能看到中文譯本。
兩年啊!
等你看到這本書的中文譯本時,
這個版本都快淘汰了。
然後說說英語在開發工作中的重要性。
看書學習通常只起一個引導入門的作用,
在工作中更
有用的是手冊、文檔。學完了
C
語言開始寫程序了,誰還會去查
K&R
附錄中的庫函數?查
man page
才是最有效率的。然而手冊比入門書更少有中文譯版,因為手冊是隨時變的,會
隨著軟體版本更新,
而且需要看這些開發手冊的人通常不會有英文障礙,
有英文障礙的人即
使看了翻譯的手冊也寫不出好程序來,
所以當然沒必要翻譯了。
不管什麼技術,
官方的手冊
和技術標准才是最原始的第一手資料,
看別的書都是以訛傳訛,
由於自然語言不可避免是有
歧義的,
文檔中表達得不準確的地方就會被文檔的讀者也就是技術書的作者誤解,
技術書中
再有表達不準確的地方又被譯者誤解。
我們小時候都玩過傳話的游戲,
幾個人站一排,
通過
悄悄話傳一句話,傳到最後變成什麼了?所以,學網路協議,就得看
RFC
,學
ARM
,就得看
ARM
公司的
Architecture Reference Manual
,要學習
C
語言就得看
C99
,有歧義不要緊,
自己去揣測原作者的意思,總比道聽途說的可靠。
我們的學員出去面試經常被問到的一個問題就是:
在開發工作中遇到問題,
書和文檔上都沒
有答案,網上搜一下也沒有答案,怎麼辦?要我說,能看懂源代碼的就去源代碼中找答案,
這稱為
hacking
,不管是內核、
libc
還是各種
framework
,你調用的東西有問題都能從它的
代碼中找到原因。如果沒有能力
hacking
,或者時間緊不想去
hacking
,最好的辦法就是去
官方郵件列表和
IRC
問。
如果英文不行就沒辦法了,
只能去一些中文論壇:
「各位大蝦幫忙,
小弟有一個問題求救!
跪求!
!
在線等!
!
!
」在線等了好幾天也無人問津,
或者答非所問。
豈不知逛這些論壇的沒有大蝦,都是菜鳥,大蝦們都在
IRC
上聊得正歡呢。我在做
Qt
開發
時曾經有一個問題,
當時在教育網,
上國外網不方便,
去各大中文論壇問了好幾天也沒人給
出滿意的回答,後來花錢連了國外網,去
trolltech
官方新聞組提問,只等了幾分鍾就得
到了滿意的解決辦法。這次經歷給我留下了深刻印象,從此以後再也沒有去中文論壇。
那麼,
如果現在英文水平很差,
又想做程序員,
應該怎麼學英語呢?我下面說的方法有兩個
前提,
一是你的英文至少達到高中畢業水平,
也就是語法基本都學完了,
即使用得不熟練也
知道有那麼回事兒,二是你希望盡快在工作中用上英語,寫程序夠用就行,而不是有考
T
考
G
這樣的更高要求。
學習英語有聽說讀寫四個方面的要求,
做程序員至少需要讀和寫非常流暢,
如果在外企工作
還需要聽和說的能力。技術英語和考
T
考
G
是不一樣的,一是聽和說不像讀和寫那麼重要,
不必擔心自己是「聾啞英語」,
沒關系,
絲毫不影響你成為編程高手,
二是要求的詞彙量要
小得多。
考
T
考
G
都要拿一本單詞書背,
很少有人會覺得背單詞很有意思,
至少我是覺得很
痛苦,
幸運的是看技術書不需要多少詞彙量。
技術書的描述對象都是局限於一個很窄的領域
的,
就那麼幾個單詞翻來覆去地用,
而且技術書是為了讓人看懂的
(不像詩是為了讓人看不
懂的)
,比較復雜的詞在書中都有定義或解釋。有些作者喜歡賣弄詞彙量,
用一些很生僻的
單詞,也有些作者賣弄一些典故,由於文化背景不同很難理解,不過這些通常都可以無視,
不會影響閱讀,
還是因為技術書是為了讓人看懂的。
對於學習者來說,
閱讀能力是最重要的,
等你完成了學習,成為一個合格的開發者時,
需要寫代碼注釋,需要寫文檔,需要通過郵件
交流,寫作的能力才開始重要了。所以應該首先從閱讀開始練習英語。
現在就拿起一本英文原版書開始看吧。
和學游泳一樣,
閱讀的能力只能通過閱讀本身來練習。
我的經驗是,
不必先系統學習了單詞和語法再看書,
可以在看書時用到什麼就補什麼。
我建
議初學者看電子版,
因為現在的詞典軟體都可以滑鼠取詞,
邊看邊查很方便,
很多勤快人喜
歡把查過的單詞都抄下來,我覺得沒有必要,
反正查字典很方便,
下次再看到了就再查,多
查幾次總會記住的,
抄下來就打斷了看書的思路,
而且不見得抄下來就能記住。
也許是因為
我這人比較懶,
我用的都是懶辦法。
很多人不喜歡看電子書,
理由是盯著屏幕看書太累,那
么盯著屏幕寫程序累不累?這種人顯然不適合做程序員。
語法不熟練怎麼辦?大多數情況下
單詞的意思都明白了就不影響閱讀。
技術書有時候喜歡用長句,
其中可能包含各種從句,
如
果實在讀不懂就去查語法書,
同樣也不需要把這種從句徹底弄明白,
只要這一句能看過去就
行了,以後多查幾遍書,自然就掌握了。另外,技術書是說明文,通常不應該有過去時,看
到過去時就需要注意了,
很可能是虛擬語氣,
如果不注意這一點,
看到的意思可能和真實的
意思正好相反。
應該從哪本書開始看起呢?從你當前最需要學的技術書看起。
看書是相當花時間的,
如果能
一邊學英語一邊學技術,
這時間利用得就很有效率。
比如,
如果你的
C
語言已經學得相當好
了,不要專門為了學英語去重看一遍原版的
K&R
。市面上有一些專門的計算機英語教材,我
的建議是不要看,浪費時間,
nonsense
。
初學時最好選一本有中文譯本的書,有看不懂的地
方可以翻中文版來對照,
但是不要相信中文的翻譯,
原因在前面討論過了。
如果你是初學編
程,沒有任何基礎,我可以推薦一本英文很淺顯技術也很淺顯的書:
How To Think Like a
Computer Scientist
,有
Python
、
Java
和
C++
版本,可自由下載。
要逐漸養成良好的閱讀習慣。
一是不要每個生單詞都去查,
有些單詞很生僻,
查了也記不住,
記住了也不會再見到它了,
但是前面講過,
都是作者在賣弄詞彙量,
無視它絲毫不影響閱讀,
因此要學會猜測單詞的意思,能不查就不查,繼續貫徹「懶」的原則。二是看書不要動口,
不念出聲也不行,
就是不要動口,
要努力在大腦中建立從詞形到語義的直接映射,
如果只能
從詞形到讀音再到語義就太慢了,
嚴重影響閱讀速度。
三是努力做到每句話都從頭到尾只看
一遍,
不許回頭反復看,
這一點比較難,
必須注意力高度集中,經常在記憶中暫存前面半句
的內容和句式才能做到,
但是一旦神功練成就會成倍地提高閱讀速度。
最後一層境界,
學會
skim
,
就是略讀,
很多優秀的作者在組織材料時會給讀者一些建議,
比如這一段是擴展的高
級話題,和主線的相關度較低,
可以先
skim
到後面,注意不是讓你
skip
到後面,這一段還
是要讀的,
但是不必逐字句地讀,
而是抓主旨,
大概講了個什麼概念
(有一些下定義的句式)
,
有哪些要點
(有數字編號或
bullet
列表項)
,
適用於哪些場合有哪些注意事項
(有
caveat
、
gotcha
、
noteworthy
這種字眼),後面可能還會碰到這個概念,雖然你沒有仔細看這是個
什麼東西,
但大體上也知道了,
這樣就能不影響後面的閱讀,
這不僅需要高度集中的注意力、
熟練的語言能力,
而且要有足夠的背景知識去猜測性地理解。
但是語言能力還是最重要的因
素,我和幾個同學交流過,他們也能熟練地看英文書,但是需要
skim
查一個東西時就覺得
還是不如中文書查得快。
skim
的技能在查閱手冊時尤其重要,沒有人會像看入門書一樣把
上千頁的手冊從頭到尾看一遍,
都是用到哪兒就查哪兒。
總之,
鍛煉各種閱讀習慣就為了一
個目的:如何在最短的時間內,
在保證正確性的前提下,
獲取盡可能多的知識。程序員的學
習時間都是非常寶貴的。
以上本著「夠用就好」的原則,
多次提到用懶辦法,
但是學技術學英語這兩件事不能懶,
貴
在堅持。
要養成良好的閱讀習慣也有很多東西需要堅持,
其中最根本的是持續高度集中注意
力,充分調動記憶能力、推理能力、猜測能力,就像考試做閱讀題一樣看每一段話。最根本
也是最重要的,
「有英文原版就不看中文版」這個原則一定要堅持。
一開始看英文書可能會
很慢,
但只要一直堅持就會慢慢達到原來看中文書的速度,
再堅持下去就會比中文書看得更
有效率,因為避免了很多歧義和術語翻譯的問題。
有人會說,
項目緊任務急,看英文資料太
慢,
這次就先用中文盡快解決工作中的問題吧,
等以後有時間了再看英文書學習。
可是什麼
時候才會有時間呢?工作總是一個接一個的,
老闆怎麼會付了工資讓你閑著呢?如果你有這
樣的困難,
我的建議是乾脆辭職,學好了英文再去工作。
你只要想想,
你的同行們在外企全
英文的環境下工作,
英文和技術每天都在突飛猛進,
而你還在用效率極其低下的方式學習和
工作,
你和別人的差距不是越來越大了嗎?另一方面,
現在的在校學生從小學就開始抓英語,
基礎都很好,
很多高校也逐漸重視引進原版教材,
開設很多英文授課的專業課。
你再不奮起
直追,就不覺得以後的職業道路充滿危機嗎?
最後說說寫作。
剛開始練習時不要怕寫錯,
能表達清楚自己的意思即可。
我看過很多源代碼
和文檔中的英文,一看就是中國人寫的,謂語動詞不分單復數,名詞復數不加
s
,處處可見
中國式英語,
但是絲毫不影響我對這些編程大牛的景仰,
因為其中的思想我看懂了,
並且我
認為很強大。我有一個朋友,中學畢業就出來混的,由於工作的性質總要跟老外打交道,他
從來不懼和老外交流,
雖然連一個囫圇的句子都說不出來,
但總是能用中學學的那點單詞讓
老外明白他的意思,
這一點我就非常佩服。
總之就是說,
不要因為不知道怎麼寫是對的就不
敢動筆寫,
只要敢交流,
並且別人能懂你的意思,
就是很有效的交流。
而且隨著閱讀量的增
加,自然能寫出一手好英文,前面講過了,創作總是從模仿開始的。不怕出錯才能有一個好
的開始,
才能逐步練習提高,
而練習的最終目的當然還是希望寫好,
不僅字句通順無語法錯
誤,還能適當修辭。
㈢ 一個程序員要具備的基本素質是什麼
團隊精神和協作能力 :
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。
文檔習慣:
作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
規范化,標准化的代碼編寫習慣:
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術人員之間的協作。
需求理解能力:
作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
復用性,模塊化思維能力:
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作。
測試習慣:
軟體研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
學習和總結的能力:
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高了。但是學習也要找對目標,一些小coding fans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。
㈣ JAVA面向對象設計有哪些原則
甚至還有經驗豐富的Java程序員沒有聽說過OOPS和SOLID設計原則,他們根本不知道設計原則的好處,也不知道如何依照這些原則來進行編程。 眾所周知,Java編程最基本的原則就是要追求高內聚和低耦合的解決方案和代碼模塊設計。查看Apache和Sun的開放源代碼能幫助你發現其他Java設計原則在這些代碼中的實際運用。Java DevelopmentKit則遵循以下模式:BorderFactory類中的工廠模式、Runtime類中的單件模式。 原則1:DRY(Don'trepeatyourself) 即不要寫重復的代碼,而是用"abstraction"類來抽象公有的東西。如果你需要多次用到一個硬編碼值,那麼可以設為公共常量;如果你要在兩個以上的地方使用一個代碼塊,那麼可以將它設為一個獨立的方法。SOLID設計原則的優點是易於維護,但要注意,不要濫用,plicate不是針對代碼,而是針對功能。這意味著,即使用公共代碼來驗證OrderID和SSN,二者也不會是相同的。使用公共代碼來實現兩個不同的功能,其實就是近似地把這兩個功能永遠捆綁到了一起,如果OrderID改變了其格式,SSN驗證代碼也會中斷。因此要慎用這種組合,不要隨意捆綁類似但不相關的功能。 原則2:封裝變化 在軟體領域中唯一不變的就是"Change",因此封裝你認為或猜測未來將發生變化的代碼。OOPS設計模式的優點在於易於測試和維護封裝的代碼。如果你使用Java編碼,可以默認私有化變數和方法,並逐步增加訪問許可權,比如從private到protected和notpublic.有幾種Java設計模式也使用封裝,比如Factory設計模式是封裝"對象創建",其靈活性使得之後引進新代碼不會對現有的代碼造成影響。 原則3:開閉原則 即對擴展開放,對修改關閉。這是另一種非常棒的設計原則,可以防止其他人更改已經測試好的代碼。理論上,可以在不修改原有的模塊的基礎上,擴展功能。這也是開閉原則的宗旨。 原則4:單一職責原則 類被修改的幾率很大,因此應該專注於單一的功能。如果你把多個功能放在同一個類中,功能之間就形成了關聯,改變其中一個功能,有可能中止另一個功能,這時就需要新一輪的測試來避免可能出現的問題。 原則5:依賴注入或倒置原則 這個設計原則的亮點在於任何被DI框架注入的類很容易用mock對象進行測試和維護,因為對象創建代碼集中在框架中,客戶端代碼也不混亂。有很多方式可以實現依賴倒置,比如像AspectJ等的AOP(AspectOrientedprogramming)框架使用的位元組碼技術,或Spring框架使用的代理等。 原則6:優先利用組合而非繼承 如果可能的話,優先利用組合而不是繼承。一些人可能會質疑,但我發現,組合比繼承靈活得多。組合允許在運行期間通過設置類的屬性來改變類的行為,也可以通過使用介面來組合一個類,它提供了更高的靈活性,並可以隨時實現。《EffectiveJava》也推薦此原則。 原則7:里氏代換原則(LSP) 根據該原則,子類必須能夠替換掉它們的基類,也就是說使用基類的方法或函數能夠順利地引用子類對象。LSP原則與單一職責原則和介面分離原則密切相關,如果一個類比子類具備更多功能,很有可能某些功能會失效,這就違反了LSP原則。為了遵循該設計原則,派生類或子類必須增強功能。 原則8:介面分離原則 採用多個與特定客戶類有關的介面比採用一個通用的涵蓋多個業務方法的介面要好。設計介面很棘手,因為一旦釋放介面,你就無法在不中斷執行的情況下改變它。在Java中,該原則的另一個優勢在於,在任何類使用介面之前,介面不利於實現所有的方法,所以單一的功能意味著更少的實現方法。 原則9:針對介面編程,而不是針對實現編程 該原則可以使代碼更加靈活,以便可以在任何介面實現中使用。因此,在Java中最好使用變數介面類型、方法返回類型、方法參數類型等。《EffectiveJava》和《headfirstdesignpattern》書中也有提到。 原則10:委託原則 該原則最典型的例子是Java中的equals()和hashCode()方法。為了平等地比較兩個對象,我們用類本身而不是客戶端類來做比較。這個設計原則的好處是沒有重復的代碼,而且很容易對其進行修改。 總之,希望這些面向對象的設計原則能幫助你寫出更靈活更好的代碼。理論是第一步,更重要的是需要開發者在實踐中去運用和體會。
㈤ DRY編程原則 是什麼
DRY 全稱:Don't Repeat Yourself (摘自wikipedia),是指編程過程中不寫重復代碼,將能夠公共的部分抽象出來,封裝成工具類或者用「abstraction」類來抽象公有的東西,降低代碼的耦合性,這樣不僅提高代碼的靈活性、健壯性以及可讀性,也方便後期的維護或者修改。
(5)dry編程原則有哪些擴展閱讀:
DRY原則特指在程序設計以及計算中避免重復代碼,因為這樣會降低靈活性、簡潔性,並且可能導致代碼之間的矛盾,DRY是Andy Hunt 和 Dave Thomas's 的《 The Pragmatic Programmer 》書中的核心原則。
參考資料:DRY原則--網路
㈥ 新手如何學習編程
熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:
1、語法。
2、基礎理論(數學、數據結構、演算法等)。
3、設計方法(編程原則、設計模式、框架設計等)。
4、庫(核心、基礎、UI、擴展、游戲引擎等)。
5、計算機相關(操作系統、網路、圖形學等)。
6、領域知識(游戲設計、網站設計等)。
7、開發工具(編輯器、IDE、自動部署等)。
8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。
最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。
具體方法包括:
1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。
2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。
3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。
4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。
對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。
項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。