zoukankan      html  css  js  c++  java
  • 小小软件工程

    最近应朋友的需要,帮忙写了个日常账本管理的小程序,并且在写程序过程中有了点心得,心得很杂乱,涉及到软件开发的不同方面,因此统一称之为“小小软件工程”。

    ● 电脑不是万能的。
    无论是客户还是工程师都觉得计算机可以帮助人做许多事情,对应用程序有着“不切实际”的期望,希望程序要简单好用、同时又是准确无错、及时响应使用者需求等等,在这样的目标驱动下结果往往是程序一点都不好用(有的时候觉得还没人来得简单),大部分时候不出错(但不是100%,还是有时候会出错,并且不知道什么时候发生,错在哪里),程序反应越来越慢(不知道电脑到底是节约时间,还是在浪费生命…)。
    其实,计算机就如其他工具一样只是帮助人延伸自己的能力,只是他们更加像人,因为他们有很强的计算能力。人因为受生物功能的限制,管理百条、千条数据、计算几千、几万都还可以应对,但是信息爆炸造成数据量越来越大,人们关注的事情越来越精细,因此通过计算机可以帮助人面对更大的计算量,管理更多的数据。但是计算机本身也受自身条件的限制,并不能解决所有的问题,作为工程师一定要去了解电脑与人之间的差异,哪些是人可以做的,哪些是计算机可以做的,这样子写程序时才不会陷入程序过度复杂的问题

    ● 程序不是用来简化人的工作的。
    这个想法肯定与许多人的观点有冲突,想法来源于老婆(计算机人士)建议我把使用界面优化一下,使得最终使用者用起来更加方便,最后被我否决了。原因是这里的一个功能的优化可能要写几十行代码,而使用者(只有一个)只在输入过程中使用一次,而几十行代码还会给我的程序本身增加复杂性,而使用者完全可以人为调整一下就能很好的适应。
    其实,这里也是个投入产出比的问题,这里的优化对于使用者来说价值不大,而应用的首要目标是快速交付,因此所有的优化工作我只选择了为增强数据正确性而做的一些优化,其他使用中不适的地方全部请人来适应计算机。
    听起来,我做的事情不符合以往的思维,但是这个想法与上个想法一样都认为电脑的根本作用是帮助人解决人所不能做的事情,而不是一味的去解决人已经擅长的事情,比如说:让程序提供各种功能去支持与未来的兼容,因为人比电脑更能适应变化,着眼于现在才是程序开发的根本。
    于是,一周以内我就交付了程序,并且将对方大部分需求都给予了否决,只提供了最基本的功能就是原始数据的输入和明细表输出,并建议对方在使用过程中思考一下还需要哪些功能,当使用者对这些需求有了足够的认识,并且现有的数据使用者已经无法手工处理时,我再为之提供新的功能,降低了开发成本,同时也降低了使用成本,因为我所有的数据全部是开放的,如果他需要修改直接在数据上就可以完成。
    在开发过程中,我也受到了更好用的诱惑,因为有数据就很容易想到用数据库来做,这样子操作数据会觉得更加容易,但是后来还是只用Excel就实现了,根本原因是使用者对计算机非常不熟悉,也就是对Excel有所了解,如果我更换了使用习惯以后,光学习新的东西就会给使用者带来成本,学习新的工具也会增加错误的机率,如果为了保证数据准确性又会增加开发的工作量,因此我放弃了数据库的诱惑,仍然使用Excel保证了功能简单,数据开放。

    ● 需求采集时要将人的思维模式转化成电脑的思维模式。
    需求采集是应用成功的关键,但是客户大都沿用传统工作中的思维模式,必须通过交流转换客户传统的思维模式,使之向计算机的方式靠拢。比如:这次的客户他需要誊写原始账到好几个本子,于是他总觉得数据也需要在表单中重复录入,因此我向他解释计算机里面所有数据最好是统一出口,计算机复制生成这些数据都会非常简单。他理解了我的说法,自然这个需求就不用投入开发的精力了。

    ● 程序再好的灵活性也比不上人。
    这个问题如前面所说的,不要找计算机来代替人,如果人可以解决的问题,千万别急着用计算机来实现,成本高不说,可能投入产出比不值得才是根本。

    ● 代码应该通过重构提升优雅性和性能。
    不想考虑第一次代码就写得多漂亮,要遵守多少严格的约定(当然这不是说没有规范,重要的是规范应该遵守最大公约数,只有能够为大家协作带来便利的规范才是必须的)。相反不断的重构才是代码优化的最佳办法,重构一定是为满足更好的管理代码而做的。

  • 相关阅读:
    Python之路Day14
    Python 之路Day13
    PYthon之路Day12
    三层与“养猪”
    参数化查询---解决sql漏洞注入
    关于在asp.net中的调试
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(21)-权限管理系统-跑通整个系统
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
    构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据
  • 原文地址:https://www.cnblogs.com/zhuyx/p/10401953.html
Copyright © 2011-2022 走看看