关于mvp:MVP原型概念验证傻傻分不清楚

MVP、原型以及概念验证这三者的概念尽管没有亲密的分割,但也有不少人会分不清这三者的区别,在这篇文章中,咱们会帮大家辨别一下这三个概念。 首先是MVP,MVP是Minimum Viable Product的缩写,即最小可行性产品。MVP通过公布一个产品的晚期版本,来获取用户对该产品的反馈,从而开发出更能满足用户需要的产品。简略来讲,MVP提供了测试市场以及客户需要的机会,从而防止产品开发方向呈现偏差;MVP帮忙公司在产品的晚期阶段就可能通过交付价值来吸引一部分客户,取得支出;同样,MVP也可能帮忙产品提前进入市场,凭借后期劣势建设品牌影响力。 Airbnb就是一个很典型的MVP例子。起初,Airbnb公司创始人认为公寓出租这一想法尽管很好,但还是要先确保这个想法可能赚钱。于是为了验证这一点,他们出租了本人的公寓,开发了一个根本的网站来展现这套公寓。在这个最早的MVP投向市场后,他们发现这个想法是可行的,公寓很快就被租用了。之后,Airbnb公司开始在这个MVP的根底上进一步欠缺他们的软件,并扩充本身的业务。 接着是原型,原型是一种帮忙研发人员、测试人员等产品实现侧的团队成员更分明地了解产品设计的交付物。原型能通过可视化产品设计计划以及底层逻辑,来清晰地表白产品需要。产品原型并不是一份设计图,而是一个更加简略、不便批改、可能看到功能性与逻辑性的产品设计计划。 最初是概念验证,概念验证(PoC)是Proof of Concept的缩写,是为了证实某种办法或想法的可行性而进行的一种实现或原理上的论证,旨在验证某些概念或实践具备实用后劲。和MVP相比,概念验证通常也比拟小,可能蕴含残缺的性能,也可能并不蕴含残缺的性能,具体须要依据须要而变动。 为了让大家更直观地感触到这三者之间的区别,给大家一个表格以供参考: 接下来,咱们会就如何构建一个MVP动手,带大家来理解如何更好地验证想法。首先咱们要明确, MVP并不完满,它不会领有产品的所有性能,只是一个可能验证最后创意的简略、新鲜的产品。 如何构建和验证MVP?1、进行市场调研在开始构建产品MVP之前,咱们须要钻研一下市场中已有的同类产品,理解它们有哪些性能,以及客户为什么应用它们。 2、评估想法的商业性从客户细分(你要把产品或服务卖给谁)、价值主张(为客户提供的利益的汇合或组合)、渠道通路(一家企业如何同它的客户群体达成沟通并建立联系,以向对方传递本身的价值主张)、客户关系(一家企业针对某一个客户群体所建设的客户关系类型)、支出起源(企业从每一个客户群体取得的现金收益)、外围资源(保障一个商业模式顺利运行所需的最重要的资产)、要害业务(保障其商业模式失常运作所需的最重要的事件)、重要搭档(保障一个商业模式顺利运行所需的供应商和合作伙伴网络)、老本构造(经营一个商业模式所产生的全副老本)等九大部分登程,来绘制产品的商业模式画布。 3、决定性能的优先级基于咱们之前进行的市场调研后果以及商业模式画布,定义MVP必须具备的性能。这些将是“必须具备的”性能,可能为客户提供价值。 4、开始构建MVP依据确定的优先级开发MVP,在构建的时候要遵循一个准则:够好即可。 5、验证筹备好MVP后,咱们能够将MVP投放到市场,并收集市场反馈,以便在前期的产品方向上做出调整和改良。 6、欠缺MVP只是迭代开发的第一步。在确定了整体的大方向后,咱们能够联合麻利项目管理,制订进一步的迭代开发计划,通过一直地交付给客户可用的产品增量,来持续满足客户的需要,带来支出并取得竞争劣势。 当公司对产品方向或产品的发展前景比拟迷茫时,能够通过MVP,用小老本来疾速地获取市场最实在的反馈 ,从而播种更大的利益。

December 29, 2022 · 1 min · jiezi

关于mvp:从学术到实践学院派崔宇的区块链破壁之道-对话MVP

如何将喜好变成事业?崔宇做到了。 作为北方工业大学信息学院的学生,崔宇是一个狂热的技术爱好者。为了时刻紧跟技术的倒退,他关注量子明码、元宇宙等前沿畛域的钻研。当被问及业余爱好的时候,崔宇的答复是“没有”,惟一的“喜好”是“写编译器”。 在开源社区,“学院派”的崔宇失去了与“实际派”交换碰撞的机会。比方,在谈到量子计算的迅猛发展时,崔宇认为应该思考上线“抗量子训练平台”,有的小伙伴则认为从实用的角度看还为时尚早。“学术人员和技术人员在某种程度上是有壁的,思考的问题不一样。”崔宇说。 在这之后,崔宇更踊跃地参加交换,视线也逐步从单纯的学术科研,扩大到技术落地的利用场景,尝试冲破学术和实际的“次元壁”。在社区,他踊跃答疑解惑,并与其余成员独特开办了区块链金融开发深研社,逐渐成长为FISCO BCOS开源社区的MVP。 或者,社区就是这样一个神奇的所在。有专一于实践钻研的“学院派”,也有专一于技术落地的“实际派”……不同背景、视角的成员在碰撞中交融,彼此借鉴,以技术落地验证了学术实践,也以学术视线照亮了技术的将来之路。 以下为崔宇访谈实录: 区块链是我接触前沿技术的窗口1、您投身于区块链钻研的契机是什么?区块链为您的学业和生存带来哪些扭转? 我最后是因为做监管类我的项目接触到区块链技术。我自身是搞云计算出身,入门区块链,最开始是依照经典的区块链学习路线,依据市面上区块链的书籍自学,逐渐学习区块链底层架构、智能合约、密码学原理等。因为区块链波及的技术比拟多,开始的学习过程也比拟艰巨。 在这个过程中,我接触到了FISCO BCOS,也通过FISCO BCOS意识了一些老师。比方柏链道捷CTO、FISCO BCOS认证讲师高野,他在我入门区块链的时候给了很多帮忙,让我学习了智能合约开发、具体平安上的逻辑。 目前,我开始尝试基于FISCO BCOS进行高级开发,也将区块链作为本人的外围钻研方向,使得本人在失常的课业内容之外,领有了接触世界前沿技术实践的机会。 2、 在抉择区块链技术作为钻研方向当前,最有成就感的事件是什么? 在钻研区块链底层技术的过程中,我主导了多个我的项目,参加了很多比赛并取得了一些实习的机会。目前,我负责南京大学普惠三农金融科技翻新钻研核心特聘助理研究员,同时给本科生讲授FISCO BCOS底层架构、Solidity编程等区块链相干课程。 另外,我还跟社区结识的老师一起开办了区块链金融开发深研社,并出任联结创始人兼CTO,发展基于FISCO BCOS平台的区块链金融畛域实践翻新与实际钻研。目前,咱们正基于FISCO BCOS平台设计一种新型的金融描述语言,下层是金融的接口,上层是Solidity,让金融开发更便捷智能。将来,咱们还会基于FISCO BCOS平台落地一些具体的利用。 3、 您率领团队开发了基于WeBASE中间件的电子保函管理系统,并加入全国明码技术比赛,请谈谈这个我的项目和您的参赛感触。 电子保函管理系统利用区块链具备数据通明、可追溯、防篡改和不可抵赖等特点,实现了电子保函从新增、执行、变更到退还的全周期链上数据管控,能够无效解决电子保函畛域的数据孤岛、信息安全、多主体协同等问题。 参赛的时候,出于技术、实现工夫以及零碎属性的思考,咱们抉择了FISCO BCOS平台去做。绝对于之前利用过的其余平台,FISCO BCOS的开源生态提供了丰盛的组件,比方WeBASE中间件能够大大提高开发效率,多语言SDK也升高了团队的后端开发难度,助力了咱们团队在该项比赛中取得全国二等奖。 接下来,咱们也会加入一些大公司或者国际级的比赛,比方由微众区块链提供技术支持的一带一路暨金砖国家技能倒退与技术创新大赛,这种大赛会更偏技术落地一点。 30%学术+70%实际,期待钻研产生理论的利用价值4、您如何对待学术研究和技术实际这两者的关系,从您本身经验来说是否有肯定偏重? 我认为学术研究和技术实际是“鸡生蛋,蛋生鸡”的关系。学术最终都是要利用到技术实际中,但学术也能够引领技术的倒退。而FISCO BCOS社区就像一个平台和桥梁,让学术和技术人员相互交换,互为补充,拓宽视线。 我集体更并重技术。之前差不多是60%的实际,40%的学术,目前是20%-30%的学术,70%-80%的实际。有时候我也会跟进国内顶级会议论文的学术研究内容,然而大部分工夫都在钻研技术开发,包含最近在钻研新的编程描述语言。对我集体而言,实际还是要放在首位,次要因为比拟期待看到本人钻研的货色能产生理论的利用成果或价值,总结就是:技术要付诸实践。 5、将来对本人的职业生涯有怎么的打算和期待,会抉择持续专一于区块链技术畛域吗? 将来在学术实践上将持续深入研究后量子区块链、区块链x金融、新型智能合约等方向,短期内将致力于解决智能合约在金融畛域利用中的安全漏洞问题,同时在技术层面进一步摸索FISCO BCOS v3.0体系架构,构建更多语言的SDK,开发更多区块链利用。 在工作上,我也会以技术为主,同时兼做钻研。如果我在技术利用层面遇到了无奈用现有技术解决的问题,我会诉诸实践,用实践上的逻辑去重构现有的技术规范。也就是从学术中找到技术利用问题的答案,最终利用到实际中。 6、您认为前沿科技的倒退,比方量子计算技术,将来会对区块链产生怎么的影响? 随着量子计算技术的飞速发展,将来,利用于区块链技术的经典明码体系可能会受到威逼。尤其是哈希函数与ECDSA数字签名算法会别离蒙受到量子搜索算法与量子合成算法的攻打。因而后量子明码成为了钻研的焦点。格明码、多变量明码等后量子明码计划尽管可能抵制量子计算攻打,然而在签名长度和密钥长度等方面,还无奈媲美ECDSA,在适配区块链方面仍存在瓶颈。而基于量子隐形传态等量子明码计划构建签名在肯定水平上能够实现前向安全性,然而须要解决如何将量子网络融入现有经典区块链体系的问题。集体认为目前世界上曾经投入使用的抗量子区块链,无论从应用效率还是安全性的角度看,都处于高级模型阶段。当初技术界应用的ECDSA签名,在十年内还是平安的。 MVP是开源社区沉闷共建的象征7、退出社区当前,最大的感触是什么?有没有令您印象粗浅的人和事? 退出社区后,十分荣幸可能参加到各类线上研究会议,学习到各种社区分享的技术类课程。依据本人的钻研方向退出了CC-SIG(跨链专项兴趣小组)和SC-SIG(智能合约专项兴趣小组),解决了WeCross利用以及Solidity智能合约开发方面的问题,并进一步深入研究了跨链架构。在此期间,非常感谢可能失去FISCO BCOS社区技术人员一对一的急躁领导。看到本人提交的PR被合入官网文档中,可能深切感触到本人的所思所想得到了认可,也激励本人尽其所能解决其余社区成员的技术问题。 社区成员给我的印象首先是十分踊跃,其次就是酷爱学习,很喜爱追赶前沿技术。社区推出的各种会议中,大家都比拟踊跃沉闷。通过社区,我也结识了一些气味相投的敌人,大家会常常交换,我在社区公布内容和PR之前也会先公布在群里,跟小伙伴们沟通一波。 8、如何了解MVP?将来在参加开源建设方面有哪些打算? 在我看来,MVP是一种对于社区建设参与者的认可和激励,是整个开源社区沉闷共建气氛的象征。随着我对FISCO BCOS越来越相熟,缓缓具备了从发现问题,到验证问题,再到解决问题的能力,从而更好地参加社区开源奉献。将来,我心愿联合FISCO BCOS设计构建下一代数字金融基础设施、体系架构和利用,持续在区块链金融畛域的摸索,也心愿FISCO BCOS能被大规模引入到高校的区块链课程教学中。————————————————理解更多干货内容,请关注FISCO BCOS开源社区公众号,拜访FISCO BCOS代码仓库可下载我的项目所有源代码:https://github.com/FISCO-BCOS/FISCO-BCOS,欢送点击页面右上角star珍藏,获取最新版本。

July 21, 2022 · 1 min · jiezi

关于mvp:万物数创CTO黄一别人批判我的代码是件有趣的事-对话MVP

“区块链”和“开源”是黄一职业生涯中的两个重要关键词。 “区块链”帮忙黄一实现了从 “膂力劳动者”逆向工程师到区块链技术管理层的跃升。 作为万物数创的CTO,黄一看问题的角度更全面了,除了底层的技术问题,他开始关注更宏观的协调问题、商业问题。区块链也锻炼了黄一的产品思维。当初,他曾经胜利率领团队基于FISCO BCOS落地了链动社区、新华坊智慧公园零碎等多个区块链我的项目。 而“开源”则给黄一带来了许多乐趣。 “其实我从小学就开始开源了。”黄一笑着说。他本能乐观,喜爱分享,还是小学生的时候,黄一就乐于将作业“开源“给他人“参考”;成为大学生后,黄一退出字幕组,将时间轴向二次元爱好者“开源”;而作为区块链从业者,黄一抉择退出FISCO BCOS开源社区,通过踊跃开源代码、分享心得,成长为社区的MVP。 在开源过程中,黄一对他人的反馈“来者不拒”,甚至更期待批评的声音。通过汲取意见和反馈,他重复锻炼本人的代码。“他人批评我的代码是件乏味的事。”黄一说道。 以下为黄一访谈实录: 大龄开发者在区块链畛域是有劣势的1、谈一下您与区块链结缘的通过以及抉择FISCO BCOS的起因,为什么青睐区块链技术? 我算是受家庭陶冶,先从学术角度理解到区块链,而后从利用角度去应用区块链。 父亲以前是高中物理老师,喜爱关注前沿的货色。早在2014年,在他的重复安利下,我就陆陆续续看了一些相干论文,发现区块链的确有存在的意义和情理。 在工作上接触区块链的契机,是公司做“利用闲置算力设施进行分布式渲染”这个方向的时候,我牵强附会地开始深刻理解区块链,发现区块链技术能够用来解决理论的问题。 在这个我的项目的区块链技术选型时,咱们做了多方调研,发现还是FISCO BCOS最好用。次要体现在几个方面:一是文档齐全、社区沉闷;二是FISCO BCOS源代码是C++写的,正好我以前C++代码撸的比拟多,看的比拟顺畅;三是因为退出了社区,和大家一起写代码看代码,缓缓就融入了这个气氛。我能感触到这是一个蓬勃向上的产品,所以公司前面的我的项目根本都应用或者借鉴了FISCO BCOS。 2、您有多年逆向工程师的经验,起初转为深耕区块链畛域,请谈一下您转变职业方向的起因,区块链给您带来了怎么的扭转? 以前我次要做Windows客户端逆向,对象根本是C++或者.Net的代码,同时也有相当丰盛的C++正向开发以及后端开发的教训。不过对年龄较大的开发者来说,逆向开发这种体力活比拟辛苦,转型之前我曾经越来越不能胜任了。正好因为工作机会接触区块链,就趁势转型。当初,区块链十分须要底层开发人员,而逆向程序员的思维很敏锐,正向也必须玩的很溜,熟练掌握C++等语言,具备转型的先天劣势。 我转型区块链之后,最大的转变就是架构思维更全面了。逆向开发只要求对流水线中的某个点做到很专很深,全局视线反而不够。做了区块链之后,我对整个架构和产品更理解,推动我从单纯的程序员向技术管理层转变。所以,大龄开发者在有肯定根底的状况下,来到区块链畛域是有劣势的,而且还能开辟全局视线、产品思维。但也要保持学习,因为区块链行业突飞猛进,不学习就会落到前面去。 在我国,区块链很适宜利用在ESG治理上3、您基于FISCO BCOS落地了链动社区、新华坊智慧公园零碎,请谈谈教训和感触? 最大的感触是,当把区块链利用到理论场景的时候,咱们面对的往往不是技术问题,而是经济学问题,或是商业问题。区块链不是万能的,须要配套一些解决方案,甚至有时候须要有行政力量染指当前能力更好实现可信成果。 链动社区我的项目算是咱们第一次试水“区块链+社会治理”,刚接触的时候感觉逻辑应该会很简略,实际上做起来齐全不是那么一回事。 举个例子,每个社区有本人的工夫超市,居民通过参加社区志愿者流动取得积分,兑换超市的物品,然而不同社区工夫超市里的货色,价值是不同的。如果把积分买通, A社区的居民会不会全副跑去B社区去兑换物品?如果不把积分买通,那么用户如果有多套房子,在多个社区有积分,怎么存储积分,不同社区的积分如何界定汇率?这些问题都不是区块链自身能解决的,最初咱们靠行政力量,通过协调商家、社区街道办,解决了这个问题。 新华坊智慧公园则让我有另一个种感触。这个我的项目波及到多方协同开发,也是咱们第一次深刻参加数字孪生+区块链的我的项目。咱们对本人进行了灵魂拷问:如何真正地对物联网设施终端进行确权? 咱们当初确实权都是基于物联网HUB的,并没有真正到端。外围起因不是技术问题,而是商业问题。物联网终端制造商那么多,如何协调这些企业做革新工作?凭什么让它为你做革新?如果是政府我的项目,咱们能够借助行政力量要求物联网制造商进行革新,在端布一个很渺小的程序进去,它就会把指纹和key传回来,这样咱们就会晓得这个物联网数据有没有被篡改过。然而在一般商业我的项目里,只能抉择置信物联网设施端,没方法对它进行革新。 4、这些我的项目也是区块链技术在ESG畛域的典型实际,您怎么了解ESG,是否谈谈区块链技术在ESG畛域的利用前景? 区块链在ESG场景须要解决三个外围问题:如何界定企业的投入?如何保证数据品质?如何证实企业的清白?这3个问题和分布式系统中的数据可信度有密切关系,区块链的个性非常适合去做这个事件。 区块链在ESG畛域利用有一个很重要的问题就是边界划分。应该尽量把本人的逻辑做小,和业务逻辑离开,不要把业务逻辑搅进来。我感觉最重要的是缓缓造就客户对区块链的意识,区块链不是做业务的,而是做数据安全的,不然就会成为接SaaS服务的公司。 至于利用前景,我感觉在我国,区块链很适宜利用在ESG治理上。区块链的外围底层价值是可信,可能进步政府的公信力。所以区块链利用最好的切入点还是通过政府牵头去做,政府很看重不同部门之间的责任界定、数据真实性,需要很明确,又有足够的力量要求参与者配合革新,这对整个区块链工程化和落地很重要。 我从小学就开始“开源”了5、谈谈您对开源的了解? 其实我从小学就开始“开源”了,会把作业“开源“给他人“参考”。(笑) 当初,我在FISCO BCOS做开源的能源撑持有两个。一是基于理论的工作业务须要,我是棘手开源和分享了而已,不会产生额定的责任和累赘。另一个支撑点是我有足够的趣味。 我的开源激励就来自于他人的反馈,他人说我的代码写得很好,我就有能源持续做。除了因为商业或者其余起因须要窃密的repo,其余我根本都会开源,让他人批评本人的代码,我感觉是一件很乏味的事件。有一次,我的代码被他人私信批评写得不好,我感觉对方说的很有情理,就从新写一份代码发给他,最终也播种了对方的认可,当初他还跟我始终放弃Email分割。 写代码是创造性的工作,不是真理性迷信,很难呈现“真谛把握在多数人手上”这种事件。反思为什么写得不好,就能够重复锻炼写代码的能力,我始终放弃互相学习、相互借鉴的心态。 6、退出社区后,有没有令您印象粗浅的人和事? 印象比拟深的事件,是做过一个将区块链搬到边缘网关设施的实验性我的项目。这个我的项目波及到两个问题:一是裁剪FISCO BCOS的体积;二是在ARM机器上,以超低配置及较古早操作系统进行FISCO BCOS的源码编译。过程中遇到不少艰难,好在过后曾经退出了FISCO BCOS的技术群,失去了大家的热情帮助,正好也被FISCO BCOS外围开发者白兴强老师看到,给了我较长时间的帮忙,最终胜利让FISCO BCOS在5G边缘网关上跑了起来。 社区的小伙伴都给我留下了比拟粗浅的印象。比方哈希科技CTO林宣名老师,也是FISCO .Net SDK的作者,咱们交换比拟多。我当初始终在应用他的SDK,在这里对他说一声谢谢,十分好用。我也常常看林宣名老师的B站视频,始终给他点赞。还有白兴强老师,最开始给予了我很多帮忙,当初他在致力欠缺FISCO BCOS v3.0,常常会给我分享最新的停顿。 7、您怎么了解MVP?将来在参加社区建设方面是否有进一步的打算,对社区还有哪些期待? 我感觉既然曾经是MVP,就要承当起本人的责任。在我看来分两局部,一是持续在本人的工作上推动FISCO BCOS的应用和落地,真正为社区奉献有价值的低劣案例;二是在这个根底上,在社区中分享本人在这些案例中遇到的坑和有价值的想法,写成文章或者间接开源repo,供大家参考和借鉴。 我对社区最大的期待还是v3.0正式版的欠缺,因为当初本人手上的我的项目都还落在v2.8.0这个版本,急不可待想在下一个我的项目上间接上v3.0,看看整体的成果如何。 理解更多干货内容,请关注FISCO BCOS开源社区公众号,拜访FISCO BCOS代码仓库可下载我的项目所有源代码:https://github.com/FISCO-BCOS/FISCO-BCOS,欢送点击页面右上角star珍藏,获取最新版本。

July 21, 2022 · 1 min · jiezi

关于mvp:广电运通余昌鸿像路明非一样努力做正确的事丨对话MVP

没有一个少年未曾向往成为屠龙壮士,余昌鸿也不例外。 作为一名从业多年的技术开发者,余昌鸿现负责广电运通高级软件工程师,从事区块链相干工作。业余时间,他喜好浏览,最喜爱的故事是江南笔下的《龙族》:平庸糊涂的高中生路明非历经崎岖,却把以生命为代价换来的超能力用来帮忙他人,保卫心中正义和坚守。事实中的余昌鸿尽管没有超能力,但也在FISCO BCOS开源社区中保持分享,致力做“正确的事”。 “路明非跟事实世界大部分人一样一般,然而如果他人须要帮忙,他会在本人的能力范畴内付出致力。”自认为“孤僻”,能够几天不谈话的余昌鸿,谈起开源社区时却滔滔不绝。 从2018年接触区块链并退出社区开始,余昌鸿从单独学习变为与社区搭档同行,并逐步成长为一名区块链畛域的业余开发者、FISCO BCOS的MVP之一。在社区,他不仅踊跃提交奉献代码,而且尽本人所能为其余从业者提供帮忙,把本人所晓得的全副分享进去,只为:“愿我学习中遇到的艰难,后学者不再遇到”。 虚浮致力、乐于分享,余昌鸿的这些特质也正是FISCO BCOS开源社区千万名开发者的共性,他们或者不是“大英雄”,却在事必躬亲地摸索着用技术改善社会民生的有限可能。 以下为余昌鸿访谈实录: FISCO BCOS如同晓得用户须要什么一样 1、为什么抉择FISCO BCOS?您感觉FISCO BCOS带给您最大的不同是什么? 我抉择FISCO BCOS次要是因为运行效率和易用水平。之前也尝试过不同的区块链平台,比方国外的联盟链,尽管执行效率还行,但搭建区块链集群环境比较复杂,应用和保护老本也很高,而且它是模块化的,应用起来太“重”了,须要挨个理解每个模块,如果英文陌生,模块和模块之间的关系很难梳理分明。近些年,国产化也是大趋势,咱们就逐步放弃了国外区块链平台的利用。 而FISCO BCOS提供了具体的学习材料、丰盛的利用组件,带给我最大的感触是:简略易学、容易上手。FISCO BCOS如同晓得用户须要什么一样,很完满地提供了部署文档、开发手册、多语言sdk、利用组件等等。遇到问题能在群里就即时沟通解决,或者提交PR,社区会马上反馈修改,老手也能很快上手。最次要的还是执行效率,我做我的项目的时候专门测过,远优于国外一些技术平台。 2、你参加过哪些区块链我的项目?是否分享一个您喜爱的我的项目,并谈谈您的感悟。 印刷链我的项目是我很喜爱的一个我的项目,也是由FISCO BCOS提供底层技术支持的。过后,我就任于一个印刷公司,咱们的客户心愿能确保业务流程中应用的油墨、纸张等信息实在、可溯源。于是,咱们基于区块链构建了一个可信平台,端到端全流程上链,数据通明共享,智能合约及时执行,分布式账本无差别对账;实现印刷订单溯源、单据匹配、链上对账等性能,无缝连贯各方,进步协同效率。 我喜爱这个我的项目是因为,咱们在做的过程中充分考虑了多方面的内容,比方智能合约全面管制、执行效率等,让区块链技术失去了更好的利用。另外,这个我的项目实现了“瘦链上、胖链下”,利用了FISCO BCOS开源生态的WeBASE中间件、数据治理通用组件WeBankBlockchain-Data中的数据导出组件,把非必要在链上存储的数据放在了MySQL数据库,实现链下查问,不仅加重了链上的累赘,也极大晋升了查问效率。 另外,我所就任的广电运通是FISCO BCOS的产业利用合作伙伴,也基于FISCO BCOS底层技术在金融和政务行业落地了一些我的项目。 集体感觉,如果将来区块链能像传统数据库MySQL一样广泛应用到我的项目中,那么就是区块链大发荣耀的时候。不过,区块链要更好利用也不仅是单纯的技术实际,还须要社会层面可信机构的参加和背书,去解决公众信赖的问题。 3、您从业多年,也有肯定技术积攒,从您的教训登程,有什么想对刚入门的区块链技术开发者们分享? 对于刚入门的区块链技术开发者,我集体举荐先从FISCO BCOS学起,个别学习区块链可分为3步骤: (1)搭建区块链集群环境; (2)开发DApp,可选用java-sdk、go-sdk、nodejs-sdk等,会几种语言都能够,比方我就应用了java、go来开发; (3)编写智能合约,可用语言包含solidity、rust、go等。 学习区块链最大的难点就是轻言放弃。在应用区块链过程会遇到很多问题,如果始终无奈失去解决,会很容易丧气。很多人这个时候就会想放弃,所以咱们须要有肯定的毅力和急躁,去克服难题。 学习是一个循序渐进的过程,咱们学到的货色越多,学起来就越轻松,因为常识是举一反三的。前面遇到相似问题,解决起来也就越轻松。做技术就是这样,教训很重要,学习也很重要。 国产化背景下,FISCO BCOS将迎来更多关注和应用 4、您所就任的公司广电运通近来在隐衷计算上频频发力,您感觉区块链在隐衷计算方面有什么劣势? 目前咱们公司的隐衷计算解决方案引入了FISCO BCOS的相干技术,以及微众区块链的场景式隐衷爱护解决方案WeDPR、多方大数据隐衷计算平台WeDPR-PPC。 隐衷计算能够爱护数据起源不被泄密,做到数据源隐衷爱护,扩充联盟链成员退出和利用范畴。而区块链能够解决数据确权、利益调配等问题,使多方数据合作更安全可靠。 比方金融畛域共享黑名单的利用。保险公司可通过隐衷计算建设险企黑名单共享联盟,共享一些信用不好的黑名单用户,能很大水平帮忙险企升高业务危险。如果A公司想让B公司共享黑名单给它,只须要两家公司都在这个联盟链上,B公司把黑名单用户数据共享在联盟链上,通过脱敏解决和加密贮存,实现黑名单共享过程中数据的最小化披露。这样对B公司的影响很小,而A公司失去黑名单数据,也能够采取一些措施防止损失。 另外,企业公司在收集个人信息时,通常须要填写一大堆个人信息来证实“我就是我”,这其中就蕴含许多集体敏感平安信息,如被不法份子盗取,会给集体带重大的经济损失,应用区块链+隐衷计算就能够很好地解决问题。 5、广电运通始终致力于推动国产化,能不能谈谈您的了解?国产化背景对FISCO BCOS会有哪些作用? 受大局势影响,国产化代替越发紧迫、重要。从咱们从业者来说,在过来,国内IT底层规范、架构、生态等大多数是由国外IT巨头制订。但如果咱们本人把握核心技术,制订规范和规定,不仅对从业者更敌对,也会更有利于国产技术和利用的倒退。 在区块链这个畛域,FISCO BCOS在国产化层面曾经很超前了。FISCO BCOS平台的核心技术组件从国密算法、通信协议、共识算法到下层利用都是国产化的。从开源的代码能一眼看到有没有应用国外的技术和服务器,这在国产化的背景下带来了很大的便捷,将来会迎来更多的关注和应用。 愿我学习中遇到的艰难,后学者不再遇到 6、您奉献了很多代码给社区,第一次提交的pr是什么,提交时情绪如何? 第一次提交pr,是本人开发的一份智能合约,基于solidity语言编写。过后情绪是很冲动的,因为毕竟智能合约是一门新技术,也付出了很多工夫和心血来自学。 这份合约是基于Java Web MVC分层架构设计的,所以不确定过后这样设计合约合不合理,就有些恐慌。而后又想到本人的合约是否合乎开发标准,有没有语法上的谬误,会不会被社区的开发者耻笑等等,到起初甚至有种想要把提交的代码撤回的激动。还好最初针对这份合约做了很多检查和测试,感觉无误后才释怀下来。 7、您是如何了解开源精力?从用户到贡献者再到MVP,在这些身份的转变中,您的感触是怎么样的? 区块链技术天生具备传递信赖的特色,就决定了它是更适宜开源的。在对共享内容一直反馈、批改的过程中,咱们得以充沛的学习、参加,对开发者来说是一种正向的激励。 我认为MVP能够激励更多的学习者退出到社区,晋升社区的活跃度。这也是社区对我最大的扭转,退出社区之前,我总是一个人单独学习,当初变成一群人独特学习,共同进步。因为没有人能做到八面玲珑,你不懂的或者是他人的强项。大家能够做到在学习过程中独特解决问题,达到真正的常识共享。 我参加开源建设的初衷,也是心愿我学习中遇到的艰难,后学者不再遇到。 8、您在社区社群中很沉闷,是性情使然吗?有没有在社区中交到新的敌人? 其实我的性情比拟孤僻,有时候能好几天不愿谈话,但我还是很违心为社区里的学习者解决我遇到过的问题,算是一种教训传递。 之前咱们做开发不太波及运维的工作,所以我在部署区块链集群不是很纯熟。但区块链技术中开发和运维工作是交融在一起的,于是我退出了FISCO BCOS自动化工具研发SIG小组,想学习下自动化部署方面的技术。在这个过程中,我意识了小组组长李海滨老师,他运维方面的技术十分好。起初,我加入2021年度金链盟生态大会见到了他,谈了很多对于区块链运维方面的数据问题,他十分激情地和我探讨,让我感觉很亲切。 9、近几年“35岁危机”的话题甚嚣尘上,您感觉程序员会有这种危机吗?如果有应该怎么应答? 怎么应答这种危机,其实我也不晓得。然而我就是因为“35岁危机”,才想着把区块链技术学好,多门技术多条路。目前,市场上的区块链开发者还不多,区块链也是刚刚起步,不论你是20岁,还是30岁,大家终点都是一样的,只有技术够好,就能找到好工作。 做技术须要虚浮走好每一步,把根底打扎实,能多学一门语言就多学一门,要学透,技多不压身。同时要理解市场上的技术走向,尤其是最新的、最热的,要一直学习。 最初想说的是在30岁之前,肯定要做好两件事:好好工作、认真存钱。 开源社区成立以来,吸引汇聚了许多酷爱分享、交换的技术爱好者。为感激大家一路以来对FISCO BCOS的反对与奉献,社区凋谢FISCO BCOS MVP认定,以激励为开源社区奉献高质量技术内容的FISCO BCOS意见先锋与意见首领。 ...

June 2, 2022 · 1 min · jiezi

关于mvp:对话MVP-清华博士马福辰希望成为社区和生态发展强有力的助攻

开源社区成立以来,吸引汇聚了许多酷爱分享、交换的技术爱好者。为感激大家一路以来对FISCO BCOS的反对与奉献,社区凋谢FISCO BCOS MVP认定,以激励为开源社区奉献高质量技术内容的FISCO BCOS意见先锋与意见首领。自启动以来,社区已认定26名MVP,涵盖文化版权、智能建造、供应链治理、物联网等多个领域专家。社区的倒退离不开每一位开发者,咱们期待更多畛域的搭档一起融合思维、碰撞观点、互通技术,独特推动产业区块链蓬勃发展。2022年上半年FISCO BCOS MVP认定通道已凋谢,欢送大家点击【链接】踊跃申请。同时,为了让大家更好地理解、意识MVP,社区推出了《对话MVP》栏目,从问答中带大家领略MVP在区块链畛域的所感所知所悟。本期《对话MVP》,清华大学软件学院在读博士马福辰将为大家分享他参加社区共建4年以来的成长与变质。在这期间,他冲破迷茫,与团队协力开发了面向Solidity合约的平安剖析工具SCStudio,并以开源模式奉献给社区。该工具帮忙不少开发者检测安全漏洞,晋升了区块链利用的安全性。心愿他的经验,能为社区泛滥高校学子提供一些参考,一起来理解他与FISCO BCOS的故事吧。 以下为马福辰访谈实录: 开源社区的陪伴,动摇了钻研区块链的信心1.在国内区块链刚衰亡之际,您投身于区块链与开源技术的契机是什么?为什么最终抉择区块链作为本人的钻研方向?我是在2018年理解到区块链的,契机是加入了金链盟中国区块链利用大赛,那是我第一次接触FISCO BCOS,接触联盟链。过后我跟组里的同学一起设计了一款区块链跨层的平安保障系统,对智能合约和虚拟机层面的破绽进行开掘和检测。参赛过程中,我看见了许多基于FISCO BCOS的落地利用,比方在司法仲裁、供应链金融等畛域,都获得了十分好的落地成绩,从那儿当前我开始关注联盟链的倒退,并抉择区块链作为本人钻研方向。区块链令我着迷的中央在于,它在某种程度上是互联网和计算机行业的将来。区块链的实质是为了解决信赖问题,信赖对各行各业都十分重要,依附区块链不可篡改和多中心化的个性,升高各方信赖的难度。作为将来网络的基础设施,我也置信区块链技术会一直成熟,一直为社会发明更大的价值。另外,最终抉择这个方向也要感激我的领导老师姜宇老师,过后组内没有人钻研区块链相干方向,姜老师很激励和反对咱们在区块链畛域进行摸索,这也动摇了我的信心。 2. 钻研区块链期间,您认为最有成就感的事件是什么? 最有成就感的事件有几个,让我印象最粗浅的是2018年的金链盟全国区块链利用大赛,那次咱们团队进入了全国十强,在参赛过程中意识了很多区块链行业的优良从业者,学习到了很多。第二个事件是入选了FISCO BCOS 2021年度MVP,我感觉来自开源社区的激励和认可对我的激励很大。最初就是最近在平台上找到了一些有价值的安全漏洞,失去了社区专家的认可。总的来说,近些年与开源社区的互动让我播种了很多,也愈发动摇了我抉择区块链的信念。 3. 下面提到,参赛期间您从区块链优良从业者身上学到了很多,具体哪些地方让您感觉播种颇丰或感悟较深? 我之前在区块链行业接触到的钻研都次要跟平安相干,参赛之前我和同学更关注的是技术实现层面的好坏,代码的品质等,对区块链利用都不是很理解。那次大赛中,让我感触最深的就是理解到区块链应该怎么真正地用起来,过后大赛前几名的团队都在利用区块链技术去做各种各样的利用落地,比方让我印象比拟深的是在司法畛域,利用区块链技术能够让跨省跨地区司法仲裁中一些很繁琐的程序变得很不便。从那以后,我就越来越关注国内以及国外一些区块链具体利用场景和利用落地的案例,也极大地丰盛了我集体的视线。 “做科研不能想当然,多听产业人士怎么说”4. 在区块链钻研摸索过程中,您遇到过哪些艰难和挑战,如何解决的? 总体来说,得益于学校导师及开源社区的反对,整体上比较顺利,遇到的次要艰难是在论文投稿方面。有一段时间投递的论文常常被拒,有时一篇论文大略会被拒七八次,这让我一度陷入自我狐疑,狐疑本人做的事件是否有价值。比方做智能合约破绽扫描工具这个idea,咱们外部小组也探讨过,但过后感觉如同没啥用就放弃了。起初通过与社区接触,理解到反对单合约的智能合约破绽扫描工具,在目前联盟链以及公链中常见的跨合约场景下,可能会存在破绽被暗藏起来的问题。咱们在社区的帮忙下,拿到了一些目前产业界开源的、波及跨合约场景的合约案例,而后发现市面上的破绽扫描产品的确不能齐全监测到破绽。有了确切方向后,咱们开始深入研究解决这个问题,因为之前咱们的钻研没有利用在实在的场景中,而学术畛域也很关注钻研的理论利用价值。起初经过努力,基于这个案例的钻研造成了很好的学术成绩输入,我本人也度过了迷茫阶段。这件事对我的触动很深,做科研不能想当然,有的时候一个计划的否决和确定都十分须要多方的沟通和探讨,尤其须要多听听产业界人士怎么说,这也对我将来的科研态度和方向产生很大的影响:今后做任何研究课题都会尝试先听产业界专家怎么评估这件事。 5. 您和您的团队向社区奉献了Solidity合约平安剖析工具SCStudio,请具体说说如何去做这件事件,有什么教训能够分享。 SCStudio是一个针对Solidity合约的平安剖析工具,可帮忙开发者在开发阶段检测出安全漏洞。其实SCStudio我的项目就是在社区开发者的倡议下开始的,咱们在理解到业界的需要之后,综合调研了曾经存在的产品,而后去针对性地进行钻研和开发。这让咱们的钻研少走许多弯路,同时这种更贴近工业界的钻研也失去了学术界的认可。教训次要有两个,首先是听取社区各界的意见。我认为开源社区实质上是一个多中心化的组织,就像一个区块链零碎一样,每个人畅所欲言,达成大多数的共识,能力让社区朝着衰弱的状态倒退;另一个关键点是学习和察看其他人是怎么做的。SCStudio代码仓库地址: https://github.com/FISCO-BCOS... 6. 您退出了社区CTSC-SIG小组(智能合约编译技术兴趣小组),能分享下您退出小组的初衷及参加小组共建的感想吗? 吸引我退出这个兴趣小组的次要起因是小组设立的初衷。CTSC-SIG小组成立的次要目标就是帮忙开发人员在应用FISCO BCOS做代码开发的过程中体验更“丝滑”。这个“丝滑”是多个方面的,包含合约自身的一些个性、代码自身的品质以及刚入门的开发者上手的易用性水平等。平时咱们小组次要会围绕FISCO BCOS开发易用、平安、高效的智能合约编程语言及周边工具,比方继续迭代智能合约编程语言Liquid,监控和扫描代码品质等,心愿能助力开发者疾速上手。 在参加建设CTSC-SIG小组的过程中,我感触最深的就是小组成员会常常交换意见,大家会对平台将来的设计提出很多idea,并展开讨论和剖析,这些倡议也给平台将来的开发方向提供了很好的参考。 MVP,社区和生态倒退的 “助攻者” 7. 您如何了解MVP在社区中的角色? MVP这个词在体育运动和电子竞技中经常出现。我集体很喜爱看足球比赛,在绿茵场上,一场较量的MVP有两种。第一种是某位球员进球特地多,比方姆巴佩演出帽子戏法,拿到了较量的MVP。另一种是某位球员,尽管进球不如他人多,然而助攻十分多,比方梅西在美洲杯上5次助攻入选赛事MVP。我感觉在开源社区也是一样,MVP的作用除了为开源社区奉献很多的落地利用外,也能够为这些利用提供帮忙和保障。我十分荣幸能被社区选为2021年的MVP,我感觉本人是善于并热衷于“助攻”的那种。咱们小组始终以来致力于保障工业零碎的平安,我和我的同学始终心愿能够为区块链的应用层和底层的代码平安保驾护航,心愿咱们的工作能够“助攻”越来越多的区块链利用落地,“助攻”平台的 研发和建设,“助攻”社区的衰弱倒退。8. 将来您冀望在社区持续做哪些“助攻”的事件? 当初次要做的事件是针对联盟链的共识协定,监测它在具体实际中是否会忽略,并优化代码上的小bug,在这些方面把共识的平安保障起来。目前也发现了一些的确存在的问题并上报给社区,失去了社区的回复和必定。将来还是心愿能从安全性的角度持续为FISCO BCOS平台保驾护航,帮忙开发者在区块链落地利用的时候免受安全性的困扰。同时,也心愿能够在社区跟其余成员多进行互动分享。技术布道当初还是一件十分重要的事件,心愿尽本人所能,把本人获取的新技术、新资讯分享到社区,让更多小伙伴青睐并理解区块链技术。 9. 您感觉高校学子参加开源社区有什么用? 不论是对刚入门的高校学子,还是在平台上深耕了很久、绝对资深的研究者来说,社区带来的帮忙都是微小的。一个最直观的例子就是,在FISCO BCOS平台上检测出破绽之后,个别不超过24小时就会失去回复或修复,而在其余平台可能一个月甚至两三个月都没有人回复。所以社区生态和气氛真的很重要:一方面社区能够帮忙测验你的科研成果,另外一方面发现问题后失去及时疾速地反馈,也是一种很有价值的正向激励,这也是我在联盟链受害良多的中央。 10. 谈谈您对区块链行业倒退的意识,将来期望? 我集体认为区块链行业的倒退还处于晚期阶段,目前还面临着一些问题。首先是国内大多数人对区块链不足足够的意识。作为从业者,咱们应该承当区块链技术布道的责任,让公众看到它的真正价值。此外,区块链须要一款杀手级to C利用来真正点燃,目前的利用以to B为主。从业者须要继续思考,从公众层面区块链能带来的最间接扭转是什么。目前我也看了一些很棒的区块链利用。比方基于FISCO BCOS研发,并采纳微众区块链开源技术粤澳衰弱码互认零碎,它能够实现粤澳两地衰弱码互认,帮忙两地人员疾速通关。我也心愿前面能涌现出更多深入人心的区块链利用,让区块链技术真正走进公众生存。 理解更多干货内容,请关注FISCO BCOS开源社区公众号,拜访FISCO BCOS代码仓库可下载我的项目所有源代码:https://github.com/FISCO-BCOS/FISCO-BCOS,欢送点击页面右上角star☆珍藏,获取最新版本。

May 10, 2022 · 1 min · jiezi

关于mvp:黄继佳利用-MVP-模型实现开发者增长-DEV-Together-2021-中国开发者生态峰会

内容起源:2021 年 6 月 5 日,由 SegmentFault 思否主办的 2021 中国开发者生态峰会圆满闭幕。会上,Google 平台及生态事业群开发者市场负责人发表了主题为《利用 MVP 模型实现开发者增长》的演讲。 分享嘉宾:黄继佳,Google 平台及生态事业群开发者市场负责人 速记整顿及公布:SegmentFault 思否编辑部 大家下午好,很快乐听到大家的分享。我是来自 Google 的黄继佳,很开心有机会和所有做开发者生态的同学汇聚一堂。明天我分享的话题是《利用 MVP 办法实现开发者用户增长》。在梁迪老师前面谈 MVP 略微有点缓和,然而我谈的 MVP 不是微软最有价值专家,而是最小可行性产品。 我先简略介绍一下本人。其实开发者、产品、技术布道、市场或经营这几个工作我应该算都有波及,在三家公司:Google、微软和青檬网络,我心愿把之前工作中的所得所想所感和大家交换探讨。咱们毕竟是 MVP 的话题,这个话题其实也会逐渐地迭代和变动。 我要讲的内容次要分为五个方面,基本上就是从开发者生态、开发者增长面临的挑战、利用 MVP 的办法以及怎么避坑,还有在路上的一些感悟。 构建开发者生态的挑战首先,我想和大家分享一下开发者生态。高老板晚上也分享了一个视角,就是从团队的角度。咱们其实有很多视角,如开发者关系、开发者市场、团队的形成等等。我要介绍的是开发者应用产品的视角。 最右边是开发者工具,也就是开发者用这些工具来构建软件。大家能够先把开发者生态放到软件的边界里,大家的产品是软件,而咱们有开发工具。第二是开发者服务,即开发者软件产品里蕴含的服务,这外面包含阿里云,包含一些线上服务的厂商。第三就是开放平台,开发者的软件在哪里公布、在哪里供用户应用,这是开放平台。最初就是利用商店,可能帮忙开发者很容易地变现,把软件和利用散发到最终用户进行测试。这个是开发者软件产品面向生态的四个方向。 开发者增长的挑战那最大的挑战是什么呢?可能每一个维度都有本人的挑战。最对立的挑战就是开发者增长,大家也能够从明天拿到的调研报告中看到这方面生态的最大挑战是开发者增长。所以明天,我想分享一下在开发者增长这块咱们面临的挑战和应答办法。 开发者增长面临什么样的挑战呢?咱们能够总结为三个局部。 第一个,技术社区的碎片化。方才在晋宇的分享中咱们也看到了,各种各样的技术社区一直倒退,也有不同的技术产品供开发者应用。所以这是第一个问题,如何让层出不穷的技术被开发者看到? 第二个,开发者是人造地拥护被营销的。他不心愿本人是被营销的对象,他要抉择信赖的产品或者服务去应用。 第三是不可持续增长。开发者可能很快用到了你的产品或服务,然而如果因为各种起因没有给开发者做好服务,他可能就会放弃应用你的产品或服务。 这就是咱们看到的各种各样的挑战,这些挑战也在每时每刻产生着变动,如何应答这些一直变动的挑战呢? 利用 MVP 办法实现开发者增长 做产品或者做开发的同学可能会十分相熟这个概念。2011 年,“最小可行性产品”概念诞生,即通过 MVP 的办法试错、迭代,来一直满足市场需求,并且疾速地、廉价地失败,这是最重要的。我想这个和梁迪老师方才分享的成长心态(growth mindset)是一样的。 当初很多企业在打磨产品的时候,利用 MVP 办法迭代推向市场。那我有个思考,就是能不能用 MVP 的办法迭代开发者增长引擎,让开发者增长做得更有效率,更合乎市场的挑战,进而满足咱们的商业指标。所以 MVP 能够解决两个问题,除了微软最有价值专家之外,还有其余两个问题,咱们看看是不是能解决。第一个是开发者体验。如果开发者的体验不好,任何产品和服务都无从谈起,所以咱们首先要看是否用 MVP 解决开发者体验问题。第二个是团队成长。咱们每一个我的项目的执行、每一个开发者的触达都须要团队的工作、团队的合作,那咱们如何用 MVP 的办法来迭代团队,让团队成长,这也十分重要,也是在座每一个人可能成长的十分重要的一块。所以我想从这两个方面和大家分享一下我的思考。 首先来看开发者体验。开发者体验就是面向开发者的体验,咱们给开发者提供的服务、工具、内容须要有围绕开发者的循环或闭环。 其中第一块是觉察(awareness)。要让开发者晓得有这么多抉择,如果他基本都没有看到你,那前面的介绍也好,让他应用也好,都是无从谈起的。第二个是采纳(adoption),他要能真正用到生产环境里,这十分重要。第三个是拥戴(advocacy),他可能像相似 MVP 一样去流传,像微软最有价值专家一样去流传,去拥戴这个产品和服务。这三个蓝色的圆圈十分重要,是开发者体验晋升的北极星,也是咱们作为经营团队、开发者服务团队须要去关注的。 对于觉察,咱们最须要关注的就是互动。开发者和你是不是有互动,这是北极星。开发者是否采纳了你的 SDK、服务,最重要的北极星是什么呢?是份额,就是在市场上同类服务里你的份额是多少。我想每一个团队的成员都须要去思考这个问题:份额是怎么样的?第三,就是拥戴,让开发者可能拥戴。什么样的状况开发者才可能拥戴呢?肯定是开发者赚到钱了,因为开发者作为一个人也好一群人也好,他的商业逻辑、思考逻辑其实也是企业的逻辑——他肯定要可能赚到钱,而后整个营收方面,要始终继续一直地有支出。如果你公布的货色,开发者始终在赔钱,那他不可能拥戴你,或者只是短期的拥戴。这三个是我认为十分重要的北极星。 ...

June 25, 2021 · 1 min · jiezi

Android 架构优化~MVP 架构改造

以前我写过一篇关于 MVP 架构的文章《Android架构—MVP架构在Android中的实践》。随着业务的复杂化,我们会发现传统的 MVP 架构依然会有很多问题。下面我将和大家一起探讨下在使用 MVP 架构过程中遇到的比较大的问题以及解决方案。随着业务逻辑复杂化,我们可能会遇到下面几个比较大的问题:Presenter 中充斥着非常多的业务回调方法,Presenter 非常臃肿顶层业务逻辑无法重用Presenter 臃肿的问题Prenseter 臃肿的表现形式有两种:第一种:正如我们上面说的 由于 Presenter 有非常多的 业务回调方法,比如某个业务需要网络请求,那么成功后怎么处理,对应一个方法,失败了怎么处理,对应一个方法,这样的话基本上一个网络请求至少对应两个方法。如果某个界面业务比较复杂,请求的接口比较多的话,这样的业务回调方法也就比较多第二种:除了业务的回调方法,可能还存在一些业务回调方法的 辅助方法 。何谓 辅助方法? 就是为了实现业务回调方法而衍生出的一些方法。比如,某个接口请求成功后,逻辑比较多,可能我们会把某段内聚强的逻辑单独拿出来放在一个新方法里供业务回调方法调用。所以 Presenter 会有很多 业务回调方法 和它衍生的 辅助方法。我一般将业务回调方法命名为:XXXSuccess() 和 XXXFailed(),XXXSuccess() 对应业务请求成功对应的方法, XXXFailed() 对应业务请求失败的方法。这样命名做有两个好处:一是 后期维护的时候我们只需要查询 Success 和 Failed 相关的方法即可,便于后期修改维护。二是 业务回调方法 和 辅助方法 从名字上就可以区分。 《Android架构—MVP架构在Android中的实践》 也有关于命名这方面的叙述,需要的可以去看下。Presenter 臃肿的问题,导致 Presenter 维护成本变高,可读性变差。因为充斥各种业务回调方法,和一些衍生的辅助方法 。如果用普通的 MVP 架构来实现,代码 “糟糕” 地自己都不愿意维护了业务逻辑无法重用问题这个问题不太好描述。为了更好的描述这个问题,我们先来看下我对业务的划分:简单业务:简单业务只由一个 “操作” 组成。比如网络请求、数据库操作等复杂业务 :一个复杂业务由多个简单业务组成,它像一个业务链。比如一个复杂业务需要多个网络请求然后再把数据呈现给用户。不管是 简单业务 还是 复杂业务 我们都是放到 Presenter 中。对于 复杂业务,尽管可能调用了多个接口,我们可以使用 RxJava 将这些请求通过链式的方式进行组装, 避免 Callback Hell举一个 复杂业务 的例子:// 业务接口一:根据用户 id 获取用户的基本信息userApi.fetchUserInfo(“userId”) .flatMap(new Func1<User, Observable<User>>() { @Override public Observable<User> call(User user) { // 业务接口二:获取用户的好友列表 return fetchFriendsInfo(user); } }) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<User>() { @Override public void call(User user) { // 在界面展示 用户的基本信息 和 用户的好友列表 mView.loadUserSuccess(user); } }, new Action1<Throwable>() { @Override public void call(Throwable throwable) { throwable.printStackTrace(); // 在界面提示 对应的错误提示 mView.loadUserFailed(); } });上面的 复杂业务逻辑 的例子主要逻辑为:根据用户 id 获取用户 基本信息,成功后获取用户的 好友列表 ,最后将这些信息展示在界面上。为了实现这个业务逻辑,请求了两个网络接口。但是,上面的业务逻辑如果外在 Presenter 中是无法复用的。因为 MVP 中的 View 和 Presenter 是一一对应的关系假设 A 界面对应的 Presenter 中实现了一个复杂的业务链, 此时 B 页面也需要这个 复杂业务链,B 的 Presenter 又无法直接使用 A 界面的 Presenter, 这就出现业务无法重用的问题,B 界面的 Presenter 还得要把业务链重新写一遍,然后对成功失败的回调进行处理。实际开发需要业务重用的案例案例一需求描述:扫二维码、条形码,把商品直接接入购物车在手机上实现扫一扫二维码、条形码,直接把商品加入购物车,这个功能已经实现。 但是并不是所有的 Android 设备上都会有摄像头,比如一些定制的硬件上可能就没有 ,不过会有外接设备(扫码枪) 来支持扫一扫所以需要为有扫码枪的系统上支持 扫二维码、条形码,将商品加入购物车 的功能此时也会出现需要重用业务逻辑的情况。业务流程以及业务重用的情况,如下图所示:一般来说我们都会将手机摄像头的扫一扫功能,封装到一个 Activity 中,比如:BaseScanActivity。 假设手机设备上实现的这个业务逻辑的类名为 GoodsScanActivity 该类继承了 BaseScanActivity 现在需要针对扫码枪的设备也实现相同的功能, 但是该业务逻辑 在 GoodsScanActivity 对应的 Presenter 中, 该业务逻辑很难重用案例二需求描述:我们的 App 是 to B 的,用户如果有多个店铺会用到 切换店铺 的功能:进入 店铺列表界 面,点击某个店铺,然后调用 切店接口,成功后调用 初始化接口这个功能已经在用户 `我的` 模块中实现了:我的店铺列表 –> 切店最近需要开发一个 开店功能,这个功能以前是在其他 App 中的,开店成功后也需要 切换店铺这个时候也会出现需要重用业务逻辑的情况。业务流程以及业务重用的情况,如下图所示:案例三比如某些硬件内置 Android 系统, 但是弱化屏幕展示功能,或者根本就没有屏幕。这个时候我们就不能直接使用以前的 Module 了对于 复杂的业务链,我们也无法重用。 这个时候出现业务需要重用的情况会更多解决方案通过上面案例的分析,我们发现随着业务不断的复杂化,对复杂业务的重用性变得更加紧迫为了能够将复杂业务重用,我们将其抽取到新的一层中:Engine 层,Presenter 不直接和 Model 交互,改成和 Engine 层交互, 再由 Engine 层和 Model 层进行交互下面是常规的 MVP 和我们基于MVP改造后的架构对比图:使用基于MVP改造的架构来优化上面的案例一以第一个业务逻辑重用的案例,我们来实现下:1) Engine 层,省略其实现类:interface IMenuScanGunEngine : IEngine { //二维码 fun getMenuByUrl(param: MenuScanGunEngine.Param, logic: IMenuByUrlLogic?) //条形码 fun getMenuByCode(param: MenuScanGunEngine.Param, logic: IMenuByCodeLogic?)}getMenuByUrl() 与之对应的逻辑回调:interface IMenuByUrlLogic { fun scanFailed(errorCode: String?, errorMessage: String?) fun gotoComboMenuDetail(menuId: String?, baseMenuVo: BaseMenuVo?) fun gotoNormalMenuDetail(baseMenuVo: BaseMenuVo?) fun menuTookOff() fun menuSoldOut() fun addCartSuccess(menuName: String?, dinningTableVo: DinningTableVo?)}getMenuByCode() 与之对应的逻辑回调interface IMenuByCodeLogic : IMenuByUrlLogic { fun showMenuList(list: ArrayList<BoMenu>)}2) View 层:在 View 层实现所有的业务回调//View 继承了上面两个业务回调接口interface View : BaseView<Presenter>, IMenuByCodeLogic, IMenuByUrlLogic{ }Activity/Fragment 实现业务回调方法,也就是 View 层的实现类,省略具体的实现逻辑:class MenuScanGunActivity:MenuScanGunContract.View{ //扫码失败 fun scanFailed(errorCode: String?, errorMessage: String?){ //ignore… } //进入套餐详情 fun gotoComboMenuDetail(menuId: String?, baseMenuVo: BaseMenuVo?){ //ignore… } //进入普通商品详情 fun gotoNormalMenuDetail(baseMenuVo: BaseMenuVo?){ //ignore… } //商品下架 fun menuTookOff(){ //ignore… } //商品售罄 fun menuSoldOut(){ //ignore… } //加入购物车成功 fun addCartSuccess(menuName: String?, dinningTableVo: DinningTableVo?){ //ignore… } //一个码对应多个商品,展示一个列表让用户选择 fun showMenuList(list: ArrayList<BoMenu>){ //ignore… }}3) Presenter 层:interface Presenter : BasePresenter{ fun processResultCode(resultCode: String?) fun processMenuDetail(menuId: String)}class MenuScanGunPresenter(private var mOrderId: String?, private var mSeatCode: String?, private var mView: MenuScanGunContract.View?) : MenuScanGunContract.Presenter { private val mEngine = MenuScanGunEngine() override fun processResultCode(resultCode: String?) { if (mEngine.isURL(resultCode)) { mEngine.getMenuByUrl(createParam(resultCode), mView) } else { mEngine.getMenuByCode(createParam(resultCode), mView) } } override fun processMenuDetail(menuId: String) { mEngine.handleMenuDetail(menuId, mView, createParam(menuId = menuId)) } private fun createParam(readCode: String? = null, menuId: String? = null): MenuScanGunEngine.Param { return MenuScanGunEngine.Param().apply { this.readCode = readCode this.menuId = menuId this.orderId = mOrderId this.seatCode = mSeatCode } } override fun subscribe() { } override fun unsubscribe() { mView = null mEngine.destroy() }}通过这个例子我们知道,如果要复用业务逻辑只需要在 Presenter 中使用需要的 Engine 即可。简单业务是否需要 Engine 层上面列举的三个案例,都是 复杂业务 (复杂业务可能是接口请求、数据库操作的组合),但是在项目中同样会存在很多的 简单业务 (一个网络请求或者数据库操作)在这种情况下,我们是否还需要 Engine 层呢?如果再加上 Engine 是否复杂了一点呢?笔者觉得还是有加上 Engine 层的必要的:在业务不断迭代的过程中,都是由简单变得复杂Engine 层封装 简单业务 ,可以更灵活的处理由 简单业务 产生的业务分支下面我们再举一个实际的案例:上面的简单的业务:查询桌位状态,成功后根据不同的状态处理不同的逻辑上面这个业务逻辑在 桌位列表 页用到了,在 订单搜索 页也用到了,我们需要在两个不同的地方进行 status 判断,然后走不同的逻辑分支如果我们在 Engine 中在封装一层,就不需要在多个地方进行 if 判断了,这些逻辑判断都可以写在 Engine 中,然后对外暴露几个需要关心的业务接口方法即可Engine 层 和 Repository 的区别Google 在 android-architecture 中的 MVP 架构中,会把 Model 中的 DataSource 在抽象一层 Repository ,然后 Presenter 调用 Repository ,如下所示:View -> Presenter -> Repository -> RemoteDataSource/LocalDataSource读者可能会问,你这个 Engine 和这个 Repository 不差不多吗?其实不一样! Repository 更多的是组合多个 DataSource,比如是操作本地数据源,还是调用远程接口,充当的是一个 底层数据 提供者的角色而我们这个 Engine 层主要是对顶层业务的封装,而不是对数据的封装另外,在实际的开发过程中,个人觉得 Repository 的作用并不是很大。 当然每个 App 的性质不一样,有些 App 可能对本地数据操作比较多,对 Model 层的依赖比较大如果本地数据操作比较多,其实都可以放到 Engine 层在处理,根据业务逻辑的不同,对本地 Dao 层 和 远程数据层进行组合即可如果不需要 Repository 层的话,那么我们最终的流程是这样的:View -> Presenter -> Engine -> RemoteDataSource/LocalDataSource下面是我的公众号,干货文章不错过,有需要的可以关注下,有任何问题可以联系我:总结基于 MVP 架构基础上,我们在 Presenter 和 Model 之间加了一个 Engine 层,使得业务逻辑变得可重用,避免模板代码和逻辑的不一致性问题同时也解决 Presenter 层代码过于臃肿的问题View 层的业务回调方法也更加清晰,不同的业务回调,放在不同接口里,也保证了业务回调方法命名的统一当然,Engine 层只是笔者取的名字,也可以叫做 Business 层等不管任何架构,在业务不断发展的过程中,可能都需要在某个架构基础上,根据我们的实际业务情况,来做相应的改造和优化。联系我下面是我的公众号,干货文章不错过,有需要的可以关注下,有任何问题可以联系我: ...

March 1, 2019 · 3 min · jiezi

程序员必备技能-科学砍需求

作为码农在电商圈、O2O、互金行业和产品需求纠缠了多年,做过一些好的产品需求,也做过很多失败的产品需求,好的产品需求即使不成也未尝不是一种探索尝试,结果应该是让人有所收获的。好的产品逻辑清晰,产品价值明确,有效的解决了一部分问题,经的起团队各方的挑战。反之产品经理需求没想好,边界条件没想清楚,最后需求被砍,不光程序员时间白白浪费,配套的设计资源、测试资源甚至运营资源都要打水漂。砍需求如果没有一套可参考的标准,双方“讨价还价”可能就显得失去了正义的立场。MVPMVP就是一种科学砍需求的方法。我们先看一下什么是MVP。MVP(minimum viable product,最小化可行产品) 概念最早由硅谷创业家Eric Rise提出,刊载于哈弗商业评论,并有出版物《精益创业》-书中提出了“精益创业”(Lean Startup)的理念,其核心思想是,开发产品时先做出一个简单的原型——最小化可行产品(Minimum Viable Product, MVP),快速地构建出符合产品预期功能的最小功能集合,这个最小集合所包含的功能足以满足产品部署的要求并能够检验有关客户与产品交互的关键假设。然后通过测试并收集用户的反馈,快速迭代,不断修正产品,最终适应市场的需求。MVP的目的——更快的接触客户按照常规的开发方式,从调研、到设计、到开发再到推向市场,会是一个漫长的过程,而且很难有人会保证成功率。但当换一种方式,以MVP进行小样调研,快速进入市场、接触客户并得到反馈。透过反馈不断修改原型,并进行不断地的迭代开发,极大减少了试错成本。MVP非常适合互联网产品,下面我分析一下常见的问题产品需求,如何制定一套MVP砍需求的方法来应对。找出问题如果PM有以下情节的可能会引起程序员的不适,牙根直发麻,手指骨节痒,想揍他一顿先做出来看看吧我就要这种效果,怎么实现是你的问题这应该很简单吧,不就是XXX,然后XXX吗这个需求,先这样这样,再那样那样,用XX技术很快就搞定了你就说能不能做吧我有一个绝妙的idea,什么都准备好了,就差一个写代码的了这个需求老大已经同意了,你照着做就是了以上情节只要出现3条及以上,程序员不打你PM,那你真的很幸运。经典案例:这个案例完美的承包了上面所说的7中情节,出现打架情况实属正常。面对这种极品PM,我想不出更好的反击方式。问题一:需求不清首先产品经理应当把需求讲清楚,通过需求评审会让与会者清晰的了解需求是什么,需求从哪里来,对现有业务有什么影响,预期收益是什么;让技术及测试对产品方案有详细的了解,以便后续开发更高效,没有谁愿意在后续的编写测试用例及开发阶段再去反复沟通确认,毕竟那是非常低效的做法,当然,特殊情况除外;让与会者清晰的知道自己在整个方案落地过程中处于什么位置,职责是什么,需要做什么,准备什么,提供什么帮助,对各自负责部分的实现难度及排期有一定的心理预期;评估产品方案的技术难度及实现周期,一期实现,还是分期实现,投入产出比怎么样?毕竟互联网产品讲究小步快跑,快速验证迭代,怎么样权衡产品设计(用户体验),技术成本以及商业利益是产品经理主要工作之一。问题二:倒排的项目“这个需求是XX领导主抓的,属于公司战略性的项目”通常听到这句话,内心是狂躁的,尼玛又拿老板压迫劳动人民。首先要承认通常情况下高层眼界比较开阔,未必所有的事情是所有人都理解才能开始做。试错机会,如果项目最终失败了,最重要的是收获了结果,但风险我要提前讲出来。跟自己的上级沟通项目细节,让老板帮你背书工作。如果一个公司全部都是这种需求,要么就是这家公司处在特殊时期,要么就赶紧闪人吧问题三:互相看不上程序员和产品经理之间的矛盾,主要原因无非就在两方经常有矛盾出现,而矛盾出现显然是因为双方一边是需求提供方,一边是需求实现方。通常发生的情况是,产品经理不懂技术规则乱下需求,而程序员自恃技术在手,不尊重产品经理的创作用心,双方自然互看不爽,都觉得对方没资格跟自己合作。另一方面,需要投入的资源和发布时间是固定的,所以产品经理和程序员只能在“砍功能”、“降低质量要求”和“程序员加班加到死”这三个选择上“相爱相杀”了。研发如何思考最小可行性产品方案1.owner意识不管你负责整个产品,还是某个方向,甚至一个小活动,你都必须把自己看成这个事的owner,为结果负责。关心自己的产品,是否对公司有价值,是否对用户有价值、是否对合作方有价值。2.找到最小可行的产品需求就拿陌陌APP来做一个分析需求的层次核心功能:陌生人之间的社交基本功能:短视频、直播、游戏、交友;通过人群聚类解决宅男宅女、缺少生活社交的一群人的社交问题用户期望功能:陌生男女由陌生到熟悉的过程超出预期的功能:留言档(陌生人也可以留言),留言档只可以看最近的8条状态(保护了我自己的信息,却勾起了陌生人想要跟我交流的想法,留存了老用户,勾引来了新用户,并且还激励了活跃度)消息的读取状态(可以清晰的明白,我们发出的消息,对方有没有阅读了,凸显了我们发出消息的目的性), 隐身(关闭我们的距离,但是却可以让别人看到我是隐身状态,给我一个保护,给陌生人一个期待)潜在功能:社交+ 电商、游戏、O2O 这个就比较多了,这里不就列举了核心功能和基本功能就是这款APP的最小产品需求部分可行性产品的可行性,需要从三方面考虑:技术可行性、经济可行性和社会可行性。技术可行性:竞争对手功能比较,研究同行业有多少类似产品,有哪些功能、功能异同点。通过竞品分析可以了解对方技术特点、产品特点、发展空间、市场行情、用户喜爱程度及我们的突破点等信息。 易用性及用户使用门槛,产品的易用性,用户群体分析,产品是否会有使用难度。经济可行性:人力成本,产品从调研、分析、设计、开发、测试、运维等需要多少人力,多少人月,每个人月平均成本是多少。市场开拓、广告、运营成本,产品投放市场后的推广、营销方式,需要的推广、营销成本,广告成本等。社会可行性:道德方面、法律方面、社会方面,社会影响力,通过产品的推广,产品将会给公司带来哪些社会效益,增加多少社会影响力。最后才是找出产品需求和可行性的交集部分。小的产品需求要考虑的层面和这里所讲的可能差别比较大,这里只是抛砖引玉的梳理一下思路。3.对项目进度、项目质量负责上图是一个MVP的周期,有没有觉得似曾相识,没错MVP和敏捷开发有异曲同工的作用。向进度落后的项目中增加人手,只会使进度更加落后。——《人月神话》可见项目进度管理是多么的重要。需求过多造成开发周期过长,一定要果断的分阶段。大家都嗑过瓜子,嗑瓜子,因为是嗑一个,吃一个,反馈的周期很短,差不多两秒钟瓜子就能到嘴里了,所以不觉得累。而工作学习的反馈周期就很长了,你不知道你学的这个东西什么时候才有提高,什么时候才能派上用途。做一件事情,反馈的周期越短,越有可能上手。而一件大事情,我们也可以把它拆分成一个个小事情,然后给予每一个小事情一个短周期的反馈,这样我们做起来难度就小多了。我们的在校学习,因为距离实践太遥远,所以反馈周期太长,导致我们疲乏,不愿意迷茫的学习,凭着自律性去学习,导致学霸很少、学渣很多。判断好优先级、性价比、重要紧急程度,在项目初期打下一个基础,明确能做的部分和可能的风险,才有可能完成整个项目。4.总结复盘技术人员在团队中的价值除了技术层面还有综合能力方面的价值,尤其是软素质。能较好的完成任务,还要解决好各个环节的异常问题,只有技术是远远不够的。最核心的是自驱力,是一个人内在的东西。我们说一个人是不意愿成长,一个人是不是自律,指的就是他的自驱力,自驱力是一个人成长的源动力,自驱力好的人后面发展的潜力也会比较好。总结复盘的能力,项目上线后要及时关注数据,要和之前定下的指标去对应。对项目中产生的问题要及时的总结经验,复盘的目的是从之前的经历(可能是成功的经历,也可能是失败的经历)中总结可供指导后续工作的经验。一个人的能力就是这个人过去所有成功经历的总和。总结复盘的方式也多种多样,但万变不离其宗,主要还是围绕下面几个内容:目标回顾、进展评估、原因分析、经验总结。5.对自己负责一个产品设计的价值 = 全部TPU价值的加和,参与产品设计环节、体现自我价值。砍需求难免会遇到各种分歧,如何应对呢? 我总结有下面三个层次:信息对齐信息对称是一门很大的学问题,经济学家米尔利斯和维克里因研究这一理论而获诺贝尔奖。这是工作中最基本的部分,掌握更多的信息可以增加个人在职场中的价值壁垒,从而赢得更多的话语权。 要想保持自己的优势起码要做到以下3点:1.对自己的工作内容或者说业务很熟悉;2.善于总结所有的工作过程中的每一步;3.善于向过来人去请教经验.原则对齐如果不能通过信息对齐解决问题,那么就要考虑一下原则部分,公司使命、产品价值等等, 大家的目标应该都是想做出一款好的产品,只要基于这个原则去探讨问题就容易找到答案。利益对齐产品做得好了,大家都有功劳,该晋升的晋升,该分钱分钱,该团建团建。大家都知道跟你做事不吃亏,时间长了,靠谱的人会愿意持续跟你配合,你的口碑和职场信誉也就建立起来了。最好的方式是让参与的人有共同的利益,这事成了,大家都获利,而不只是单纯的部门之间工作配合或者帮忙而已。但如果总想着利用别人,占点便宜,也许一时可以,长久都是不奏效的。## 结束语本文从MVP方面进行了一次拓展式的思考,砍需求不是目的,做成好产品,体现个人价值,使自己的职场路径能更加稳健才是我想和大家探讨的问题。当然,MVP也并不适用于任何时候。MVP模式的问题在于,它并不总是开发颠覆性技术的最好办法。如果乔布斯发布的是最小可用的 iPhone,我们是不是会得出结论说大家更喜欢键盘?如果 Tesla(电动车)制造的是最小可用汽车,还有没有人去开它?因为与 web 服务不同,就好像不可能有人会花几万块买一辆最小可用的车一样,硬件不是免费的,而且不能快速方便更新。当然,这不是"最小可用"理念本身的问题,只是有些市场不合适。产品到底可以做到多好或者做到什么程度最好?答案或许永远也找不到。这种模式也不一定就是做大事情的最好方式。有些产品是小调,有的则是交响曲,而有时候你还是要先让音乐演奏起来。行文仓促,难免以偏概全,欢迎各位斧正!

January 20, 2019 · 1 min · jiezi

编程--基本概念

1.面向过程(PROCEDURE ORIENTED)1).具体化,流程化2).性能高3).算法+数据结构2.面向对象(OBJECT ORIENTED)(OO)1).模型化2).易维护,易复用,易扩展3.面向对象编程(OOP)1).继承 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性 A).重载(以统一的方法处理不同数据类型) 一个类的多态性表现 B).重写(方法重写) 父子类多态性体现2).封装(信息封装) 确保组件不会以不可预期的方式改变其它组件的内部状态3).多态 组件的引用和类集会涉及到其它不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型4.面向切面编程(ASPECT ORIENTED PAROGRAMMING)(AOP)1).切面 项目模块中某些业务逻辑(业务需要一定共性)2).解耦,提高程序可重用性,提高开发效率5.三层架构、MVC、MVP、MVVM1).三层架构–界面层(User Interface Layer-Business Logic Layer-Data access Layer 界面–业务逻辑–数据访问) A).界面层(UIL) 与用户交互 B).业务逻辑层(BLL) 实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等 C).数据访问层(DAL) 与数据库打交道。主要实现对数据的增、删、改、查 2).MVC(Model-View-Controller 模型–视图–控制器) A).Model(模型) 业务逻辑、业务模型、业务操作、数据模型。定义了数据修改和操作的业务规则 B).View (视图) UI组件。接收Controller数据,降Model转化成UI C).Controller(控制器) 处理流入请求 D).特点 View和Model分离(1978 Trygve Reenskaug) E).流程 View⇒Controller⇒Model⇔View 3).MVP(Model-View-Presenter MVC改良模式(View与Model完全解耦)) A).Model(模型) 业务逻辑、业务模型、业务操作、数据模型。定义了数据修改和操作的业务规则 B).View (视图) UI组件。接收Controller数据,降Model转化成UI C).Presenter(控制器) 处理View背后所有UI事件(一个Presenter只映射一个view) D).特点 View和Presenter双向交互(IBM的子公司Taligent提出) E).流程 View⇔Presenter⇔Model 4).MVVM(Model-View-View Model MVP中把P层削弱为VM层,部分简单的逻辑职责分给了View层) A).Model(模型) 业务逻辑、业务模型、业务操作、数据模型。定义了数据修改和操作的业务规则 B).View (视图) UI组件。接收Controller数据,降Model转化成UI C).View Model(控制器) 负责暴漏方法,命令,其他属性来操作View的状态,触发View自己的事件 D).特点 View和View Model双向数据绑定关系 E).流程 View⇒View Model⇔Model ...

December 26, 2018 · 1 min · jiezi