﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-我来编程技术网</title><link>http://www.blogjava.net/panboy/</link><description>我来编程技术网</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 19:23:50 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 19:23:50 GMT</pubDate><ttl>60</ttl><item><title>成为编程高手的八大奥秘</title><link>http://www.blogjava.net/panboy/articles/219267.html</link><dc:creator>壞尛孖&#xE;</dc:creator><author>壞尛孖&#xE;</author><pubDate>Fri, 01 Aug 2008 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/panboy/articles/219267.html</guid><wfw:comment>http://www.blogjava.net/panboy/comments/219267.html</wfw:comment><comments>http://www.blogjava.net/panboy/articles/219267.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/panboy/comments/commentRss/219267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/panboy/services/trackbacks/219267.html</trackback:ping><description><![CDATA[1、扎实的基础<br />
<br />
　　数据结构、离散数学、编译原理，这些是所有计算机科学的基础，如果不掌握它们，很难写出高水平的程序。<a href="http://www.wocome.com" target="_blank">程序</a>人人都会写，但当你发现写到一定程度很难再提高的时候，就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP，即使你再精通OOP，遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。<br />
<!--大屏幕--><br />
<br />
　　2、丰富的想像力<br />
<br />
　　不要拘泥于固定的思维方式，遇到问题的时候要多想几种解决问题的方案，试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上，除计算机以外，多涉猎其他的学科，比如天文、物理、数学等等。开阔的思维对程序员来说很重要。<br />
<br />
　　3、最简单的是最好的<br />
<br />
　　这也许是所有科学都遵循的一条准则，复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式：E=mc2。简单的方法更容易被人理解，更容易实现，也更容易维护。遇到问题时要优先考虑最简单的方案，只有简单方案不能满足要求时再考虑复杂的方案。<br />
<br />
　　4、不钻牛角尖<br />
<br />
　　当你遇到障碍的时候，不妨暂时远离电脑，看看窗外的风景，听听轻音乐，和朋友聊聊天。当我遇到难题的时候会去玩游戏，当负责游戏的那部分大脑细胞极度亢奋的时候，负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候，我会发现那些难题现在竟然可以迎刃而解。<br />
<br />
　　5、对答案的渴求<br />
<br />
　　人类自然科学的发展史就是一个渴求得到答案的过程，即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念，一定要找到问题的答案，你才会付出精力去探索，即使最后没有得到答案，在过程中你也会学到很多东西。<br />
<br />
　　6、多与别人交流<br />
<br />
　　三人行必有我师，也许在一次和别人不经意的谈话中，就可以迸出灵感的火花。多上上网，看看别人对同一问题的看法，会给你很大的启发。<br />
<br />
　　7、良好的<a href="http://www.wocome.com" target="_blank">编程</a>风格<br />
<br />
　　注意养成良好的习惯，代码的缩进编排，变量的命名规则要始终保持一致。大家都知道如何排除代码中错误，却往往忽视了对注释的排错。注释是程序的一个重要组成部分，它可以使你的代码更容易理解，而如果代码已经清楚地表达了你的思想，就不必再加注释了，如果注释和代码不一致，那就更加糟糕。<br />
<br />
　　8、韧性和毅力<br />
<br />
　　这也许是&#8220;高手&#8221;和一般程序员最大的区别。高手们并不是天才，他们是在无数个日日夜夜中磨炼出来的。成功能给我们带来无比的喜悦，但过程却是无比的枯燥乏味。你不妨做个测试，找个10000以内的素数表，把它们全都抄下来，然后再检查三遍，如果能够不间断地完成这一工作，你就可以满足这一条。<br />
<img src ="http://www.blogjava.net/panboy/aggbug/219267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/panboy/" target="_blank">壞尛孖</a> 2008-08-01 11:13 <a href="http://www.blogjava.net/panboy/articles/219267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>让自己成为一名黑客</title><link>http://www.blogjava.net/panboy/articles/219266.html</link><dc:creator>壞尛孖&#xE;</dc:creator><author>壞尛孖&#xE;</author><pubDate>Fri, 01 Aug 2008 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/panboy/articles/219266.html</guid><wfw:comment>http://www.blogjava.net/panboy/comments/219266.html</wfw:comment><comments>http://www.blogjava.net/panboy/articles/219266.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/panboy/comments/commentRss/219266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/panboy/services/trackbacks/219266.html</trackback:ping><description><![CDATA[---什么是黑客?<br />
<br />
Jargon File中对&#8220;黑客&#8221;一词给出了很多个定义，大部分定义都涉及高超的<a href="http://www.wocome.com" target="_blank">编程</a><a href="http://www.wocome.com" target="_blank">技术</a>，强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客，那么好，只有两方面是重要的。（态度和技术）<br />
<br />
长久以来，存在一个专家级<a href="http://www.wocome.com" target="_blank">程序</a>员和网络高手的共享文化社群，其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。 这个文化的参与者们创造了&#8220;黑客&#8221;这个词。 黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分，如果你已经为它作了些贡献，而且圈内的其他人也知道你是谁并称你为一个黑客，那么你就是一名黑客。<br />
<br />
黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上，你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中，我们将注意力集中在软件黑客的技术和态度，以及发明了&#8220;黑客&#8221;一词的哪个共享文化传统之上。<br />
<br />
另外还有一群人，他们大声嚷嚷着自己是黑客，实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人（多数是青春期的少年）。真正的黑客把这些人叫做&#8220;骇客&#8221;(cracker)，并不屑与之为伍。多数真正的黑客认为骇客们是些不负责任的懒家伙，还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客， 正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是，很多记者和作家往往错把&#8220;骇客&#8221;当成黑客；这种做法激怒真正的黑客。<br />
<br />
根本的区别是：黑客们建设，而骇客们破坏。<br />
<br />
如果你想成为一名黑客，继续读下去。如果你想做一个骇客，去读 alt.2600 新闻组，并在发现你并不像自己想象的那么聪明的时候去坐5到10次监狱。 关于骇客，我只想说这么多。<br />
<br />
---黑客的态度<br />
<br />
黑客们解决问题，建设事物，信仰自由和双向的帮助，人人为我, 我为人人。<br />
要想被认为是一名黑客，你的行为必须显示出你已经具备了这种态度。要想做的好象你具备这种态度，你就不得不真的具备这种态度。但是如果你想靠培养黑客态度在黑客文化中得到承认，那就大错特错了。因为成为具备这些特质的这种人对你自己非常重要，有助于你学习，并给你提供源源不断的活力。同所有有创造性的艺术一样，成为大师的最有效方法就是模仿大师的精神---不是仅从理智上，更要从感情上进行模仿。<br />
<br />
So，如果你想做一名黑客，请重复以下事情直到你相信它们：<br />
<br />
1 这世界充满待解决的迷人问题<br />
<br />
做一名黑客有很多乐趣，但却是些要费很多气力方能得到的乐趣。 这些努力需要动力。成功的运动员从健壮体魄，挑战自我极限中汲取动力。同样，做黑客，你必须<br />
要有从解决问题，磨练技术，锻炼智力中得到基本的热望。如果你还不是这类人又想做黑客，你就要设法成为这样的人。否则你会发现，你的黑客热情会被其他诱惑无情地吞噬掉---如金钱、性和社会上的虚名。<br />
<br />
（同样你必须对你自己的学习能力建立信心---相信尽管你对某问题所知不多，但如果你一点一点地学习、试探，你最终会掌握并解决它。）<br />
<br />
2. 一个问题不应该被解决两次<br />
<br />
聪明的脑瓜是宝贵的，有限的资源。当这个世界还充满其他有待解决的有趣问题之时，他们不应该被浪费在重新发明轮子这些事情上。 作为一名黑客，你必须相信其他黑客的思考时间是宝贵的---因此共享信息，解决问题并发布结果给其他黑客几乎是一种道义，这样其他人就可以去解决新问题而不是重复地对付旧问题。<br />
<br />
(你不必认为你一定要把你的发明创造公布出去，但这样做的黑客是赢得大家尊敬最多的人。卖些钱来给自己养家糊口，买房买车买计算机甚至发大财和黑客价值也是相容的，只要你别忘记你还是个黑客。)<br />
<br />
3. 无聊和乏味的工作是罪恶<br />
<br />
黑客们应该从来不会被愚蠢的重复性劳动所困扰，因为当这种事情发生时就意味着他们没有在做只有他们才能做的事情---解决新问题。这样的浪费伤害每一个人。因此，无聊和乏味的工作不仅仅是令人不舒服而已，它们是极大的犯罪。 要想做的象个黑客，你必须完全相信这点并尽可能多地将乏味的工作自动化，不仅为你自己，也为了其他人（尤其是其他黑客们）。<br />
<br />
(对此有一个明显的例外。黑客们有时也做一些重复性的枯燥工作以进行&#8220;脑力休息&#8221;，或是为练熟了某个技巧，或是获得一些除此无法获得的经验。但这是他自己的选择---有脑子的人不应该被迫做无聊的活儿。）<br />
<br />
<br />
4 自由就是好<br />
<br />
黑客们是天生的反权威主义者。任何能向你发命令的人会迫使你停止解决令你着迷的问题，同时，按照权威的一般思路，他通常会给出一些极其愚昧的理由。因此，不论何时何地，任何权威，只要他压迫你或其他黑客，就要和他斗到底。<br />
<br />
(这并非说任何权力都不必要。儿童需要监护，罪犯也要被看管起来。 如果服从命令得到某种东西比起用其他方式得到它更节约时间，黑客会同意接受某种形式的权威。但这是一个有限的、特意的交易；权力想要的那种个人服从不是你的给予，而是无条件的服从。) <br />
<br />
权力喜爱审查和保密。他们不信任自愿的合作和信息共享---他们只喜欢由他们控制的合作。因此，要想做的象个黑客，你得对审查、保密，以及使用武力或欺骗去压迫人们的做法有一种本能的反感和敌意。<br />
<br />
5. 态度不能替代能力<br />
<br />
要做一名黑客，你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客，就象这并不能使你成为一个运动健将和摇滚明星一样。成为一名黑客需要花费智力，实践，奉献和辛苦。<br />
<br />
因此，你必须学会不相信态度，并尊重各种各样的能力。黑客们不会为那些故意装模做样的人浪费时间，但他们却非常尊重能力---尤其是做黑客的能力，不过任何能力总归是好的。具备很少人才能掌握的技术方面的能力尤其为好，而具备那些涉及脑力、技巧和聚精会神的能力为最好。<br />
<br />
如果你尊敬能力，你会享受提高自己能力的乐趣---辛苦的工作和奉献会变成一种高度娱乐而非贱役。 要想成为一名黑客，这一点非常重要。 <br />
<br />
<br />
---基本黑客技术<br />
<br />
黑客态度是重要的，但技术更加重要。态度无法替代技术，在你被别的黑客称为黑客之前，有一套基本的技术你必须掌握。 这套基本技术随着新技术的出现和老技术的过时也随时间在缓慢改变。例如，过去包括使用机器码编程，而知道最近才包括了HTML语言。但现在明显包括以下技术：<br />
<br />
1 学习如何<a href="http://www.wocome.com" target="_blank">编程<br />
</a><br />
这当然是最基本的黑客技术。如果你还不会任何计算机语言，我建议你从Python开始。它设计清晰，文档齐全，对初学者很合适。尽管是一门很好的初级语言，它不仅仅只是个玩具。它非常强大，灵活，也适合做大型项目。<br />
<br />
但是记住，如果你只会一门语言，你将不会达到黑客所要求的技术水平，甚至也不能达到一个普通程序员的水平---你需要学会如何以一个通用的方法思考编程问题，独立于任何语言。要做一名真正的黑客，你需要学会如何在几天内通过一些手册，结合你现在所知，迅速掌握一门新语言。这意味着你应该学会几种不同的语言。 <br />
<br />
如果要做一些重要的编程，你将不得不学习C语言，Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。 Perl很实用，值得一学；它被广泛用于活动网页和系统管理，因此即便你从不用Perl写程序，至少也应该能读懂它。 LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验；这些经验使你在以后的日子里成为一个更好的程序员，即使你实际上可能很少使用LISP本身。<br />
<br />
当然，实际上你最好四种都会。 (Python, C, Perl, and LISP). 除了是最重要的四种基本语言，它们还代表了四种非常不同的编程方法，每种都会让你受益非浅。 <br />
<br />
这里我无法完整地教会你如何编程---这是个复杂的活儿。但我可以告诉你，书本和课程也不能作到。几乎所有最好的黑客都是自学成材的。真正能起作用的就是去亲自读代码和写代码。<br />
<br />
学习如何编程就象学习用自然语言写作一样。最好的做法是读一些大师的名著，试着自己写点东西，再读些，再写点，又读些，又写点....如此往复，直到你达到自己在范文中看到的简洁和力量。 <br />
<br />
过去找到好的代码去读是困难的，因为很少有大型程序的可用源代码能让新手练手。这种状况已经得到了很大的改善；现在有很多可用的开放源码软件，编程工具和操作系统（全都有黑客写成）。这使我们自然地来到第二个话题...<br />
<br />
2 得到一个开放源码的Unix并学会使用、运行它<br />
<br />
我假设你已经拥有了一台个人计算机或者有一个可用的（ 今天的孩子们真幸福 :-) ）。新手们最基本的一步就是得到一份Linux或BSD-Unix，安装在个人计算机上，并运行它。<br />
当然，这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发送的---你无法读到它的源码，更不可能修改它。尝试在DOS或Windows的机器上学习黑客技术，就象是在腿上绑了铁块去学跳舞。<br />
<br />
除此之外，Unix还是Internet的操作系统。你可以不知道Unix而学会用Internet，但不懂它你就无法成为一名Internet黑客。因为这个原因，今天的黑客文化在很大程度上是以Unix为中心的。（这点并不总是真的，一些很早的黑客对此很不高兴，但Unix和Internet之间的共生关系已是如此之强，甚至连微软也无可奈何) <br />
<br />
So，装一个Unix---我个人喜欢Linux，不过也有其他选择。（你也可以在同一台机器上同时运行DOS,Windows和Linux）学会它。运行它。用它跟Internet对话。读它的代码。试着去修改他。你会得到比微软操作系统上好的多的编程工具（包括C,Lisp, Python, and Perl），你会得到乐趣，并将学到比你想象的更多知识。<br />
<br />
关于学习Unix的更多信息，请看 The Loginataka. <br />
<br />
要得到Linux，请看： 哪里能得到 Linux.<br />
<br />
3 学会如何使用WWW和写HTML<br />
<br />
大多黑客文化建造的东西都在你看不见的地方发挥着作用，帮助工厂、办公室和大学正常运转，表面上很难看到它对他人的生活的影响。Web是一个大大的例外。即便政客也同意，这个巨大而耀眼的黑客玩具正在改变整个世界。单是这个原因（还有许多其它的）， 你就需要学习如何掌握Web。<br />
<br />
这并不是仅仅意味着如何使用浏览器（谁都会），而是要学会如何写HTML，Web的标记语言。如果你不会编程，写HTML会教你一些有助于学习的思考习惯。因此，先建起自己的主页。<br />
<br />
但仅仅建一个主页也不能使你成为一名黑客。 Web里充满了各种网页。多数是无意义的，零信息量垃圾。<br />
<br />
要想有价值，你的网页必须有内容---必须有趣或对其它黑客有用。这样，我们来到下一个话题....<br />
<br />
<br />
---黑客文化中的地位<br />
<br />
<br />
象大部分不涉及金钱的文化一样，黑客王国的运转靠声誉维护。你设法解决有趣的问题，但它们到底多有趣，你的解法有多好，是要有那些和你具有同样技术水平的人或比你更牛的人去评判的。<br />
<br />
相应地，当你在玩黑客游戏时，你知道，你的分数要靠其他黑客对你的技术的评估给出。（这就是为什么只有在其它黑客称你为黑客是，你才算得上是一名黑客）这个事实常会被黑客是一项孤独的工作这一印象所减弱；它也会被另一个黑客文化的禁忌所减弱（此禁忌的效力正在减弱但仍很强大）：拒绝承认自我或外部评估是一个人的动力。<br />
<br />
特别地，黑客王国被人类学家们称为一种精英文化。在这里你不是凭借你对别人的统治来建立地位和名望，也不是靠美貌，或拥有其他人想要的东西，而是靠你的奉献。尤其是奉献你的时间，你的才智和你的技术成果。<br />
<br />
要获得其他黑客的尊敬，你可以做以下五种事情：<br />
<br />
<br />
1. 写开放源码的软件<br />
<br />
第一个（也是最基本和传统的）是写些被其他黑客认为有趣或有用的程序，并把程序的原代码公布给大家共享。<br />
（过去我们称之为&#8220;自由软件-free software&#8221;，但这却使很多不知free的精确含义的人感到不解。现在我们很多人使用&#8220;开放源码-open source&#8221;这个词）<br />
<br />
黑客王国里最受尊敬的大牛们是那些写了大型的、具有广泛用途的软件，并把它们公布出去，使每人都在使用他的软件的人。<br />
<br />
2. 帮助测试并修改开放源码的软件<br />
<br />
黑客们也尊敬也那些使用、测试开放源码软件的人。在这个并非完美的世界上，我们不可避免地要花大量软件开发的时间在测试和抓臭虫阶段。 这就是为什么任何开放源码的作者稍加思考后都会告诉你好的beta测试员象红宝石一样珍贵。 (他知道如何清楚描述出错症状，很好地定位错误，能忍受快速发布的软件中的bug，愿意使用一些简单的诊断工具) 甚至他们中的一个能判断出哪个测试阶段是延长的、令人精疲力尽的噩梦，哪个只是一个有益健康的玩意儿。 <br />
<br />
如果你是个新手，试着找一个赶兴趣的正在开发的程序，作一个好的beta测试员。从帮着测试，到帮着抓臭虫，到最后帮着改程序，你会不断进步。以后你写程序时，会有别人来帮你，你就得到了你当初善举的回报。<br />
<br />
3. 公布有用的信息<br />
<br />
另一个好事是收集整理网页上有用有趣的信息或文档如FAQ。许多主要FAQ的维护者和其他开放源码的作者一样受到大家的尊敬。<br />
<br />
<br />
4. 帮助维护基础设施的运转<br />
<br />
黑客文化是靠自愿者运转的。要使Internet能正常工作，就要有大量枯燥的工作不得不去完成----管理mail list，newsgroup，维护大量文档，开发RFC和其它技术标准等等。做这类事情的人会得到很多人的尊敬，因为每人都知道这些事情是耗时耗力的苦役，不象编码那样好玩。做这些事情需要毅力。<br />
<br />
5. 为黑客文化本身服务<br />
<br />
最后，你可以为这个文化本身服务（例如象我这样，写一个&#8220;如何成为黑客&#8221;的初级教程 :-) ）（hehe,象我这样把它翻成中文 :-) ） 这并非一定要在你已经在这里呆了很久，精通所有以上4点，获得一定声誉后后才能去做。<br />
<br />
黑客文化没有领袖。精确地说，它确实有些文化英雄和部落长者和历史学家和发言人。若你在这圈内呆的够长，你或许成为其中之一。<br />
记住：黑客们不相信他们的部落长者的自夸的炫耀，因此很明显地去追求这种名誉是危险的。你必须具备基本的谦虚和优雅。 <br />
<br />
---黑客和怪人(Nerd)的联系<br />
<br />
同流行的传说相反，做一名黑客并不一定要你是个怪人。然而，很多黑客都是怪人。做一个出世者有助于你集中精力进行更重要的事情，如思考和编程。<br />
因此，很多黑客都愿意接受&#8220;怪人&#8221;这个标签，更有甚者愿意使用&#8220;傻子(geek)&#8221;一词并自以为豪---这是宣布他们与主流社会不合作的声明。<br />
<br />
如果你能集中足够的精力来做好黑客同时还能有正常的生活，这很好。今天作到这一点比我在1970年代是个新手是要容易的多。今天主流文化对技术怪人要友善的多。甚至有更多的人意识到黑客通常更富爱心，是块很好的做恋人和配偶的材料。 更多信息见 Girl's Guide to Geek Guys. <br />
<br />
如果你因为生活上不如意而为做黑客而吸引，那也没什么---至少你不会分神了。或许以后你会找到自己的另一半。<br />
<br />
---风格的意义<br />
<br />
重申一下，做一名黑客，你必须进入黑客精神之中。当你不在计算机边上时，你仍然有很多事情可做。它们并不能替代真正的编程（没有什么能替代编程），但很多黑客都那么做，并感到它们与黑客精神存在一种本质的关联。<br />
<br />
阅读科幻小说。参加科幻小说讨论会。（一个很好的寻找黑客的场合）<br />
研究禅宗，或练功习武。<br />
练就一双精确的耳朵，学会鉴赏特别的音乐。学会玩某种乐器，或唱歌。<br />
提高对双关语的鉴赏。<br />
学会流畅地用母语写作。（令人惊讶的时，我所知道的所有最棒的黑客，都是很不错的作家）<br />
<br />
这些事情，你做的越多，你就越适合做黑客。至于为什么偏偏是这些事情，原因并不很清楚，但它们都涉及到了左-右脑的综合技巧，这似乎是关键所在。（黑客们既需要清晰的逻辑思维，有时也需要强烈的跳出逻辑之外的直觉） <br />
<br />
最后，还有一些不要去做的事情。<br />
<br />
不要使用愚蠢的，过于哗众取宠的ID<br />
不要自称为网络崩客(punk) ，也不要对那些人浪费时间<br />
不要寄出充满拼写和语法错误的email，或张贴错误百出的文章 <br />
<br />
做以上的事情，会使大大损害你的声誉。黑客们个个记忆超群---你将需要数年的时间让他们忘记你的愚蠢。<br />
<br />
---其它资源<br />
<br />
Peter Seebach为那些不知如何同黑客打交道的经理们维护了一个非常精彩的黑客FAQ。<br />
<br />
The Loginataka 有许多关于如何正确培养一个Unix黑客的态度的材料。<br />
<br />
我也曾写过一篇&#8220;黑客文化简史&#8221;。<br />
<br />
我还写过另一篇文章，&#8220;大教堂与集市&#8221;，解释了许多Linux和开放源码文化的运做原理。我还在它的续集&#8220;开拓智域&#8221;一文中有更直接的论述。<br />
<br />
---FAQ（常问问题解答）<br />
<br />
问：你会教我如何做黑客吗？<br />
<br />
自从第一次发布此页，我每周都会得到一些请求，要我&#8220;教会他如何做黑客&#8221;；遗憾的是，我没有足够的时间和精力来做这个；我自己的编程项目已经占用了我110%的时间。<br />
甚至即便我想教你也不可能，黑客基本上是一项需要你自行修炼的的态度和技术。你会发现即使真正的黑客想帮助你，如果你乞求他们填鸭一样教你的话，你不会赢得他们的尊敬。<br />
首先去学习。显示你在尝试，你能靠自己去学习。然后再去向黑客们请教问题。<br />
<br />
<br />
问：你会帮我&#8220;黑&#8221;掉一个站点吗？或者教我怎么黑它？<br />
<br />
No. 任何在读完FAQ后还问此问题人，都是愚不可及的家伙，即使有时间我也不会理睬。 任何发给我的此类mail都会被忽略或被痛斥。<br />
<br />
问：哪里能找到真正的可以与之交流的黑客？<br />
<br />
最佳办法是就近参加一个Unix或Linux的用户组，参加他们的会议。<br />
<br />
问：我该先学哪种语言？<br />
<br />
HTML, 如果你还不会的话. <br />
但它不是一个真正的编程语言。当你准备编程时，我建议你从 Python开始. 会有很多人向你推荐Perl，它比Python还受欢迎，但却难学一些。<br />
<br />
C 是非常重要的，但它却是最难学的。不要一开始就尝试学C。<br />
<br />
问：开放源码的自由软件不会使程序员饿肚子吗？<br />
<br />
这似乎不大可能---到目前，开放源码软件产业创造了而不是消灭了大量工作机会。<br />
如果写一个程序比不写一个程序只是个纯粹经济上的收益的话，无论它是否免费，只要它被完成，程序员都会从中得到回报。而且，无论软件是由多么的free的方法开发的，对更新的软件应用的需求总是会有的。<br />
<br />
问：我从何学起？哪里有免费的Unix?<br />
<br />
本页的其他地方指向最常用的免费Unix。要做一名黑客，你需要自立自强，以及自我教育的能力。<br />
现在开始吧...... 
<img src ="http://www.blogjava.net/panboy/aggbug/219266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/panboy/" target="_blank">壞尛孖</a> 2008-08-01 11:11 <a href="http://www.blogjava.net/panboy/articles/219266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Socket 编程的经典文章</title><link>http://www.blogjava.net/panboy/articles/219265.html</link><dc:creator>壞尛孖&#xE;</dc:creator><author>壞尛孖&#xE;</author><pubDate>Fri, 01 Aug 2008 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/panboy/articles/219265.html</guid><wfw:comment>http://www.blogjava.net/panboy/comments/219265.html</wfw:comment><comments>http://www.blogjava.net/panboy/articles/219265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/panboy/comments/commentRss/219265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/panboy/services/trackbacks/219265.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">事实上网络<a href="http://www.wocome.com" target="_blank">编程</a>简单的理解就是两台计算机相互通讯数据而已。对于程序员而言，去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了。<a href="http://www.wocome.com" target="_blank">Java</a> SDK提供一些相对简单的Api来完成这些工作，Socket就是其中之一。</p>
<p style="text-indent: 2em">对于Java而言。这些Api存在与Java.net这个包里面。因此只要导入这个包就可以准备网络编程了。网络编程的基本模型就是客户机到服务器模型。简单的说就是两个进程之间相互通讯，然后其中一个必须提供一个固定的位置，而另一个则只需要知道这个固定的位置，并去建立两者之间的联系。然后完成数据的通讯就可以了。这里提供固定位置的通常称为服务器，而建立联系的通常叫做客户端。基于这个简单的模型，就可以进入网络编程。</p>
<p style="text-indent: 2em">Java对这个模型的支持有很多种Api.而这里我只想介绍有关Socket的<a href="http://www.wocome.com" target="_blank">编程</a>接口。对于Java而言已经简化了Socket的编程接口。首先我们来讨论有关提供固定位置的服务方是如何建立的。Java提供了ServerSocket来对其进行支持。事实上当你创建该类的一个实力对象并提供一个端口资源你就建立了一个固定位置可以让其他计算机来访问你。</p>
<p style="text-indent: 2em">ServerSocket server=new ServerSocket（6789）；</p>
<p style="text-indent: 2em">这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的。另外端口号是从0~65535之间的，前1024个端口已经被Tcp/Ip 作为保留端口，因此你所分配的端口只能是1024个之后的。</p>
<p style="text-indent: 2em">好了。我们有了固定位置。现在所需要的就是一根连接线了。该连接线由客户方首先提出要求。因此Java同样提供了一个Socket对象来对其进行支持。只要客户方创建一个Socket的实例对象进行支持就可以了。</p>
<p style="text-indent: 2em">Socket client=new Socket（InetAddress.getLocalHost（），5678）；</p>
<p style="text-indent: 2em">客户机必须知道有关服务器的IP地址。对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供。它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。</p>
<p style="text-indent: 2em">好了，上面的方法基本可以建立一条连线让两台计算机相互交流了。可是数据是如何传输的呢？事实上I/O操作总是和网络编程息息相关的。因为底层的网络是继续数据的。除非远程调用，处理问题的核心在执行上。</p>
<p style="text-indent: 2em">否则数据的交互还是依赖于IO操作的。所以你也必须导入Java.io这个包。Java的IO操作也不复杂。它提供了针对于字节流和Unicode的读者和写者，然后也提供了一个缓冲用于数据的读写。</p>
<p style="text-indent: 2em">BufferedReader in=new BufferedReader（new InputStreamReader（server.getInputStream（）））；</p>
<p style="text-indent: 2em">PrintWriter out=new PrintWriter（server.getOutputStream（））；</p>
<p style="text-indent: 2em">上面两句就是建立缓冲并把原始的字节流转变为Unicode可以操作。而原始的字节流来源于Socket的两个方法，getInputStream（）和getOutputStream（）方，分别用来得到输入和输出。那么现在有了基本的模型和基本的操作工具，我们可以做一个简单的Socket例程了服务方：</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>import Java。io。*;
            import Java。net。*;
            public class MyServer
            {
            public static void main
            (String[] args) throws IOException
            {
            ServerSocket server=new
            ServerSocket(5678);
            Socket client=server.accept();
            BufferedReader
            in=new BufferedReader(new
            InputStreamReader
            (client.getInputStream()));
            PrintWriter out=new
            PrintWriter(client.getOutputStream());
            while(true)
            {
            String str=in.readLine();
            System.out.println(str);
            out.println("has receive...");
            out.flush();
            if(str.equals("end"))
            break;
            }
            client。close();
            }
            }</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em">这个程序的主要目的在于服务器不断接收客户机所写入的信息只到。客户机发送"End"字符串就退出程序。并且服务器也会做出"Receive"为回应。告知客户机已接收到消息。客户机代码：</p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>import Java.net.*;
            import Java.io.*;
            public class Client{
            static Socket server;
            public static void
            main(String[] args)
            throws Exception
            {
            server=new Socket
            (InetAddress.getLocalHost()，5678);
            BufferedReader in=new BufferedReader(new
            InputStreamReader(server。getInputStream()));
            PrintWriter out=new
            PrintWriter(server.getOutputStream());
            BufferedReader wt=new BufferedReader(new
            InputStreamReader(System.in));
            while(true)
            {
            String str=wt.readLine();
            out.println(str);
            out.flush();
            if(str.equals("end"))
            {
            break;
            }
            System.out.println(in.readLine());
            }
            server.close();
            }
            }</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<img src ="http://www.blogjava.net/panboy/aggbug/219265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/panboy/" target="_blank">壞尛孖</a> 2008-08-01 11:08 <a href="http://www.blogjava.net/panboy/articles/219265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java学习路线</title><link>http://www.blogjava.net/panboy/articles/217996.html</link><dc:creator>壞尛孖&#xE;</dc:creator><author>壞尛孖&#xE;</author><pubDate>Mon, 28 Jul 2008 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/panboy/articles/217996.html</guid><wfw:comment>http://www.blogjava.net/panboy/comments/217996.html</wfw:comment><comments>http://www.blogjava.net/panboy/articles/217996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/panboy/comments/commentRss/217996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/panboy/services/trackbacks/217996.html</trackback:ping><description><![CDATA[<p>一：J2SE <a style="color: #ff6600" href="www.wocome.com">面向对象</a>－封装、继承、多态<br />
内存的分析<br />
递归<br />
集合类、泛型、自动打包与解包、Annotation<br />
IO <br />
多线程、线程同步 <br />
TCP/UDP <br />
AWT、事件模型、匿名类<br />
正则表达式<br />
反射机制</p>
<p>2：<a style="color: #ff9900" href="www.wocome.com">数据库</a>（Oracle或者MySQL）<br />
SQL语句<br />
多表连接，内外连接， 子查询等<br />
管理表、视图、索引、序列、约束等<br />
树状结构存储<br />
存储过程、触发器 <br />
数据库设计三范式、</p>
<p>3：JDBC<br />
JDBC基础<br />
连接池 <br />
树状结构存储与展现<br />
DataSource &amp; RowSet <br />
JDBC连接Oracle及MySQL</p>
<p><br />
4：HTML_CSS_JAVASCRIPT<br />
html、css、javascript基础语法<br />
JavaScript Form判断 <br />
Dom编程基础（事件处理等）<br />
JS常用效果如TreeView、下拉联动等<br />
JS学习方法 <br />
JS调试方法 <br />
DreamWeaver初步（建立HTML、Table、Form、CSS）等 </p>
<p>5：Servlet &amp; JSP<br />
tomcat基础 <br />
servlet基础 <br />
web.xml配置基础 <br />
web application的结构 <br />
servlet生命周期 <br />
request response等常用方法 <br />
ServletContext类 <br />
HTTP协议基础（GET POST）<br />
Cookie <br />
Session <br />
Application </p>
<p>JSP的几种语法（包括JSTL等）注意在项目中练习，不要拘泥于语法细节而裹步不前。 </p>
<p>6：Struts<br />
多层架构理论 <br />
Model 1 and Model 2 <br />
Struts基本概念 <br />
MVC<br />
Action与业务逻辑类的关系 <br />
在Struts与JSP之间传递数据<br />
Struts处理流程（控制流） <br />
Struts TagLib（了解常用的） <br />
JSTL<br />
ActionForm <br />
字段收集<br />
上传文件 <br />
类型转换 <br />
DTO <br />
动态Action Form <br />
验证框架<br />
ActionForward 转发与重定向 <br />
动态生成ActionForward <br />
全局与局部的ActionForward <br />
Action Forward Scope<br />
UnknownActionMapping <br />
Action的线程安全 <br />
I18N <br />
如何切换语言环境<br />
Struts异常处理机制 程序处理 自动处理 自定义异常处理器<br />
Struts的多模块配置 </p>
<p><br />
7：XML<br />
（XML/XSL、XSLT/DTD、SCHEMA等基础的概念、关于Java的编程可以暂时扔在一边） </p>
<p>8：Hibernate<br />
OR Mapping原理 <br />
Hibernate基础开发步骤 <br />
Hibernate基本接口（重点Session）<br />
普通属性映射 <br />
关联关系映射 <br />
Native SQL <br />
inverse lazy cascade <br />
继承关系映射 <br />
HQL <br />
性能优化 一级缓存 二级缓存 查询缓存<br />
事务与并发 悲观锁、乐观锁 <br />
OpenSessionInView <br />
CurrentSession <br />
（至于JTA、联合主键、自然主键、动态主键、Any类型 Creteria Queries Intercepter and Event 自定义类型等，可以暂时扔在一边） </p>
<p>9：Spring<br />
IOC/DI <br />
Spring配置<br />
Spring架构 <br />
AOP及<a style="color: #ff9900" href="www.wocome.com">Spring</a> AOP <br />
声明式事务（AOP）<br />
Spring + Hibernate Spring支持Web <br />
Scope <br />
（其他的Spring模块对于自学来说可以暂时扔在一边） </p>
<p>10：EJB3.0<br />
J2EE架构基础（JTA JMS等） <br />
EJB基础（地位及基本理论、分类等）<br />
Annotation <br />
Ant编译与部署EJB <br />
Session Bean <br />
EJB的依赖注入 <br />
Persistence API <br />
（可以用JBoss学习EJB3.0）</p>
<img src ="http://www.blogjava.net/panboy/aggbug/217996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/panboy/" target="_blank">壞尛孖</a> 2008-07-28 11:20 <a href="http://www.blogjava.net/panboy/articles/217996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>