《这就是软件工程师》摘抄

软件工程师的四个阶段

如果我们把软件工程师的金字塔分为四大台阶,那它们 分别是 新手阶段、进阶阶段、高手阶段和行业大神阶段 这四个阶段分别对应这样几种能力:执行力、设计能力、融会贯通的能力、沉淀方法论和开创新领域的能力

新手阶段强调执行力。你刚刚进公司是新人的时候,会被分配一些任务,上级会非常明确地告诉你任务是什么,用什么样的方法达成什么样的目标。你按照方法一步步去做, 保质保量完成,就可以了。

进阶阶段强调设计能力。这个时候,上级布置给你任务,部分但不会告诉你怎么做 相当于他给你的只是一个问题,你需要自己把具体的问题抽象、拆解,并独立设计解决方案

高手阶段则需要融会贯通的能力 这个能力对应的其实是我们通常讲的架构师,也就是软件项目的总设计师 假设你是架构师,你不仅要看到系统从过去到今天是怎么变化的, 还要看到是外界哪些需求内部哪些技术导致了这些变化, 并且预判系统未来要朝什么方向发展。你需要把技术的演进需求的变化系统的发展等多个维度综合起来考虑

大神阶段需要沉淀方法论。在这个阶段,大家都公认你是这方面的权威,你对这个方向的判断是非常准确的同时你还能够沉淀出个方法,这个方法不只适用于当前的领域 别人把你这套东西拿来还可以解决另外的问题

怎么才算是达到资深工程师的水平

通常来说,软件工程师不是只会一门编程语言,知道开发环境是什么样的就够了,而是要拥有思考、总结、抽象的能力,这些能力是能部分够持续穿越周期的,不会因为具体的技术更新换代而受影响同时,软件工程还需要有一种持续习、保待进步的心态。

这个行业不存在真正年龄的坎儿,只存在能力的坎儿 。

怎么才能接住重担,成为中坚力量呢

我建议是你要成为所在公司或团队里的贡献者 以我们公司对员工的要求为例 公司核心成员分为以下几种 类型,这些成员具备的各项能力,是你要着重培养的

.创始人 (Founder) /合伙人 (Partner)

创始人/合伙人是公司的顶梁柱,需要有以下素 能力:

1) 做出贡献 为公司带来资源、吸引人才 带来效益,其中既包括经济效益,也包括社会效益

2) 带动团队 一个人就是一支军队,能够自驱为公 团队制订方向和实施计划,并能解决执行时的有问题 ,具备推动落地的能力

3) 创新优化 能够对现有的东西提出小而美的创 优化,并将其推动和执行

4)前瞻能力 能够感知行业变化,技术潮流, 并依思考行业和公司的未来,为应对未来做好准备

5) 抓重点,简化,标准 。只有抓住重点简化问题、 标准化问题,才可能实现规模化、平台化

2. 贡献者 (Contributor)

这类人是公司的腰部力益,他们对要做的事有热情,并 会想各种方法推动 作的进展,他们需要有如下能力:

1)探路能力 只要方向没问题,即使没有路,也能够 踱出路来

2) 贡献方法 能够在实施过程中提出更好 更简单的 方法以及相关创意

(3) 解决难题 方法总比问题多,能够带动团队解决一 切拦路的问题 提高标准 能够不断发现不足并弥补不足,解决问 题,提高标准

3.行家 (Expert)

这类人是公司的手足力扯, 他们要对所做的事情有很富的验,能够正确判断和决策,这类人有如下能力:

1)降低成本 为公司在执行层面上降低成本 时间 人力 物力

(2) 提升效率。能够找到最佳的路径或通过最佳实践到达目地的。

(3) 防火能力。能够发现重要问题,并提前解决,避免 意外发生。

认识自己

在我看来 ,一 个人要想认识自己,就得看清自己的特长、兴趣、热情等

首先你要找到自己的特长,找到自己的天赋,找到你在 DNA 里比别人强的东西,拿你的 DNA 跟别人竞争。 你要找到自己可以干成的事,找到别人找你请教的事---你 身边的人找你请教就说明你有特长,这是找到自己特长非常 重要的方法。找到特长后,扬长避短就好。

.兴趣。如果你没有找到自己的特长,就找自己有兴趣、 有热情的东西。什么叫兴趣?兴趣是再难再累都不会放弃的 事。如果你遇到困难就会放弃,那不叫兴趣。不怕困难,痴 迷其中,就算你没有特长,有了这种特质,你也是头部人才。

.方法。如果你没有特长,也没有兴趣和热情,就要学方法。比如学习时间管理,学习做计划,学习统筹,学习总结犯过的错误,举一反三,学习探究事物之间的因果关系, 等等。这是一些方法,你可以自己总结套路。

勤奋。如果你前三者都没有,你还能做的事就是勤奋 勤奋注定会让你成为一个比较劳累的人,也是很有可能被淘 汰的人。随着你的年纪越来越大,你的勤奋也会变得越来越 不值钱。因为年轻人会比你更勤奋,比你斗志更强,比你要钱更少。勤奋虽然不值钱,但是只要你勤奋,至少能够自食

其力

软件开发的环节

软件工程之所以叫工程,是因为软件开发的过程也和其他工程一样,可以分成几个环节,并且这些环节需要被有效组织起来,软件开发也需要系统的工程思维。
具体而言,一个程序从什么都没有到最终上线,主要包活以下几个环节:需求分析、设计、编码、测试。

第一步,需求分析。最初的需求一般来自产品经理,这些需求大多比较模糊,软件工程师需要和产品经理就每个细节进行充分沟通,明确最终要交付的是怎样一个产品,同时考虑到每个环节可能遇到的问题。
第二步,设计。设计是程序开发里非常重要的一环,具体细分为技术调研、原型设计、架构设计等,本书在后文有详细介绍。
第三步,编码。等到软件工程师弄清楚该怎么做了,就开始通过代码去实现设计里的内容,很多有关编码的原则和方法这本书会具体阐述
第四步,测试。测试指的是一系列检验代码能否正常运行的方法,包括很多类型,比如单元测试、性能测试、集成测试,等等。
等到上面这些环节全部完成,一个程序才能正式发布上线。程序上线后免不了出现Bug,这时候还需要软件工程师不断修复和迭代。

代码规范

新人动手编码前,必须先熟悉公司的规范,特别是编程规范。很多新人不喜欢这种条条框框的东西,觉得编程规范 很烦人,总想自已发明创造,写出个性,彰显风格,其实这么做就大错特错了。

再看有什么样的规范。一般来说,一套完整的规范主要包括三个方面。
1.编码规范。这是最基本的规范,像谷歌等公司的编码规范在网上是公开的。但注意,你需要关注的不仅仅是编码,还有代码评审、单元测试,这些都属于编码规范。除了公司内部的编码规范,如果你想了解更多“行业规范”,推荐这几本书:《代码大全(第2版)》《代码整洁之道》《重构:改善既有代码的设计》《程序员修炼之道:通向务实的最高境界》
2.设计规范。设计规范包括API(接口规范)、设计模式(比如面向对象的设计模式、设计原则SOLID)、架构规范(比如分布式架构规范)等。对于这些设计上的东西,推荐以下几本书:《设计模式:可复用面向对象软件的基础》《架构整洁之道》《微服务设计》《数据密集型应用系统设计》《WebAPI的设计与开发》。
3.生产规范。生产规范指的是一套标准化的上线流程,比如软件工程师不是写完代码就行,还要做测试,测试完再上线,整个生产流程里有很多规范。现在比较流行的生产规范是CI/CD、DevOps的从自动化测试开始到持续集成,再支持各种发布策略的持续发布。关于生产规范,推荐你看这几本书:《人月神话》《SRE:Google 运维解密》《持续交付:发布可靠软件的系统方法》。

什么叫优质代码

什么叫优质代码?在我看来,所谓优质分为三个等级。
1.初级:可读。代码写出来主要是让人读的,顺便让机器执行一下。可读的意思包括:命名要好--好的命名是有意义的,而不是A1、A24这种没有意义的名字;布局清晰--分支尽量少,不要用太多嵌套;注释明确--写明为什么用这段代码,以及怎么用这段代码,而不是解释这段代码是什么;一个文件或一个函数的代码量不要太大;代码不要重复;不要有反逻辑,用通用的编码模式进行编码,等等。可读是对编码最基本的要求。
2.中级:可扩展。一段代码写出来不是一成不变的,它要根据需求的变化而变化。可扩展的意思是可维护,意味着我不必因为未来的修改大动干戈,甚至不改主干代码就可以实现修改。面向对象和函数式的各种设计模式,比如状态机、声明式设计、SOLID、IoC/DIP等都可以让你的代码达到这个级别。
3.高级:可重用。优质的代码没有止境,最高级别的代码是可重用。举个例子,古人发明了轮子,而轮子可以用在马车上、汽车上、飞机上,这就是可重用。代码也一样,优质的代码写出来,可以用在很多场景里。要实现可重用这一点,可用的技术有 DSL、面向对象的设计模式、Web Service,还有时下最新的“Codeless”等

整洁代码

代码的整洁程度代表着一个软件工程师的专业素养,因此很多人埋头钻研怎么才能写出整洁代码。在我看来,整洁代码不是写出来的,而是读出来的。换句话说,不是写的人说自己的代码整洁就算整洁,而是读的人觉得整洁才算整洁。

程序测试

程序测试:对软件工程师的基本要求

第一,测试要自己做,尤其不能让用户成为你的测试工程师。

第二,除了测试基本输人以外 还要努力构想更多的边界条件

第三,测试接口定义的程序语意,而不是当前实现的具体行为。

第四,对重要模块,编写的时候就要做到基本性能测试

第五,对程序交付以后出现的问题和 Bug,要构建相应的测试程序并提交代码库,保证以后回归测试可以自动运行这个测试

任务分解

之所以做任务分解,本质上是为了简化问题复杂度。假设你要写一个程序,怎么进行简化呢?第一,抓住重点,去掉不必要的东西,留下必须要做的东西,找到任务主干。第二,按照单一职责原则对任务进行拆解,罗列功能点。第三,每个功能点对应一个小程序或小模块,写出模块,最后把它们拼装起来。

能力进阶

如果说新手阶段的工作重点是执行任务--上级告诉你任务是什么、要完成什么目标、一步一步怎么做,你按计划完成就好;那么到了进阶阶段的重点就是你要独立完成一个工作模块、独立设计程序,别人不会告诉你步骤你需要自己找方法解决问题。这个阶段的关键能力叫作设计能力--你要学会分析需求,弄清楚模糊不清的问题:你要学会做技术调研,找到最佳解决方案;你要学会对问题进行抽象和拆解;你要学会搭建原型、设计架构……
进入进阶通道,你在工作上不再止于做执行,而是要更多地发挥创造性,独立设计和优化;在团队里不再止于埋头完成自己的事情,而是要做好一个项目从头至尾的把控,协调内外部的合作关系;在学习上不再止于跟别人学、碎片式地学,而是向内精进,搭建起自己的知识体系。如果你做好了这些,你的工作能力就能实现质的转变。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值