这就是软件工程师

第一部分  行业地图

选择:一线和次一线城市机会巨大

1.北京

2.上海、深圳、杭州

3.成都、广州、南京、厦门

4.福州、苏州

软件工程师的四大台阶:

阶段

能力

1

新手阶段

执行力

2

进阶阶段

设计能力

3

高手阶段

融会贯通的能力

4

行业大神阶段

沉淀方法论和开创新领域的能力

35岁不是年龄的坎儿,而是能力的坎儿。

持续学习是刚性要求。

分类:交互(UI)、系统(前后端)、算法、数据分析、测试、运维

第二部分  新手上路

1.入行前

正式入门语言:Java;

操作系统:Linux;

编程IDE:IntelliJ IDEA;

数据库设计工具;

编程框架(Spring Framework)

离散数学中的数理逻辑和集合论 (数学建模、图论、抽象代数、拓扑学、运筹学、博弈论(机器学习、AI的基础))

选择平台:去面向未来、技术驱动的公司

这家公司做的事情,要适应未来的发展

技术驱动、以技术文化为主导的公司

需求分析——>设计(技术调研、原型设计、架构设计等)——>编码——>测试

新人阶段:1.养成良好的工作习惯 2.培养自己的执行力

2.编码

代码规范、设计模式、架构模型、运维和开发的最佳实践

(1)编码规范 

行业规范:《代码大全(第二版)》、《代码整洁之道》、《重构:改善既有代码的设计》、《程序员修炼之道:通向务实的最高境界》

(2)设计规范 (API接口规范、设计模式、架构规范)

《设计模式:可复用面向对象软件的基础》、《架构整洁之道》、《微服务设计》、《数据密集型应用系统设计》、《Web API的设计与开发》

(3)生产规范(一套标准化的上线流程)

《人月神话》、《SRE:Google运维解密》、《持续交付:发布可靠软件的系统方法》

优质代码:

(1)初级:可读

命名有意义;布局清晰;注释明确……

(2)中级:可扩展

可维护(面向对象和函数式的设计模式,比如状态机、声明式编程、SOLID、IoC/DIP)

(3)高级:可重用

代码可以用在很多场景(轮子可以用在马车、汽车、飞机上)

DSL、面向对象的设计模式、Web Service、”Codeless”

复杂度一般由业务逻辑、控制逻辑和数据逻辑组成,业务逻辑决定了复杂度的下限,控制逻辑决定了复杂度的上限。  分开è 解耦

设计模式、函数式编程、DSL、状态机、插件、依赖倒置和反转控制等

整洁代码:不是写出来的,而是读出来的(方便他人阅读)

代码注释:像说明书一样清晰(函数的功能以及如何使用它,example)

编程原则:

(1)避免重复原则(DRY, Don’t Repeat Yourself)

抽象成数学模型,数学建模;用一种方式解决多种问题

(2)单一职责原则

一个类或者模块应该只有一个职责(各司其职)

简单化、模块化、让你的组件不断复用

(3)高内聚、低耦合原则

内聚:一个模块内各个元素彼此结合的紧密程度

耦合:不同模块之间的依赖程度

让每一个模块做到独立,做到精益求精,同时把模块间的耦合降到最低,不会因为动了一个模块,而导致其他模块出现问题。(没有依赖就没有伤害)

(4)开闭原则

对修改是关闭的,对扩展是开放的。

3.测试

程序测试包括:单元测试、功能测试、集成测试、非功能测试、回归测试等。

种类

目的

单元测试(白盒测试)

测各个模块(零件)是否都能正常工作

功能测试(黑盒测试)

各个模块合在一起能否正常运转

集成测试

模块和模块之间或者系统和系统之间的测试

非功能测试

检查软件应用程序的非功能性方面(性能、可用性、可靠性等)

性能测试、安全测试、稳定性测试、健壮性测试、破坏性测试、可用性测试、灵活性测试等

回归测试

把以前做过的测试以及犯过的错误再测一遍,确保代码或配置的修改、需求的增加不会影响现有功能

做测试最好的方式不是用人工,而是写代码。自动化测试

想要做好测试,先训练自己全面思考的能力。

4.成长论

1.拆分任务:动手工作前,先做任务分解

2.阅读代码:重要的不是写代码,而是读代码

读什么样的代码?(1)被反复使用的代码(2)穿越时间的代码(3)好调试的代码

3.找到捷径:通读牛人代码

4.追本溯源:多读文档,多读书

第三部分 进阶通道

1.设计程序

原型设计:面向用户,提前打个样。

(1)先做最难的部分,既能提早发现问题,又能节省开发时间。

(2)原型设计的关键是接口

架构设计:面向开发人员,一份详细的施工蓝图。

包括概要设计(high level desogn)和详细设计(low level design)

《设计模式:可复用面向对象软件的基础》

(1)分而治之,理清思路。

(2)考虑系统的异常情况和极限情况。

技术调研

(1)调研做得好不好,和阅读代码的能力高度相关。

(2)分析优缺点,结合场景才有效。

2.项目管理

开发模式

开发模式

特点

具体实现

瀑布式开发模式

传统,一层一层开发

缺点:慢

先分析需求,产生需求文档;

再做概要设计,技术选型等;

接着做详细设计,事无巨细地梳理流程和细节;

最后编码、测试、上线。

敏捷开发模式

做一点发一点,小步快跑,快速迭代

本质:化繁为简

先把框架搭出来,把后续任务拆解成一个个小模块,让每个团队负责其中一块,大家根据协议并行开发,最后拼在一起。

班车模式

瀑布和敏捷的折衷

按一定节奏

我的发布每周一次,赶得上就跟着一起发,赶不上就等下一班。

分布式微服务开发模式

所有团队之间没有工程上的依赖,大家耦合在一个标准的开发模式和框架上,能非常方便和高效地协作。(DevOps开发模式)

把代码库、数据库全部分开,每个服务都由一个全功能的小团队来负责。

验证效果:做A/B test,用数据说话。

监控打磨:上线前做好监控与压测(一般可上10倍的压力)

3.学习进阶

打牢基础,以不变应万变

打牢自己的理论基础,比如编程的一些方式、修饰模式(添加新的行为的设计模式)、解耦、提升代码重用度等。

技术基础

程序语言

语言的原理,类库的实现,编程技术(并发、异步等),编程范式,设计模式……

系统原理

计算机系统,操作系统,网络协议,数据库原理……

中间件

消息队列,缓存系统,网关代理,调度系统……

理论知识

算法和数据结构,数据库范式,网络七层模型,分布式系统……

搭建体系:用知识树系统学习

主动学习:提高你的学习效率(讨论,实践,教授给他人(写博客、做分享))

第四部分 高手修养

预见未来:软件工程师要有前瞻能力

权衡利弊:软件工程师要有取舍能力

攻克难题:主动寻找技术难题;尝试不同解决方案

关键决策:技术选型的六大要素

看这项技术解决的是不是大问题。(主观)

看这项技术解决问题的方式是否让人有想象空间。(主观)

看有没有大公司撑腰(客观)

看有没有很好的技术社区(客观)

看有没有杀手级应用(客观)

看有没有经历10年以上的时间(客观)

代码评审:不是“做出来”,而是“做漂亮”。

Google’s Code Review Guidelines

设计:代码是否经过精心设计并适合系统?

代码是否符合开发者意图?代码对用户是否友好?

复杂性:代码是否可以更简洁?未来其他开发人员接手时,是否易于理解与易用?

测试:代码是否经过正确且设计良好的自动化测试?

命名:开发人员是否为变量、类、方法等选择了明确的名称?

注释:注释是否清晰有效?

风格:代码是否遵循了谷歌的代码风格?

文档:开发人员是否同步更新了相关文档?

含金量高的比赛:

GCJ(Google Code Jam)、Facebook Hacker Cup、KDD Cup

第五部分 行业大神

丹尼斯.里奇(Dennis Ritchie)

C语言之父,UNIX系统联合发明人

保持简洁

林纳斯.托瓦兹

Linux之父,开源运动的发起人,发明git版本控制器

只是为了好玩

吉多.范罗苏姆(Guido van Rossum)

Python之父

允许不完美、保持开放

玛格丽特.汉密尔顿(Margaret Hamilton)

拯救人类登月计划

制定规范,严格测试

杰夫.迪恩

开创分布式系统

开创新领域

法布里斯.贝拉

QEMU、FFmpeg、TinyC、QuickJS

一个人就是一支队伍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容