读《阿里不止代码》观后感
程序员文章站
2024-02-02 18:27:22
...
划重点1:
业务代码都写不好的程序员肯定无法成为技术大牛,但只把业务代码写好的程序员也还不能成为技术大牛
划重点2:
Do more
要想有机会,首先你得从人群中冒出来,要想冒出来,你就必须做到与众不同,要做到与众不同,你就要做得更多!
Do better
你负责的系统和业务,总有不合理和可以改进的地方
Do exercise
1)Learning 2)Trying 3)Teaching
I hear and I forget. I see and I remember. I do and I understand
划重点3(3-5)年:
● 基础的 Java 知识:你会开始看《Java 编程思想》、《Effective Java》。
● 高质量代码进阶知识:你会开始看《重构:改善既有代码的设计》、《代码大
全》、《编程珠玑》。
● 常用的主流框架:比如 SSH 相关的《Spring 实战》、《Spring Boot 实战》、
《Hibernate 实战 ( 第 2 版 )》。当然,这些书已经不够了,你会通过 Google、
Baidu 大量地浏览在线的资源:Apache 官网、Spring 官网、Hibernate 官
网。你会去 * 问问题或找答案。
● 系统设计与算法知识:《系统分析与设计方法》、《设计模式》、《需求分析与系统
设计》、《面向对象分析与设计》、《UML 用户指南》、《算法导论》
● 其他知识:比如数据库调优、缓存框架、NoSQL 数据库、日志框架等等
划重点4(3-5)年:
● 能对所负责领域的业务特点、发展趋势、友商竞争分析有很好的洞察?能知道
这个业务领域的客户是谁?他们的需求是什么?他们的痛点是什么?所以,这
个 TL 应该需要学习《咨询的奥秘》、《探索需求》、《系统化思维导论》。对于技
术型的 TL,还应该了解《成为技术领导者:掌握全面解决问题的方法》。
● 服务于特定领域的客户,我们需要能了解我们的客户企业架构、业务知识。要
了解清楚规划的产品、服务,什么才是客户所需要的。那么,从理论上,我们
是否应该学习一些 TOGAF、NGOSS、ITIL 等业务理论以及业务知识?
● 作为 TL,是否有必要能将自己对于市场的洞察转换成业务规划,并能向自己的
老板(或者投资人)说清楚、讲明白?并争取到老板的同意,包括资金、人力
资源等。对于,能否把事情讲明白,我们可能需要学习《金字塔原理》,并能
非常清晰、有逻辑性地进行表达与沟通。当然,有些业务发展的事不一定特别
有逻辑,是需要摸索、尝试,那么你是否能将一个不确定的领域说服老板并获
得支持,我们又需要什么?《博弈论》、《影响力》等。
● 获得老板支持后,就需要开始带着兄弟们干活了。作为带头人,你看我们是否
需要能将业务趋势、客户痛点进行业务建模好让团队的 PD、技术都能理解?
在做业务进一步深入分析,可能就需要学习《领域驱动设计 : 软件核心复杂性
应对之道》、《实现领域驱动设计》、《企业应用架构模式》、《恰如其分的软件架
构》等等。
● 做完业务设计后,开始要带着团队做技术方案设计、接口设计以及编码实现
等。这个过程,TL 又需要具备软件项目管理的能力。无论是《PMBOK 指
南》,还是《敏捷软件开发》、《人月神话》、《程序开发心理学》,相信总归还是
会有点帮助的。
● 对于一些有国际化要求的公司,还需要再学习英语吧!
● 嗯,还需要有个好的身体,还需要经常锻炼,学习科学的健身吧(说起来自己
脸红)。至少我明白了一个道理,以前我都是跟自己说,等这段时间过了,闲
下来去锻炼一下。其实,我发现,越是忙的时候,越需要锻炼身体!
划重点5:
什么是架构?
在我看来软件架构就是将人员、技术等资源组织起来以解决业务问题,支撑业务
增长的一种活动。可能比较抽象,我想我们可以从架构师的一些具体工作任务来理解
这句话含义:
组织业务:架构师通过探索和研究业务领域的知识,构建自身看待业务的”世界
观”。他会基于这种认识拆分业务生命周期,确立业务边界,构建出了一套解决特定
业务问题的领域模型,并且确认模型之间、领域之间的关系与协作方式,完成了对业
务领域内的要素的组织工作。
组织技术:为了能在计算机世界中运作人类社会的业务模型,架构师需要选用计
算机世界中合适的框架、中间件、编程语言、网络协议等技术工具依据之前设计方
案组织起来形成一套软件系统方案,在我看来软件系统就像是一种技术组织,即技
术组件、技术手段依据某种逻辑被组织起来了,这些技术工具被确定了职责,有了明
确分工,并以实现业务功能为目标集合在了一起。比如 RPC 框架或消息队列被用
于内部系统之间的通信服务就如同信使一般,而数据库则负责记录结果,它更像是
一名书记员。
组织人员:为了能够实现利用软件系统解决业务问题的目标,架构师还需要关注
软件系统的构建过程,他以实现软件系统为号召,从公司组织中聚集一批软件工程
师,并将这些人员按不同工种、不同职责、不同系统进行组织,确定这些人员之间的
协作方式,并关注这个组织系统是否运作良好比如沟通是否顺畅、产出是否达到要
求、能否按时间完成等。
组织全局,对外输出:架构师的首要目标是解决业务问题,推动业务增长。所以
他非常关心软件的运行状况。因为只有在软件系统运行起来后,才能对外提供服务,
才能在用户访问的过程中,解决业务问题。架构师需要关注运行过程中产生的数据比
如业务成功率,系统运行资源占用数据、用户反馈信息、业务增长情况等,这些信息
将会帮助架构师制定下一步架构目标和方向。
所以软件架构不仅仅只是选用什么框架、选用什么技术组件这么简单。它贯穿了
对人的组织、对技术的组织、对业务的组织,并将这三种组织以解决业务问题这一目
标有机的结合在了一起。
划重点6:
从价值出发-找寻学习与工作的新思路
明确自身的业务相关主体
向前一步,为更大的价值负责
像架构师一样思考,用价值找寻重心
学会连接,构建体系
划重点7:
解决方案落地和数据运营
● 需求细化:拆分成最小可交付产出,尽量避免一个需求做了 1 个多月,才去找
PD 和用户验收。
● 随时拥抱用户:迭代式产出,交付即验收,让不准确性降到最低,在错误误差
最小的时候修正。
● 重点跟进质量管理和运营:透明数据,鼓励团队尽早尽快修复 bug,并有严格
的上线前 bug 解决率标准。
● 尽全力保证线上发布成功率。
划重点8:
开源项目应用
不要重复发明*,但要找到合适的*!你开的是保时捷,可别找个拖拉机的*。
聚焦是否成熟
1)版本号:一般建议除非特殊情况,否则不要选 0.X 版本的,至少选 1.X 版本
的,版本号越高越好。
2)使用的公司数量:一般开源项目都会把采用了自己项目的公司列在主页上,公
司越大越好,数量越多越好
3)社区活跃度:看看社区是否活跃,发帖数、回复数、问题处理速度等
聚焦运维能力
1)开源方案日志是否齐全:有的开源方案日志只有寥寥启动停止几行,出了问题
根本无法排查
2)开源方案是否有命令行、管理控制台等维护工具,能够看到系统运行时的
情况
3)开源方案是否有故障检测和恢复的能力,例如告警、倒换等
深入研究,仔细测试
1)通读开源项目的设计文档或者白皮书,了解其设计原理
2)核对每个配置项的作用和影响,识别出关键配置项
3)进行多种场景的性能测试
4)进行压力测试,连续跑几天,观察 cpu、内存、磁盘 io 等指标波动
5)进行故障测试:kill,断电、拔网线、重启 100 次以上、倒换等
保持纯洁,加以包装
划重点9:
● Web 开发这十年:http://www.infoq.com/cn/articles/web-development-ten-years
● GUI 应用架构十年变迁:https://segmentfault.com/a/1190000006016817
● 大话前端时代一:https://halfrost.com/vue_ios_modularization/
● 写给初学前端工程师的一封信:https://zhuanlan.zhihu.com/p/28536429
● 母鸡与前端工程师:http://www.ruanyifeng.com/blog/2016/07/hen-and-
front-end-engineer.html
● 李 开 复 人 工 智 能 预 言:http://tech.sina.com.cn/it/2017-05-20/doc-ify-
fkqks4361454.shtml
● 《*面交互》:https://book.douban.com/subject/26947799/
划重点10:
规划落锤
1. 长期规划
2. 勇气与吸引力法则
划重点11:
You are the owner of your career.
建立自己的知识体系
第一步,寻找线索。
第二步,是建立联系。
第三步,是分类。
第四步,是追本溯源。
划重点12:
微软对架构师有一个分类:企业架构师 EA(Enterprise Architect)、基础结构
架 构 师 IA(Infrastructure Architect)、 特 定 技 术 架 构 TSA(Technology-Specific
Architect) 和解决方案架构师 SA (Solution Architect)。这个分类是按照架构师专注
的领域不同而划分。
职责一:全局的技术规划
职责二:统一的方法 & 规范 & 机制
职责三:完备的基础构建
职责四:落地的规划才是架构
从无到有的是架构;从表到里的是抽象;从粗到细的是设计。
划重点13:
喜爱读书,就等于把生活中寂寞无聊的时光换成巨大享受的时刻。有了书,各个领域的智慧,几乎触手可及。我们能有幸站在前辈、巨人的肩膀上,看更远的风景。
推荐书籍:《Effective Software Testing》
自动化和持续集成的方案研究比较深入,能直面自动化和持续基础现阶段的一些问题
推荐书籍:《程序员修炼之道 - 从小工到专家》
向高级程序员和专家进阶的思想启蒙书
推荐书籍:《设计模式之禅》
指导我们编写出可维护性好、可扩展性强的代码,对于设计模式的理解层次
推荐书籍:《Spoken Language Processing: A Guide to Theory, Algorithm and System Development》
深入浅出,将基础理论、语音识别、语音合成、语义理解和对话系统等进行了系统性的介绍,是了解口语对话系统最基础模块的一条捷径。
推荐书籍:《机器学习导论》
涵盖了机器学习的相关知识
推荐书籍:《Reinforcement Learning: An Introduction》
强化学习领域的最经典书籍
推荐书籍:《Programming Rust》
Rust 是一门新兴的系统编程语言,它为安全性和并发而设计,提供高层的抽象,同时有 C/C++ 的性能。
推荐书籍:《Machine Learning: A Probabilistic Perspective》
用统一的概率方法为机器学习领域提供了一个全面和独立的介绍
推荐书籍:《Architecture of a Database System》
大家剖析了一个成熟数据库系统的整体架构,以及数据库的各个核心模块
上一篇: 将数组用树有序表示及树的三种遍历
下一篇: 微机原理与接口技术技术大题第二篇
推荐阅读