自从写第一个程序到现在已经三四个年头了,我一开始就学java,至于c语言是我后来自学的,几乎没有怎么系统的学习过,就是读人家的原代码,然后自己比划比划,就这么过了三四年。
在我的学习经历中,我认为最重要的就是数据结构,算法还有设计模式,以前曾经有人说程序等于数据结构加算法,而现在程序就不能仅仅有那两样组成了,还得加上设计模式,自从第一个不可收拾的程序被发现后,设计模式的重要性就凸现出来了,这么几样当中,微观上数据结构是一个程序的材料,算法将这些材料组织成一 种可执行的代码,而设计模式把这些可执行的代码组装成可维护可扩展,符合一定业务流程的软件,当然完全不必考虑设计模式,可执行代码就足够了,但是维护起来,扩展起来会非常麻烦,当初上学的时候,我拼命的学习java,还买了一大堆关于什么java模式,j2ee模式之类的书,有的到现在也没有读过。
最重要的还是要理解底层的东西,这是一切的基础,如果指针都不懂,基本的排序算法都不会就大搞设计模式只能是空中楼阁,于是我工作以后就几乎放弃java 而专攻c了,也就是在这个过程中了解了linux内核并开始深入的研究它,后来我发现linux内核简直就是一部百科全书,里面几乎什么基本算法都有,而且设计的都很巧妙,数据结构更是让人拍案叫绝,至于设计模式我开始并没有在内核发现它的一丝踪迹,可随着学习的深入,我发现linux内核里面用到的一些思想正是那些高层软件中应用的,比如OO,外观模式,装饰器之类,原来设计模式是一种思想而不是一个工具,通过读内核,我学习到了很多做应用软件学不到的东西,内核里处处玄机,十分精妙;在内核中我学会了位运算,位运算要是玩好了就说明你和硬件更亲了,想想看,底层的硬件实际上执行的就是位运算,所以我说 一个顶级编程高手就是“一串一零任平生”,学习位运算的同时,我深入的研究了cpu体系结构,进而理解了运算器的设计,当我读懂第一个cpu内部的电路图 并从中发现微代码时我恍然大悟,原来cpu内部也是一个和我们一样的世界,也有代码,也有指针,从我们写代码的人到执行代码的硬件连线,这一切就是一个分 形的世界,一级一级变小,但是结构却一点没有变化。
网络是另一个要抢夺的高地,整个网络体系,TCP/IP模型的设计让人感到一种惬意,最终协议的实现还是要靠代码或者硬连线,归根结底就是位运算。台子搭建好了,就该应用软件登场了...
我不是说几乎放弃java了吗?可是现在让我写java代码肯定比上学的那会要强千百倍。这就是一切,必须从基础学习,任何捷径都没有,必须动手敲代码, 必须学会调试,说明白一点就是必须懂指针,必须懂位运算,必须懂简单算法,一天500行代码根本不算多,坚持下去就会成功。

更多推荐

我学编程