工作中如何协作分享

极客时间发起的一个分享, 主题是: “在工作中,如何能更好的与他人协作?”。

战略上端正思想

合作是双赢

除了极少数特定领域的数学问题, 其他都要靠合作。 合作是各自发挥竞争优势, 最大化收益。

这是一个科学定理, 是经济学能证明的。

平等对话

不要因职级、职位等产生心理上的不平等, 颐指气使别人。

当然, 平等不代表每个人投票权一样, 技术选型时候一个技术架构师能跟一个新入职的新人按 1:1 投票么。 这种情况, 听专业人士。 但是“专家”可以尽量平和的阐述清楚自己的选择原因,给新人一个学习机会, 也会让新人更信服, 做起事来更顺畅。

兼容并包

作为程序员, 经常都会因为编程语言、IDE、编辑器、操作系统等争吵。

我还见过有同事因为中医的问题争吵起来的, 也有因为八卦(是乾坤八卦这个, 不是八卦新闻)而翻脸的。。。

子曰:“君子和而不同,小人同而不和。”

各种宗教里面我比较喜欢佛教, 因为佛教更多元化更包容, 不会因为你信奉的是 X 佛或者对某段经文理解跟我不一样就非得烧死你。 其他宗教。。。

坦率沟通, 对事不对人, 但是要讲究方法

要照顾每个人的感受, 有些人性子比较直和急, 说话比较冲, 容易伤害别人,然后自己还不知道。 并不会因为你说一句, “不好意思, 我这个人性子比较直,不是针对你, 你别介意啊”, 对方收到的伤害就能完好复原。 并不是说直不对, 当然也不是说被说的人就小气, 可能只是你俩性格不合。 但是其实你可以做得更好。 另一方便也建议大家强大自己内心, 不要太玻璃心。

大局观

不想做 X 的 Y 不是好 Z。 XYZ 可以是市场、产品、设计、前端、后端、运维、测试等等整个环节中的所有角色。 不想做 产品 的 前端 不是好 运维。 Full Stack 思想。

哪怕自己做的事情是一个螺丝钉, 你也要知道自己是用在整栋大楼的第几层的哪个位置。

战术上注重细节

尽量充分发挥各自的优势

各自发挥竞争优势, 这样才能达到最大的双赢。

积极主动

  • 主动汇报自己的进度 通过待办事项、日报、群聊等都可以

  • 主动询问合作方的进度

  • 遇到的问题及时反馈出来 提早想解决方案, 不要等到最后一天才给 leader 说遇到技术问题解决不了。 很可能有经验的人, 几分钟就解决了的事情, 自己埋头苦干要花很久时间。 这是浪费, 浪费团队的时间, 也是在浪费自己的生命! 当然, 能 google 到的东西就尽量不要去麻烦别人, 请教之前最好自己先查一下。

责任明确

会议内容, 包括接口设计、设计文档交付时间等等都文档化下来, 比如群邮件或者内部 wiki 等

工具

  • 文档管理工具, 可以用一些 Saas 服务, 比如 Tower、石墨文档等。 大的文件也可以用云盘等。 当然, 如果公司资料比较敏感, 可以自建 wiki 或者用 git 管理。

  • 邮件

  • 群交流工具 发现邮件、文档 wiki、bug 等各种工具, 都不如微信、QQ 方便。 当然, 重要的事情最好还是文档化、邮件化, 便于管理和知识沉淀。

  • bug 管理工具

  • API 管理工具 用过http://rap2.taobao.org/, 还可以

学习方法

经常都说沟通要站在对方角度想问题, 可是如果你没有对方的知识背景, 甚至连对方说什么都听不懂, 怎么能站在对方的角度想问题呢? 所以强调,要有 Full Stack 的思维。 但是术业有专攻, 人没有那么多精力什么都学都会都自己做, 不然就不需要合作了。 我认为学习分两种, 一种是自己安排长时间系统性地学习知识(很可能跟本职工作无关), 一种是为了解决工作问题的学习。

第二种很多, 比如要学习 React.js 框架啦, 熟悉 VSCode 的快捷键啦, Chrome 调试工具啦, ES678, Typescript 啦, 遇到的某个 bug 去查资料啦。 这种层面的学习, 我建议公司用啥你学啥,比如公司用 Vue 那你就学 Vue, 公司用 TS 你就去学 TS, 用到 websocket 就去学 websockt。

而第一种学习呢, 我的建议是: 学与自己所掌握的知识差异最大化的东西! 学与自己所掌握的知识差异最大化的东西! 学与自己所掌握的知识差异最大化的东西!

比如你现在会 OOP, 那不妨去学习一下函数式编程。 一直在做前端开发, 不妨去了解一下后端实现原理, 包括接口设计、数据库操作等。 一直用 windows, 不如去学学 Linux。 一直写程序, 不妨去看看产品设计、市场营销、心理学方面的书籍。

为什么说要“学与自己所掌握的知识差异最大化的东西!” 因为这样收获最大, 是思想、思维方式的收获和成长。 比如你工作中已经会 React 了, 那你就没必要再去学 Vue 和 Ng 了, 他们的区别没那么大。 你不如学学用 Node.js 写写后端接口, 操作数据库, 或者去用 TensorFlow.js 跑个 AI 算法。 而长期只专注于学习跟自己已经掌握的东西相似的知识, 容易导致思维固化, 限制自己的视野。

精力有限怎么办? 跟人聊, 听君一席话胜读十年书! 以及学基础知识! 数据结构与算法, 网络, 操作系统, 编译原理等等。 而且不要看网上的分享总结, coursera 以及国外各大高校都有很好的公开课, 比如 Standford, MIT、 Berkeley、Harvard 等, 一定要去听大师的课程, 收获最大。 一开始难点, 可能还要克服英语问题, 慢慢一步一步就慢慢适应了。 坚持听完一个课, 哪怕花上 1 年时间, 都远比在网上看各种 blog,各种知乎有用, 比看 1 万篇都有用。 为什么? 因为你学的是第一手知识, 基础原理, 原理通了,自然举一反三。

学习有什么好处呢? 你想想, 当后端说多添加一个字段很麻烦会影响性能的时候, 是说一句“不就加一个字段么, 这都做不了, 你个弱鸡!”有用, 还是说“这个字段的数据可以用 A 表跟 B 表 join 查询, 不会出现 N+1 查询问题, 再加上这样设计联合索引的话就没有性能问题了”来得管用?

前端不需要运维知识? 如果一个页面每天几千万访问量,你多用一张图可能就把公司 server 搞挂了, 或者带宽费用暴涨。 我们以前前端发布的时候, 都要求预申请带宽, 就要求自己根据访问量和页面大小来估计。

同样, 如果公司这个产品就是只要几千人用, 你费尽心思多花两周, 节省 100k 可能就完全没有意义。

问题

1.协作中遇到某些说的比做的多、擅长在领导面前抢功劳的人如何较好的应对? 答: 不用管他, 爱抢功就抢吧, 踏踏实实做事, 收获最多的是你, 老板总有一天会发现你的好, 如果发现不了, 你就把老板踹了。

2.老师,您好,我是一家初创公司的技术负责人。 我正面临 RN 与 Android 还有 IOS 做移动 App 的技术选型,我有 Java 开发和架构经验,略懂 react,希望能得到您的指导,非常感谢。

如果您的团队还在用 RN 开发 Android 与 IOS,那么,目前是两个团队还是一个? 如果是两个团队,那么,这两个团队在协作方面的经验和心得,能否分享一下? 如果已经合二为一,那么,在开发 Android 与 IOS 方面,有没有什么新的心得?有没有推荐文章或者书籍?

离您上次分享(如何用 Web 技术一统三端开发)已经超过一年了,这一年多时间,想必技术已经有了翻天覆地的变化,尤其是前端技术。

所以,我还想请教一下,现在您的团队如果还在用 RN 开发 Android 与 IOS,那么,与一年前您分享的时候相比,是否有了不一样的体验? 我仔细看过《Airbnb 宣布放弃使用 React Native,回归使用原生技术》(https://www.oschina.net/news/97276/airbnb-sunsetting-react-native),但是比较迷惑。

如果想要打造一款跟美团、饿了么一样体量的 App,是否还推荐使用 RN 来开发 Android 与 IOS?假设团队需要从零开始组建。

答: 创业讲究快,天下武功唯快不破。 技术选型的一个重要考虑是, 技术负责人擅长什么, 就用什么。如果你能驾驭 RN,那就用 RN, 你能用好 Flutter,那就用 Flutter。 不用太在意别人用啥, 某 ber 之前还从 Mysql 换到 Postgres, 后来又切回去了, 各种文章分析 Mysql 的优势 blabla, 实际上可能就是换了个 Leader, 他自己更擅长和喜欢 Mysql 罢了。 也要考虑团队建设等方面。 我之前看过有人选用“小众”的 Elixir, 目的就是为了“招人”, 因为他们只想组建一个小而精的团队,用大众化的语言可能体现不出来优势。 至于以后真的到了很大的体量, 可能发现某种技术不适合了, 再换呗。