最近关于软件开发的一点想法

        这两年开始尝试做比较大的软件项目。代码量都在几万行。今年一月份又开始接触android开发,正在做一个项目,现在代码量已经破万,都是瞎折腾。

        写了这么久的代码,总是能总结一点经验出来的。现在体会越来越深的一个东西是,架构设计非常重要。过年的时候,粗略看了一下《代码大全》这本书,里面就讲到一些很有借鉴意义的东西,比如它将软件设计比作建造一座高楼大厦,这个比喻很恰当。里面着重提到“创建活动是开发软件的重要组成部分”以及“创建活动在软件开发中处于枢纽地位”等观点。这些都是以前刚开始接触编程没有想到的东西,但随着自己的代码越敲越多,越来越感同身受。现在写程序会时不时补一下设计模式,软件复用等方面的知识。

        良好的设计是一个牢固可靠的软件的基础,就像建房子夯实地基一样。充足的准备总是看起来很麻烦,但是事实验证会磨刀不误砍柴工。随着工程越来越大,尤其是这种从架构设计到代码实现全部由一两个人承担的工程,还要兼顾不断变化的需求,问题会十分明显。我习惯软件从UI设计到底层代码以及服务器架设都自己来做,所以工作量自然大了许多。很多情况下,自己写一个小软件玩玩,就不会花很多心思去想到底怎么组织结构,怎么去设计接口,抽象类,怎么去分层,分模块,消除耦合,怎么去抽象出基类和继承,怎么设计配置文件,动态更新相关运行参数,利用反射等特点等等。经常有人忠告,不要重复发明轮子,而多数时间,自己做软件,就是一个简单的UI,双击生成事件处理程序,编写代码,找个开源的库实现功能就满足了,写点重复的代码都无关紧要,当然这是不好的习惯。但是涉及到外包的项目,就不太一样了,频繁需求变更以及变态的功能需求迫使你做出合理的架构设计,以应对未知的变化,否则后期会非常痛苦。特别是实验室做航天相关的产品,需要进行精心的设计,才能满足高性能,高稳定性等要求,以免造成不必要的损失。

        另外,软件测试也是必要的工作。以前写完函数就抛下不管了,以至于运行时会时不时出现一些不可预知的bug,导致软件崩溃,并花费大量的时间进行错误定位和修改。《单元测试之道》是一本比较有参考价值的书,不过我没有读完,仅仅是看了一两章,顺便了解了一下NUnit的使用。编写代码的质量,很大程度上依赖于函数对各种分支情况的处理,漏掉一种极端情况是很普遍的,这种错误也隐藏得比较深。现在我已经开始重视单元测试,慢慢建立这种习惯。另外合理使用try…catch也是必要的,但是今天看到Effective Java里面讲到不能滥用异常捕获,觉得有点体会就是,自己对所学知识没有深入进行研究也是很危险的。下面是这本书所讲到的一些观点: 


        以前看到一个说法:懂得东西越多,越觉得自己的无知。确实是这样,在软件的道路上,总是有很多东西需要学习。但是很多东西又都是相通的,这就需要我们不断总结,举一反三。很多时候过于浮躁,想掌握更多的东西,对一门学问浅藏辄止,这是做学问的大忌。当然这样也在足够短的时间里可以涉猎更多的知识,有些行业确实需要这方面的能力,比如咨询行业,比如做国家总理,需要什么都了解,才能日理万机。在软件行业,需要扎实的基础,我目前就需要改掉这个坏毛病,毕竟快到了要找工作的时候,有门突出的技能还是能增加不少谈判的筹码的。数据结构和算法由于没有相关的项目进行实践,会很快遗忘,但像BAT之类的公司,又很重视这些,所以强迫自己多练练手没有坏处。

        本科学的数字信号处理,研究生学的数值分析等课程,在关键的时候还是会起到一定作用。最近给一个机械公司做的PC软件,其中包含数据处理的部分,需要进行滤波,谱分析,插值,拟合等操作,于是,以前课上觉得没用的东西,终于有了用武之地。要是以前没有相关基础,就很难编写出合适的程序。当然,不重视这些课程,自己和老师都要承担一部分的责任。程序员不能一直在埋头在自己的小圈子里。

        我是通信出身,误打误撞进入软件开发的行列,幻想以后进入互联网公司干一番事业。现在,和很多程序员一样,沾染了一些坏毛病。就是闭门造车,习惯QQ交流,很少说话,长期在电脑屏幕前面敲键盘,导致人脉关系比较少,身体状况也不佳,见识也局限在技术领域。虽然经常去了解互联网行业的相关资讯,通过微博获取新鲜的资讯,但是总逃脱不了一个怪圈,什么时候都从技术角度看问题。技术是我们的优势,但是过度强调技术,难免做出偏激的选择和得出偏激的结论。比如一个产品,从技术角度看非常好,但是我们往往会忽略用户,市场等因素的印象。我觉得数学建模比赛的经历给我的一个好的经验就是,全面的考虑一个问题,用数据说话。现在码农越来越多,是什么原因造成的呢?很多时候我们不去想问题,仅仅是不断的敲代码,不去思考更深层次的东西,不了解代码以外的东西。今天在微博上看到一个文章,写国内工程师和国外工程师的工作心态,国外工程师大都报以游戏的心态,不管是不是真的,我觉得这种心态是好的(地址:http://m.forum.eet-cn.com/BLOG_ARTICLE_19337.HTM?eeclubweibo)。

        最后想说的事,专注细节。我们写程序的时候,都希望一个软件功能大而全,基于上线。我很认可苹果公司的理念,尽管我没有使用苹果的产品。追求极致,在细节上下功夫。我一个人负责一个项目的时候,难免会觉得手忙搅乱,原因是什么,想得太多,细节把握不够,做出来的东西就很粗糙。技术很多时候不是问题,影响用户体验的关键点就是细节是不是打动了用户,真正俘获了用户的心。我们很多时候都说自己有强迫症,就是希望所有东西都不会乱套,细节在哪,比如一个APP,它的UI设计中的错误提示不是PopupWindow,而是Toast,不会阻断用户的操作,以前看过《写给大家看的设计书》就讲得很不错,我自己做Andorid的时候,会看《Smashing Android UI》以及《Android UI Fundamenta》之类的书,尽管我不是专业做UI的,但是这些会多少有点帮助。另外,最近开始学习开源的组件的代码,优秀的代码总是将一个组件做得十分牢靠和稳定,与平常自己写的一个自定义组件相比,差距拉得很大,自己考虑得比较少,细节处理不够,从代码风格到层次设计,自己还有很多需要注意。软件开发的道路很长,国内软件开发还有很大的空间,慢慢加油。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页