V2EX 前天 16:01
嵌入式后端模块开发协作中的技术与沟通挑战
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文作者在接手嵌入式管理后台项目后端模块开发时,遭遇前端同事对其API设计草案的严厉批评。作者总结了对方关于“任务优先级”、“产品思维”、“专业性”及“协作”等方面的质疑,并阐述了自己对数据结构拆分、跨组件状态维护、后端冗余设计及技术栈选择的观点。文章还探讨了产品原型设计的重要性、理想主义在职场中的局限性,以及如何有效沟通和处理人际关系等问题。作者在文末补充了关于原型缺陷、API命名规范和安全性的具体细节,寻求技术和为人处事方面的建议。

🗂️ **API设计理念的冲突与权衡**:作者认为前端原型中存在反模式,倾向于将状态、配置和控制指令拆分到不同的API子路径,并主张由前端调用其他API处理跨组件状态。而前端同事则倾向于将组件信息整合到同一JSON schema,后端按需提取字段,并在组件API中提供依赖信息,不预设扩展,认为产品有需求再改。这种设计理念的差异是本次冲突的核心,涉及对项目复杂度、可维护性和未来扩展性的不同考量。

🚀 **沟通协作与职场现实**:作者认为自己已在会议中告知前端接口规划,但仍被指责协作不到位,这反映了职场沟通的复杂性。文章指出,在原型设计阶段就应审视时间和交互维度,并强调产品经理在项目中的关键作用。作者反思了个人“理想主义”在职场中的局限性,以及如何通过市场反馈让产品迭代,而非一味追求“做对的事情”。

🛠️ **技术实现与工程实践**:作者强调在嵌入式场景下,C/C++/Rust的实现一致性和向前兼容性比早期Demo更重要,过度设计可以避免未来高昂的重构成本。而同事的API设计则更侧重于快速响应当前需求,认为“产品有需求再改”。此外,文章还提到了同事API命名翻译问题、HTTP明文传输密码等具体的技术实现细节,以及原型中缺乏分页、排序、过滤等对用户体验的重大影响。

💡 **寻求建议与职业成长**:作者在经历此次技术与沟通的挑战后,寻求关于技术设计(如API设计、数据结构、工程实践)和为人处事(如沟通技巧、人际关系处理、职场心态)方面的建议,期望能从中学习并改进,以更好地适应职场环境和项目需求。

背景:leader 最近接手了个嵌入式上的管理后台项目,架构比较古早 Static Web <-> Nginx <-> CGI (C, via Unix Socket) <-> Backend Application (C) <-> Modules 。同事抢了前端部分的工作,我分到了和储存系统相关的后端模块。评审完原型后就开工了,我写好自己模块前端部分 API 的草案后,请前端的同事先帮我 review 一下,结果被怒批了一顿。

从对方比较尖锐的评价里我大概总结出以下几点:

对方观点:

    我不会做项目,完成任务优先级第一我不是产品经理,不要替产品经理操心我是学生思维,抓不到项目重点,写出来的东西不专业他看不懂(用不惯企微文档,加上有些术语想不到中文的名字, 草案就先用 md 写了英文的)我协作不到位,我写这部分前端接口没提前通知他(事实上一起开会时我不仅说了,还把规划写在白板上了)

对方理由:

    他也写了这部分 API ,比我的简单很多;我的命名不符合他的规范(这点在 review 前就提醒了,我的出发点是先确定数据结构上有没有分歧,之后命名样式一定会按照他的要求改好)他自称写过很多爬虫,也写过前端(他本职做 AI 算法的,211 硕)不能反映到前端原型的字段上就别加,不要自作聪明以为其他人没想到一年前上司曾批评过我过度设计,效率低

事后也虚心看了下他写的 API ,这里仅以我的视角总结一下他的思路(因保密协议就不贴代码了):

    前端页面下一个子组件对应到一个 endpoint ,不再分级,组件全部信息放在一个相同的 JSON schema 里就好根据请求类型,后端自动去 request payload 里找需要的字段用或选择性更新 response body 里的部分字段对于一个组件内部依赖其它组件信息或状态的情况,后端应该在这个组件的 API endpoint 里也提供不假定某个地方需要扩展,不加冗余信息,产品有需求再改,总有办法能在现有接口上承载起新需求(顶多可能会让接口变得奇怪)

下面说一下这部分我的观点(个人职场新人,非 CS 专业,目前也就做做 embedded infra ,这方面可能不专业):

    前端原型里部分组件 anti-pattern 的迹象很明显,一个模块里揉合状态信息、配置信息和控制指令,我倾向做 decomposition 拆到该 endpoint 的子路径里做(我很难接受前端把这种模式通过 API 扩散给后端)跨组件的状态信息,前端这边去调用对应的其它 API 处理,我的组件接口只维护生命周期在我模块内的信息在后端仅读 payload 的数据结构上做扩展冗余,及 response 里加一些未来可能用上的信息,不会对前端解析处理增加太多负担(私有 C/S 场景也不必拮据带宽成本)我的模块 leader 限制 C/C++/Rust 实现,一致性和 forward compatibility 比提前出第一阶段 demo 重要,未来有新需求需要调整数据结构或者实现时,改起来熵太高(后端规模远大于前端 / 前端 JS 解 JSON )

其它的一些想法:

    在设计和评审产品原型时,从时间和交互维度审视十分重要(这次其实原型就有问题)产品经理几乎完全决定了一个产品的命运,很多时候向前端开发推进,需要先让产品经理认识到这个设计有问题(直接告诉前端要多点工作量可能挨骂)理想主义在职场很难行得通,某种程度上我发展得的比我同事差(比较看 leader 和项目的 context 就是了,这点确实我做得不好)即使我的主张合理,说服了大家做对的事情往往得不到任何好处,分外的事情,让市场和用户差评教产品做事就够了(自由市场也可能首先打我的脸)和人交好很难,这件事看出同事应该是对我有不少意见,但是自己实在想不到哪里得罪了人家(感觉很多时候我已经比较注意了,比如有些会影响到大局的细节问题在评审时我想提一下,但觉得在那么多人的会上说可能不合适,毕竟我不是产品也不是设计,leader 也没开口,也是后面单独找产品旁敲侧击让他意识到有问题)

也想听听大家的建议(比如技术方面或为人处事方面)

嗯,再补充一些细节吧:

    产品经理能 vibe coding 把原型网页做出来(虽然很粗糙),我模块的原型有问题要改结果一个星期还没改好,于是定接口时同事拿有问题的原型跟我对峙(产品想学习我理解,不过既然项目赶时间,老老实实上个 Figma 或者什么的不好吗)
      原型里显示一个可能包含几十万个文件的文件夹没有分页,不加排序、过滤和搜索的情况下,期望用户能一下子找到自己想要的文件原型过于简化,将操作/状态隐含在数据对象内,比如用户想临时关闭日程功能,做法是把之前辛辛苦苦写好的日程都删掉
    同事写的 API 规范中,很多字段应该是谷歌翻译的(概念不合适且有不少拼写错误),以及他开始打算 HTTP 明文传输密码,后面其他人说不安全换成了传密码的 sha256 (不加 salt 和开始有什么区别...)

(应该还有不少,就不浪费社会资源吐槽了)

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

嵌入式开发 API设计 前后端协作 技术沟通 职场新人 项目管理 原型设计 工程实践 Embedded Development API Design Frontend-Backend Collaboration Technical Communication Junior Professional Project Management Prototype Design Engineering Practices
相关文章