前端有边界,但人没有——从零到一打造一款产品

lxf2023-12-18 11:20:01

TL;DR。请备好咖啡。

前端永远都在

我一直都不是特别认同“前端”或者“后端”这种title,如果要区分职责的话,我觉得用户端和服务端工程师更合适。

有人说:“前端已死”。

我觉得大家完全没有必要沮丧,这些话全无价值,社会在变迁,我们身处其中,埋头苦干的闲暇之余,也不妨抬头,看一看天空,想一想,我们能做什么?

坦白说,我个人是不认同人的价值是来源于社会的这种说法的,这否定了人的存在,但市场经济主导的社会,大部分人(n代除外)的价值确实只能来源于ta所处的环境以及在这个环境中,他所能做到的事情,你可以把它看作是市场对人的“驯化”,对人的“工具化”和“货币化”。

你反感它,但不妨碍你利用这种社会规则去实现你的个人价值。

现在,有一种叫做“前端开发”的货币,它贬值了,为什么贬值呢?因为市场对它的需求大幅度减少了。为什么减少?因为经济进入下行周期,叠加上世界不稳定因素,市场上的资方看不清未来,对未来没有信心。

那很多宏观上的因素我们无力改变,我们唯一能做的,就是改变自己。

如果你不想随便就被裁,随意被别人代替,不想时刻面对着年龄的威胁,不想要那种焦虑。

就必须主动改变,这种改变可能会很痛苦,你得学习更多的知识,扩充自己的思维模型,减少甚至放弃娱乐时间,去根据自己习得的新知识,去实践,去沉淀出自己的思考。

最重要的,也是我不认同国内很多岗位title的原因(这些title大部分都是把人螺丝钉化工具化的叫法):不要给自己设边界。

人的能力没有边界。

如果你看过《刻意练习》并实践过其理念,并有过超过一年的刻意练习经历,你会发现,人的身体,还有人脑是没有边界的,在任何一个领域,你永远可以比上一秒的你做到更好,只要你愿意付出精力和思考。

前端的优势

有人说,前端受制于后端,升职加薪都是后端的,前端只能分点汤汤水水。

坦白讲,出现上面这种情况你得思考一下,为什么你只能分到“汤汤水水”,是业务模式决定的,还是你没有体现出自己的价值?

事实上,大部分前端工作没有唯一价值,什么是唯一价值?就是这个事情,就必须得你来做,才做得好,产出的代码或者产品是一个“艺术作品”,具备独特业务价值和审美价值。

而不是复制粘贴的产物。

我是从设计入门的前端,喜欢设计,所以选择从事前端方面的工作,后面不停地折腾,想要活得体面点,从北京到了杭州。想要去大厂,面过阿里、字节、快手,都草草了之。

原因很简单,我不刷题,不搞算法,不背八股,不阅读框架源码,我研究的很多东西都是领域性质的,是如何做好一个产品,如何做架构更加优雅和具有拓展性。

我说我懂设计,懂产品,懂架构,面试官都一脸问号。

你只是一个前端开发,你懂个P的设计和产品,设计和产品有专门的产品经理。

投了很多,面了很多,我也在思考,去大厂996甚至007,一年多挣十万,是不是真的那么重要,还是说,我看中的是大厂的名气,想要被人羡慕和仰望?

思考了很久,我决定不去主动追求大厂了,大厂要的,我给不了,我有的,大厂没法接受。

想通之后,我难受了很久,这就是现实,现实往往难以让人接受,但成年人必须要学会拥抱现实,但依然要热爱生活,不被现实捕获,避免变得庸俗。

来杭州之后,可以说,杭州的小公司,基本没有正常的,几经辗转,不得不一年换一家。后来,在杭州一家做微商的小公司工作了一段时间,一个人全身心投入开发了三个月的产品因为领导之间的博弈成了牺牲品,没上线就胎死腹中。

我的心在滴血。

这触碰了我的底线,我不允许我的精力和三个月的时间被这样浪费,于是毅然决然选择离职。然后联系了北京曾经的领导平哥,看看有没有什么工作机会,因为在他那,我有感觉到被尊重,感觉的自己的价值没有被浪费,我在的时候公司毕竟就四个员工,三个开发,后来写php那哥们和平哥吵架走了,就我们两个开发,平哥是php后端,我是设计+前端。

毕业之后我在北京待了一年,其实当时刚毕业的时候面试进了锐安科技这家公司,做一些安保科技方面的工作。锐安算是半个国企,这里的人以待的久为骄傲,待得越久资历越老,满额公积金,条件待遇对于一个刚毕业的学生可以说不错,工作也不累,但是每天加班到9、10点,是可以干到死的公司(适合混吃等死或者不想要参与社会竞争的人)。技术是十年前的(保守说法),公司内部不允许连外网,而且有信号干扰器,而且经常出大差,后来我作为一个新人,出差的任务理所应当的任务交给我了,去南宁出差了一个月,驻地开发,回来的时候像个野人了,最让我接受不了的是,带我的人拿自己十年前过时的开发理念教你写代码(我的代码能力和设计能力不一定比他低),而且控制欲还有点强,这就很膈应人了,转正后一周,十一前夕我提交了辞呈,为了避免尴尬,我只说家庭原因,家人想要我回去考研,不提及任何个人或者其他人的因素。

然后就是找工作,找了两个月没找到合适的,当时还是太年轻了,对有些公司还挑三拣四的,这样错过了最佳的面试的时机(逐渐没钱之后人开始焦虑起来了,状态不行了),最后没钱了,找家里要了几千块钱,听我爸说是临时找人借的,我挂掉电话之后,崩溃了,10岁之后再也没有哭过,但那一刻我眼睛红了,没有泪水,望着天花板,过了好久。

我必须坚强,我没有退路。那个时候我发誓,再也不会找爸妈要一分钱,也不会接受他们的任何一分钱。

于是开始乱投,甚至面过设计师,面过产品经理,然后投给了平哥的公司,让上机开卷面试,只要借助互联网写个表单提交逻辑就OK了,就一个表单逻辑,我写了两个小时。

这两个小时是我人生中度过的最快的时间。

这一年就是在平哥的公司做外包,那时候想的很简单,多做,多想,多看(如果有应届毕业生实在找不到正经工作,可以尝试到外包历练一番,还是比较锻炼人的,当然,要有向上突破的心)。

我心里是有一个职业目标的,要有独立做产品的能力,所有的一切都可以为之而妥协和努力。

后来公司自营社交电商(当时是19年)失败了,我离开了公司去了杭州。我离开公司一年后,恰逢疫情,他把公司关了一年,这一年他也思考了很多,知道外包这条路走不远,之前我们内部就有一个类似Laravel架构的Php代码生成器,结合他给别人做咨询时做的技术方案用Golang实现了一个架子,搞了一个应用引擎,后来才知道,外面的人管这个叫低代码。

时间是2021年9月,这个时候他在筹划界面引擎的部分,这个时候我找上了他,我按照他的要求两个月用React、Umi、Ant Design实现了一个MVP版本的界面引擎,

因为恰好我来杭州之后的这几年,一直都有在用Umi做后台管理系统,就是Ant Design Pro+Umi那一套,甚至Ant Design都被我磨改出好几种主题,做了大概10套左右的这种业务系统,单个业务系统,多的可能有50+业务模块,少的至少也有20个模块。

这里要讲个故事,来自于《庄子》天地篇:

有一天,孔子的弟子看到子贡看到一个老人家在地里,用人力在进行灌溉苗圃(培育树木幼株或某些农作物幼苗的园地),于是子贡对老人说:“有一种机械,一天能灌溉一百某地”。

灌溉苗圃的老人听了面起怒色,却笑着说:

“我从我的老师那里听说过,使用机械的人必定从事机务之事;从事机务之事的人必然要存“机心”。“机心”一旦存于心中,那纯粹朴素的天性就不完备了。纯粹朴素的天性一旦没有了,精神就会摇摆不定。一旦精神摇摆不定,便不能够承载大道了。我并非不知道那个东西,只是耻于去做罢了。”

老人的意思是,你说的那个机械,我还要学习一大堆的东西才能用,老人这个年纪种这么点田,人力完全能够所及,可能种田只是老人家的一个乐趣,“承载大道”。

我的理解是,违了本心去追求形式,承受一大堆不必要的信息,把心搞乱了,却失去了初心,是不可取的。

也不能违背自然规律,老想着投机取巧,往往得不偿失。

事物发展讲究一个自然而然,顺势而为。

除机心。

我没有去研究过任何低代码的东西(甚至还是几个月后,有人告诉我低代码这个概念),就完全按照“第一性原理”——这个实现能不能加速业务开发,把这个界面引擎开发出来了,我一直坚信的就是,在拥有充足自信的前提条件下,每个人都可以最大限度发挥自己的创作能力,千万不要在自己还没有具体想法的时候就去看别人的产品,那会产生路径依赖,也是自寻死路(产品上限钉死了)。

后面我吸取了之前的经验,用DDD的思想,抛弃掉Dva转而使用Mobx+Tsyringe(依赖注入库),花三个月的时间把它重构了,把界面引擎从逻辑驱动改成了基于模型驱动(灵感来源于《游戏引擎架构》这本书,软件架构师的必读书籍之一),便于后期业务拓展。在这个过程中,我刻意不去看任何类似产品的实现,因为我知道,万变不离其宗,我掌握了实现原理,不能被其他产品影响了我的审美和判断。

这是我认为的“去机心”。

后来有人跟我们说,你这个叫低代码,我们才恍然大悟。哦,原来这就是“低代码”。

当然,我后面要分享和打造的产品和上诉没啥关系,只是,我想告诉你的是,前端事实上是没有边界的。

前端的边界就是人的边界。

前端的优势在于,你离用户比较近,你如果懂设计、产品,用户心理和用户需求,相比于后端开发者,你能比较容易的打造出独立产品的。

如果你熟练掌握Nodejs,知道怎么使用serverless服务,现在,你已经具备成为独立开发者的条件之二了。

我是从2021年10月开始远程工作的,公司在北京,我在杭州。疫情三年,没打过疫苗,核酸检测总次数不超过10次(回过两次家)。

隐隐有种预感,这种不稳定的状态可能会持续超过10年。

在最精彩的年龄遇上这样一个世界,着实倒了血霉。但抱怨没有用,得做出改变,迎接不确定拉满的未来。

“大浪淘沙”(指互联网时代落下帷幕,大量开发者不得不面临生存问题),也会催生人人都是独立开发者的新时代,前端在这块是比较有优势的。

做产品需要什么

前端开发者如果想要打造一款产品,首先得问自己一个问题:我能做什么?而不是我想做什么。

事实上,你的idea一文不值。

我的锤子便签里面有从大学以来(将近10年)643条的记录,Microsoft Todo里面超过609条关于各种产品的想法,但99%的想法都躺在那里,不是说那些想法没有价值,而是你没有资源和能力去让它成为你想象中的产品。

这就好像,你梦到了一段非常好听的旋律,但你不会钢琴,不会吉他或者任何乐器,基本的乐理你都不懂,甚至你都不知道像FL Studio这样的DAW(数位音乐工作站)是什么,这意味着,你没有一条通往想法实现的路径。

所以,对于独立开发者,量力而行是关键。

前面说过,前端开发的优势是离用户近,离设计和产品近,单纯的前端技术是没法做出好产品的。React再好用,Ant Design再便捷,Umi再方便,如果你没有对于产品的认知,对于设计的理解,对于人和人的需求的认知,没有一个不错的审美,以及抠细节的精神,那也是没法做出企业级的商业产品的。

看到这里你也不要担心自己做不做的出来一款产品,我给个建议,这个时候不要听从外界的任何声音,只管做,从小处开始,别一上来头脑一热就想搞个大的,这种一般你的热情减退就把你搞沮丧了。

做了就有价值。

这是一个趟坑和追求完美的过程,每一步,都有价值,都可以让你后面的新产品做的更好、更快。

不要害怕失败,要敢于失败,快速验证,快速失败,如果不行,就推倒重来,在刻意练习的过程中,“重开”是一个递归优化的过程,把你自己想象成AI,这就是一个机器学习不断矫正模型准确性的过程。

Work like a machine, Think like a human。像机器一样工作,像人一样思考。

我热衷于玩各种模拟经营游戏,比如《缺氧》、《Surviving Mars》、《文明6》、《Factorio》、《东方帝国》、《全战三国》、《冰汽时代》、《纪元1800》,打开Steam和Epic那么一看,我玩过的模拟经营类都数不过来了,有时打开PC,往那一坐,就是一整天,从早上10点到晚上12点,甚至一天一夜也是有过的。

到我这个年纪,什么游戏都玩过了,享受过了,现在玩游戏都是带着思考在玩,不能为了玩而玩,玩游戏也能领悟到很多东西,比如经济是如何运转的,资源如何调配,系统的稳定如何维持,甚至从游戏中能窥得人性,以小见大,这些东西都能扩充你的思维模型,辐射你对于现实社会的认知。

最享受的就是重开,有时候发现前期规划出了点问题,我会直接放弃可能花了半天的运营成果,直接重开,每一次重开,你能避免很多错误决策,优化物流线路,优化运输管道,优化资源配比,优化建筑布局,优化人口数量,优化作战策略...,看着不断发展壮大的,运转顺畅的,从你手中构建出来的虚拟社会,这种成就感让你乐此不疲。

重开即进步。

做独立产品,其实你最不用担心的就是能力问题,产品、设计还有对理解人和人的需求的能力其实比想象中容易获得,按照刻意练习,潜意识学习的行为模式,你在心里安一个宏观目标,这个目标是那种很远大的目标,得具体,得是一种实现,而非金钱或者物质标的,比如:我要打造一个去中心化的服务引擎。

牢记这个目标,你的大脑会在潜意识中自动收集相关资料,比如去中心化引擎什么语言合适Go、Rust?,Go有哪些优缺点,Rust有哪些优缺点,你会有意识的进行对比,最后经过一番研究调查你发现(不要专门花时间去研究,看到哪学到哪),Go的GC Heap问题让Go没有比Rust更适合作为基础设施软件的条件,Go淘汰,确定Rust,这样一个潜意识的学习、筛选信息的过程。

每隔一段时间回顾一下你新习得的知识和技能,看看如何运用到你的目标上,如果有想法,一定要立刻把它记下来

最后可能你的想法大部分都没有实现,但在这个过程中你学到了很多。

真正伟大的产品,都是日常生活中无数个想法和灵感的相互作用产生出来的,每一个产品在正式开始开发之前,可能需要上千次信息的收集和筛选。

如何从零到一打造一款产品,以todo为例

感受痛点,寻求解决方案

需求分析阶段,罗列功能。

每一门框架的模版,都是todo,那这里我也以todo为例。

首先分析你要的做的产品,它是什么,它从哪里来,要到哪去?

研究todo,就不得不提一个概念——“GTD”,GTD是“Get Things Done”,把事情做完(好)的缩写。如果你研究GTD的相关文献,你会发现,讲todo驱动概念的书籍和概念数不胜数,如果你没时间或者兴趣去看那些论文,那么用“第一性原理”来分解GTD,GTD的目的是把事情做完,把事情做好,那么把一件事情做完需要什么条件?把一件事情做好需要哪些条件?

这里插一段关于我与GTD的经历:

从初中开始,每天早上来到教室之后我会用铅笔在课桌上右上角把今天要做的事情列成一个列表,做完一件事情就用橡皮擦擦掉一个,如果多的话,就会进行分类,对于一个比较复杂的事情就做任务分解,对于一个比较复杂的事情就做任务分解,分解成粒度比较小的任务,执行起来难度更低,但总任务是不变的,这个习惯一直持续到高中毕业。

记录,执行,擦除(回顾),每执行一遍这个过程,你会获得一点点的成就感,不要小看这一点的成就感,它会驱动你一直往前走的,而且是有计划的走,这对于做一些比较大的时间周期比较长的比较困难的事情,是必需的。

回到正题,GTD的核心其实满足上述功能就能构成一个MVP(Minimum Viable Product:最小可行性产品)了:

  • 支持记录todo
  • 支持勾选todo
  • 支持todo分类
  • 支持子任务
  • 支持计划任务

事实上,上述功能市面上流行的todo应用都能够实现,那我要做的todo有什么是上面满足不了的呢,头脑风暴一下:

  • 互斥任务
  • 分类任务
  • 多Tab
  • 任务列表支持添加参考资料
  • 更加丰富的任务详情
  • 强大的文本编辑器
  • 流程驱动
  • 看板
  • 白板
  • 项目管理
  • 去中心化数据同步
  • 番茄钟
  • 表单和表格
  • 开放api
  • 支持调用api

可能有人会提Notion,Notion不是以GTD为核心的应用,它以内容为核心,不符合我要的GTD驱动内容的需求。

下面简单讲一下互斥任务。

互斥任务

这可以说是这个产品最大“特色”,事实上,我记录todo的时候,对于一件事情,往往会有很多中实现方式,这些方式都是做这一件事情,以Microsoft Todo为例,如果想要记录这些实现方式,要么放在最外层同级任务,要么放在子任务里,或者放在那令人难受的备注内容区(2亿刀做的产品,这种细节像坨Shit),但是这些都是不足以表达任务间关系的,在创建任务的时候,应该可以勾选一个选项,是否为互斥任务,勾选之后展开一个互斥任务列表,支持添加其他互斥任务,渲染的时候就会给这些互斥任务染上同一种颜色,并都放置在同一级别,这些互斥任务中的任意一个check了,其他的任务会自动进入关闭状态。

这里其实涉及到了一个概念,互斥任务,不仅仅有checked、unchecked,还有一个closed状态,这个closed状态是不可修改,只有互斥任务中的已经被checke的任务被uncheck的时候,其他任务才会从closed状态转变为unchecked状态。

这么一搞,是不是复杂度瞬间上了一个量级,根据我做B端产品的经验,业务复杂度有时候是业务包容度的体现。

做应用要做到,简约,而不简单。简约是指让用户用起来没有心理负担,不需要学一堆东西,所有操作都是基于用户习惯的;有时候一个个性化功能会导致系统复杂度指数级上升,但这个功能用户可能用的并不多,但却很必要,这个时候反过来想,是不是正是因为复杂度高使用场景才越多,才对用户更友好,产品更有价值呢?

放几张效果截图:

前端有边界,但人没有——从零到一打造一款产品

前端有边界,但人没有——从零到一打造一款产品

还有很多细节,一股脑的讲了,写太长也没人愿意看,慢慢更新,这个系列将一直更新。如果有关于产品的更多想法,欢迎发展评论区或者找我单独探讨。我会在产品完成todo模块时发布MVP,开放给大家使用。

后续文章

  • 如何打造一个产品的品牌
  • 竞品分析
  • 商业化路径
  • 技术选型
  • 搭建应用框架
  • 全局功能模块的设计
  • 实现一个最简单的todo
  • 在todo中支持多Tab、无限滚动和任务分类
  • todo支持互斥任务
  • yjs/pouchdb/rxdb/sqlite多端同步实践
  • 基于低代码技术的块级编辑器的实现
  • 实现一个别具一格的番茄钟 ...
本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!