个人很喜欢《码农翻身》公众号里面的文章,因此想把一些好的句子记录下来,方便以后阅读。此外,作者刘欣还将大部分文章整理到一本书里,推荐大家去阅读!豆瓣链接(评分:9.1 分)

程序人生

做一个普通人

想想我这 10 多年的发展,可以简单地用一个词来概括:专注技术!

技术宅的性格。

在《明朝那些事儿》的结尾,当年明月写了这么一句话:是的,这就是我想说的,这就是我想通过徐霞客所表达的,足以藐视所有王侯将相,最完美的结束语:成功只有一个——按照自己的方式,去度过人生。

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

我和很多人交流过一个有趣的现象,那就是刚毕业到 30 岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了 30 岁,时间就如白驹过隙,一年又一年飞逝而过。

  1. 好奇心

    刘慈欣在《朝闻道》中描绘过这么一个情节:在古老的非洲大陆上,有个原始人无意中抬头仰望星空,凝视的时间稍微长了一些,超过了外星人设置的阈值,立刻拉响了人类即将产生文明的警报。因为外星人认为,人类已经产生了对宇宙的好奇心,文明的产生,科技的发展不过是一瞬间的事情。

  2. 养成计算机的思维方式

    养成计算机的思维方式,流畅地把人类语言的需求转化成计算机语言,这是程序员的基本功

    很多人会语法,也懂框架,但是在基本功上却不过关,只能在初级程序员上踏步。

    这个基本功的训练就是数据结构和算法,我的经验是多做习题(大学时我把数据结构后面的习题都做了一遍),让这个思维在脑力里固化,以后的编程就可以信手拈来了。

    当然,作者能这么牛逼,操作系统、编译原理这些基础知识也不能没有吧~ 所以本科的核心课程还是很重要的。

  3. 扎实基础,融会贯通

    现在的软件开发封装的层次已经非常高了,只要学会 Java 就能做一个编程工作了,随着你做的越来越深,越来越专,这些基本的问题就会浮现出来。

    但我不敢说我把 Java 学会了 T_T,泛型呢?

    更重要的是,计算机软硬件的基本思想在这几十年里其实变化不大,例如缓存,增加抽象层等,有了这么基本的思想的武装,去学习新的东西不但学得快,(而且)理解得会更透彻。

    这就让我想到 CSAPP 这本书了。

  4. 要透彻地理解一个技术的本质

    理解了技术的本质以后就能够触类旁通,就能够快速学习,这在技术更新很快的软件行业尤为重要。只是学会使用是不行的,不但要知道 how,还要知道 why。停下来,思考,才是进步的本质。

    作者用到了 Ant(XML) 到 Maven 的例子来阐明学习技术本质的重要性。

  5. 要能写漂亮的代码

    写出漂亮代码并不容易,需要思路清晰,有良好的编程基础,有优秀的抽象能力,以及对一门语言的熟练掌握。

  6. 抽象的能力

    抽象思考的能力怎么强调都不为过。现实的需求纷繁复杂,如果架构师不能够把这些乱无头绪的需求抽象成一些“概念”,在概念的层次进行思考,系统根本就无法设计。

    但是抽象出概念以后还不够,还要看看这个概念是不是正交的,能不能独立变化,如果不能,考虑下新的概念抽象。

    设计模式一直强调的「发现变化并且封装变化」其实就是这个意思。

  7. 技术领导力

没想到文章后面的评论也略有意思:

一个合格的架构师,需要掌握很多语言吗?
回答:精通一个,了解其他。

人在职场

凡事必先骑上虎背,给性格内向的程序员聊几句

(老板让作者的朋友去面试员工)但他觉得技术还是有短板,感觉自己基础理论不扎实,领导给布置的功能能做出来 ,但是说原理就有可能卡壳, 我说这正好是一次机会,最好的学习时机,有了问题的引导,你会疯狂地学习,迅速的提升自己。 

我想起了 09 年看的一本书《陈寅恪与傅斯年》,里边形容傅斯年是“凡事必先骑上虎背”,这句话我一直印象很深刻,对于一个内向的程序员来来说,我在遇到机会,犹豫不决,缩手缩脚的时候总是会想起它,然后鼓起勇气先骑上虎背,让自己下不来台再说,但是真的尽自己最大努力以后就发现,事情没那么难,最后还都把事情做成了。

作为一个擅长和机器打交道的群体,大部分程序员的性格都比较内向、沉默。别看在网络上,在 QQ 群里边谈笑风生,幽默有趣,但是回到到现实中,面对一群人的时候,连准确的表达自己的观点可能都做不到,更不用说去柔中带刚,唇枪舌战地争抢某个东西了。

这太真实了吧。

(作者参加 IBM 每年暑假的 Extreme Blue 实习生项目)当时我对敏捷软件开发还算了解,但是对于在 3D 虚拟世界中建模、编程就一无所知。可是已然骑上虎背,下不来了,接下来马上要带着实习生来实现,怎么办?只剩华山一条路,明知山有虎,偏向虎山行,那就是逼着自己赶紧进入未知领域,拼命地去学,向海绵一样吸收各种知识,几个月以后,还确实把这个项目给做出来了。

你是怎么管理时间的?

刚开始的时候,我发现任务清单是有用的,把一个任务干掉的感觉确实不错,但是人总是懒惰的,总是喜欢先去做那些容易的工作,哪怕它不是很重要,对于比较难的工作,需要深度思考的工作,需要形成文字,写成总结的工作,总是能拖就拖,一直拖到最后时刻。

于是,任务清单就失效了,今天没完成的任务放到了明天的任务清单,明天还是没有完成,就放到后天…… 最后还是完成不了,就把它删了吧。

提到手机,这绝对是个“毒瘤”,刷刷微博,刷刷朋友圈,抢个红包,回复朋友的消息,看看比赛的实时比分,一个标题吓人的文章推送…… 手机中总是有无穷无尽的新鲜内容把人的注意力吸引走。不管在哪里,只要空闲下来,总是忍不住地想拿起手机看一看,生怕自己漏掉什么。

拖延症 + 注意力分散,变成了影响工作和学习的最大问题。后来也想通了,工具和方法是解决不了问题的,因为人性总是懒惰的,大脑总是想轻松的。

一个人想进步,那必须得逆流而动,非得逼自己一把不可。逼着自己先做那些困难的事情,逼着自己去保持专注。

关掉微信,微博,QQ,甚至关掉 WIFI。和互联网失联几天,地球照样转,并且很多大事也不会漏掉,他们总会通过各种方式传入到自己的耳朵里。

具备这种品质的人,才有可能高效地工作,最后脱颖而出。道理大家都明白,效果看执行。

深表赞同!

如何维护一个好的技术博客?

现在有不少文章,都是把自己的经验,自己工作中遇到一些技术点、解决的问题一股脑地写出来,不分主次,自己觉得很爽,似乎面面俱到,但别人读起来不知所云。

还有很多文章,采用的是bottom-up的方法,上来就罗列技术细节、具体参数、安装步骤,很容易把人给搞晕、让人心生厌烦。

我建议大家写文档的时候采用top-down的思路,先讲 why,再讲 how,甚至把更多的笔墨放在 why 上,让读者了解背景,问题产生的原因,有哪些可能的解决方案,哪些方案较好。这么一路下来,也能帮助你自己理清思路,甚至帮你发现自己理解的漏洞。

总之,在这个严重同质化的年代里,努力要让别人一提到某个东西就能想起你,这就是特色。

码农在工作中的必备能力

  1. 养成计算机的思维方式

  2. 定位问题的能力

    好的码农能够把软件在脑海里简历一个运行的模型,设置输入输出,仰起头在脑海里模拟运行一下,很快就能找到问题所在。

  3. 搜索的能力

    这背后就是对问题本质的理解是否到位。学会选择最适当的关键字进行搜索,也是码农很重要的能力。

  4. 熟练使用 IDE 的能力

  5. 重构代码的能力

    《重构:改善既有代码的设计》by Martin Flower

  6. 写测试的能力(单元测试)

  7. 熟练使用 SCM(SVM、Git、CVS)的能力

  8. 构建软件的能力(Ant、Maven、Jekins)

我们向印度人学习什么?

最近几年印度人可了不得,占领了硅谷,你看微软的 CEO 萨提亚·纳德拉,印度人,Google 的 CEO 桑达尔·皮查伊,也是印度人。还有 GlobalFoundries CEO 桑杰·贾,Adobe CEO 山塔努·纳拉延,从名字看你就知道是印度人。更不用说印度人在各大公司那非常多的高管了。回头看看中国人,似乎造成了一种印象,印度人适合当老板,中国人适合当工程师。

关键:适度包装(Polish)

挖掘 -> 实现 -> 包装

这位印度人通过审视现有的系统,引入新技术、新方法,适度包装,以螺旋上升的方式,可以说是在一个普通得没法再普通的传统应用中生生地杀出了一条血路,不但积累起了自己的信誉值,还让老板经常露脸,得到了老板的赏识和信任,迅速的就成长为一位骨干人物。

快速学习

想得太多,做得太少

如果不能直面并且解决这两个问题,你很有可能一直处于迷茫和焦虑中。但是如果一直处于“思考”阶段,没有展开切实的“营救”行动,这种迷茫估计要持续下去。

第一个问题:想得太多,而做得太少
第二个问题:职业发展没有目标感,缺乏自我激励和自我约束

只要行动起来,实现一个个小目标,迷茫就会越来越少。

经过考研锻炼的同学,应该有这个特质,在长期的复习和准备中,要耐住寂寞,经受住诱惑,全靠自觉,没有自我激励和自我约束,是坚持不下来的。

总之,人一定要成长,你不成长,就没有成就感,就会迷茫。其实这一套道理很多人都明白,但就是缺乏执行力,无法切实执行下去,人和人之间的差距就这么产生了。

不去做,然并卵!

思想的巨人,行动的矮子。

懒就一个字

自己不去探索,完全依赖问别人。

我想了想我自己,如果我要是加入一个群,肯定是有目的性的,肯定首先去把这个群的介绍,公告、文件等东西翻个底朝天,然后对不明白的才去询问。

这件小事可能反映出一个人探索的精神,这在技术变化如此迅速的 IT 业是非常重要的。

救命,身边很多程序员同学和朋友都缺乏这种探索精神。想起自己刚开始学习编程的时候也是在 QQ 群里不断问,后面被怼多了就喜欢自己先想方设法找到答案,尽量不麻烦别人。

思考才能真正的进步!自己解决的问题才能记忆犹新。

不探索、不思考、不主动,都是懒的体现,让我们每个人都避免这“三不”吧。

看书好还是看视频好?

我们带着疑问去学习,就会发现一本书,一个视频远远不够 – 因为无法回答我们所有的疑问。

很有可能需要读好几本书,读很多文章,搜索很多东西,来回对比,才有可能解答这些疑问,也有可能一些问题一直解答不了,突然有一天在编程或者讨论中被触动,这才打通了任督二脉

还有一个好的实践是经常站在设计者的角度去思考这些问题,甚至自己去考虑实现方案,然后和人家的实现对比,会有极大的收获。

用这种方式其实就是以我为主,不断丰富自己的知识结构,建立自己的知识大厦。

其实就是讲主动学习的重要性。

老司机经验

对自己狠一点,开始写作吧

为什么学习需要写作?

我时常会有这样的感觉:自己心里觉得对一个技术点已经掌握了,但是当我试图给别人讲述的时候,发现并不能轻松自如、深入浅出地讲出来。

这就说明了一个问题:自认为掌握了,其实并没有真正地掌握,大脑只是对这个技术建立了一个整体的概念,在一些细节处做了想当然的假设,等到你用语言再来表达的时候发现,哦,原来这个假设并不完全成立,是有问题的。

当然不是泛泛地记流水账,或者把几个孤立的点罗列在那里, 而是要把思路理清楚,尤其是要写出为什么要有这个技术?这个技术解决了什么问题,然后才是这个技术是怎么使用的。

在这样写的过程中不断思考并保证逻辑清晰的同时,去检验自己是否真的理解这些技术。当你逼着自己去回答这些问题时,会发现自己理解的还不够,还需要查找更多的资料。

在你通过 Google 找资料的时候,你会发现,哎呀,网上的这些文章怎么这么差劲,重复的内容这么多,大部分都是复制、粘贴。大部分都是在讲述怎么使用,对于“为什么”从来都是只字不提,或者犹抱琵琶半遮面,羞羞答答的不说出来。

写出来方便激发深度思考

写作会逼着你去思考,梳理知识体系,防止自己被碎片给填满。

闲聊几句

时间是这么被浪费掉的

Robert Martin 在《Clean Code》中提出的著名论断:

衡量代码质量的唯一标准就是阅读代码时骂脏话的次数。

漫无目标地浏览网页是最容易耗费时间的,信息爆炸时代,网上有如此多新奇的东西,一个接一个,根本就看不完。

我学到了什么?好像什么都没有!仅仅是对一些系统产生了印象,为以后增加了一点谈资而已,更关键的是我的工作没有按时完成,没有能在我精力充沛、可以高效率推进的上午完成,这是个很大的浪费。

保持目标感,记住方向,把有限的时间花在刀刃上是多么的重要啊!

苹果手机变砖头以后

2009 年,浅川智惠子成为 IBM 的院士,这是 IBM 技术人员的顶级荣誉,当时她的个人介绍中有一句话,让我印象非常的深刻:She lost her sight, but not insight.