我最近逐渐感受到,作为个体开发者在拓展技术深度上越来越难了

140 天前
 hh54188

原文发布在我的网站上

难以复刻的大问题

第一个麻烦是现代框架解决的是“大”问题,而个体开发者遇不上“大”问题

早些年如果你想从头学习一门前端框架,比如 BackboneJS 或者 EmberJS ,一定绕不开从构建一款 Todo 应用开始,它能让你直观感受到 model 与 view 之间是如何相互协作的。现在我们依然保留同样的传统,只不过它不在以 Todo 的形式存在,但依然会出现在文档的 Quick Start 小节中,企图用最少代码最大程度上展现技术的特性。

问题在于早些年前端代码只是作为静态站点点缀般的存在,例如控制交互,填充内容——看看这段淘宝平台 09 年的代码你就会理解我在说什么。而如今 JavaScript 代码已经可以做到接管编译、路由、渲染,将应用端到端的呈现出来。最重要的是,它已将处理复杂问题的能力内置其中。然而这些复杂问题,从高并发到匪夷所思的业务场景,Quick Start 里的 demo 无法展现它们的全貌,个体也难以模拟。

K8S 就是一个最好的例子。

去年抱着学习的心态,我把我所有部署在 VPS 上的 side project 迁往 K8S ,甚至连应用的部署方式也替换为了 ArgoCD 。但实话实话这不是一笔划算的买卖,因为从结果上看,替换为 K8S 之后花费的计算资源更贵了,维护成本(脑袋里需要记住的东西、涉及到的步骤和需要持续维护的环境)也水涨船高。原因在于当架构简单到仅需单个 cluster 就足以支撑的时候,K8S 的边际成本无法被均摊。所以吊诡的事情出现了,你发现体感上新款 K8S 还不如旧款 PM2 好用。

可不可以不关心大问题,全权委托给框架,我只管把 kubectl 命令全文背诵就好?——不行,因为 Copilot 永远记得比你滚瓜烂熟。面对 AI 的挑战,程序员无可避免的要将角色从执行者转变为决策者。

说起来有些玄学,设计方案吃经验,准确来说是“由奢入简易”:解决过大问题之后回过头解决小问题很容易,反之不成立。虽然理论上无数的工程师有无数踩过的坑有待分享,但考虑到 99% 的人并不会把这些经验整理成任何形式的内容分享出来,所以坏消息是经验还是要依靠自己打怪升级获得。

设计方案中颇为重要的另一点是定量而非定性分析。

这是另一个例子:我的播客广场网站至今已经抓取了超过了九百万的播客数据,我是应该继续使用 MySQL 作为播客统计工作的数据支撑,还是应该转投 Databricks ?我无法回答,因为我对九百万数据体量的理解是空白——这是我最近开始折腾 Databricks 感受到的最大疑惑。当下我可以很轻易的找到资源学习 MySQL 以及 Spark ,但我面临的问题不是如何编写他们,而是什么样的场景适合编写他们。这些经验,是我一个人在家里造不出来,也是课本教不了我的。

说一点由此衍生出来的我的有趣观察:判断程序员(甚至是产品经理、项目经理)资深与否的方法之一是观察他对于数值的理解。8 个人的团队多还是少? 50 毫秒的 MySQL 查询时间快还是慢?在将浏览器加载资源耗时提升 1 秒之后留给我的空间还有多少?

They won’t fear it until they understand it. And they won’t understand it until they’ve used it.——电影《奥本海默》

理想的技术决策是用理性表达代码——这么做是因为我选择这么做,而不是我只会这么做,更不应该是我觉得该这么做

大问题带来的挑战不仅仅是规模这件事本身,还有体量产生的副作用:拥有十万行代码应用的难点可能是混乱的代码组织和依赖关系,也可能是无处不在的坏味道,但一定不是框架本身。在我的工作经历中这是常态,同理入门教程无法带给我们这方面的训练。

你不再重要

第二个问题是,研发也许无需我再亲力亲为。

以 NextJS 为例,我对它的赞叹来自于两点:1 )完备的功能设计; 2 )井然有序的文档。前者依赖的是对框架职责和前端开发的充分理解,后者需要投入的维护成本和决心也不容小觑

由此产生的副作用是工作变得无聊起来,当下需要实现或者是未来需要考虑的,都可以在文档中按图索骥找到答案。以至于有时候你不得不怀疑某些 NextJS 功能被过度设计了,例如它极富层次的缓存机制。但我宁愿相信本质上这依然是我有限的眼界与大方案之间匹配错位造成的。

更重要的变化在于,十年前如果我们想要实现等价的缓存效果,尊循的是理解、设计、实现的实践;而如今 NextJS 已经为你实现,甚至 LLM 可以代替你理解方案细节,我要做的仅仅是提出问题做出选择即可。

同样的情况还发生在上面所说九百万数据的例子中,再更早之前我考虑过使用 Big Query 进行数据统计,但问题在于如何将存储在 Digital Ocean 上的数据同步到 Big Query ,是用 replica 还是日志?如今入坑 Databricks 之后利用 Azure Data Factory 无需编程就可以完成上述需求,但至于它是如何实现的我依然一无所知。

你以为它们的“魔爪”就此为止了?这才刚刚开始——当下应用和框架的关系已经悄悄发生了倒置:不再是应用去集成框架,而是应用被内嵌在框架中

如何理解我所说的内嵌:开发一款应用需要什么? web 框架、登录、存储、缓存;兴许还有流水线、测试环境、日志监控等等。在很长一段时间内这些是繁重且琐碎的工作,依赖团队去完成,而如今它们是市面上 BaaS 甚至是框架标配,例如你用 Deno 写完应用之后不用担心部署在哪,它们提供额度范围内的免费 hosting 服务,正如 Vercel 之于 NextJS 。下图是 supabase 的卖点,其他的 BaaS 也都大同小异

当然前提是你需要植入 SDK ,甚至使用指定的框架进行开发,也就是说只有接受平台的规训,才能发挥平台的最大潜能。这就是我所说的嵌入,你只不过是它其中的一环。

纠正一下,我不是在抱怨没有源码可以阅读,而是每当想到铺天盖地的预制菜做量大管饱,还性价比高,我做饭的乐趣就荡然无存:因为如果我选择亲手去实现,那么可以预见接下来代码产出中的大部分,已经被无数人实现过无数遍了,甚至我自己也驾轻就熟。那为何费时费力的和自己过不去呢。虽然我知道在大公司造轮子依然是正义,虽然我知道技术深度避免被 AI 取代的核心竞争力,但现状依然令人沮丧。

于是我发现自己处于一个非常尴尬的位置,向下专研技术的动力在减弱,向上没有太多的大问题有待解决,大部分时候我像是一个方案整合商。

答案在哪

我不知道该如何回答这些问题,这些年还有很多变化在潜移默化的发生,例如我们发现有客户已经在利用低代码构建大型应用。最终团队的协作方式,工作流会怎么被这些变化塑造还没有人知道,震荡在持续中。但我坚持认为 AI 还无法替代你

至少有一件事是板上钉钉的:去拥抱它们,学习它们,观察它们。出路在探索中发现,而不是对它们视而不见。

7721 次点击
所在节点    程序员
51 条回复
yb2313
139 天前
'当然前提是你需要植入 SDK ,甚至使用指定的框架进行开发,也就是说只有接受平台的规训,才能发挥平台的最大潜能。这就是我所说的嵌入,你只不过是它其中的一环。'

这不是好事吗? 在别人的框架下开发不好吗? 如果没有任何框架, 开发会很痛苦吧, 我认为
Immortal
139 天前
写的挺好
博客不支持 RSS 吗
wetyq
139 天前
技术不值钱,及格就行。跳出程序员的思维看待问题,解决问题,提升综合实力才是最重要的
kyznever
139 天前
技术的深入需要对应的业务场景
UIXX
139 天前
说说个人理解。

拓展“demo 之外的技术深度”,本来就是靠业务推动的。做小众产品的人觉得大框架不好用,正常,本来就是不同赛道的东西,适应过程能不发生碰撞吗?
[有问题的是“技术也有贵贱”这种全民意识],为什么都在学 K8S 这些玩意儿?因为大公司、所谓的牛人自筑壁垒鼓吹的是它,教培媒体贩卖焦虑鼓吹的是它,业界群体口耳相传不明觉厉的也是它,很少从实际出发去讨论它的价值。当我们脱离业务需求去试验它时就会有疑惑:它好像不能提升效率解决问题。
把这层矛盾转移到“探索技术深度”上无异于“锤子肯定是好用的,但就是缺少钉子,早知道多买点钉子了。”从务实的角度,最优先要考虑的应该是“有没有东西需要修补”,“要修补的到底是瓦顶还是衣服”。

“大问题”实际上是“规模业务问题”,从个体开发到规模运营,就是事物发展的递进过程。个体开发者起步时本就不应该遇上“大问题”。如果是,那说明此时的 IT 技术开发正处于初级阶段,程序员需要花很多心思去解决原理性的涉及基础学科的问题。大框架屏蔽底层,不是架空了程序员使其脱离技术深度,而是加速了程序员的跨界进程,让这个群体有更多的生产力释放到对人、对钱的关系中,从程序员生存的角度看不是坏事。

其实 AI 就是多元社会带来的其中一个挑战,它很现实地提出程序员群体的恐惧:“只拥有单一特长的人难以避免“抗风险弱”——“被操弄”——“工具化”诸如此类渐进矮化的历程。”
ixoy
139 天前
既然是方案整合商,发现问题,找到解决方案才是关键。
把技术当成方案粘合剂。
等哪天生活无忧闲暇时再考虑技术深度的自由探索。

其实技术深度的扩展也需要真实业务提供场景和验证的机会
yuwen4012
139 天前
人类发展史也是工具进化史,所以我认为这种担心是多余的,核心是解决问题的能力,不在具体的手段如何
wizzer
139 天前
举例:小电子商城,你没有成品定制开发要 1-2 个月时间,报价 5-6 万,而别人有成品简单改造即可,报价 5 千。
yunpeng2015
138 天前
没必要过度“焦虑”,也没必要过度优化“屠龙技术”,最好的技术是满足你需求和场景的技术,选择合适的工具、技术来快速解决业务问题就好。。 例如:K8S 之类可能很多时候不适合个人开发者的项目。。
chenliangngng
138 天前
技术的学习,来自于好奇心,而不是有用

如果赚钱是有用的话,多研究公司业务比纯卷技术有用多了

不要刻意学用不上又不想学的一个精美玩具,因为那种行为不过是被焦虑驱使的随大流
junefan
138 天前
作为一个小公司的职员,我的感觉和你是一样的,我现在觉得技术不是重点,重点是业务,业务本身涉及逻辑,原理才是我们应该关心的,有些人关心性能,是因为性能在他们的业务里很重要,有些人关注组件的通用性,是因为他们的组件是给很多不同的团队做的,而类似像我这样的码农,做着 curd ,也没很多学习高级技术的机会,是因为公司本身的业务如此,我觉得,关注新技术这点,更多是为了进入更好的公司,应付面视,或者你需要给团队定技术方向,普通人不用太过关心,我觉得花时间理解业务,加入新业务,发现新业务,成为新业务里的专家更有意义。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1055455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX