朱仲傑:你是专业程序设计师吗?(转自CSDN)

简介: 作者:朱仲傑Jacky Chu /> /> 中正大學資訊工程研究所博士班肄業。專精Java技術開發,曾出任台灣Java 專業技術研討會六屆講師及JavaOne Tokyo 2005講師。知名Java工具書作家,已發表著作包括Palm應用程式設計、Java2全方位學習系列及譯有Java Puzzlers等暢銷書籍。

作者:朱仲傑Jacky Chu

/> />

中正大學資訊工程研究所博士班肄業。專精Java技術開發,曾出任台灣Java 專業技術研討會六屆講師及JavaOne Tokyo 2005講師。知名Java工具書作家,已發表著作包括Palm應用程式設計、Java2全方位學習系列及譯有Java Puzzlers等暢銷書籍。

/> />

之前在網路上看到這篇「學程式設計的人不能不看的好文章」,網路上大家的反應也是很熱烈,不過還是不脫到底該不該最佳化等的爭論。

我很久之前就想寫類似的文章,但我的觀點不一樣,我認為不是該不該最佳化的問題,在於的是你的態度。大家應該聽過「格局決定結局,態度決定高度」這句話,什麼是寫程式正確的態度?請聽我細說…

你是「专业」的程序设计师吗?什么是专业?我自己的定义是「使用自己所擅长的程序语言,快速且正确地解决问题的程序设计师。」这句话里有两个重要的关键词:「快?速」与「正确」。正确是绝对必要的,如果最后的结果不正确,那不管是用了什么最新的技术,或是到底多短的时间就完成等,其它的因素都是白废的。至于怎样才?叫快速?这个比较没有量化的标准,而且快速还可以再细分成:你写程序的速度和写出的程序的执行效能。

但业界的确有权威的标准,来判定你到底是不是专业的程序设计师。最简单的方式,就是参加一些有时限的程序设计比赛,例如正在举办的 Google Code Jam 2006Google Code Jam分成了三个关卡,每个关卡都要你在有限的时间内,解决几个问题(详情请看Google网站)。问题有难易度之分,相对所分配到的分数也不同,而你所得到的分数会依据你解题的速度、正确度与效能给分。只要在时限内达成要求,就代表你至少有一定程度了。

想法才是效能的关键

google code jam中,解题的速度很重要,程序执行的效能也不可缺。效能固然和花掉的CPU时间有关,但这个时间会依硬件效能的提升有些改变,我认为,程序设计人员在设计你的解法/算法(algorithm)时的想法和态度,才是决定程序执行效能的关键。

举个简单的例子,请你设计一个程序,可以计算a加到b的总合(例如1加到100),你会怎么写?很直觉的,这种重复性的工作,可以交给循环来解决。是的,?用循环是可以正确的解决这个问题,但我认为这是最不专业的解法。我们就算数学不好,也听过高斯小时候的故事;话说高斯从小就非常的聪明且顽皮,有一天上课?时,老师为了让他不捣蛋,出了一个难题给他,要他计算1加到100的总合。老师以为可以让高斯安静一下子,没想到高斯没几分钟就把答案算出来了。后来推导?出所谓等差数列的功式,也就是首项加末项乘以项数再除以二,以这个例子来说就是(a+b)*(b-a+1)/2 。短短一行程序代码就解决的问题,为什么要用循环写成好几行呢?当数字大时,使用数学功式的程序执行的速度绝对比用循环还快上很多!

写程序的态度应该是,把你所学会的所有知识中,找出最好的解决方法,而不是程序正确会跑就好?如果还有更好的方法是你还不会的,那就赶紧把它学会,日后好运用在你的程序里。你也许会不以为然的说,解决这种小问题,干嘛要计较这么多。我不想在这讨论?程序该不该做最佳化的问题,网络上已经有太多类似的争辩,不知大家有没有听过「格局决定结局,态度决定高度」这句话?设计程序的思维和逻辑也不是一朝一夕?就能养成或是改变的,你想要成为顶尖专业的程序设计师,就要养成良好的思维习惯。

专业领域能力

除了态度之外,就是你如何去发挥、结合其它领域的专业知识。我以前教授青辅会计算机第二专长训练班,来上课的学生都不是资工计算机相关本科系的(所以学计算机才 是第二专长嘛),他们想学好程序设计,但大部份的人心中都有个疑惑:「我写程序赢得过本科系的人吗?」我鼓励他们说:「单比写程序,也许你们不一定赢得 了,但你们在其它领域的专业知识,则是他们欠缺的!」我常说,学资工其实是最没有用的,因为除了计算机之外,其它领域什么也不会 写一个股票系统不需要太高深的程序设计技巧,可是其中的分析、统计确需要专业的相关知识。就拿我来说好了,也许我很会写程序,但我没办法写出一个股票系 统,因为我在那个领域里完全不懂。这就是我想要表达的本科系无用论,所以本科系的人不需要太骄傲,而非本科系的人也不需要太悲观,各自发挥你们在各个领域 的专长,并深化你想要的domain know how,你就可以成为一位出色且专业的程序设计师。

那我该怎么做才能达到在程序领域及某个特定的领域兼具的专业呢?程序领域的专业你可以用不断的练习来达成,例如到讨论区中帮别的解决问题 或是研究别人的解法,也可以到TopCoder (http://www.topcoder.com)这样的网站上去挑战磨练你的技巧,像Google Code Jam就是你验收成果的好时机。至于其它领域的专业呢?透过学校上课或是工作项目里来学习,这方面倒是没有什么固定快速的学习方式。

创新

有人叫我大师、达人、高手(但照前面的定义来看,我还真不怎么专业。)从开始学习BASIC语言(有行号的那种),一路走来Quick BASICVisual BasicASPJava,算一算已经快二十年了,能够支持我这样一路走来最主要的动力是「热情」,这点跟上次来台湾的两位大师的观点一样:对写程序的热爱、对技术的热情

 保持热情并不容易,因为有很多外在的因素会迫使你放弃,例如经济的压力,在台湾,技术人员的薪水高不到哪去;无日无夜无条件的加班,对体力上可说是很大的 考验。台湾在硬件方面是世界首屈一指的,不论是代工组装的质量、ODMOEM ,甚至外型设计也屡获大奖。可是为什么在软件的创新研发上,能在国际上叫得出名字的就只有那几家?我们程序设计的功力比较差吗?并不会啊!创新的能力我想 是最主要的因素。

创造力或许是天生的,但学校教育的培养也相当重要。无奈的是,不论教改前或教改后,教育的目标还是没有变:考上好的大学、好的研究所,你就能出人头地。 「把书读好就对了,其它什么事都不用管。」这一直是台湾许多父母的观念,不好好念书几乎就和不孝划上等号了。从小「补、补、补」的教育,让我们的创造力逐 渐消失。反观影响计算机界最深远的两个人--MicrosoftBill GatesAppleSteve Jobs--就是个最好的例子,他们都没念完大学。你看过他们相关的传记就知道,他们年轻时干过多少在台湾社会下不被允许或不可能做的事。读书固然重要, 但重点在于能否激发创意的实现,否则就变成了死读书、读死书、然后读书死。

如果你还是学生又想当专业的程序设计师,那恭喜你,你还有许多时间可以好好的改变你自己。如果你已经是个程序设计师,改变虽然需要勇气和承担很大的风险,但不改变你就永远只是个程序设计师,要变专业成为顶尖的话,改变乃是不得不然的路。

目录
相关文章
|
5月前
|
JavaScript 安全 前端开发
从零开始搭建个人网站博客
从零开始搭建个人网站博客
104 5
|
6月前
|
存储 编译器 Go
我献出这篇 go 精华总结,阁下该如何应对(1)
我献出这篇 go 精华总结,阁下该如何应对(1)
|
关系型数据库 MySQL PHP
Z-BlogPHP博客程序
Z-BlogPHP支持PHP 5.2 - 7.4、8.0,可运行在市面上所有的操作系统和WEB服务器之上。
82 0
Z-BlogPHP博客程序
|
存储 运维 小程序
宠物寄养小程序实战教程(上篇)
宠物寄养小程序实战教程(上篇)
宠物寄养小程序实战教程(上篇)
|
缓存 安全 druid
手把手教你设计一个CSDN系统
在CSDN发一个CSDN系统是什么体验?大家都知道CSDN 有一个下载的模块,就是用户上传资源然后管理员会进行审核,上传资源的用户可以赚钱还可以赚积分。
214 0
手把手教你设计一个CSDN系统
|
iOS开发 C++
学习C++笔记334
C++ 文件和流
57 0
|
安全 iOS开发 C++
学习C++笔记333
C++ 文件和流
53 0
|
数据安全/隐私保护 C++
学习C++笔记280
C++ 类 & 对象
61 0
|
C++
学习C++笔记235
C++ 指针
74 0
|
C++
学习C++笔记220
C++ 字符串
63 0