英文原文来自http://www.catb.org/~esr/faqs/hacker-howto.html,How To Become A Hacker,作者是埃里克·斯蒂芬·雷蒙(Eric Steven Raymond),著名的《Unix编程艺术》就出自他手,他的一句话对开源运动有很大影响——“足够多的眼睛,就可让所有问题浮现”(given enough eyeballs, all bugs are shallow),这句话也被称作林纳斯定律。

下面是译文部分。

为什么写这篇文章?

作为Jargon File的编辑和一些其他类似的知名文档的作者,我经常收到来自热情的网络新手们的电子邮件请教:我如何才能学着成为一名神奇的黑客?早在1996年,我就注意到似乎没有任何FAQ或web文档能解决这个至关重要的问题,因此我开始了这篇文章。

如果你正离线浏览这篇文章的快照,你可以在这个链接上得到文章当前的最新版本:http://catb.org/~esr/faqs/hacker-howto.html。

黑客是什么?

Jargon File有一堆“黑客”的定义,大多数是说技术熟练、解决问题的快感和克服阻碍等。如果你想知道如何成为一名黑客,只有两件事是真的相关的。

最早的黑客是那些最初使用微电脑和阿帕网实验的专业程序员及网络专才。黑客们创建了Internet,黑客们开发出了Unix操作系统,黑客们打造了万维网。如果你是他们的一部分,如果你对这个文化有所贡献,并且这个文化中有人认识你,并叫你黑客,那么你就是一名黑客。

黑客并不局限于软件黑客,黑客是一种态度,在其他领域我们也能见到黑客的身影,像电子学,音乐。软件黑客认识到这种同类的精神到处都有,并也称他们为黑客。虽然如此, 但接下来我们还是只关注软件黑客们的技能和态度。

有一群人高呼他们自己是黑客,可实际上差得远。这些人(主要是处于青春期的男孩们)为侵入电脑和盗用电话系统感到愉快。可真正的黑客叫他们“破坏者(crackers)”,并不认同他们是黑客,相反认为他们是懒惰的、不负责任的、不是很优秀的,破坏安全并不能使你成为黑客,就像用铁线来偷车的人并不被称作汽车工程师一样。不幸的是,很多记者和作家被骗用黑客来称呼那些破坏者们,这一直让真正的黑客很恼怒。

最基本的不同是:hacker,创造,而cracker,破坏。

黑客的态度

1. 世界充满了迷人的问题等待人们来解决

2. 没有要必须解决两次的问题

3. 单调乏味是恶魔

4. 自由无价

5. 态度不代表能力

黑客解决问题并创建新事物,他们信仰自由和自愿的互助。如果你想成为黑客,就要具备这些,并相信这些。

但是如果把刻意去培养这些态度当成成为黑客的方法,那你还是差点。只有去相信它才是最重要的。说白点,就是还要从精神上塑造。正如下面这首禅诗所说:

To follow the path:
    look to the master,
    follow the master,
    walk with the master,
    see through the master,
    become the master.

走出这样的道路吧:

向大师看齐,

追随他的脚步,

也学着跟他同路,

与他谈笑风生,

成为大师。

所以如果你想成为一名黑客,就重复下面的事情吧,并相信它。

1. 世界充满了迷人的问题等待人们来解决

成为一名黑客是充满乐趣的,但需要付出很多努力。而努力需要动机。例如运动员的动机是使他们的身体更优秀而得到的一种身体上的愉悦,使他们突破自身身体的极限。同样,要成为一名黑客你必须要从解决问题当中得到基本的快感,磨砺你的技能,实践你的才智。

如果你不是感觉这样去做是自然的那种人,你需要让自己先去成为这种人。否则你会发现你的黑客能量就会被性,钱和社会认可这样的乱七八糟的事情削弱。

(你也必须要对自己的学习能力有信心——这种信念即使在面对即将要解决的问题你一无所知时照样存在,如果你解决了一块,并且学习了,你就会学到足够的东西来解决下一块——这样下去,直到搞定所有的)

2. 没有要必须解决两次的问题

有创造力的大脑是宝贵但却有限的资源。他们不应当被浪费在重新造轮子上,因为还有很多吸引人的新问题等着他们。

成为一名黑客,你必须相信其他黑客的思考时间是宝贵的——甚至它是一种道德上的责任,你要学会分享信息,解决问题后要懂得分享自己的解决方法,这样其他黑客就可以解决新的问题,而不必没完没了得重复解决旧问题。

然而要注意,“没有要解决两次的问题”不是指你必须考虑所有的已经存在的神圣的解决方法,也不是指只有一种解决问题的正确方法。经常地,我们通过研究一个解决方法来对一个陌生的问题有很多了解,这时对的,而且有必要,这样我们可以做得更好。不好的是存在一些假的技术,或一些障碍(如闭源代码)阻碍了一个好的解决方法被重用,使人们不得不重新造轮子。

(当然你不必认为你有义务贡献你所有的有创造力的产品,虽然黑要做的就是得到其他黑客最大的尊重。把自己的技术卖够钱使得你有足够的食物,房租和电脑,并不与黑客价值相违背。用你的黑客技能去支撑家庭甚至致富是好的,对的,只要你不忘记你对黑客艺术的忠诚和与你同样的黑客们就好了。)

3. 单调乏味是恶魔

黑客(或者有创造力的人)不应当是无聊的,或者不得不单调辛苦地干着愚蠢的重复工作。因为如果你这样了意味着你不是在做你应当做的——解决新问题。这样的浪费会伤害每个人。所以单点乏味不单单是不愉快的,更是一个恶魔。

要像一个黑客,你必须足够相信这条才能去尽可能地去除无聊的事情,不只是为了你自己,也为了其他人(尤其是其他黑客)。

(对此有一个显著的例外。有时黑客做一些对旁人来说似乎重复或无聊事情,实际上是在做理清思维的训练,或者为了获得一种技能,再或者拥有一些你没有的实际经验。但这只是出于自己的选择——会思考的人不会把自己束缚在一个无聊的境况中。)

4. 自由无价

黑客天生反对专制。任何给你施加命令来阻止你解决正在吸引你的问题而且这些命令来自专制的头脑的人一般会找一些令人毛骨悚然的愚蠢的理由来这样做。所以如果你发现了这种专制的态度就要敢于跟它斗争,以免让它压迫你和其他的黑客。

(并不是与所有的专权作斗争都是一样的。孩子们需要被引导,并且管束他们不让他们犯罪。虽然需要耗费时间来执行命令,但如果能获得一些他们真正想要的,黑客或许会同意某种专权的存在。但那是一种有限的,有意识的交易;屈服于专制是不提倡的。)

独裁者钟爱审查和保密。他们不信任志愿的合作和信息共享——他们只喜欢他们能控制的“合作”。因此要像一名黑客,你必须养成一种对审查,保密和强权的使用或者强迫负责任的成年人的这种欺骗手段的本能的敌意。你必须乐意去执行这种信念。

5. 态度不代表能力

要成为一名黑客,你必须要养成这些态度中的一些。但是只是获得一种态度并不能使你成为一个黑客,如同并不能使你成为一名冠军运动员和摇滚巨星一样。成为一名黑客需要才智,实干,付出和努力。

因此,你要学会不去信任态度,而是尊重每一种能力。黑客不会让难题浪费他们的时间,但他们崇拜能力——尤其是黑客能力,但是任何能力都是有价值的。掌握很少有人能掌握的技能是好的,如果这些技能包括对内心的震动,打磨和浓缩就是最好的。

黑客的基本技能

1. 学会如何编程

2. 获得一个开源的Unix并学会使用和运行它

3. 学会如何使用WWW并且写HTML

4. 如果你不会实用的英语,去学会它

黑客态度是至关重要的,但是技能更重要。态度代替不了技能,在你被任何黑客称为黑客之前,有一些基本的技能需要你去拥有。

这些技能随着时间会慢慢改变,因为技术会创造新的技能,而淘汰旧的。例如,过去需要用机器语言编程,直到今天有了HTML就不需要了。但是现在很清楚需要以下技能:

1. 学会如何编程

当然这是基本的黑客技能。如果你不懂得计算机语言,我建议从Python学起。设计简介,文档详实,适合初学者。尽管它是一个好的第一语言,但它不只是一个玩具;它很有力量,而且灵活,适合大的工程。我写了一个更详细的Python的评估。在 Python web site 上有好的教程。在 Computer Science Circles 上有个优秀的第三方的教程。

我过去建议把java当成一门初学的好语言,但是这个批判改变了我的主意(搜索“The Pitfalls of Java as a First Programming Language”)。黑客不能强有力地把java当成解决问题的有效工具;你必须知道它如何实际工作。现在我认为最好从C和Lisp学起,而不是java。

这里有一个更普遍的观点。如果一门语言代替你做了太多事,它是一个好的工具同时却不是一个适合学习的语言。不只是语言有这种问题;web app framework,像RubyOnRails,CakePHP,Django,很容易去得到肤浅的理解,给你带来简单的解决方法,但是当你去解决难题甚至是debug都缺少应有的资源。

如果你陷入高深的编程,你就要学习C,它是Unix的核心语言。C++跟C很相近;所以如果你了解其中一个,学习另一个也不是难事。然而这两个中没有哪个对你首次学习语言来说是好的,容易的。实际上,你避免用C编程的越多,你就会越有效率。

C很有效率,也很会节省机器资源。但不幸的是,为了得到效率C要求你手动做很多底层的资源管理(如内存)。所有的底层代码都是复杂的,容易导致bug,将会耗费你大量的时间在debug上。随着今天的机器越来越强大,通常有一个坏的tradeoff——有效地使用一门使用机器时间很少的语言是更聪明的,这时你的时间就会更有效率,就像Python。

还有Perl和LISP对黑客也有实际的重要性。如果用于实践,Perl很值得去学习;它被广泛用于动态网页和系统管理,因此即使你从不使用Perl你也应当学会读它。很多用Perl的人都是出于这样的目的的,这样就可以在不需要C的机器效率的工作上避免使用C编程。你需要能够理解他们的代码。

LISP值得学习是出于另一种目的——当你最后掌握它时你会获得深刻的启迪和经验。这种经验会使你在剩下的日子里成为一个更好的程序员,即使你实际上并不常使用LISP。(如果你想早早地得到一些LISP的初始经验,可以去编写或修改Emacs文本编辑器的编辑模式,或者GIMP的Script-Fu插件。)

实际上最好要全部学会这五种语言,Python,C/C++,Java,Perl和LISP。除了成为最重要的hacking语言,它们代表着五种不同的编程方法,每一种都会对你有价值。

你需要学习如何用一般的方法去思考编程问题,否则你就不会达到拥有这些技能的黑客水平或者只是一个在简单叠加语言的程序员。你可以学习语言的特征—— 从书中学习知识,但是只有通过实践和工作才能把那些知识转化成生存的技能。就通过读代码和写代码来去做吧。

Peter Norvig,是谷歌顶级黑客之一,同时是AI方向里使用最广泛的教科书的合作作者, 写过很多优秀的文章如Teach Yourself Programming in Ten Years。他编程成功的秘诀值得好好学习。

学习编程就如同学习写好的自然语言一样。最好的方式就是读高手写的东西,自己去写一些东西,先读很多,尝试去写一些,再读很多,再多写一些...就这样去重复,直到你可以写出强大而简洁的东西。

关于这个学习过程我在How To Learn Hacking 中已经说得很详细了。虽然说得简单,但实际上并不容易。

2. 获得一个开源的Unix并学会使用和运行它

我认为你有一台电脑并且可以使用它。(先花点时间感激一下那意味着什么。黑客文化起源的时候,个人电脑很贵,以致于个人不能拥有它们。)一个菜鸟要获得黑客技能最重要的单个步骤就是获得一份Llinux或一种BSD-Unix的拷贝,把它安装到PC上,运行它。

是的,这个世界上除了Unix还有其他的操作系统。但是它们都是以二进制形式发布的——你读不到源码,更不能去修改它。尝试去学着hack一个跑windows或其他闭源操作系统的机器就像尝试去学穿着模子在跳舞一样。

(未完待续)

How to be a hacker相关推荐

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之hacker

    附加题 hacker,题目描述:hacker,附件下载 hackerhttps://download.csdn.net/download/qpeity/33230528解压缩得到一个EXE文件 ARE ...

  2. 程序猿崛起——Growth Hacker

    新生事物总是充满了生命力,你不需要去关注,它也会不断的跳入你的眼帘.最近常常看到的一个词汇叫做Growth Hacker,这个词汇如此之新,以至于还没有对应的中文翻译,直接翻译为成长黑客似乎也不妥帖. ...

  3. 基于用户投票的排名算法(一):Delicious和Hacker

    作者: 阮一峰 日期: 2012年2月24日 互联网的出现,意味着"信息大爆炸". 用户担心的,不再是信息太少,而是信息太多.如何从大量信息之中,快速有效地找出最重要的内容,成了互 ...

  4. Hacker's Browser

    今天给大家推荐一个Chromium浏览器插件.Vimium The Hacker's Browser. Vimium provides keyboard shortcuts for navigatio ...

  5. hacker:Python通过对简单的WIFI弱口令实现自动实时破解

    hacker:Python通过对简单的WIFI弱口令实现自动实时破解 目录 输出结果 实现代码 输出结果 实现代码 #Python通过对简单的WIFI弱口令实现自动实时破解 import sys im ...

  6. Hacker:编写高级语言脚本可破解各个云盘的下载速度限制

    Hacker:编写高级语言脚本可破解各个云盘的下载速度限制 目录 输出结果 代码 输出结果 代码

  7. Hacker News 12 月招聘趋势:React 已霸榜 19 个月

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   Hacker News 近日发布了2018年12月的招聘趋势榜,数据显示,React 在 2018 年一直保持着领先地位,如果再算上2017 ...

  8. Hacker News与Reddit的算法比较

    Hacker News与Reddit的算法比较 郑昀 20101213 Hacker News是Y Combinator旗下的一个新闻频道,属于digg类产品, SEOmoz曾经在2008年7月隆重推 ...

  9. iOS Hacker 重签名实现无需越狱注入动态库 dylib

    iOS Hacker 重签名实现无需越狱注入动态库 dylib 一.获取 ipa 文件 iOS 的应用都是打包成 ipa 的文件格式,ipa 文件实际上就是 zip 格式的文件,通过 unzip 可以 ...

  10. iOS Hacker 动态库 dylib 注入

    iOS Hacker 动态库 dylib 注入 很多情况下我们希望自己写的代码能够在其他应用中运行,如果代码简单的话,可以写 Tweak 或者使用 Cycript.但如果代码多的话,那最好是写一个动态 ...

最新文章

  1. A-Frame不如x3dom
  2. 我是架构师--设计模式-单例模式
  3. 集体智慧编程学习笔记——第一讲
  4. 大数据风控之信贷审查的5大步骤及要点
  5. 关于IOCP完成端口的文章
  6. 11.4 iftop:动态显示网络接口流量信息
  7. java锁性能对比_提高Java的锁性能
  8. axure 怎么看距离_AXURE 怎么获取当天日期,并计算该日期距离年底还有多少天?...
  9. yum安装软件出错解决方法
  10. 《南溪的目标检测学习笔记》——主干网络backbone设计的学习笔记
  11. c++求矩阵的秩_利用Python矩阵求逆、特征值及特征向量
  12. 计算机语言环境变量,Win7环境变量中如何切换语言
  13. 05_dither(抖动)
  14. Pytorch官方文档个人阅读总结
  15. MySQL数据库 - 复杂查询(二)第二关
  16. set, setenv, export的区别
  17. 视频号如何发表视频呢?
  18. 全球数字高程模型(数据)
  19. 基于Detectron2的BlendMask训练 BlendMask环境配置 COCO数据集
  20. 投资的过程:进行高质量的研究

热门文章

  1. poj - 3254 Corn Fields (状态压缩dp入门)
  2. Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题
  3. CobaltStrike的使用
  4. mysql桥梁表_以JDBC为桥梁入门MySQL数据库基础
  5. [python] 基于k-means和tfidf的文本聚类代码简单实现
  6. iOS逆向之深入解析如何Hook所有+load方法及Category的处理
  7. Git之签署工具GPG的安装和使用
  8. 【STM32】FreeRTOS任务挂起和恢复API
  9. 【Linux】一步一步学Linux——atrm命令(140)
  10. Java 中常见的异常和自定义异常