【转载】学习开发的三个层次

     在网上查找学习JavaScript的视频教程时,发现一个不错的网站,作者还就web开发写了很多令人读来颇感受益的文章,先转帖一篇,全部文章可查看原文出处:http://learning.artech.cn/category/overview/web-dev


     由于我们现在的内容已经不仅仅在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%的基本思想方法和内容,而且能迅速找出实际工作需要的部分,并深入理解。
  • 总之,既要重视日久天长的长期修炼,也要重视应急的快速反应能力。都是很重要的。

5,108


posted @ 2010-09-17 16:39 ljhero 阅读(...) 评论(...) 编辑 收藏