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

176 天前
 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 还无法替代你

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

7837 次点击
所在节点    程序员
51 条回复
yoiteshaw
176 天前
有一种似曾相识的感觉,罗永浩:现在的手机厂商都是方案整合商罢了。

所以新入场做手机的如果也是新的方案整合商,确实是在供应链掌控成熟的老前辈面前没有什么竞争力,更别提是个体进入创业了。

OP 想表达的是类似的意思吗?
GeekGao
176 天前
遭遇挑战 、解决问题、 获取新技能点 vs 无挑战 、无问题需解决、无新技能点
xueling
176 天前
行业发展健全的同时,也会让程序员的”工具人“属性愈加明显。越来越多的程序员都是没有基础的,而只是一种或几种的工具运用者,既不了解某种技术的由来,也不能预判未来发展的走势。程序员还是应该更多的保持思考,否则真就成了工具人了。另外,lz 也可以了解一下我的数据统计项目: https://github.com/xl-xueling/xl-lighthouse
jones2000
176 天前
楼主太悲观了。
就现在这个大环境,能少上一个插件,少一个微服务就可以节流。 优化客户现有框架,去掉冗余的插件,减少运营成本,才是硬道理。这些都要有深度的技术和业务能力才可以, 不是几个毕业生能干的。
arloor
176 天前
对于独立开发,技术是最不重要的吧。
iloveoovx
176 天前
在很多年前看到有人用炼丹来描述机器学习时我的感觉就是,很快,神话时代将再一次来临。

数据量、规模、复杂度都在指数级增长,很快将超过唯物机械式理解的智力所能承载的极限。对于这种情况,效率最高的方式是相信直觉 - 当然,并不是一无所知的情况下偷懒求神问卦,而是无数努力尝试后带来的直觉,就像把 AI 当作一个人,你想要了解它,通过不停和它聊天带来的直觉比你尝试去了解它的模型逻辑细节效率高太多。

神话时代也代表着各种神灵的现世降临,因为每个公司,每个团体都将加速让越来越多的判断交给 AI 处理 - 一开始只是作为参考,但当 AI 能分析足够多的现状和变量,提供越来越多的可能方案和可能发展,正确率越来越高后,在市场竞争、效率压力等各种动态发展趋势压力下,AI 的比重只会越来越高,最终把某个 logo 所代表的集体意识实体化,成为现实意义上的神灵。而且就像荣格说的:从来就不是人有想法,而是想法有人
james122333
176 天前
个体开发者就是要写自己的东西
summerwar
176 天前
我承认人应该精进技术,但是也得遇到了才能去精进,知道如何去精进,总不能凭空精进吧。

我老妈经常说农民的天职就是种好地,我说她瞎扯,农民的天职是赚钱照顾家庭,如果土地不能让你吃饱饭,你种得再好有什么用。
ruanimal
176 天前
任何技术都是有成本的,很多新技术就是用更多成本解决更大的问题,个人追这些技术是很没有必要的
Znemo
176 天前
一个软件能让开发觉得自己不再重要,那这个软件在这个领域还挺成功的,毕竟它是做给你老板的,而不是给你做的。
Felldeadbird
176 天前
极致追求技术需要天赋,时间,资金等支持。
大部人能够做好技术搬运工作已经完成既定目标了。

这 2 年 AI 的出现,让搬运的方式从搜索引擎 到 AI 转变了。乐观点地说,以前你搜索引擎找不到的问题,AI 现在可以帮你解决。甚至还可以助力你更容易钻研技术上的深度。
abcbuzhiming
176 天前
这个问题,10 年前其实就有文章提到:那篇文章是这么说的,现代系统变的越来越复杂——它举例是最新的民用航空飞机,说再顶尖的工程师也无法窥整个飞机的全貌,只能关注顶层总装,分系统的细节必须由其它人完成。这是必然的事情,这篇文章还很忧虑的说,有没有可能会有一天,整个系统的复杂程度,会复杂到哪怕只关注顶层,人脑也无法理解呢。

所以你的担心是客观事实,但是也没必要焦虑,因为这是这个时代所有工程师都必须面对的问题。
至于你说的,如何评估一个系统能够承担的工作量。这个问题更加复杂一些。因为现实中的业务是千奇百怪的。单一条件下的任务说测试出来的负载量很难适应更复杂的环境。所以你如果想挑战你的系统到底能胜任多少任务这个问题,除了做实验没有其他办法。也就是说这个东西是试出来的。哪怕是官方给出的,他自己的测试都不一定适应你所使用的使用环境。
drymonfidelia
176 天前
九百万条,这么少的数据怎么存不行?我们小公司注册用户都有一千多万(虽然有一部分无效用户)
jeesk
176 天前
@Felldeadbird 这更加不可能了,ai 的搜索也需要资料。 如果这项技术没有太多的资料, 或者说技术太小,ai 也无法帮助你。
LiuN1an
176 天前
技术市场更替,这不就和当年 php 一个理么。大家各司其职,想做应用就积极拥抱这些新时代的 infra ,想做底层就直接去研究底层。在市场轮换结束时,所有上个时代的中间岗位都会面临失业。程序员能做的就是不要固步自封,特别是别陷在所谓”底层技术“的术语里,那才是真正的孔乙己的长衫。
ByZHkc3
176 天前
建议多关注下代码之外的东西,业务不挣钱,你代码写出花来都没用。
dcoder
176 天前
@hh54188 作为个人开发者, 就不应该去研究使用 K8S, NextJS
levelworm
176 天前
个人开发者本来也不用琢磨技术啊,产品更重要。但是对于其他人来说,系统编程的确是条沟濩了。
darkce
175 天前
@arloor 技术是基础,能用就行
afxcn
175 天前
如果你想通过技术给自己找点安全感,我认为方向就是错的。

安全感不来自技术,而是来自话语权。

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

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

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

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

© 2021 V2EX