工程师个人发展指南
李云
前阿里高级技术专家,《全面效能》作者
4083 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 35 讲
开篇词 (1讲)
工程师个人发展指南
15
15
1.0x
00:00/00:00
登录|注册

17|软件设计能力:工程师的核心竞争壁垒

你好,我是李云。这一讲我们来聊一聊工程师的竞争壁垒。
从我们进入职场开始,职业安全就是一个让人敏感的关注焦点。比如,35 岁年龄焦虑就是一个老生常谈的话题,时不时撩动着人的神经。可年龄焦虑还没解决,人工智能焦虑又来了,以 ChatGPT 为代表的人工智能技术在 2023 年取得突破性进展的同时,程序员要失业了的声音尘嚣甚上。
当然,每个人都会被社会淘汰,只是时间早晚的问题。担心职业安全的同时,我们不禁要问,如何构建自己在职场的竞争壁垒,让自己被社会淘汰得慢点呢?
为了避免讨论时太发散,我得提醒下,这一讲是从专业技能的维度去展开的,毕竟个人的职业竞争壁垒是一个多维度且相当复杂的话题。另外,专业技能是靠手艺吃饭的工程师最关心的方向。
依我看,有这么两大原因导致了工程师的职业安全焦虑。第一,年轻的工程师每年一批批进入职场,我们拿什么来与精力旺盛、学习能力强的他们竞争。第二,人工智能这类新技术的出现,我们应如何看待和应对。
不过啊,这两个都是外因,咱也控制不了,没有办法消除它们来解决自己的职业安全焦虑问题。是的,个人的职场竞争壁垒一定是从内因下手才对,构建一种能力让我们能应对外因的到来。

竞争壁垒在哪

既然竞争壁垒是一种能力,那这种能力一定是行业所需才行,否则就会出现一拳打在棉花上的感觉。那工程师在行业最稀缺的是什么能力呢?注意我加上了“最”这个字,因为“最”才意味着更有价值和更持久。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《工程师个人发展指南》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • pyhhou
    老师说的很好,我也说说自己的理解,还望老师指正。 用一句话来定义软件设计——对需要的场景,制定一套易于理解且稳定的流程或方法。 你可能会说,你说的是不是太简单了,我觉得要做到一点都不简单。这里的重点在于 “需要的场景” 和 “易于理解且稳定”。场景越大,你需要考虑的情况就越多,也越复杂,就像文章中说的,规模越大的项目就越考验设计能力。并且你还要能保证第二点,你设计出来的东西可以很轻易的交给别人,并且别人不需要有过多的经验就可以实现,维护并且拓展。这需要日积月累的经验,之前踩过的坑,碰过的壁,犯过的错都会帮助你设计出更完善的系统,当然还需要你学习解决问题的方法,行业的最佳实践等等,这才能让你设计出来的东西更简单且实用。 那些好的,且历经岁月依然被广泛使用的软件或标准,是不是都很好地做到了这两点?这里举些例子: - TCP/IP 协议 - Unix 系统 - AWS 里的 Java API 接口 想要做好软件设计,需要心中有追求,不能带着完成任务的心态去设计,写程序。要时时刻刻都想着怎样才能把自己负责的部分做到不会出错,又怎样才能让他人非常容易地就理解自己设计出来的东西。并且还要时不时地回过头去想想那些前人总结出来的最佳实践,比如设计模式、编程范式、设计原则等等,不断尝试新的领域,不断经历,不断踩坑,不断犯错,又不断回过头去反思这些方法,你的软件设计能力就会逐步提高了。 Linus 说过,这世界程序员之所有高下之分,最大的区别就是程序员的 “品味” 不一样。是的,软件设计就是程序员的品味,争取做一个有品味的程序员:)

    作者回复: 你好, 哇,写了这么多。从你的字里行间,我能感受到你对这个职业的热爱,太好了。 我也觉得你的定义一点都不简单,也就是“简单不简单”。你的定义中,很重要的强调了落地问题,也就是软件设计不能飘在空中,这一点我与你的想法完全是一样的。另外,我注意到你还用了“稳定”、“流程”这样的字眼,前者给我的感觉是一种细致,后者给我的感觉是机制化,这些都是很好的思考。 祝你早日成为自己认可的、有品味的程序员!:-)

    2024-04-23归属地:美国
    9
  • 到不了的塔
    李老师,你好, 随着微服务的流行, 服务的规模和复杂度都大大降低,这是不是也意味着对软件设计质量的要求也越来越低。如果行业对软件设计质量的要求降低,那软件工程师的竞争壁垒又在哪呢?

    作者回复: 你好, 微服务化就要用到软件设计能力才行,特别是要用到领域驱动开发DDD,这个方法论本质就是将业务与技术糅合在一起的,需要有很好的软件设计能力才行。 当然,当采用DDD完成了服务的切拆分后,如果我们聚焦于单个微服务上,可能因为服务的功能足够内聚和简单,以为不需要软件设计能力了。 其实,不只是针对微服务这事,任何一个软件行业都存在类似的现象。那些做服务切拆分的人,大多是经验丰富的人,而我们每位工程师都应想着成为那样的人才好,这样发展空间才会更大,才能真正构建竞争的壁垒。 总之,我建议咱需要紧盯自己如何成为切拆分服务的人,而不是只盯着实现单个微服务的人。

    2024-04-19归属地:上海
    3
  • 极客001
    老师您好,我觉得的软件设计是在明确用户需求的前提下对用户需求进行归纳总结,然后确定整体技术架构,最后通过代码一步一步进行功能实现,最终形成一个完整的系统。在系统流程设计中,要站在客户角度进行思考,在满足需求的前提下尽可能将系统的操作设计的简单明了,让用户有一个好的体验,真正便利于客户的工作生活,真正做到科技改变生活。

    作者回复: 你好, 不知你是否注意到“软件设计”与“软件开发”的区别呢?我理解前者是后者的一部分,而你的表达更说是在讲软件开发呢?! 再试试聚焦于软件设计?

    2024-04-26归属地:北京
    1
  • FireMo
    软件设计,目的是设计出一个符合业务需求的软件,首先是从业务需求出发,要充分理解需求,然后抽象出概念,基于概念确定功能点,将一个或几个功能组合成模块,从面向对象的角度在模块内部实现高内聚,模块之间的通信实现低耦合;各个模块之间相互隔离。一定要从美学角度出发,设计出让别人看一眼就能懂的软件,后续才能写出让别人一眼就能看懂的代码。

    作者回复: 你好, 在你分享中,最打动我的是“美学”两个字。是否有这一追求,能很好地区分普通工程师和优秀工程师。这种追求可能会让人觉得有点虚,但只要工程师能基于自己的思考和实践将之给做实了,我相信那就能显著地区分普通和优秀了。 加油!

    2024-04-22归属地:山东
    1
  • 卢泽华
    我理解的软件设计就是 给软件里面某些元素(服务、组件、模块、对象、函数)分配职责,也就是这些元素要干什么,然后这些元素如何配合。也就是概念及其关系。软件要应对复杂度和需求的变化,所以就需要对软件元素进行抽象。关键在于如何抽象,抽到哪个层次上,比如把变化原因一样的对象放在一起(单一职责),把变化频率一样的放在一起(也就是分层)。面向对象建模里面也就是名词和动词,有哪些对象(名词),这些对象的职责是什么(动词)。

    作者回复: 你好, 蛮生动的理解。如果让你用一句话来表达(比如,50个字内),你又会如何组织呢?我相信这个任务给到你,你得再对自己的理解做梳理和抽象才行,这也话也算是一次设计任务吧。

    2024-04-18归属地:陕西
    1
  • SMTCode
    我理解的软件设计是:通过理解项目或产品的需求,对需求进行抽象,选择合适的技术,然后进行拆分,先通过最小原型去验证与需求的契合度和设计的合理性,然后再同过不断迭代,完善项目机能,同时还要考虑如何进行测试和确保质量的方式,在合适的时间对小部分代码进行再拆分和重构,让代码有一个易维护、可扩展的基础底座。

    作者回复: 你好, 你的这个理解给我最大的感受是非常接地气,如果用团队效能动力模型来说,就是你有很好的业务技能,这是非常难得的。 就软件设计这个概念,我觉得你还可以更聚焦于自己的工作过程中,哪个过程你是真正在做软件设计,放到那个场景你在思考什么、纠结什么,将这种感觉给表达出来,可能就对了。 当然了,每个人对于软件设计的理解是不同的,这并没有标准答案。无论如何,我期待你在未来能更多地关注这个问题,我相信当有一天你看清楚了,有自己的见解了,那能力也一定得到了很大的增加。 我们一起加油!

    2024-04-18归属地:辽宁
    1
  • java小霸王
    软件设计:识别出元素,以及元素之间的关系

    作者回复: 你好, 虽说你的表达很简单,但还是很好地抓住了重点。如果让我帮助完善的话,你的“识别出元素”我理解为是概念的塑造。

    2024-05-11归属地:广东
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)