摩登概念白话问答(第二部分)
2016年4月6日

接着 191 期继续聊。

Q6: ping 是什么意思?

回答:ping 就是乒乓球的,乒,我们给一个服务器 ping 一下,就是想听到他给我们一个回音,用来看网络延迟的。

Q7: localhost 是什么意思?

就像我们 ping 一下一个域名,就可以看到一个公网 IP 一样。我们也可以在自己的机器上

ping localhost

可以看到,localhost 也是一个域名,只不过它指向本机,IP 通常就是 127.0.0.1 。

Q8: 端口 port 是什么?

回答:前面说了,一台机器好比一个房子,IP 相当于它的地址。那么 port 可以理解为不同的门。例如,如果通过 ssh 访问,那么就是走 27 端口,不确定是不是27,但是这个不重要。如果通过 ftp ,那就是 40 端口。如果通过 https://google.com 这样的加密形式访问,就是走 443 端口。最重要的要记住的就是 80 端口,因为这个就是通过我们用 http://haoduoshipin.com 访问服务器的时候走的 http 默认端口。不同的端口登入机器的用户,访问权限和可以访问的文件夹都是不同的。

比较大的端口号,例如 3000 ,8000 都是没有具体规定的,可以认为指定。比如我在一台机器上跑了多个网站应用,我就可以在配置服务器的之后,人为指定 3000 对应 A 应用,3001 对应 B 应用,等等。

Q9: API 是什么意思,为何看了 wikipedia 还是不明白?

回答:我们这一行就是有些概念,每天出现,但是你想通过查字典的方式去搞懂它,却发现非常难。比如 API ,也比如 AJAX ,framework ,library ,runtime 等等。其实 wikipedia 就相当于程序员的字典了,上面内容很权威,但是看完之后,会的人理解会加深,不会的人依然是不会。这就是因为 IT 概念都是从实践抽出来的,也必须放到实际中去才能理解。

Show, Don't Tell

这句话很有名,意思就是:不要给我讲,给我看看实际例子。的确,实际自己动手跑起来,像 API 这样的概念其实马上就会理解了。这里我先来说说。

API 字面意思是“应用编程接口”。基本就是一个平台提供了很多功能出来,那么这些功能怎么让别的开发者用呢?那就是公开出一些 API 出来。例如,浏览器有很多功能,例如播放视频,定位地理位置等等,那么我们作为 Web 开发者就可以通过浏览器提供的 JS API 来调用这些动能。另外一种,是远程 API 了,比如《摩登》课程中的例如,给定一个人的 github 用户名,我想要获得他的仓库和粉丝的数量,这个也需要 Github 有现成的 API 可以调用才行。

Q10: 库,框架,平台,这三个词的联系和区别?

回答:简单来讲,这几个概念都是比较模糊的概念,可以慢慢去体会,不必一下子深究。但是 Peter 从业十年了,这些概念慢慢得都掌握的比较精细了,可以来随便卖弄一下。库,应该说是最小的一个概念。库,只是负责单一功能。例如 React ,严格来讲就是一个视图层的库( library )。好,那么真正用 React 开发的时候,很多人会配合上几个其他的库,例如 redux 数据流控制的库,react-router 路由控制库,这个多个库组织到一起,就形成了一个框架,可以笼统的叫做 React 框架。例如 Rails 也是由很多库和工具组成的,也是一个框架( framework ),但是 Rails 是一个全栈框架,不是一个像 React 那样的前端框架。

框架和平台( platform )一样,都是由很多的库组成的,但是二者还是有区别的。框架是有一定的喜好传统在里面的,例如 Rails 就会强制用户去选择一套最佳实践,一个明显的特征就是,我们用 Rails 生成一个空的项目,马上就会有几十个文件去生成。Rails 的作者认为,如果你的项目中没有这些文件,或者文件的组织不是这样的形式,那么你就不是最佳实践。其他框架未必有 Rails 这么霸道,不过,基本上选择一套框架就是选择一套做事的方式了。对比来讲,平台从功能上会比框架更多,同时平台是无喜好不强制的,例如 Unix 操作系统就是一个平台,它默认提供了无数的小工具,具体怎么用,那你自己自由决定就好了。对应 Meteor ,官方有一句话:

Meteor is Unix ,not Rails 。

意思就是 Meteor 是一个平台,不是一个框架。如果我生成一个 Meteor 的项目,会发现默认只有三个文件。所以 Meteor 给开发者以更大的自由度。当然,在实际使用中,这三个词的区分很多时候还是不那么严格的,很多人把 Meteor/React/Rails 都叫做框架,我觉得也没有问题。另外,jQuery 应该官方的说法是一个库,但是它其实也显露出了很多框架的特点出来。

Q11: 转译和编译有何区别?

回答:转译,英文是 transpile 。这个是转换这个词,也就是 transfer 和编译这个词也就是 compile mix 到一块的。ES6 到编译成 ES5 严格来讲就应该是转译,意思是把源码编译成另外一种源码,而编译更适用于 C/C++ 这样编译性语言,意思是吧源码变成二进制机器码。

Q12: Peter 写书的思路

好,概念很多,今天就聊这么多,后面我会出一系列的基础书籍:

都会瞄准基础技巧和概念。你可能会问,这些话题市面上书已经不少了,Peter 你还有必要自己重新吗?我自己从实际教学中的体会是,非常有必要。市面上的书都流域全而不精,无针对性。而我的书专门针对 JS 开发者,而且是摩登的那些,所以实用性可以变得很强。欢迎大家添加我的微信:happypeter1983 关注我朋友圈,会有这些书的动态。