Junedayday Blog

六月天天的个人博客

0%

【每周小结】2023-Week16

Go技巧 - 3个快速提升Gopher编程能力的思维

作为一名长期在一线coding的编程人员,我见证了很多同学的成长过程。我总结下来,成长速度主要看两大方面:

  • 开发团队:包括开发项目、团队氛围等
  • 个人内驱:自己的性格、思维模式等

对我们来说,更有效、可控的方法是调整自己的思维模式,实现快速成长。结合Go语言的特点,这里我推荐3个比较推崇的思维:

抓住问题,深挖到底

Go语言可以算是最简单的编程语言之一了,开发者往往能相对快速地完成开发工作,但机械式的工作很难让人快速成长。这时,日常工作中的“问题”就是一个突破口。

问题有很多种,也很琐碎,比如 调用某个库出现异常、代码发生循环依赖、线上服务突然崩溃等等。如果只是为了临时性地解决,可能花费不了多少时间,但这些问题的背后往往是软件工程的基本问题,是一个很好的积累过程。如果你肯进行深挖,往往会得到如下有价值的沉淀:

  • Go语言之下的操作系统、网络等基础知识
  • Go项目的框架、各开源库的使用
  • 软件工程的管理

不同方向的沉淀有多有少,对我们的价值不仅在于知识的积累,更是过程中对思维的锻炼。

扩大眼界,不要给自己设限

上一点,相信大部分的同学努努力就可以达到。但是,困扰我们的往往是努力的方向 - 我的职业生涯也深受影响。

如果有了一个明确的目标,比如说去研究Go框架的问题,梳理清楚内部的逻辑,这个事情是能够轻松完成。不过,明确的目标 本身就有一个限制:如果目标很明确,往往意味着在舒适圈之内。而成长,往往需要突破舒适圈。

以上面的Go框架问题为例,会有什么更具挑战性的内容呢?

  • 横向对比Go的开源主流框架,思考问题是否来自于框架的本身设计问题?
  • 探索框架本身的历史,研究问题引入的背景,是否会引入新的问题?

这些思考要求我们有更大的视野,也颇具挑战。蓦然跨出舒适圈,大部分人都会感到不适,但克服这种不适、突破自己的现有上限,不仅需要强大的内心,也需要资深人员的指点。

以终为始,升华过程性思维

通过前两点,我们进入了一个不断进步的“终身成长”模式。提升能力是无限的,而人生是有限的,我们需要有规划地投入。

而随着开发经验的积累,我们需要有“以终为始”的思维:

  • 设计技术方案时,要考虑数据埋点、预估排期
  • 评估需求优先级时,要综合最终需求的价值
  • 述职时,不仅要说出“做了什么”,更要说清“为什么做”

以终为始,是需要我们从ROI的角度来统筹全局,更好地规划自己的工作,乃至人生。

编程思考 - 系统之间的协作路径

在维护现有系统时,外部依赖是一个高频发生问题的点,尤其是在微服务场景下。

外部系统的不确定性主要来源于变更,表现出来的现象如 不可用不兼容。不可用的责任方很明确,解决方案也比较常规,这里暂不讨论。

对开发者来说,更为头痛的问题是不兼容。不兼容的原因常是外部系统的升级,出现数据结构不一致的问题,没有及时地通知到各个依赖方、或各依赖方来不及做对应的升级。可见,研发团队之间的协作路径设计非常重要。

这里,我列举2个常见的协作路径(以RPC调用为示例):

  1. 存量变更必须向下兼容:这个是最常用、最稳定的方案
  2. 新版本发布并平滑迁移:先发布新版本,并确定迁移周期,如1个月:各依赖方如果有发布,就必须引用新版本;到1个月后,强制废弃旧版本

方案1虽然简单,但也是出现大量遗留代码、降低可维护性,时至今日,很多公司仍将其作为第一选择,背后也是为了强调“稳定性”;方案2看起来也不难,但实际能落地的公司或团队屈指可数,它非常看重 基础设施配套团队文化

系统变更的复杂性往往不在于技术,下周我进一步聊聊个人的一些心得。

工作生活 - 选择性地投入情绪

从精力来看,一天能投入的情绪能量(无论正面还是负面)往往是有限的:我们很少能见到在工作时能一直充满热情,回家后又能积极且耐心地辅导孩子作业的人。

对成年人来说,精力越来越受限,我们可以尝试着进行做一些调整:

  • 尽量投入积极情绪,而避免负面情绪的损耗
  • 对高频重复的事情形成方法论,尽量用习惯的力量去推进完成
  • 适当放空自己,如运动、冥想,提高恢复力

Github: https://github.com/Junedayday/code_reading

Blog: http://junes.tech/

Bilibili: https://space.bilibili.com/293775192

公众号: golangcoding

二维码