技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问。从热门技术到前沿知识,从技术答疑到职业规划。每期一个主题,站在最新最热的技术前沿为你引航!

  本期特邀《研究之美》一书作者高博老师 ,针对技术工作中的典型问题给予解答,欢迎网友积极提问,与专家一起讨论!

【238期门诊集锦】体验技术工作中的研究乐趣_第1张图片

查看本期门诊精彩实录:http://doctor.51cto.com/develop-252.html
参与最新技术门诊:
http://doctor.51cto.com/develop-254.html

精选本期网友提问与专家解答,以供网友学习参考。

Q:高老师,你好,我是一名在校大学生,自学了javaSE ,javaEE,jsp,设计模式,软件工程等相关知识,现在的培训机构很多,都在快速的使学生成长起来,我想问我想从事WEB开发,如何才能与这种培训 模式下的速成区分起来,是自己能够在软件开发方面更就有深度?
A:您注意到了一个目前被忽视得很厉害的问题,就是“深度”的问题。这个问题触及了所谓的人才生产方式的异同,所达成的不同效果。目前有一种趋势,就是人才批 量生产,就像你说的那样,用培训机构催熟的方式来快速制造人才,这是工业社会的习惯思维。但是,采用这种方式生产出来的产品,正如KFC的炸鸡块,虽可果 腹,却营养不佳。培养认识和实践的深度,当然还是那句老话:读好书,勤练手、多反思。Web开发这个题目太大了,前端和后端都各有很多主题可以探讨。不过,无论是走哪个方向,都要掌握研究方法,从一两个小处出发,最终企及澄明之境的。

Q:高老师,您好。C++和C#哪一个的前景更广一些呢,现在的青年程序员,应该选择哪一种程序语言来做呢。
A:
您的这个问题相信也是很多朋友想问的,但是我却觉得这个问题并非是像看起来那么重要的。我的意思是说,选择哪门语言可能并非那般重要,重要的乃是掌握数据 结构和算法。无论使用哪种语言来做程序设计,说到底也是为了能够有效地表达这些数据结构和算法而已。说起来也很巧,我曾经和C++之父Bjarne Stroustrup和C#之父Anders Hejlsberg都有过面对面的交流,我还写过一篇和Anders Hejlsberg的访谈博客,您可以看一下,挺有意思的。
但是说语言完全不重要,那也不客观。C++和C#用在不同的领域里,前者可以直接操纵物理内存,可能在底层(系统层)用得多些,比如操作系统、编译器、游 戏物理引擎等,而C#则是用于应用层多些,比如开发动态站点后台等。当然,这两者的前景都十分地广阔,可以说掌握了其中一种,一生也就受用不尽了。不过话 又要说回来,无论走哪条路,只掌握语言的语法层面都是远远不够的,还是要掌握数据结构和算法这个级别才能上进。这原因不是别的,而是因为“事物的抽象都是 相似的”,无论这事物是数据库还是订单会话。而程序设计的实质就是表示和动作的抽象,在这个层面上就没有什么语言之分了。
当然语言也是很有意思的,现在的选择也远不止C++和C#两种,函数式语法也是很有意思的活跃领域,有时间可以关注一下。

Q:高老师,您好。我是一名本科学生,是数学与经济学双学位,但是我对于计算机的兴趣很大,我自学了java和C#等语言,并在平时的学习和研究中使用。我参加了许多学校所属的国家科研项目并取得了一些不错的成绩。但是我现在比较迷茫,计算机不是我的主业,我是应该把其作为一种工具看待还是一种和数学一样的科学来学习?我学习计算机获得成就感远比数学和经济学大,我也比较犹豫以后的从事的行业。想问问就您所知,从事计算机相关行业是否一定要计算机相关专业(我不是很清楚数学算不算)?谢谢!
A:数学与经济学双学位——很不简单,读双学位是很累的事,我在大学时也有此企图,终未遂愿。
自学了Java和C#等语言——很不错,掌握一两种程序设计语言,已经和掌握一两门外语一样,成为了在这个时代生存的基本技能。
说到你的迷茫,其实并不十分要紧。任何人在就业时,都会遇到一些迷茫。很多人的迷茫的关键在于,我什么都不会,应该怎么就业?而你的迷茫在于,我会好几种技能,应该选择哪个方向就业?相比之下,你已经好过许多人。
计算机专业的学习,当然有各种方向,有工程方向也有理论方向。如果你想选择这个专业来学习,具体选择何种方向,当然根据你的兴趣和强项所在,就基本上可以确定了。这有点儿像数学,应用数学和纯粹数学的区别,我想你是很清楚的。
不过不建议你根据一时的“成就感”来决定就业方向,这就好比我不建议因为一时热情的恋爱而走入婚姻一样。说到底,就业和研究的区别还是很大的。说到我个人 的话,相当部分的研究工作也是在业余进行的。换言之,就算你选择了厨师作为你的就业,原则上也不妨碍你设计一套点菜和食料管理系统,甚至顾客点餐的排队论 模型,照样可以着手做你的研究;而选择了每天写程序作为工作的人,写了十几年仍然水平一塌糊涂的程序员也大有人在。当然计算机行业的就业范围还是很宽的, 属于不太挑专业的行业之一。而数学比较好的人,在这个行业大显身手的机会是非常多的,绝对属于优势。
以上不知道是否解答了您的问题。

Q:老师,您好。我从事flex开发!也就是UI设计方面必须有些头脑,逻辑处理还行,界面的设计,是否对做flex开发的缺陷啊!还有就是关于如何对自己开发模块的快速的从多个方面进行测试,有时候因为考虑不周全,而耽误时间,怎么有效的提高测试效率呢?
A:UI方面,我知之甚少,不过有一本书叫做《软件创新之路--冲破高科技营造的牢笼》印象中不错,可以找来看一下。
有关测试我可以说两句。
测试最关键的东西,是要建立正确性标准——你必须知道怎样才是对的,然后任何事实都可以依据这个标准来判断是对的还是错的了。凡是错的,记录成缺陷,逐一 加以解决,然后再做回归测试。回归测试不能只验证缺陷是否修复,要做一轮完整的测试才能知道上一轮缺陷的修复有没有引入新的缺陷。
然后建立测试用例,每个用例对于确定的输入,有一个事实输出,把这个事实输出和期望输出相比较,如果一致,则通过;不一致,则失败。把失败的用例结果记录缺陷。(当然还有负向测试,就是有些用例你的期望就是让它失败,对于这种,成功了才记录缺陷。)
为提高测试效率,可以采用等价类划分、边界测试等系统化测试方法。
这方面的书,请参考《微软的软件测试之道》等。