“ 编程虽然苦,但有兴趣就会有乐趣。把简单的事情做到极致,回报自然就来了。朝闻道,夕死可矣。
——尼古拉斯·小Q 
我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了30岁,时间就如白驹过隙,一年又一年飞逝而过。 我自己也是,眼瞅着毕业快15年了,15年间从一个刚毕业的菜鸟,成长为技术骨干,做到架构师的职位,回头看看,当年听取亲戚的一句话,误入计算机行业,看来并没有走错,编程虽然枯燥辛苦,但是如果真的感兴趣,你就能体会到其中的乐趣,并且获得可观的回报。
一:好奇心 
刘慈欣在《朝闻道》中描绘过这么一个情节:在古老的非洲大陆上,有个原始人无意中抬头仰望星空,凝视的时间稍微长了一些,超过了外星人设置的阈值,立刻拉响了人类即将产生文明的警报。因为外星人认为,人类已经产生了对宇宙的好奇心,文明的产生,科技的发展不过是一瞬间的事情。 确实是这样,好奇心驱动人类不断向前,在短短的几千年(相对于长达几十万年的原始时代)里就登上了月球,并且努力向其他行星拓展。 对于程序员来说也是类似,如果你看到新技术,新产品没有像小孩看到新玩具那样两眼放光,没有想赶紧在自己电脑上玩玩的冲动,你就需要仔细考虑下是否真的对软件开发有兴趣?如果根本没兴趣,不要浪费时间,还是趁早转行,有更多有前(钱)途的职业在等着你。 没有好奇心,就不愿意追本溯源,追求技术的本质。 没有好奇心,就难于静下心来,耐得住寂寞,远离浮躁和代码奋斗,更难于跨过这个苦逼行业带来的种种挑战,走到架构师这个位置了。 没有好奇心,就不愿意学习新技术,一个架构师,如果没有对技术的敏感度和前瞻性,一直抱着一套技术架构不变,估计很快会被淘汰。 当然自制力强大的人除外,但话说回来,靠着自制力让自己做自己不喜欢的事情,岂不非常痛苦? 我在上公司的一个关于Leader的培训课的时候,老师一直在说Passion(激情),Passion,Passion,但我一直觉得没有好奇心,没有兴趣,怎么会产生Passion呢? 所以,对技术的好奇心/兴趣,是一切的基础。
 二:养成计算机的思维方式 
之前在“码农翻身”公共号发过一篇文章,叫《学会编程,而不是学会Java》说的就是要能够以计算机的方式去思考。 现在的计算机还很“弱智”,你不能这么说:『电脑,我要创建一个像Java的ArrayList类似的类,有个get、add、remove方法,还有这个ArrayList的容量不是固定的,能够自增长,快点给我写出来!』 现在的电脑当然写不出来。 相反你只能用计算机能理解的方式,用非常非常低级的计算机语言去告诉它做事情:创建一个类,分配一个固定大小的数组用来存放数据,用一个数(size)来记录数组里存了多少数据。如果数组满了,就需要增大数组,并且把数据从老数组复制到新数组。 这里边有很多很多的烦人的细节需要你去处理,一不留神就会出错---计算机编程就是这样。 养成计算机的思维方式,流畅的把人类语言的需求转化成计算机语言,这是程序员的基本功。 很多人会语法,也懂框架,但是在基本功上却不过关,只能在初级程序员上踏步。 这个基本功的训练就是数据结构和算法,我的经验是多做习题(大学时我把数据结构后面的习题都做了一遍),让这个思维在脑子里固化,以后的编程就可以信手拈来了。 
三:扎实基础,融会贯通 
我很久之前参与过一点开源软件的开发,有幸看到了一个老程序员的简历,让我震惊的是他竟然在Altair这个最早的电脑上编过程序。 没错,Altair就是那个连显示器和键盘都没有,靠拨动开关来输入,靠指示灯来输出的所谓“个人电脑”,比尔盖茨和保罗艾伦在上面写了一个Baisc的解释器,从此开始微软之路。 如果有了在这样的机器上编程的经历,我相信这些老程序员对硬件,驱动,操作系统,应用软件的理解要远远超过我们现在这些人。 我之前要写文章遇到了一个问题:一个进程要读取文件,在底层用的是DMA的方式,DMA完成文件读取以后要通过中断让CPU去处理,但是CPU和中断处理程序根本不知道进程的ID,它怎么去和进行关联,如何去唤醒那个等待的进程?这个问题让我意识到其实我对计算机的基础也并没有融汇贯通。 我们大学里都学过计算机组成原理、操作系统、编译原理、计算机网络、数据库、汇编语言,能不能把这些知识融会贯通,打通任督二脉,在我们的脑海里建立一个计算机运算的图景? 把这些知识融为一体,我相信能超越绝大多数程序员。 现在的软件开发封装的层次已经非常高了,只要学会Java就能做一个编程工作了,随着你做的越来越深,越来越专,这些基础的问题就会浮现出来。 更重要的是,计算机软硬件的基本思想在这几十年里其实变化不大,例如缓存,增加抽象层等,有了这么基本的思想的武装,去学习新的东西不但学的快,理解的会更透彻。 
四:要透彻地理解一个技术的本质 
先举个Ant中的例子,大部分人学习Ant只是学会怎么使用,认识到Ant提供了很多内置的task来帮助我们方便的完成自动化的构建,例如命令。 很少人会思考为什么Ant的task是以XML来描述的?为什么Ant不提供一套Java类库/API来让程序员用,那样不是更自然吗? 这其中的一个重要原因就是XML可以自定义标签,所以表达力无与伦比;如果用java,它的语法不允许自定义一个像copy、fileset这样的关键字,只能定义一些类来模拟这些Copy、Fileset,就没有这么简单明了,不信你尝试一下。 Ant给我们的重要启示就是,用XML来描述任务,能极大的扩展语言的能力。但是Ant的问题就是需要程序员处理太多的细节,指定源代码路径,指定编译文件的路径,指定资源文件的路径,指定需要的jar包及其位置,很烦心。 于是Maven出来使用“约定优于配置”的方式解决了Ant的问题。 理解了技术的本质以后就能够触类旁通,就能够快速学习,这在技术更新很快的软件行业尤为重要。 只是学会使用是不行的,不但要知道how,还要知道why。 停下来,思考,才是进步的本质。 
五:要能写漂亮的代码 
架构师不是高高在上,脱离代码只说不做的人。架构师首先是一个优秀的程序员,要能够编写项目或产品中的核心功能,随时能够卷起袖子去解决项目中的问题。 代码写的不漂亮怎么能拿得出手?怎么能够服人? 所谓漂亮代码不仅仅是清晰、易懂、优雅,更要实现功能,没有Bug或者极少Bug。 其实如果代码简单优雅,一般没什么问题。 写出漂亮代码并不容易,需要思路清晰,有良好的编程基础,有优秀的抽象能力,以及对一门语言的熟练掌握。
 六:抽象的能力 
抽象思考的能力怎么强调都不为过。 现实的需求纷繁复杂,如果架构师不能够把这些乱无头绪的需求抽象成一些“概念”,在概念的层次进行思考,系统根本就无法设计。 但是抽象出概念以后还不够,还要看看这个概念是不是正交的,能不能独立变化,如果不能,考虑下新的概念抽象。 “正交”讲的是线性无关,非常重要,就像一个点(x,y),在x轴的变化不会影响y,y轴的变化不会影响x,这就是正交。 “正交”威力巨大,(x,y)可以表达二维平面的所有的点,如果增加一个z轴,不但能表达三维空间中所有的点,并且每个轴都可以独立变化。 如果能做出正交的设计,这个系统的开发和维护会非常舒服,以为可以放心大胆的修改其中一个方面儿不会影响其他。 设计模式一直强调的『发现变化并且封装变化』其实就是这个意思。 抽象能力的训练没有捷径,就是经验的积累,勤于思考和学习。例如:学习Android的程序员可以思考下Android是怎么对未知的,纷繁复杂的应用程序进行抽象的?为什么有Activity、Service、BroadcastReceiver、ContentProvider这四大组件? 
七:技术领导力 
我在IBM学到的重要一课就是:要用技术的影响力来领导人,而不是威权和职位。 换句大白话来说,就是要能让技术人员服你。有了技术影响力,你在团队发出的声音才会被倾听,被尊重。 但是影响力不是很快就建成的,这是个漫长的过程:你解决了一个技术难题,你提出的方案被证明可行.... 这样的事情会一点一滴的积累起你在别人心目中的形象,建立你的个人品牌,最终大家会给你贴上一个标签:大牛。 

15年编程生涯,资深架构师总结的7条经验相关推荐

  1. python爬虫架构师之路_一位资深 架构师大牛给予Java技术提升的学习路线建议

    一位资深 架构师大牛给予Java技术提升的学习路线建议 对于工作多年的程序员而言,日后的职业发展无非是继续专精技术.转型管理和晋升架构师三种选择. 架构师在一家公司有多重要.优秀架构师需要具备怎样的素 ...

  2. 腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面

    1.引言 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个大型互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂? ...

  3. 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下 ...

  4. 以朋友圈为例,腾讯资深架构师揭秘鹅厂大数据平台是怎样运营的

    导读:本文将从构成运营成本的主要运营资源(设备资源.带宽资源.专线资源)出发,以实际案例分别阐述精细化技术运营实施的要点. 需要提醒注意的是:精细化技术运营的目标是创造价值,而不是为了摧毁价值.精细化 ...

  5. 资深架构师十几年的架构干货经验总结分享!

    图片来源:pexels.com 1 架构师承担什么样的责任 记录片<黑猩猩的守护者>中珍妮·古道尔博士说过:「唯有了解,才會關心,唯有關心,才會採取行動,唯有行動,生命才有希望」,套用到架 ...

  6. 从小编程,到架构师,我们应该具备什么

    这学期我们学的课程叫做软件体系架构,工作多年以后,我们肯定有的人会成为架构师,那么,如何做才能从一名程序员,小编程,转变为一名架构师呢?结合网络上的文章,谈谈自己的认知. 首先我们定一个基准点:架构师 ...

  7. 分享Android资深架构师的成长之路,建议收藏

    背景 经常有网友在知乎问答提两个问题:"现在学习移动开发还有前景吗?""开发还有什么可以研究的?".网友回复:"现在还学移动开发?如同49年加入国军! ...

  8. JAVA资深架构师成长路线

    文章目录 JAVA资深架构师成长路线 架构师筑基必备技能 并发编程进阶 JVM性能深度调优 网络编程与高效IO 深入Tomcat底层 MySql深度优化 架构基础必备Linux 设计思想 六大原则 种 ...

  9. 阿里软件资深架构师李战谈:开发者的人品问题

    阿里软件资深架构师李战谈:开发者的人品问题文 / 李战程序员都知道:绝大多数编程中的问题,最终都是自己的人品问题.当遇到奇怪的问题时,我们总是喜欢怀疑系统.怀疑编译器.怀疑网络.怀疑硬件--就是不愿意 ...

最新文章

  1. Enable htaccess file work in Apache
  2. Visual Studio 2017 最新全量离线下载方法[有惊喜]
  3. 听说你想去大厂看妹子,带你看看腾讯产品运营岗超详细面经
  4. 什么浏览器好用_还在用手机自带浏览器么?这个不足1M的浏览器却功能更加强大...
  5. Redis及其Sentinel配置项详细说明
  6. Java学习笔记:文件通道(FileChannel)
  7. 比尔盖茨:若新冠病毒疫苗有效 富裕国家在2021年底恢复正常
  8. 每日一道算法题 - KaprekarsConstant(hard-1)
  9. Atitit 四种自动机 fsm pda 目录 1. 自动机可分为有限自动机、后进先出自动机、线性有界自动机、图灵机等几种。它们对语言的识别能力各不相同。 2 1.1. 抽象自动机的理论。 2 1.
  10. idea中导包的快捷键
  11. 基于Matlab的车型识别(GUI界面)
  12. 多项式函数的极值点与拐点判别及个数公式
  13. java print打印方法
  14. 【指纹识别】基于MATLAB/FPGA的指纹识别算法仿真实现
  15. 《机器学习》课后习题3.5 编辑实现线性判别分析,并给出西瓜数据集 3.0α 上的结果.
  16. 元器件中关于晶体二极管的小小知识 2021-09-07
  17. 荣耀magicbook15C语言,荣耀 MagicBook 15评测 聊聊目前性价比最高的大屏轻薄本
  18. c语言编程基础 王森,《C语言编程基础第2版》王森版 习题答案
  19. 阿里云盘登录空白问题解决
  20. 服务器基础设置:H3C服务器,ilo地址,管理员密码、PXE启动、虚拟化是否打开

热门文章

  1. linux切换至root权限,【linux】sudo su切换到root权限
  2. java 顶点着色_Shader笔记_002简单顶点/片元着色器扩展
  3. 如何让自己时刻冷静的方法_睡前如何自己丰胸 健康有效方法 成就窈窕淑女
  4. 人生苦短我用python梗_为什么说人生苦短,我用Python?
  5. python模拟一个简单的取款机,python简单区块链模拟详解
  6. python qt信号在qml 的使用_Python和C++混合使用QML开发GUI
  7. mysql dbuild_config_技术分享 | MySQL Test 初探
  8. js全局变量和局部变量名称一样_微信小程序的全局变量、页面变量,你真的掌握了?...
  9. linux系统中如何安装qwt,在Linux上部署Qt及Qwt
  10. java可以做苹果软件吗_Java应用软件iPhone上运行 苹果没兴趣Sun单干