你不知道的黑客

前言 我相信大家对于『黑客』这个词并不陌生,特别是对我们搞计算机的人来说,那是相当的熟悉。 在一般人的眼里『黑客』(hacker)就是入侵计算机的人,就是『计算机犯罪』的同义词。但是,它的原意并非如此。 起源 在 20 世纪 60 年代初,麻省理工学院有一个学生团体叫做『铁路模型技术俱乐部』,他们把难题的解决方法称为 hack。 这里,hack作为名词有两个意思,既可以指很巧妙或很便捷的解决方法,也可以指比较笨拙、不那么优雅的解决方法。两者都能称为hack,不同的是,前者是漂亮的解决方法(cool hack 或 neat hack),后者是丑陋的解决方法(ugly hack 或 quick hack)。hack 的字典解释是砍(木头),在这些学生看来,解决一个计算机难题就好像砍倒一棵大树。那么相应地,完成这种 hack 的过程就被称为 hacking,而从事 hacking 的人就是 hacker,也就是黑客。 所以在 20 世纪 60 年代,『黑客』这个词是一种能力的象征,而且自称黑客的人他们比如包含着高度的革新、独树一帜的风格、精湛的技艺,也就是说在其他人的眼中,他们就是大佬。 自由软件基金会创始人理查德·斯托尔曼认为黑客的行为必须同时满足,好玩、高智商、探索精神三个特点才是真正的黑客。这也是黑客所追求的三种价值,而不是实用性或金钱。 从这个意思出发,我们有时也会用到这个,比如我平时在实现某一个功能的时候,用常规的方法解决不了(或者说当时想不到科学的解决方法),用了一半不是那么科学的方法(或者不知道为什么这种方法就可以解决这个问题)的时候,我们也许会说我们用了一种 hack 的方式来解决了这个问题,并且会在这个方法写上一个注释标识是 hack,因为有可能其他人不知道为什么要这么用。 黑客精神 在史蒂文·利维出版的黑客著作 —- 《黑客:计算机革命的英雄》中,将黑客的价值观总结为六条『黑客伦理』: 使用计算机以及所有有助于了解这个世界本质的食物都不应该收到任何限制。任何事情都应该亲手尝试。 信息应该全部免费 不信任权威,提倡去中心化 判断一名黑客的水平应该看他的技术能力,而不是看他的学历、年龄或地位等其他标准 你可以用计算机创造美和艺术 计算机使生活更美好 根据这六条『黑客理论』,黑客价值的核心原则可以概括为:分享、开放、民主、计算机的自由使用、进步。 历史上一些最优秀的程序员都是『黑客』。包括 Unix 创始人丹尼斯·里奇和肯·汤普森,Linux 创始人莱纳斯·托瓦兹,『开源运动』创始人埃里克·雷蒙德,微软公司创始人比尔·盖茨等等。正式黑客把计算机推向了更高的高度。 『黑客』被误解的原因 根据『黑客伦理』,黑客就是不服从管教,具有叛逆精神,根据史蒂文·利维描述的就是:“对于黑客来说,关着门就是一种挑衅,而锁着门就是一种侮辱。 ······ 黑客相信,只有有助于改进现状、探索未知,人们就应该被允许自由地使用各种工具和信息。当一个黑客需要一样东西来帮助自己创造、探索或者改正某种设备时,他不会自找麻烦,不会接受那些财产专有权的荒谬概念。” 他们侵入计算机系统的原因不是为了自己利益,而是为了自由,跟那些计算机罪犯是不同的。 然而,在 20 世纪 80年代初,一帮青少年黑客入侵了美国和加拿大的一些计算机系统,被《新闻周刊》封面报道的标题就是『小心:黑客在行动』,这件事被广泛报道,在报道时媒体就把黑客的行为注意在一个很窄的方面:入侵系统。同时,那些入侵计算机的程序员也自称『黑客』,从此黑客在大众心中就成了有害人群。 结语 真正的黑客致力于改变世界,让世界运转得更好。 我们把传统意义上的黑客称之为 hacker,而那些而已入侵计算机系统的人应该称为 cracker(入侵者)。 作为程序员的我们都应该以传统意义的黑客为目标努力,也许你就是下一个黑客,下一个改变世界的人。 整篇文章大部分内容来自于《黑客与画家》,可以推荐给大家都去看下这本书,感受一下那个时代正真的黑客精神。 ** 最后,大家可以在评论里面留言,你心目中最伟大的黑客都有谁。** 大家好,我是桃翁,我为自己代言!...

April 13, 2018 · 1 min · 71 words · 桃翁

函数式编程笔记

过去编程方式主要是以命令式编程为主,什么意思呢?简单说电脑的思维方式和我们人类的思考方式是不一样的。我们人类的大脑擅长的是分析问题,提出一个解决问题的方案,电脑则是生硬的执行指令,命令式编程就像是给电脑下达命令,让电脑去执行一样,现在主要的编程语言(比如:Java,C,C++等)都是由命令式编程构建起来的。 ​ 而函数式编程就不一样了,这是模仿我们人类的思维方式发明出来的。例如:操作某个数组的每一个元素然后返回一个新数组,如果是计算机的思考方式,会这样想:创建一个新数组=>遍历旧数组=>给新数组赋值。如果是人类的思考方式,会这样想:创建一个数组方法,作用在旧数组上,返回新数组。这样此方法可以被重复利用。而这就是函数式编程了。 ...

January 5, 2018 · 1 min · 88 words · 桃翁

2021 年度总结

当我起笔写总结的第一感受就是 2021 在写作这件事儿上,我变懒了,对外输出才 8 篇文章。 我翻了下前几年的年度终结,每年好像都觉得自己输出不够多,所以打心底里还是很想把写作这个事情做好的,但是由于自己思维的懒惰,总是没有落实下去。 工作 最近几年自己把工作的地位还是放得很高的,特别是来了蚂蚁之后,一个是因为工作任务比较重,暂用比较多的时间;二是因为在现在的财富积累上绝大部分来自于这份工作。 今年对我而言工作状态终于从忙碌回归到了正常,从来蚂蚁到 2021 年上半年,我基本上都处于一个满负荷的状态,工作日的时间百分之 90 的精力在工作上,准确的说是在业务上。 这种满负荷(业务压力)让我没跟太多的时间去思考自己如何成长、业务应该怎么去发展等,所以之前多次跟女朋友说想换一份工作,干着太累,自己也没太多成长。 后面由于业务调整加上自己终于在公司内找到一个技术发力点,所以心态回到正常,业务压力也从忙碌到正常,现在的状态还是比较满意。 另外有点就是渐渐的对业务价值这个词有了更深的感触,对我们老板说的一句话印象比较深刻: 公司招我们来不是让我们成长的,而是给公司创造业务价值的,所以你在公司不管造多牛逼的轮子,一定是要为业务服务的。所以最好的情况就是我们基于业务造的轮子,即给业务带来了帮助,也让自己技术得到了成长,双赢,这当然也是公司希望的。 所以作为技术人员一定要去了解业务,然后才知道我们的业务怎么赚钱的,或者他们怎么帮公司赚钱的,这样我们才能更有机会创造业务价值。 开源 一、开源最重要的是维护。 我很开心自己在蚂蚁体验技术部这个部门,这个部门应该是国内开源氛围最好的部门之一。组内也有多个非常优秀的开源项目,今年自己有幸参与了一点点 ahooks 和 antd mobile 。 让我开心的不是提了多少个 PR,而是了解了维护一个开源项目有多么的难,参与其中之后了解了开源项目的维护过程,了解了其中的艰辛,很多从公司开源出去的项目真的是纯靠爱发电,并不会纳入个人 KPI 里。 另外一个老板说过一句话:前端的绝大部分的技术项目,打的是维护,并没有太多的技术壁垒。 真的,这认识,太到位了,做开源最重要的持续不断的维护,而不是某个 KPI 项目。有部分阿里开源的东西,可能后期不怎么维护了,所以现在很多一看到阿里开源的,担心的这是不是 KPI 项目,会一直维护吗?可见一直维护才是最重要的一环。 二、尽量的去参与开源。 想起以前上大学的时候,一直在用 antd,从未想过能有机会给流行的开源项目提 PR,但是现在感觉提 PR 跟平时写代码一样了。 我觉得主要是两个原因: 一个是自己身边有很多这样的机会,身边同事都搞开源,想加入进去会变得很容易。 二是因为自己工作多年了,水平比以前高不少,代码也能看懂,自己写的代码也还行,能顺利的参与进去。 所以如果现在想参与开源项目,但是觉得自己还没有能力的,不要着急,打磨一下,让自己稍微厉害一点了来,另外就是要多找机会,看到你想参与的开源项目,有 issue 你可以解决的,你可以主动去提 PR,如果没有被合进去也没关系,一般作者是会给你建议的,这也是你提升的机会。 三、开源其实没那么难。 以前总觉得要去创造一个开源项目,想着要去做一个技术难度很高的开源项目,但是一直想不到,就觉得开源太难了。 今年在了解很多开源项目,以及开源项目背后的发展过程之后,其实自己以前的思路不太多,总想着要去做创新,做很牛逼的东西,做出来直接提效翻倍啥的。 如果没有这样的能力或者机会,我建议如果想做开源可以从集合类的库开始做,或者说一些最佳实践,demo、模板等。 什么叫集合类的库,我举几个例子就明白了。 ahooks(多个常用的自定义 hooks 集合)、antd(中后台组件集合)、lodash(工具函数集合)等等,这种项目你看,每一个集合里的元素都不是很难,写一个 hook、写一个组件、写一个函数有啥难的嘛,平时写项目公用组件,或者 common 文件夹里不也有么。**难的是要多、好用、长期维护。**可能你一个元素使用的人不多,但是当你的集合越来越多,就会跟越来越多人的需求匹配之后,就有用了。 最佳实践,demo 、模板类是什么样的呢?这种项目用户更多的可能是新手、或者小公司,刚接触某个技术栈的时候不知道怎么上手,不知道怎么写一个项目,不知道怎么写好一个项目,你就可以写一份 demo、或者最佳实践,让别人参考,或者快速搭建自己的项目。 这种项目比如:antd pro,你是不是也可以去写一个 antd mobile pro?或者 element pro ?或者 xx pro。类似的最佳实践还有很多很多,自己可以发散一下。...

1 min · 151 words · 桃翁

为 VSCode 添加上程序员专用字体 Fira Code

简介 推荐一款号称程序员的字体 Fira Code,Fira 是 Mozilla 主推的字体系列,Fira Code 是基于 Fira Mono 等宽字体的一个扩展,主要特点是加入了编程连字特性(ligatures)。 Fira Code 就是利用这个特性对编程中的常用符号进行优化,比如把输入的「!=」直接显示成「≠」或者把「>=」变成「≥ 」等等,以此来提高代码的可读性。 效果如下: 经过我体验一周来看,这款字体还是不错的。 更多请前往GitHub地址查看。 设置步骤 Step 1. 下载 前往 Fira Code 字体的 GitHub 地址,clone 或者 download字体文件,主要有 5 个 .ttf 字体文件,地址https://github.com/tonsky/FiraCode/tree/master/distr/ttf Step 2. 安装 安装刚刚下载的 5 个字体文件:选择文件后点击鼠标右键,点击安装命令即可安装字体。 Step 3. 修改设置 打开 VS Code,如果在安装字体之前已经打开了,**一定要重启 **VS Code,否则识别不到新字体。 打开菜单File > Preferences > Settings,或者点击 File 后使用快捷键 Ctrl+,即可打开,然后打开 settings.json 文件,找到 editor.fontFamily字段,然后再把 Fira Code 添加到第一个,并且加上 "editor.fontLigatures": true 。 "editor.fontFamily": "'Fira Code', Menlo, Monaco, 'Courier New', monospace", "editor....

1 min · 83 words · 桃翁

函数式编程资料

Eric Elliott 函数式教程 征服 JavaScript 面试: 什么是函数式编程? 组合软件:1. 函数式编程的兴衰 为什么用 JavaScript 学习函数式编程?(软件编写)(第二部分) 函数式程序员的 JavaScript 简介 (软件编写)(第三部分) 高阶函数(软件编写)(第四部分) Reduce(软件编写)(第五部分) Functor 与 Category (软件编写)(第六部分) 函数式 Mixin(软件编写)(第七部分) 为什么在使用了类之后会使得组合变得愈发困难(软件编写)(第九部分) 借助函数完成可组合的数据类型(软件编写)(第十部分) JavaScript 让 Monad 更简单(软件编写)(第十一部分) JavaScript 轻量级函数式编程 JavaScript 轻量级函数式编程 Starkwang.log JavaScript函数式编程(一) JavaScript函数式编程(二) JavaScript函数式编程(三) 如果你想成为函数式编程爱好者 如何成为一位函数式编程爱好者(Part 1) 如何成为一位函数式编程爱好者(Part 2) 如何成为一位函数式编程爱好者(Part 3) 如何成为一位函数式编程爱好者(Part 4) 如何成为一位函数式编程爱好者(Part 5) 如何成为一位函数式编程爱好者(Part 6) 书籍 《JavaScript 函数式编程指南》推荐 《JavaScript 函数式编程思想》推荐 《JavaScript ES6 函数式入门经典》看了上面两本这本就不用买了 《JavaScript 函数式编程》 相关库 https://folktale.origamitower.com/ https://github.com/fantasyland/fantasy-land http://ramda.cn/ http://lodash.think2011.net/

1 min · 66 words · 桃翁