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

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

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

7832 次点击
所在节点    程序员
51 条回复
commoccoom
174 天前
8 个人的团队多还是少? 50 毫秒的 MySQL 查询时间快还是慢?在将浏览器加载资源耗时提升 1 秒之后留给我的空间还有多少?

这一段太感同身受了,现实就是,我不知道该选择什么,或者我认知之外是否有更好的选择。而这又带来了焦虑。
9
174 天前
这是两条路,一个是技术专家的路线,一个是将东西整合的路线
DeWjjj
174 天前
就算是阿里的前端老大,肯定也没法说做到任何东西都自己来弄吧。
人各有侧重,而且本身前端框架就是一年一年堆出来的,能花一个月时间给他源码弄明白逻辑就已经很不错了。
非必要不研究,除非你准备从事工具链开发。
spiffing
174 天前
要学的东西非常多,同时又觉得很难做一些选择,尤其是遇到系统升级。
另外学习成本也变得很贵,DevOps 要求程序员有更宽的知识面,既要又要还要 * N
opengps
174 天前
前文直击心灵般的存在,赶紧看看末尾,居然没有连接,没有卖课,没有 v 我 50
这感受简直是从自己脑子里出来的
sun2920989
174 天前
面对 AI 的挑战,程序员无可避免的要将角色从执行者转变为决策者。

很有意思的一句话.另外个人拙见,一些程序研发领域正在脱离原本的简洁明了而披上玄学的外衣.
比如大模型,大模型给我带来了非常大的生活和工作效率提升,但是却总让人觉得这是一个巨大的黑箱.所以跑模型也被称之为炼丹(笑
举个例子比如图片 AI 消除路人功能,消除路人时也多消除了主角的一只胳膊.有什么研发人员可以立即定位并且精准解决吗.我想应该是没有的.都是对相关参数进行各种调整和阈值设定.
taine
174 天前
除非是研究技术,更多尽可能多关注解决实际需求和问题。
jonsmith
174 天前
我几乎在面向 AI 编程,复杂的代码、sql 查询等都交给 chatgpt ,并不是不会写,只是这样更高效、更方便。

技术总是为了解决实际业务问题,选择更高效、廉价的技术方案,才更有竞争力。看过很多公司用着很 low 的技术,赚着丰厚的利润。

作为开发者,可以有技术情怀,去专研、探索更深的技术。但是面对实际业务,该如何选择合适的技术方案,就要思考下了。
Giannis
174 天前
产品能用就行了,不需要纠结于技术
grayfox
174 天前
个人觉得作为个体开发者在拓展技术深度不是那么重要,重要的是如何构建一个好产品
suuuch
174 天前
这个真实,我曾经也为此焦虑了很长一段时间,各种看书、学习、报各种课程。
最后收效其实一般。。
我现在只能把这个问题归结为广度和深度的问题,这两者是相辅相成的。

当单独追求深度达到一定程度时,会觉得自己会的技术栈过于单一,没有足够广袤的视野,明明有成熟的方案,结果发现自己在哼哧哼哧的从头写,结果还不一定有别人的好。

当单独追求广度的时候,又会觉得自己的技术不够深入,很多原理不清楚,遇到特殊问题的时候很抓瞎。

我给自己的最后安慰就是,深度是需要的,广度也是需要的,两者相辅相成,目的是要形成自己的技术知识体系。
这一体系是为了帮我理清各种技术栈的优劣,形成一套客观的评判标准和架构思路。

比如说按照项目管理的角度去思考技术带来的风险和价值,用时间、质量、成本去评估自己的架构设计是否合理。

对于技术优化方面,重构这本书里面有一句话 “过早的优化是万恶之源” ,追求性能的时候加上这句话看看。。

对于评价一个数据库的优劣的时候,先看看评价指标有哪些,再用 docker 快速模拟一个环境,横向对比不同的数据库,把模拟的场景的尽可能贴近项目中的实际场景,然后对比看看。。这样大概能自己一个心里预期。。
Martens
174 天前
不要为了升级而升级,系统不出问题就不动它/doge
Steaven
174 天前
产品能做出来卖出去,才是硬道理。前司 10 几年前开写的产品,后端还是 php5 ,前端如文章说的 backbone.js ,但是不妨碍它被世界 500 强的公司购买使用。
NightFlame
174 天前
@suuuch 我还在焦虑中
suuuch
174 天前
@NightFlame 看看工程类的书,纯看技术类的解决不了焦虑的问题。像项目管理相关的,软技能 这种书,然后一些市场营销之类的经典书籍都可以看看。。看多了就会觉得,技术之外其实还有更多的内容要了解。。。
th3ee9ine
174 天前
8 个人的团队多还是少? 50 毫秒的 MySQL 查询时间快还是慢?在将浏览器加载资源耗时提升 1 秒之后留给我的空间还有多少?

这段话,最近贼有感触。最近系统因为接入的服务越来越多,调用量上来后,服务的性能问题一下子暴露出来。之前对量的问题没有一个大概的概念,现在对于某句 sql 大概是否会产生慢 sql ,拖垮数据库,有了一个大致的判断,这种事情在你没有经历过,是真的很难有一个清晰的判断的。就好比你没有吃过榴莲,让你去形容榴莲是什么味道,大概率只能说它很臭吧。
amon
174 天前
很好的文章,诸多观点很有共鸣。

对于普通开发者来说,技术可能不那么重要了,快速应用技术才是关键,尤其是独立开发者。
Mrun
174 天前
现在大部分技术开发,已经变成了没活硬整;纯粹就是为了高速大家,我有一个玩意,很 coooooooool
echoless
174 天前
你想想当年汇编程序员

想想手动挡司机
checkcai
174 天前
大部分项目,瓶颈都不在技术,我想 OP 说的是不可避免的趋势。至于如何应对,也许是不仅要关注技术,还要关注技术之外的事情。

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

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

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

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

© 2021 V2EX