做为一个码农,已经和码代码这件事情厮混了很久。起初的时候,只是一个纯粹的码农。做着一些堆砌的工作,只是简单的把ABCD按照某个顺序组合起来,然后程序就跑起来了。什么性能了,结构了之类的都是一些空谈吧。那个时候,也有这样的意识。但是能想到,却做不到。随着代码量提高,看的东西也多了起来。逐渐知道了,还有个东西叫设计模式;之后又知道还有东西叫做编程范式;还知道了多线程,甚至多核编程。。。。。看到这么多的新东西,也看着旁边做UI的同事的成长。就开始反思了,编程到底是个什么东西。是怎么回事。如果泛化开来,也可以说设计设个什么东西。
我们往往很是崇拜那些大牛,能够熟练别且巧妙的解决编程问题的人。觉得那就是神一般的存在。但是思考一下,我们和大牛之间差了些什么呢。主要有两个东西:一是对基本工具的熟练程度,二是思考问题的方式(也就是思维方式的差别)。
基本工具,很好理解。但对于一个程序员来讲,或许理解简单,实践困难,因为编程的话,所要设计的工具实在是太多了。编程语言是最基本,除了这个还有IDE了,profile的工具,打包的工具,程序测试的工具,甚至打字这个事情你也得选一个工具。而工具实在太多,你还得学会如何去鉴别工具的优劣,用最适合最好是最好的工具来解决问题。但是每一个工具都是一本天书,就拿打字来说吧,你可以选择VIM、EMACS或者editor之类。假若你为了效率选择了VIM,那么就能欣喜的发现,几乎每天都能够发现一些新东西。惊讶于,原来VIM还可以这样用啊。看一些牛人的帖子,很多都是,他们用最基本的工具的一些我们所不熟知的功能,就把问题给解决掉了。
为什么,基本工具这么重要呢。我的总结是,所谓编程就是使用合理的逻辑去组织我们手头的资源。这个可以不止说是编程,设计也差不多。程序猿操作的是变量了,CPU了,显卡了之类的东西。设计师,如UI,操作的是颜色了,形状了之类的。而,有些东西是不要你有非常多的天分就能完成的。就像在经过很长一段时间的训练之后,一个对绘画完全一窍不通的人,也能够画出看起来还可以的作品。这些也就是中国教育所擅长的事情吧。通过系统的洗脑性的课程,让你编程熟练掌握某一类工具的熟练工。于是,在你反复的做着1+1=2之后,在未来的某天由于你对加法这个工具已经非常熟练,你就能够数量的知道1+1的结果。所谓工欲善其事,必先利其器。就是这个道理。
言归正传,说说编程的基本工具之一,编程语言吧。其实学习编程语言的过程也大体相似。拿C来说吧。学习C,首先知道c有哪些基本的组成元素,换句话说就是我们能够操作的资源。一言以蔽之——数据结构。变量了,类型系统了之类的皆出于其下。然后就是我们有哪些基本工具,一言以蔽之——算法。包括一些常见的程序结构,顺序结构,分支结构,循环结构等等,还有严格意义上的算法,还有设计模式,“算法”这个事情说起来就比较难多了,因为其真乃森罗万象。这些掌握了,基本上也就掌握了一门语言。不得不佩服当初说程序=数据结构+算法的那个大师了。
其实这是个学习的模型。
1、了解基本资源
2、掌握基本工具的使用(或者说了解规则)
3、有效的使用的使用工具
然后就要说道,第二部分思考问题的方式。我们能够发现,能写程序的人千千万万,但是真正能够写出好程序的人。貌似没那么多。同样是熟练地掌握了某一门语言,为什么,还是会有大师和菜鸟的差别。甚至还会有大师和熟练工的差别。这就是思考问题的方式不一样吧。这种不一样可能会有很多个层次。
最基本的一个层级就是,有没有一种习惯性的思维,换句话就是熟练程度。卖油翁的故事,讲了一个道理,唯有手熟尔。熟能生巧。
再高一点的层次就是知识面的范围,比如知道各种排序算法优劣的人,要比不知道的人写出来的程序的效率要高很多,
再高一点就是知识的深度,比如知道算法的优劣如何表示,甚至如何设计算法的人,写出来的程序肯定要比一般人的要早程序的执行效率上高很多啊
再高一点,就是比较玄乎的东西了。这种东西叫做思维方式,这包括了一个人的世界观、价值观等等一切玄玄乎乎的东西。知道如何认识问题,分析问题,解决问题。有系统的,逻计划的思维方式去处理各种问题。
然后呢,就是最难把握的东西,就做天分。好吧,这个东西实在是哭笑不得。我承认,无论你再怎么努力,可能也比不了一个真正有天分的人花一分钟所做出来的东西。
未完待续。。。。