技术组合,也叫技术栈,就是开发者实现软件的时候选择使用的一组技术,方法,工具还有框架的集合。这次我们的独立开发者训练营的主要目的就是简化我们的技术组合,掌握一套能够快速实现业务需求的应用架构,学习并不是我们的目的,因为什么都能学,只不过就是时间问题,也没什么解决不了的问题。我们的目地是造出软件产品,为用户解决他们真正在乎的问题,所以一开始,我们的主要目标就是要快速实现,获取到第一批付费用户,听取反馈再不断地迭代。一个应用项目,发布第一个版本的时候大概有三五万行的代码,所以根本就不用纠结到底选择哪个技术栈更好,至少这不是一开始我们主要考虑的问题。
快速地做出一个 mvp,然后把它交到用户手里实际用一下,这比任何事情都重要。mvp 指的是最小化可行产品,是我们用最低的成本做出来的一个验证想法的简化版的应用,主要的目的就是为了测试我们要解决的问题是不是真实存在的问题,用户是不是真正地在乎我们要解决的问题。这里我举一个 mvp 的例子,masterclass,是一个在线大师课的项目,我以前还订阅过一次。他们会请到行业里最顶级的人来讲课,比如请詹姆斯·卡梅隆来讲导演,娜塔莉·波特曼来讲表演,请 John Legend 来教唱歌。这位创始人也挺传奇的,他其实只是一个公司的普通员工,有一天他跟老板说自己不想干了,说自己想创业,然后他老板给了当场就给了他 50 万。其实当时他也不知道自己想干啥,后来他有了要做 masterclass 的想法以后,为了验证这个想法是否可行,就自个儿找人做了个假网站,上面放了一百来个假课程,只有图片跟文字介绍,下面加了一个付费按钮,通过这个假网站,他发现真的有人愿意花钱买这些课程,后来他就创建了 masterclass,现在这个网站一年的营收在一个亿左右,估值大概是二十几个亿。还有你比如什么值得买,一开始是个 wordpress 网站,还有猪八戒,一开始只是一个普通的论坛。
所以啊,兄弟们,如果你有想法造个什么软件啥的,可以先用最简单的方法测试测试,第一个版本烂一点真的没关系,不用害怕丢人,如果你觉得发布以后觉得不丢人,就说明你发布晚了,你要做的那个软件的最终形态跟你发布的第一个版本一定是差着十万八千里呢,所以也没必要爱上你做的软件,不行就干掉,重新再来。
每一次决定都是有成本的,你得考虑使用哪种程序语言,你得在两百来种语言里选择一个,你听说很多企业级应用都使用 java,你听说数据分析还有 ai 界好像用 python 的比较多,你听说 rust 的速度很快,效率很高,软件工程师们都很喜欢。确定了程序语言,然后你还得考虑使用哪一款应用框架,确定了应用框架以后,还得选择一种应用架构,比如用哪种设计模式,应用的接口用什么方法来实现,到底是 rest,graphql ,gRpc 还是 tRpc 啊,接着你还得再确定一下软件要使用的数据仓库,这又得在两百来种数据库里选择一个,你还得纠结到底是用关系型数据库,还是文档型数据库,还是说直接用图型数据库,确定了数据库以后,还得在两百来种 ORM 里选择一个。
好了,确定的差不多了,你又听说了 event sourcing 这种应用架构比较牛掰,可以记录应用里发生的所有事情,于是你开始研究怎么用自己选择的技术栈实现这种应用架构,看了些视频,读了些文章以后,这个时候你当初的创业热情已经消耗殆尽了,最终的结果就是放弃了,等待下一次创业热情重新被点燃,然后可能还会再重复以上这个决策的循环。注意啊,刚才我说的那些还只是确定服务端技术,客户端还有一大堆的事儿没干呢,你得先确定用户在哪个平台使用你的软件,比如可能是浏览器,可以是某个应用内部的小程序,比如微信里的小程序,或者是需要安装在某种设备上的客户端 app,也可能你得为所有这些平台各自做一个客户端,你说软件工程师脑子里得底装多少上下文啊,除了软件设计这部分,我们还得想着销售啊,客服的活也得干呢。所以说,我们必须得简化自己的技术组合,能少一样是一样,因为每加一样东西都是有成本的,别说别地,你就光想着它就挺累的。
在设计这次独立开发者训练营的内容之前,我就有想法简化一下自己的技术栈,我在之前做的一个项目里实践了一下这个想法,结果还是非常好的,另外我也陆续看到最近的一些比较成功的软件案例,也使用了类似的技术组合,有的已经融到几千万了。首先我们先确定一下技术生态,这次我选择的仍然是 javascript 这个生态,因为无论你想做什么类型的应用,都离不开 web 平台,也就是可以通过浏览器访问使用的软件应用,这种平台的应用软件分发起来非常简单,只需要一个网址就行了,用户不需要额外下载安装你的软件应用,即使你想做的是安装在客户端设备上的 app,你也需要一个在 web 平台上运行的管理后台,所以说,不管怎么样,我们都是离不开 web 平台,想要开发在 web 平台上运行的应用,也就是通过浏览器使用的应用,那就一定会用到 javascript 这种语言,所以,如果你想开发全栈应用,不管怎么样,javascript 都是躲不开的程序语言,既然躲不开,我们又想简化技术组合,而恰好 javascript 支持我们开发全栈应用,我们既可以用它开发客户端软件 ,也可以用它开发服务端应用,所以说,对于独立开发者来说,选择 javascript 生态来实现自己想做的软件,成本应该是最低的,市场也证明了,使用这种技术创造了很多估值几十亿,营收过亿的软件,我们也就不用担心它的扩展问题,而且,我们这里讨论的也只是初创这个阶段,当你的软件系统到一定规模的时候,一般都会同时混合多种不同的技术,到那个时候,你已经很有钱了,大概率也不会自己写代码了。
好了,现在我们确定了要用 javascript 来开发全栈应用,你需要再确定一个前端框架,一个后端框架,可能又得在两百多种框架里做出选择,而且是一前,一后各两百多种啊,如果要做简化的话,那就得把这两个框架二合一,也就是用一个框架来实现应用的前端还有后端,这个就是我们这次开发训练营里为大家准备的应用架构,目前能够实现这种前后二合一的框架也有不少选择,比如 next.js,还有 nuxt.js,最终我们确定的是 nuxt.js,这是我用过的最简单,最直接,开发体验也是最好的应用框架,使用它开发应用的时候,不用想太多,需要一块应用界面,就创建一个文件,在里面定义一个界面组件,应用需要一个页面,就创建一个文件,在里面定义一个页面组件,页面上需要显示的数据可以来自应用的接口,需要这种接口的时候,可以直接创建一个文件,在里面定义一个应用接口就行了,这个接口可以访问数据服务得到要提供的数据,也可以把客户端那里发送过来的数据放到数据服务里存储起来。
你想开发 web 平台的应用,就需要选择一款前端框架,比如 react,vue 这些,如果说你想用 vue 作为前端框架,那我觉得可以试试 nuxt 这个框架,因为这个框架的前端部分用的方法就是 vue,也就是如果你会用 vue,就会用 nuxt 设计前端应用,而且会更简单一些,做出来的应用还自然可以做到搜索引擎优化,另外要提一句的是 nuxt 这个框架的团队,我觉得都很厉害,也很积极,而且他们有个商业的工作室,也拿了一些融资,基于 nuxt 又做了一些产品,所以说这个框架用起来还是非常靠谱的。
我们再说说数据库,这个领域更卷,估计得从三百多个里面选一个,首先这个数据库的类型就有不少,比如关系型数据库,文档型数据库,图型数据库等等,其实对于初创项目的初步阶段,用哪种都是无所谓的,各有各的优点,如果说你不确定到底要选哪一种类型的数据库,那就可以从关系型的数据库开始,如果说你知道自己的应用要处理极其复杂的关系,可以选择图型数据库,随着你的软件系统的不断发展,你可能会同时使用多种类型的数据库,在技术组合里每加一样新的东西,你的成本就会加一块儿,所以说,还是越简单越好,能合并的就给他合并到一块儿。
在我们的独产开发者训练营里,选择使用的数据库叫 surrealdb,你可以把它当成关系型数据库用,用类似 sql 的语言查询数据,也可以当成文档型的数据库用,还可以当成图型数据库使用,处理复杂的数据关系,这还没完事,它还可以作为嵌入式的数据库使用,比如嵌入到你开发的软件应用里,嵌入到浏览器等等,它也可以部署在独立的服务器,或者部署到集群服务器上使用。而且你在使用它的时候,不需要提前定义数据的模式,也就是你不需要提供定义不同的数据表格,还有表格里的字段,你给它什么数据,它就给你存储什么数据,以后,如果说你确定了应用需要的数据模式,它也支持你去定义这个数据模式,比如你可以定义数据表里的索引,数据字段的类型,还有各种验证规则,还可以定义字段级别的权限。这套内置的权限系统,给我们开启了更多的可能,一但我们把数据的权限定义好了,我们甚至都不需要单独通过后端定义应用接口了,也就是你的客户端软件,可以直接连接你的基于 surrealdb 的数据服务,通过写几段查询语句,可以读取或者写入数据,这种无模式直接连接数据服务的用法,可以简化应用开发,而且可以大幅提高开发效率。
说到这儿,我有个创业点子,希望能有同学把它实现出来,你看,我们平时开发的应用,主要做的不就是做身份验证,做各种权限的检查,从数据库那里存储数据或者提取数据,上传文件,做各种文件处理,比如生成不同格式或者尺寸的图像,对用户上传的视频进行编码处理,如果说能把这些东西整合起来做成一个低代码平台应该能行,我知道现在有这样的平台,比如 leancloud。不过我希望能用 nuxt 还有 surrealdb 来实现,这样会非常灵活,比如通过一个可视化的平台用拖拽的方式定制应用的界面,直接用现成的组件,开发者也可以使用自己造的各种组件,再通过可视化界面定制应用的数据,比如各种数据表,数据表里的字段还有权限,通过可视化的界面或者 ai 来实现编写数据的查询语句,这样直接在客户端那里就可以使用了,用户可以直接在做好的 web 应用部署到你提供的这个平台,也可以单独部署到用户自己的服务器上,你的平台只提供数据还有文件服务。当我有这个想法的时候,我发现 nuxt 团队最近已经实现了一部分,他们现在做了一个产品提供数据还有文件服务。我认为如果能结合 surrealdb 这款数据库,那这个零代码平台的体验会非常好,开发者们能更快速地实现业务需求,可以针对很多垂直领域做一些 saas 产品,能够快速验证自己的想法,不必担心扩展问题,也不用自己维护这些基础设施,还能持续不断地得到开发的软件产生的收入,这多安逸,你说是不是。
我这扯的有点远了哈,最后我再总结一下,作为开发者,我们不要纠结技术结合,简化技术组合,能少用一样东西就少用一样,写上三五万行代码就能开始了,获取到百十来个付费的用户就能辞职了,我们的应用数据一个 sd 卡肯定装得下,选择最简单的方式快速实现然后发布,我推荐想要独立开发的同学们选择 javascript 生态,用 nuxt 作全栈应用,用 surrealdb 作为应用的数据服务。有需要掌握这套应用构架的同学,或者想成为开发者的同学可以报名参加宁皓网的开发训练营,这里非常非常感谢支持我们的同学们,后面我会整理一些免费的技术类视频,在这里发布。希望可以帮到大家快速成为一名全栈开发者,造出自己想要的软件产品,也希望大家能多关注一下。