蒋耀锴:剑桥毕业,硅谷敲代码8年,回国创业做低代码

2024-06-07 16:44

本文主要是介绍蒋耀锴:剑桥毕业,硅谷敲代码8年,回国创业做低代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是《开发者说》的第10期,本期我们邀请的开发者是蒋耀锴,曾在意大利、英国、美国读书,专长高性能计算、高容错分布式系统与软件工程,毕业后在硅谷的Medallia写了8年代码,19年回国创业做低代码,喜欢半夜里一边喝酒,一边写代码,业余时间都在旅行与投资,他好奇于坦桑尼亚人的爬山方法,也对《母猪的产后护理》感兴趣。如此有趣有货的程序员,不想了解一下吗?

1、请自我介绍一下

我小的时候在杭州出生,13岁的时候去了意大利,读的初中和高中,毕业去了英国剑桥读的计算机,在美国卡耐基梅隆大学读计算机的研究生,后来就一直在硅谷工作,在一家做CEM的公司Medallia做后端开发。2019年回国开始创业,一直到现在。

2、6岁接触电脑,9岁开始写代码,是什么体验?

小时候,我妈是浙江医科大学教供科的一个职工,在92年,我不到五岁的时候,他有一阵子会带回家一个纸键盘,当年键盘还是很贵的东西,大家也买不起,为了要练盲打,就做成纸键盘练习,我很好奇,问她这是什么东西?她说这是电脑的键盘。我就缠着她说要去看看那个东西是什么样子,她就把我带到那个机房里去,当时那些电脑还很金贵,进去还要穿鞋套,戴头套。这就是我第一次跟电脑打交道,我当时也不知道这东西到底能干什么,只是觉得这是一个非常有意思的机器。

在小学四年级的时候写下的第一行代码,那时候也不知道自己在干什么,我记得是用VB,写的第一个程序就是去画一个计算器。很多人第一次写代码都是写这个。

3、你在意大利、英国、美国都有读书经历,它们的优点与缺点是什么?

这很难对比,我在国内只上过小学,跟国内上学的人的交流而言,第一是在国外的标准答案少很多,我们的历史考试基本上就是写作文,高考是三道题,两个半小时,反正你就写,不管是引经据典也好,自己去论证也好,你要证明你的这个观点,从历史书籍中查找,引用历史学家的观点,或者逻辑推理也好,你得想办法证明你的观点,它的题目也非常庞杂,有些非常刁钻,比方说有考题是,如何看待《凡尔赛合约》对德国的抑制其实延迟了二战的到来?观点尽可以千奇百怪,重要是你要给出扎实的论证过程。

第二个是老师真的是非常的专业。我从来都没有觉得给我上课的老师,不懂他在说什么东西,他是真的对他的那一门课非常热爱,也非常精通,从来没有怀疑过他会不知道我的问题。我觉得这两点是很大的区别。

国外的学校管理上很开放,没有国内这么严格,在本科的时候,大三只要考一半的题,一张试卷,答对一半的题,就算100分的,你可以想上什么课就上什么课,有12门课,你只需要上6门,你也可以上12。最终考试你只要答对一半的题就可以了,有很多自己的选择。

当时我特别感兴趣的是硬件,选了一门课computer architecture,还有一门计算机的理论课叫foundations of computer science,里面讲的东西我都不知道有什么用,但到了解决困难问题的时候。我非常感谢当时老师教了我这些东西,包括现在自己做产品的时候,真的用到了当年学的东西,这个感觉真的很好。

4、最佩服的程序员是哪位?中国程序员能开发出ChatGPT这样的产品吗?

我最佩服的程序员是一个挪威人,我在实习的时候碰到他,他是让我第一次见识到有人对程序的分析可以到入木三分的地步,从更高层的架构,软件工程的代码结构,JVM的调用,CPU指令的翻译,他可以在每一层都找到问题。这是我第一次见到有人可以真的做到所谓深入浅出,他真的震惊到我了。
他知道四个以下的排序在CPU内部是有特殊的电路的,知道除法,很多时候我们也知道,但是根本就不会想这个事情。

有一次我们在调一个性能,当时是为了要做一个set,这个set直接用java的性能是不够的,因为那个set的存取是非常的高频,我们要自己去做那个set。是专门针对int做那个set,要考虑它的load factor,也要考虑它的size的成本,我们要做的全部都考虑了,最后性能还是不够。

我就在那边看了大概一个礼拜,百思不得其解,我们做了所有的尝试,还是不行,他说我们看一下到底CPU跑的哪个指令是最慢的。如果他不跟我说,我都不知道intel有一个软件叫什么VTUNE,这个软件可以告诉你哪一个汇编的指令花的时间最长,它还会分解这个指令运行时间。

最后找到了问题所在,我们在算哈希值的时候不是一个int to int,用了一个除以质数取余的方式去算,正常情况下,我会觉得那你除以一个大的质数,取个余可以保证它的分布非常的平均,就是因为这个除法。造成了说,你这里就用掉了七个周期。然后说不要做除法了,直接做乘法吧,做乘法,取余的时候用二的几次方,直接CPU有专门电路去做就行了,一上去之后马上性能暴涨五倍,性能平衡这个问题就这么解决的,我就觉得他太牛逼了,如果不是他告诉我可以一层一层的去观察,我永远都想不到Hash function是性能瓶颈,我永远在想array access是瓶颈,他让我感觉是人外有人天外有天的感觉。尤其是他又在面对面的教我。

国内的环境根本就不适合GPT的产生,它产生的必要条件,第一要有闲人,要有人不断的在钻研,GPT的架构是谷歌出来的,而且是17年出来的,那个时候的谷歌还没有说要什么financial discipline,什么东西都还没开始,就是让你去做自己的事情,本质上就是有闲人。

另一方面它是事故,transformer这个东西,算力得到位,那算力到位的前提是比特币,为什么,GPU那阵子发展那么快是因为比特币在那边打,大家都开始挖矿,比特币暴涨造成了显卡供不应求,那个nvidia就有足够的钱去研发更牛逼的芯片来,最终带来的价值是transformer model可以利用到这么多的算力,并且产生了质变。比特币之前GPU又是干什么的,是在玩游戏的,这种不务正业的事情在国内怎么可能会被鼓励去做,你会觉得这些对社会的进步没有帮助。

世界的发展,我觉得是有随机性的,很多东西都是从一些看似没什么用的东西突变过来的。

5、Zion的灵感来自哪?它是一款什么样的产品?

从2015年开始,我跟合伙人一起在做各种各样的项目,这些项目一般都是商业模型的创新,创新就必然带来对新软件的需求,因为一个商业模型都要有一个软件去承载。当时我们还在上班,都是业余的时间在搞,搞过程中就觉得非常的烦躁,天天就要重新做一些数据库建表,把这个东西通过API暴露出来,前端去接,接完了之后写个页面react的各种状态的变化,还要调CSS,感觉非常的重复而烦躁,总觉得这些事情不应该花这么多昂贵的工程师这么久的时间。它的业务逻辑也没有多复杂,工程师也没有在浪费时间,为什么产出的量没有想象的那么多,本质上是因为我们在重复的做事情。

还有一点,这些业务逻辑需要一个经过了系统的计算机教育的人去做吗?好像也不需要。所以我们就想要做一款解决这些问题的产品。不管是移动端软件也好,还是网页软件也好。它都是一个前端,后面是个数据库。前端大家都用jquery,那其实是比较难管理的,当你有了这个react的virtual dom之后,就轻松多了,你只需要管理状态就可以了,不需要管理事件触发对UI的修改,它已经帮你抽象了这一层,我们的产品就是管理这个状态,之前的项目,我们用的是graphql和kubernetes这一套,API那一层用graphql。

存取数据怎么弄,我们看到了一个软件叫做hasura,它可以直接将数据库以某种形式暴露成graph的API,你就可以在里面做到增删改查,还带有强类型,后端选了个springboot。数据库用的是postgres,因为我本身对postgres很熟,也做了很多的对比。首先数据库的schema怎么办?是我们帮用户管还是我们用C的类似mongodb的方式去做,全部都是json的,我们选择了用schema帮你做migration。

对于使用无代码的人来说,他更加难以找到schema对不上之后的脏数据,怎么排查问题更加难处理,你要做的是给这些人做更多的护栏,而不是给他更多的自由。无代码的本质是更多的护栏,不是更多的自由,自由的背面都是责任,你让一个没有能力承担责任的人,去承担代码的选择带来的责任,这本身就是不合理的,所以你要做的是尽量限制他能做的事情,能做的选项,但是不限制他能够产生的场景,就是所谓的holy grail,你到底灵活在哪,你的封闭在什么地方?

6、Zion的典型应用场景是什么,相比请一个员工,到底能省多少钱?

Zion最重要的问题是要服务的人,我们给他的定义,第一大概是智商115以上的,智商115的数字怎么来的,这个人不管实际学历如何,他要相当于一个average研究生或者一个优秀本科毕业生的水平,这群人已经是前16%聪明的人了。为什么是这样?因为不管用无代码还是用代码,软件的核心难点是抽象能力和理清需求的能力,东西是不变的,如果你理不清需求,不管有代码无代码都做不出来。无代码开发本质还是开发,还是将实际业务映射成数字逻辑。需要的是有自学能力和业务理解能力的人

还有一个,开发者不需要经历过专业的代码训练。经过我们自己的测算。聪明人20到30个小时之间,他就已经上手了,他就可以开始做软件了。

我们现在跑的典型用户。他原来在亚马逊做产品经理,后来不得不接手家族企业了,他就回到了海南。接手的家族企业是个批发店,批发店底下可能有几百个零售店跟他对接。他不会写代码,但他用我们的软件搭建了自己的零售商管理系统,让他们可以订货,可以讨价还价,可以追溯货到哪里,仓库管理系统。只要零售商一下单,价格谈好了,仓库员工的手机就会叫,就可以去理货了,你还要确保这个货理出来是对的,软件里面还有一个扫码的,快递的track的系统,全部都里面。

用传统的开发去做这件事,怎么也要个几十万的成本吧,你招外包,没有办法很好的跟他沟通你的业务需求。他是老板,他特别懂自己的商业是怎么运作的,他是专门从海南飞过来,在我们这里,做了三天,就做好了,他现在打算把这一套东西拿出去当一个saas往外卖,作为解决方案卖给别人。那你说他的开发成本有多少。

Zion还有一个优点,通常一个页面,同一个Entity的列表可以有很多种方式呈现,每一种呈现方式需要的字段是不一样的,需要join的这个表也是不一样的。是post表,这个时候需要看到的是有多少个comment,也有可能有个地方,要看到前三最新的三条comment。也有可能要看到author的头像。我们做到了只取你要的数据,最大程度保证它的性能。我们最大的客户是一个做题的,他的做题记录已经有6700万条了,我们就是一个非常简单的数据库,没有做任何其他的东西。不管是sql也好还是数据库的表的结构也好,还是数据库的表上面的索引也好,都是自动帮你去优化的,用比较便宜的硬件就可以支持,这些是我们提供的一些价值。

7、低代码未来会只有一个输入框吗?输入你的描述就可以生成一款应用。

这是常见的AI versus 低代码的问题。

AI在低代码上面会有两种体现,一种是让你的客户做出来有AI能力的软件,直白一点,你可以低代码的搭建agent,而不是需要人用代码来搭建agent。第二是代码编辑器有AI的copilot,就跟我们的Github copilot在VS里面是一个道理。这两个是相辅相成的,它并不是一个互斥的关系。

至于人们的想象,我讲一句话就可以生成一个软件。这是根本不可能的事情,如果你把AI当成一个人,他是个很聪明的人,是个万能码农。你找一个万能码农,你跟他说一句话,他也做不出来,因为你说的那句话,天然就是缺乏细节的。软件的每一个环节都利用AI,把相对模糊的、含有歧义的自然语言表达的东西变成一个精准的、结构化的结果,程序本身上是结构化的,对于结构化的一个状态的改变,我们是需要做的,所有的IDE一样,我们都有一个copilot。

Zion本质上是开发工具加上一个部署平台,我们所有的功能都必须是正交的,所谓功能的正交就是指每一个功能都是不能有另外的功能去替代,他们是不重复的。第二个,最理想的就是所有的功能加起来,能够覆盖开发者需要的方方面面,当然这得花很多时间去做。
我们有一个数据库的功能,有AI的功能,那么数据库就要能用AI,A I也要能用数据。又引入了第三方API 也是一样,数据库要能够直接从它里面的字段去作为输入用到API里面。

8、自己最喜欢的产品有哪些?国内的产品大而全,国外的产品小而垂直,怎么看待两种设计思路?

我比较喜欢飞书,因为它的产品比较正交,所有的东西跟所有的东西都可以互动,我的文档可以在聊天里面,嵌入文档里面又可以有聊天记录,然后在搜索里面可以搜所有的东西,会议结论可以在聊天里,也可以在文档里,整个东西概念的数量虽然不多,但是组合起来的可能性是非常大的。

对于国内这些大而全的产品,我自己也非常惊讶,最可怕的是一个地图软件都会给你来借钱,所有的银行App都有商城,我都懵了。正常的情况下,银行是用来看我有多少钱和欠了多少钱的地方,你为什么要让我去买东西,还有电影票。

原因可能是国内产品对流量的变现没有止境,但没有想清楚要做什么,看到别人做什么赚钱就做什么,但这些边际投入的回报是很低的,我肯定是偏好一个简单的产品,我听歌,你就给我听歌,你不要给我借钱,我根本不想看到能借什么钱,我要借钱,我会去问银行的。

9、从码农到公司老板,最大的感受是什么?你最理想的第二职业是什么?

在很多人身上看到了曾经的自己,你在那个位置上面想过的事情,所以你会更加理解,相较于大部分的老板来说,我是更能理解码农到底在想什么,他们的态度为什么这个样子,所有会有更多的耐心,虽然我经常跟他们吵架,我还是会非常认真的跟他们解释。

做码农轻松多了,做老板的话你就得什么东西都得懂一点,虽然我自己不介意什么东西都懂一点,术业有专攻,有些东西就是做不好。在做码农的时候就不会有困扰,有一些事情做不好怎么办?做不好有人给你做。你做老板说做不好怎么办,那不行,你只要自己做不好。你招人都招不好,你都不会招人,所以你就没有办法,你一定要自己上,即便你有很多的知识储备,纸上得来终觉浅,书看的再多都是纸上谈兵,虽然纸上谈兵,但也比没有纸上谈兵还是要好一点,但是纸上谈兵跟真的干过这个事情的人相差还是很大的,所以就深深的感到自我的局限。

我自己是更喜欢对付死的东西。没有任何情感,不会对你进行反抗的东西,或者它的反抗是完全是根据你的输入的,不管是汽车也好。计算机也好,还是股票市场也好,只要你对了就给你奖励,只要你错了就打你脸,我非常喜欢这种东西。对付人的话,我对自己的认知是,我是一个很有人格魅力的人。但是另外一方面,我又不喜欢对付人。

我曾经一个爱好就是天天拿着公各种公司的财报在那一点点看,就为了理解一个行业是怎么运作的?我宁可这个样子,我也不愿意出去跟人聊天,我喝酒也是跟自己喝,有人会说你这是不是在喝闷酒,我一点都不闷,我觉得我非常的快乐。在21年的时候,有一阵子,我经常会半夜里一边喝酒,一边写代码,我很享受那种状态。

我的第二职业应该是做投资,我现在持有很多很奇怪的东西,我有一个秘鲁的磨金子的一个公司,把金矿砂提纯到90%左右金块,我会买各种地方的奇怪的玩意,有点像收集珍宝的样子。最近我在我在买国内养猪的股,为了这个东西,我看了很多乱七八糟的东西,比如说《母猪的产后护理》,为了知道养猪到底需要注意些什么东西,在豆粕价格高的时候,你怎么样给猪补充蛋白质,这种莫名其妙的东西。我都会去研究。

10、写代码以来,你最开心或影响深刻的一件事是什么?

我印象最深刻的一件事,真是有点创伤。当时我是跟数据库打交道,我当时那家公司卖给花旗它的saas,经常有人抱怨说他那个网页会时不时的崩掉,本来这事跟我没有什么关系,我是一个后端,你网页崩了,那不应该前端的事吗?后来,经过一堆人的排查,说这个东西是因为返回值在这里有问题,日常的返回值为什么有问题,后来发现是他数据库不断的在重连,我就觉得很奇怪,数据库重连在别的地方也没有,代码也没有改动。如果代码都一样,那它唯一的可能性是数据。只有可能数据或者配置不一样。

我花了两个礼拜去修复,他就是持续的崩掉,崩掉的时候db断连,我一边在看java的log,一边在看数据库的log。就看不出任何的端倪来,最后在数据库服务器的dmsg里面发现了了几个东西,写着什么ECC error.,我想会不会是内存坏了,就找那个运维,把花旗数据库的内存给换了,换了之后ECC error消失了,数据库重连也消失了,居然碰到了一个硬件造成的问题,还不是死机?只是数据库断联。花了我两个礼拜才看出来这个问题。当看出来那一刻,又觉得自己似乎升华了,就觉得我从此又知道一种failure mode了。

11、分享一下自己业余爱好?

我生活中最大的特点就是好奇心,美国的51个州,每一个州我都去过至少两遍,世界的各个地方都去转过,以前不觉得,现在觉得行万里路还是有那么点用,你对世界的理解会更丰富。美国中部的人的生活,跟美国两岸人的生活也不一样,秘鲁人爬山的爬法。坦桑尼亚人也有自己爬山的方法,非常有趣,这些都是我感兴趣的东西。

12、对于自己的生活与工作,未来有何期待?

我希望Zion可以提升更多人的效率,真正让一个开发者有惊艳的感觉,不仅可以帮你部署后端API的生成,甚至帮你做AI搭建的平台。对我来说,AI就是一个新的软件基础能力,不管你是react、java、postgres,还是ChatGPT,它都可以被更多的没有经历过专业训练的人去使用,不管是在国内还是国外,大概这就是我心目中的应许之地。

故事征集:

《开发者说》是我们最新推出的一个访谈栏目,邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事,我们尝试建立一个程序员交流与学习的平台。

欢迎大家推荐朋友或自己来参加我们的节目,分享与对话是一件利他又利己的事。

这篇关于蒋耀锴:剑桥毕业,硅谷敲代码8年,回国创业做低代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039726

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

麻了!一觉醒来,代码全挂了。。

作为⼀名程序员,相信大家平时都有代码托管的需求。 相信有不少同学或者团队都习惯把自己的代码托管到GitHub平台上。 但是GitHub大家知道,经常在访问速度这方面并不是很快,有时候因为网络问题甚至根本连网站都打不开了,所以导致使用体验并不友好。 经常一觉醒来,居然发现我竟然看不到我自己上传的代码了。。 那在国内,除了GitHub,另外还有一个比较常用的Gitee平台也可以用于

众所周知,配置即代码≠基础设置即代码

​前段时间翻到几条留言,问: “配置即代码和基础设施即代码一样吗?” “配置即代码是什么?怎么都是基础设施即代码?” 我们都是知道,DevOp的快速发展,让服务器管理与配置的时间大大减少,配置即代码和基础设施即代码作为DevOps的重要实践,在其中起到了关键性作用。 不少人将二者看作是一件事,配置即大代码是关于管理特定的应用程序配置设置本身,而基础设施即代码更关注的是部署支持应用程序环境所需的

53、Flink Interval Join 代码示例

1、概述 interval Join 默认会根据 keyBy 的条件进行 Join 此时为 Inner Join; interval Join 算子的水位线会取两条流中水位线的最小值; interval Join 迟到数据的判定是以 interval Join 算子的水位线为基准; interval Join 可以分别输出两条流中迟到的数据-[sideOutputLeftLateData,

Git代码管理的常用操作

在VS022中,Git的管理要先建立本地或远程仓库,然后commit到本地,最后push到远程代码库。 或者不建立本地的情况,直接拉取已有的远程代码。 Git是一个分布式版本控制系统,用于跟踪和管理文件的变化。它可以记录文件的修改历史,并且可以轻松地回滚到任何历史版本。 Git的基本概念包括: 仓库(Repository):Git使用仓库来存储文件的版本历史。一个仓库可以包含多个文件

HTML文档插入JS代码的几种方法

在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内联,放置在< script>和标签对之间。 2.放置在由< script>标签的src属性指定的外部文件中。 3.放置在HTML事件处理程序中,该事件处理程序由onclick或onmouseover这样的HTML属性值指定。 4.放在一个URL里,这个URL使用特殊的“javascript:”协议。 在JS编程中,主张