也许我们都不是天才的程序员,但至少我们都可以成为一个理想的程序员。
我在虚张声势面前欺骗了程序员,一路都是这样。26岁之前,在写代码时几乎没有经验,研究生竟然选择可能在公司倒闭的日常问题提供培训创业,被解雇的恐惧和压力下上游三个同事冷漠的眼神,离开后的一年半的时间,对主要过程的背面有产品的500万用户。我害怕的是计算机技术和技术专家必须有佛的面具,在密钥传输代码万行的白天和黑夜。现在我看到了一些世界。回头看看那不安的情景,仿佛那是夜晚的开始。我看不出有什么鼓舞人心的意义,但我认为这是理所当然的。理想的程序员和理想的建筑师、理想的会计师和理想的按摩没有什么区别。他们基本上是一群工匠。我相信所有理想的程序员都能。理想的程序员,和理想的建筑师、理想的财务师、理想的按摩师没有任何的差别,他们本质上都是一群手艺人。我相信理想的程序员人人皆可成为。
近三年总在互联网圈厮混,认识过一些程序员,共事过一些程序员,领导过一些程序员,又面试过一些程序员。他们学历不同,有的来自北大,有的来自北大青鸟,有的是博士,有的是高中肄业;资历也不同,有的来自 BAT,有的来自某破产基金公司(还是一个销售);年限也从 0 到 15 年不等。
但我认为程序员只需分三类:天才的程序员、理想的程序员、平庸的程序员。天才的程序员我只敢说接触过 3 个,这是天命。7 分由你是颗精子的时候就已决定,拥有绝佳的数学天赋、冷静致密的逻辑、为解决难题宁愿不眠不休而深以为乐的技术热情;3 分来自起步要早早早,恨不得同龄人玩泥巴的时候就得开始玩电脑,大学毕业前就突破一万小时法则,后面的已是游戏人生。
天才的程序员可遇不可求,更不能长有,我看到的 90% 仍是平庸的程序员。IT时代的膨胀,已让程序员如同文艺复兴时的印刷匠一样的普通,多数投入祖师爷门下的人,仅是为了更大的饭碗,更高的待遇,更好的生计。平庸的程序员编写腐烂的代码,没有规范和一致性,固守旧世界的语言,还好谈论大的架构和性能,说的比做的漂亮。而毫无例外的,他们认定技术没有出路,做产品、营销和管理的是更高大上的手艺,而他们当中的 99%,又会自然的流露出自己恰巧具备了那方面的天赋,至于进程为什么会崩溃这样的小问题是不屑于去了解的。
而我最喜欢和理想的程序员相处,恨不得与他们同吃同住,如果允许,我希望我的队伍能插满他们的旗帜。理想的程序员心眼儿不坏(他们从来都不是办公室政治的宠儿,是一群单纯明亮快乐的手艺人),有天真烂漫的好奇心(他们的眼睛里经常闪着「哇,这个是怎么做到的!」),永远精益求精(他们的口头禅是「我再研究一下」),还乐于分享(他们活跃于 GitHub、各大问答社区和你的身边,舍得将宝贵时间用于帮助新手)。是的,他们不需要被管理,只需要给一个大的方向,总能回报以意想不到的结果。
理想的程序员与平庸的程序员只有一墙之隔。两者的差距只有 7 个一点点,而人与人的差距,正是在这日积月累的一点点中,被永远拉开了。有意思的是,我发现这6个一点点都和意识有关,也就是程序员和其他一切新兴产业的工种一样,只需要意识加上时间的锤炼,人人皆可达到理想的阶段。理想的程序员必然也是一个优秀的 problem-solver.
第 1 个一点点:专注眼下
见过很多程序员的心里都有自己小小的梦想,比如去做一个小老板、做销售、做投资。在他们心里有各种各种的想法,但是又被眼前的程序员高薪所吸引住了没有转行的魄力,因此变得不专注了。其实在冥冥众生均可以在多个领域取得成功,不过需要自己保持足够的专注。不可否认,这世界上存在着伟大的产品(像乔老爷)、伟大的销售(像埃里森)、伟大的投资客(像彼得菲),而他们毫无例外都是程序员出身。可你听说过巴菲特评价盖茨的话么,比尔盖茨如果转行去卖狗,那他一定是全世界最大的狗贩。我坚信除了少数的天才外,冥冥众生均可以在多个领域取得成功,只要保持足够的专注。而哪怕你下一年就想卖狗去,程序员的经验仍然能训练你强大的逻辑、谨慎和耐心,放在哪个行业都是相当可观的竞争力。
第 2 个一点点:思考力与推动力
我认为处理事故,例如bug、崩溃、调优和入侵,更可能反映出平庸程序员和理想程序员之间的差距,而不是编程本身。当一个未知的问题,如何找到复杂问题的核心问题,如何分析根本原因,如何消除干扰抑制最小验证场景,如何抓住关键数据,我们证实了假设和实验,是最好的场景程序员思考。是的,在衡量一个理想程序员的标准时,思考比经验更重要。
有时小家伙走到我面前问我:“有一个任务被卡住了,怎么做,”我一直认为他可以做得更好。例如,您可以测试其他任务,排除代码出于自身原因;通过Web用户界面是异常的(如果没有帐号,可以让我提供)主机可以日志或调查;删除缓存,如果不是,应该向我提供任务ID和控制台日志。理想的程序员永远不会等待事情向前发展,他们会尽一切可能使事情向前发展。
第 3 个一点点:自我完善
尝试其他技术、框架、方法和观点。不要总以为只有你的选择才是可行的。别的选择也有可能比你的要强得多。要以开放的心态,来检验其他人的选择。
尽量发布可以运行的代码。不要指望QA能给你找出所有的程序错误。要经常并且全面深入地测试你的代码。
第 4 个一点点:投资未来、保持好奇心
程序员是一个非常残忍的职业。你所学所用的语言、框架、模式,很可能在数年内就成昨日黄花了;你现在嘲笑的另一群程序员,可能马上就能转身来嘲笑你了。所以理想的程序员除了做好自己的本分,还要花费时间来投资未来。什么是「投资」?投资就是你现在投入的时间,在未来会以更多的时间或者金钱(看看早几年学习 iOS 的程序员现在的薪酬!)回报你。举我自己的领域 — 数据挖掘为例,08 年左右 Hadoop 开始兴起,一时「大数据」概念火热,Hadoop 工程师万金难求,各互联网公司纷纷把数据统计、数据分析和数据挖掘的业务切换到分布式平台上。这几年眼看 Hadoop 还在不断迭代,Spark 又异军突起,一举刷新了 Hadoop 保持的排序记录,以内存存储中间数据带来的性能优势和丰富的数据结构让人爱个不停,各种奇异的小 bug 和陡峭的学习曲线又让人打退堂鼓。那么,明眼人都知道 Spark 是未来的趋势(内存会越来越便宜),在主业务放在 Hadoop 的条件下,就可以适当把一些小模块切换到 Spark 上,同时留意 Spark 社区的发展。很快从 Spark 获得的性能收益就能把之前投入的学习时间挣回来。
保持好奇心
想想塑料杯中的种子:根向下长,枝叶向上长,没有人知道这是为什么,但是我们都是这样的。一般来说,在编程和技术世界,每天都有新奇东西出现。看!很神奇吧!每天学习,让你思维更广,技能更新,选择也就更广。如果你认为编程枯燥乏味,那么你要该换行了。
第 5 个一点点:善用工具
搜索引擎→不相信重复→代码片段→自动化
程序员的成长就像膨胀的圆饼,外面是无边无际的大海,圆饼越大,与大海接触的面也越大,懂的越多,不懂的越多,而计算机科学又是一门更新换代异常迅速的学科,同时也是知识互联网化最好的学科,很难利用传统的科班式有教有学的方法,相反通过搜索引擎则很容易获取到最新的知识。
不相信重复,大师的话叫DRY原则(Dont repeat yourself),代码写多了,会有人为的直觉判断好的和烂的代码,我的标准是简洁和规范,简洁并不是美感上的标准,重复越少,给自己出错的机会也越少,后期维护的成本也越少。
如果你不幸丢了三周前的代码,也许你能凭着过人的记忆力把脑子里残余的片段复写出来,但如果丢的是三个月前的代码,恐怕就没有那么好的运气了。理想的程序员会着力找寻有效的资料保存方式,把工作里灵光闪现写下的代码、脚本、配置、经验等短的片段保存起来,以便任何时候都能复查。
理想的程序员必须懒惰。对他们来说,重复的步骤和重复的代码一样丑陋,如果意识到一项工作有可能长期要重复,那么自动化的时间总是越早越好。
第6个一点点:管理时间
之所以管理时间会对程序员这个行当特别重要,是因为在完成任务时你必须像荒野里的狼一样,「独行」。没有外界约束的情况下还能稳定控制自己,保证能高效率地工作和学习,那么日积月累你肯定会变得比一般人厉害。
程序员干的是高强度的脑力活,一般每天集中4-5个小时应对本职工作就足够了,但工作之外,一定要安排时间用于学习。除了学习,留点时间放空自己也是必要的,利用泡茶或者喝咖啡的间隙,把弥足珍贵的时间留给自己,往前想往后想,事半功倍。
第7个一点点:永不放弃,活到老学到老
我们的头脑认为需要赚足够的钱和物质,以供后半生之需,这种片面、静止、单角度、低维度的看问题,必然就会伤害到自己的最佳利益。实际上为未来囤积了大量钱的人,有很多都没来得及很好的享受,就被无常给拿走了,古往今来例子多得很。这个理解的难点在于,你是作为一根管道,而不是作为一个仓库。这需要思维方式的改变,认知的升级,灵性的觉醒。
杨众筹说做好中国式众筹要三个干掉:干掉利益、干掉经验、干掉个性。而要做到,需要空杯的心态,归零的心态,需要重新开始学习,活到老,学到老,干到老。破除限制性的信念,没有年龄的限制,没有资源的限制,没有经验的限制……这一切都要学习,改变思维方式,改变认知。
持续长久成功的人士都是活到老,学到老,干到老。成功人士都是怀抱梦想,不放弃,永远在路上,在路上筹到所需要的一切资源!
最后弱弱的问下,你们感觉自己是优秀的程序员吗?
一名从事了10年后端的老程序员,辞职目前在做讲师,整理了一份现在把架构师必须具备的一些技术总结出来一套学习思维导图和录制了一些相关视频,分享给大家,供大家参考。
需要相关资料可以资料获取方式加群:810589193
一:开源框架源码分析
学习Java技术体系,设计模式,流行的框架与组件
常见的设计模式,编码必备
Spring5
MyBatis
AOP源码解析
IOC源码解析
SpringMVC
二:架构筑基
任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题,Java技术体系,需要了解:
性能优化
JVM调优
Web调优
常见工具调优
linux基础与进阶
三:高性能架构
高并发,高可用,海量数据,没有分布式的架构知识肯定是玩不转的:
分布式框架思维
分布式协调和分流
高可靠数据存储
缓存与NoSQL
异步与消息中间件
分布式解决方案实战
四:微服务架构
业务越来越复杂,服务分层,微服务架构是架构升级的必由之路,Java技术体系,和微服务相关的技术有哪些呢?
Spring Boot
Spring Cloud
Docker虚拟化技术
Dubbo应用及源码解读
五:团队协作
工欲善其事必先利其器,不管是小白,还是资深开发,玩Java技术体系,选择好的工具,提升开发效率和团队协作效率,是必不可少的:
Maven,项目管理
Jenkins,持续集成
Sonar,代码质量管理
Git,版本管理
六:B2C项目实战
系统设计
用户管理子系统
搜索子系统
订单子系统
商品管理子系统
支付系统
后台系统
分布式调度系统
希望能对你有所帮助。每个人的职业发展道路都不一样,希望大家能够提前规划好自己的人生道路,坚定地走下去。同时,尽可能提高自己的视野,更加严格地要求自己,相信不久的将来,你也会成为一名优秀的架构师。
对于想要提升自己,对自己未来迷茫的Java工程师们,如需要这些架构路线图,以及我们整理的一些架构师精讲资料,资料获取方式加群:810589193,点击链接加入群聊【Java架构学习交流群】:https://jq.qq.com/?_wv=1027&k=5deQUBl里面有阿里Java高级大牛直播讲解知识点,分享知识,课程内容都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!