zoukankan      html  css  js  c++  java
  • 工作中一些原则体会

    尽可能让一切变得简单,用最简单的方式完成工作

    能用最少的概念,最精简易懂的概念模型来抽象系统,多一个概念就多一份别人了解系统以及维护系统的复杂度,别人也会质疑多一个概念的意义所在,自己如果没想清楚就容易被diss。

    特别是在类的设计中,会发现其实很多时候用一个类就可以表达要干的单一职责了,每个类职责清晰,类于类之间关系易于理解及维护。

    设计系统时某些功能只在需要它时构建

    对于这点深有体会, 特别是在对设计此类系统没有业务经验的时候,不要尝试第一次就构建一个所谓“完美”系统,系统是要面向迭代的,永远都是随时准备修改或增加功能,所以设计系统的目标不在于追求一次性构建完美全面的功能,而在于追求系统对功能支持的扩展性,是否能具有快速cover新业务需求,从而分秒迭代自身的能力。

    并且业务是多变的,设计时满足好当前的功能需求,并预留扩展点,即使目前功能不完备,也能在未来快速构建它。

    没必要过度设计,特别是在自身经验不丰富的情况下,意淫的美好都是太自我,虽然多思考敢于尝试是好事情,但还是要找高手明确好要做的事情,否则对开发人力的浪费。开发暂时不需要的功能会导致最“重要且紧急”的需求delay或bug风险

    敏捷迭代思维

    先学会爬,然后再学会走,最后学会跑。换句话说,先保证能够正常运行,然后优化它使其更好,最后逐渐让它变得完美。为每个功能制定一个开发周期(最多2周),然后不断迭代。

    注重投资回报率

    工作中会发现任务都是排着队的,至于任务队列的 compare方法怎么写,对于事情的四象限法则,事情的投资回报率是评估是否重要的重要考量。

    功能的设计和测试尽可能独立。如果在设计时考虑到这一点,长远来看,它将省去很多麻烦,否则只有一切构建完成时你才可以开始测试整个系统。很多时候直到要测试某个功能的时候,才发现代码相互依赖,而无法独立测试某模块。

    推行MVP(最小可行产品)

    该理念的核心在于:先制定一些用例,完成用例所涉及的相关功能,立即发布产品,然后根据反馈和经验对产品进行优化。

    在需求评审阶段尽可能明确要做的事情,知悉pm需求的业务意义,才能更好更明确的带着目标做事情,技术评审阶段,尽量想清楚需求边界及所需的技术和业务资源来评估好开发时间,并乘以一个系数作为交付时间(主要是为后期突然插入的事情留buffer),从项目生命周期开始,直到上线期间,和相关人员经常进行 关键步骤同步和确认,大家不会天天盯着你在做的事情,要主动同步进度,寻求反馈,可以避免方向走偏,同时方便对于领导也能掌控全局信息。

    在多人协作过程中,流程规范化的意义,比如结论文档化,分支管理按照契约。大家都有了common sense,办公效率也是极大提高。

    试想微服务系统节点较少,俩人协作的时候,信息的沟通等价于最简单的的Pub/Sub模型,信息的传递较为简单,大家都会把对方同步给自己的事情处理好,甚至还闲着没事儿催促你好几遍,因为每个人只订阅对方的消息,来源单一,处理起来不会遗忘。后来的后来系统复杂了(同事多了),你作为生产者有了好多个消费者同事,比如你要改一个接口,涉及到好几个其他模块开发者,你推动这次升级需要每阶段都push各方同事这时候有个问题:

    除了其它端,发现 支付端 也需要升级你的接口,然后屁颠屁颠跑人家那又巴拉巴拉描述如何升级——每个消费者接入,都需要生产者开发适配新消费者的消息发送代码。

    学会解耦

    别忘了工作中你本身作为生产者同时也在订阅别人,总之你作为一个节点,你的所有peer消息你都要处理,消息量大还处理不过来,容易遗漏。要么是push消息,要么是处理别人的消息,对于push别人的消息,你还要做好“降级”,因为你告诉别人这样做了,你确保不了别人一定按你说的做,消息一多这个时候人脑子会很容易乱的,别人如果做错了,如果不承认你给他push过消息怎么办?你要背锅嘛。。。

    怎么办呢? 引入业务消息中间件~

    所以人多了就得学会解耦,每个模块都有人专门负责,模块间的沟通工作,需要一种协议来确保沟通准确性和解耦,上面说的是典型的同步rpc协议,意味着你要了解所有的消费者,还要处理新来的消费者,没有消息落盘,不可追溯。如果这个时候有一些文档或消息群来承载结论性的消息变更,大家都只需要跟踪这个文档或这个群就可以了,生产者就往里push消息,剩下的分布式消息处理一致性让别人来保证就可以了,哪一端没处理好,怪不了你了可。

    首先不用处理对别方的降级,都按文档约定的来的,也同步给你了,对于新的消费者接入,看文档就好了。 每个人就只需要push消息到文档落盘,订阅别人的文档watch变更,大量消息落盘,个人可以异步消费,而不会丢消息,落盘的消息可重复消费,可记录历史,避免沟通的扯皮,确保研发环节的有条不紊。当系统更大的时候,每个人工作消息模式复杂度保持不变,这也是 消息中间件 消息消峰 解耦的意义。

    还没关注我的公众号?

    • 扫文末二维码关注公众号【小强的进阶之路】可领取如下:
    • 学习资料: 1T视频教程:涵盖Javaweb前后端教学视频、机器学习/人工智能教学视频、Linux系统教程视频、雅思考试视频教程;
    • 100多本书:包含C/C++、Java、Python三门编程语言的经典必看图书、LeetCode题解大全;
    • 软件工具:几乎包括你在编程道路上的可能会用到的大部分软件;
    • 项目源码:20个JavaWeb项目源码。
      小强的进阶之路二维码
  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/xiaoqiang-code/p/11553197.html
Copyright © 2011-2022 走看看