我最近重新读了一下《程序员修炼之道-从小工到专家》这本书,这本书可以说是一本浩瀚的宝藏,作者的编程功底实在是深不可测,因为每次读他,每一个阶段读这本书你都可以学习到不同的知识,有一些不一样的理解。
敏捷开发是一种迅速响应变化的软件开发方法。它强调团队协作、客户反馈和对变化的适应。敏捷原则包括持续交付、适应变化、简化设计、重构、测试驱动开发等。了解并实践这些原则,可以帮助你提高软件开发的效率和质量。为什么提敏捷原则,因为现在大厂也在提内部创业,也要看营收,产品不盈利,迟早是会干掉的,那么请问,只要是工作,除了我们所熟知的铁饭碗,还有哪个不是创业的,既然是创业,敏捷开发就会陪伴你,你需要快速试错,找到自己产品的利基市场,市场不会等待,老板也没有时间忍耐你长时间吃老本。
编写高质量的代码是程序员的核心职责。书中提到了一些关键的编程原则,如DRY原则(Don't Repeat Yourself,不要重复自己)、SOLID原则(面向对象设计的五个基本原则)等。遵循这些原则,可以提高代码的可读性、可维护性和可扩展性。
案例:编写一个计算矩形面积和周长的程序
不太好的做法:将计算面积和周长的函数放在一起,没有遵循DRY原则和SOLID原则。
function calculateArea(width, height) {
return width * height;
}
function calculatePerimeter(width, height) {
return (width + height) * 2;
}
function printResults(width, height) {
console.log("Area: " + calculateArea(width, height));
console.log("Perimeter: " + calculatePerimeter(width, height));
}
printResults(5, 10);
好的做法:将计算面积和周长的逻辑封装到一个矩形类中,遵循了DRY原则和SOLID原则。这使得代码更加可读、可维护和可扩展。
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
getPerimeter() {
return (this.width + this.height) * 2;
}
}
function printResults(rectangle) {
console.log("Area: " + rectangle.getArea());
console.log("Perimeter: " + rectangle.getPerimeter());
}
const rectangle = new Rectangle(5, 10);
printResults(rectangle);
测试是确保软件质量的重要手段。书中提到了自动化测试、单元测试、集成测试、系统测试等不同层次的测试方法。掌握这些测试方法,可以帮助你编写出更稳定、更可靠的软件。我的老板大师同学踢出了一个概念 ,API first ,这个概念实际上和这个测试先行是一致的,前后端同学研发需求,先定义好API,然后前后端统一更具这儿api来写测试代码,当然前端是mock,写完之后,通过测试,才开始进入研发,研发完毕才开始进入联调。这个模式有一个好处,联调时间大大降低,因为有测试用例的保障,所以,相对于不做测试直接进入联调来看,一个是两个高质量的对接,一个是两个可能是很低质量的对接。为什么是可能,因为还有比较牛逼的同学,写的接口就是质量很高,但是通过api first,可以保证大多数都是高质量的,所以流程就是解决了把平均水平拉高的事情。
下面给一个案例:很好理解,就是对Rectangle类做测试,这样,后面重构这个类,跑一跑测试就知道功能有没有改飞,改漏了。
// rectangle.js
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
getArea() {
return this.width * this.height;
}
getPerimeter() {
return (this.width + this.height) * 2;
}
}
module.exports = Rectangle;
// rectangle.test.js
const Rectangle = require("./rectangle");
test("Area calculation", () => {
const rectangle = new Rectangle(5, 10);
expect(rectangle.getArea()).toBe(50);
});
test("Perimeter calculation", () => {
const rectangle = new Rectangle(5, 10);
expect(rectangle.getPerimeter()).toBe(30);
});
对于纯数据处理,逻辑与界面无关的部分,建议先写单元测试,这样,即便是后面要做重构,心里也比较有底气。通过编写单元测试、集成测试和系统测试,团队确保了系统的稳定性和可靠性。
作为一名专业的程序员,你需要了解如何管理项目。书中介绍了一些项目管理的基本方法,如需求分析、进度跟踪、风险管理等。掌握这些方法,可以帮助你更好地管理项目,提高项目的成功率就不说了,更重要的意义是,现在各种团队在强调研发效率。研发效率,研发效率,难道之与研发相关吗?程序员一定要占在全局的视角上去看看问题,一个需求的消耗时间觉不仅仅是研发这个环节唯一决定的,需求写的明不明确,是否需要来回勾兑,视觉交付质量高不高,有没有漏点产品功能描述上的一些交互点,是否经过充分测试保证高质量上线,还是匆匆忙忙上线,导致线上故障,又来花时间修修补补,进而压缩了可悲的研发时间,程序员是夹在中间的一个环节而已,因此项目管理尤其重要,风险意识,避免过于乐观,也不要太过于悲观,总之,项目管理技能是必须要了解的。
沟通是程序员的一项重要技能。书中提到了一些有效沟通的技巧,如倾听、提问、表达观点等。掌握这些技巧,可以帮助你更好地与团队成员、客户、管理层等进行沟通,从而提高工作效率。有效沟通,为什么强调有效,我认为在沟通之前一定要明确自己沟通的目的是什么,没有明确的目标,沟通就是瞎扯,你是需要解决某一个具体的问题的,而且在沟通(撕逼)之前,你需要明确,这个问题是不是别人可以解决的,有没有找到key person,如果你沟通的人都无法解决这个问题,那你就的评估下这是否是一个有效沟通了。
书中强调了程序员不断学习、不断进步的重要性,并提供了一些学习方法和技巧。通过持续学习,你可以不断提高自己的技能,为职业生涯的发展打下坚实的基础。为什么提个人主动成长,因为一个人的成长是可以被动的,也可以是主动的,所谓的被动就是被事情推着走,你不情我不愿的,收效胜微,然而,主动就不一样,主动就是自己给自己做规划。
1. 持续学习:作为程序员,你需要不断地学习新技术、新方法和新工具。可以通过阅读书籍、观看教学视频、参加线上课程、参加技术会议等方式来学习,同时你在关注技术书籍时,我建议你读一些垮学科的书籍,对于成长也非常有帮助,比如哲学,请允许我不坏好意的笑了,哲学真的有用的。
2. 实践:学习新知识后,需要将其付诸实践。可以通过编写代码、参与开源项目、解决实际问题等方式来锻炼自己的技能。
3. 反思:定期反思自己的学习过程和工作经验,找出可以改进的地方。可以通过编写技术博客、与他人交流、参加技术团队的代码审查等方式来进行反思。
4. 专注:在学习和工作中保持专注,避免分心。可以通过设定目标、管理时间、减少干扰等方式来提高专注力。
5. 主动承担责任:勇于承担项目中的重要任务,不怕挑战。这可以帮助你提高自己的技能,增加工作经验。
6. 与他人合作:学会与团队成员、客户、管理层等进行有效沟通和协作。这可以帮助你更好地完成工作任务,提高工作效率。
7. 跨领域学习:不仅要学习自己专业领域的知识,还要关注其他领域的发展。这可以拓宽你的视野,为你的职业生涯提供更多可能性。
8. 培养好习惯:养成良好的编程习惯,如编写简洁、可读的代码,遵循编程原则,编写测试用例等。这可以提高你的工作效率,减少出错的可能性。
9. 保持好奇心:对新技术、新方法保持好奇心,勇于尝试。这可以帮助你不断地学习和进步。
10. 保持平衡:在职业生涯中保持工作与生活的平衡。注意休息和锻炼,保持身心健康。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。