软件开发,软件定制,ERP系统定制,东莞软件开发,东莞软件公司,东莞软件开发公司,生产管理系统,成本核算软件,ERP软件开发,上位机软件开发,东莞APP开发定制,APP软件开发,工厂软件开发,小程序开发定制,商城开发,网站建设,ERP系统,生产管理软件开发,长沙软件开发,岳阳软件开发
软件开发,软件定制,ERP系统定制,东莞软件开发,东莞软件公司,东莞软件开发公司,生产管理系统,成本核算软件,ERP软件开发,上位机软件开发,东莞APP开发定制,APP软件开发,工厂软件开发,小程序开发定制,商城开发,网站建设,ERP系统,生产管理软件开发,长沙软件开发,岳阳软件开发

官方热线:0769-22501808

7x24热线:+86 13310811808

© 2012-2015 宏翔科技 版权所有

十年的编程经验给我带来了什么?

出品 | CSDN(ID:CSDNnews)行业新闻2022/5/22 19:42:48

2022年4月,也就是上个月,是我成为程序员十周年。 其实我很久以前就开始编程了(不过那时候我还没成为专业人士),只是没有工资。我十几岁的时候建过一个网站,做过IRC机器人(IRC机器人是一组脚本或者一个独立的程序连接到互联网上作为客户端进行中继和聊天,所以在其他IRC用户看来是其他用户),也写过一些Python脚本,但是规模不大。之后的几年,我专心学了几年吉他,暂时放下编程。二十多岁的时候,一个偶然的机会,我需要重新开始建网站。重新开始编程后,发现自己是如此热爱编程,感叹Web发生了巨大的变化。(现在已经是HTML 5了!) 这让我有点动摇。编程是不是比继续读哲学(大学专业)更好的选择?我的一个程序员朋友替我回答了这个问题,并慷慨地给了我一个带薪实习的机会。 我成为程序员已经十年了。说实话,时间的长短并不是我作为程序员成长的重要标志,也不是我职业生涯的重要评判标准。但是时间的流逝是真实的,让我停下来反思。 下面是我回顾过去十年的一些想法,比如我学到的,忘记的,改变的一些东西。 这些经历帮助我开发软件,从实习生到软件开发人员,再从高级软件开发人员到工程师。但以下观点仅代表我个人,与我经历大相径庭的人可能会有不同的想法。 无畏者是不可战胜的。 我所敬佩和学习的大多数程序员都有一个很少被提及的特质:无畏。 他们可以无所畏惧地潜入一个代码库,打开一个可能有风险的依赖代码,即使不知道如何完成,也可以无忧无虑地开始。 他们不屈不挠、大无畏的精神非常鼓舞人心。我发现让自己无所畏惧是最好的学习加速器之一。 未来是不可预测的 毫无疑问,没有人能预测未来。 但是当我真正把这个带入编程的时候,我有了一些想法。 在职业生涯的前三分之一,我会这样想:我们需要它,所以我们开始创造。 接下来的三分之一时间,我在想:我们可能会需要,所以要开始准备了。 现在:我们不知道是否需要,但是有这个可能。看起来我们可能需要它,但事物是变化的,所以最好现在就创造我们需要的东西。 代码是为测试而写的。 我的代码不仅仅是用来让计算机执行一些操作,我还为其他事情写代码,比如便于阅读理解,便于删除修改,或者便于复习等等。 给客户带来价值是唯一的意义。 我们的目标是什么?实现类型安全?实现100%的测试覆盖率?创建完美的开发工具?不,这些不是我们的目标。 我们的目标是通过不断提交能够解决客户问题的软件,为客户创造价值。 编写软件通常比交付软件容易,但交付才是关键。 不可能完美 我不确定我过去是否追求过完美,但现在我改变了我的想法。 你不可能事事完美。100%的完美是不可能的。当你认为你已经达到了完美,你很快就会想起你忽略了一些东西。 现在我不再追求完美了。我认为一个成功的程序即使有缺陷也是好的。 不要太在意。 为了便于大家理解和扩展,你对代码库进行了重构和清理,但是如果四个月后这个代码库被删除了,你做不做都无所谓了。 你可能会花上几周的时间在你写的所有代码中添加跟踪和可观察性,却发现没有人会看它。 不用太担心,你可以把时间花在这些技术活动上,但是接受不一定有用。 找出规则背后的意义 如果你在五年前问我TDD、代码清理、软件技术等一些观念是否教条,我会坚定地回答:“不!整洁的代码很重要!” 但现在我不这么认为了,因为这和规则无关。重要的是,这些规则试图阻止问题的发生。如果你做的事情不会造成这些问题,或者你有办法解决这些问题,那么你就不需要这些规则。 书写测试 不用担心测试是集成测试还是端到端测试,单元测试还是功能测试。不要和别人争论是否应该测试私有方法。不要担心你是否应该在测试中点击数据库。 相反,编写测试可以告诉你系统是否正常工作。理想情况下,只需3次点击,不到1秒钟即可完成。 最佳实践来自明确的目标。 最佳实践的前提通常是您知道代码应该做什么。 但是如果你仍然不知道计划的目标,或者计划的内容是否会在一段时间后改变,那么一些最佳实践反而会成为绊脚石。 有些方法在用于重写时可能是最好的,但如果你还在探索,那么最好的可能会变成最差的。 别人的代码不一定好。 职业生涯初期,我用的是Ruby和JavaScript,可以用包管理器。但是“难道没有一个包可以做到这一点吗?”这个问题一直没有解决。 如果可以的话,用库代替自己写。尽可能多地重用代码。不要多此一举。不要复制粘贴。这些都是常识,多年来我一直深信不疑。 但是这也有缺点。有时候,自己编写一个函数实际上可能比添加依赖项更好。 反馈回路不是浪费能量。 我永远不会后悔改进反馈回路。更快的测试,更好的测试输出,更快的部署,手动反馈环可以一键给我提供反馈。 然而,一旦你看到开发具有真正快速和高信号反馈回路的软件的曙光,你将永远渴望得到它。 总有未完成的工作。 一次失败的测试,一个编译器错误,一句没说完的句子3354,用其中的一句结束你的一天。第二天早上,你可以坐下来,从你停下来的地方继续,而不是花时间思考今天应该做什么。 这是快速开始一天工作的好方法。 磨快你的刀。 用心学习工具(比如Vim、git、shell……)学到了很多东西。 您不仅会使用您的工具,还会学习如何更好地配置和使用它们。 招聘困难 经过几百次面试,我的感觉是招聘真的太难了。很多随机因素都会影响面试的判断,很难在特别好和特别差的人当中做出选择。 卷起你的袖子。 我喜欢共事的人都有一个共同点:他们知道这份工作没意思,但他们有一种“不做我就下地狱”的使命感。 与他人合作。 多年来,我一直和别人在同一个代码库上工作,这让我在软件工程上更进了一步。 和别人一起工作,你会看到决策是如何运作的。你会发现什么对最终结果重要,什么不值得一提。你会后悔写了一些代码,但总有一些你写的代码让你开心. 了解整个堆栈 对我来说,没有什么比听到“你真的不需要知道它是如何工作的…”更让我兴奋的了 当然,可能有些东西我真的不需要理解,但是如果我没有试图弄清楚GC、Unix、多线程.数据库是如何存储数据的,解释器和编译器是如何工作的,那时我不能做我现在能做的。 知道这些也可以帮助我更好的工作,通过更精确的称重,我可以发现发生了什么,这样我就可以做出更好的技术决策。 代码审查不是万无一失的。 很长一段时间,如果一个错误通过了我的代码审核,我就会陷入自责。但是后来我发现别人也会犯这个错误,他们很自由很轻松的谈到了代码审查可能的疏漏。 这改变了我对代码审查的看法:作为不完美的人,我们需要使用一些其他方法来验证代码。 不是每一次代码审查都值得努力。 不是每个代码都需要真正彻底的审查。有时候,如果风险可以接受,那就赶紧删掉“LGTM!”是的,它是。这可以减少对同事的约束,有助于建立同事之间的信任。 病毒负面情绪 你越让步,你的负面情绪就越多。 像病毒一样,它让一切黯然失色。其实人是容易产生负面情绪的。难的是自己去看事物,去看它们的美。鼓励一些看似不可行的想法,培养和创造快乐是一件很有挑战性的事情。 代码有质量。 代码是高质量的。你不需要的每一行额外的代码都是多余的。它对您的代码基础造成了很大的压力,这使得您在需要时更难转向和改变方向。你需要的代码越少越好。 代码必须被读取、测试、兼容、安全并能够继续运行。即使它没有做任何有用的工作。所以删掉它,继续前进。如有必要,从版本控制中还原。 测试也是如此。 编程是我生活的一部分。 从我开始实习开始,除了编程,我还花了很多额外的时间做一些编程相关的事情,比如看技术书,写书,做副业,写博客,做演讲,学习新的语言和工具等等。 如果你能证明你真的擅长编程,那么有些公司就不会在意你的大学学历是什么。 工作之余,我也喜欢编程。虽然有些事情就像工作一样,不一定要做好。 如果我只是在日常工作中编程学习,我的职业生涯就完全不一样了。 电脑速度很快。 构建Web应用的时候,我觉得100ms很快,50ms很快。但是写编译器让我明白,对于现代计算机来说,1ms是永恒的。 我还是喜欢编程。 虽然不能做到完美,但不代表我不在乎它是否完美。我纠结的事情少了,我依然热爱编程。 今天就说到这里,这是文章结尾。 大家好,这是文章开头。