在刚刚接触计算机的时候,曾参与过,也获得过所谓“奥林匹克计算机竞赛”的奖。不过,我始终对于这种竞赛感到极大的反感。原因何在?
1. 所学皆过时。
小学所学的,是 Logo(我自己汉化过)。好一些的,是 PC Logo,这是 Windows 3.1 时代的产物;机器不好的,便以 DOS Logo 4 充数。它很显然是面向过程的编程语言,同时极端不稳定,在“大型程序”(也不过 13k 左右)就会出现溢出错误。同时,数组支持不良,并与 Visual Basic Script 一样,没有类型分别。即使到了初中,学习 Pascal,依旧是相当的过时。不说作为 Object Pascal 的 Delphi 已经渐趋式微,其本身的面向过程思想已经过时,易给初学者以误导。
2. 所学皆无用。
不论 Logo 或是 Pascal,在大型的开发应用中都不可能见到其身影。所学的理论知识,又有多少有益于日后实际的开发?到这批人走上社会,就会发现,所学都已经无用了。
诚然,当今学校的资金无法支撑诸如 .Net, Java 的教学。但是,如果所教,所学都已(或即将)过时,那么再学习,无非是浪费时间罢了。
欢迎各位对此 Blog 发表各类评论;但绝不希望出现漫骂乃至于人身攻击的现象。如果我的思想是错误的,欢迎指正。若 Dudu 不同意置于首页,我将立即移开。
posted @ 2007-04-13 19:13
随风流月 阅读(4230)
评论(159) 编辑 收藏 网摘 所属分类:
D 无关技术
发表评论
后生可畏阿:) 我觉得你可以这么理解,其实中国的教育是普及化教育,它针对的授众是普通人,而不是天才。他们鼓励一些自学成才的人,但不等于需要把一些课程,如.net,Java普及化,因为不是每个人有这种接受能力的。
其实等你读了大学就明白了,越到后来,越讲究一种自学能力,这很重要!老师的课程通常只能教会你20%的东西,而且如今的老师素质都不怎么地,很少能够遇到负责人且有水平的好老师,所以不建议太依靠老师的力量,更多地应该依靠自己的力量和天赋。
不过不管怎么说,你起步这么早肯定会有成就的,很期待:) 我是84年的,算起来正好比你大十岁
愿意的话加我msn: tonyqus@163.com
观念的差别,有人做了思想家,有人却做了实业家。从上面博主的言论来看,你似乎是一个倾向于使用的人。作为一个学生,而且是一个小学生,你不妨随心一点,选择与自身特征相符的环境,并促成自身发展,如果条件许可的话。
补充一下,基础是最重要的,尤其在这个万变的社会里,能以不变应万变的是最基础的东西。然而,作为一个十来岁的(小)朋友,享受乐趣并从中积累知识和经验应该是最重要的,我认为。
#104楼[
楼主]2007-04-14 08:30 |
@Cat Chen
我三年级就开始学 Logo 了,学到后面,自己也造了几个游戏。
不过接触 .Net 后,就彻底放弃对奥赛的学习了,因为这真的是“简单问题复杂化”,并且当下的时间也绝不容许。
@Tony Qu
我现在的 .Net 技术完全是自学成才,感谢上帝。
@Allen Lee
我现在初一,小学毕业了 :-)
乐趣都快谈不上了,积累倒是有,已经沉淀了一个小型的 Library...
@kiler
我不反对学实用的东西,不过……
我拿另外一个事情来比喻吧,一个本硕都读计算机的学生,和一个本科读数学硕士读计算机的学生,你觉得哪个更有发展潜力?通常的说法是,学数学就如修炼内功,虽然不教会你任何招式,但是假如你内功深厚的话随时要学新的招式都很容易领会。反而如果你只有招式而没有内功的话,花样再多也无法跟别人拼啊。
年轻人的话,我也见过极优秀的coder,总是能够用高级语言很快地完成你交给他的任务,有个人能够利用一个学期的课余时间完成整套的自助建站系统(包括子域名分配、空间分配、功能模块自动安装等)。不过在做这些事情的时候,对你的数据结构及算法修炼是没什么帮助的,你做再多能够熟悉的也就是语言和框架。然而如果反过来,假如你有良好的基础,在做coding的时候就能为你带来相当的效率提升。
@随风流月
“简单问题复杂化”,呵呵……那么给你一个NP-Complete或者NP-Hard的问题让你用.NET来解决,难道就能简单化吗?.NET只是简化一些常见Windows/Web编程所需的重复劳动,最多也就是眼睛和手指上的劳动,但是不能简化真正的智力劳动。
如果你能够说.NET算是自学成才,那么你能否说出你使用.NET那么久所体会到的设计思想呢?你在设计你的library时又是否贯穿了什么思想呢?
我个人认为,是否有深度的学习了一个像.NET Framework这样还能勉强称作“体系”的东西,关键就是你是否理解到它的设计思想。体系设计的核心就是trade off(权衡),因此你是否能够理解为什么设计者在A与B的权衡中选择A占多少B占多少是很重要的。而且这也是designer与coder的区别,coder的目标只是通过代码解决面前的一个问题,如果一条路走不通就试一下另一条,不需要注重全局的视野和思考。
#107楼[
楼主]2007-04-14 09:01 |
@Cat Chen
一个学期的课余时间?
Soobb 的迫在眉睫的改版也就这些时间。
不过,我承认,基础还是相当重要的。
#108楼[
楼主]2007-04-14 09:04 |
@Cat Chen
如果你把这些问题用 Logo 去解决,你就明白会多复杂了。
虽然我自己试图改善其功能,乃至于支持多线程处理等。
关于设计思想,我努力地学习;不过一年多些的开发时间,很难体会到太多。
只能说,模仿,改进,再创新。
#109楼[
楼主]2007-04-14 09:05 |
@Cat Chen
.Net 的设计思想,很明显的 OOP。
我本人的目标,很大程度上是减轻劳动,乃至于将劳动交由电脑负责。
我认为,电脑是为人服务的,而不是令人劳心费神的。
@Cat Chen
.NET只是简化一些常见Windows/Web编程所需的重复劳动,最多也就是眼睛和手指上的劳动,但是不能简化真正的智力劳动。
.NET很简单是吧,ok,那你做一个国产的castle,spring,hibernate,lucene看看。在你眼中用。net开发就是调调api,拖拖控件的简单事情吗。
顺便说一句通过实践一样的可以提高自己的能力,很多企业家从来没有系统的学习过管理方面的知识,但是他们一样的可以管好自己的企业,做开发也是一样的,你也可以在不断的实践中提高自己,当然我不否定学习理论知识的重要性,理论知识可以在实践过程按照需要慢慢的学习,只有通过实践才能知道自己需要学什么,自己闷着头研究那些理论有什么用。
#111楼[
楼主]2007-04-14 09:39 |
@kiler
较为同意你的观点。
实际上,与其纯粹的研究,不如侧重于商业角度。
为了研究而研究,就成了人为电脑服务了。
我想从小学开始重新学了,还亏的我是大学数学专业破本科的
.net很简单吗?
.net可以把代码书写得很简捷,但绝对不是简单。
.net实在是世界上最简单又强大的语言,但却不适合lz这个年龄学习啊!学好.net你以后可能是背靠在微软平台上的一个开发高手,但是如果你现在专心计算机底层,那也许你就是中国新计算机语言的希望!
#116楼[
楼主]2007-04-14 11:16 |
@在北京的湖南人
底层我不感兴趣。
语言无国界。
认识肤浅?我可不想成为纯粹的研究者。
#117楼[
楼主]2007-04-14 11:16 |
@A.Z
是的,不很简单。
但是,较之其他,还是很好的。
我初三才开始接触电脑,大学才开始真正接触编程。。。看到楼主,真觉得惭愧
为什么要用net。还不如Java呢。既能满足竞赛还能搞搞乱七八糟的小东西。ACM可以用Java的。
我大学才接触电脑。楼主太幸福了,好好珍惜,学好数学和算法是一切的根本。工具和语言都不重要。
#121楼[
楼主]2007-04-14 14:01 |
@空明流转
.Net 和 Java 的优劣争论很多,很难分出高低。
@木野狐
学好数学... ...
感谢建议!
面向过程思想已经过时?第一次听说,可能只是对楼主你来说用不上或是你没兴趣而已了,它可没有过时.
@空明流转
“还不如Java呢。既能满足竞赛还能搞搞乱七八糟的小东西。”这个.NET不行吗?
@随风流月
并不是说纯粹的研究者就不浮浅,或者非研究者就必然浮浅。
另外.NET Framework的设计思想,不会是“OOP”,和设计思想差太远了。.NET Framework的设计思想不能一句话说清,说实话我也不知道该怎么说。其实你应该发现,.NET Framework中是存在“组件”概念的,其实还有Application Modol的划分,组件与组件之前,类与类之间的设计都是经过精心设计的。(狭义上)面向对象……差太远了,狭义上的OOP只是一个编程方式而已,远还没有达到“思想”的境界……
如果要我建议,还是建议您在初中、高中、乃至大学本科阶段还是参加一些竞赛之类的东西。有了这些,您不用担心在竞争中会输给那些一直在“应用”的开发人员。都是“追”的回来的,而且,我不觉得您注重的竞赛就会在别的地方落后,赫赫。
@Jeffrey Zhao
ACM的参赛语言好像没有C#或者VB的选项。
对于楼主,实在不知道该怎么说,很多人都给出了一些建议和意见。但是焉知这些东西会不会扼杀一个未来的商业天才?又焉知那些同意的意见会不会扼杀一位伟大的科学家?
13岁,实在又太多种可能,太多的未知。其实作何选择,存乎一念之间。只有小朋友自己去把握了。只需要记住一句话即可:不要平庸。
Sign,13岁。13岁,我还没见过键盘。
互联网改变了人类的生活。
看来作者并不明白信息学竞赛的目的和重点。信息学竞赛的侧重点是算法,假如一个人不熟悉算法,我不知道编程对于他是什么东西。
@空明流转
ACM里面主要用的还是C或者C++。java也用到一些,主要是用来解决一些高精度的问题。其实java和c#在实现算法上根本没什么差别,唯熟手尔。现在世界算法竞赛的第一高手petr就是用C#的。
LZ是棵好喵喵啊.有自己的想法没错,支持你!
其实我觉得能有"自己"的想法就是一件非常好的事了,可能偏激也可能片面,比人云亦云诨诨甍甍好太多了.
LZ能有这样的思考和判断,这种"自我意识"能在年轻的时候就具备,是极好的事啊.
一点建议:
坚持自己决定好东西,但做决定前仔细耐心听听别人的意见和想法.为自己的学习建筑与一个持久健康的知识体系和学习习惯,不要随心所欲见猎心喜,不要把自己的学习兴趣和知识能力建筑在不稳定和不持久的灵感和冲动之上.
#130楼[
楼主]2007-04-14 20:53 |
@楼上诸位
谢谢你们的建议。
@Jeffrey Zhao
是的,我的理解有些偏差。
.Net 的组件类非常精巧。
无用的知识才是最有用的。
你学数学有什么用,难道在超市里买菜需要用吗?现在都有自动收银机了,根本不需要人算账。
你学历史有什么用,都是些死了几百年的人了。
知识分三个层次:道——法——术。
知识不仅仅意味着能力,lz只看到在这一点。知识还可以转化成一个人的智力和性格、修养,lz还需要体会。
或许楼主在学校里的“奥赛”学习班与众不同吧,Logo这个东西我重来也没有听说过。我们这部在学“奥赛”的时候,都以pascal作为基础。虽然现在看来他是面向过程的,但是我们学习的时候,学习的不仅仅是一个语言,而是一种思考方法。在N年以前的名言
程序=算法+数据结构
至今还是有效的。不论我们是在“奥赛”学习班,还是自己自学,语言都不是最主要的,最主要的还是 算法 和 数据结构。
希望楼主能正确了解到这点,虽然C#能给程序员快速开发,但是当一个项目大到一定程度后,如果没有算法基础,你会发现越来越难以开发下去。所以,如果你的“奥赛”学习班里所讲关算法和数据结构的内容(解算法题),我还是建议你去上,这对你还是有很大帮助。但是如果在学习班里仅仅只是交你如何使用这门语言,那还是自己回家拿本算法书,有空泡泡cnblog好了。
@kiler
我承认这些框架是纯理论开发不出来的,工程学的东西,就是必须通过大量的实践积累经验从而改善设计。不过,你觉得开发一个这样的框架,开发人员是否牢固掌握数据结构与算法,对于开发效率以及框架的最终质量会有多大影响?
虽然掌握.NET也能让你广阔的视野,然而没有良好的基础那将成为你的盲点,而这个盲点可能在某个关键事情上就显得致命。
@Jeffrey Zhao
赞成。就如我说本科读数学是修炼内功一样,如果研究生转读计算机并且同样刻苦的话,肯定能超过那些本科读计算机的。中学和大学搞搞竞赛是有好处的,日后你想把实用开发技术追回来的话非常容易。
@yahle
小学的比赛可以选L/B,大多数学校用Logo。中学的比赛可以选B/P/C,大多数学校用Pascal。ACM可以选P/C/J,大多数学校用C++。
@eBay
我并不是说ACM可以使用C#,我的意思是C#也做的到,这不能说明语言本身任何问题,这只是种选择。:)
其实我觉得楼主难得的是虽然有点年轻气盛,但是当别人提出不同意见的时候还是会客观分析。
就楼主提出的问题我的见解是:你喜欢学习和参赛这个过程吗?其实学不一定要致用的。做自己喜欢做的事才是成功的最佳路径吧。
13岁...惭愧...
#138楼[
楼主]2007-04-15 10:16 |
@kklc
是的,学可以不致用...
但是,我需要致用的学...
年轻人,说话总是有点冲,请原谅。
@Cat Chen
我倒是喜欢 Basic,VB6/VB8 用惯了。
@yahle
仅仅教语言...
教 Logo,我说的是小学...
具体我再问一下我朋友。
计算机奥林匹克竞赛 不是一般的好玩啊
LZ 没觉得它好玩么?
#140楼[
楼主]2007-04-15 12:15 |
@我
好玩......
在六年级,我打了一个学期的 Heroes 3,就在奥赛班里......
计算机科学,和实际的编程开发是两回事
计算机奥林匹克,实际上是针对计算机科学而言
换句话说,计算机科学可以说是更接近数学而非实际的开发
我来顶这第100贴:
牢固基础,把握机会,成就大事业!
@shootingstars
呵呵,不好意思,回复完才看到博主才13岁,佩服佩服。
不过我同时还是建议博主多看看计算机原理,汇编语言以及数据结构一类的基础,对你的以后的学习帮助会更大。
==========================================
赞同
#146楼[
楼主]2007-04-16 13:09 |
@okiji
确实只有 13 岁。
可以看看我的照片。
13岁。那时我在痴迷篮球。...惭愧...上了大学才开始接触电脑。
"有自己想法才是进步"这句话在一段时间是我QQ上的标题。
LZ有自己的想法这是件好事。但学校学的思想、基础是很重要的。现在你就去学.net未必是件好事。建议LZ学好数学、算法。
#149楼[
楼主]2007-04-16 19:50 |
@棠棠dotNet
不是现在就去学....
前年就从 ASP 迁移了....
并且现在正在做一个项目....
楼主好牛啊
其实,自己高兴学什么就学什么。
生活中不一定只有电脑的。
什么算法什么商业模式,不是你目前考虑的问题。
#151楼[
楼主]2007-04-25 12:55 |
@beyond923
关键在于,我必须考虑这些...
技术不分年龄,没什么牛不牛的!
建议楼主多学一些基础的东西,比如Linux系统,C,C++,数据结构,算法什么的。。
高级语言和商业程序会把你带到另外一个方向。
其实自己的兴趣最为重要。
学编程是学思想,不是学语言!!!!!!!!是否会编程在于是否掌握了这种思想(用计算机解决问题的能力),学了最高级的语言又有什么用,只会编写计算器程序,有用吗?另外,好象现在讲的是小学生,你拿VC去跟他讲,他更不明.我就是小学计算机教师,现在正教的也是LOGO语言,虽然我对学习LOGO也是有意见,它不够灵活,但用来教算法或编程思想等也是不错的(最好是Basic),而且简单便于小学生理解(注意是小学生),我看版主这样说话,绝对不是小学生了.
#155楼[
楼主]2007-05-23 18:17 |
@小学教师
初中学生。
高级语言只能编写计算器?
教思想?我学了三年,一点没有。
Logo 可以艰难的完成一些高级任务。
比如多线程运作,或者 MCI。
这些都是我自己发掘出来的。
博主:
还是觉得你的观点偏激了一点点
若你觉得“所学皆过时”,那么你可以与时俱进,无论学什么,终将会过时的,不断学习就好了。如果你很早发现所学的语言已经过时了,那么你不如用其它语言实现算法就是了。你的c应该是很牛的吧。
“所学皆无用”本身就是矛盾的,你不学,又怎知无用,既知无用,那么你就已经明白了什么是有用,还是有收获的。凭心问,你学了这么多,你的同龄人几个比得上你,难道你学的都是无用的东西?岂非笑话。
成长的过程总是在不断进步的,不用盲目或急躁。
年青时总是喜欢冲动,说话也是一样,且不愿服输。三思而后言是不错的。
说点其它的。很偶然地看到你的帖子的,同很多其它人一样惊诧于你的天赋,当然也要忍不住佩服一下,同时也有很大羡慕的成分。之所以羡慕,是因为你有机会这么早就可以接触喜欢的程序,这是时代的机遇,而我们老去的一代就没有这个机会了。你是幸福的。
我开始接触程序时年龄是你现在的1.5倍多一点,而且是fortran77,你不会觉得是老掉牙了吧,我后来觉得也是,所以就又学了fortran95(见笑,还是fortran,不过它很彪悍),同时小小地了解了一下java,c++,c#之流。现在我的年龄是你的2倍要多一点点,不过水平比你要差很多,汗颜。不过仍然进阶中,活到老学到老嘛。我不是计算机专业的,也过了学习的年龄,爱好而已。
静下心来,好好学习,前途无量,加油吧。
我的邮箱是vqimwr@163.com,可以交个朋友,无聊的话可以来信聊一聊。
数学才是编程的根本, 数学让你知道怎么解决问题, 编程只是进一步用程序来实现你这个思路的过程.
当然很多问题和数学一点关系也没有, 这种开发是属于非常低端的编码工作, 一个掌握语言规则的人,都能轻易去做. 比如调用系统给你的功能, 写一些简单的判断逻辑. 这种工作不应该花废太多的心机, 但是也不可以不去学习, 因为学了会给你一个解决问题的工作前台, 要通过这个前台来展现算法结果. 比如界面, 输入输出IO, 等等这些应该作为一种辅助工具. 实际上这些东西也是发展最快的, 自动化程度最高的, 只有解决具体问题 核心算法, 系统才难以代劳. 今天,你学习了一个什么什么语言, 可以快捷实现很酷的界面, 第二天人家推出一个设计工具, 你不用写一句代码就做到同样的效果.
选择c#是不错的, 因为c#就是一个好用的工具. 但不必要将c#各方面都弄懂, 去专注c#自身或者.net, 而应该"用他"来学习算法,去解决问题,这才是重心.
奥林匹克有点讨厌的地方, 就是很多IQ题, 练你IQ ,严格的说, 并不是一个系统的学习过程, 而是一个game. 但是你看一下实际的算法书和数学书,都是很系统的, 是直接对你往后开发程序,解决问题有指导意义的(要多看一些用数学解决具体问题的方法,也就是俗话所说的应用题).
我认为学习算法最好的语言是c, 没有太多的高级特性, 简简单单.
比赛也是一种发觉高手的途径
很多有潜力搞研究的人员
都是通过比赛发掘的
我认为在学习就是学习编程的思想。实用的东西在公司学,先进,流行的东西在网络上自己学。。
就如同web标准设计这个东西,学校是不可能教的,因为牵扯的东西很多。学校一门课很难教那么多东西。
我根本反对,楼主这样的天才型选手跟着微软的.NET转,应该学习操作系统理论,
钻研.Net, 你来得及吗,微软每年都会推出一大坨的概念让你消化
#162楼[
楼主]2007-06-19 18:07 |
@Shark Xu
操作系统理论没有意义。你再实现一个操作系统?
概念是可以消化得了的,也不怕消化不良,一笑。
我倒不觉得 1. 所学皆过时。2. 所学皆无用。
我也获得过信息学(计算机)奥林匹克竞赛的将,苹果机器上敲过Basic,286上搞过Turbo Pascal.上大学后来看别人都用什么VC或VB问有没有VP,别人告诉我可以用Delphi。一是打下了坚实的面向结构的程序设计基础,再面向对象的语言的一个函数中还是结构化的(顺序了,选择了,循环了)。二是打下基本的算法基础,这是一直有用的。至于现在需要的一些基本功可以再此基础上继续学习嘛,面向结构与面向对象也有一个清晰的对比。
当然我也反对过分的追求竞赛成绩,去西安参加ACM的时候在宾馆里听一个学校的同学吹,我们校队儿都练习了800多道题了,怎么怎么地。这时另一个学校的领队说,800多道题算什么,没到4位数就不要在这儿吹~
#164楼[
楼主]2007-07-06 09:52 |
@Boler Guo
Select Case 可以通过多态解决,不过微型的,不可扩展的就不必了。
这种奖我也拿过,后来觉得没有什么意义,就不去参加了。
……媛晗爷爷啊,你这话光对我说就行啦,还在这发表……
lz显然没有体会到oi的精髓...虽然我也没有体会到= =
oi里的东西很基础么?或许并不基础,一个合格的oi,并不是指那些随随便便学了n年混了个noip一等然后报送大学的人,这种人根本称不上oier,而是说那些真正在学习,为了noi,ioi在拼搏的oier,而这群oier,他们所要掌握的知识,比如算法,数据结构,还有思想,甚至已经超越了绝大部分重点高校的研究生,从图论,数论,排列组合,搜索到计算几何,动态规划,平衡树,网络流,匹配算法等等,最重要的是,oier不仅要学会,最重要的是,会在不同的题目中使用他们,而这些东西,你可以随便找一个计算机系的毕业生问问,有几个人,学会了呢,跟不要谈掌握了?
再说,你说oi所学的东西很过时。
不知道你参加过百度之星这个比赛没有,如果没有,你可以到网上查一查,你就会了解到,向baidu,google,ibm这些站在计算机世界中最高端的企业,他们是如何挑选人才的——依然是算法,而这个,也正是oi所培养的方向(ps:参见googel中国区总裁,李开复博士的文章:算法的力量)
你说你只有13岁,估计还在初中或者小学,只有到了高中,(某些省份的某些学校初中也可以)你才会明白oi是什么,并不是你现在所认为的logo,也不是win3.x。
再说面向过程,实际上,oi并不是提倡面向过程编程方式,因为oier根本不需要了解什么是面向过程,什么是面向对象,因为oi本身是一个设计算法的的游戏,而算法,则可以用任何方式去描述,去实现,根本不用区分他面向什么,而这,也是为什么oi会选用dos下的pascal和c/c++(现在已经改在win平台下的lazrus和devc++了)而不去选择更好的平台像.net一类的原因了,因为根本没有这个必要。
oi所培养的,并不是只会写臃肿的代码甚至连复杂度都不会分析的普通程序员,它所培养的,是行走在计算机科学中的人,是会分析问题,解决问题,提出问题的人,是搞科学的人,而并不只是程序员那么简单。
#167楼[
楼主]2007-08-01 10:58 |
@macaroniz
oier 有意义吗?单纯的研究有意义吗?为了科学而科学,又有意义吗?
Win3.x 我装过,很好玩,一笑。
仅仅拥有理论知识,或者是科学技能,很难生存。我也不希望,不可能成为这样的人。当然,每个人都有自己发展的路线。
#168楼[
楼主]2007-08-01 10:59 |
@macaroniz
再有一点,真想玩算法,函数式语言吧。或者 Javascript,虽然速度慢一点,灵活性很高。
@随风流月
程序设计的本质是什么?是应用,计算机科学本身也是为了应用而诞生的,他的相关理论,也是与实际应用紧密相连的,这也是为什么算法本身需要考虑时空复杂度的原因。
没有错,我见过许多程序员,都对我说:算法有什么用?我写程序几乎不需要很难的算法,而这些程序员,几乎都是在某些小公司里工作,但即使是这些人,也依然需要用到简单的数据结构,还有搜索等基本的算法。但是我也见过几个程序员:他们告诉我,算法很重要,比会不会些程序更重要,而这几个程序员,一个是在甲骨文,一个是在googel(我师哥),还有几个在国内做杀毒。
从另一个角度,现在很多软件公司都在招聘数学系的毕业生,为什么呢?他们根本不会写程序啊,也就是个2级的水准,但为什么要数学系的不要计算机系的呢?
很简单,数学和计算机本身是不分家的,而数学系毕业的学生,比绝大部分计算机系的理论知识要强,算法设计能力高,当然造成这种原因的根本问题还是在于现在的大学生根本搞不清什么叫程序设计(依然推荐李开复博士的那篇:算法的力量)
ps:还是请你先了解下算法的定义,算法本身和语言是不相干的,他只是解决实际问题的一种方法而已。
pps:现在所有的大学计算机专业的学生,有哪个不开算法、数据结构?
#170楼[
楼主]2007-08-01 17:02 |
@macaroniz
是的,我没有明确地反对算法。不需要算法的程序也不等同于小程序。因为所谓不需要算法,后台还是隐含着极多的工作,例如 List(Of T),Dictionary(Of TKey, TValue)。
ps:现在大学计算机专业的学生,基本上泛滥了。。。
pps:不是每个语言都能实现特定算法的,例如 Logo。不过这个东西太幼稚了,不提也罢。
一个程序的好坏体现在什么地方呢?很多方面,但是很重要的一点,就是效率。
如何提高效率呢?采用正确的数据结构和算法,这点我认为是毋庸置疑的(如果抛开编译器的执行效率),而信息学竞赛本身就是在考察这种能力,对算法和数据结构以及数学知识的掌握与应用。
#172楼[
楼主]2007-08-01 19:38 |
@macaroniz
信息学竞赛考察的是运算效率?我遇到的几个,或许是特例吧,都没有。你实现了一个功能,没有错误,就一切ok。
当然,正确的数据结构和算法是必要的,但是 .Net Framework Library 已经封装了很多。所以看上去,似乎 CLR 下都没有算法了?实际上都在应用算法。并且,我也认为算法不是“最”重要的。
这个帖子快变成论坛了 :-) 有空留下一个 MSN 吧。
#173楼[
楼主]2007-08-01 19:39 |
@macaroniz
这恐怕和我长期以来在 Web Form 下开发有关吧。举个例子,ASPX 中的 HTML 开发,和算法就一点也搭不上边,Javascript 又只做小型效果用。一般情况下,项目尽可能避免 Javascript,而采用更 SEO 的 CSS。
@随风流月
信息学竞赛中常常把一道题分成几个等级,而这些等级的地体现就是处理数据的规模,一个最简单的例子:要求你在1秒内把给定的n个数字排序,看上去是很简单的一道题,但是如果把n的范围扩大到100000,如果不采用“特殊”的方法,一台p4 3.0+512mb内存的机器就没有办法在一秒钟的时间内将结果计算出来,当然,真正的竞赛中不可能出这么简单的题目。
网页制作本身需不需要算法我不是很清楚,但是图象处理,压缩,音频处理,大规模数据处理,人工智能等技术都是需要有深厚的算法功底和数学功底的。
具体到某个软件上说,为什么winrar的压缩效果要比winzip好呢?原因就是两个软件采用的压缩算法不一样,再比如大家经常用的媒体流格式:rmvb,他为什么可以将一个数百mb的avi文件压缩成一个只有100mb不到的文件,而图像质量却比其他的格式高呢?这也是算法的问题。类似的情况几乎涉及到你所用的所有软件,比如Dreamweave,flash,frontpage,ps,word,甚至你用的输入法等等
ps:没有msn...qq倒是有个:228181209
#175楼[
楼主]2007-08-02 08:02 |
@macaroniz
本身是不需要的。仅从 XHtml+CSS 而言,<html></html> 和算法无关,但是浏览器方面应该需要渲染的算法。
1秒内排序,这和编译器速度有关,也就是说 C 在这个时候,超过 .Net。当然,SortedList 可以,但是不知道内部实现如何,效率如何。话说回来,如果叫 Logo 完成这道题,我想是极其困难的,它本身解释语言决定了性能的低下,绘图性能连 GDI+ 都不如。。。
Fronepage 我想没有什么,因为它内部没有什么数据处理的工作。
#176楼[
楼主]2007-08-02 08:04 |
@macaroniz
再有一个,我想你对算法推崇备至,和我的态度不同,恐怕有一点重要的原因。那就是你应该长期在 POI 下,而我早已转向实际开发。可能你如果需要一个 List(Of T),需要自己编写,但是我已经可以直接调用 .Net Framework 库。
不过告诉你一点,想要有深得造诣, 学好英语, 要知道我们用的东西都是说英语的人发明的。。。
小同学,请不要盲目相信任何结论。
但是你希望成为一个伟大的科学家或者说计算机艺术家,那么请相信算法和数学是你的根本,别在.net上浪费太多时间。
如果你只希望成为一名熟练的代码建筑工人的话,请继续把大部分的时间花在.net上。
基础好了, .net什么的手到擒来。
.net熟练,你很可能还是不知所以然....
至于CSS+HTML/WEBFORM,留给艺术家们吧...
本身就我而言,我认为方法是最重要的。实际上是渔和鱼的关系。
你自己做个参考吧。
#180楼[
楼主]2007-08-21 18:11 |
@mikster
不要认为我的目标只是 Coder。XHTML+CSS 现在是必要的,不是给设计师的,是人人都可以完成的。同时,如果学习基础,最好从数数开始,不然什么都是空的 :D
#182楼[
楼主]2007-08-24 19:26 |
@三国司马
现在有许多人言必垃圾,其实往往是自身的一种折射。
至于计算机有数学色彩,这和奥林匹克竞赛有任何的关联吗?
我要说的是你要用.net
但你必须从.net里学到一些永远不会过时的东西(比如说计算机原理,设计思想甚至能学习人生的哲理~~)
因为.net有一天也会过时,这对我这个已经工作的人来说可能不是个问题。但对你来说确是个不得不考虑的问题,因为你才13岁~
但你你这个时候学习纯理论过早。我认为你现在从一个具体的技术入手是个不错的主意。因为理论就是经过抽象的感性认识。所以你应该扩宽你的视野,学会比较,学会总结,学会抽象,从具体到一般~
所有理论都来源于现实。
你应该理解我们这些大哥大叔们~~
我们看到你一好苗就忍不住想要帮助你一下,但每个人都有自己的观点,也都有不同的知识面,有的要你学这个有的要你学那个。。。。这会让你迷失,你不必听我们的,你也没法听(各有各的说法你能听哪个)~你只要在你学习的过程中多比较、多总结、多抽象就行。可能现在你已经这样做了~那就要坚持。
形而上者谓之道,形而下者谓之器。
存在-认识-发展-改变,如此而已。
#187楼[
楼主]2008-01-10 12:17 |
@xdgood
此文很早写就,个中观点此时甚以为幼稚。姑且留此存照。
首先 很佩服博主您 才初一 就会如此高级的语言 首先这一点 我不如您
您随手写一个函数就可以将许多元素进行排序 而我需要在Free Pascal中一字一字地打一遍QuickSort
您可以调用一个过程任意查庞大数据库中的元素 而我需要写一百多行的平衡树
您会用VBScript轻松地做一个很华丽的网站 而这方面我一点也不会
但是个人认为 您在反对信息学竞赛的同时 您失去了很多
虽然作为高级语言的程序师 您能轻松写出很华丽的程序 但是 您写的区区几行程序 也许计算机会为此运行非常多的运算 这些运算都是事先就定义好的 您只需要敲几个键调用就行
但是 您却未必知道 在您向数据库中插入一个元素时 在您查找数组中某个元素时 计算机到底执行了哪些操作
有的编译器很强大 可以自动为您维护指针型块状链表 可以在您的命令下自动生成一棵查找树 可以使您的程序在很短时间内迅速出解
还有的编译器 用线性表维护数据结构 不使用二分查找 不进行状态压缩 致使效率低下
我很崇拜您非常高深的编程知识 但我希望您在享受成果的时候想一下 编译器是人写的 开发环境也是人写的 系统函数还是人写的 您的程序并不仅仅是您一个人的成果 只是您把很多人写的小程序拼到了一起 做出来的大程序
您程序中随便调用个函数调用个库 但您知道它们的工作原理吗 您现在只是一个实践者 并不是一个创作者
所以我希望您可以学习信息学竞赛 我们中国并不缺少会用VBScript的人才 而缺少懂得VBScript如何工作的人才 我想您如果学习信息学竞赛 虽然您学不到任何关于如何做网站 如何使用Visual Basic的知识 但相信您会收获远比这重要的内容
当然 如果您想永远活在微软的微软的VB或.Net下 做一个忠实的微软Coder 可以当我没说
#189楼[
楼主]2008-01-21 15:09 |
@Jason911
社会需要分工。人人都可以了解编译原理,但不是人人都必须了解这项原理。另外,编译器和数据结构之间的关系不大,.Net Framework 仅仅提供了 6 个基础类型;其他类型都是在它们基础上建立的。
VBScript 和网页开发现在基本已经失去了关联。ASP 已成为过去式;倘若用 VBScript 完成一个 HTML 的脚本项目,会发现 Firefox 不支持,Opera 不支持,Safari 不支持,将陷入极大的困境。华丽的网站需要的是表现与数据的分离,所以有了 XHTML+CSS,以及 Javascript。
信息学竞赛真的可以让我们明白 VBScript 的工作原理,编译机制?Pascal 和现代的高级语言的差距在哪里?我们真的需要重复的制造车轮?在 .Net 下,我依然可以自己动手,丰衣足食,因为类库里没有的数据结构,真的还很多很多。
难道所有的车轮,都要我们自己制造?
#190楼[
楼主]2008-01-21 15:12 |
@Jason911
继续。
Free Pascal 的工作原理您明白吗?如果明白,您可以自己完成一个 Free Pascal,然后高兴的宣称:我不仅明白了,而且我还自己做到了!此时的您,确实很牛。但是,如果您不能?
从全局角度而言,不是每个人都是写编译器的,也不是每个人都需要自己写编译器。我可能不知道某个对象是如何实现的,但是我可以藉由开放源代码的力量,.Net Framework 已经开放了一部分代码,获取我所希望晓得的。
另外,您似乎对 .Net Framework 的工作原理不够明了;不过这无关紧要。
#191楼[
楼主]2008-01-21 15:15 |
@Jason911
为什么要死死抱着成为过去式的语言?
为什么需要高级语言?因为它可以增加生产力。当然,你可以放弃一切高级的特性,像一个“过去的”语言一样编写程序,这并不是不允许的。
你如果这么认为,一辈子你也就是个给人打工的蓝领coder
依然是我,好久没有来看,发现又有了这么多发言。
虽然我和楼上众位发言的想法是一样的:强调算法的重要性,但是我觉得楼上的众位所说的还是有一定偏差的。
随风流月很厉害,可以做一个这么好用全面的旅游搜索站点,我想我目前是无论如何也做不来的。
社会需要分工,或者说在某种程度上需要专才,因此算法的确不是每个程序员都需要掌握的,比如您不能让一个网页设计者去学习他并不需要的算法,编译原理,同样的,您也不能让一个底层工作人员学习美工和如何ps出一个非主流^.^。
但是我觉得能做出来Soobb.com这个东西的人目标显然不应当仅仅是一个网页设计者而已。
而且您似乎还是一个应用程序的编写人员(我猜的)。
开始说正题:
作为一个程序员,掌握最新的知识来优化自己的工作效率的确很重要,通过因特网以及现实中的各种信息和资源使自己的工作变得简单也是非常正确的。
但是我想这样并不够,一个行业的领先者,必定是一个行业某个领域的开创者,现在的编译器提供给我们了很多的便利,我们可以用很少的代码去完成过去上百行代码所作的事情,当我们遇到自己无法解决的事情,我们可以去开源社区找到几乎所有我们需要的解决方案,但如果一个程序员仅仅限于这样的话,他或许可以成为一个有工作的程序员,但是他一定不是一个拿顶级工资的,或者一个顶尖的程序员,因为您的技术总是落后于那些创造这些技术的人。
以上无关于算法。
现在的程序设计越来越容易,一个学了2,3个月vb的人也可以做出来一些看起来很棒的东西,似乎一切都变得简单了。
数据库有sql,access,编译器更是多到随意选择,还有无数的插件,开源代码……
但这些都是程序设计最外层的东西,他们只是方便您的工作,但绝不是所有的工作,sql,access再好,功能再强大,也需要良好的逻辑表达,更何况很多数据关系并非是sql和access可以解决的。编译器再快,也会有一个极限,c/c++的一个加法,一个循环,即便再快也不可能比vb快1个小时。
但是算法却可以!您可以在更快的编译器上工作,用各种各样提供好的库,进行快速的编写,但是,在这一切的基础上,为什么不使用一个良好的算法来进一步优化您的程序呢?这将带来意料之外的惊喜。
用户总是喜欢更快的东西,为什么我们用google而不用搜狗,因为google更快更全。
bill gates曾说过:如果您认为您是一名优秀的程序员,请去看看knuth的《Art of Computer Programmingt》,如果您认为您看懂了这本书所有的部分,请写一份简历给我,Microsoft欢迎您。
但是,从来没有人说过:如果您掌握了《think of c++》就请来我们的公司吧!
或许您会说,我的目标不是打工,而是创业,那么请看看求伯君,王江民还有这些创造了目前中国信息产业繁荣的前辈们,他们有哪个不是算法方面的顶尖人才?
再说80后的李想,为什么他要做专业类的网站?而不去和sohu,baidu,或者其他英特网巨头竞争?
按照他自己的说法:因为复杂的数学算法和技术经验是个很大的门槛。
bill gates在《未来之路》里面曾经说过:或许将来,每个人都能编写程序,每个人都能享受到因特网和我们带给他们的便捷。
为什么说算法是程序设计的本质,因为它无所不能。
#195楼[
楼主]2008-03-13 20:49 |
@macaroniz
非常感谢您提出的建议。
首先,当我以现在的水平再回头看当时发布的这样一篇文章,其实我也是相当惭愧的。我之所以这几个月都没有再发表些随笔,一来是忙,事情多;二来是觉得自己实在是懂得太少,所以也没敢动过笔。
其次,从您的评论中可以看出,您对于现代的关系数据库的了解可能太浅了一点。事实上,Google 据说也用的是 MySql 作为数据存储——当然,它肯定做了一些扩展,例如分布式的存储和数据中心等等。SQL Server 和 Access 根本不是一个量级的东西。
创业需要的是创意和组织能力,不是凭借一个人的力量独自拼搏;除非你一个人的能力可以超过一整个团队。算法固然重要,但是既然目标不是打工,而是创业,那也就不再是学习列表中的首位了。
一帮伪砖家把算法吹上了天,说白了国内开发还是以应用开发为主,不是做底层开发的,你们有本事做点像样的东西看看,做个数据库,操作系统出来看看。不要一整就是算法算法,拿点实际的例子。
#197楼[
楼主]2008-03-16 20:45 |
@kiler
哈哈。不过话不要说的那么绝,呵呵。
呵呵。。好久没来了。。
每个人看法不一样。。有人喜欢研究算法。。有人喜欢应用开发
所以不用争来争去的。。反正都是程序员嘛。。干嘛这样。。
我还是认为参加信息学竞赛不仅是对知识的扩充,更是对思维的开发,培养你更好的逻辑思维能力
当然也希望您在应用开发的路上越走越远。。争取有所成就
呵呵,看了楼上那么多乱其八糟的评论,不如送楼主一句话:既然想去做项目,那就去做几个实际的项目好了,然后再来体会什么叫语言,什么叫算法。相信以楼主的聪明才智,花上一两个月学一门语言不是很难的事情。世界上没有绝对的对错,只有合适与不合适:D
#200楼[
楼主]2008-10-16 18:30 |
@abcded
实际项目做过不止几个了 :)
楼主的爱好和目标是搞项目搞应用,
不是搞算法搞底层
数学和算法可以在项目中带着了解一下,通过与搞算法搞底层的人交流来获得需要的知识,大家应该各自有分工,而不是把自己的鼻子乱伸
十几年之后,楼主可能会和二三十岁的大家一样,成为个普通的程序员(但是经验应该是很丰富的),这没什么不好,干什么应该顺着自己的喜好,而不是被别的什么东西牵着鼻子走。
因为楼主才10来岁就能够参与开发项目,所以肯定有人会对楼主寄予极高的厚望,楼上有篇回复中就有人说了,楼主是中国的billgates云云,这完全是一种过重的期望,这种无聊的期望,辜负了也没关系
“奥赛”这种东西,可能会让你获得点什么,所谓算法思想之类的云云。但是“奥赛”本身就是不纯粹的,或者说在中国已经变了味。有的同学并不爱好,将来的工作甚至可能和算法没什么关系,也来凑热闹。而且于此同时,爸爸妈妈和老师也说,你得了奖,报送初中高中大学,将来公司追着你要,女生追着你跑云云。这种无聊的、功利的热闹,我们凑不起。