1个 30多年程序员的生涯经验总结

news2024/11/24 10:23:43

 640?wx_fmt=gif  

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTcwNjU4,size_16,color_FFFFFF,t_70

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。

生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 


在我30多年的程序员生涯里,我学到了不少有用的东西。下面是我这些年积累的经验精华。我常常想,如果以前能有人在这些经验上指点一二,我相信我现在会站得更高。

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

下面两点引用自一名销售人员,他是我很早以前的同事。有些东西我并不是完全同意,不过也能给予我们不同的角度看问题。

  1. 客户要找愚蠢的。这是我最喜欢的一句话,这个销售人员就职于一家咨询公司。他认为,要找那种不懂技术但是有足够资本挥霍的金主。聪明的人总是会问很多问题;没钱的人无力购买我们的服务。我很庆幸我是一名程序员,哈哈!
  2. 我的工作是欺骗客户,而你的工作则是支持我。第二句话来自于同一个销售人员。他总是喜欢不断地承诺一些不可能的任务,然后当我们终于呕心沥血加班加点赶出来了,他就来收获我们成功的果实。挑战的确让人exciting,但是每次都是这种不可能的任务未免太痛苦。我的建议是,换一个更好的销售人员!

 这些程序员职场“潜规则”,让你少走5年弯路_【官方推荐】唐城的博客-CSDN博客


   Ã¥Â®Â«Ã¥Â´Ã©ÂªÃ©Â¾Ã§Â«Ã¨Â¡Â¨Ã¦Ã¥|é¾ç«gifå¾è¡¨æåä¸è½½å¾ç一边赶路,一边寻找出路,希望大家在每个幸福的日子里,都能快乐前行。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/169678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部分iphone、安卓手机打开微信小程序不请求、白页问题

前言: 最近项目上发现用户测试小程序体验版打开一直白页,请求没反应,页面不渲染。开始以为是微信小程序某api问题,或者用户微信版本过低,或者用户网络不好,甚至考虑是不是服务器问题!因为后端是…

vue3中如何使用JSX?

在绝大多数情况下&#xff0c;Vue 推荐使用模板<template>语法来创建应用。 在 Vue 3 的项目开发中&#xff0c;template 是 Vue 3 默认的写法。虽然 template 长得很像 HTML&#xff0c;但 Vue 其实会把 template 解析为 render 函数&#xff0c;之后&#xff0c;组件运…

【Java多线程】线程的优先级

线程的优先级等级 MAX_PRIORITY&#xff1a;10 MIN _PRIORITY&#xff1a;1 NORM_PRIORITY&#xff1a;5 涉及的方法 getPriority() &#xff1a;返回线程优先值 setPriority(int newPriority) &#xff1a;改变线程的优先级 例&#xff1a; 我们将分线程的优先级设置为…

Java设计模式-迭代器模式Iterator

介绍 根据GoF的定义&#xff0c;迭代器模式提供了一种顺序访问聚合对象的元素而不暴露其底层表示的方法。这是一种行为设计模式。 顾名思义&#xff0c;迭代器有助于以定义的方式遍历对象集合&#xff0c;这对客户端应用程序很有用。在迭代期间&#xff0c;客户端程序可以根据需…

SciPy 教程与安装

SciPy 教程SciPy 是一个开源的 Python 算法库和数学工具包。Scipy 是基于 Numpy 的科学计算库&#xff0c;用于数学、科学、工程学等领域&#xff0c;很多有一些高阶抽象和物理模型需要使用 Scipy。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、…

小场景解决大问题|明道云在京东方的落地实践

我是来自京东方集团京东方晶芯科技有限公司的季旭。很荣幸给各位分享我们京东方集团和明道云之间的合作情况。 关于京东方晶芯 在分享之前&#xff0c;我首先给各位介绍一下我们公司。京东方集团是1993年4月成立的&#xff0c;以半导体显示为核心技术&#xff0c;在物联网创新…

聚观早报 | 硅谷大数据龙头Palantir扩招;滴滴出行恢复新用户注册

今日要闻&#xff1a;硅谷大数据龙头Palantir扩招&#xff1b;美团无人机去年完成配送超10万单&#xff1b;滴滴出行恢复新用户注册&#xff1b;PS VR2将于2月22日全球同步上市&#xff1b;改款特斯拉 Model 3加州路测谍照曝光硅谷大数据龙头Palantir扩招 1 月 17 日消息&#…

【Javascript】面向对象编程,this,原型与原型链,类与实例

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录对象中的方法/thisthis使用bind函数原型原型链类与实例class对象中的方法/this 面向对象&#x…

【C语言】小王带您实现文件操作(简单图示讲解)

说到文件操作&#xff0c;大家会第一印象想到不就是电脑硬盘中创建文件&#xff0c;写入数据吗&#xff0c;键盘、鼠标就可以搞定&#xff0c;那么接下来我要告诉你的是C语言也可以实现文件操作哦&#xff01;&#xff01;&#xff01; 目录 前言 一、为什么要使用文件操作 …

模拟卷.C

1.分支_sine之舞 样例输入 3 样例输出 ((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1 2.数组_和最大子序列 样例输入 5 3 -2 3 -5 4 样例输出 4 3.二维数组_星辰大海 样例输入 2 2 S. #T 2 RD DR 3 S.# .#. .T# 3 RL DDD DDRR 样例输出 I get …

文档管理系统采用电子签名的优势

DocuWare文档管理系统始终提供最高级的安全性&#xff0c;保护我们客户的机密文件和数据。 现在&#xff0c;我们与信任服务提供商ValidatedID 集成&#xff0c;电子签名又向前迈出了重要的一步。每当组织需要证明签名是真实的并确保文档未被更改时&#xff0c;都可以使用这些…

开源mybatis神器

什么是通用 Mapper&#xff1f; 它是一个可以方便的使用 Mybatis 进行单表的增删改查优秀开源产品。它使用拦截器来实现具体的执行 Sql&#xff0c;完全使用原生的 Mybatis 进行操作。在 Github 上标星 5.9K&#xff01; 为什么要用 Mapper&#xff1f; 它提供了所有单表的基…

《SQL基础》07. 约束

SQL-约束约束常见约束案例外键约束删除/更新行为约束 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确性、有效性和完整性。 分类&#xff1a; 约束描述关键字非空约束限制该字段的数据不能为n…

动态内存管理(2)

TIPS 1. scanf读取与空格&#xff1a; 我们都知道&#xff0c;scanf()在从输入缓冲区里面读取数据的时候&#xff0c;如果中间碰到了空格&#xff0c;那么就会直接停下来&#xff0c;而如果在最前面有个空格&#xff0c;直接无视空格。 2. scanf()读取与\n&#xff0c;如果是…

【论文精选】TPAMI2020 - PFENet_先验引导的特征富集网络_小样本语义分割

【论文精选】TPAMI2020 - PFENet_先验引导的特征富集网络_小样本语义分割 精选精析&#xff1a; 【论文原文】&#xff1a; Prior Guided Feature Enrichment Network for Few-Shot Segmentation (当前引用次数&#xff1a;184) 【论文代码】&#xff1a; https://github.co…

【爪洼岛冒险记】第5站:多图解,超详细讲解Java中的数组、二维数组--建议收藏

&#x1f331;博主简介&#xff1a;是瑶瑶子啦&#xff0c;一名大一计科生&#xff0c;目前在努力学习JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛&#xff01; &#x1f4dc;所属专栏&#xff1a;爪洼岛冒险记【从小白到大佬之路】 ✈往期博文回顾: 【爪洼岛冒险记】…

【GD32F427开发板试用】RT-THREAD标准版 移植使用

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;打盹的消防车 前言&#xff1a; 无意在微信看到了GD做活动&#xff0c;想到了第一时间体验一下&#xff0c;搭配RT-THREAD&#xff0c;也很方…

【Java】【系列篇】【Spring源码解析】【三】【体系】【BeanDefinition体系】

整体结构图 1. BeanDefinition 用于保存 Bean 的相关信息&#xff0c;包括属性、构造方法参数、依赖的 Bean 名称及是否单例、延迟加载等&#xff0c; 它是实例化 Bean 的原材料&#xff0c;Spring 就是根据 BeanDefinition 中的信息实例化 Bean。 2. 我们获取对象的方式一般有…

AioDnsBrute:一款功能强大的异步DNS爆破工具

关于AioDnsBrute AioDnsBrute是一款功能强大的异步DNS爆破工具&#xff0c;该工具基于Python 3.5开发&#xff0c;并使用了asyncio库以实现针对目标域名的异步爆破。 该工具的运行速度非常快&#xff0c;在一台小型VPS主机上&#xff0c;可以实现在1.5-2分钟之内处理大约10万…

【计数DP】P4933 大师

这道是洛谷官方题单的简单DP为啥我放上来呢&#xff0c;因为我因为各种各样的细节原因没做出来感觉计数的DP有点点难&#xff0c;得多写了P4933 大师 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意&#xff1a;思路&#xff1a;第一眼肯定是设dp[i][j]为以a[i]为结尾&…