热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

30年老程序员的精华经验分享

在我30多年的程序员生涯里,我学到了不少有用的东西。下面是我这些年积累的经验精华。我常常想,如果以前能有人在这些经验上指点一二,我相信我现在会站得更高。
在我30多年的程序员生涯里,我学到了不少有用的东西。下面是我这些年积累的经验精华。我常常想,如果以前能有人在这些经验上指点一二,我相信我现在会站得更高。
 
1.客户在接触到产品之后,才会真正明白自己的需求。
 
这是我在我的第一份工作上面学来的。只有当我们给客户展示产品的时候,他们才会意识到哪些是必须的。给出一个功能性原型设计远远比一张长长的文字表格要好。
 
2.只要有充足的时间,所有安全防御系统都将失败。
 
安全防御现如今是全世界都在关注的大课题、大挑战。我们必须时时刻刻积极完善它,因为黑客只要有一次成功,就可以彻底打败你。
 
3.安全防御是否失败取决于及早规划。
 
假设有黑客会彻底破坏你的防御系统,那你就得提前做好准备。这样即便真的让他们侵入了系统,也盗取不了任何有价值的东西,因为你已经对服务器做了安全设置,比如对数据库中的内容进行了加密,并且对每台有可能遭受攻击的服务器进行了隔离。
 
记住,再强大的防御都会有它的薄弱之处,关键是要有备无患。
 
4.良好的安全防御系统不要在乎它的费用,因为这是战略投资;不及格的安全防御才是被浪费的资源。
 
在我的职业生涯中,经常听到有人抱怨说安全防御是多么多么的复杂和昂贵,他们没有意识到的是,如果防御失败,公司将损失的可能不止几十亿美元。为了节约几块钱而导致企业破产,这种做法毋庸置疑是非常愚蠢的。
 
5.将复杂的东西整理成简单的,是很难的,但是要是把复杂的捣鼓成更加复杂的,那就简单了。
 
这一条适用于编程、设计和几乎所有的创造领域中。我一直以来都希望自己的代码能越易于理解越好。如果你的代码过于复杂和晦涩,那十之**它正常工作的可能性很低。我曾非常有幸地见识到有些程序员费劲千辛万苦,反而让代码更加难以捉摸了。
 
6.成功源自于失败中的学习;失败则是因为容忍错误的横行。
 
有很多程序员总是在辩解,说什么“程序这么难,犯错误很正常了,软件变得糟糕也在所难免了”。这种理由听得多了,于是,大家也逐渐接受了这些扯淡的借口。但是我们作为程序员真的不应该让这些借口阻碍我们的进步,应该谨记,错误只能犯一次,要吸取教训。话说是程序员都会希望自己下一次就能一次性搞定代码。但是没有人是完美的,不过至少我们是在朝着这个方向前进的路上。
 
7.唯一不变的是变化本身,这是谁都无法改变的法则。
 
计划永远赶不上变化,以为明天的世界和今天一样,这种想法本身就是愚不可及的。尤其是在编程世界里,没什么是永恒的。人不能两次踏进同一条河里。
 
8.永远不要停止学习,一旦你停下来,技术的浪头就会狠狠将你拍死在沙滩上。
 
作为程序员立于不败之地唯一方法就是,不断学习、不断进步。因为一旦你松懈下来,你的所有优势都将随风而逝。
 
9.整个软件行业建立在“百家争鸣”的思想上。
 
在我的职业生涯中,我看到过很多程序员会对各种事情较真:预估完成时间上较真,规模大小上面较真等等。而且有的人还屡错屡战。有些以前被批判为“行不通”的技术,现在却已经牢牢占据了人们生活的一席之地,并且现今正向着另一个**冲刺。
 
10.适合你的不一定适合他。
 
在软件项目中我们可做的选择很多很多。有的英明,有的糟糕。但是适合你和你当前情况的选择可能一点都不适用于其他人。我们经常能听到别人说自己又在干什么伟大的创举,但是如果他们说什么这是唯一的好方法时,我会对此嗤之以鼻。
 
11.在这个不断变化的世界中,评估是最为重要的技能。
 
这一点有些人可能并不知道。但是如果你愿意认识新事物,看得到他人的努力,比较做事方法之后再择优使用,那么不但是你自己,还有你的团队、你的项目、你的公司,都将受益无穷。但是很多人对此都不擅长,而很多负责人甚至在这方面表现得非常糟糕。照着别人说得做,以及看别人做什么自己也做什么,是非常容易的。但是如果要全方位地看问题然后再基于自己的需要选择对应的最优方向,这就很难很难了。在软件行业中做抉择是必须的,但是如果当你在不得不评价分析的时候头脑一片茫然,那最终的结果只能是随机挑一个或者是盲从随大流。
 
12.不管黑猫白猫,能抓到老鼠就是好猫。
 
只要你的软件能实现客户指定的功能,他们才不会关心需要解决哪些问题。系统出问题了,异常情况发生了,硬件坏了,程序猿被女朋友甩了,黑客**了:用户永远不会对这些发生兴趣。如果发生意外情况,最好能坦诚说出来,但是你最好要能确保这种情况不会持久,因为你总给将最终的产品交给客户。
 
13.客户的意见决定质量。
 
无论你设置了多少指标,检查过多少表单,审核了多少代码,写了多少测试:这都不是关键,除非客户自己亲眼目睹软件运作正常。关于代码质量、性能、设计和可用性,客户的意见才是决定质量的唯一要素。
 
14.对某方面的无知可能会让你一败涂地,因为你在这方面毫无经验。
 
即使到了今天我依旧在不断惊叹,有的同行竟然仍然没有收集足够的日志、崩溃报告和使用信息来掌控自己的软件。那些对这方面信息不屑一顾的家伙,大多会高估产品的质量。因为如果你不采取措施和记录结果,浑浑噩噩地混日子,终将会导致你对当前情况一无所知,包括你的客户。我一直反复强调,详细而有用的日志记录、程序崩溃跟踪、评论和意见,反正各种只要能让我尽快了解发生了什么问题的途径和方法,都是可行的。不过,我也知道有很多人认为“这种事和程序员有一毛钱的关系吗?”。
 
15.总有更好的办法,但是时间不允许。
 
评估中最难把握的节点是什么时候应该停止头脑风暴开始开工。或许我们会错过那个更好的方法,但是如果要耗费很长时间,那就不值得了。但是这是很难界定的,不过有时候今天的一个小小的选择可能会打败明年那个更佳的选项。Who knows?
 
下面两点引用自一名销售人员,他是我很早以前的同事。有些东西我并不是完全同意,不过也能给予我们不同的角度看问题。
 
16.客户要找愚蠢的。
 
这是我最喜欢的一句话,这个销售人员就职于一家咨询公司。他认为,要找那种不懂技术但是有足够资本挥霍的金主。聪明的人总是会问很多问题;没钱的人无力购买我们的服务。我很庆幸我是一名程序员,哈哈!
 
17.我的工作是欺骗客户,而你的工作则是支持我。
 
第二句话来自于同一个销售人员。他总是喜欢不断地承诺一些不可能的任务,然后当我们终于呕心沥血加班加点赶出来了,他就来收获我们成功的果实。挑战的确让人exciting,但是每次都是这种不可能的任务未免太痛苦。我的建议是,换一个更好的销售人员!【译者注:这不是传说中的PM和程序员之间的“和谐”关系么?】
 
 
英文原文:Lessons From A Lifetime Of Being A Programmer

推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 在Java中,抽象类无法直接实例化的原因在于其设计初衷是为了提供一种模板方法模式,其中包含未实现的方法。这些方法需要由子类来具体实现。因此,直接实例化抽象类没有实际意义,也无法满足编译器的要求。理解这一点有助于更好地利用抽象类进行面向对象编程。 ... [详细]
  • 神经元研究动态:城市大脑标准化体系及评估指标综合框架分析
    神经元研究动态:城市大脑标准化体系及评估指标综合框架分析 ... [详细]
  • Java学习第10天:深入理解Map接口及其应用 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 将密码链接至密码输入框中以增强安全性
    在通常情况下,当TextBox的TextMode设置为Password时,直接在后台(.cs文件)绑定值到该文本框是不可行的。然而,在某些场景下,为了增强安全性,需要将密码值安全地传递到密码输入框中。本文介绍了一种方法,通过使用特定的技术手段,实现后台与前端密码输入框的安全绑定,从而提高系统的整体安全性。 ... [详细]
  • 中国古代十大著名吝啬人物,你了解几位?
    在中国古代历史上,不乏一些富有却极其吝啬的人物,其中许多甚至身居高位。例如三国时期的曹洪,他是曹操的堂弟,多次在关键时刻救助曹操,并随其南征北战,立下赫赫战功,最终被封为都护。然而,即便如此显赫,曹洪在日常生活中却以吝啬著称。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 本文详细探讨了在ASP.NET环境中通过加密数据库连接字符串来提升数据安全性的方法。加密技术不仅能够有效防止敏感信息泄露,还能增强应用程序的整体安全性。文中介绍了多种加密手段及其实施步骤,帮助开发者在日常开发过程中更好地保护数据库连接信息,确保数据传输的安全可靠。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 深入解析HTTPS:保障Web安全的加密协议
    本文详细探讨了HTTPS协议在保障Web安全中的重要作用。首先分析了HTTP协议的不足之处,包括数据传输过程中的安全性问题和内容加密的缺失。接着介绍了HTTPS如何通过使用公钥和私钥的非对称加密技术以及混合加密机制,确保数据的完整性和机密性。最后强调了HTTPS的安全性和可靠性,为现代网络通信提供了坚实的基础。 ... [详细]
author-avatar
EMBRACE-老王
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有