Web开发杂谈(6) ——Web开发的入门建议
前几天,一位网友boovit 留言,提出了关于后台(服务器端程序)开发的一个问题,一直有不少读者有类似的问题,因此,我结合我自己的一点体会,介绍一下。需要指出的是,后端技术和前端技术(HTML/CSS/Javascript)相比,要复杂得多,范围也广得多,因此学起来肯定是需要更多的精力和时间的。boovit网友的问题说到:
“老师:我现在已经开始看有关asp开发后台的书了,我想先把这个搞清楚。老师能不能给我建议一些好的图书或着是网站。还有给我一些学习上的指导,使我更快、更好的掌握后台开发。 谢谢老师了!”
下面我来谈谈体会。
1:必不可少的理论基础
我曾经写的一篇小文章《Web开发杂谈(1) —— 学习开发的三个层次》中,已经谈到了学习开发,应该有三个层次。
今天主要谈的是第二个层次,不过这里先稍微说说第一个层次的问题——大学计算机专业的基础课。 其实这个层次就是靠上学解决的,如果自学,也同样就是买一些教科书,回家苦读,做习题,把几本书的习题都会做了,就算过关了。具体课程各个大学也都是大同小异的。这里也可以列出一些基本的专业基础课,都应该学习一遍的:数据结构、计算机组成原理、汇编语言、数据库基础、操作系统原理、编译原理 。可以看到我列出的这5门课,大都是“原理”,就是在于这是让学生真正了解计算机内部机制的课程。其他一切应用都是在这些原理的基础之上的。因此,想做一名合格的开发人员,至少要把这基本吃透。当然实际上,大学4年的课程远不止这些,如果有兴趣,不妨都学一下,但是上面列的这5们,实在是太基础了,一定是必修的。
如果说再基础一些,就涉及到“数学”的问题了,实际上,计算机专业的课程表中,大致上会有5门左右的数学课:高等数学、线性代数、概率论与数理统计、离散数学、数值分析。可以说,这些课程就是上面的基础课的基础课了。如果是理工科专业的学生,大致上也都学过,如果没学过,最好也下点功夫,数学不仅是专业的基础,而且是思维方式的基础。大多数人,对数学都很头疼,不过还是应该尽可能多学一些的。
好了,因此建议你至少把这10门课程踏踏实实学下来。用武侠小说的说法,这些都是“内功”,有了这些内功,再去学一些“招式”,就容易太多了,可参考《虚竹的人生启示》。用中国文化的说法,叫做“道”与“技”之间的关系。用自然辩证法的说,叫做“科学”与“技术”之间的关系。都一个道理。
2:下面再说说第二个层次——开发必备的工具
有了上面第一个层次的“内功”,而没有一些实际的招数,就好象虚竹空有无涯子70年的内功,却不会使用。因此,还需要掌握一些实际的开发工具,这样就可以做出很多实际的项目了,就好象武林高手可以上阵了。
对于Web开发来说,大致分为前端和后端,前端就是在浏览器上运行的程序,主要是Javascript程序,后端就是在服务器运行的程序,种类就非常多了。目前,Web开发的主流的“三巨头”是.net、Java和PHP。
首先要注意的是,不用过于花精力探讨哪个更好。没有哪一个是最好的,只有最适合你的那一个。至少在5年内,他们都会存在并发展,你只要把任何一个掌握精通,都有绝对的实力去赢得胜利,就像无论那本武侠小说,”少林”和”武当”都是大门派。只要选择一个适合你的就可以了,比如你周围有个PHP高手,你可以随时请教,那你就学PHP就好了。能随时请教,比任何事情都重要,对你的帮助一定是最大的。
下面分几个方面来说一说:
1:过硬地掌握一门编程语言:比如你用 ASP.net ,那就掌握C#或者VB,用PHP,就掌握PHP。语言的掌握,就是靠不断的实践,写够了5万行代码,自然就掌握了。
2:掌握一个开发环境:当然说到开发环境,比如Windows上的Visual Studio是超级强大的,实际上这里说的开发环境,除了能够写程序之外,更重要的是掌握足够的调试经验,这个同样也是需要实践经验磨练的,和上一条一样,写够了足够多的行数,自然你的调试经验就丰富了。
3:过硬的SQL语言基本功:Web开发,绝大多数离不开数据库,所谓Web程序,绝大多数都是根据需要,把一堆数据,按照要求存储到数据库中,在需要的时候,再取出来,并显示的好看一些(怎么存取由后台决定,怎么显示好看,由前后台共同决定),就可以了。因此,小到一个留言簿,大到一个超级大系统,都离不开数据库的支持。因此,SQL语言,一定要搞熟,要能够根据各种稀奇古怪的要求,写出正确的SQL查询语句,这也是个功夫,需要不断积累一些经验。
4:基本的数据库的配置、管理经验:上面第3条说的是能够用SQL语句在程序中访问数据库,此外,还需要一些对数据库的配置、管理经验,理论上说,有一个专业的说法,叫做DBA,数据库管理员,专门做这个,但是作为开发人员,多少也需要了解一些,至少基本的配置管理操作要了解,至少要熟悉一种数据库系统,比如SQL Server、My SQL等。
5:对网络机制的理解:要做Web开发,和以前开发的单机运行的程序相比,一个最大的区别,就是有存在客户端和服务器的分别。用户在浏览器上,按了一个按钮,可能的结果是先在客户端运行了一些Javascript代码,然后又传到服务器上,服务器又开始运行一些代码,然后把一些数据传回到客户端,结果客户端又开始运行另一些Javascript代码,最后才给用会显示出正确的结果。那么这个过程,你就必须要非常清楚,在什么时刻,什么条件下,在哪里,运行了哪个程序的哪行代码。 这和以前在一台计算机上一个程序,从第一行运行到最后一行,是很不一样的。
这里的关键问题是,一定要对HTTP协议,有一定的了解,比如你一定要清楚 “请求”和“响应”分别是怎么回事,服务器和浏览器之间是如何传递数据,并协同工作的。这个不用了解的非常深入,但是至少要在概念上非常清楚,否则无法深入理解Web开发的实质。
6:对“领域问题”有比较好的理解力:所谓“领域问题”,就是你要开发的系统,实现的具体功能是什么,比如你做一个“学生学籍管理系统”,那么就要对学校管理学生的具体方法、制度、规则深入、完整地理解,然后才能设计出一个合适的系统,适合这个需求,理论上来说,这个工作就比较“高级”了,在一个团队中,常常有“系统分析员”或者“系统架构师”的说法,其实也没有那么玄乎了,只是一定要真正能够理解用户的需求,才能做出一个正确的选择。因为客户并不懂技术,就要靠系统分析人员,来理解用户的需求。这一步做不好,结果将会导致整个项目陷入泥潭,后果不堪设想。
7:本质上来说,有了上面前5点,已经完全可以做一名很好的Web开发人员了。第6点已经不仅仅限于技术层面了。我们这里当然主要谈技术,就技术层面来说,还有两点值得一提,对于Web开发特别有用。
下面两点的重点都是提供开发人员的开发效率。都是对于广大战斗在第一线的“码农”来说,基本上没有什么其他成本,唯一的成本就是你的时间,所以要想尽办法提高你的生产效率。用这几天时髦的说法:“哥卖的不是代码,卖的是时间!”
A:Web开发框架。所谓框架,就是根据一些相对通用的、固定的开发模式,设计出的一套程序库,开发人员可以直接利用这些框架提供的程序进行开发,从而大大减少工作量。在上面说的“三巨头”中,各自都有很多不同的框架,适用于不同类型的开发需求。在对Web开发有了一定的经验以后,就可以使用一些框架,来加速你的开发效率,即所谓提高你的“生产力”。比如在.net平台上,最近微软推出的 ASP.net MVC ,就属于这样的一个Web开发框架,实现了MVC模式的开发,当然MVC在JAVA上,和在Ruby on Rails前几年已经有了相应的框架。在这种框架上做开发,具体为什么可以提供生产效率,就不是本文篇幅可以说完的了,有兴趣的读者,可以自己了解一下。
B:数据访问层的开发效率加速。实际上,统计表明,现在大多数Web开发工作,绝大部分工作是围绕着数据库中的数据的增、删、改、查来进行的。这些工作本质上都是通过SQL语言实现的,因此上面的第3点中,特别提到了“过硬的SQL语言”的功夫,对一个开发人员的重要性。然而,最近几年出现了不少数据访问层的开发框架,有一个通用的名称叫做“ORM”即“对象关系映射”框架,它的作用就是通过易于理解的高级语言支持的面向对象的操作方式,避免或减少编写难于理解、管理的SQL语句,从而可以大大提高开发和调试效率。同样,在“三巨头”上,有各自的不同的实现。比如.net上的 Linq To SQL,以及Entity Framwork都是这样的工具,使用他们以后,可以使开发人员不再直接编写,或减少直接编写SQL,可能会少量地降低运行的效率,但是可以大大提升开发效率。因此,对于开发人员来说,这些工具,也是值得关注的。还是那句话:对于程序开发来说,基本上没有什么其他成本,唯一的成本就是你的时间,所以要想尽办法提高你的生产效率。
当然,ORM不是万能的,大多数情况下,如果没有SQL基础,使用ORM还是会有问题,特别是效率问题。这就好像如果你有汇编语言的基础,再写C语言的代码,和不懂汇编的人写出来的,肯定是不一样的。
=====================
最后谈一下关于boovit提到的 ASP还是ASP.net的问题,这个我还是多少有些了解的。从ASP入门也是一个不错的选择,因为ASP和ASP.net相比,更接近于Web的本质,ASP.net(非MVC)的WebForm模式,已经使得他的开发不像是Web开发了,尽管省事,但是封装了太多的细节,使得上手很容易,深入很难。
而如果你使用纯的ASP做一些开发,更容易了解Web的本质机制。有了这个了解之后,再使用更方便的开发方式,比如ASP.net MVC,甚至是 WebForm模式的ASP.net,都会更容易深入到本质层面。特别是是如果从ASP转到 ASP.net MVC,你会发现你的感觉好像扔了自行车,换成了法拉利。
4,457


阅读了几篇文章,受益匪浅,谢谢分享经验。
温老师,你好,我是为了解决碰到的一个制作网页的问题开始,一步一步地到现在了解了关于web开发的这些知识,起先只是想自己做个网站,因为大学有教过dreamweaver,想说应该可以做出来的,结果发现自己需要flash来做一个小动画,在学习flash的时候发现即使我那些命令和基本的工具都会了,但是却找不到思路,当看到别人的flash短片的时候我却不明白别人是怎么做出来的,后来我去网站下载flash的源文件来看,发现基本上好看的效果都是通过代码来实现的,我对于js as xml都不懂,我只简单得自学了html,现在我网站是做出来了,但是传到空间后,用浏览器打开真的太慢,去网上搜说是要优化,我的嵌套表格太多了,我不会css和div,通过近一个星期在这里的看css+div的教程,很有收获。虽然我不是学计算机专业的,目前也没有太多的时间来学习那么多的课程,但是我对web开发真的很感兴趣,我会继续坚持在这里学习的!我目前是想先把css+div完全掌握,然后学习和xml!我也会常来分享我的学习进度,以及和大家交流所碰到的问题!
学完css+div 然后学习和xml
我是个新手,谁能告诉我ASP好学还是PHP好学呢
当然是学ASP更容易入门,把ASP中几个内置对象搞清楚了,学其他的也容易了,因为各种动态网页语言他们用的内置对象是很相似的
温老师:您的《Web开发杂谈》 系列文章写得非常好,不愧为科班出生,对计算机,软件开发如此了解,希望多出一些这方面文章,建议些一些软件行业的文章
wuxianglin ,
谢谢您的鼓励!您过奖了!
我会根据自己的一些体会,写一写,和大家分享,欢迎您常来这里交流!
我想学习PHP,但是之前没有任何基础,想先买本书学习,能推荐一下吗。
LAONB ,
抱歉啊,我对PHP也不是很熟悉~~~
谢谢老师的文章,我会继续努力的!
boovit,
加油!欢迎常来这里交流!
好文章,比较系统全面的说明Web开发入门时应掌握的知道和选择方向,对初学者有很好的指引。
大学时的“高等数学”、“线性代数”等课程几乎没上过几节课 -_# 。。。
青色 ,
是,这些课程都很枯燥,学了没有实际的直接用途。
我认为这是我们的教育体制问题,其实如果安排的好的话,是可以让学生知道这些东西的作用的,但是我们的老师很少提及这些,所以学生一般都没有兴趣。
老大,说的太有理了。。。。。
没有好的老师引导我们。都是等到用的时候后悔了。唉!
vikewe ,
关键还是靠自己,现在和以前完全不一样了,有了互联网,要找什么都可以找到,自己学完全没问题了。
加油!
我也是 以前老师讲这些课程的时候我压根不知道要用到。。。。。所以。。。和你一样没去上
米奇 ,
其实,如果老师比较用心的话,是可以让学生看到直接的用途的,比如线性代数,矩阵的运算,如果和一些计算机图形的算法结合起来,是可以看到直接用途的。
不过大多数老师都不会这么讲。
一开始我也这么认为教导方面的问题,后来我就不这么认为了,我完全认为是自己的无知。
米奇 ,
老师也是有关系的,当然主要还是靠自己了。
是啊是啊,有些东西就是这样:不知道它有什么用就不会用心去学,知道了它有用自己都会自觉去学!
强大,还是老老实实一步一步向前进,至于那10本基础 也的好好学!!!
广告一下!!
css++jquery+php+c#技术群
群号:86383691
小渔,
加油,说起来容易,做起来难啊,这些课程都很枯燥啊,学这些课程,比学些ASP/PHP这些难多了~~~~
希望我的回复没有打击你的信息!呵呵,要真正他下心来学哦!
好的,我会用心一点一点看下去的。。
也不是 什么事情简单呢,卖菜 还有会卖和不会卖的。
事事都得下功夫。。。。
既然喜欢 就去做吧! Go Go Go!
小渔,
道理说起来都很容易,做起来就要靠毅力了。加油!
又座到沙发了,copy下来慢慢看.
keelii ,
哈,欢迎交流啊,我经常去你的blog学习!
温老师!你好.想请教个问题:
我目前正在学习.我想知道在实际应用中是不是需要把JS学得很深呢.或者是能做一些特效和基本的应用就行?做前端的话主要精力得放在哪些地方?谢谢!
keelii ,
我觉得掌握什么技术,以及要掌握到什么程度,关键在于你打算用它来做什么。
如果你就是打算做Web开发,做一般的网站,JS也未必要搞的太深,如果打算做一些基础性的工作,比如要开发一个底层的JS框架,那就要花大力气深入研究了。
你掌握的技术的深度和广度,二者之间要有个平衡,进进退退之间的拿捏是很重要的。其实做任何事情大都如此,无非是“多多少少”四个字嘛。
多多少少,呵呵。。。。。:D
呵呵.谢谢老师指点哦.有管怎样尽心学就成^!^