`
1000copy
  • 浏览: 72713 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

对数据结构的看法--优美代码必备基础

阅读更多

 

1. 数据结构初体验

在大学期间学习数据结构时觉得很优美,因为选择一个好的数据结构可以让代码更加简短、容易阅读。并且很快也有了一个实践机会,就是自己决定一个LISP 解释器。这个软件的代码总共花了3周写完,但是设计时间很长。实际上,其中的LISP的语法非常简单,而实现的时候主要涉及到数据结构中广义表概念很多,但是在数据结构的书中介绍不多,只有自己逐步去理解,可以说,LISP解释器程序的编写中,自己的思考占了大部分。完成后的结论是,只要充分理解广义表,并且把这个理解结合到LISP解释器程序中,要花费几个月,但是很值得,因为整个程序的实现代码就变得很简洁、容易扩展,看这样的代码让人感到很享受

2. 不甚乐观的现实

我在负责公司技术人员招聘的时候,其中有不少人是刚刚毕业的学生,他们没有工作经验,因此,数据结构是主要考查的内容,可是我发现这样的基础课程有很多人并不了解。一次“成都软件技术沙龙”交流,一个朋友提出的真实的招聘也印证了这一点。

这个朋友给我讲了一次典型的招聘,他认识到数据结构课程中非常基础实用的内容对很多学生来说也并不了解。当时招聘来了约100个学生,他提了一个问题,就是谁会写冒泡排序算法,让知道的人举手,大约有10个人举手,然后请他们来做,发现只有两三个人做对。其实,数据结构中最基础的就是排序和查找,而冒泡排序是基础中的基础,只要10行左右的代码,逐个比较,两层循环,大的向上浮动,所以叫做冒泡排序。为什么做不对呢?这不是简单的智力问题,而是不知轻重和权衡。

有些人认为只要会IDE和语言就行,基础知识不重要了,我不以为然这些年来,看惯了很多程序大量嵌套的if else大量的嵌套,混淆的语义,也看多了大量的重复代码。因此更加觉得有抽象思维能力基础扎实的可贵。

3. 可以有更多应用的状况

控件代码常常需要用到数据结构。有机会看了国内一个人写的一个report控件,该控件基于GPL协议发布,其中的代码完全是他自己写的,包括一个个的线一个inplace的小edit鼠标移动cell线。原始的ereport5000行,其中的注释也比较有意思,比如

今天早晨有一个大艳阳天,我的打印...,

又是一个不

这个人开发过程的酸甜苦辣。

ereport内给印象最深的是,当用户的数据以dataset方式进来后,所有的排序分组的累计都是通过for循环来做的为什么不使用现成的呢?可能是因为Delphi过于大,没有提供这样的套算法。decalDelphi的一套Third Party 算法库,但是并不是所有人都知道。随后的分组也自己来写。这样,ereport内就有大量的排序算法、分组算法,以及和它们伴生的数据结构。

稍微复杂的算法也需要数据结构。我们接到了一个产品,叫做报表精灵其实就是一个类似desisioncube的数据分析控件,其中涉及对数据钻取切片分组和排序等操作,可是现成的控件都不能满足我们的要求,要自己做,再一次涉及基本的数据结构。

要写出漂亮的代码,不能不了解数据结构。代码总是有控制结构和数据结构构成的,这就是Niklus Wirth所说的“程序=数据结构+算法”的含义。可是很多人只知道大量善用控制结构if while等,却不知道善用数据结构,比如ArrayList ,CollectionHashTable 控制结构可以表达分支、循环的流程,数据结构因为它本身的设计可以隐含分支、循环因此同样可以表达这样的流程。不同的是,用精巧的数据结构来表达分支、循环的意图,常常会比用控制结构来表达更加容易阅读和理解。一般程序员认为产品开发的技术要求不高,只要搞清楚业务就可以,就是就有大量的简单堆积、大量嵌套的代码布局——就是为什么很多人认为数据结构重要,总觉得没有用武之地的原因吧。

4. 现实的MIS编程

我们常说,IT工程师的技术常常很久不更新,原因是现在IT业对他们的要求都不高。简单地说,对做软件系统的人来说,只要要能够使用SQL,能够连接上数据库,然后绘制界面,把数据改一改,挂接到界面上,这个基本功就够了。因为这样的低要求,也因为缺乏代码评审,重复的代码、大量的嵌套就会出现。

IT新人在头一年做项目时,要做的就是反复操练这样的技术,在不同的场景下用少量的变通,然后学习如何侦查到错误并且修正它。如果确实有自己技术上搞不定的问题,知道如何得到解答,然后反复练习,直到熟练。这一段时间是最难熬的日子。

简单的使用TStringList.sort复杂使用SQL数据库,排序分组都可以的。数据库SQL更加无所不能,一个子句就可以完成一个排序,一个子句就可以完成一次分组。让程序员不再重视数据结构,进而不重视抽象思维里说的是一般编程说到优化难免要阅读他人代码分析结构说到设计也是如此程序员抽象能力是跨越台阶的必要条件

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics