原文地址:http://www.cnblogs.com/microsoftmvp/archive/2010/12/02/1894367.html
讨论算法和工程哪个更重要,这个问题,其实比争执C++和Java哪个更“好”要用意义的多,对这个问题的理解和阐释,将给大一的计算机专业新生提供很多指点。
以往的讨论基本上带有偏见,这回,我以一个ACMer+有两年实际项目开发经验的大三计算机专业学生的身份,试着讨论下这个问题。欢迎拍砖。
很多搞算法的人,比如说很多的ACMer,认为做工程搞开发无非是一些API函数的调用而已,没有技术含量。其实不然,这个问题,可以从几个方面来考虑。 第一,单单是调用API函数,就有很多东西需要学习,比如Windows下的TCHAR CString PWSTR wchar_t之类,有什么区别?该如何正确的安全的转换?仅此就需要好好掌握和积累好长一段时间了。第二,做开发不仅仅是API的调用,开发环境的熟 悉,其实很费时间和精力,比如说Java的开发环境的配置和维护,就有很多问题要解决。第三,设计模式?这是软件开发中思维层次比较高的部分,但是显然, 不是所有人的思维层次都可以达到相当的高度的。你承认么?第四,需求分析。我敢肯定,很多人不会做需求分析,或者做不好需求分析。不能很好把握用户的实际 需求和软件使用习惯,这样的软件,当然算不得好软件。第五,软件的开发也是需要算法的,根本不懂算法的人,当然写不出什么好软件,etc
很多做开发的人,很鄙视那些搞算法的。我们班就有很多人看不起做算法的,认为都是书呆子,除了数学和程序,什么都不会。客观说,有一点是必须承认的,很多 认为算法极其重要,算法最重要,算法怎么样怎么样的人,其实是在掩饰自己除了算法什么都不会的尴尬局面。会写程序,但是不会写注释,变量命名随心所欲的人 大有人在。
但是,一个现实是,算法学的好的,工资很高,微软、百度的面试题,基本上都是算法类的或者智力类的。其实,很多人误解了,之所以这样是因为公司考虑到很多 大学生在本科里并没有做过什么实际项目,但是基本上都有学数据结构和算法,而算法又确实重要,所以才有这样的现实。你不得不承认,现在很多人的开发不怎么 需要算法,你要知道,是“很多人”,你想,能在微软拿工资的人,多么?大部分还是在二三流企业,这些开发,需要多少算法呢?园友心里清楚。图灵奖的都是搞 理论的?你看有多少人获得图灵奖?
算法为开发做了支撑,可以让程序更有效率,解决更大规模的问题。
但是,显然算法不是全部。