自学之路——为今后的30年做准备

半路出家踏进这个领域的,基本上全部是靠自学的。下面是这些年来的自学途径(含未完成部分),目标是为未来的30年进行技术储备。换一句话说,今后三十年都打算搞技术。什么程序员三十岁怎么怎么,先把这句话践踏在脚下。

下面的图中,黄色部分是正看的(含看了七八年还没看完,但又不想放弃的的),红色部分是待看的,白色是已看的。打叉的是不想看的。

首先,是技艺部分。自学路线如下:

image

当然,中间还看过其它很多相关书,但我觉得那些书不是很重要,包括《设计模式》。

然后是领域部分。把软件开发分为三个领域:它的本身领域/行业应用领域和企业(政府)应用领域。

1 本身领域

image

这张图中,我把领域分为四个维度:系统、数据、算法和网络。这四个维度在未来的30年中都会很重要。上面的书都是我个人觉得适合自学的书。

备注:

(1)别听Google咋呼什么操作系统会过时。操作系统在几十年内仍然是基础。嵌入式那一堆我不了解,但PC、服务器、移动设备未来可能仍然是Windows和*nix的天下,因此,一本Windows Internals和一本Linux内核的书就够了,两个操作系统对比着看,可以更深入的了解操作系统。

(2)虽说《计算机组成与结构》是《计算机体系结构·量化研究方法》的基础,但我觉得做软件的,可以不看《计算机组成与结构》,直接看《计算机体系结构·量化研究方法》,后者很易读很有用。

(3)不推荐自学者看《算法导论》,《算法导论》可作为手册来用。这里推荐的是《算法:X语言实现》和《算法引论》两本书,第一本书是基础,第二本书是讲思路的。

(4)《网络处理器与网络系统设计》一书的前半部分写的非常精彩、简炼,俺只翻过前半部分,后半部分不是搞网络设备的不推荐看。

(5)随机图、复杂网络这是未来网络应用的数学基础。

下面是毙掉的:

image

(1)前面两个大家都叫好,但我实在静不下心来看,太抽象,毙掉了。

(2)离散数学太杂,但具体的主题又讲的太浅,基本上在每本书中都会讲一些该领域的数学基础,离散数学就可以不看了。想深入某一领域直接Google这一领域的paper就可以了。我没看一本离散数学书,感觉对后面的自学没有影响。作为替代品,我推荐中科大某老师写的《数学基础》(很遗憾的是,这本书我现在搜不到了),讲集合论的,看起来非常爽。

(3)《编译原理》我个人认为也可以不看。它很重要不假,但不是必要的。

2 行业应用领域

行业应用的基础是数学。因此主要是复习和自学数学知识。未来几十年,IT会大量的向各行业渗透。因此,非离散数学比离散数学会变得有用。下面是俺的储备图:

image

嘿嘿,从上图可以看出,俺最近正在这一领域攻城掠地。

备注:

(1)线性代数非常有用,但太TMD抽象,学了就忘(大学中开了两门线性代数课,不好意思,毕业后马上忘记光了)。线性代数的核心是“变换”,但这玩意,对高维空间很难理解。因此,需要以复分析作为过渡,把复数运算作为一种变换来理解,然后再过渡到理解线性空间中的变换。复分析以前没接触过,扫了几眼那本《复分析:可视化方法》,突然感觉,对线性代数的理解深入一点了。

(2)《变分法》以前没接触过,接触之后发现很好很强大。

(3)行业应用的关键是数值分析。

(4)数值一般都是采样来的,因此,又需要了解《信号与系统》。

(5)随机、统计、模式分析,这些是随着计算机技术的发展大放光芒……

(6)上面的核心理论都是几十年一二百年前的,估计几十年内,不会过时。是计算机的发展,让这类计算变得可行了。

3 企业(政府)应用领域

image

想了想,软件可能涉及的核心应用领域应该是上面这些(“中国人的心理”除外)。这些在N年前已经蹂躏过了。不过现在基本不做这类方面的开发,改作管理研究了。把《运营管理》排第一是因为ERP、OA、供应链之类的应用都处于运营管理的范畴,从运营管理的角度进行了解,会更深刻些。

下面是三个英文词:

Operation System - 操作系统

Operation Management - 运营管理

Operation Research - 运筹学

中文名字不知道是那几个家伙翻译的,搞的三个词完全到三个不同的领域了。Operation System 在 IT, Operation Management 在管理,Operation Research 在数学。实际上这三个是三位一体的,都是讲怎么管理和调度资源,怎么样组织流程的,怎么样优化资源和流程的。Operation System 的对象是计算机资源,Operation Management的对象是企业资源,Operation Research为上面两个提供数学支持,三者三位一体:

image

再放大点看,可以看见上面三个领域也是三位一体的:

image

 

上面是为未来三十年做的知识储备。

若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
posted @ 2010-03-20 11:24 xiaotie 阅读(6513) 评论(54) 编辑 收藏

 回复 引用 查看   
#1楼 2010-03-20 11:33 Kevin Zou      
樓主真用功,現在能靜下來看這些理論書,并潛心研究的太少了。
頂樓主

 回复 引用 查看   
#2楼[楼主] 2010-03-20 11:37 xiaotie      
@Kevin Zou
没啥娱乐活动 除了睡觉 也就是看看书了

 回复 引用 查看   
#3楼 2010-03-20 11:38 我是一头驴子      
顶一下,写的不错
 回复 引用 查看   
#4楼 2010-03-20 11:40 C雷      
樓主真用功,現在能靜下來看這些理論書,并潛心研究的太少了。
頂樓主

 回复 引用 查看   
#5楼[楼主] 2010-03-20 11:47 xiaotie      
@C雷
@我是一头驴子
@Kevin Zou

谢谢支持。抛砖引玉,期盼自学起来的兄弟姐妹们写下自己的历程,互作借鉴,同时也供后来者及“迷茫者”参考或批判。

 回复 引用 查看   
#6楼 2010-03-20 11:53 横刀天笑      
我以前也写了一个类似的,和你一样也是非科班出身:
http://www.cnblogs.com/yuyijq/archive/2009/09/02/1558694.html

不过没有你搞的这么深入,呵呵~~一直是在搞.Net

 回复 引用 查看   
#7楼 2010-03-20 11:56 Qinw      
同道中人啊 我也是自学者 无论是大一的自学JAVA 还是现在自学的C# 都是一个人熬过来的 在学校里很难找到兴趣相投的人 所以看到作者就很是亲切 现在正在学习数据结构与算法方面的本科知识 我感觉那些知识还是很有趣的
 回复 引用 查看   
#8楼 2010-03-20 12:15 温景良(Jason)      
很全啊,俺一直在学,那个数学真恐怖
 回复 引用 查看   
#9楼 2010-03-20 12:20 riccc      
自学不容易啊
 回复 引用 查看   
#10楼 2010-03-20 12:26 王一一      
lz到三十了吗?
 回复 引用 查看   
#11楼 2010-03-20 12:35 C Ser      
愿望很美好

实现起来很困难

尤其是后面的理论部分

没有一个学校的环境,自学相当有难度

 回复 引用 查看   
#12楼 2010-03-20 12:42 申飞      
怎么没有听到 银鳞胸甲 的声音???
 回复 引用 查看   
#13楼 2010-03-20 12:43 Julin Rain      
蝌蚪图画得不错,好多鸭蛋,好多蝌蚪...
建议再在各个鸭蛋上加上时间点和要达到的效果。

 回复 引用 查看   
#14楼 2010-03-20 12:58 heaiping      
编译原理要学的,看你的规划是研究的比较深刻的,所以编译原理一定好好学
记得好好坚持

 回复 引用 查看   
#15楼 2010-03-20 13:00 唐风      
好强啊!!
我也有类似的计划,不过我自己的希望不是做纯软件,所有和楼主有所不同。和楼主一比还是相差很远啊,呵呵。
PFPF


 回复 引用 查看   
#16楼 2010-03-20 13:16 申飞      
这个好贴 搜藏了
 回复 引用 查看   
#17楼 2010-03-20 13:57 Dreampuf      
呵呵..支持...要坚持下去啊.
 回复 引用 查看   
#18楼 2010-03-20 14:02 小猪凯      
坚持每天看20分钟的书。我没有LZ这样的高度,只想学对开发有帮助的一些书:目前是软件需求,code complete2,SAP等书。
 回复 引用 查看   
#19楼 2010-03-20 14:19 九域      
对你的敬仰 犹如滔滔江水 泛滥不觉 一发不可收拾
 回复 引用 查看   
#20楼 2010-03-20 14:44 wsky      
"什么程序员三十岁怎么怎么,先把这句话践踏在脚下"

Good,欣赏这种坚持

 回复 引用 查看   
#21楼 2010-03-20 14:52 东吴周郎      
基础很重要,但是总是忘
 回复 引用 查看   
#22楼 2010-03-20 15:11 昕情不好      
正打算学习离散数学....很难吗?

 回复 引用 查看   
#23楼 2010-03-20 15:29 诺贝尔      
《算法引论》 正在反复看


 回复 引用 查看   
#24楼 2010-03-20 16:36 深山老林      
真是个有心的楼主。
 回复 引用 查看   
#25楼 2010-03-20 17:59 cokkiy      
lz的数学看来挺好,可惜我在学校学的时候也觉得学的挺好的,等现在想用的时候,发现又忘光了,还得重新看一遍数学才能看其他的
 回复 引用 查看   
#26楼 2010-03-20 18:49 蛙蛙王子      
我也在学线性代数,第一遍还没学完呢,惭愧呀。
楼主学的够多的,基本没啥花哨的,都很基础,底层,能静下心来学好,真的不容易呀。

 回复 引用 查看   
#27楼[楼主] 2010-03-20 18:56 xiaotie      
@蛙蛙王子
以前没认真学 现在只好重来 唉 当时要认真学就好了

 回复 引用 查看   
#28楼 2010-03-20 19:07 个人知识管理      
牛人啊!
如果花一点时间学习一下PKM,
将让你的学习时间减半。
(及时的将相关的学习材料、学习心得等组织在一起,在遗忘曲线内复习。
年纪大了,记忆下降快)

信不信由大家了。

 回复 引用 查看   
#29楼[楼主] 2010-03-20 19:09 xiaotie      
@cokkiy
数学去年下半年开始复习的,刚复习完微积分线性数学和数值分析。没办法啊,搞IT的太多,必须和别人建立起区分度。。。

 回复 引用 查看   
#30楼[楼主] 2010-03-20 19:10 xiaotie      
@个人知识管理
汗 没你执着 。。。
我用我的内部wiki管理着的呢。。。

 回复 引用 查看   
#31楼 2010-03-20 19:39 SevenXue      
LZ是前辈、榜样,C#、JS、PHP我也是自学的,你看过的一些书我正在看。。

除了LZ提到的那些书以外,我再推荐几本书:
《The Art of Computer Programming》
《Programming Pearls》
《The C# Programming Language》
《TCP/IP Illustrated》
《Patterns of Enterprise Application Architecture》

 回复 引用 查看   
#32楼 2010-03-20 21:46 n216      
很欣赏读书、打基础、讲理论的做法。这是对当前浮躁现象的一种反动。
但是我更加欣赏学以致用,以用带学的现实主义思想!书海茫茫,一定宜少读、精读、必读。
另外,在基础中,我认为《编译原理》是非常的,必须的。

 回复 引用 查看   
#33楼 2010-03-20 21:47 晴天猪      
Mark 先
 回复 引用 查看   
#34楼[楼主] 2010-03-20 22:02 xiaotie      
@n216
目前遇到的最大的阻力是数学,对编译原理还没感到需求……

 回复 引用 查看   
#35楼 2010-03-20 23:44 撞破南墙      
30年恐怕 需求 变得 很严重了哦
 回复 引用 查看   
#36楼 2010-03-21 00:54 WizardWu      
写企业应用的,学好财会、工作流就够了

 回复 引用 查看   
#37楼 2010-03-21 13:34 Jeffrey Hua      
Great.But We need constant learning.:-)
Here I share my way(and to-do way):
1.try to read 1-2 books in English per a month averagely(for some of books are hard, we need several months or even one year to read them).
2.choose several topics(how many depends on topic difficulty) as projects every year during free time.That means diving deeply into some topic:
learn its state of the art, read some hardcore papers and standards,read open source code and try to extend it or even write one's own simple implementation.
For example,operating system, compiler,interpreter,
3D, game engine, window system and multimedia framework etc.
3.try to learn one new programming language every year,though I don't have to work using that language.especially some high level languages as lisp haskell, smalltalk,because around us ,many many people think about computer science or programming is mainly about computer(the machine).Those high level languages have broadened my eyes a lot. These days I am relearning Haskell.
4.try to use some general problem solving tools or tools from other disciplines to solve software problems.
for example:metaphor,abstraction,prototype,modeling,
deduction,divide and conquer etc

Besides,we need constant thinking.
For example,when we learn object orientation, we should think of:
-Why object orientation instead of class orientation
-Is there any relation to the general way of humans' problem solving
-the background idea of prototype and class.

BTW,In the above blog,we usually call Unix/Windows Operating System instead of Operation System.

 回复 引用 查看   
#38楼[楼主] 2010-03-21 14:10 xiaotie      
@Jeffrey Hua
现在看的英文书不多,英文paper看的较多。这些没写上来。最近感觉缺陷在数学上,所以就回头在补习数学。目前的学习是兴趣推动以及需求拉动。基本上,上面的每个领域的学习都是有项目的,就算当时没有项目,我一般一边寻找项目,一边进行学习和开发,这样让学习的效率更高一些,同时也有钱进帐。至于软件开发这一块,目前在撤退,不愿意学多了。以前做过太多太多的各种各样的项目,用过的语言不下十种,:(。c,vb,c++,matlab,sql,fortran,tcl/otcl,python,c#,js,java,as3,这些是正规项目用过的。玩票玩过的还有d,r,f#,erlang,ruby......现在感觉以前走向了歧途。目前做的,一方面是减少自己的技能,简单说吧,现在我手中几个项目,有java的,有C#的,有as3的,在几个语言之间换来换去,很累。另一方面,对每个领域又不够深入。而要深入我想深入的这些领域,主要的问题在数学上,而不在软件这一块。
Operating System 是文中的错误,谢谢指正。

如果你真想在计算机方面、软件方面,有所成的话,你毙掉的编译原理和离散数学是错误的。真的。
 回复 引用 查看   
#40楼[楼主] 2010-03-21 17:58 xiaotie      
@别爱上哥,哥只是个传说!
我在向行业软件方面发展。编译原理基本没用。离散数学讲的太散太浅,这个我直接看paper了。

 回复 引用 查看   
#41楼[楼主] 2010-03-21 18:04 xiaotie      
@别爱上哥,哥只是个传说!
高分子模拟,3D塑料打印……,其它这方面的应用,验证码识别,图像识别,图像检索……编译原理基本没用。离散数学讲的又太浅了太浅了……Random Graph那本书好歹也翻了几章,Complex Network 打印了几个经典的论文,这些离散数学讲的东东完全是摆设啊。还有,最近要用到的图匹配,离散数学书基本提都没提。

 回复 引用 查看   
#42楼[楼主] 2010-03-21 18:07 xiaotie      
只要不影响我干活不影响我看paper,就可以不学。文中列的那些都是不看会影响干活的。其它我还看了很多很多,只是觉得没必要再看,没列出来。离散数学那点东西,真的没啥好看的哈哈。看过汪芳庭的《数学基础》,讲集合论。看过王皓的《数理逻辑》,看过GEB,看过Random Graph 2ed,看过几篇Complex Network的综述,看过部分《图论编程——分类树算法》,看过《计算理论基础》……编译原理买过4本书,打印过一本书,不求甚解的翻过。上面毙掉并不是因为不了解的毙掉,而是因为了解而毙掉。这些都看的话深度不够,还把自己搞的太累。现在管理学这一块已经完全不用看了,俺已经到了可以给MBA上课的水平了。IT这一块基本要看的也很少了,平时遇见不了什么问题。问题就在数学这一块…… 俺的目标是搞技术垄断(难以达到,努力把),只有向数学发展,然后结合行业和计算机,搞个独立王国出来。
 回复 引用 查看   
#43楼 2010-03-21 19:57 jww      
楼主可不可以推荐几本财务方面的书
 回复 引用 查看   
#44楼[楼主] 2010-03-22 10:26 xiaotie      
@jww
太久远了记不清了。当时翻过2本财务管理的,后来开公司需要,看过会计准则,税法。现在不做这些了,看的是行为金融,国家政策的分析 。。。

 回复 引用 查看   
#45楼 2010-03-22 11:16 三桂      
楼主海量,PFPF...
 回复 引用 查看   
#46楼 2010-03-22 12:51 阳光下的柚子      
强贴留名,支持楼主自学,同时向你学习!
 回复 引用 查看   
#47楼 2010-03-22 15:46 Tonny Lau      
还在楼主's第一阶段徘徊~~⊙﹏⊙b汗
 回复 引用 查看   
#48楼 2010-03-22 16:08 steven9000      
插一句,楼主怎么不搞培训,可以赚得轻松一些
 回复 引用 查看   
#49楼[楼主] 2010-03-22 16:39 xiaotie      
@steven9000
不喜欢搞培训。

 回复 引用 查看   
#50楼 2010-03-23 13:42 木乃伊      
犀利哥。太犀利了。
 回复 引用 查看   
#51楼 2010-03-25 11:33 刘修明      
楼主已经学了这么多了,厉害
 回复 引用 查看   
#52楼 2010-04-08 20:45 萝卜皮      
我发觉比较难静下心来钻研
 回复 引用 查看   
#53楼 2010-08-15 07:08 LOSTSOUL      
学的太广了
 回复 引用 查看   
#54楼 2010-10-21 21:24 dpol      
看了你的记录很感动。要学的东西太多了。有句话说得好,“学海无涯,回头是岸”!