说 明:本文来自互联网,抱歉不知道作者是谁,只知道是某个职业学校的计算机老师,如果侵犯了你的全力或者隐私,请通知我,我立刻删除,写于此处完全在于对本文的好感,拿到博客上来分享,没有任何商业通途,特此说明。
前 言
本书内容与广为流传的经典书籍: 《程序员修炼之道-从小工到大家》 无任何关系, 这里仅仅是喜欢此书且书中主要内容与一个爱好者如何成为一个程序员之修炼道路相 关而已。
此书内容是由一系列独立的部分组成,相关资料均来自计算机书籍资料、互联网 络等加以整理汇集而成。本书阐述了软件开发的许多不同方面。无论你是初学者,还 是程序员,只要你通过阅读本书进而扩展,你将学习到各种技能,养成各种习惯和态 度,只要每天运用这些知识和建议,你很快就会看到你的相关技能的提高,从而为你 的职业生涯的长期成功奠定基础。
目 录
技术盘点 ............................................................................................................... 1
学什么编程语言比较好? ................................................................................................. 1
TIOBE 编程语言排行榜 .................................................................................................. 2
程序员的 7 种武器 ...................................................................................................... 3
技术经验 ............................................................................................................... 4
码斗士的修炼之路 -- 如何保持并提升战斗力 ............................................................................. 4
程序人生 ............................................................................................................... 6
30 岁了,大学老师想走回头路做程序员,大家给点建议 ...................................................................... 6
什么时候学习编程都不晚 ................................................................................................. 7
- 1 -技术盘点
学什么编程语言比较好?
我应该学什么语言?
初学者经常会提这种问题。
这句话被问的很多,但是通常是不会得到正确答案的(相信会永远下去的)。
每种语言都有一个相对固定的崇拜者群体,每次在论坛上有人比较一种语言的好坏,就会引发一场持久的战争。
之所以发生这种情况,正是因为各种编译语言之间的力量是均衡的,没有哪一种语言是完美的,能够“终结”其它
的所有语言。当然如果你有特殊的需求,比如工程或者数学,那可能需要一些特殊的语言来解决,比如 Lisp 或者
Ada,这在该领域内基本上是无可替代的,那你也没有什么好迷惘的了。
如果你只是一个刚刚准备进入编程这一行的学生,或者是一个想业余时间搞点自己的小东西的业余开发者,却
不知道哪种语言比较适合自己,就接着往下看吧。
首先是 C 语言。几乎所有的计算机专业都把 C 语言称为语言中基础的基础,在大学里基本上都属于必修课程,
而且,现在还是我们国家计算机等级考试和程序员水平与资格考试的标准语言。C 语言之所以有这样的地位,是因
为它最接近底层,最接近汇编语言和机器语言,最接近机器的思维方式。所以,学好 C 语言可以更方便的以机器的
模式思考问题。而且 C 语言有着严格的格式规范,不符合规范的写法或者错误的类型定义,都会引起编译错误,让
人在使用 C 语言的过程中养成良好的编程风格和代码规范。
但是新手学 C 语言通常会出现一个问题,就是除了写个排序算法,似乎根本想不出来 C 语言有什么用。这是因
为我们的教科书讲 C 语言的时候,只讲这些基本算法,甚至连读写文件都不去讲,更不用说图形界面处理了和网络
操作了,没有这些知识,想写一个真正的应用那是不可能的。从 0 开始学习 C 的成本是比较高的,如果没有明师(或
者一本好书)的指点,某些概念想开窍也有些困难。
但是目前你所学习的 C 语言,都不适合用来开发 Windows 桌面程序,如果有这个需求,
目前最简单的语言应该就是 C#和.Net 平台。通过简单的拖放控件就可以摆出相当专业的软
件界面,而程序本身要实现的功能也无非就是本地的文件处理和数据库处理。 .NET 是世界
上最大的软件公司微软公司花费 300 亿美元精心推出的下一代开发平台,可以开发 Web 程
序、Windows 应用程序和 3GWap 无线网络应用程序等。.NET 在大型系统开发中占有的开发份额越来越重。易学、易
用、学习周期短,是 .NET 最大的优势。根据业界人士统计,学习.NET 所花费的周期比学习 Java 的时间少一半。
当然,如果你不喜欢.Net 平台,还可以选择 C++。 C++通常被认为是更高级的 C (实际上它们的差别还是很大的) 。
C++用来写桌面程序,无非也是调用一些已经被包装好的处理窗体的函数而已。
只是 C++入门容易升级很难,没有个三五年的潜心研究,是没有办法精通它的精髓的。当然如果你已经学到了
那一步,那你应该已经很明白自己需要学哪些东西了,只要去找书,找好的源代码来研究就行了。
Java 语言的崇拜者很多,不得不单独拿出来说。Java 语言的爱好者喜欢在语言层面把 Java 和
C++相比,而在企业开发架构方面(特别是 B/S 方面),又拿 Java 和.Net 来做比较,因为 C++缺乏这
方面的应用。Java 语言本身是非常干净的,但是被各种各样的包搞的比较混乱,新手进来容易摸不
着头脑,而且框架太多,又互不兼容,习惯了 Struts 开发方式的人员,很可能在换了一家公司的以
后,虽然 Java 很熟练,但是却不得不又要花很长的时间来研究学习和适应另一种开发框架。
- 2 -Java 通常被认为适合用来开发超大型的 B/S 项目,当然 C#依托.Net 平台和 Visual Studio 这样方便而优秀的开发
工具,也是非常适合用来开发超大型的 B/S 项目。
在 WEB 开发方面还有一个重要的语言不可不提,那就是 PHP。PHP 编程语言主要用
于开发网站和互联网软件,是 IT 公司首选的互联网编程语言。超过 40%的 WEB 程序使用
PHP 来编写,Yahoo、Google、百度、腾讯、新浪、搜狐等各大互联网公司以及各种门户
网站和社区都广泛使用 PHP 技术。PHP 出现的目标就是提供更方便的网站开发的能力,
它的语法跟其它的脚本语言比如 Perl/Python/Ruby 都很接近,而且提供原生的 Mysql 数据
库支持,读写数据库即简单又高效,而且因为 Apache 的良好支持,才使得 LAMP 平台能够与 Java 和.Net 平台相抗
衡,而且成为了小型项目首选的解决方案。
TIOBE 编程语言排行榜
TIOBE 编程语言排行榜是编程语言流行趋势的一个指标,每月更新。这份排行榜排名基于互联网上有经验的程
序员、课程和第三方厂商的数量。排名使用著名的搜索引 擎(诸如 Google、 MSN 、雅虎)以及 Wikipedia 和 YouTube
进行计算。
官方 url:http://www.tiobe.com/
请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写
的代码数量多少。
必须声明,这个榜单本身采集的是英文世界的数据,虽然在反映趋势上有一些参考意义,但与中国的实际情况
不完全符合,而且,这张采样本身也有相当大的局限性。
2011 年 10 月 TIOBE 编程语言排行榜
- 3 -程序员的 7 种武器
看到 china-pup 一段广告程序员的 7 种武器 -〉
正则表达式、编程语言、数据库、算法、软件调试、开发环境、编程思想
真的是很简练的总结,特整理留存。
长生剑: 剑非剑。 “一个人只要懂得利用自己的长处,根本不必用武功也一样能够将人击倒。 ”
袁紫霞的剑就是那绝甜绝美的笑。正则表达式之于程序员,就是一把绝甜绝美的的长生剑。正
则表达式是强大、便捷、高效的文本处理工具。正则表达式本身,加上如同一门袖珍编程语言
的通用模式表示法,赋予使用者描述和分析文本的能力。正如此,正则表达式的运用,不仅能
使他人快速读懂代码,也是让程序更为简单的快速途径。
霸王枪:“江湖上独一无二的一杆枪,枪尖是纯钢,枪杆也是纯钢。它的尖若是刺在人身上,那人
固然必死无疑,就算被枪杆扫中,也得呕血五升。”霸王枪的威力由此可见。而在程序员的江湖里,
编程语言无疑是必备的武器了。编程语言代表了开发人员对计算机本身的理解与对软件开发工作的
执著。同时,建立在编程语言之上的基础也标志着程序员的职业化道路发展到了一个新的阶段。因
此,熟练掌握编程语言,可谓是在江湖里拥有了一把独一无二的“霸王枪”。
碧玉刀: 段玉是个不谙世事的少年侠士,不曾练达人情,却以他的天真和诚实赢得了一帆风顺
的“运气”。武林高手和编程大师都不是速成的,任何一位成功者都经历过艰苦的磨练。对于程
序员来讲,不断的学习软件调试,灵活运用软件调试技术,是最终成为优秀编程人员的根本途
径。正所谓“软件有大美,调试见真功!”
多情环: 与《碧玉刀》中段玉的诚实相比,《多情环》里的萧少英却是城府比海深的卧底,被仇
恨所驱使,一步步地把敌人、也把自己逼向了死亡。数据库之于程序员,好比多情环之于萧少英,
相信很多开发人员在设计数据库时经常遇到数据库死锁的现象。数据库就好比一个城府极深的对
手,一旦放松警惕,将后患无穷。而 SQL 是一种简单但表达能力丰富的访问接口,因此被应用到
RDBMS 成为大部分信息系统的标准数据存储介质。所以对程序员而言,不仅要有良好的调试能力,
更要深刻理解 SQL 数据库。
孔雀翎:孔雀翎是虚构的暗器,但却给了高立无比的信心。“真正的胜利,并不是你用武器争
取的,那一定要用你的信心。无论多可怕的武器,也比不上人的信心。”要成为编程高手,必然
要有必胜的信心,信心的来源是建立在扎实的基本功之上的。而程序员的基本功,无疑就是对“算
法与数据结构”的理解。对算法与数据结构的理解有助于程序员了解语言背后的具体细节,同时,
- 4 -数据结构的定义很大程度上决定了程序的可维护性和可扩展性。因此,算法与数据结构是程序员信心之源。
离别钩: 开发环境对于程序员的作用是不言而喻的。作为朝夕相处的环境,如何选择适合自己的
IDE 就显得尤为重要。古龙笔下的离别钩,因其独特的含义而显得魅力十足。离别钩不是为了分离,
而是为了更好的相聚,体现了浓浓的兄弟之情。同样,对程序员而言,开发环境不仅仅只是列举
代码的工具,开发人员更应对开发环境进行透彻的了解,如同对待朋友般,方能实现人与环境的
完美结合。
拳头:“很少有人知道,拳头也是一种武器,而且是无可替代的武器。”而编程思想也往往被程序
员所忽视,忽略了编程思想这种最有效、最直接、最可靠的武器。编程思想是程序员对软件开发
的理解,对需求问题的分析,对程序开发的总体规划。具备了优秀的编程思想体系,犹如江湖中
的大师,既可见招拆招,亦可无招胜有招。
技术经验
码斗士的修炼之路 -- 如何保持并提升战斗力
那日,我与一友人漫步。他资质过人,少言寡欲, 刚二十出头。
他经常问我应该怎么走程序员这条路。
我不是什么大师,但仗键(盘)游走江湖已有数十载,吃过不少苦头。自以为不敢说到达了洪七公那种级别,但
离江南七怪应该距离不远了。(注:洪七公和江南七怪都是郭靖的师父)
我闭目沉思,悟空(七龙珠版),青铜圣斗士,健次郎(北斗神拳),郭靖(射雕),段誉和乔峰(天龙八部)
等历史著名斗士冲入我的空间,我提指在 iphone 里写下《码斗士的修炼之路》我不是说我做到了这些,只是”路
漫漫其修远兮,吾将上下而求索”, 但与大家共勉:
遇强更强
健次郎和悟空的一大特色就是遇强更强,或者说他们善于从对手/朋友学技术。有些程序员怕公司里增加比自
己强的同事,也不太愿意和别人分享自己的绝活,这其实恰巧断了自己的一条发展之路。
千万不要担心能力强的同事抢了你的饭碗,你的敌意和警惕性不仅让你树敌还减少了你从他那里学到你所需要
的东西。
当可怕的沙鲁出现的时候,小林问悟空:“当比弗利沙更强的敌人出现的时候,你是害怕还是高兴。“ 悟空的
回答是:”两者都有” -- 标准斗士的好强心态! 悟空的另外一个名言就是:“你真的很强, 我很兴奋!”
斗士们在某一个阶段身边会不断的冒出比他强大的,因此他们不一定是生下来就立于最高点。青铜圣斗士开始
连白银圣斗士都比不上,黄金圣斗士基本上都不屑于与在他们过招,但是他们居然一路杀将过来,晋升为*别
的神斗士。
- 5 -逆水行舟
斗士们的大环境永远不变,变的只是故事。不要抱怨微软或谷歌又更新 API 或者开发工具,有新的知识出现,
给更年轻的程序员超过你的机会。你必须面对逆水行舟的事实。
放弃追求单一的公平,对于这种环境斗士们只能不断进步,这就是造就斗士个性的过程。
名师高徒
没有龟仙人和界王神就没有超级赛亚人;没有九指神丐就没有郭大侠。想快速了解好的软件架构?想掌握网站
开发的动态?找到一个专家就至少省你一个月修炼的时间。名师可遇不可求,有几个人好运可以遇到名师呢?像段
誉一样走运的人不多,像乔峰一样不走运的人也不多。
“三人行,必有我师”--多开口,多问 -- 锻炼了你与人交流的能力,对身体也有好处。
自学成才
有一种能力会让你永葆青春--自学的能力。 这一能力可以培养,且应该非常重视这方面能力的培养和不断强化。
没有名师的指引,自学能力就尤为重要了(当然这是建立在有了一定基础之上的) 。所以不要害怕新的事物,尝试
去了解它,通过各种渠道获得信息并自我归纳。
有时我们可以把这种能力称为:“悟性” -- 观察,收集,融会贯通,像健次郎练成无相转身;像悟空练成龟波
气功和舞空术。
宁静致远
淡薄名誉, 简单的生活,专注于自己的修行,宁静以致远 -- 似乎没有什么能够阻止斗士们向上的决心, 他们时
刻保持一种纯真,这一点在乔峰和健次郎身上化成了豪气和超凡的情怀。
青铜圣斗士们对名著的大牛们的敬仰和有时傻乎乎的言论不会让他们以后的光芒减少。 -- 标准斗士的单纯心态!
贝吉塔第一次以超级赛亚人露面时说“我静下来了,完完全全静下来了。”
悟空的纯洁无瑕的心也让他可以毫不费力的宁静下来。
不要轻易为身边花花世界所动,否则你一生追求名利,反而适得其反。
海纳百川
不要给自己画上 Microsoft / Linux , dotnet,Csharp 等栅栏。
学什么?Java? C++? C#? php? -- 其实你可以先找项目,不要太在乎你对哪个公司更有信心。-- 有时三年河东,
三年河西,技术的更新,编程思想的进步会让你眼花缭乱。关键是你要开始学一样,然后尽量的深入。等到你比较
好的掌握一样,你会发现路会越来越宽。
要精通一样,但是不能只精通一样。否则你会处于非常危险的境地,让自己缺少选择。
试试开发一个小的 iphone 程序,或在 android 摸索几天,会让你消除对它们的陌生感。
我不是让你什么都学,而是说不要太在乎门派之争。
当悟空情急之下使出“太阳拳”的时候,救了整个宇宙。
终极的演变就是掌握北冥神功的段誉:引世人之内力而为己用,取百川而汇海。 -- 世上有几位码斗士能一览
众山小呢?
腥风血雨
纵观古今中外著名漫画小说连续剧,哪位斗士在死亡线上走过一遭(否则也没有收视率了)
平静的水面锻炼不了精干的水手,安逸的生活出不了时代的伟人,轻松的*部门里打造不出码斗士。
没有经历过连夜赶工,系统出错救火,维护多年老代码就体会不到代码重用,代码整洁,代码管理和项目架构
的精神。
当别人有不同意见是,你会有自己的笃定,因为你经历过血海的洗礼。
赛亚人的特点之一:死而复活之后,能力暴增;圣斗士们也是在生死边缘不断升级。
不要因为害怕承担责任而将升级的机会放弃掉 -- 现实生活中的码斗士大不了就是被炒鱿鱼(或者被公司保安
追杀?)
- 6 -程序人生
30 岁了,大学老师想走回头路做程序员,大家给点建议
本人 81 年出生,今年 30 岁了,05 年大学本科毕业,专业是计算机科学与技术。我上大学时,挺喜欢计算机专
业,对于编程悟性虽然不是很突出,但是挺能钻研,成绩也属于靠前的,是能被任课老师记住名字那类学生。
毕业之后在一大型软件公司做了程序员,用 J2EE 做 B/S 项目,那一年公司一下招了有四五十个应届本科毕业生,
我在里面是属于为数不多的、那种不用老员工带,一上来就能顶到一线写代码的。当时 2005 年月薪能拿到 2200 元,
在整个河北来看也算还不错吧。部门经理也挺看好我,是他亲自把我面试进来的,后来又把我要到了自己的部门,
现在想想当时如果一直干下去能发展不错。
结果我在公司里干了一年,06 年家里给找了关系,到一所大学里当老师。说是大学,其实就是职业院校,大专
层次的那种。好在是公办院校、有事业编制。当时我已与女友同居,准备谈婚论嫁了,经过一番艰难的抉择与思想
斗争,我还是放弃了程序员的工作,选择了工作稳定的学校。由于那所学校属于文科类院校,计算机系是很边缘与
弱势的系部,每年只招两个班,不到 100 人。我进学校后被分到计算机系,工作是负责全校网站建设与网络维护,
平时也教点计算机专业课。实话实说,我们整个计算机系只有 10 来个老师,大部分都是半路出家,科班出身的包
括我在内只有 3、4 个,真正有实际编程能力和编程工作经验的只有我一个。所以因为我有能力,领导不让我当专
职老师,要我坐办公室,有能力的要做些实际的事情,没能力的都去教课糊弄学生了,中国教育的悲哀啊!!!其
实一开始当老师我也想去教课的,比较轻松,不用早九晚五的坐班,挣钱比坐班的还多。可是谁让我是属于有点能
力的那种呢?事业单位就是能者多劳,但多劳不多得。。。。
其实即便是这样,工作强度也不大,完全和做程序员是两个概念,可以说是十分的轻松。人活得舒坦也就觉得
日子一年年过得快,一眨眼五年就过来了,一眨眼自己就三十岁了。现在的情况是,虽然我还是一个小老师,但手
底下有学生,除了网站大改版,或者更新下后台程序,整整服务器,再就是教教计算机专业课其他基本不用我自己
动手干活。由于领导也是外行,完全不懂编程,除了把上面布置的任务交给我基本不管我,工作进度完全由我自己
说了算,当然我也从来没给领导掉过链子。
说一下收入,刚到学校的时候月薪 2500 多,比当程序员轻松,挣得还多,当时是挺高兴的。后来才发现要命
的是事业单位涨工资忒慢了,五年了我才刚拿到 3000 元。那些刚毕业只有几百元收入的同学现在都超过我了。我
承认,他们有很多是付出了艰辛的努力,我只看到贼吃肉,没看到贼挨打~ 但是 3000 元得收入从河北省的大城市
来看,也是属于低收入者了。
步入 30 岁以后,我突然变得想法很多,30 岁了仍然一事无成,莫名感到焦躁,有时候会杞人忧天,感觉自己
堕落,不上进,对未来没有安全感。这些年靠啃老,现在有房有车有老婆有孩子(还有前妻。。。惭愧 >_<)
昨天突然回来 CSDN,以前的账号已经记不住了,差不多有 5 年没登陆论坛了,,,在长达五年的时间里我没
有遇到任何编程问题,也就是说五年来我的水平没有任何进步。以前上学《程序员》杂志每期必买,现在都不知道
还有没有这杂志了。唉~~~~
现在感到莫名的恐慌,虽然自己在公办院校当老师、有事业编制,但现在事业编也不是铁饭碗,万一哪天事业
单位改革,或者学校招不起生来,自己还不是得下岗啊。靠自己毕业一年的水平,甚至现在还有退步,我拿什么养
家糊口啊!
想到这里就觉得自己不能再混吃等死了,这些年来取得的唯一的进步就是考了一个在职研究生,计算机工程硕
士,其实完全就是为了评职称,没学到什么东西。现在想利用业余时间拿出半年好好补习一下 java 然后重新杀回软
件行业。我的最终想法就是,这个世界上没有什么工作是稳定的,如果想将来生活稳定,不至于沦落到摆地摊或打
杂工,就需要保持自己的知识与能力与时俱进,这样一个公司不行了,你可以很轻松的再找到一份工作。如果再继
- 7 -续呆在学校里估计我的能力就会与社会需求脱节了,逐渐就被社会所淘汰了。在学校里,我属于性格内向型,不太
善于处理复杂的人际关系,尤其是在这种事业单位,我既不会阿谀奉承,也不会趋炎附势,估计这辈子也爬不上去,
就是当个小老师吧。万一有一天学校不行了,我也就玩完了。
再就是这些年也厌倦了学校里同事间的生活交往,业余时间同事之间整天就是拉帮结派吃吃喝喝,今天你请客、
明天我请客,交了一帮酒肉朋友,以前我几乎滴酒不沾,现在能自己一个人喝一箱啤酒,但如果你不参与就等于把
自己孤立了,实属人在江湖身不由己。
总之目前的生活虽然安逸,但是步入 30 岁的我突然就有了危机感,人常说:没有远虑,必有近忧。现在萌生
出走回头路做程序员的想法,但是还没有勇气做最后的决定。
什么时候学习编程都不晚
导读:作者 Jean Hsu 现就职于 Pulse,是一名 Android 工程师。她近日写了一篇文章《It’s Not Too Late to Learn How
to Code》。文中提到了她自己在学习代码的过程中虽然艰辛但却很有收获。她强调,心动不如行动,要将想法实现
化。她还为大家推荐了一个 Stanford 的学习课程,希望对大家能所帮助。现将文章摘译,以下是内容:
编程就如一种超能力。通过它,你可以创造出成千上万的人们可以看到的东西;你可以改变人们的行为方式、思想
方式及与他人交互的方式。这棒极了,但是,我也见过好多人,他们认为这是一种他们力所不能及的能力。我也见
过很多非技术出身的人,他们似乎以为这种超能力只会赋予那些足够幸运的人——他们在很小的时候就拥有了这种
能力。
在高中,我曾学习了两门计算机技术的课程,所以在大学时我才有充分的信心去面对编程。如果在此之前没学过这
些课程,编程可能会成为我大学中的一个噩梦。我最钦佩的就是那些在大学前没有编程经验的同学,他们仍然可以
学的很好。
我的大学以外的几个朋友也和我同样感受。他们希望自己早些认识到编程的重要性,现在还能有多少机会可以打开
“技术”的大门,并且期待着自己能学会代码。这直接的表达出他们对代码的渴望同时他们也认识到现在为时太晚,
他们的年龄在 24,25 左右。
人们很容易认为这为时已晚,因为看到很多人用了大学四年的时间来学习编程。但这四年里我只学习了计算机科学
吗?前两年我一直在寻找主修专业,后两年我陆续学习了八门课程,但其中很多都与以应用程序为中心的编程无直
接关联,当时我认为这些课程都大部分人希望选修的。在大学整整四年里,我只学了一门与应用程序开发有关的课
程。刚开始,我没有 HTML 和 CSS 的实践知识,但是我和其他两位同样没有经验的同学共同努力用 MySQL,PHP 和
HTML/CSS 共同开发一个 Web 应用程序。
人们很容易认为这为时已晚,因为已经有很多技术大牛了。但是,最重要的是要记住每个开始接触编程的人都是一
个初学者,如何才能成为技术大牛,就要肯去开始,肯去钻研。
所以如果你内心想“真希望我已学会了编程”,那为什么不开始学着呢?当你开始学时,请牢记下面几个提醒:
1.它很困难。做一件事,起初可能需要花费更多的时间,但以后会越来越容易。当然,有些人更倾向于编程所需要
的逻辑思维,但我认为大部分情况下,大家并不认为他们为此做好了准备。当然了,让大家相信编程“很困难”以
及普通人一般都“不是绝顶聪明的”,可能会稍稍安慰一下我们的自尊,让我们感到我们是具有高智商精英团队中
的一员。
- 8 -2.在心理上对未来将面临的困难做好准备。我经常会想我是不是受到了什么诅咒,因为我每次尝试新东西(如新的
开发环境、工具、库等)时,总会出错。花了好几年时间,我终于意识到针对各种不同操作系统、软件版本等的说
明文档不是过时,就是很难理解。
3.你确实很喜欢编码吗?不要想它是否太难。想想你是否对它感兴趣?当你花了好几个小时调试了一个程序,最终
它可以按预期地运行时,你会十分兴奋吗?你希望花几个小时去完成一件事吗?这些都是软件吸引我的原因——我
从来不担心我是否能把它开发出来。
有很多好的资源可以帮助你学习编程,但我只坚持 Stanford 的网站上学习相关知识。Stanford 可以提供很多免费的
在线软件课程。(编译/张祺)
本书内容与广为流传的经典书籍: 《程序员修炼之道-从小工到大家》 无任何关系, 这里仅仅是喜欢此书且书中主要内容与一个爱好者如何成为一个程序员之修炼道路相 关而已。
此书内容是由一系列独立的部分组成,相关资料均来自计算机书籍资料、互联网 络等加以整理汇集而成。本书阐述了软件开发的许多不同方面。无论你是初学者,还 是程序员,只要你通过阅读本书进而扩展,你将学习到各种技能,养成各种习惯和态 度,只要每天运用这些知识和建议,你很快就会看到你的相关技能的提高,从而为你 的职业生涯的长期成功奠定基础。
目 录
技术盘点 ............................................................................................................... 1
学什么编程语言比较好? ................................................................................................. 1
TIOBE 编程语言排行榜 .................................................................................................. 2
程序员的 7 种武器 ...................................................................................................... 3
技术经验 ............................................................................................................... 4
码斗士的修炼之路 -- 如何保持并提升战斗力 ............................................................................. 4
程序人生 ............................................................................................................... 6
30 岁了,大学老师想走回头路做程序员,大家给点建议 ...................................................................... 6
什么时候学习编程都不晚 ................................................................................................. 7
- 1 -技术盘点
学什么编程语言比较好?
我应该学什么语言?
初学者经常会提这种问题。
这句话被问的很多,但是通常是不会得到正确答案的(相信会永远下去的)。
每种语言都有一个相对固定的崇拜者群体,每次在论坛上有人比较一种语言的好坏,就会引发一场持久的战争。
之所以发生这种情况,正是因为各种编译语言之间的力量是均衡的,没有哪一种语言是完美的,能够“终结”其它
的所有语言。当然如果你有特殊的需求,比如工程或者数学,那可能需要一些特殊的语言来解决,比如 Lisp 或者
Ada,这在该领域内基本上是无可替代的,那你也没有什么好迷惘的了。
如果你只是一个刚刚准备进入编程这一行的学生,或者是一个想业余时间搞点自己的小东西的业余开发者,却
不知道哪种语言比较适合自己,就接着往下看吧。
首先是 C 语言。几乎所有的计算机专业都把 C 语言称为语言中基础的基础,在大学里基本上都属于必修课程,
而且,现在还是我们国家计算机等级考试和程序员水平与资格考试的标准语言。C 语言之所以有这样的地位,是因
为它最接近底层,最接近汇编语言和机器语言,最接近机器的思维方式。所以,学好 C 语言可以更方便的以机器的
模式思考问题。而且 C 语言有着严格的格式规范,不符合规范的写法或者错误的类型定义,都会引起编译错误,让
人在使用 C 语言的过程中养成良好的编程风格和代码规范。
但是新手学 C 语言通常会出现一个问题,就是除了写个排序算法,似乎根本想不出来 C 语言有什么用。这是因
为我们的教科书讲 C 语言的时候,只讲这些基本算法,甚至连读写文件都不去讲,更不用说图形界面处理了和网络
操作了,没有这些知识,想写一个真正的应用那是不可能的。从 0 开始学习 C 的成本是比较高的,如果没有明师(或
者一本好书)的指点,某些概念想开窍也有些困难。
但是目前你所学习的 C 语言,都不适合用来开发 Windows 桌面程序,如果有这个需求,
目前最简单的语言应该就是 C#和.Net 平台。通过简单的拖放控件就可以摆出相当专业的软
件界面,而程序本身要实现的功能也无非就是本地的文件处理和数据库处理。 .NET 是世界
上最大的软件公司微软公司花费 300 亿美元精心推出的下一代开发平台,可以开发 Web 程
序、Windows 应用程序和 3GWap 无线网络应用程序等。.NET 在大型系统开发中占有的开发份额越来越重。易学、易
用、学习周期短,是 .NET 最大的优势。根据业界人士统计,学习.NET 所花费的周期比学习 Java 的时间少一半。
当然,如果你不喜欢.Net 平台,还可以选择 C++。 C++通常被认为是更高级的 C (实际上它们的差别还是很大的) 。
C++用来写桌面程序,无非也是调用一些已经被包装好的处理窗体的函数而已。
只是 C++入门容易升级很难,没有个三五年的潜心研究,是没有办法精通它的精髓的。当然如果你已经学到了
那一步,那你应该已经很明白自己需要学哪些东西了,只要去找书,找好的源代码来研究就行了。
Java 语言的崇拜者很多,不得不单独拿出来说。Java 语言的爱好者喜欢在语言层面把 Java 和
C++相比,而在企业开发架构方面(特别是 B/S 方面),又拿 Java 和.Net 来做比较,因为 C++缺乏这
方面的应用。Java 语言本身是非常干净的,但是被各种各样的包搞的比较混乱,新手进来容易摸不
着头脑,而且框架太多,又互不兼容,习惯了 Struts 开发方式的人员,很可能在换了一家公司的以
后,虽然 Java 很熟练,但是却不得不又要花很长的时间来研究学习和适应另一种开发框架。
- 2 -Java 通常被认为适合用来开发超大型的 B/S 项目,当然 C#依托.Net 平台和 Visual Studio 这样方便而优秀的开发
工具,也是非常适合用来开发超大型的 B/S 项目。
在 WEB 开发方面还有一个重要的语言不可不提,那就是 PHP。PHP 编程语言主要用
于开发网站和互联网软件,是 IT 公司首选的互联网编程语言。超过 40%的 WEB 程序使用
PHP 来编写,Yahoo、Google、百度、腾讯、新浪、搜狐等各大互联网公司以及各种门户
网站和社区都广泛使用 PHP 技术。PHP 出现的目标就是提供更方便的网站开发的能力,
它的语法跟其它的脚本语言比如 Perl/Python/Ruby 都很接近,而且提供原生的 Mysql 数据
库支持,读写数据库即简单又高效,而且因为 Apache 的良好支持,才使得 LAMP 平台能够与 Java 和.Net 平台相抗
衡,而且成为了小型项目首选的解决方案。
TIOBE 编程语言排行榜
TIOBE 编程语言排行榜是编程语言流行趋势的一个指标,每月更新。这份排行榜排名基于互联网上有经验的程
序员、课程和第三方厂商的数量。排名使用著名的搜索引 擎(诸如 Google、 MSN 、雅虎)以及 Wikipedia 和 YouTube
进行计算。
官方 url:http://www.tiobe.com/
请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写
的代码数量多少。
必须声明,这个榜单本身采集的是英文世界的数据,虽然在反映趋势上有一些参考意义,但与中国的实际情况
不完全符合,而且,这张采样本身也有相当大的局限性。
2011 年 10 月 TIOBE 编程语言排行榜
- 3 -程序员的 7 种武器
看到 china-pup 一段广告程序员的 7 种武器 -〉
正则表达式、编程语言、数据库、算法、软件调试、开发环境、编程思想
真的是很简练的总结,特整理留存。
长生剑: 剑非剑。 “一个人只要懂得利用自己的长处,根本不必用武功也一样能够将人击倒。 ”
袁紫霞的剑就是那绝甜绝美的笑。正则表达式之于程序员,就是一把绝甜绝美的的长生剑。正
则表达式是强大、便捷、高效的文本处理工具。正则表达式本身,加上如同一门袖珍编程语言
的通用模式表示法,赋予使用者描述和分析文本的能力。正如此,正则表达式的运用,不仅能
使他人快速读懂代码,也是让程序更为简单的快速途径。
霸王枪:“江湖上独一无二的一杆枪,枪尖是纯钢,枪杆也是纯钢。它的尖若是刺在人身上,那人
固然必死无疑,就算被枪杆扫中,也得呕血五升。”霸王枪的威力由此可见。而在程序员的江湖里,
编程语言无疑是必备的武器了。编程语言代表了开发人员对计算机本身的理解与对软件开发工作的
执著。同时,建立在编程语言之上的基础也标志着程序员的职业化道路发展到了一个新的阶段。因
此,熟练掌握编程语言,可谓是在江湖里拥有了一把独一无二的“霸王枪”。
碧玉刀: 段玉是个不谙世事的少年侠士,不曾练达人情,却以他的天真和诚实赢得了一帆风顺
的“运气”。武林高手和编程大师都不是速成的,任何一位成功者都经历过艰苦的磨练。对于程
序员来讲,不断的学习软件调试,灵活运用软件调试技术,是最终成为优秀编程人员的根本途
径。正所谓“软件有大美,调试见真功!”
多情环: 与《碧玉刀》中段玉的诚实相比,《多情环》里的萧少英却是城府比海深的卧底,被仇
恨所驱使,一步步地把敌人、也把自己逼向了死亡。数据库之于程序员,好比多情环之于萧少英,
相信很多开发人员在设计数据库时经常遇到数据库死锁的现象。数据库就好比一个城府极深的对
手,一旦放松警惕,将后患无穷。而 SQL 是一种简单但表达能力丰富的访问接口,因此被应用到
RDBMS 成为大部分信息系统的标准数据存储介质。所以对程序员而言,不仅要有良好的调试能力,
更要深刻理解 SQL 数据库。
孔雀翎:孔雀翎是虚构的暗器,但却给了高立无比的信心。“真正的胜利,并不是你用武器争
取的,那一定要用你的信心。无论多可怕的武器,也比不上人的信心。”要成为编程高手,必然
要有必胜的信心,信心的来源是建立在扎实的基本功之上的。而程序员的基本功,无疑就是对“算
法与数据结构”的理解。对算法与数据结构的理解有助于程序员了解语言背后的具体细节,同时,
- 4 -数据结构的定义很大程度上决定了程序的可维护性和可扩展性。因此,算法与数据结构是程序员信心之源。
离别钩: 开发环境对于程序员的作用是不言而喻的。作为朝夕相处的环境,如何选择适合自己的
IDE 就显得尤为重要。古龙笔下的离别钩,因其独特的含义而显得魅力十足。离别钩不是为了分离,
而是为了更好的相聚,体现了浓浓的兄弟之情。同样,对程序员而言,开发环境不仅仅只是列举
代码的工具,开发人员更应对开发环境进行透彻的了解,如同对待朋友般,方能实现人与环境的
完美结合。
拳头:“很少有人知道,拳头也是一种武器,而且是无可替代的武器。”而编程思想也往往被程序
员所忽视,忽略了编程思想这种最有效、最直接、最可靠的武器。编程思想是程序员对软件开发
的理解,对需求问题的分析,对程序开发的总体规划。具备了优秀的编程思想体系,犹如江湖中
的大师,既可见招拆招,亦可无招胜有招。
技术经验
码斗士的修炼之路 -- 如何保持并提升战斗力
那日,我与一友人漫步。他资质过人,少言寡欲, 刚二十出头。
他经常问我应该怎么走程序员这条路。
我不是什么大师,但仗键(盘)游走江湖已有数十载,吃过不少苦头。自以为不敢说到达了洪七公那种级别,但
离江南七怪应该距离不远了。(注:洪七公和江南七怪都是郭靖的师父)
我闭目沉思,悟空(七龙珠版),青铜圣斗士,健次郎(北斗神拳),郭靖(射雕),段誉和乔峰(天龙八部)
等历史著名斗士冲入我的空间,我提指在 iphone 里写下《码斗士的修炼之路》我不是说我做到了这些,只是”路
漫漫其修远兮,吾将上下而求索”, 但与大家共勉:
遇强更强
健次郎和悟空的一大特色就是遇强更强,或者说他们善于从对手/朋友学技术。有些程序员怕公司里增加比自
己强的同事,也不太愿意和别人分享自己的绝活,这其实恰巧断了自己的一条发展之路。
千万不要担心能力强的同事抢了你的饭碗,你的敌意和警惕性不仅让你树敌还减少了你从他那里学到你所需要
的东西。
当可怕的沙鲁出现的时候,小林问悟空:“当比弗利沙更强的敌人出现的时候,你是害怕还是高兴。“ 悟空的
回答是:”两者都有” -- 标准斗士的好强心态! 悟空的另外一个名言就是:“你真的很强, 我很兴奋!”
斗士们在某一个阶段身边会不断的冒出比他强大的,因此他们不一定是生下来就立于最高点。青铜圣斗士开始
连白银圣斗士都比不上,黄金圣斗士基本上都不屑于与在他们过招,但是他们居然一路杀将过来,晋升为*别
的神斗士。
- 5 -逆水行舟
斗士们的大环境永远不变,变的只是故事。不要抱怨微软或谷歌又更新 API 或者开发工具,有新的知识出现,
给更年轻的程序员超过你的机会。你必须面对逆水行舟的事实。
放弃追求单一的公平,对于这种环境斗士们只能不断进步,这就是造就斗士个性的过程。
名师高徒
没有龟仙人和界王神就没有超级赛亚人;没有九指神丐就没有郭大侠。想快速了解好的软件架构?想掌握网站
开发的动态?找到一个专家就至少省你一个月修炼的时间。名师可遇不可求,有几个人好运可以遇到名师呢?像段
誉一样走运的人不多,像乔峰一样不走运的人也不多。
“三人行,必有我师”--多开口,多问 -- 锻炼了你与人交流的能力,对身体也有好处。
自学成才
有一种能力会让你永葆青春--自学的能力。 这一能力可以培养,且应该非常重视这方面能力的培养和不断强化。
没有名师的指引,自学能力就尤为重要了(当然这是建立在有了一定基础之上的) 。所以不要害怕新的事物,尝试
去了解它,通过各种渠道获得信息并自我归纳。
有时我们可以把这种能力称为:“悟性” -- 观察,收集,融会贯通,像健次郎练成无相转身;像悟空练成龟波
气功和舞空术。
宁静致远
淡薄名誉, 简单的生活,专注于自己的修行,宁静以致远 -- 似乎没有什么能够阻止斗士们向上的决心, 他们时
刻保持一种纯真,这一点在乔峰和健次郎身上化成了豪气和超凡的情怀。
青铜圣斗士们对名著的大牛们的敬仰和有时傻乎乎的言论不会让他们以后的光芒减少。 -- 标准斗士的单纯心态!
贝吉塔第一次以超级赛亚人露面时说“我静下来了,完完全全静下来了。”
悟空的纯洁无瑕的心也让他可以毫不费力的宁静下来。
不要轻易为身边花花世界所动,否则你一生追求名利,反而适得其反。
海纳百川
不要给自己画上 Microsoft / Linux , dotnet,Csharp 等栅栏。
学什么?Java? C++? C#? php? -- 其实你可以先找项目,不要太在乎你对哪个公司更有信心。-- 有时三年河东,
三年河西,技术的更新,编程思想的进步会让你眼花缭乱。关键是你要开始学一样,然后尽量的深入。等到你比较
好的掌握一样,你会发现路会越来越宽。
要精通一样,但是不能只精通一样。否则你会处于非常危险的境地,让自己缺少选择。
试试开发一个小的 iphone 程序,或在 android 摸索几天,会让你消除对它们的陌生感。
我不是让你什么都学,而是说不要太在乎门派之争。
当悟空情急之下使出“太阳拳”的时候,救了整个宇宙。
终极的演变就是掌握北冥神功的段誉:引世人之内力而为己用,取百川而汇海。 -- 世上有几位码斗士能一览
众山小呢?
腥风血雨
纵观古今中外著名漫画小说连续剧,哪位斗士在死亡线上走过一遭(否则也没有收视率了)
平静的水面锻炼不了精干的水手,安逸的生活出不了时代的伟人,轻松的*部门里打造不出码斗士。
没有经历过连夜赶工,系统出错救火,维护多年老代码就体会不到代码重用,代码整洁,代码管理和项目架构
的精神。
当别人有不同意见是,你会有自己的笃定,因为你经历过血海的洗礼。
赛亚人的特点之一:死而复活之后,能力暴增;圣斗士们也是在生死边缘不断升级。
不要因为害怕承担责任而将升级的机会放弃掉 -- 现实生活中的码斗士大不了就是被炒鱿鱼(或者被公司保安
追杀?)
- 6 -程序人生
30 岁了,大学老师想走回头路做程序员,大家给点建议
本人 81 年出生,今年 30 岁了,05 年大学本科毕业,专业是计算机科学与技术。我上大学时,挺喜欢计算机专
业,对于编程悟性虽然不是很突出,但是挺能钻研,成绩也属于靠前的,是能被任课老师记住名字那类学生。
毕业之后在一大型软件公司做了程序员,用 J2EE 做 B/S 项目,那一年公司一下招了有四五十个应届本科毕业生,
我在里面是属于为数不多的、那种不用老员工带,一上来就能顶到一线写代码的。当时 2005 年月薪能拿到 2200 元,
在整个河北来看也算还不错吧。部门经理也挺看好我,是他亲自把我面试进来的,后来又把我要到了自己的部门,
现在想想当时如果一直干下去能发展不错。
结果我在公司里干了一年,06 年家里给找了关系,到一所大学里当老师。说是大学,其实就是职业院校,大专
层次的那种。好在是公办院校、有事业编制。当时我已与女友同居,准备谈婚论嫁了,经过一番艰难的抉择与思想
斗争,我还是放弃了程序员的工作,选择了工作稳定的学校。由于那所学校属于文科类院校,计算机系是很边缘与
弱势的系部,每年只招两个班,不到 100 人。我进学校后被分到计算机系,工作是负责全校网站建设与网络维护,
平时也教点计算机专业课。实话实说,我们整个计算机系只有 10 来个老师,大部分都是半路出家,科班出身的包
括我在内只有 3、4 个,真正有实际编程能力和编程工作经验的只有我一个。所以因为我有能力,领导不让我当专
职老师,要我坐办公室,有能力的要做些实际的事情,没能力的都去教课糊弄学生了,中国教育的悲哀啊!!!其
实一开始当老师我也想去教课的,比较轻松,不用早九晚五的坐班,挣钱比坐班的还多。可是谁让我是属于有点能
力的那种呢?事业单位就是能者多劳,但多劳不多得。。。。
其实即便是这样,工作强度也不大,完全和做程序员是两个概念,可以说是十分的轻松。人活得舒坦也就觉得
日子一年年过得快,一眨眼五年就过来了,一眨眼自己就三十岁了。现在的情况是,虽然我还是一个小老师,但手
底下有学生,除了网站大改版,或者更新下后台程序,整整服务器,再就是教教计算机专业课其他基本不用我自己
动手干活。由于领导也是外行,完全不懂编程,除了把上面布置的任务交给我基本不管我,工作进度完全由我自己
说了算,当然我也从来没给领导掉过链子。
说一下收入,刚到学校的时候月薪 2500 多,比当程序员轻松,挣得还多,当时是挺高兴的。后来才发现要命
的是事业单位涨工资忒慢了,五年了我才刚拿到 3000 元。那些刚毕业只有几百元收入的同学现在都超过我了。我
承认,他们有很多是付出了艰辛的努力,我只看到贼吃肉,没看到贼挨打~ 但是 3000 元得收入从河北省的大城市
来看,也是属于低收入者了。
步入 30 岁以后,我突然变得想法很多,30 岁了仍然一事无成,莫名感到焦躁,有时候会杞人忧天,感觉自己
堕落,不上进,对未来没有安全感。这些年靠啃老,现在有房有车有老婆有孩子(还有前妻。。。惭愧 >_<)
昨天突然回来 CSDN,以前的账号已经记不住了,差不多有 5 年没登陆论坛了,,,在长达五年的时间里我没
有遇到任何编程问题,也就是说五年来我的水平没有任何进步。以前上学《程序员》杂志每期必买,现在都不知道
还有没有这杂志了。唉~~~~
现在感到莫名的恐慌,虽然自己在公办院校当老师、有事业编制,但现在事业编也不是铁饭碗,万一哪天事业
单位改革,或者学校招不起生来,自己还不是得下岗啊。靠自己毕业一年的水平,甚至现在还有退步,我拿什么养
家糊口啊!
想到这里就觉得自己不能再混吃等死了,这些年来取得的唯一的进步就是考了一个在职研究生,计算机工程硕
士,其实完全就是为了评职称,没学到什么东西。现在想利用业余时间拿出半年好好补习一下 java 然后重新杀回软
件行业。我的最终想法就是,这个世界上没有什么工作是稳定的,如果想将来生活稳定,不至于沦落到摆地摊或打
杂工,就需要保持自己的知识与能力与时俱进,这样一个公司不行了,你可以很轻松的再找到一份工作。如果再继
- 7 -续呆在学校里估计我的能力就会与社会需求脱节了,逐渐就被社会所淘汰了。在学校里,我属于性格内向型,不太
善于处理复杂的人际关系,尤其是在这种事业单位,我既不会阿谀奉承,也不会趋炎附势,估计这辈子也爬不上去,
就是当个小老师吧。万一有一天学校不行了,我也就玩完了。
再就是这些年也厌倦了学校里同事间的生活交往,业余时间同事之间整天就是拉帮结派吃吃喝喝,今天你请客、
明天我请客,交了一帮酒肉朋友,以前我几乎滴酒不沾,现在能自己一个人喝一箱啤酒,但如果你不参与就等于把
自己孤立了,实属人在江湖身不由己。
总之目前的生活虽然安逸,但是步入 30 岁的我突然就有了危机感,人常说:没有远虑,必有近忧。现在萌生
出走回头路做程序员的想法,但是还没有勇气做最后的决定。
什么时候学习编程都不晚
导读:作者 Jean Hsu 现就职于 Pulse,是一名 Android 工程师。她近日写了一篇文章《It’s Not Too Late to Learn How
to Code》。文中提到了她自己在学习代码的过程中虽然艰辛但却很有收获。她强调,心动不如行动,要将想法实现
化。她还为大家推荐了一个 Stanford 的学习课程,希望对大家能所帮助。现将文章摘译,以下是内容:
编程就如一种超能力。通过它,你可以创造出成千上万的人们可以看到的东西;你可以改变人们的行为方式、思想
方式及与他人交互的方式。这棒极了,但是,我也见过好多人,他们认为这是一种他们力所不能及的能力。我也见
过很多非技术出身的人,他们似乎以为这种超能力只会赋予那些足够幸运的人——他们在很小的时候就拥有了这种
能力。
在高中,我曾学习了两门计算机技术的课程,所以在大学时我才有充分的信心去面对编程。如果在此之前没学过这
些课程,编程可能会成为我大学中的一个噩梦。我最钦佩的就是那些在大学前没有编程经验的同学,他们仍然可以
学的很好。
我的大学以外的几个朋友也和我同样感受。他们希望自己早些认识到编程的重要性,现在还能有多少机会可以打开
“技术”的大门,并且期待着自己能学会代码。这直接的表达出他们对代码的渴望同时他们也认识到现在为时太晚,
他们的年龄在 24,25 左右。
人们很容易认为这为时已晚,因为看到很多人用了大学四年的时间来学习编程。但这四年里我只学习了计算机科学
吗?前两年我一直在寻找主修专业,后两年我陆续学习了八门课程,但其中很多都与以应用程序为中心的编程无直
接关联,当时我认为这些课程都大部分人希望选修的。在大学整整四年里,我只学了一门与应用程序开发有关的课
程。刚开始,我没有 HTML 和 CSS 的实践知识,但是我和其他两位同样没有经验的同学共同努力用 MySQL,PHP 和
HTML/CSS 共同开发一个 Web 应用程序。
人们很容易认为这为时已晚,因为已经有很多技术大牛了。但是,最重要的是要记住每个开始接触编程的人都是一
个初学者,如何才能成为技术大牛,就要肯去开始,肯去钻研。
所以如果你内心想“真希望我已学会了编程”,那为什么不开始学着呢?当你开始学时,请牢记下面几个提醒:
1.它很困难。做一件事,起初可能需要花费更多的时间,但以后会越来越容易。当然,有些人更倾向于编程所需要
的逻辑思维,但我认为大部分情况下,大家并不认为他们为此做好了准备。当然了,让大家相信编程“很困难”以
及普通人一般都“不是绝顶聪明的”,可能会稍稍安慰一下我们的自尊,让我们感到我们是具有高智商精英团队中
的一员。
- 8 -2.在心理上对未来将面临的困难做好准备。我经常会想我是不是受到了什么诅咒,因为我每次尝试新东西(如新的
开发环境、工具、库等)时,总会出错。花了好几年时间,我终于意识到针对各种不同操作系统、软件版本等的说
明文档不是过时,就是很难理解。
3.你确实很喜欢编码吗?不要想它是否太难。想想你是否对它感兴趣?当你花了好几个小时调试了一个程序,最终
它可以按预期地运行时,你会十分兴奋吗?你希望花几个小时去完成一件事吗?这些都是软件吸引我的原因——我
从来不担心我是否能把它开发出来。
有很多好的资源可以帮助你学习编程,但我只坚持 Stanford 的网站上学习相关知识。Stanford 可以提供很多免费的
在线软件课程。(编译/张祺)