系统程序员成长计划-写得又快又好的秘诀(二)

By 李先静 2,046 views

1.好与快的关系

几年前和一个朋友聊天时,他抱怨他的上司说,要我写得好又要写快,那怎么可能呢?我当时一愣,反问到,写不好怎么可能写得快?他也一愣。

系统程序员成长计划-写得又快又好的秘诀(一)

By 李先静 5,390 views

“快”是指开发效率高,“好”是指软件质量高。呵呵,写得又快又好的人就是高手了。记得这是林锐博士下的定义,读他那篇著名的《C/C++高质量编程》时,我还是个初学者,印象特别深。我现在仍然赞同他的观点,不过这里标题改为成为高手的秘诀,感觉就有点像标题党了,所以还是用比较通俗的说法吧。废话少说,请读者回顾一下这段时间的编程经验,回答下面两个问题:

系统程序员成长计划-你的数据放在哪里(下)

By 李先静 2,177 views

对于初学者来说这道题有点难度,很少有人能完全做对的。不过没关系,我们的目标并不是要难倒读者,而是要刺激读者去思考,加深学习的印象。有了前面两次的经验,我想没有人再去写一个dlist_to_upper的函数了,大家都会调用dlist_foreach来实现。不过新的问题又出现了,初学者常犯的错误有以下几种:

系统程序员成长计划-你的数据放在哪里(上)

By 李先静 2,205 views

需求简述

这里我们请读者实现下列功能:

对一个存放字符串的双向链表,把存放在其中的字符串转换成大写字母。

系统程序员成长计划-Don’t Repeat Yourself(DRY)(下)

By 李先静 2,233 views

实现这两个函数并不是件难事,但真正写好的人并不多。初学者通常的做法有两种:

系统程序员成长计划-Don’t Repeat Yourself(DRY)(上)

By 李先静 2,127 views

需求简述

这里我们请读者实现下列功能:

对一个存放整数的双向链表,找出链表中的最大值。
对一个存放整数的双向链表,累加链表中所有整数。

多写多练,不要偷懒,写完之后请仔细思考一下有无改进的余地。

系统程序员成长计划-拥抱变化(下)

By 李先静 2,278 views

在专用双向链表中,dlist_printf的实现非常简单,如果里面存放的是整数,用”%d”打印,存放的字符串,用”%s”打印。现在的麻烦在于双向链表是通用的,我们无法预知其中存在的数据类型,也就是我们要面对数据类型的变化。怎么办呢?初学者常见的做法有:

系统程序员成长计划-拥抱变化(上)

By 李先静 2,163 views

需求简述

大部分初学者在编写双向链表时,为了验证相关函数工作是否正常,都会编写一个dlist_print的函数,它的功能是在屏幕上打印出整个双向链表中的数据。从客观上讲,用dlist_print输出的信息来判断dlist的正确性不是最好的办法,不过脑袋里有质量概念总是值得表扬的。当把专用的双向链表演化成通用的双向链表时,编写一个dlist_print已经不那么简单了。这里我们请读者写一个dlist_printf函数,看看会遇到什么问题。

系统程序员成长计划-Write once, run anywhere(WORA)(下)

By 李先静 2,337 views

1.专用链表和通用链表各自的特点与适用范围。

专用链表在这里是指它的实现和调用耦合在一起,只能被一个调用者使用,而不能单独在其它地方被重用。通用链表则相反,它具有通用性,可以在多处被重复使用。尽管通用链表相对专用链表来说有很多优越之处,不过简单的断定通用链表比专用链表好也是不公正的,因为它们都有自己的优点和适用范围:

系统程序员成长计划-Write once, run anywhere(WORA)(上)

By 李先静 4,700 views

需求简述

Write Once, Debug Everywhere。据说这是流传于JAVA程序员中间的一句笑话,Sun公司用来形容JAVA的跨平台性的原话是Write once, run anywhere(WORA) 。后者是理想的,前者才是现实。如果我们的双向链表可以到处运行,那就太好了。Write once, run anywhere(WORA)是我们的目标,不过我们先要面对现实,回到双向链表上,请读者思考下列问题:

系统程序员成长计划-谁动了你的隐私(下)

By 李先静 3,267 views

1.什么封装?

人有隐私,程序也有隐私。有隐私不是什么坏事,没有隐私人就不是人了,程序也不成其为程序了。问题是隐私不应该让别人知道,否则伤害的不仅仅是自己,相关人物也会跟着倒霉,“艳照门”就是个典型的例子。程序隐私的暴露,造成的伤害不一定有“艳照门”大,也不一定比它小,反正不要小看它就行了。封装就是要保护好程序的隐私,不该让调用者知道的事,就坚决不要暴露出来。

系统程序员成长计划-谁动了你的隐私(上)

By 李先静 3,595 views

需求简述:

或许你还在欣赏用良好代码风格重新编写的双向链表,看起来不错,不是吗?不过这还远远不够,专业程序员要有精益求精的精神。至于要精到什么程度,与具体需求有关,如果只是写个小程序验证一下某个想法,那完成需要的功能就行了,如果是开发一个基础程序库,那就要考虑更多了。侯捷先生说过,学从难处学,用从易处用。这里我们是学习,就要精得不能再精为止,精到钻牛角尖为止。在后面的几章中,我们将对这个双向链表进行持续的重构,这个过程是循序渐近的,请读者不要着急,稳扎稳打的学习是才最好的。在这一节中,我们要学习的是程序的封装性,请读者思考下面几个问题:

系统程序员成长计划-走近专业程序员(下)

By 李先静 4,254 views

当你读到这里的时候,相信你已经独立写出了一个双向链表。恭喜你!迈出这一步可是值得庆祝的,现在你已经走在通往程序员的光明大道上了。不过你还是个业余程序员,那当然了,你才写出第一个程序呢!什么时候才能成为一个专业程序员呢?三年还是五年工作经验?其实不用的,你马上就可以了,我没有骗你,因为专业程序员与业余程序员之分主要在于一种态度,如果缺乏这种态度,拥有十年工作经验也还是业余的。

系统程序员成长计划-走近专业程序员(上)

By 李先静 6,253 views

需求简述

用C语言编写一个双向链表。如果你有一定的C语言编程经验,这自然是小菜一碟。有的读者可能连一个小程序都没有写过,那也不用害怕,可以参考任何一本《数据结构》和C语言的书籍。先弄明白基本概念,把书上的代码看明白,再把代码抄到电脑里,保证编译过去,调试它到正常运行。反复这个过程,直到你能独立完成它为止。写第一行代码是很痛苦的,我培训过好几个同事,他们不是计算机系毕业的,开始在电脑前坐一整天,一行代码都敲不出来,我最早写程序时的情况也好不了多少,不过没有关系,迈出这一步就好了。

系统程序员成长计划-背景知识

By 李先静 5,070 views

对于是否写这样一章,我犹豫了很久,最后考虑到这个系列是针对新手而写的,不应该对读者做过多假设,这些基础知识是必须掌握的,不能不介绍一下。如果你已经了解它们,可以放心的跳过本章。如果你是新手,请认真学习本章提到的内容。

系统程序员成长计划-序

By 李先静 3,985 views

写作背景

在经历过几个大型的,失败的项目之后,我终于明白没有什么比高素质的程序员更能决定项目的成功了,无论什么过程,什么编程语言和开发工具,离开了高素质的程序员,什么都是白费力气。毫无疑问,人是软件开发中最重要的因素,但不是每个人都重要,不是什么样的人都重要,只有那些高素质的程序员和那些对项目有突出贡献的人才是重要的。