JAVA编程:在黉舍教授教养Java是有争议的仓酷云
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。导读:本文来自reayz的编译投稿,英文原文《TeachingJavainschoolisjustascontroversialasaninterviewwithJusticeGray》写于2008年7月,原文中某些概念,如今看来大概不当。别的,译文中有些不当的地方,伯乐在线已改善。以下为全文。明天我读了一篇好文,这是对纽约年夜学盘算机迷信传授RobertDewar采访的一篇跟进文章。我等您读完再持续说。读完了?好的,如今我们能好好交换下了。我必需说,我完整批准Dewar传授对现今卒业生的次要概念。(自爆下,我拿到了华盛顿年夜学的盘算机和软件体系学位,但我在黉舍次要用C++。)
他的一个次要概念是Java有良多库。从上文中援用Dewar博客的一段话:
“假如你往商铺买本关于Java的书,你会发明在1200页中,有300页是关于Java言语,有900页是讲各方面库。用Java,你是能够很轻松地疾速做工具(但不是很细心)……故而你是能够用起码常识仓促拼集做工具,”他说。“但对我来讲,这不是软件工程,倒像是某种“干耗级别”(consuming-level)的编程。”
起首他说的对,Java壮大的缘故原由之一就是它有良多库。另有PHP、.Net和Perl也有良多库。固然他们都不克不及用来驱动飞机大概火箭发射。但他们用在电子商务、办理公司、保卫公家安康数据、运转戎行的设备和创建无用的交际网站。那末成绩是甚么?是否是Java不再是贸易天下的盛行言语?(固然不是)。是否是Java不是合适用来教授教养生进修编程的言语?(固然不是)。是否是我们没有效准确的办法教盘算机迷信。由于你在看这个博客,以是我假定你是想晓得这个谜底的,以是我的谜底是:
我们并没有效准确的工具来指正确的工具。
同意我略微注释一下:
盘算机迷信太难了,以是只要带点神经质的书白痴才干把握。
CS(盘算机迷信)这个专业吓倒了很多人。盘算机很吓人,盘算机很庞大,盘算机是给那些盯着命令行一成天的神经质白痴。这是我从学其他非CS专业的人那边听来的全体。
除数学、化学、物理专业的人,才必要上CS课。
当我在黉舍的时分,有良多学科拿卒业证必要读过进门编程(在华盛顿年夜学那是CSE142和后续CSE143)。当我上高中时,我经由过程社区年夜学的runningstart项目读了相称于CSE142的课程。那门课是用C++,经由过程一年的进修,我取得了相称于CSE142的学分。以是我束缚了年夜学一年级,闲了一年。那门课有应战性,但其实不太过并且那门课只要20-25人列入,以是每一个人都有良多时机从传授那边失掉团体指点。
我选了CSE143在我上华盛顿年夜学的第一年(那是1999年,以是如今能够算出我的年龄了)并且在当时那门课用的是C++。我事先已懂C++了,但那门课对我来讲仍旧颇具应战性。我想起事先我们的第一次测验,满分100分我考了44分,但仍旧高于均匀分。有良多人保持了那门课。还记得我们的一个项目堕入dll天堂,没有一团体能让这代码Build和链接。连助教也没法让它运转。我的伴侣Kevin,他是CS的高年级先生,他也没法让它运转起来。传授最初让我们交下去我们一切的工具,即便他不克不及编译和运转。这几近让我厌恶盘算机。这让良多先生说,靠,这糟透了,然后保持这门课。
这恰是Java试图办理的成绩
Java没有“dll天堂”。有一个优秀撑持Java的IDE。它是收费的。它能运转在一切的平台上,而且不必要为此改动代码。语法很友爱。它有良多库,你能用那些库里的类来完成年夜多半数据布局和算法,比方linked-lists,b-trees,heaps,hashtables等等另有罕见的搜刮、排序算法。如今先生只必要关于代码和怎样让代码运转起来。像已往那样,鼓捣编译器使其运转和忧虑编程情况的情形,没有了(或起码化了)。假如一个先生喜好用代码来办理成绩,他们大概会选择如许做而不是被调试编译工具和IDE弄得非常懊丧。年夜学应当起首让CS看起来不那末可怕,我以为Java能够做到这一点。
Java是怎样最少招致了10个新成绩
第一个成绩是怎样用Java教授教养生。Java有100000个分歧的库,其实不意味者你必需利用他们。并且年夜多半库都是用Java写的,岂非不是吗?以是这是第一个成绩:当你入手下手教数据布局和算法时,你必需实其实在地教它们,你不克不及复杂第让先生用那些库往创建程序。大概教哈希表的一个好例子就是展现JavaHashTable的类,写一个程序来从一个HashTable中存取值。如今,本人写一个HashTable类完成Map接口,而且输入完成。反复如许做以进修其他的数据接哦股和算法。喔,成绩办理了。
以是既然先生学了Java,我们能够用Java做任何事,是吗?
不是的。你不克不及教Java里的一切工具。你只能教Java里的一些工具。我曾上过一个50%教室内容是教Java的操纵体系课,这么做是由于演示多线程观点用Java比C++更复杂。但这其实不意味着我不会用C++中多线程编程,而是在Java中debug它更复杂一些,这可让我专注于其他事变上。一样,在我们必需完成的假造文件体系的文件IO上,Java经由过程操纵实践的文件IO让假造文件体系完成更简单,可是我们只要一个超年夜文件,并且在这个文件中有我们的inodes和数据,我们必需创建一个“文件”完成,它仿照读写我们的超年夜文件。再说一次,在不必要体贴格局化实践硬盘驱动和与之互动的情形下,匡助我了解观点。这是重点:
Java同意你专注于成绩的办理,而不必要体贴工具和编程情况。假如专注于观点不依托工具和编程情况,那末Java是一个好的选择。
经由过程一个对你来讲很难办理内存的编程言语,来进修内存办理
这估量是Java作为一个进修工具最年夜的成绩。作为一个开辟职员,你必需对呆板怎样操纵工具比方内存大概其他工具有深入的了解。在Java中你完整不必要体贴内存,以是这使得Java不是一个符合进修内存办理的工具。像C那样的言语真是一个最好的进修工具,由于它必需手动地做任何事变。实践上,我以为了解内存怎样运作的最好办法,是往你能实践上看到地点模子和它们之间分歧的中央。这匡助我了解指针,赛过任何其他的工具。这率领我们到:
这没法进修呆板言语,除非经由过程一个实在的呆板
Java是一个假造机,但我们想要了解真实的呆板。盘算机怎样运作,面前准绳的常识很主要,出格是当一些工具往坏中央开展的时分。在你分开黉舍后的职业生活中,你大概其实不会再利用汇编。你将来也不会写驱动大概编译器。但假如你正在用这些工具(我以为编译器也是一种工具),了解他们怎样事情很主要,不然它们一旦不事情时,你将不克不及找出缘故原由。你必要经由过程真正看到硬件怎样事情来进修它。你必要能真正这几一个绝对复杂的逻辑线圈。你必要晓得这些线圈怎样用来组装一台盘算机。这些工具其实不难假如教的好的话。汇编言语是关于硬件和软件接口的,以是学好它很主要。我学了motorola68000汇编,它比x86汇编复杂,但仍是很好地演示了指针。如今我晓得:
1
2
3
4
5
inta=5
int*b=a
int*b=5
的区分,在呆板外部这是由汇编命令表达的。这帮我了解内存怎样事情,并且这使我写出的程序不会产生内存泄露。
可是,这些工具在教导体系中消散了
我(和良多人)以为Java是一个好的面向对象言语。良多人有一个或二个礼拜来完成关于多态的功课。这很酷,但你其实不了解承继。他们不会教你为何用承继和怎样准确地利用它。他们不教任何工具关于形式、重构,大概复杂地传授一些用对象编程的内容。我以为这些本应当被教的内容是很主要,良多年夜学卒业生由于未曾被教这些工具而不具有这些常识。我以为Java是一个好的工具往教这些工具。
另有测试
没有人教怎样测试代码大概乃至怎样使代码可测试。我并非在讲运转使用程序并反省输出和输入。我在将单位测试,整合测试和主动化测试。晓得必需测试和单位测试很主要是远远不敷的。你必要了解累逝世testdoubles,testautomation等相似的工具,和怎样写代码使之能独自被测试。Java是一个很好工具做这些。
其他一些工具
你怎样创建一个年夜项目?怎样主动化创建?怎样办理源代码?分支是甚么?有良多工具是有履历的程序员以为天经地义的,但我们必需在一些中央学到这些工具。大概我们在履历了这些成绩后分明了这些工具,大概在事情中其别人告知我们。这必要在黉舍就入手下手。别专注于一个出格的手艺,而是要进修这些观点和懂得这些观点为何主要。代码在这类教室中并非最主要的,你可使用你想用的任何言语。可是,记得这门课的目地是办理代码,而不是写代码,以是别给先生打造代码上的困难。用一些已有代码,做渺小修改,迫使先生用版本办理工具,往改动构建历程,往思索更庞大的工具。
最初的设法
良多年夜学保持Java,由于良多先生已晓得它,这是最小公分母。假如你想让你先生从天下程序员的最小公分母中出来也没成绩。程序员的一个主要妙技就是进修新言语。这有助于在科技更新中坚持劳力合作力。假如你只教Java,那末成绩将会是你的先生将没时机疾速把握一门新言语。
以是我的办理计划是:
●利用本学科最合适的言语传授课程。进门课程应该教些能让程序编译并运转的工具。Java是一个幻想选择,但C#也能够。进门课程的重点是编程的进门,而不是怎样鼓捣编译器的进门。
●每一个先生应当被请求在校时用起码4种编程言语。个中之一应当是汇编,个中之一还应当是面向对象编程言语。HTML不是一种编程言语。
●教怎样编写杰出代码。大度的代码不即是带正文的代码。这必要强迫在每门课中实行。但这自己就是一个门详细课程中实行,而且最好是先生生活入手下手之初尽快实行。课程内容应掩盖计划形式、OO计划的准绳、单位测试等等。
●请求先生在经由过程进门课程后,在每堂课中都利用版本办理工具。年夜学应当供应黉舍的vcs给每一个同砚。这其实不像听起来那末坚苦。
●编译器、硬件、操纵体系课程应当是强迫的(偶然候,个中部分并不是需强迫)。在硬件课程的最初一个项目中,我曾写过一个反汇编程序用汇编言语。这很难,但并不是不成能。班上每一个成员最少能劳绩能事情的工具。我的反汇编程序,也能准确地反汇编本身。
●先生应当被强迫与同班的其别人互助。互助能够包含一同事情,但也大概包含代码检察(codereview)和结对编程。
●永久不要在全班眼前强迫review一个先生的代码,除非谁人先生批准这么做,但匿名代码检察和在公家场所review都是能够的。我晓得这在贸易天下是不用恪守的,但我们在黉舍,并且我们其实不想冷淡先生。我以为这是一个折衷战略,我们将仍能够教授代码检察的代价,并引诱先生,而且不让先生有要保持这个课程的动机。
●一切的课程都应当落实到写一些代码。
●在教室上,传授应当最少供应一块大度代码,用于演示。这有助于先生往浏览大度的代码。这一样有助于先生浏览糟的代码,并晓得它欠好在那里。
最初,假如你是一名传授、年夜学办理职员大概其他类似的,假如你想要与我细谈关于这个主题,我将很乐意在任什么时候间与你聊聊。我谈了这么多,是由于我强烈热闹地信任这很主要,我将会尽统统力气往让盘算机迷信教导变得更好。假如你正在读这些,我倡议你也将这作为优先做的事变。往和你当地的年夜学谈谈,给你的传授写邮件,往外地黉舍,出格是高中和社区年夜学演讲,勉励先生往盘算机迷信系。除非你做点甚么,不然你是不会晓得你对他人的影响力有多年夜。
【伯乐在线注】:为了更好校正这篇译文,费了很多工夫,特别是原文题目中提到的JusticeGray(法官葛雷),搜刮很久,才找到他所触及的有争议案件,就是一件美国排华案件,即:1893年冯越亭诉美国案。
扼要摘编:1892年制订的吉尔里法案,是美国有史以来对华人最严峻的法案,其他国度的移平易近都不须带任何因素证实文件,但在美华人必需请求住民允许证并随身照顾,若未照顾就会被认定长短法居留而被拘捕,需先服一年苦役后,再被摈除出境。
此案一出,当即遭到华人社会的否决,中华会馆(SixCompanies)号令华人不要往注册,以为此法案是背宪的法案,没有功令效率,这个种族卑视的法案违背了美国宪法的权力宣言(BillofRights)。与其缴费注册,不如把钱集资打讼事。
冯越亭是1879年到美国的劳工,没有进籍,是寓居在纽约市的正当永世住民,没有任何返国假寓的企图。冯越亭呼应中华会馆的召唤,回绝依照凌辱人身的种族卑视功令往注册。因为没有注册证,美国宪兵在没有拘捕令的情形下不经由合法程序落网捕了冯越亭。
中华会馆请状师为冯打讼事,以为吉尔里法案背宪,一向上诉到最高法院。但最高法院年夜法官以五票对三票讯断冯越亭等败诉。这五票中,就有Gray的一票。他认定吉尔里法案无效,并称“美国事一个主权国度,有权力排挤任何人、任何种族,并将之摈除出境。”——摘编自《美国华人功令史》
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net网页编程就不一样了,保持微软的一向风格,源代码不公开 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 是一种将安全性(Security)列为第一优先考虑的语言 Java 编程语言的风格十分接近C、C++语言。 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
页:
[1]