1. 数据结构初体验
在大学期间学习数据结构时觉得很优美,因为选择一个好的数据结构可以让代码更加简短、容易阅读。并且很快也有了一个实践机会,就是自己决定做一个LISP 解释器。这个软件的代码总共花了3周写完,但是设计时间很长。实际上,其中的LISP的语法非常简单,而实现的时候主要涉及到数据结构中广义表,概念很多,但是在数据结构的书中介绍不多,只有自己逐步去理解,可以说,LISP解释器程序的编写中,自己的思考占了大部分。完成后的结论是,只要充分理解广义表,并且把这个理解结合到LISP解释器程序中,要花费几个月,但是很值得,因为整个程序的实现代码就变得很简洁、容易扩展,看这样的代码让人感到很享受。
2. 不甚乐观的现实
我在负责公司技术人员招聘的时候,其中有不少人是刚刚毕业的学生,他们没有工作经验,因此,数据结构是主要考查的内容,可是我发现这样的基础课程有很多人并不了解。一次“成都软件技术沙龙”交流,一个朋友提出的真实的招聘也印证了这一点。
这个朋友给我讲了一次典型的招聘后,他认识到数据结构课程中非常基础实用的内容对很多学生来说也并不了解。当时招聘来了约100个学生,他提了一个问题,就是谁会写冒泡排序算法,让知道的人举手,大约有10个人举手,然后请他们来做,发现只有两三个人做对。其实,数据结构中最基础的就是排序和查找,而冒泡排序是基础中的基础,只要10行左右的代码,逐个比较,两层循环,大的向上浮动,所以叫做冒泡排序。为什么做不对呢?这不是简单的智力问题,而是不知轻重和权衡。
有些人认为只要会IDE和语言就行,基础知识不重要了,我不以为然。这些年来,看惯了很多程序中大量嵌套的if else,大量的嵌套,混淆的语义,也看多了大量的重复代码。因此,更加觉得有抽象思维能力、基础扎实的可贵。
3. 可以有更多应用的状况
控件代码常常需要用到数据结构。有机会看了国内一个人写的一个report控件,该控件基于GPL协议发布,其中的代码完全是他自己写的,包括一个个的线、一个inplace的小edit、鼠标移动cell线等。原始的ereport共5000行,其中的注释也比较有意思,比如
“今天早晨有一个大艳阳天,我的打印...”,
“又是一个不眠夜”,
记载了这个人开发过程的酸甜苦辣。
ereport内给人印象最深的是,当用户的数据以dataset方式进来后,所有的排序、分组的累计都是通过for循环来做的。为什么不使用现成的呢?可能是因为Delphi过于庞大,没有提供这样的一套算法。decal是Delphi的一套Third Party 算法库,但是并不是所有的人都知道。随后的分组也由自己来写。这样,ereport内就有大量的排序算法、分组算法,以及和它们伴生的数据结构。
稍微复杂的算法也需要数据结构。我们接到了一个产品,叫做报表精灵,其实就是一个类似desisioncube的数据分析控件,其中涉及对数据钻取、切片、分组和排序等操作,可是现成的控件都不能满足我们的要求,要自己做,再一次涉及基本的数据结构。
要写出漂亮的代码,不能不了解数据结构。代码总是有控制结构和数据结构构成的,这就是Niklus Wirth所说的“程序=数据结构+算法”的含义。可是很多人只知道大量善用控制结构如if ,while等,却不知道善用数据结构,比如Array,List ,Collection,HashTable 。控制结构可以表达分支、循环的流程,数据结构因为它本身的设计可以隐含分支、循环,因此同样可以表达这样的流程。不同的是,用精巧的数据结构来表达分支、循环的意图,常常会比用控制结构来表达更加容易阅读和理解。一般程序员认为产品开发的技术要求不高,只要搞清楚业务就可以,就是就有大量的简单堆积、大量嵌套的代码布局——这就是为什么很多人认为数据结构不重要,总觉得没有用武之地的原因吧。
4. 现实的MIS编程
我们常说,IT工程师的技术常常很久不更新,原因是现在IT业对他们的要求都不高。简单地说,对做软件系统的人来说,只要要能够使用SQL,能够连接上数据库,然后绘制界面,把数据改一改,挂接到界面上,这个基本功就够了。因为这样的低要求,也因为缺乏代码评审,重复的代码、大量的嵌套就会出现。
IT新人在头一年做项目时,要做的就是反复操练这样的技术,在不同的场景下用少量的变通,然后学习如何侦查到错误并且修正它。如果确实有自己技术上搞不定的问题,知道如何得到解答,然后反复练习,直到熟练。这一段时间是最难熬的日子。
简单的使用TStringList.sort,复杂的使用SQL数据库,排序、分组都可以的。数据库SQL更加无所不能,一个子句就可以完成一个排序,一个子句就可以完成一次分组。让程序员不再重视数据结构,进而不重视抽象思维,这里说的是一般编程。说到优化,难免要阅读他人代码、分析结构;说到设计,也是如此,程序员的抽象能力是跨越台阶的必要条件。
分享到:
相关推荐
"Android-BeautifulNotes-优美的代码注释"项目旨在提供一种优雅的方式来编写和展示代码注释,从而提高代码的可读性和可维护性。以下是对这个项目的深入解析。 1. **代码注释的重要性** 在软件开发中,代码注释是...
通过阅读和分析代码,开发者能够加深对原理的理解,提升编程技巧,并学会如何在实际项目中有效地运用数据结构和算法。 总结来说,这份“Java数据结构与算法+源代码高清版”资源涵盖了IT领域的基础核心知识,它可以...
综上所述,"欣赏优美的代码"不仅是对代码美感的追求,也是对高效、可读、可维护和可扩展性的追求。这样的代码不仅能带来更好的用户体验,也能让开发过程更加愉快,降低长期的维护成本。而要达到这个目标,需要开发者...
H-UI的通用JS代码包含了与后台数据交互的工具类,主要依赖于Ajax技术。这些工具函数封装了HTTP请求,如GET和POST,使得开发者能够方便地获取或提交数据,而无需关心底层的网络通信细节。例如,`$.ajax()`函数可用于...
1. **轻量级**:Glider-JS的源代码只有几千行,加载速度快,对网站性能影响小。 2. **响应式**:Glider-JS天生支持响应式布局,能在不同屏幕尺寸下自动适应,确保在手机、平板和桌面端都能有良好的表现。 3. **高度...
"Java源代码全集展示,最优美的代码"这个资源显然旨在为Java初学者和经验丰富的开发者提供一个全面的学习和参考平台,它包含了Java标准版(JavaSE)的所有核心概念和功能的示例代码。 在JavaSE中,我们首先会遇到...
《代码大全--代码之美》是一本专注于编程实践与代码质量的经典著作,它深入探讨了如何编写出高效、可读性强、易于维护的代码。在软件工程领域,编写优秀的代码是提升项目质量和开发效率的关键。以下是对这本书所...
SuperLoadingProgress 一款优美的加载器,根据进度设置加载效果 动画效果如下: 希望了解这款加载器的实现方式,可以参考博文http://blog.csdn.net/crazy__chen/article/details/50270281
资料可能会讲解如何利用编译器选项进行优化,以及理解数据对齐和内存访问模式对性能的影响。 此外,资料可能还涵盖了内存管理的知识。C语言中的动态内存分配需要程序员手动管理,避免内存泄漏和悬挂指针是关键。...
6.3.3 CLSID关键字结构 91 6.3.4 关于注册表的其他细节 92 6.3.5 ProjID 93 6.3.6 自注册 95 6.3.7 组件类别 96 6.3.8 OleView 97 6.4 COM库函数 98 6.4.1 COM库的初始化 98 6.4.2 内存管理 98 6.4.3 将...
《藏谜》-一幅优美灿烂的藏族风情画卷.docx
6. 性能优化:书中可能讨论了如何通过优化算法、数据结构以及利用并发来提升程序性能,同时保持代码的清晰和简洁。 7. 并发与多线程:随着多核处理器的普及,理解和掌握并发编程成为必备技能。书中可能介绍了并发...
这反映出编写优美且高效的代码是一种艺术形式。 #### 2. **经典著作参考** 文档提到了几本经典著作: - **《计算机程序设计艺术》**(作者:Donald E. Knuth) - **《算法导论》**(作者:Thomas H. Cormen等) - ...
总之,编写高效优美的单片机C语言代码不仅要求程序员具备扎实的C语言基础,还需要对目标微控制器的架构和编译器特性有深入理解。通过精心设计算法、数据结构,以及合理利用各种语言特性,可以编写出既稳定高效又易于...
这个压缩包文件“Glider-JS创建优美的页面滑动块效果.rar”包含了使用Glider.js实现滑动条功能的所有必要资源和教程,帮助开发者在网站上快速集成这种高级的滚动体验。 首先,Glider.js的核心特点在于其简洁的API和...
在C语言中,结构体是一个非常重要的概念,它允许开发者创建自定义的数据类型,这为实现复杂的数据结构提供了基础。例如,一个二维空间中的点可以用结构体表示如下: ```c typedef struct { float x; float y; } ...
标题和描述中的知识点聚焦于如何在...综上所述,编写高效且优美的单片机C语言代码涉及到代码稳定性、执行效率、可读性与移植性等多个方面。开发者应综合运用上述策略,持续优化代码,以满足单片机应用的高性能需求。
在IT行业中,编写高效且优美的C语言代码是程序员追求的目标之一。这不仅涉及到代码的性能优化,还关乎代码的可读性和维护性。本文将深入探讨如何在C语言编程中实现这一目标,涵盖编码规范、算法优化、内存管理、错误...
《数据结构与算法分析(Java版)》是由Robert Lafore撰写的一本书籍,该书以优美流畅的语言和丰富的插图来介绍如何使用Java语言进行数据操作。本书不仅适合初学者,也适合有一定编程基础的读者,它假设读者已经掌握...