Microsoft Ignite China - 科技寰宇:探索无人之境
以下内容是部分直播内容的延伸
关于程序
以下的公式,是我对程序的认知:
程序 = 逻辑 + 数据库 + 云原生
先从云原生聊起吧
前一阵,我在微软和微软中国的 CTO 有一个关于云原生的直播讨论,在聊云原生的话题,我说在新时代出生的我不只是“互联网原住民”,更是“云原生原住民”,因为我写程序的第一天接触的就是云原生的技术,我在2016年开始用 docker,用微服务的时候,只是因为创业资源紧缺,希望能快速上手,那个时候压根不会思考一些“假设云服务一定可信”这样的理论,只要能用别人的,我一定不会自己去架一些服务,反正别人肯定都比我靠谱,我就一个人光脚在那写代码,别人的再不靠谱,论时间论人力都比我强啊,那我还叽歪个什么。
那个时候也没什么人提云原生,我自己在docker、微服务的世界里呆久了,忽然有人说云原生,其实最开始我也不太理解这是什么,后来发现,这就是我。微软中国的 CTO 韦青说,就像鱼儿游在水里,它不会问什么是水,我们呼吸在空气中,我们不会问什么是空气。因为他就是我们身边最习以为常的东西。那些我们不经常碰的东西,才会挂在嘴边讨论。我深以为然。
话题说的有点远,聊回到云原生的话题,我觉得云原生最大的价值,就是今天的程序员,不需要再考虑复杂的运维场景,不需要自己去维护服务器,甚至都不需要知道什么是服务器,只要把自己业务逻辑说清楚,其他的几个9的问题,其实有云服务厂商帮你解决了,与其说是解决,不如说背锅。你看宕机了吧,不是我的问题,大厂宕了。
云原生的时代,真的是一个对工程师来说,太美妙的一个时代了。
逻辑
这个其实应该是程序的最重要的部分,也是第一步,只是因为毕竟这是年终随笔,所以我就随意一些,从随意的地方入手了。
做一个有逻辑的人,其实很重要,不只是在程序的场景下。
说回来,程序中的逻辑,更多偏业务逻辑,就是你想清楚,数字世界的逻辑是什么样的,要能尽可能的穷举(其实产品也是)所有可能性,然后每一个可能性给一个确定性的结果。
程序和机器简直太美妙了,因为他们不会说话,他们永远都是确定性的。你给出一个指令,输出永远是确定的,正确的。
有了bug,也一定是因为你自己的逻辑出现错误,和机器一定没有关系。
这样的合作对象,可能在现实中永远没法遇见 – 可控性强,永远不会出错,永远是确定的。
在数字世界久了,有的时候人会越来越较真,甚至偏爱辩论和抬杠 – 我称之为率真。
当然,率真的对象还是要考究的:
- 首先,对方得是一个成年人
- 另外,对方也得有逻辑
- 关系应该不能太差,保证大家在同频
做一个过于较真的程序员,可能在现实世界是活不好的,好在现在的我应该不是那样的。
数据库
其实更多的,这里只的是存储。
你写了很多业务逻辑,一定会产生数据,这些数据,需要存储,所以有了数据库。
我第一次接触数据库应该12年前,数据库老师在讲台讲了好多mysql的各种表结构,信息都记不太清了,如果我重新去讲,我可能会用 excel 来讲,深入浅出,清晰易懂。
我一直觉得,云原生的背景下,Google Spreadsheet (Google 的 Excel)有了一切的读写 API,其实是人人都是工程师的年代了。
只要你懂业务,懂逻辑,其实学习什么语言并不重要。
好多其他行业的人会和我聊天的时候,说觉得程序员的行业很酷炫,说自己也想写程序,问我要从什么语言学起。
每次我都不太知道该怎么去回答,因为对于一个希望用程序去解决问题的人来说,语言完全不重要,Node 还是 Python 还是 Go 还是Java PHP 这些,没啥区别,因为你根本不需要理解什么是 I/O 什么是调度什么是脚本语言什么是解释器什么是线程(大学的那些概念真的劝退了好多人,但是这些基础课程很重要,这个是后话了)。你只要理解你自己的逻辑,拆分要解决的问题,然后写出来,画流程图都行,说清楚了,用 Excel 把数据存储并可视化起来,其实就够了。更何况,Excel 都能编程。
了解太多的时候,反而让你的开始变得困难。