软件工程师,如果你只会写代码,你就完了

2022-03-18 10:58:33 浏览数 (1)

过完春节了,还有一场将近 10 厘米雪天和零下几度的天气,这是北京最近两周的天气。

或许是配合冬奥会的盛况。

这篇文章的思路主要来自《这就是软件工程师》以及最近的输入思考。

这是一本小书,看清楚啊不是小说,是小书。

你也许拿到这本书一个小时就翻完了,不过负责的说,真正理会书中的道理,需要几年甚至是十几年的行业经验。

那就开始听我分享解读几个关键点

我们软件工程师的终极「职业任务」,就是围绕需求做业务。

面对需求时,向上两个维度多问几个为什么,看看真正的需求和试图解决的问题是什么。

01 识别 X-Y 问题

书中专门说了 X-Y 问题。

有人想解决问题 X,他觉得 Y 可能是解决 X 的方法,但不知道 Y 该怎么做。于是他去问 Y 该怎么做。

Y 问题就是对真正的 X 问题的干扰,是一种噪声。真正的能识别这种噪声就是你的能力所在。

在软件工程师的认知里,在代码的世界里,1 就是 1,0 就是 0,非黑即白,没有灰色地带。

而实际世界里,充满了灰度,平衡,博弈等等。

在软件开发过程中,边界问题 ,比如极大值,极小值。必须定义的非常清楚。

而实际生活中,确实可以糊里糊涂,含糊不清的。

始终牢记,软件技术是解决实际问题的,要靠近商业的前沿,要「经济实惠接地气」

02 抽象能力是核心能力

在众多的实例,案例中归纳总结出通用的方法和规则,是抽象的核心思想

软件开发本身就是一个不断抽象的过程

有多年工作的工程师,经常会说 「这都是一个事」。因为他们抽象出了共性,经验和专业告诉他们,

只需要打通几个关键的核心路径,这事儿就能成。

设计分为原型设计和架构设计

软件设计分为原型设计和架构设计

前者对应产品经理,后者对应开发人员,再往上是 CTO。

对于软件工程师来说,一般都不会这么想。

更多的第一答案是需求概要和需求详细设计

而概要和需求设计是技术设计的两个大的步骤。

之前写过一篇抽象设计的文章 软件思维模型 1/100 抽象

产研一体

一套软件,一个解决方案从 0 到 1.产品经理负责原型设计,软件开发人员负责架设设计。架设设计层面包含技术实现。

那开发和产品经理坐在一起,那会聊什么呢?

如果他们单各自坐到一起又会聊什么呢?

我开玩笑的说,很多产品经理坐在办公室做需求,不了解市场。

很多开发者用直男思维做软件,写逻辑(比如某个时刻的我)

相互嫌弃和自以为是是真的。

对于软件来说,我们说产研不分家,也就是产品和研发是一体的。

一致的目标才有可观的产品。

03 成本在当下还是未来

软件开发是一门工程类学科,在大学里一般有软件工程专业。整体来说,软件的成本分为开发成本和维护成本。这里假设前期的需求调研也属于开发成本。

之前有这么一个观点,如果你给别人提供服务,比如说年费。

这时候虽然你拿到了钱,但是你是属于「负债」。你得用你之后的服务和时间还债。

有很多年度社群,他们的产品模式是这样的

提供服务清单,收取年度会费,之后客户入群。定期有课程,服务。

这种模式就是先收钱,后服务。最大的风险在于很难完整的交付,不了了之。

软件工程中的维护成本就是把成本放到了未来

而这个成本是很大,而且充满不确定性的。这也是软件越来越复杂的一个原因。

周末和朋友说,软件开发的任务很多时候不是一个量化的工作,开发之前的评估和实过程中的实际总会有差距

这个差距就带来了工作任务的增加和复杂度的增加,如果你想在规定的时间线内完成任务,那就要用多余的工作时间来换。

出入职场的新手和刚刚切好技能(比如变换开发语言),更多会遇到这种情况。

04 火车头模式

需求任务总是一个接着一个,为了需求能够按时完成上线。有很多软件开发中的项目管理理论模型,敏捷开发,瀑布模型等等。

书中提到一个软件项目管理的思路值得借鉴,叫做火车头模式。

在一个的开发迭代周期内,两周三周。时间一到,即刻上线。只是我们把需求像积木一样,一块一块的归类。

如果时间到了,需求还没完成,那么把完成的先上线。对于没有完成的任务,等待下个周期结束。

这样的做法就是相互影响的粒度更小,总体来说还是在控制项目的延期。

05 专业深度和职业精神

之前听一个主播老师讲,为了直播,自己准备了 5000 多字的逐字稿,下午码字,晚上直播。

而主播本身已经是将进十年经验的讲课老师。

按理说随机讲解和以往积累足以应付不到两个小时的直播,那为什么还要另花时间备课?

这个小事情也在提醒我,专业上靠谱,谦卑和追求精进。

开发过程中犯的错误很低级,回头想想都是没有遵守最基本的原则。

专业性就是你比别人更细致一些,多想一步。

06 持续学习,按需学习

最后想简单写一写软件工程师这个工作常规职业规划。

首先都是在经历,「入门,初级,高级,精进,拓展和觉醒」。

每 5 年是一个阶段点。

其次软件行业不是一个经验积累越老越香的行业,相反是年龄递增,加速度递减的行业。

越往后,拼的是软实力,行业理解,组织管理能力商业嗅觉等等。

对于行业外人来说,软件开发是一个大的行业。跟其它行业类似,软件行业有很多分支,大家熟悉的互联网行业就是软件行业的一个行业分支。

技术上的职位划分和分离,最近十年更是越发的清晰和完善。意味者竞争更加激烈。

随着近年来各行各业增速放缓,整个需求池有萎缩。

所以回到了题目,如果你只是会写代码,你会死的很惨。

两个建议

  • 持续的学习

开放的心态,看着外部的市场的需求,然后按需学习和优化。

  • 靠近市场前沿

多多关注软件价值,靠近市场前沿,看看具体能解决哪些问题

以上共勉。想起了《上月记》里的一段话

我深怕自己本非美玉,故而不敢加以刻苦琢磨, 却又半信自己是块美玉,故又不肯庸庸碌碌,与瓦砾为。

0 人点赞