首页 > 其他分享 >《这就是软件工程师》

《这就是软件工程师》

时间:2022-10-31 16:22:05浏览次数:38  
标签:工程师 代码 诞生 测试 软件 BUG 就是

这就是软件工程师-概

Part1——行业地图

什么人?

软件工程师喜欢简单,行事简单,穿着也简单,喜欢格子衬衫。

他们喜欢让程序代替他们干活,喜欢创新。

当然这都是夸的——“普世低调的创新精神,理想主义的工匠精神”

tips:看来我还没有入行,以上说的我都喜欢,但是只能够买得起格子衬衫……

薪资高?

各个国家的软件工程师薪资都很高,企业架构师、软件工程经理、软件开发经理、应用开发经理、解决方案架构师、数据架构师、IT项目经理、程序架构师、用户体验经理、网站运维工程师——这些都属于软件工程师的范畴,并且他们的薪资都很高,Top前25的那种。

并且软件工程师的全球化程度很高,内部流动性大,所以其收入水平接近,整体都很高。

驱动力?

从敲出Hello World!,到做出自己的小玩意儿,成就感真的是满满的,软件工程师最底层、最原生的驱动力是成就感,高收入只是副产品。代码开源能够说明——自己的代码开源后能够被大家使用,有极大的满足感和荣耀感。

tips:书里说比尔盖茨和贝索里是利益驱动型的,收入高也能够带来满足感和成就感啊;没人和钱过不去,只是别太看重?

就业选择?

推荐想要成为软件工程师的同学去大城市:

  • IT公司多,就业机会要更大——北上广深的上市IT公司数量已经占了全国的80%以上。
  • 人口多,软件工程师的学历和工作经验的溢价高——在大城市,因学历和工作经验高低造成的薪资差距更大。
  • 大城市的软件工程师年均工资增速快
  • 人口流动大,工作机会多。

996?

996就是早上9点上班,晚上9点下班,一周工作6天。

为什么会有996?而且仅在国内?

  1. 行业的发展是有其规律的。国内的互联网行业处于原始积累阶段,人口多,利益多,争流量才是王道。国内的互联网公司大都不在创新,而是在现有基础上搞营销、搞模仿,先把同行比下去再说,所以为了竞争,工作量变得很大,挣得的利益也不多。实际上,占领创新的高点才能够减轻企业的危机感。
  2. 公司的组织管理能力不足。国内很多公司的组织效率有问题,导致软件工程师白天不停地被打断,杂事一大堆,只能晚上加班。不能够混淆行动与进展、忙碌与多产。早上组织会议,将一天的工作分配下去,会议上重要说事情,之后的工作时间专心工作不被打扰。

四个阶段?

  1. 新手阶段——执行力,初入职场,上级分配任务明确,更多需要行动起来,保质保量完成工作即可;
  2. 进阶阶段——设计能力,上级给出问题,自己需要把问题抽象拆解,并独自设计解决方案;
  3. 高手阶段——融会贯通,这个阶段对应的通常是架构师,需要其明白各种变化、导致变化的原因以及未来发展方向,将技术演进、需求变化、未来发展等多个维度结合考虑;
  4. 大神阶段——沉淀方法、开拓创新,通过行业内的经验总结沉淀出一个方法,适用于各类问题,能够被别人学习使用;顶尖的人才会创新出新的技术。

四个阶段是一个金字塔,半数以上的软件工程师都能够到达进阶阶段,不到三分之一能够到达高手阶段,不到百分之一的人能够到达大神阶段。

35岁就完了?

35岁的问题出在国内……

一般来说,35岁前能够学到高手阶段附近,差不多干到退休也没问题,但是国内的氛围不允许。国内的许多公司面临较大的变化,今天做这个,上线之后发现没用就不做了,换别的,公司觉得你只要把这个功能实现了就行,不需要考虑的面面俱到,整体上对专业技术的能力重视程度不够。

到了35岁左右,即使硕士毕业也有10年了,如果10年还没有到达一个资深工程师的水平,被淘汰也是不可避免的。

IT行业不存在年龄的坎儿,只存在能力的坎儿。

公司的核心成员

创始人/合伙人

需要拥有的素质和能力:

  1. 做出贡献——能够引进资源、吸引人才、带来经济效益和社会效益
  2. 带动团队——自主驱动,带领团队制定、实施计划,推动落地
  3. 创新优化——能够提出创新,并将创新推动和执行
  4. 前瞻能力——感知行业变化,思考行业未来并做好准备
  5. 总结能力——问题抓重点,能够标准化问题,实现规模化、平台化
贡献者

需要具备的能力:

  1. 拓路能力——只要方向没问题,就能够无路开路
  2. 贡献方法——提出好的方法和创意
  3. 解决难题
  4. 提高标准——自身进行反馈,提高标准
行家
  1. 降低成本——为公司在执行层面上降低时间、财力、物力、人力成本
  2. 提高效率——能够找到最佳路径
  3. 防火能力——提前发现重要问题,提前解决,避免意外发生

持续学习?

软件工程师是在读一所终身大学,需要不断地学习提高自己。如果能够因为每天学到新东西取得进步而感到高兴,这类人就很适合成为软件工程师。

持续学习的最低标准是与时俱进学习新技术,否则逆水行舟,不进则退,被行业淘汰。

工种多?

上面介绍薪资的时候就提到了,软件工程师的工种很多。大体分为:交互、系统、算法、数据分析、测试、运维六个方向。

IT行业不仅工种多,而且还会有新工种频繁出现,有了大数据分析后就出现了算法工程师和数据工程师等。

将来还有虚拟现实、脑机接口、城市大脑等相关技术,相对应也会有新的工种出现。

遍布各行各业?

打字机刚刚诞生时,会有打字员这一职业。但是现在几乎人人都会用电脑,打字员的工作也基本消失了。

汽车刚刚普及起来的时候,拿到驾照的人很少,司机算是一个好职业,但是现在驾驶技能也普及了。

现在会编程看似门槛很高,可能一两代人之后的孩子们会从小就很熟悉编程,现在编程就已经在少年儿童中大规模普及了。

软件工程师也不会仅仅呆在软件公司和互联网公司中,各行业都会有软件开发部门,软件工程师也会成为各行各业的基本人才配置。

Part2——新手上路

语言工具

入门必学:操作系统Windows、编程工具Visual Studio Code

入门语言:Java

额外掌握:数学知识——离散数学、数学建模、图论、代数、拓扑学、运筹学、博弈论;英语语言知识(因为好多技术源代码大多是美国领跑)

平台选择

选择能够适应未来发展,有光明前途的平台。IT行业发展速度太快,新陈代谢也很快,不要因为高薪资而加入一个即将淘汰的公司。优先选择未来能够高速发展的公司,他们解决的问题是新的,学习的技术是新的。职业生涯初期,应当培养好扎实的编程能力和良好的职业素养,将来才能够走远

路线选择

路线选择依据:特长——>兴趣——>方法——>勤奋

编码规范

每个公司都有自己的编码规范。日益增加的代码库,若是不统一规范,就会将大量时间花在读懂代码上面,更加不好维护。为了高效工作,大家会遵循同一套规范,这样不管代码是谁写的,不管是谁看都能花很少时间看懂代码。

有规范的公司会对新员工进行相关培训。有:

  • 编码规范:大部分公司的编码规范都是公开的,其中还包括代码评审、单元测试等。
  • 设计规范:包括接口规范、设计模式、架构规范等等。
  • 生产规范:是指一套标准化的上线流程。

每个公司都会根据自己的发展方向对以上规范做出调整。

优质代码

  1. 初级:可读,命名意义明确、布局清晰、注释明确、逻辑合理。
  2. 中级:可扩展,可以维护,可以更方便的添加新功能。(面向对象、函数式设计模式)
  3. 高级:可重用,写出一次可以用在很多的场景中。(DSL、Web Service、Codeless)

整洁代码

心里装着将来要阅读这段代码的人,从方便阅读的角度去布局设计;因为不是写的人说自己的代码整洁就算整洁,而是读的人觉得整洁才算整洁。

编程原则

编程原则的目标是优化,基础分为四个

避免重复原则、单一职责原则、高内聚低耦合原则、开闭原则

程序测试

单元测试,对单个组件、模块进行测试

功能测试,对某个功能进行测试,而不关心其内部设计

集成测试,测试模块与模块之间或者系统与系统之间的继承

非功能测试,测试用户不直接关心,开发者关心的部分,性能测试、安全测试、稳定性测试、健壮性测试等等

回归测试,将之前做测试的错误再测一遍

修改BUG

初入公司的任务多是修改BUG,修改BUG需要缕清上百万行代码的结构逻辑,不停改代码和重启服务器,试错成本也大大提高。

寻找BUG可以模拟BUG、二分法找BUG、调试工具找BUG、极限测试、通过一步步解释代码找到BUG

阅读代码

阅读代码和阅读书籍是类似的。

被反复使用的代码要详细读,他往往是标杆;

经过时间沉淀的代码要细读,其设计思想还在流行;

易调试的代码要多读,好调试也就比较容易读

学习指导

学习牛人的方法,别抄答案;和高手一起解决问题;和优秀的人一起工作;

Part3——进阶通道

交流沟通

需求时,一定要明确模糊不清的问题,明确边界,关注不可预期的案例

程序设计

学会谋篇布局,有核心、有偏重、无遗漏

学会抽象,即找到一种通用的方法和规则,对于软件的抽象常用有二,过程抽象和数据抽象

过程抽象是将要解决的问题抽象成一个一个可解决的小问题,最后组织起来解决大问题

数据抽象是将数据使用和构造分离开,前者使用数据接口,后者借助数据结构,降低系统复杂度

原型设计

原型设计最根本要注重接口。

好的接口设计要多想几步,注重其在方案中的作用

架构设计

分而治之

考虑异常、极限情况

项目管理

瀑布式开发,一层一层的开发,分析需求——概要设计——技术选型——详细设计——编码测试——上线项目

敏捷开发模式,将项目模块化,每个团队负责一块,根据协议并行开发,最后拼在一起

班车模式,每一段时间发布一次,赶不上就等下一班车

分布式微服务开发模式,将代码库数据库分开,每个服务都由一个团队负责,便于维护和上线

技术基础

  1. 程序语言:语言的原理,类库的实现,编程技术,规范变成,设计模式
  2. 系统原理:计算机系统,操作系统,网络协议,数据库原理
  3. 中间件:消息队列,缓存系统,网关代理,调度系统
  4. 理论知识:算法和数据结构,数据库范式,网络七层模型,分布式系统

Part4——高手修养

前瞻能力

有知识的广度,要去读论文,读业内各大公司的资料,去各个公司做广泛的交流,保证有足够多的不同信息进入你的视野

多做跨行业的交流,特别是投资人创业者等见多识广的人群

取舍能力

明确目标也就是做好决策,之后做好预测最终完成取舍

技术选型

宏观上看这项技术解决的是不是大问题,以及预测是否有很大的进步空间

微观上看有无大公司撑腰,有无成熟的技术社区,有无杀手级应用,是否经过时间沉淀

代码评审

谷歌的评审指南

  1. 设计:代码是否经过精心设计并适合系统?
  2. 功能:代码是否符合开发者意图?代码对用户是否
    友好?
  3. 复杂性:代码是否可以更简洁?未来其他开发人员接
    手时,是否易千理解与易用?
  4. 测试:代码是否经过正确且设计良好的自动化测试?
  5. 命名:开发人员是否为变量、类、方法等选择了明确
    的名称?
  6. 注释:注释是否清晰有效?
  7. 风格:代码是否遵循了谷歌的代码风格?
  8. 文档:开发人员是否同步更新了相关文档?

管理者?

实力服众,要证明自己有一定的技术水平和素养。

摒弃个人英雄主义,核心功能交给团队去做

有说服他人的理由,会说服他人的方法

Part5——行业大神

大神们的传奇故事

Part6——行业清单

最早的程序代码

第一位程序员

第一台可编程设备

可计算函数的定义

第一台通用计算机

冯·诺伊曼结构

第一个计算机BUG

第一台运行的存储程序计算机

第一台并行计算机

第一本编程教科书

第一台电子计算机

第一次提出人工智能

第一个真正意义上的编程语言

软件定义的诞生

第一个面向商业的通用语言

UNIX系统诞生

程序的法则

C语言诞生

英特尔8080

微软成立

甲骨文公司成立

第一个面向对象的编程语言

IBM个人计算机

C++诞生

GNU计算

TCP/IP协议

Microsoft Windows诞生

Python诞生

万维网诞生

Linux系统发布

Java诞生

JavaScript诞生

LAMP开始流行

开源软件

谷歌搜索引擎诞生

Git诞生

云计算概念提出

GitHub上线

Stack Overflow

Go语言诞生

Docker诞生

Kubernetes诞生

标签:工程师,代码,诞生,测试,软件,BUG,就是
From: https://www.cnblogs.com/Pilo-pillow/p/16844753.html

相关文章

  • 软件安装——idea的安装和使用
    Idea的安装和使用一、下载和安装下载步骤官网下载地址:DownloadIntelliJIDEA:TheCapable&ErgonomicJavaIDEbyJetBrains安装步骤二、配置和使用打开安装......
  • 高性能远程控制软件,完美替代Anydesk
    Anydesk是一款来自德国的远程软件,据悉是Teamviewer团队成员出来独立门户做的。Anydesk给人一种小而美的感觉,软件体积小,性能高,被视为Teamviewer的替代产品。现在,AnyDesk软......
  • 软件版本命名规则
    通用版本命名规范这里分享一种通用的版本命名规范,格式:主版本号.子版本号.修订版本号.日期_版本阶段比如:V1.2.3.20221028_rc说明:第一位(1):主版本号。当功能模块有较大的变......
  • 【软件使用】【VSCode】【Debugger for Chrome的使用】
    【软件使用】【VSCode】【DebuggerforChrome的使用】https://img-view-wj.oss-cn-nanjing.aliyuncs.com/img/it/soft/vscode/DebuggerforChrome/image-2022103111541643......
  • win10高分屏,打开软件字很小怎么改善?
    其实非常简单:右键点击程序,选择属性,在兼容性一栏把替代高DPI缩放行为选成系统然后打√就行如图  尝试了一下,可以选择有问题的软件,右键属性,然后在兼容性里面更改高DPI设......
  • 精益看板管理方法的意义、作用,及辅助软件
    通过本文您将了解:1、看板管理的目的和意义;2、看板管理的作用是什么;3、国内依据看板理念而设计的工具有哪些。一、看板的目的和意义是什么?通过看板方法,你可以将不可见的......
  • 软件类图
      小组在此次例会中讨论了项目中各类的crc卡并合作画出了UML类图。项目中各类的crc卡      类图   ......
  • obs直播录屏软件下载使用教程-制作短视频录制视频教程
    现在是短视频的时代,我们需要学一点视频处理技术,录屏也是一项基本能力下载软件这里我下载的是obs软件,可以录屏可以直播https://obsproject.com/因为网络原因,一直没有下......
  • 请谈一下工业软件是如何定义的?
    工业软件是对工业研发设计、生产制造、经营管理、服务等全生命周期环节规律的模型化、代码化、工具化,是工业知识、技术积累和经验体系的载体,是实现工业数字化、网络化、......
  • 软件工程第五次例会
    时间:2022.10.29内容:完善需求分析文档内容完成类图完成通信图修改完善将需求文档内容进行组合需求分析文档分工:周佳贝:1,2  童洁:3  邓淑航,王丽红:4  何凝:6,7......