本文章为《不止代码》阅读笔记,本书能够在阿里技术公众号中找到,这是一本大牛分享经验的书,感谢大牛们的分享~前端
1、如何快速成长为技术大牛 -- 李运华nginx
Do More git
1)熟悉更多的业务,无论是否是你负责的;熟悉更多代码,无论是否是你写的程序员
好处:* 需求分析时更加准确,能在需求阶段识别风险、影响、难点github
* 处理问题更快,可以快速的判断问题可能缘由并进行排查处理web
* 方案设计更全面。可以设计出更好的方案面试
2)熟悉端到端。好比你负责web后端开发,可是实际上用户发起http请求,经过不少步骤到达服务器(例如浏览器缓存、DNS、nginx等),服务器通常又会通过不少处理才到你写的那部分代码(路由、权限等),掌握整个流程中的不少系统或者步骤,对综合水平有很大做用算法
* 方案设计、线上故障处理都须要综合技术水平spring
3)自学。例如垃圾回收,调优,网络编程等数据库
Do Better
例如:* 重复代码太多,是否能够引入设计模式?
* 系统性能通常,能否进行优化?
* 目前是单机,若是作成双机是否更好?
* 版本开发质量不高,是否引入高效的单元测试和集成测试方案?
* 目前的系统太庞大,是否能够经过重构和解耦改为三个系统?
* 阿里中间件有一些系统感受咱们也能够用,是否能够引入?
Do exercise
1)Learning 要注意系统化,例如JVM原理、Java编程、网络编程、HTTP协议等等,建议先完整的看完一本书全面的了解,而后经过google、视频、博客有针对性的查有疑问的地方或者一些技巧
2)Try 本身去尝试搭建一些模拟环境,本身写一些测试程序
3)Teaching 通过Learning和Trying,能掌握70%左右,但要真正掌握,必定要作到可以跟别人讲清楚。
2、毕业 3 年,为什么技术能力相差愈来愈大? -- 蛰剑
做者认为 能力 = 知识 + 逻辑
系统化的知识是在关键问题的点的清晰理解的基础上,逐渐联系造成的。
好的逻辑是在知识的实践和复盘中创建的。
3、程序员吃的是青春饭?本质上取决于...... -- 毗卢
程序员职业发展分两个阶段:
第一阶段:大学毕业 3 到 5 年,主要以学习、积累为主
* 基础的Java知识:《Java编程思想》、《Effective Java》
* 高质量代码进阶知识:《重构:改善既有代码的设计》、《代码大全》、《编程珠玑》
* 经常使用的主流框架:好比 SSH 相关的《Spring实战》、《Spring Boot 实战》、《Hibernate实战(第2版)》、Apache官网、Spring官网、Hibnate官网、StackOverflow
* 系统设计与算法知识:《系统分析与设计方法》、《设计模式》、《需求分析与系统设计》、《面向对象分析与设计》、《UML用户指南》、《算法导论》
* 其余知识:好比数据库调优、缓存框架、NoSQL数据库、日志框架等等
第二阶段:大学毕业 5 到10 年 ,成为团队贡献者,而非我的贡献者
* 对所负责领域的业务特色、发展趋势、友商竞争分析有很好的洞察,知道业务领域的客户群体及其需求,并了解其痛点。此时须要学习《资讯的奥秘》、《探索需求》、《系统化思惟导论》、《成为技术领导者:掌握全面解决问题的方法》。
* 了解客户的需求、企业架构、业务知识,清楚规划的产品、服务,此时须要学习一些TOGAF、NGOSS、ITIL等业务理论以及业务知识。
* 能清晰且有逻辑性的进行表达与沟通,能将本身对于市场的洞察转换成业务规划,争取到老板的赞成,包括资金、人力资源等。此时须要学习《金字塔原理》、《博弈论》、《影响力》等。
* 能将业务趋势、客户痛点进行业务建模。此时须要学习《领域驱动设计:软件核心复杂性应对之道》、《实现领域驱动设计》、《企业应用架构模式》、《恰如其分的软件架构》等。
* 须要具有软件项目管理的能力,能带领团队作技术方案设计、接口设计以及编码实现等。此时须要学习《PMBOK指南》、《敏捷软件开发》、《人月神话》、《程序开发心理学》。
* 对于有国际化要求的公司,须要学习英语。
* 须要一个好身体,常常锻炼。
* 积极面对团队磨合的挑战、技术方案的政治、平台优先 or 业务优先的博弈、低落的团队氛围、我的的低估等等。
4、技术变化那么快,程序员如何作到不被淘汰? -- 空融
业务、技术与软件系统的价值链:业务就是指某种有目的的工做或者工做项目,业务的目的就是解决人类社会与吃喝住行洗洗相关的领域问题,包括物质的需求和精神的需求,使开展业务活动的主题和受众都能获得利益。通俗的讲业务就是用户的痛点,是业务提供方(公司)的盈利点。而技术是解决问题的工具和手段。软件系统的价值是为了解决业务问题。
公司依靠软件系统提供业务服务而创造价值,程序员则是经过构建并持续演进软件系统服务能力以及业务功能以支撑公司业务发展而创造价值。
软件系统体现自身价值的方向:
* 业务领域与功能
* 服务能力:系统正确性(程序可以正确标书业务流程,没有bug)
可用性(能够 7 * 24 小时 * 365 不间歇工做)
大规模(高并发,高吞吐量)
架构:将人员、技术等资源组织起来以解决业务问题,支撑业务增加的一种活动。具体可从如下角度看:
组织业务:经过探索和研究业务领域的知识,构建自身看待业务的“世界观”。基于这种认识拆分业务声明周期,确立业务边界,构建出了一套解决特定业务问题的领域模型,而且确认模型之间、领域之间的关系与写做方式,完成里对业务领域内的要素的组织工做。
组织技术:选用合适的框架、中间件、编程语言、网络协议等技术工具依据以前设计方案组织起来次年改为一套软件系统方案。
组织人员:根据人员按不一样工种、不一样职责、不一样系统进行组织,肯定这些人员之间的协做方式,并关注这个组织系统可否运做良比如如沟通是否顺畅、产出是否达到要求、可否按时间完成等。
组织全局,对外输出:须要关注运行过程当中产生的数据好比业务成功率,系统运行资源占用数据、用户反馈信息、业务增加状况等。
成本与收益:能够基于成本与收益的关系去思考本身的每一项技能的价值。好比下降软件构建成本的相关工程技术:项目管理、敏捷开发、单元测试、持续集成、持续构建、版本管理等。
架构目标须要适应业务的发展:仔细衡量正确性、大规模、可用性三者的关系。确保系统是复核设计需求的,保证系统达到可接受的正确性,为后续能过快前进打下基础,为企业下降构建成本。
正确看待分工:分工是有价值的,将软件系统生命周期进行拆分(好比开发生命周期、测试生命周期、测试生命周期、用户访问生命周期、软件运维生命周期等),他使得复杂昂贵的任务能够被简单、并行、可替换的流水线方式解决。但同时也要关注总体价值,避免增长软件实施成本。
从价值触发 - 找寻学习与工做的新思路
明确自身的业务相关主体:找到工做的协做关系网内的业务方和客户方,进而找到客户方中找到离本身最近的业务价值点,从也无妨中挖掘更多的资源。甚至能够按这个思路顺着网络向上或向下挖掘价值链条,整合更多的上下游资源以实现更大的价值。
向前一步,为更大的价值负责:试着转变思惟,从架构师的角度思考价值问题,看可否将技术贯穿到业务、到用户、到最终的价值去。
像架构师同样思考,用价值找寻重心:向架构师那样全局性思考,把遇到问题进行拆分,把学习到的事务串联起来,努力构成完整的价值链条。
学会链接,构建体系:咱们应当树立自身的知识体系以吸取融合新知识,将鼓励的概念链接起来,造成自身的价值链条。
5、加班越久故障越多,如何跳出程序员的恶性循环? -- 冠楠
问题:团队负载较重的状况下回出现质量不高的状况
解决方案:
需求细化:拆分红最小可交付产出
随时拥抱用户:迭代式产出,交付即验收
重点跟进质量管理和运营
尽全力保证线上发布成功率
评估的标准:
需求的吞吐量:团队指定时间内完成的需求数。
需求的平均完成时长
新增缺陷的数量
缺陷平均解决时长
线上发布的成功率
缺陷的reopen率:缺陷呗reopen的次数与缺陷书目之比
6、如何在阿里技术面试中脱颖而出? -- 宗心
招人的衡量标准:
技能:工做项目经验,以及解决疑难问题的能力。
潜力:对计算机相关的专业的只是体系是否是完整,基础是否是扎实,平时是否是喜欢钻研。
软实力:包含了性格、执行力、领导力等方方面面,它表明了候选人是否能快速融入团队,拿到结果,带领团队攻城拔寨,激励和影响身边的人变的更加优秀等等。
对比标杆:是否比团队中同一等级中50%的同窗优秀。
面试的方法:
面试不要作的事情:问一些知道性的问题(百度)
问一些特别复杂的问题,好比特别复杂的算法
问一些假设性的问题假设你参加了这个项目
面试应该作的事:
问已经发生的事
问解题思路:好比说,不少同窗说本身作过架构,而后都会讲本身作了一个解耦和分层的框架,其实这类框架iOS不少,外部github上就有各类方案。在阿里内部手淘糟践作的bundle拆分时沉淀的容器规则,天猫开源出去的beeHive,闲鱼内部的Xframework,抑或是服务端的spring mvc,其实都实现了IOC,但实现和思路上都有一些差别,到底为何这么作是有区别的,这里面就能够看出知识广度,总结和思辨能力,在关键路径上的技术判断。
少问多听:尽可能让应试者本身陈述,而后以学习和交流的心态对陈述中存疑的地方再进行发问。
STAR原则:
处境:在什么样的环境下
任务:接到了什么样的任务
行动:而后具体怎么落地
结果:拿到了什么结果
鉴别方式:
更多的关心 What/How/Why :作了什么事情,怎么作,为何这么作
细节!细节!细节!
市场须要什么样的技术人:
经验丰富,只是体系完整:经验能解决实际的问题,另外知识体系可让你在遇到新的问题时触类旁通。找到身边的标杆,向更优秀的同窗学习。
保持良好的习惯,不忘总结和提高:不积跬步无以致千里,贵在坚持积累。好比每周写周报的时候,想本身这一周到底收获什么,最近有研究什么新的技术或者看到什么有趣的文章没有。
7、使用开源项目的正确姿式,血与泪的总结 -- 李运华
软件开发领域流行的原则:DRY,Don't repeat yourself-不要重复造轮子
选:如何选择一个开源项目?
聚焦是否知足业务:过早优化是万恶之源--《UNIX编程哲学》
聚焦是否成熟:1>版本号
2>使用的公司数量
3>社区活跃度:看看社区是否活跃,发帖数,回复数,问题处理速度等
聚焦运维能力:1>开源方案日志是否齐全
2>开源方案是否有命令行、管理控制台等维护工具,可以看到系统运行时的状况
3>开源方案是否有故障检测和回复的能力,例如告警、倒换等。
用:如何使用开源方案?
深刻研究,仔细测试:1>通读开源项目的设计文档或者白皮书,了解其设计原理
2>核对每一个配置项的做用和影响,是被出关键配置项
3>进行多种场景的性能测试
4>进行压力测试,连续跑几天,观察cpu、内存、磁盘io等指标波动
5>进行故障测试:kill,断电,拔网线,重启100次以上、倒换等
当心应用,灰度发布
作好应急,以防万一:例如,若是要用MongoDB或者Redis,能够用MySQL作备份存储
改:如何基于开源项目作二次开发?
保持纯洁,加以包装:建议不要改动原系统,而是要开发辅助系统:监控,报警,负载均衡,管理等。
发明你要的轮子
8、前端工程师的将来在哪里?--成曰 详见文章
一、继续分化(领域、行业、技术栈)
二、继续融合(端技术、Web全栈技术、人工智能与端技术)
三、核心不变(计算机科学本质、软件工程思想与实践、程序员职业素养)
9、前端Leader如何作好团队规划?阿里内部培训总结公开 -- 剑平 详见文章
10、一位优秀前端的自我修养 -- 寒泉
能力:
编程能力:就是用代码解决问题的能力,细分又有调试、算法、数据结构、OS原理等
架构能力:是解决代码规模的问题,包含了一些意识,好比解耦、接口隔离,也包含人事业务创建抽象模型,也有一些常见的模式,好比经典的MVC,还有设计层面,面向对象、设计模式等等。
工程能力:是解决写做的问题,当系统规模更大,如何保证几个高手互相可以配合好?如何保证项目里水平最差的人不脱后退?包括先后端解耦,模块化,质量保证,代码风格,等等。
创建本身的知识体系:
一、寻找线索(列表)
二、创建联系
三、分类(图谱)
四、追本溯源
11、如何成为一名顶尖的阿里架构师? -- 无叶
架构师的职责:
职责一:全局的技术规划
职责二:统一的方法 & 规范 & 机制
职责三:完备的基础构建
职责四:落地的规划才是架构
专职架构师的考核:
考核一:全局的技术规划:技术规划的好坏、全面性、前瞻性
考核二:统一的方法 & 规范 & 机制:关注对应的产出
考核三:完备的基础构建:克制跨团队的合做(清晰边界,共建)
考核四:落地的规划才是架构:紧跟拆解的事情结合实际的组织和业务状况做出决策
关于实施:
第一:创建“架构语言”:是指产品的业务架构,用例和领域模型;研发的应用架构,组件和时序图;运维的部署架构等。
第二:创建“认同体”:经过技术能力、知识传递、领域组织等方式造成“认同体”,且在其中造成架构体系对应的人员体系。
第三:永远作服务者:架构师存在的目的是成就研发团队每个同窗
12、那些技术好书值得一读再读?这又一份经典书单 -- 阿里技术
《Effectice Software Testing》
《程序员修炼之道---从小工到专家》
《设计模式之禅》
《Spoken Language Processing:A Guide to Theory,Algorithm and System Development》
《机器学习导论》
《Reinforcement Learning:An Introduction》
《Programming Rust》
《Machine Learning:A Probalilistic Perspective》
《Architecture of a Database System》
十3、阿里技术大牛最爱的“闲书”,你看过多少? -- 阿里技术
《从优秀到卓越》
《为何精英都是时间控》
《创新者的囧境》
《魔鬼经济学》
《孙子兵法》
《创造天然》
《浮生六记》