【工作】程序员的自我修养

计算机是个神奇的行业,转行跨行成为程序员多如牛毛。

程序员真的适合那么多人吗?

程序员真的轻松胜任吗?

如何对项目有全局的理解?

如何摆脱CRUD的低级境界?

如何减少低效的无价值的忙碌?

在我看来,

不只很多本专业的毕业生,

甚至很多老员工都不合格。

工作多年,见的人做的事也不少,简单自我总结下。

>>>挖好坑慢慢填,由于个人是后端工程师,本文更偏向于服务器+数据库+分布式



1.计算机思维

    程序员最重要的特征是计算机思维。

    什么意思?我们需要知道自己所工作的直接间接终端,final endpoint,是计算机。

    计算机是如何工作的?

    冯诺依曼结构,指令集+存储器系统,接收输入,进行计算并输出,这是最基本的工作模式。

    更具体的,是基于操作系统和底层协议支撑起来的整个计算机世界。

    不管什么语言实现的框架,中间件,服务,细究起来或者分析几步,必然是

    进程,IO,序列化,通信,CPU、内存资源这些东西

    理解这些东西哪些是重要的,哪些是次要的,有助于我们快速定位问题所在,提升性能。

    学会观察自己的进程的情况,学会debug,能对一个请求的整个生命周期进行追踪溯源,

    也就对项目全局有了基本的理解。

    很多底层技术面试官会问:浏览器输入网址后发生了什么?

    问题很简单,但是答案甚至可以写成一本书。因为要详细回答这个问题,基本上囊括了

    应用层协议、底层协议、WEB服务器框架、

    代理、缓存、负载均衡、容错、数据库、通信、编码、序列化、等等各种东西。

    因此不同层次的人会有不同程度的回答。很容易就知道你的真实水平所在。

    计算机的哲学与人的哲学是一样的,

    从哪里来,到哪里去?

    弄明白每个字节的流转,你就是大神。

    没有这种好奇心与思维方式,很可能多年都在外围API层面打转,

    对了既不知道为什么对,错了更不知道为什么错。


2.思路清晰

    程序员尤其讨厌工作思路不清晰的人,

    表现在说话无重点或者不知道重点,颠三倒四,自相矛盾,问A答B。

    交流的时候如果两个人水平相近,会非常舒服,简单高效。

    因为很明白对方的思路,清楚对方在说什么。这里主要是指技术问题。

    而如果水平相差太远,就会觉得非常累。

    因为根本没有共识

    这种共识,来自于大量工作经验或者学习涉猎后的沉淀,

    一个程序员并不需要也不可能对所有技术都了如指掌,

    但是,他却能快速知道某个技术所属领域以及服务的内容,听词辨义。

    例如,我不懂深度学习,但是我知道深度学习基本思想,以及能做什么。

    有了这种积累后,

    遇到问题才能快速定位可能的原因,与解决方案。


3.数值敏感

    我最不能接受的是,对程序运行状况一无所知的开发人员。

    处理速度?不知道。QPS?不知道。处理了多少个请求?不知道。还需要多少时间?不知道。

    这种就是典型的不关心,不负责,不求进取。

    数值敏感是后端程序员的基本素养。

    关键日志不打,对代码想当然,也不写测试代码块,能跑就行,

    不关心有无优化空间,不关心是否使用合理,这样的也就写个一辈子CRUD,

    说实话,别人还不一定乐意用你。

    学会关心数字,对所用的中间件,框架,对服务器吞吐的各种数据耳熟能详,

    在关键地方,加个计数,加个时间统计,了解进程状态是否符合预期。每次交互是否能提升。

    最终达到使用最少的资源,最高效地完成任务。



4.代码阅读量

    先不谈各种花里胡哨的设计模式,编程思想,

    只说基本的语法使用,代码技巧,类库,很多人根本不合格。

    工作几年甚至只会用HashMap与ArrayList,只知道if else,命名各种tmp,aaa,123,

    水平简直惨不忍睹。

    虽然他们写的代码最终结果似乎对了,但是代码根本没法维护,就像一坨垃圾。

    找一个热门的开源组件,通过大量的优秀代码阅读,了解高手都怎么写代码,

    思考别人的层次结构,扩展性,可移植性,鲁棒性。

    记录一些好用的类库与语法糖,自己学会模仿。

    不阅读,就不知道自己有多菜。

    阅读代码也是解决异常的重要方式,很多人遇到Exception要么只会百度,

    要么发给别人一张报错异常的图片,张口就问怎么回事?

    你自己分析过了吗?堆栈调用链看过源码了吗?你只会看自己写的代码吗?

    找到出错的类,翻翻上下文的注释,结合出错信息,大部分情况可以推测报错原因。

    由此反推自己是否调用不合理?参数是否不合理?依赖服务是否正常?进程是否正常?

    知道去下载你工程依赖的库的源码。

    每一个专业的程序员,工作电脑的mvn本地库可能都有10G+。

    阅读也是最直接的学习手段,尤其是官方文档。很多人习惯于国内一些入门性质博客去学习安装,搭建,简单API使用,但是对该组件的核心概念,架构,全貌并无了解,遇到博客上没有说的bug束手无策。其实答案与思路通常都在官网中。。。


5.工作技巧

    我见过很多编程人员,连IDE都玩不转,不懂调忽略拼写检查,不懂调颜色字体,

    不懂自动补全,不懂快捷键,不会正向反向分析调用链。。。

    写起代码速度与效率感人。

    也见过很多人,从来不记笔记,每次调试慢吞吞的找一堆东西,敲一堆东西,

    不会加速重复的无意义的工作。

    学会自我总结与提炼,

    对我而言,txt就是最优雅的格式。

    每学一个东西,我会新建一个txt文档,记录各种命令、总结,测试记录,问题与答案。

    到下次使用或者遇到问题需要调试需要处理,只是复制粘贴而已。

    节省了大量时间。

    程序员不要以加班为荣,如果你一直加班,一定是因为你太菜或者方式不对。

    另外需要一提的是调试技术,包括IDE调试,远程调试,dump分析。

    这里主要指JVM相关。因为大数据领域Java是最主要的语言。

    曾经有个合作厂商的一线JAVA开发,工作多年,北大计算机博士毕业,居然不知道jstack,

    真是无语。


6.抽象与概括

    读书不仅要从薄到厚,还要从厚到薄。

    知识也是。

    前面也说到,没人能做到所有技术细节了然于胸,因为也不需要关心太多细节。

    有段子说

    一流的程序员靠数学,

    二流的程序员靠逻辑,

    三流的程序员靠框架,

    四流程序员靠谷歌和stackoverflow,

    五流程序员靠百度和github,

    不入流的程序员靠自己琢磨。

    可以看到,越核心的东西越不具体,而是抽象的,概括性的东西

    没有概括能力,不可能做到对全局性的把握。

    这个类是做RPC发送的,那个包是定义数据结构的,等等。

    对我自己的经验来说,很多大型系统源码,如spark/elasticsearch,

    只看类名 + 方法名基本就知道是做什么的。

    因为已经充分理解这个组件核心原理,如何起作用,

    自然也对其实现心中有数。

    达到这种水平后,才能集中精力处理核心问题,

    而次要的,知道它的存在即可。


7.开阔眼界与不断学习

    最后要说的是,一个人如何提升自己的总体水平?

    只有向更高的山峰爬去,才能看到更远的风景。

    世界那么大,比你厉害的人多的是。

    不懂的别一直自己研究,如果有机会就去问。

    永远对技术保持敬畏,

    keep learning。

    学会并主动去找自己工作领域的峰会,论坛,去下载PPT,

    看看业界一流的公司和团队在干什么,

    他们用了什么技术,能做到什么程度。

    自己的差距在哪,思考原因何在。

    技术迭代更新的速度无比飞快,

    停止学习就会被抛弃。

    当然,如果并不想看,也自不必爬。



end,近几十年,世界变化飞快。然而说起来,

真正变化的核心驱动力,只是IT工业。

如数学物理等基础学科的发展,远远没有达到影响我们生活的程度。

学术界甚至有科技大停滞的说法。

一切的基础已经在上个世纪之初垫定,如今只是修修补补。

相对论,量子力学我们人类100年都还没消化。

因此,说一句程序员改变世界也不为过。

程序员越来越多的今天,我们如何自处?

计算机技术永无止境,饱和的是那些凑数的,混日子的人。

多少小公司苦于招不到优秀的以一当十的技术核心,全栈工程师。

浮躁的社会,搞技术的还有多少人静心磨炼底层,提升自己的竞争力呢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352