这篇文章转载自一位我所认同的 “大神”,学习他的 “大神危机论”以自勉
作为一名普通程序员,如果你周围有人开始称你为所谓的 “大神”,那么你应当警惕了。
除非你是公认的天才,有傲人的经历,有超群的智商,那么大家称呼你为 “大神” 你勉强可以“自以为是”。但是,如果你天资普通,并没有过人的经历,却有人也开始称呼你为“大神”,作为一个有自知之明和上进心的程序员,这时候你不应该沉浸在这种满足感中,而是应该“冷静”下来想想你和你周围的环境有什么不太对的地方。
Calm Down
是否太爱表现自己
粗俗地说就是:是不是太爱装 B。
喜欢装的人往往会刻意在别人注意你的时候把玩一些比较高大上的东西,吸引别人来问你这是什么东西,以及如何使用之类的。如果你本来就会用到这些高大上的东西到无可厚非,但是如果你根本不怎么会使用这些东西,却为了把别人”比下去“而亮出来,为了装而装,这样的心理,迟早会害了你。
因为爱显摆的人往往比较虚荣、骄傲自负、华而不实,这样的人经不起打击,也听不得不顺耳的话,既不能听进去别人友善的建议,更不论虚心交流了,也不能静下心来研究细节,最终只能有个自我臭美的空架子罢了。
是否不会说“不”
我就有点属于这种人,对我来说,拒绝别人需要一点勇气,但是如果不论别人请求自己能不能做好都不知道的事情都拍拍胸脯 “自信” 地保证下来,这样其实是不太好的,因为容易给人留下你”无所不能”的假象。
学会拒绝你没时间去做,没必要去做,没能力做好的事情,专业的人做专业的事,效率和质量最重要。生活不是总想着要证明自己,也要把时间”浪费”自己的生活上。
此外,家里总会有人在等你。
是否过早进入「Comfort Zone」
如果你只是处于职业生涯早期,但周围的环境不能带给你动力和激情,你总觉得你仅用你会的一部分就能完成好工作,那么你多半是进入了舒适区的假象。
一万小时理论还是很具有说服力的,因此,如果作为不是天才的你,过早觉得一切问题仅凭你目前的技能储备都能游刃有余,那么很可能说明你目前所在的平台不太适合你,你可以尝试去挑战一些能带来进步的机会,更应该主动向比你厉害很多的人学习。
千万不要在正值年轻气盛的岁数去享受这种舒适的感觉,年轻就应该不断超越现在的自己,总要经历无数个拼搏之夜才能心安理得地享受技术带给你的自由。
没有什么捷径之说,我想尽管是那些公认的天才,也必然经历过很长的积累的过程,只是他们积累的速度比普通人快一些罢了。
Coder vs Programmer
Coder
- 他们写出机器可以理解的代码。
- 他们的代码依靠注释读懂。
- 他们只在工作时间写代码。
- 他们不喜欢看书,但偶尔会看看视频。
- 他们只会阅读别人的博客,自己从来不写。
- 他们关注的仅仅是进度。
- 他们仅仅是复制代码。
- 遇到问题他们会直接问同伴。
- 他们总是认为自己会的很多,喜欢用海量的“精通”来装点自己的简历,假装高手。
- 他们每天沉寂在C+V的死循环中,并不断地抱怨需求变更。
- 他们会因为学会了某种代码的写法,而骄傲自满。
- 他们一边在被动地接受需求,一边在抱怨不合理的需求。
- 他们不会检查自己的代码,在测试暴露缺陷之前,他们往往难以发现。
- 他们不认为自己要为代码质量负责,那应该是管理者和测试的事情。
- 他们在拿到任务后会直接开始工作。
- 他们往往具有文档恐惧症。
- 他们并不崇拜专业人士。
- 他们擅长推卸责任。
- 他们对编译警告弃之不理。
- 他们只是在写可以运行的程序。
- 他们会拖延不喜欢的任务。
- 他们更容易放弃自己的设计。
- 他们的编程往往止步于编码的表象。
Programmer
- 他们写出人可以读懂的代码。
- 他们的代码风格统一并具有自描述性。
- 他们不仅在工作时间,在业余时间也会写代码。
- 他们会看大量的书籍,阅读大量技术资料,当然也会看视频。
- 他们不仅阅读别人的博客,他们自己也会写博客,他们认为分享知识是快乐的。
- 他们不仅关注进度而且更关注代码的质量,提供现实的进度方案,在上司面前坚持自己的意见。
- 他们复用代码而不是复制代码。
- 遇到问题他们会尝试自己解决,访问社区,然后才会询问同伴。
- 他们总是认为自己还能做的更好,并对那些巨人由衷地敬佩,在不是高手时不假装高手。
- 他们经常在思索如何能够解耦,用灵动的设计应对突然到来的变更。
- 当掌握某种代码的写法,他们看到的往往是背后深层次的问题,并向专业水准看齐。
- 他们会对不合理的需求说不,并在工作中尝试影响他们的领导。
- 他们会经常重构自己的代码,并维护自己的缺陷核对表。
- 他们认为提高代码质量是自己的责任,并为自己的过失而负责
- 他们在拿到任务后,会在行动之前,进行分析和计划,而不是马上编码。
- 他们往往会认真阅读项目文档。
- 他们和希望提高软件开发技能的人为伍,参加交流会,加入某个社区参与技术讨论。
- 他们敢于承认错误。
- 他们将警告与错误同等对待。
- 他们在构建自己彻底理解的程序。
- 他们将不喜欢的任务认为是对自身的磨砺。
- 他们往往坚持自己的设计。
- 他们的编程往往深入语言,触及思想。
其他
程序的价值
快速完成大规模计算,计算量小的时候价值显示不出来,但往往可以用于测试。
狼与哈士奇
你说你喜欢程序,想做程序员。对不起,同学,你说错了,你搞错概念了。你现在去做的只能叫“编码者(coder)”,不能叫“程序员(Programmer)”,连背包问题都不知为何,连模式都不知是啥,连最起码的链堆栈都搞不清楚,你说什么程序员,对不起你差远了,你所学到的,所运用的,只是某种语言的语法,而这对于一位有经验的程序员来说,不过三五天的事儿。
狼和哈士奇的隐喻意味着 Coder 难以在技术实战中战胜Programmer,但现实是,往往 Coder 更受欢迎,如同哈士奇更讨人喜欢一样。
原因很简单,Programmer 在众多Coder之中显得格格不入。Programmer 能更快更高效地完成任务,他们讨厌加班,抵制低效的流程,他们对自己的能力深信不疑,并经常坚持自己的意见,对不合理的需求说不。这些,在雇主的眼里就是叛逆。
而 Coder 就低调很多,他们甘于加班,对设计没有意见,不会对需求说不,出了问题他们总在说,这是别人的问题。他们两者的代码,在外行看来没有差别。在雇主眼中,往往那些闭嘴加班的员工更应该重用。
也许,Programmer 们并不想让自己被孤立,但现实却是残酷的。人们缺少包容,善意的提醒,也可能会被认为是卖弄,是对权威的挑战。狼只有在狼群中,才能得到自身的认同感。软件的构建者是 Programmer 而不是 Coder。如果你是一匹狼,而你有感受不到团队的认同感,那你不妨换一换环境,因为,和臭棋篓子下棋,永远无法进步。
如果你是位开明的领导者,当你读到这篇文章时,我真切地希望你能留意那些“带刺”的员工,因为很可能,他比你团队中的其他人都看的更远。
如果你是名程序员,那么你一定要选择到底是做狼还是哈士奇。狼可能没有安稳的生活,没有丰盛的午餐,但却拥有强大的力量,自由,以及尊严。
算法
算法是程序的灵魂,为什么有些网站能够在高并发,和海量吞吐情况下依然坚如磐石?
大家可能会说:网站使用了服务器群集技术、数据库读写分离和缓存技术(比如 memcahced 和 redis 等)。那如果我再深入的问一句,这些优化技术又是怎样被那些天才的技术高手设计出来的呢?
我在上大学的时候就在想,究竟是什么让不同的人写出的代码从功能看是一样的,但从运行效率上却有天壤之别,就拿以前在软件公司工作的实际经历来说吧,我是做服务器的,环境是UNIX系统,功能是要支持上千万人同时在线,并保证数据传输的稳定,在服务器上线前,做过内测,一切 OK,可实际上线后,服务器就支撑不住了,公司的 CTO(首任 sina CTO)花了 3 天时间对我的代码进行优化,再次上线,坚如磐石。
那一瞬间,我认识到程序是有灵魂的,就是算法。
如果你不想永远都是一个代码工人,不想当孬种程序员,那么你就要看算法。