仓酷云
标题:
JAVA网站制作之开辟心得分享:10年编程无师自通
[打印本页]
作者:
不帅
时间:
2015-1-18 11:15
标题:
JAVA网站制作之开辟心得分享:10年编程无师自通
java主要分三块,j2se:java的基础核心语言。j2me:java的微型模块,专门针对内存小,没有持续电源等小型设备。j2ee:java的企业模块,专门针对企业数据库服务器的连接维护。编程|心得
原文:
TeachYourselfProgramminginTenYears
PeterNorvig
翻译:
郭晓刚(
foosleeper@163.net
)
最初订正日期:
2004-3-19
2005-01-12增添了新的译本链接。
本中文译本失掉了PeterNorvig的允许。
为何每一个人都急不成耐?
走进任何一家信店,你会瞥见《TeachYourselfJavain7Days》(7天Java无师自通)的中间是一长排看不到止境的相似书本,它们要教会你VisualBasic、Windows、Internet等等,而只必要几天乃至几小时。我在Amazon.com长进行了以下
搜刮
:
pubdate:after1992andtitle:daysand(title:learnortitle:teachyourself)
(出书日期:1992年后and书名:天and(书名:学会or书名:无师自通))
我一共失掉了248个搜刮了局。后面的78个是盘算机书本(第79个是《
LearnBengaliin30days
》,30天学会孟加拉语)。我把关头词“days”换成“hours”,失掉了十分类似的了局:此次有253本书,头77本是盘算机书本,第78本是《
TeachYourselfGrammarandStylein24Hours
》(24小时学会文法和体裁)。头200本书中,有96%是盘算机书本。
结论是,要末是人们十分急于学管帐算机,要末就是不晓得为何盘算机惊人地复杂,比任何工具都简单学会。没有一本书是要在几天里教会人们浏览贝多芬大概量子物理学,乃至如何给狗妆扮。
让我们来剖析一下像《
LearnPascalinThreeDays
》(3天学会Pascal)如许的标题究竟是甚么意义:
・学会:
在3地利间里,你不敷工夫写一些成心义的程序,并从它们的失利与乐成中进修。你不敷工夫跟一些有履历的程序员一同事情,你不会晓得在那样的情况中是甚么味道。简而言之,没有充足的工夫让你学到良多工具。以是这些书议论的只是外表上的精晓,而非深切的了解。如AlexanderPope(译注:英国墨客、作家,1688-1744)所言,一孔之见是伤害的(alittlelearningisadangerousthing)。
・Pascal:
在3地利间里你能够学会Pascal的语法(假如你已会一门相似的言语),但你没法学到几怎样使用这些语法。简而言之,假如你是,好比说一个Basic程序员,你能够学会用Pascal语法写出Basic作风的程序,但你学不到Pascal真实的长处(和弱点)。那关头在那里?
AlanPerlis
(译注:ACM第一任主席,图灵奖得主,1922-1990)已经说过:“假如一门言语不克不及影响你对编程的设法,那它就不值得往学”。另外一种概念是,偶然候你不能不学一点Pascal(更多是VisualBasic和JavaScript之类)的外相,由于你必要打仗现有的工具,用来完成特定的义务。但此时你不是在进修怎样编程,你是在进修怎样完成义务。
・3天:
不幸的是,这是不敷的,正以下一节所言。
10年编程无师自通
一些研讨者(
Hayes
、
Bloom
)的研讨标明,在很多范畴,都必要约莫10年工夫才干培育出专业妙技,包含国际象棋、作曲、绘画、钢琴、泅水、网球,和神全心理学和拓扑学的研讨。仿佛其实不存在真实的捷径:即便是莫扎特,他4岁就显现出音乐天赋,在他写出生界级的音乐之前仍旧用了凌驾13年工夫。再看另外一种音乐范例的代表--披头士,他们仿佛是在1964年的EdSullivan节目中俄然冒头的。但实在他们从1957年就入手下手扮演了,即便他们很早就显现出了伟大的吸引力,他们第一次真实的乐成之作《Sgt.Peppers》也要到1967年才刊行。SamuelJohnson(译注:英国墨客)以为10年仍是不敷的:“任何范畴的出色成绩都只能经由过程平生的勉力来取得;稍低一点的价值也换不来。”(Excellenceinanydepartmentcanbeattainedonlybythelaborofalifetime;itisnottobepurchasedatalesserprice.)乔叟(译注:Chaucer,英国墨客,1340-1400)也埋怨说:“性命云云长久,把握武艺却要云云久长。”(thelyfsoshort,thecraftsolongtolerne.)
上面是我在编程这个行当里取得乐成的处方:
・对编程感乐趣,由于兴趣而往编程。断定一直都能坚持充足的兴趣,乃至你可以将10年工夫投进个中。
・跟其他程序员扳谈;浏览其他程序。这比任何书本或练习课程都更主要。
・编程。最好的进修是
从理论中进修
。用加倍手艺性的言语来说,“个别在特定范畴最高程度的体现不是作为临时的履历的了局而主动取得的,但即便长短常富有履历的个别也能够经由过程决心的勉力而进步其体现程度。”(
p.366
),并且“最无效的进修请求为特定个别制订得当难度的义务,成心义的反应,和反复及更正毛病的时机。”(p.20-21)《
CognitioninPractice:Mind,Mathematics,andCultureinEverydayLife
》(在理论中认知:心智、数学和一样平常生存的文明)是关于这个概念的一本风趣的参考书。
・假如你乐意,在年夜学里花上4年工夫(大概再花几年读研讨生)。这能让你取得一些事情的进门资历,还能让你对此范畴有更深切的了解,但假如你不喜好进黉舍,(作出一点就义)你在事情中也一样能取得相似的履历。在任何情形下,单从书籍上进修都是不敷的。“盘算机迷信的教导不会让任何人成为熟行的程序员,正如研讨画笔和颜料不会让任何人成为熟行的画家”,EricRaymond,《TheNewHackersDictionary》(新黑客字典)的作者如是说。我已经招聘过的最优异的程序员之一唯一高中学历;但他制造出了很多
巨大的
软件
,乃至有会商他自己的
旧事组
,并且股票期权让他到达我没法企及的富有水平(译注:指
JamieZawinski
,XEmacs和NetscapeNavigator的作者)。
・跟其余程序员一同完成项目。在一些项目中成为最好的程序员;在其他一些项目中当最差的一个。当你是最好的程序员时,你要测试本人向导项目标才能,并经由过程你的洞见鼓动其别人。当你是最差的时分,你进修妙手们在做些甚么,和他们不喜好做甚么(由于他们让你帮他们做那些事)。
・接办其余程序员完成项目。专心了解他人编写的程序。看看在没有最后的程序员在场的时分了解和修正程序必要些甚么。想想如何计划你的程序才干让他人接办保护你的程序时更简单一些。
・学会最少半打编程言语。包含一门撑持类笼统(classabstraction)的言语(如Java或C++),一门撑持函数笼统(functionalabstraction)的言语(如Lisp或ML),一门撑持句法笼统(syntacticabstraction)的言语(如Lisp),一门撑持申明性规约(declarativespecification)的言语(如Prolog或C++模版),一门撑持协程(coroutine)的言语(如Icon或Scheme),和一门撑持并行处置(parallelism)的言语(如Sisal)。
・记着在“盘算机迷信”这个词组里包括“盘算机”这个词。懂得你的盘算机实行一条指令要多长工夫,从内存中取一个word要多长工夫(包含缓存射中和未射中的情形),从磁盘上读取一连的数据要多长工夫,定位到磁盘上的新地位又要多长工夫。(
谜底在这里。
)
・实验介入到一项言语尺度化事情中。能够是ANSIC++委员会,也能够是决意本人团队的编码作风究竟接纳2个空格的缩进仍是4个。不管是哪种,你都能够学到在这门言语中究竟人们喜好些甚么,他们有多喜好,乃至有大概略微懂得为何他们会有如许的感到。
・具有尽快从言语尺度化事情中抽身的优秀判别力。
抱着这些设法,我很嫌疑从书上究竟能学到几工具。在我第一个孩子出身前,我读完了一切“如何……”的书,却仍旧感应本人是个不得要领的老手。30个月后,我第二个孩子出身的时分,我从头拿起那些书来温习了吗?不。相反,我依托我本人的履历,了局比专家写的几千页工具更有效更可靠。
FredBrooks在他的漫笔《
NoSilverBullets
》(没有银弹)中建立了怎样发明出色的软件计划者的三步计划:
1、尽早体系地辨认出最好的计划者群体。
2、指派一个奇迹上的导师卖力有潜质的对象的开展,当心地帮他坚持职业生活的经历。
3、让发展中的计划师们无机会相互影响,相互鼓励。
这实践上是假定了有些人自己就具有成为出色计划师的需要潜质;要做的只是引诱他们行进。
AlanPerlis
说得更简便:“每一个人都能够被传授怎样雕塑;而对米开畅基罗来讲,能教给他的却是如何可以不往雕塑。出色的程序员也一样”。
以是只管往买那些Java书;你极可能会从中找到些用途。但你的生存,大概你作为程序员的真实的专业手艺,其实不会因而在24小时、24天乃至24个月内产生真实的变更。
参考文献
Bloom,Benjamin(ed.)
DevelopingTalentinYoungPeople
,Ballantine,1985.
Brooks,Fred,
NoSilverBullets
,IEEEComputer,vol.20,no.4,1987,p.10-19.
Hayes,JohnR.,
CompleteProblemSolver
,LawrenceErlbaum,1989.
Lave,Jean,
CognitioninPractice:Mind,Mathematics,andCultureinEverydayLife
,
CambridgeUniversityPress,1988.
谜底
各类操纵的计时,2001年炎天在一台典范的1GHzPC上完成:
实行单条指令 1纳秒=(1/1,000,000,000)秒
从L1缓存中取一个word 2纳秒
从主内存中取一个word 10纳秒
从一连的磁盘地位中取一个word 200纳秒
重新的磁盘地位中取一个word(寻址) 8,000,000纳秒=8毫秒
脚注
T.Capey指出Amazon下面《
CompleteProblemSolver
》的页面中,《TeachYourselfBengaliin21days》和《TeachYourselfGrammarandStyle》被列在了“购置此书的主顾还买了以下书本”栏目内里。我猜个中一年夜部分观察这两本书的人都是从我这里已往的。
译本
感激以下作者将本文翻译成其他言语:
日文
(YasushiMurakawa),
中文
(郭晓刚),
繁体中文
(JasonChen),
西班牙文
(CarlosRueda),
德文
(StefanRam),
法文
(P.E.Allary),
土耳其文
(
作者:
爱飞
时间:
2015-1-20 18:33
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
仓酷云
时间:
2015-1-27 22:26
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
小妖女
时间:
2015-2-5 10:28
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
冷月葬花魂
时间:
2015-2-11 08:51
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
若天明
时间:
2015-3-2 07:27
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
因胸联盟
时间:
2015-3-6 07:53
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
再见西城
时间:
2015-3-10 21:04
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
变相怪杰
时间:
2015-3-17 10:00
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
金色的骷髅
时间:
2015-3-24 06:16
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2