什么是务实
务实程序员他们总是在面临问题时,透过问题看到本质,从具体的场景出发,从大局着想,了解整个问题的来龙去脉,他们会对自己的行为负责,在项目面临问题时,他们不会撒手不管或者任由风险一步步扩大直至无法维护。
大多数人都不是务实的程序员,因为成为务实的程序员并不满足 短期的利益,需要长期的打磨和持续不断的学习、思考反思。大多数人不是务实的程序员的原因只有一个:惰性使然。
程序员是有戾气的,许多人向我抱怨
- 工作很久了,年龄也比较大了,感觉工作这些年以来在技术方向上没什么提升
对这些人我有话说:没有及时反思,可能也是由于工作一直很忙,没有停下来静心思考。因为我相信任何有时间思考的程序员,都不会有这种想法。善于反思自己你会及时调整最近的状态,系统化的学习,提高自己的核心竞争力,让自己成为公司不可轻易替代的人才。
- 整天 CRUD,项目技术栈用的比较老旧,想要接触新项目,想要去互联网
对这些人我有话说:整天 CRUD 不是你找理由的根本!CRUD 的业余时间完全有时间提升自己!我也是 CRUD,但我不是一个 CRUD 程序员!千万不要给自己扣各种 CRUD 的帽子。项目技术栈用的比较老旧,我想说,计算机世界发展了 60 多年到现在,仍然只能识别 0 和 1 ,要专注于不变的根本。如果你学完操作系统,你就知道软件最终离不开操作系统,你就知道管程是怎么回事,操作系统实现不同调度算法的抉择时什么。我曾经说我喜欢技术,想要接触新的技术栈,当我被问及你知道哪些 hibernate 思想到现在仍然流行,mybatis 哪些思想仍然很老旧的时候,你就会发现,技术的新潮只是一时的,没有永远不过时的技术!我听很多前辈讲起,在零几年的时候谁说自己进了互联网那完全是等着被人嘲笑的!为什么互联网现在流行?因为它符合我们大众的诉求!无现金支付,工作之余的放松,饿了就不想自己去买饭,实体购物又麻烦而且还要化解和各种店员的尴尬!!!但是互联网是无法落地的,在发展到一定规模和平台后,互联网也是最重要被淘汰的!而硬件、芯片、通信这些才是永远新潮的技术,只不过无法获取眼前的 feedback,很多高素质人才也不想从事罢了!
- 我应该学哪些技术
对这些人我有话说:这个问题本身就没有意义!没有人能够指导你学哪些技术!问这句话的目的就是想走捷径,但是学习是没有捷径的!学你想学的,学和你工作相关的,学能够让你提升核心竞争力的!如果非要让我说出要学什么话,我建议学基础,学基础,学基础,基础就是计算机组成原理、操作系统、网络、编译原理
针对上面这些人,我认为他们只是难以接受改变,我认为这类人是 煮熟的青蛙。这个故事你一定听说过,它说的就是把青蛙放在慢慢加热的锅炉里面,刚开始青蛙感觉温度很舒适,随着慢慢加热,青蛙已经无力跳出锅炉了!
而另外一种人是 把青蛙仍在滚烫的锅炉里 的人,它肯定想尽办法跳出来,这类人会想尽一切办法克服困难。
不要给自己的人生设限
李小龙曾经说过:我活着不是为了满足你的期望,正如你也不是因为我的期望。
说的丧一点就是 诸君看我多装逼,我料诸君应如是
软件开发行业绝对是最吃香的行业,因为我们收入颇丰,因为我们可以选择我们想要的工作,我们可以选择办公地点,我们可以实现财务自由,但这些前提是你要有能力。
为什么有人喜欢抱怨呢?因为他们不曾想着改变,Martin Fowler 说过 你可以去改变组织,或者让自己换一个组织,总的来说,你是自由的,你可以做你想做的。
不知道你听过 墨菲定律 没有?最简单的表达形式是越怕出事,越会出事,拿我们老祖宗的话就是 怕什么,来什么,但是在软件开发中,出现问题是再正常不过的事情了,就算你有完善的需求、设计文档,完备的自动化测试流程,多轮测试迭代,还是会出现问题,推迟交付,未曾预料的问题的出现。
所以,不要惧怕问题,因为问题任何时刻都会出现,当问题出现时,我们应该依靠我们的专业性去解决问题,我们犯了错误要勇于承认,我们必须坦诚。
勇于承担责任,不要把问题归咎于别人或者其他事情上,也不要寻找藉口,不要把问题归功于环境、编程语言、时间或者同事,这些因素可能影响你,但不是让你找的借口
设想一下,比如银行职员、超市售货员、汽车修理工搪塞或者敷衍你的时候,你是什么反应?是不是恨不得想他了他们的门店?你会如何看待他们的公司?那如果是你呢?你的上司或者甲方会怎么看你?
破窗效应
破窗效应说的是,如何把一座富丽堂皇的别墅变成一片废墟?也许你只需要一扇破窗,这就是破窗效应的威力。
那么为什么破窗效应的威力这么强大呢?一扇破窗,如果一段时间不去修理和修复,别墅中的主人就会潜移默化产生一种这座别墅很老旧的想法,久而久之更多的窗户也慢慢积满灰尘,不去打理,直到整个别墅成为废墟。
拿到软件开发中就是,如果一扇破窗(糟糕的设计、错误的决定、没有注释的代码,混乱的逻辑)不去修理,慢慢的就会有更多人作出破窗决定,导致整个项目混乱不堪,无法维护。俗称一块臭肉坏了满锅的汤。
编制合理的谎言
有三个在战场中的战士已经很久没有吃饭了,他们看完前面有个村庄,但是村庄里面没有人,但是士兵没有气馁,他们烧了一锅水,小心翼翼地在锅里放了三块石头,诡异的村民们都出来围观,然后战士就说:这叫石头汤,你们就在汤里放这个?嗯,是的,士兵回答道,但是有点胡萝卜味道会更好,一个村民就跑回家把自己家里的胡萝卜拿来了,随后士兵又说,如果有牛肉那就更好了,又一个村民跑回家把牛肉拿过来了,最后,他们煮了一大锅汤,士兵把石头扔掉,最后和村民们一起吃了一顿美餐。
这在软件开发中同样适用。你可以通过一个小改动入手,渐渐的拓展全局,但是一定要注意方式和方法,一定要假装你不在意,这时候应该坐下来,等他们开始向你问你要不要加些你原本想要的功能。加入一个推进中的成功项目更容易一些。
让用户参与评审和设计
你是否经历过这种,你做的东西拿给用户看后发现这并不是他么想要的,每次都需要打回重做。但是没办法,那是你的用户,你们的共同职责就是做出一个双方都满意的软件。为了达到这种目的,沟通就扮演了至关重要的作用。或者说,你还不够了解你的用户,要多和他聊聊,这或许是程序员的短板。多让你的用户参与评审,多问他们这样怎么怎么样。
如何学习知识
知识理财
本杰明富兰克林说过:投资知识,收益最高 。知识和经验确实是你最需要的资产。投资知识在某种程度上和 理财 是一样的。什么?这两种毫不相关的概念怎么会扯到一起去的?别着急,且听我慢慢给你分析。
- 首先,理性投资者具有周期性投资的习惯,周期性投资就是定投
- 理性投资者会衡量或者说平衡高风险高收益和稳定收益的组合
- 采取多样化是打持久战成功的关键因素
- 投资者最核心的准则就是低买高卖获得最大的回报
- 定期审查、反思自己的理财组合
为什么说学习知识和理财一样呢?
定期投资
就像金融定投一样,你必须定期为你的技术栈找到合适的学习组合,即使数量有限。
风险管理
不要把所有的鸡蛋都放在一个篮子里,你要学新潮的框架同时也要专注于永恒不变的基础知识。这样会让你不止于思考框架,同时也会让你跟进时代的进步适应这个社会。
多样化
你知道的越多,你的作用、你的价值也就越大。如果你是一个只专注于某个业务的程序员,一定要从整体把握,不要局限在自己的一亩三分地中。如果你不喜欢业务,那你就要从整体考虑用到什么技术,计算机技术变化迅猛,今天的热点技术可能明天就会被废弃。你要多熟悉技术,成为 T 型人才。T 这个字的写法一定是先横着写再竖着写的,知道广度后,才有可能选择一个切入点深入进去。
低买高卖
你在 Java 流行之前绝对不会想着去学习 Java,但是当 Java 流行之后,那些早起的用户已经积累了相当丰厚的回报。
重新评估
重新评估你的技术栈,推陈出新,查漏补缺。
知识组合
这里有一些对你学习知识的几种组合方式,也是一些建议:
- 每年学习一门新的编程语言:培养自己从不同的角度思考语言这回事,权衡语言的利弊,解决了什么样的问题
- 每月读一本技术书:这个可能有些费劲,因为一本黑皮书你不可能一个月就读完了,除非你什么都不做,天天只看书,但是有的实战类的书还是可以看完的。这里只是告诉你一个大致的读书周期
- 读技术书:你的人生不仅仅只有计算机,还有生活,计算机也是通过人类制造出来的,你要站在人的角度思考问题。
- 上课:去本地大学上课是一件很不错的事情
- 参加城市技术圈子交流:不要只当听众,要参与进去,了解其他人都在做什么
- 与时俱进:还是那句话,关心一下你的技术栈,阅读相关的新闻和技术帖子,这是一种很好的方式。
持续投资非常重要,计算机不是一件速成的事儿。
碎片学习的机会
你要如饥似渴的学习,如果你无法找到问题的答案,去寻觅有能力找到答案的人,而不是要让问题 沉寂下去。和其他人交谈有助于构建你的人际网络,而且你会很惊讶的发现,在你寻找答案的这个过程中,你会不断扩大你的知识面。
所有的阅读和研究都需要时间,而时间是永远不够的。所以你需要时刻准备好,确保在无聊的时候有东西可以读。在医院排队也不要忘了放弃阅读的好机会 --- 一定要带上自己的 kindle 或者电子阅读器
批判性思维
最后一个要点是要具有批判性思维,批判性地思考读到和听到的东西。
网络不是那么干净的。永远不要低估商业的力量。他会把黑的说成白的。
网络搜索引擎会把热门的东西放在前列,而不仅仅是正确的东西,也并不是对你有用的东西。书店会把一本书放在显眼的位置,但并不能说明这是一本好书,有可能包装好,有可能封面好,有可能只是标题吸引人,有可能这本书很流行或者很畅销。
批判性思维有五个你需要思考的方向
- 重复性的问 为什么
- 谁能从中受益,了解资金流的转向
- 什么背景下发生的这件事情
- 开始后会发生什么,结束后会发生什么
- 为什么这是个问题