ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
商用工程的程序员,在接到用户需求的时候,最忌讳的就是马上从编程的角度 开始思考,这个功能如何实现,那个模块如何编写。那只会把事情越弄越糟,最后导致不 可收拾。笔者一般秉持的习惯是,系统分析期间不涉及细节,先相信所有的细节都是可以实现的!(如果程序员问:那成本呢?成本是你预期的投入乘以10到100倍,先让大家都开心一下,程序员安心一下……这是我的“宇宙流”风格咯,当然不是谁都学的来……!)以后再考虑风险点细节。 提示:软件工程界、程序员+和“软件哲学大师们”(这里真、伪大师先不定义)很多年以前就在争论,一个程序,自上而下编写(即先搭框架,逐步细 化),和自下而上(先解决所有技术难点,做出底层模块,再来拼接),哪个好的问题。 在商用工程中,笔者的经验 是: 程序员们的“自底向上”就是一个笑话…… 一定是自上而下,试想,连用什么平台和语言开发都没有确定 ,如何自下而上? 接到需求,程序员做到的第一件事情,应该是理解需求。大家不要以为笔者在说笑话 ,在实际工作中,笔者就遇到程序员把需求完全理解反了的例子,还有的程序员干脆挑着看 ,对于自己熟悉的需求实现得很好,但不熟悉的干脆啥也没做。 因此,那么自己接到的是一个小小的模块,也要认真对待,在理解需求的时候,建议首先仔细看产品相关文档,如需求分析报告,系统设计书之类的文档,然后和自己的上级 ,可能是组长,可能是部门经理,也可能是项目经理,也可能是产品经理?还有可能是甲方的产品经理或者项目经理,做一次面对面的直接沟通,讨论一下自己的模块,在未来产品中,究竟处于什么地位,它的优化方向,是空间优先,还是时间优先,有没有特定的算法需求。 这时:甲方可能会有意见! 你们随便一个小程序员,就来了解我们公司的业务?我们公司的(软件)需求……是不是成本太高了?太耽误我的时间和经验了?! 这时的软件就像甲方媳妇(乙方)怀胎的胚胎……你总不希望将来出生的婴儿有畸形不是? 所以,该做的需求交流还得做……!尤其是双方合作的“第一胎”……真生个畸形儿,双方再(互相)推卸责任……还有什么意思? 提示:现在企业都是团队合作,沟通必不可少,程序员有时候缺乏这方面的主动性,这需要调整。沟通的技巧,要主动陈述自己对模块的理解,言之有物,如“这个模块我的理解是… …”,请求上级予以点评,最终确保自己能完全理解,不至于做错事。 另外,沟通时要谦虚,笔者工作十几年,但在上级沟通时,没有听懂,就老老实实说“没听懂”,因为不懂装懂,最后吃亏的是自己。上级一般也不会因此而生气,往往是重复再说一遍,确保沟通成功。 “上家”控制“下家”的游戏: 理解需求,还特别需要理解,自己的上家是谁,下家是谁,即自己的模块从谁手里获 得数据,自己产生的数据,下一步递交给谁。 商用程序模块,原则上“宽进严出”,实现过滤器的效果,即不对上家提出要求,上家 给出任何数据,都统统吃下,内部对于自己能处理的数据做严格的校验,不符合的,做出 一定的 log 日志之后,予以抛弃,避免错误数据被逐次传递放大,最终形成大问题。 反过来,商用程序模块,在传递给下家数据时,却十分小心,任何一点不对,都可能 导致该笔数据被抛弃,道理也是同上。根据经验,秉承这种原则设计的模块,一般都没有 较大问题。 在很多时候,我们在项目设计的最后,即将开始 coding 的时候,还玩过“角色扮演” 的游戏。即大家一起开会,每个程序员都站到前面来扮演自己所负责的模块,按照每笔业 务流程,大家依次口述模块的功能和作用。 比如:从用户输入开始,UI 的程序员说明,我收到用户某笔输入,这代表什么意思, 我将其打成什么样的数据结构,并通过什么借口,传递给下面哪个模块处理。对应模块的 程序员,立即接上,我收到什么数据,我需要做哪些处理,用途是什么,最终构建什么样 的报文,交给哪个模块… … 项目经理和系统分析师(连带架构师傅们)都请记住了: “程序是(用来)给人类阅读和执行的(东东),只是刚巧计算机也能跑起来而已“ 换句话说:你的程序在电脑上能不能运行可以当作“锦上添花”……可是,人类--包括其他系统分析师、架构师、高级程序员甚至普通程序员、(还有三年以后的你自己)能不能理解,却是关系到整个(软件)项目的生死存亡的大事! 这就是 软件 工程的 第二个手筋: 先顾“生死攸关”(架构健壮、清晰、轻量、容易理解),别忙“锦上添花”! 如果,你只是个软件工程师; 你并不是个船舶设计师,于是我让你去学习泰坦尼克号轮船的设计架构致命缺陷,当然是强你所难…… 但是,你至少玩一玩“纸船过江”的游戏…… 试着用报纸、纸箱等造一艘小船……。 如果,不能保证它的架构稳定,你敢带着你的家人(比如你的孩子)驾着这艘小船去过江吗? “在攻击为筋,在防守为形。现在我们一般把他们通称为手筋。 手筋往往仅表现在某一局部的最有效着手,常表现为能够取得局部最佳结果的行棋方式。 之所以说刻意追求手筋不好,是因为他的出现是在特定情形下出现的,而不是说手筋多了不好。行棋的时候,正着和本手,其实也是形的一种,也就是基本手筋的一种。再一个原因是,围棋更加注重全局的配合,局部的利益要服从全局。实战中不乏局部获利却失掉全局的例子。”