黑客与画家

在所有的职业中,黑客与画家最像

黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术。黑客更像创作者,而不是科学家,了解黑客,不应该在科学家身上寻找启示,而是应该观察其他类型的创作者,画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此,大多数黑客不是通过大学课程学会编程的,他们从实践中学习,可能很小时就自己动手写程序了,即使上了大学,黑客学习编程依然主要通过自己写程序。黑客通过实践学习编程说明黑客与科学家的区别有多大,黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。

黑客做自己喜欢的事情的办法之一就是找一份为了赚钱的工作,还有一份为了爱好的工作

开源软件界的黑客早就这样做了,如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。

使用代码的行数考核程序员的工作效率容易实施,而容易实施的考核总是首先被采用
黑客真正想做的是设计优美的软件,考核这种工作是非常困难的,唯一有效的外部考核就是时间。经过岁月的洗礼,优美的东西生存发展的机会更大,丑陋的东西往往会被淘汰,人们无法考核你的工作,甚至误解你的工作,这都不是最糟的事,更大的危险是自己也会误解自己的工作,黑客新想法的最佳来源,并非那些名字里有“计算机”三个字的理论领域,而是来自于其他创作领域。与其到“计算理论”领域寻找创意,你还不如在绘画中寻找创意。

“做什么”和“怎么做”不应该分得太开

如果你决定做一件事,却不知道怎么做,你就是在自找麻烦。但是,只是单纯地决定如何实现某种规格,那肯定不是黑客。黑客的最高境界是创造规格(有些功能有无数种实现的办法,比如保存某些数据)。虽然看起来,做到这一点的最好方法就是先做出一个样品把规格实现了。创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。

如果你觉得画某样东西很乏味,那么你出来的东西就会真的很乏味

准确画出一个事物的方法,不是一点一点地把它画出来,这样误差会累积起来,最终导致整幅画失真。应该画出一个大致准确的轮廓再逐步加工,可以按照自己的想法画出初稿,接下来再逐步加上细节,它并不对你构成限制,你可以在原型上做出修改直接画出最后的样子。一幅画是逐步完成的,你从一块一块砖头开始画起一幢楼用不了多久就会感到很厌倦。开始应该是一张草图,然后再逐步填加细节。这种方式可以一直看到效果,假如你正在写的代码一个小时之后就可以看到运行结果,你不会对最后的成品一点感觉都没有。有时,原先的构想看来是错的,就必须动手修改。油画放在X光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部的表情经过了调整。黑客也应该这样工作,你不能先有一个完美的系统的设计,然后再动手编程,在编程的时候,根据需要当场修改,最终会有一个更好的结果。

好的设计是大胆的设计,放手去干

一股脑不管对错,先把代码堆上去,再慢慢修改的编程方法看上去好像编程就是在调试,这样的方法其实有一个正式的名称叫做:打草稿,把整个程序想清楚应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样,明白这一点对软件设计有重大影响。它意味着,编程语言首要的特性应该是允许动态扩展(malleable)。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序,它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那样编程,那么静态类型(static typing)是一个不错的概念。但是,没用几个黑客喜欢用静态类型语言编程,我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的脑袋上,努力地挑选词语和编译器交谈。

 开源社区的好处之一就是使得学习编程变得更容易了

临摹一直是美术学习的重要的一部分,临摹迫使你仔细研究一幅画是如何完成的。同样地,黑客可以通过研究优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。

最重要的是“再设计”

观察画家的作品,就能看出他们是怎么一步步通过实践学习绘画的。你就会发现每幅画所用的技巧,都是建立在上一幅作品学到的东西之上,某幅作品如果有特别出色之处,你往往能够在更早的作品上发现一个初期版本,应该定期地从头开始,而不是长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版的形式包括进去。不要害怕修改以后还不如之前,再多的修改都不过分,你必须对既自己的能力有信心、,又对自己的能力抱着怀疑态度,这并不矛盾。要敢于面对一切,有永不退缩的信念,但不是自大,乐观的同时要注意哪里做得不够好,对自己有更高的要求,即使其他人看到觉得非常好,也要不断检查有没有缺陷。只有对现状不满,才会造就杰出的成果。开发时要自信想着一定能够完成,不管多难也要把剩下的部分做完,做完之后要不断反思再去改。有的战机版本多的数不清,新的型号较早期型号就有巨大区别,如果F-14战机是最开始设计时的样子,就不会成为令所有军迷痴迷的大猫。画是永远都画不完的,你只是不再画下去而已。

黑客就像画家,工作起来是有心理周期的

有时候,你有了一个人兴奋的新项目,愿意为它一天工作16个小时。等过了这一阵,又会觉得对所有事情都提不起兴趣,有时不得不松开离合器,暂时放手防止热情熄火。有些工作需要投入巨大的热情,另一些工作则是不需要很操心的日常琐事比如改bug(debug)。在厌倦的时候去做那些比较容易的工作是个不错的主意。对于编程,这实际上意味着你可以把 bug 留到以后解决。只有在消灭bug这个时候,编程才变得直接和机械,接近普通人想象中的编程的样子。

一幅优秀的绘画作品必须比它应该有的样子更好

达·芬奇对作品每一部分的认真程度完全不取决于预料中会不会有人仔细看这个部分,坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。同样地,优秀的软件也要求对美的狂热追求。如果你查看优秀软件的内部,就会发现那些预料中没有人会看见的部分也是优美的。优美的代码的缩进不会乱七八糟,你不会在诗一样的代码里看到丑陋的变量名。

必须具备灵感,有自己的思维

如果黑客只是一个负责实现领导意志的技术工人,职责就是根据说明书写出代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。

绘画和编程不仅能教会我们如何管理自己的工作,还能教会我们如何与他人一起工作

历史上许多伟大的艺术品都是多人一起合作的结果,当多个画家共同创作一幅作品时,每个人画的部分都是不一样的。但是,你肯定找不到某个部分是两个人一起画的,这也是多人共同开发一个软件的正确模式。需要合作,但是不要“合”得过头。如果一个代码块由三四个人共同开发,就没有人真正“拥有”这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项目分割成严格定义的模块,每一个模块由一个人明确负责。就像绘画作品一样,大多数软件是为人类用户准备的。所以,黑客必须像画家一样,时刻考虑到用户的人性需要,这样才能做出伟大的产品。你必须能够站在用户的角度思考问题,也就是说你必须学会换位思考,从他人的角度思考问题正是成功的奥秘所在,了解对手正是为了打击对手。会不会“换位思考”可能是最重要的单个因素。如果外行人问“什么是编程语言”,你这样回答:“哦,高级语言就是编译器的输入代码,用来产生目标码。……如果对方不知道什么是编程语言,那么他显然也不会知道高级语言、编译器和目标码是什么东西。

好的设计是简单的、有启发性的设计,是解决主要问题的设计

少即是多,软件应直接面对真正的问题,页面应该简洁高效而不是用华而不实的界面用来掩饰结构的苍白,软件的部分功能就是解释自身。看到这里你脑子一定会联想到某些让人摸不着头脑的软件,为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。你要明白,用户使用你的软件不会预先做好学习,他们没有任何准备就开始用了,所以最好能符合用户的直觉,别指望用户去读说明书。源代码也应该可以自己解释自己,《计算机程序的结构与解释》一书的卷首语写道:“程序写出来是给人看的,附带能在机器上运行”。“换位思考”不仅是为了用户,这对开发者也是有利的,因为你也会读自己写的东西,几个月后再读自己的程序,你可能会发现根本看不懂一点了。

好的设计是永不过时的设计

人们真正注意到你的时候不是看到你在那里,而是发现过了这么久你居然还在那里。如果解决方法是丑陋的,那就肯定还有更好的办法,如果你永不过时那么你永远都是流行的。

好的设计是艰苦的设计

作出伟大作品的人都工作艰苦,肖像画通常占据很高的地位,如果你把树枝画偏了五度也不一定有人能发现,但是人的眼睛被画偏一点人们一眼就能看出来,所以画肖像画必须加倍的小心。如果你要长距离跑步,应该扔掉一切不需要的装备,解决问题是头等重要的事情时,多余的装饰就被仍到一边了,并非所有的苦都要吃,你需要的是咬牙拼命冲刺的痛苦而不是受伤的痛苦。

好的设计看似容易,这是一种错觉

看上去越是容易,实际上就越需要反复修改。长跑运动员比赛看上去跑得很轻松很快,其实一直濒临崩溃,就像在撞一堵接一堵的墙,是强大的意志力迫使自己直到终点才停下。几根线放对位置,普通人也可以整出一张优秀的画,但是只要差一点就不行。

幽默一定程度上反映了力量,是强壮的一种表现

始终拥有幽默感就代表你对厄运一笑了之,轻松面对自己的人生。复杂问题简单应对,人生注定并不简单。

黑客就是画家,通过艺术创作主导这个时代的画家

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Web黑客攻击流程通常包括以下几个步骤: 1. 收集信息:黑客通过搜索引擎、目录扫描、端口扫描等方式,收集目标网站的信息,包括IP地址、域名、操作系统、Web应用程序、中间件、数据库等信息。 2. 发现漏洞:黑客使用各种工具和技术,如漏洞扫描、漏洞利用、社会工程学等,发现目标网站中存在的漏洞,如SQL注入、XSS漏洞、文件上传漏洞等。 3. 利用漏洞:黑客通过利用已经发现的漏洞,获取目标网站的敏感信息,包括用户名、密码、个人信息、公司机密等。 4. 掩盖攻击痕迹:黑客为了掩盖攻击痕迹,会删除日志记录、覆盖攻击轨迹、伪造攻击来源等。 攻击策略主要有以下几种: 1. SQL注入攻击:黑客通过构造恶意的SQL语句,利用Web应用程序中的漏洞,获取数据库中的敏感信息。 2. XSS攻击:黑客通过在Web页面中插入恶意脚本,窃取用户的Cookie信息,盗取用户的账号和密码等敏感信息。 3. CSRF攻击:黑客通过伪造请求,欺骗用户在不知情的情况下执行某些操作,如修改密码、转账等。 4. 文件上传漏洞攻击:黑客通过上传恶意文件,执行后门程序,获取系统权限,进而控制整个网站。 5. 远程代码执行攻击:黑客通过构造恶意代码,利用Web应用程序中的漏洞,远程执行恶意代码,获取系统权限,窃取敏感信息。 为了有效防御Web黑客攻击,我们需要不断学习和掌握最新的安全技术和工具,同时加强Web应用程序中的安全防御措施,如输入验证、输出编码、访问控制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中二电工吹短笛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值