Web开发杂谈(1) —— 学习开发的三个层次
由于我们现在的内容已经不仅仅在Web设计这个领域上了,所以新开一个新的系列——“Web开发杂谈”,讨论开发相关的话题。
有不少读者和网友经常地留言,问类似这样问题:“我没有相关基础,我应该学习什么课程?”,或者“我没有相关基础,我能学会某某技术吗?”,“我不是计算机专业的,我能学会编程吗?”。
作为这个系列的第一篇文章,就来谈谈我个人的一些想法,回答这个问题,和读者分享一下。
一、概述
就像刘欢可以算是咱们中国顶尖的男歌手了吧,他可是没上过任何音乐院校。所以上不上大学,以及上什么专业,都不是关键的问题。但是绝不是说,你什么都不学,就可以做技术开发工作。
我要说的是:如果打算做开发工作挣钱养活自己,可以什么学都不上,但是该学的东西都得学,一样也不能少,捷径是没有的,想绕过基础课,直接学习所谓“有用”的东西,是不可能的。
首先,任何技术工作都是需要一些基础的,获取这些基础知识和能力的最通常的方法,是上大学的相关专业。但是中国的教育现状,使得上大学和寻找自己的兴趣,这两件事往往无法统一,所以出现了很多学非所用,和用非所学的情况,这是很无奈的事情。但是需要指出的一点就是,无论要做什么,都是需要一些必须的基础知识,或者说,更重要的是一些基本的思想方法的。
各个职业之间所需要的思想方法和技能是不同的,因此,如果你希望进入一行,就应该先踏下心来,把这一行所需要的基本知识和思想方法掌握,无论你在大学是不是计算机专业,如果想做这一行,就应该(必须)把一些基本的课程掌握。
现在的一个现实情况是,很多朋友希望学习一两本书,就能作很大的事情,能做很牛的事情,这个是不现实的,任何知识和技能体系的建立都是一个综合、按部就班的过程。你要相信一点,大学四年的课程一定不是在浪费时间。除非对于确实天才的人来说,有可能是浪费时间,比如对于比尔盖茨这样的人,不过我相信如果您是这样的人,一定不会在阅读我写的这篇文章了:)
那么,到底应该学一些什么东西呢?那么从我的理解来说,应该有一个比较长远的学习计划,逐步提高。这个计划应该包括三个层次的内容:
第一个层次:大学计算机专业的基础课
这个层次的主要目标,是真正理解计算机内部是怎样运行的,你应该能在200字内,用自己的语言说清计算机的原理,应该理解什么叫寄存器、运算器、存储器?什么叫队列、栈、堆?什么叫递归、迭代?什么叫算法时间复杂度、空间复杂度?什么叫进程、分时、调度?什么叫文法、正则表达式?什么叫数据库设计的范式?什么叫关系、函数、群?
这些东西都不是直接用在你的开发中,但是没有这些基础,你永远无法真正理解什么叫程序。
在以后的文章里,我可以对大学计算机专业比较重要的一些课程,做一些简单的介绍,讲一讲它们的基本内容和特点。事实上我最近从网上找了几所大学的教学大纲,基本上和我十几年前学的课程没有什么变化,这也说明了,这些基础课的重要性和稳定性。
第二个层次:开发必备的工具
在有了上述基础,真正做开发还需要掌握一些主流的开发工具,实际上一个项目需要涉及很多方面,需要用到很多工具,比如说下面是某个网站项目用到的开发工具栈:
- 框架平台: Microsoft ASP.NET 3.5 SP1
- 语言: C#
- 开发环境: Visual Studio 2008 Team Suite
- Web框架: ASP.NET MVC
- 客户端框架: JQuery
- 数据库:SQL Server 2008
- 数据访问层框架: LINQ to SQL
- 源码控制: Subversion
- 源码控制集成: VisualSVN 1.5
上面的开发工具栈是以.NET平台为例的,目前Web开发的主流“三巨头”(.NET、JAVA、PHP),都各自有一套比较完整的开发工具栈,上表中各个项目也都有个各自的工具,比如上面.NET项目用的是C#语言,对应JAVA平台就是JAVA语言;.NET用Visual Studio作为集成开发环境,JAVA则可以使用Eclipse;上面用的Web框架是ASP.NET MVC,JAVA对应的则是Struts;上面项目用的ORM是 LINQ to SQL,而JAVA则有Hibernate对应,等等。
因此,所有开发人员学习的第一个层次课程都是相同的,而第二个层次的内容,则需要先做一个选择,你打算走哪条路线,实际上“三巨头”(.NET、JAVA、PHP)都可以,至少在几年内,都会是主流技术。但是要注意的两点是:
1:选择某一个路线以后,所有相关的工具就都要选配套的了。这就好像玩单反相机的兄弟,一但选择了尼康还是佳能的机身,那么以后很长时间里,你再配各种镜头、配件,就都得跟着机身走了。而且一旦用习惯了,再换就麻烦了,而且你以前积累的所有镜头都不能用了,很麻烦。当然,要换或者同时拥有多家的也是可以的。
2:在摄影社区里,N(尼康)C(佳能)粉丝之间的“口水战”是永远的话题,同样在开发社区里(.NET、JAVA、PHP)的口水大战也是年复一年、日复一日的。其实这是完全没必要的,如果尼康和佳能之间的质量差异能够让普通人都看出来,那早就有一家倒闭了。实际上在“寡头垄断”的行业里,寡头之间的差异是极小的,否则就不会是一个稳定的状态了。如果你学过物理学就知道,这是热力学第二定律“熵增加原理”早就说明了的道理。我们这些普通人,根本不必为这些事儿操心,你就踏踏实实选一个你喜欢的,看着顺眼的,用着顺手的,走下去就可以了。
第三个层次:提高程序质量的修炼
如果基础的原理你都理解了,上面列的一些工具也都掌握了,基本上也应该是一个职业的开发人员了,那么你的目标应该不是仅仅做一个合格的程序员,而应该是做一名优秀的程序员。评价一个人工作是否优秀,标准就是看他的产品质量如何。对于程序员来说,他的产品就是它写出来的程序代码,因此,就要看他的程序质量如何。
在这方面,就有很多方面要不断地修炼,而这种修炼都是长期的,潜移默化地进行着。从方法来说,无非几个:
- 加入一个好的团队,跟着学,比自己摸索当然快得多。
- 勤于动脑,肯与思考,不爱动脑子的人做什么都不可能成功。
- 平常多留心,经常上网学习,网络时代,不会利用这个工具,就等于放着洋枪洋炮不用,非用大刀长矛。
- 善于总结,把一些临时突发的心得体会,变成经过思考的原则,以指导实践。
- 写一些技术博客文章,这个过程既是对自己的总结提高,还可以帮助别人,一举两得。
从具体方面来说,比如如下几点:
- 设计模式的掌握,对于提高代码结构的质量很重要,这也是能否从小兵成成长为指挥员的很重要一步。
- 随着承担的程序规模越来越大,对测试等相关方面的要求会越来越高。
- 对算法的理解,这是个博大精深的方面,值得永远不懈努力。
- 对于直觉的培养,随着经验的积累,要不断提高自己直觉的能力,因为要做出超越别人的东西,依靠的不是常规的思维,而是灵感和直觉。
- 培养快速学习能力,一本大学教材,看三天应该能掌握60%的基本思想方法和内容,而且能迅速找出实际工作需要的部分,并深入理解。
- 总之,既要重视日久天长的长期修炼,也要重视应急的快速反应能力。都是很重要的。


讲得非常好,受益了,谢谢!
很受用,常来了
写得真好,对我很有启发,谢谢。
很受用,思路理解了
写的很好,会常来学习的
很贴切。。。
非常好,非常受用!
很实际!~
祝圣诞快乐,呵呵
老师写得太好了。谢谢
我在08年底都开始关注前沿教室了,来看了,学习了当时网友们评价特别高的《精通CSS+DIV》我也买了。
同时也推荐给了我的朋友和同学们,他们学的好的现在工作都不错。其中是受此书的影响。谢谢。我会一直关注的。
xbotao ,
谢谢您的鼓励!很高兴我们的书能帮上你和你的朋友,web设计、开发是很有前途的,加油吧!
看了前辈的文章。收获很大呀!现在的大学生不能和以前的大学生比了。已经缩水了,现在大学生是毕业了在上培训在找工作呀。有你们这样的网站,我们就可以一边上班一边学习了。
superegoliu ,
你说的对,互联网改变了很多东西,包括我们学习和生活的方式。
博客是个学习的好地方
Sky Woo ,
是啊,回想我自己学ASP.net MVC 、CSS这些东西,都是跟着国外的博客学的,他们的博客写的清清楚楚,一点不比读一本书学的慢。不过国内的技术博客,真是差太多了,好像大家总是很忙,没有时间认认真真地写点什么。
嗯,我在您的博客就学到了不少的东西,技术性的和非技术性的,呵。
看了老师写的文章,真是赏心悦目阿。我现在就是在学php 我还在犹豫中,学什么好呢? 其实看到了老师的文章我真的受益匪浅。希望在看到老师的其他杰作!
chypizi,
不用由于,学到底,就没有问题!
抱歉没有及时回复,我们最近很忙,下半年我们会拿出更多时间增加新内容的,欢迎来交流!
觉得写的这些对于我们大学生很有价值,谢谢了。
bage ,
谢谢您的鼓励!
抱歉没有及时回复,我们最近很忙,下半年我们会拿出更多时间增加新内容的,欢迎来交流!
这是我第一次静下心来看一篇学习性文章,我发现在了自己一直以来的浮躁心理。我是对web开发有一些基础的了解,总是不能深入。看了这篇文章受益匪浅~
诡异di面条,
其实大家都是这样的,做人做事的道理每天在我们的头顶盘旋,但是真正能化为行动的是很不容易的。
所以有人说,优秀是一种习惯。加油!
老师你真牛,每天来看看都有收获,可惜偶这里书店都没有你们的书卖,网上买又太麻烦,这几天再去看看又没有到货你们的书
周星星同学 ,
感谢你的支持和鼓励!
网上买书为什么麻烦?几分钟就搞定了~~~
师傅,可以把第一步的基础课列出来吗?
如果可以推荐看哪些书籍可以学习袄这些基础就最好不过了~ :D
小渔,
没问题,过几天就写。
现在我正在写一些关于编程语言的入门指导,等写完之后,就写一些关于计算机专业基础课的介绍。
老师,你说的太对了!现在的人太过浮躁,一心想一下子全都学会,却总是什么都好像没学到。
以前我也是这样。
我今天开通了我的博客了哦!WP是个好程序,自己DIY的模板,div+css
老师,今天收到了《精通+jquery》正在看呢。如果哪位同学想一起学习,那就联系我吧,一起学习,总比一个人学好。
星空 ,
你的博课模板设计得不错啊,加油!
HI!老师您好,很高兴的告诉大家,我的博客通过了W3C的XHTML和CSS标准认证,现在的博客完全兼容IE6/7/8,Firefox3,opera等浏览器。
目前正在努力学习JS中,谢谢老师鼓励!我会努力的。
维德 ,
不错,继续努力!
+jquery 这本书吗?
如果是这本书您加我Q吧 117571782 备注 前沿星空
小渔,
如果你的CSS和HTML都掌握得差不多了,可以学习一下《精通JS+jQeury》这本书,不过要深入开发领域,还需要很多基础准备,JS作为学习编程的第一门编程语言,不一定容易。
动态语言比较灵活,初学者不太容易掌握,我个人的建议还是用静态语言入门比较好。
就好像学书法,总数要先写好楷书,再写行草的。
师傅
你说的书我已经在看了,真是一本好书。 这本书看了就不知道该看什么书了。
哎。。。。
小渔,
你先看真正完再说吧~~真的能把HTML/CSS/JS/jQeury这几样搞明白,真正能做高水平开发,1万/月的工资,肯定没问题。
后续书单 , 我一定在你看完这本书之前告诉你:)
静下心来学,哈,《精通JS+jQeury》这本我也在看
是+jquery 这本书吗?
如果是这本书您加我Q吧 117571782 备注 前沿星空
心情不再那么的浮躁了,我有点思路了。谢谢
变压器 ,
是啊,千里之行,始于足下!良好的心态 + 正确的方法 + 不断地坚持 = 成功!
最好自己搭一个博客,并试着去维护、修改、优化,包括加入统计代码,并观察自己的一举一动对流量的影响。
anyLiv,
是这样的,没有什么比DIY实际操作更有受过的方法了。
无论做什么,实践都很重要!
可惜都是面对后台开发的。。。。
鹤庭逸 ,
从设计来说,最核心的美术方面的东西,我们并不擅长的。我的网站将会包括除了用美术软件绘制设计图纸外的所有环节。
通过最近做的几个项目,我感觉CSS这个环节还是开发人员做更容易一些。我们的内容也会包括前台的开发,但是单纯的前台开发很难讲什么深入的东西了。
你的QQ能告诉我吗?
想跟你学一些东西。
温老师太忙了
以前加过你的。。只是一直都没说话。
希望继续写下去,深入具体..期待~
vice,
谢谢您支持!我们会继续写的:)敬请期待!