吃喝拉撒中的软件设计——姑且一笑

0、引言
人的本性估计都有点倾向于“进”,比如,赚钱的叫做摇钱树,人人欢喜,花钱的叫做败家子,人人避而远之(有特别目的者除外),甚至在最普通的吃喝拉撒中,人们也是对吃喝情有独钟,很简单的,只听说过有美食家,但是没有听说过和拉或者撒有关联的什么家,尝美食和品香茗是雅事,是可以跟别人进行炫耀的事情,但是进行五谷轮回时人们多认为是粗俗之事,一般不会跟别人报告的。其实大家都知道吃喝拉撒是每个人的日常生活中的生理需求,其中的区别也就是一个进一个出而已。当一个人成为程序员的时候,那么,它的日常生活中就比别人多出了另外一个东西,那就是软件设计,不可避免的,软件设计和吃喝拉撒一起穿插在生活当中,因此,就突发奇想,探讨一下吃喝拉撒中的软件设计。


1、饭是一口口吃的
一个人即使没有听说过“罗马不是一天建成的”,应该也知道饭是一口一口地吃的。实际上各种软件设计方法也就是类似于吃饭而已。所有的软件方法都有一个目的--“解决问题”,于是所有的软件方法都有一个方法--“分解问题”,这个方法是人类固有的思维习惯,在兵法上,就是将敌人分而袭之,在哲学上就是从局部开始达到全部,在餐桌上就是切蛋糕,在这里就是吃饭。不同的软件设计方法只是吃的方法不同,打个可能不是十分贴切的比方,早期的面向过程的设计方法,就是简单地一勺子一勺子地往嘴巴里面塞(调用一个个过程或者函数),而面向对象,就是一个饭团一个饭团(一个个对象)地往嘴巴里面塞,面向切面设计,就象是吃沙拉了(沙拉模糊了国界线)。

吃饭虽然简单,但是也有吃的好与吃的不好的,如果一口吃太多了就容易噎着,就好像你写了一个三千行的函数会把你自己给噎着,甚至把看的人也噎着一样。虽然大家都能会吃饭,但是吃的像样就不是那么容易了,古话说“做官三代,方知穿衣吃饭”,做软件设计也一样,一个问题可能新手和老手都能去做,但是要做的漂亮,那就需要积累的经验了。


2、众口难调和软件设计风格
当一个人吃饭的时候,很好侍侯,弄个小菜加瓶啤酒就搞定了,但是当有八个人一起吃的时候就要照顾到不同的口味了,这个不吃辣的,但是那位喜欢火辣辣的刺激,这位喜欢清淡的,但是那位喜欢浓郁的风味,这个时候,大家都会认为照顾到不同的口味是理所当然的。但是,在软件设计的时候却不一样,一个软件,有些人按照面向过程的方式设计、也有些人按照面向对象的方式设计,有些人按照匈牙利命名法来命名一个变量,也有些人按照Java的命名方法来命名一个变量,有些人喜欢将一个成员变量直接设为public来存取,也有些人弄个一堆的get/set方法来存取一个private成员变量。。。。。。

实际上,这些东西都是一种设计的风格或者习惯而已,说白了,无论哪种风格设计出来的最后到了CPU那里还是一个样就那么几百条指令折腾来折腾去。但是,我们在做菜或者评价一个菜的时候,都会考虑这个菜的原材料的本身,而在做软件的时候,却经常为了加盐而加盐,为了添醋而添醋,在适合于用面向过程的地方搞出一堆的class,然后欣欣然———“终于彻底的面向对象了”。这让我想起了偏食的儿童。


3、快餐盒里面的蟑螂
写软件的人里面,我相信没有哪一个人从来没有写过bug,其实bug这个东西说白了就是错误而已,但是这个世界上第一个程序员是位女士,这位女士不是别人,是英国著名诗人拜伦的女儿 Ada Lovelace,后人专门弄了门计算机程序设计语言命名为Ada来纪念她。这么说来,这位诗人的女儿也就是这个世界上第一位发现软件里面是可能存在错误的人了。如果换了我们,可能就不会存在“软件bug”这个说法了,但是Ada的老豆是位诗人啊,诗人和普通人什么区别啊?区别最大的就是想象力特别丰富。日常生活里面女生最讨厌的什么啊?蟑螂咯!当你辛辛苦苦,挑灯夜战,敲出了一个程序,最后却发现一个细微的地方有逻辑错误,那种感觉,首先就是郁闷啊,然后你找出解决办法,长舒一口气。这个过程就好像一个女生发现了一个蟑螂,然后remove掉它差不多。

这个纯属想象而已,如有雷同,不胜荣幸。话扯回来,在现实世界中,在快餐盒里面吃到蟑螂的机会不算多,但是在写的软件里面藏着几个蟑螂的倒是不少,有些是自己吃到的,更多的是你做的快餐里面的蟑螂被某人买走后人吃到的。所不同的是,工作餐里面吃到bug的时候会大叫,而在软件里面的bug则习以为常了。


4、随地大小便和随时大小便
抽象地说,吃喝是使用资源(食物和水),而拉撒则是释放资源(以备以后使用,当然,是变成另外一种形态)。光吃不拉是要胀坏肚子的,所以,只占用内存(最常见的计算机资源)而不释放也会导致电脑坏肚子的。我相信这世上没有光吃不拉的人,但是有只用内存而不释放内存的程序。这个当然是因为现在的电脑还没有发达到自己知道什么时候去哪里拉一泡的程度,它在这方面的智力顶多也就是小狗狗的水平,需要人告诉它该什么时候拉,在哪里拉。有的人简单地在小狗狗的屁股后面挂个塑料袋子,作为gabbage collection之用,也有的人跟在小狗狗的屁股后面,一看小狗狗在释放资源,就赶紧delete。自己去delete的人如果没有让狗狗在固定地点进行轮回运动的习惯,狗狗就会shit anywhere,然后当你想delete的时候,已经不知道哪一砣是你的小狗狗的杰作,能不能delete,也可能没有delete干净然后路过的时候摔一跤,所以,自己delete的人还要让你的狗狗养成定点拉撒的习惯,不过,在实际工作中,还是有到处delete的人。。。在很小很小的时候我们就被告知不可随地大小便。但是,很奇怪地,随时大小便(好像和大小便失禁也没有什么大的区别)则是被人们接受,典型的就是在小狗狗屁股后面挂塑料袋子,有些人认为比起跟在狗狗屁股后面delete来说是一个大进步,而且习惯于自己的狗狗带着屎跑来跑去。


5、“伦敦”之锁
这个话题和上面的那个话题有关联,不单是标题上的关联,在实质内容上也有,都和资源的使用有关系。所不同的是,这个话题跟多线程或者多进程环境下的并发软件设计关系比较明显。人们在进洗手间的时候,总知道在“伦敦”前把前面的门lock上,完了再unlock之,但是,在写一个多线程的程序的时候,却经常忘记把前面的门给关上,最后,搞到“伦敦城”秩序混乱。

如果人们能够象去“伦敦”那样记得lock/unlock,那么一个多线程程序也就容易多了,当然,如果养成进出洗手间都洗手的习惯,那么就可以写出一个比较clean的软件了。

6、结语
其实,软件设计的目的也就是告诉电脑该怎么吃输入的数据,然后拉出什么样的结果,从这个角度来讲,软件设计也就是负责电脑系统的吃喝拉撒而已,并不是自己几年前想象的那么高深。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值