悟
这个东西来自灵光一闪,与时间无关,与境遇相关,可以说“十年循环,不如一夕顿悟”,每个人悟到的东西都不是一样的,如果你也悟到了什么,都请坚持这种“可遇不可求”的东西,它将帮助你,形成一种不平凡的世界观。
信
我们寻求问题的答案,从好朋友,从普通交往的人,从自己不太喜欢的人。
如果一直从朋友处寻找答案,那是一种“不肯让自己离开舒适区”的行为,本质是寻找“自己想听的答案”。
从普通交往的人,从自己不太喜欢的人,则是切入了一个解答问题的新视角,对于具备可操作性的回答,都可以尝试一下,对于我们自己,这可以引发“蝴蝶效应”。
兴趣和坚持
这是说滥的话了,本来也是真理,就拿学习Java来说,要看很多书,要学习Linux、容器和IDE。
看书的过程,学习的过程,都不是一蹴而就的,要有足够的耐心,投入充足的时间,三年有小成,五年才可能进入专家行列。
所以,在这么长的时间里,一定是自驱动的,兴趣驱动的,没有兴趣,是很难很难持续这么长时间的。
追求
古人云,“朝闻道,夕死可矣!”,这是忘情,是一种追求的精神。
责任
生活需要常回家看看,需要多带上老婆孩子看看世界,这是生命的责任,就像一个牛仔说的,“一个男人最大的成就就是照顾家庭”。
做好生命的基本责任,可以接着做好更多的事。
个人性格
请看看《代码大全》,第33章吧,讲了个人性格和成为好程序员的关系。
这是一本值得没事的时候,就翻翻的书,技术的浪潮汹涌向前,编程的技法变幻莫测,有些书可以在非常非常长的时间内指导我们的工作,不褪色,《代码大全》就是这样一本书。
技法和思想
语言、工具等等,都是编程的技法。
编程的技法,固然重要,需要熟练,并能快速解决问题。
编程真正重要的东西,是思想和境界,是数据结构,是并发,之后可以是基础框架。
编程的进步,来源于多写高质量的代码,最好能参与开源工程并贡献代码,也来源于多总结,比如写技术文章。
境界
1、每个人都活在自己的抽象层次中,能看懂低层次的落后,但无法理解高层次的先进。
2、从境界高低来讲,是有对错的,但如果没有进化到一个层次,也是无法从根本上被说服的,需要到达,才能认知。
3、可能我们还处在较低的境界,但是如果能认识到境界的差异,就能逐渐明白问题,就具备了境界提升的可能。
举个例子,曾经看过两篇关于“忠告”的文章:http://m.blog.csdn.net/blog/wniushuai666/6382232 http://www.itcodes.cn/226.html ,看过之后的感触是:
1、大部分需要忠告的人不会理解
2、大部分能理解的人已经不需要忠告了
3、很少的需要忠告的人,恰好被“忠告”了,境界就变了
农夫山泉
农夫山泉有句广告语:我们不生产水,我们只是大自然的搬运工。
作为程序员,我们是不是农夫山泉?我们处于哪个级别?
程序员的八个级别:
原版:http://blog.codinghorror.com/the-eight-levels-of-programmers/
译文:http://www.oschina.net/news/34818/the-eight-levels-of-programmers
世界观
最终,我们会形成一种基于程序人生的世界观。。。
软件
1、CPU、硬盘等硬件有自己的操作指令,用于控制自己或周边
2、硬件之上有OS,调用硬件指令控制硬件,并提供API,让软件可以控制硬件
3、低级语言(汇编/C/C++)编译后的代码,可以通过OS控制硬件,需要做较多硬件相关的基础性工作(比如申请内存、回收内存),性能强悍,但容易出错,适用于系统级软件,但不适用于应用级软件
4、高级语言(典型的是Java/C#),在编译结果和OS之间,加了一层“虚拟机”,帮我们做很多基础性的工作,比如回收内存
5、算法、数据结构、协议是技术源泉;面向过程、OOP、AOP、SOA是解决方案
Java
这也是一种普通的技法,和工匠盖屋刷墙一样。
开始学习Java时,如果是利用Linux+Vim+Javac来学习的,不是用IDE,则技术上更容易进步。
Java运行在虚拟机上,我们用strace看一个Java程序的运行,发现虚拟机为了保证程序的顺序执行,是有锁的,所以它的性能会不如低级语言,但快的离谱的CPU把这都弥补了,而且应用系统的瓶颈也不在这里,所以它已经完全满足了应用级软件需要的情景。
JDK只是一套类库,和我们自己写的程序,和我们使用的各种Jar,并没有本质区别,技术上还是一个量级,这样说未必对,因为JDK的开发者的水平高很多,对IO、网络、硬件都有很深刻很深刻的理解,但我觉得这样说,可以破除对JDK的“高莫敢入”,可以带着轻松的心态阅读它。
Shell
就拿最常用的 Linux Bash Shell来说,就像名字描述的,就是一层操作系统外壳,封装操作系统API,提供我们管理维护操作系统的一些命令。很多机构或社区开发了多种Shell,而Bash Shell是最普遍使用的一种。
通过Shell,我们不仅仅可以管理操作系统,还可以管理操作系统上安装的各种软件。只要软件提供了Shell命令就可以了。各种运行在Linux上的软件,几乎都提供了管理命令行的,大多是Shell脚本。
另外,当我们开发一些基础组件的时候,比如版本部署,很多时候也要写Shell,来完成版本的自动打包、部署,等等。
掌握 Linux 上的Shell,还是蛮有益处的。
待续。。。