分类
大杂烩

让我们给业务做减法,给代码做减法。

最重要的写在开头:道术合一,知行合一

现在是讯息爆炸的时代,搜索引擎降低了学习的门槛,凡是都能从百度谷歌了解个一二。正因为这随手就来的一二,带来了想要的“结果”,让大家只掌握了术,但忽视了道。我认为“道术合一,知行合一”,术是千变万化的,但是道确实永远的,做减法就是我自己的代码之道。

可怕的观点:执行效率是第一

我经常听到一种观点,代码需要的是更快的执行效率。以及由这个观点产生的衍生观点,例如:设计模式并不重要等等,因为我们可以绕过框架或者现有的方法,用更“原生”的方式实现一样的结果,这样会运行的“更快”。这是一个可怕的观点,可怕就可怕在看上去没错。软件行业发展到现在已相当成熟,我们绝不能用单一指标衡量代码,如同我们不能用百公里加速来衡量一个车,如果这样想,无疑要选比亚迪,实际情况真的是这样么?

代码是一种业务的体现:全方位的评估才合理

代码是一种业务能力的体现,举个例子:小轿车是个人出行业务的体现,全方位评估软件工程带来的结果才更合理。尤其在国内,人天的成本大幅度的提高,技术团队每天的开支相比其他传统行业近乎天文数字,我们对于迭代周期要求非常的高,单个sprint产出的价值太重要,甚至于正版软件相较于人力成本也已经变得是一个合理的支出范围。所有,我更倾向于,在初期掌握一支小型化技术团队,把握住业务的核心,最大程度整合资源,打通外部内部数据,且团队要能不停的适应业务的变化。而且不光是技术团队,所有业务团队其实都应该如此。

业务好等于代码好:好业务是不停迭代出来的

很多人都告诉我,自己的代码写的多么多么的好,一次写完永久运行。但这样好么,我可以负责的说,这样的代码不值钱。互联网业务是不停的试错出来的,业务好不好对公司来说就是赚钱不赚钱,也就常常带来一个问题,需求肯定不停的变化。我以为业务的打磨是好事,因为没有人能一下找到赚钱的模式,再牛X的业务都是不停的迭代变化出来的。所以,要做到能快速的迭代,我们必须让代码能够快速的变化。可能有些负责通知或者工具类的运维小脚本,写完之后可以静静的躺着运行若干年,但不代表这个代码是好的,只是代表业务是死的。但唯有赚钱的业务才需要不停的修改不停的改变,所以我的观点就是代码是不停的在迭代改变的,同样的我很悲观,盖房子的还能看到楼房屹立100年,作为软件从业者,你的作品可能只能在世界上存活3个月,这是一个非常残酷的事实。

代码变化的本质:反应业务的变化

业务随着时间的推移,往往公司从一开始一个人管全部到后来的运营分工精细化,这背后涉及的是人员和部门的变化。所以当设计系统的时候必然会参考业务部分的划分,使用者划分,和场景的划分等来做设计。如果能在动手写代码之前闭上眼睛看到使用者工作的状态,线下业务转线上的整个过程,思考出每个节点,那就是一种正确的模式,因为你看到了业务,看到了代码的真正价值体现!

语言的进化:都是为了业务

面向过程编程之所以进化到了面向对象,是因为我们发现所有的业务都是存在现实世界中事物对照的,以及他们的关系。有了面向对象,抽象让我们可以更好概括真实世界,多态让代码中事物拥有同时对应多个现实世界事物的能力,继承让我们能够复用大量的代码。进化到了面向切面,我们发现业务不停的在做微调,所谓的微调无非是一些业务逻辑在场景中顺序的改变,有了AOP这样棒的工具,代码的组织变得更合理,当然阅读性会差点。所有的代码特性进化其实本质都是为了更好的表达业务,包括可以用trait来实现一些非通用的多继承,用生成器让函数的返回变得“动态”起来。

最后

业务是一组代码的集成,如同你开了一个面馆,没有必要非自己磨出面粉做出的面条才是最好的。站在一个更高的格局看系统,你需要的是有限的资源下,包装面馆,整合所有。把握最核心,例如浇头做核心,抓大放小。夸张的说,即使只开了一个小店,但是想着一个跨国企业规模。还是那句话,尽可能的在年轻的学习阶段过度设计自己的系统,然后不停的做减法,就能真正的感悟系统,最后你会特别理解罗斯科的作品,真的不用太复杂。

最最后

谨以此文,把自己的小小感悟献给刘锦,一个任劳任怨,每天认真工作学习的安庆少年,未来的安庆马克·罗斯科。

分类
大杂烩

最近互联网周边的体验

今天订阅号直奔主题,简单的说说一些周边体验,可能有些与实际已经不符,而且也仅仅是一家之言,如有冒犯请见谅。

开头题外话多说一句,为什么要用周边,我觉得艺术圈给我带来最大的理解之一就是艺术品的市场价值和艺术价值是不挂钩的,同理也适用在软件行业,代码的商业价值和技术价值是不挂钩的。切莫局限在技术的片面表现中,越走越细,举个例子,当你把关系型数据库看成一个服务的时候,不仅仅是简单的提供sql运行能力,还要有分布式,要有冷备份热备份,还有高可用,要有健康程度监控,要有审计,等等,当你完成了这整个服务方案的时候你发现你的业务还没开始。再举个例子,如果没有七牛这样的周边,可能一些图片APP团队还在自建分布式文件系统中,沉没在fastdfs的泥潭中。我们要最快的整合周边,把商业价值放大,这样才有闲置资源放大技术价值。

再中间插一句,很多很多小伙伴和好朋友问我现在去了哪里,借订阅号宝地说一句。老夫已经把天赋带到了空艺术,一个艺术平台。贯穿艺术领域各垂直和横向、国内和国际产业链,整合线上和线下资源,打破艺术领域与资本和非专业化消费受众壁垒间迅速发挥领军作用。(妈蛋,这个介绍是复制的,不是我写的。)

容器和持续集成篇

Daocloud:国内容器团队,他提供了一套容器管理面板和完整的CI功能,可以完成代码上传后的自动触发构建,测试,部署,监控。生产环境容器必须部署在自己的云上,本身提供的主机称为胶囊主机,只是作为调试用。他提供的SaaS服务包含数据库和缓存也只能用在测试环节,如果你已经有自己的托管主机或者有自己的IaaS供应商可以考虑使用它。但Daocloud有一个致命问题,不支持集群,它的集群是一个“假”集群,只是随机把服务放到某一台机器上而已。CI部分,Dao的优点在于他有国外主机用来build镜像,速度非常的快,因为我们的代码包大量依赖第三方源。可惜的是,对于junit的输出xml格式兼容性有点问题,嵌套多个testcase输出的结果无法兼容,可能要手工输出成dao需要的格式,或者等他们升级。Daocloud的服务很棒,上班时间客服反映迅速,我个人强烈推荐容器爱好者注册一个Dao,只要有一台自己的PC机,简单装上他们的agent,就能开启你的第一次容器之旅。对了,Daovoice也是一个很棒的功能,可以为你提供一个在线客服聊天,当然很简单很初级。最新他们也出了DCE可以部署在私有云上的管理套件,但还是那个问题,没有解决集群的话,他对企业的帮助不大。

数人云:他提供了一套开源的可以私有化部署的基于SwarmKit的管理面板,但我真想说这个公司就是完全来搞笑的,代码的完成度非常的低,开源并不是可以为质量不负责做借口的依据,使用过程中充满BUG,用了之后我整个人都不好了。

灵雀云:很干脆,基本就是一个镜像仓库加速和容器面板,没有数据库缓存之类的周边,这个是致命伤,CI做的也很一般,和Daocloud不能比。最讨厌的是客服也不友好,当你表达出没有付费意愿之后,就把你切成了免费账号,只有一个镜像功能,有点大牌哦。

网易蜂巢:迅速的成长中,每次登陆都可以发现大网易版本迭代很快的,而且投了百度的关键字竞价。但就从Build环节老失败说起,没有国外节点,很容易buld不过去。没有提供测试环节,所以就是镜像构建加部署等等,用起来的感觉很稚嫩,不过界面配色我挺喜欢的。

时速云:放在最后必然要重点介绍,如果你是一个创业公司刚起步,那么我觉得时速云是最棒的体验,他提供了创业团队需要的一切,我指的是一切。在保证自己代码团队已经完全容器化之后,你无须购买任何主机,只要push代码就能完成CI/CD,部署,监控等一条龙服务。他是基于k8s的架构,所以自然而然的天生能力强者,他提供的主机完全可以用在生产环境,关键是一个容器的最便宜收费才28.8人民刀一个月,简直太便宜了不是。他的团队也提供了分布式的Mysql和分布式Redis给你使用,当然Mongodb以及大数据的周边还没,但是对于创业公司来说这已足够,关键足够的便宜!缺点也有,没有外国的Build主机,我有超过1G的镜像会很容易build失败,界面追求炫酷,有些控件不实用,例如查看构建日志就容易把浏览器弄崩溃。还有一个很神奇的地方在于,帮助文档没有搜索,这挺诡异的。但我还是强烈推荐时速云,我觉得是国内目前容器提供商中最有潜力最有前途的一个。

IaaS篇

青云QingCloud:着重介绍下青云,目前我公司的业务都跑在上面。青云的最大优势在于技术上非常先进,尤其刚开的上海区,网络完全基于SDN/NFV,我一直认为光主机虚拟化是不解决任何问题的,网络必须虚拟化。这点青云目前国内做的最好,不像阿里云的经典网络被很多人吐槽,没办法,技术肯定是越新越好的。青云的后台及其的友好,产品经理应该是下了大工夫的。尤其是大数据部分,做的真的很全,Elasticsearch,Spark,Storm青云是目前最好的选择,有点爱不释手,我简单计算了下计算能力,同等计算能力下,费用是阿里云的8折。青云还有一个独门秘籍,因为支持SDN,所以可以让Docker直接用SDN代替Docker Overlay,简单到只要装一个他们的插件即可。推荐青云+Daocloud的组合,可以满足中大型互联网公司的基本95%的需求。

Ucloud:和青云的对决中已经处于下风,本来也是一个很新的IaaS,周边不全,可能聚焦的不是大数据的业务,听说服务游戏商比较多。

阿里云:有点老了,但是阿里云有自己的优势,ECS可以选择的机房多,例如我公司的SS服务器就放在阿里云香港节点,但时间跨度太久了,他真的老了,而且价格体系非常混乱,同配置的服务器测下来总感觉慢一点。如果你有机房地区的特殊要求,可以选择阿里云,但不推荐。

Azure:试用的流程有点繁琐,爱买不买的样子,放弃。

代码库

Github:私有库要收费,其他没缺点啊!

Coding.net:因为自己团队代码在上,体验比较深刻。有很多bug,例如:项目在团队和个人之见转移可能会出权限问题,感觉还不能商业化,最诡异的地方在于当你希望成为付费用户的时候,你会发现收费是基于项目而不是团队,对你来说收费的好处仅仅是可以让一个项目的开发者超过50个人,天哪,真有单项目那么庞大的开发团队吗,恩。除此之外,界面很丑,交互操作的感觉很糟糕。

测试

Swathub:简直让我大呼哇塞的一款产品,简单说就是SaaS化的selenium,非常非常有前途,使用难度非常低,通过向导式的表单可以很轻松的建立一个testcase,并且保存在云端供整个测试团队学习使用,说的通俗点他真的就是一段可以控制浏览器的代码,让你的测试团队不再是按键精灵,节约了很多鼠标。通过api触发配置在CI环节简直神器!能大大幅度的提高测试过程的效率!但是特殊的控件,例如:bootstrap的组件,由于DOM的多层嵌套或者布局的缘故需要自己手写对应的选择器。如果我有钱我会考虑收购这家公司,非常有前途。:D