㈠ 学编程的报什么专业
想学编程就要读软件工程.我也是中山人,在孙文学编程应该一般般吧.
计算机科学系
计算机科学与技术专业 培养具有良好综合素质和开拓创新能力,系统掌握本专业的基本理论、基础知识和基本技能与方法,具有实际应用和科学研究能力的计算机及其相关技术与产业领域的复合型应用技术人才。
主要课程:数学分析、高等代数、数理逻辑、集合论与图论、计算机科学导论、程序设计基础、数字电路与逻辑设计、计算机组成原理、数据结构与算法、操作系统原理、汇编语言程序设计、数据库系统原理、编译原理、软件工程导论、计算机网络、计算机体系结构、并行与分布式计算、计算机图形学、信息安全技术、多媒体技术、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度角地图系统加编辑器的,全靠自己思考,以及看前人的代码,需要时找些网络资料。关键是,可以培养最重要的创造力。
对于算法和设计模式,可以研读下,但是关键还是靠平时如何使用了。新手勉强不来的。
项目管理方面的,就得靠工作经验了,多思考多提意见不要只走流程。