Google-Oriented Programming (GOP)

GOP,面向谷歌编程,意思是依赖搜索引擎进行编程(不一定是谷歌,但是一定不是百度)。

可以说,GOP本次编程创造营最重要的内容,没有之一

正常情况下,你需要掌握概念以及语言的很多细节,甚至达到一定的熟练程度,才能去着手开发一个项目。但是,当你掌握 GOP 以后,对于任何开发任务,你只需要知道框架,就可以借助网络将它完整地实现出来。

换句话说,GOP 的核心思想是将开发链条从 掌握框架 - 掌握细节 - 进行开发,缩短成为 掌握框架 - 进行开发。我们接下来具体阐述一下。

GOP 的核心思想

让我们以一个例子,阐述一下 GOP 的核心思想。
假设,现在你需要使用原生 Web 做一个个人博客。

普遍的做法是什么呢?

  1. 你要知道网页是如何实现的。你阅读各种材料,知道了以 HTMLHTTP 为核心的 Web 的框架。
  2. 你要学习 HTML,包括作为 HTML 的点缀的 CSS,以及操纵页面的 JavaScript。你打开菜鸟教程,开始阅读。
  3. 你一边阅读教程,一边把新看到的知识运用到一些小东西上。你尝试了大部分 HTML 标签,比如 imgvideo 等等;你练习了大部分 JavaScript 的特性,从判断、循环到 JavaScript 中的面向对象编程。
  4. 最后,你把教程上看到的东西组合起来,搭出了自己的博客,并且成功入门原生 Web。

一个采取 GOP 策略的人会这样做:

  1. 你会花更多的时间进行第一个步骤,了解 Web 的完整运行原理,并且定性地知道一下 HTMLCSSJavaScript 到底是什么东西。你发现,HTML 就是用括号一样的语法在页面上写框框,CSS 定义了样式,JavaScript 就和其它编程语言一样,用逻辑操纵 HTMLCSS。你大致地浏览了一遍各种文件的语法,但是只是有个印象。
  2. 然后,你开始设计你的页面功能。首先,你想做一个像 m5-201 网站顶端的那种导航栏。你知道要用 HTML 写一些标签,然后用 CSS 修饰,但是你可能并不知道使用哪些标签、如何修饰。于是,你打开谷歌,搜索 html navigation bar,或者打开必应,搜索 html 导航栏 或者 html 顶部目录;然后,你想做一个像 b 站那样的轮播图,于是你搜索 HTML 自动播放图片。总之,你把你想实现的功能告诉搜索引擎,从他们那里把你想要的拿过来。
  3. 最后,你做出了自己的博客,尝试了很多 fancy 的技巧。虽然很多技巧在用过之后就忘记了,但是,你确实能够将博客做出来了。

这就是 GOP 的核心思想:它以问题为导向,在自己对解决方法有一定理解的基础上,让搜索引擎帮你补充需要的细节。

GOP 中,框架非常重要。你虽然不必知道语言的细节,但你必须知道,你在什么地方需要什么功能的代码片段。

为什么使用 GOP

除非你非常清楚,你今后必然深耕某一非常细分的领域,否则,我们不希望细节的学习占用太多时间。

没有人可以学会使用所有的工具,更没有人可以记住所有接口的信息。

那些写起程序来胸有成竹的人,只不过是手熟罢了。当你经常做一件事情,你就会自然而然地熟悉它。

很多人对 GOP 嗤之以鼻,认为使用 GOP 的人是不会写代码的。现在很多大厂的面试,也会要求你在不允许使用搜索引擎、查阅参考文档的情况下,实现一些功能。从某种程度上来说,这也是合理的。因为编程就是生产,而生产必然考虑到效率。使用 GOP 的策略会拖慢你的开发速度。对于企业来说,效率低下的开发是不会被企业接受的,所以他们需要你尽可能多地把细节记在心里。

所以,为了通过面试并找到工作,很多人会投入大量时间,深挖一个领域中的所有细节。比如,你会将所有 Web 开发的技巧以及特性都熟记下来。这固然为企业生产提供了效率,但对于个人来说,你可能就与企业生产绑定了:由于你没有有时间去了解更多框架性的东西,你除了为企业开发 Web 之外,并不能做其它事情。比如,你可能没有时间阅读服务器后台是如何搭建的,于是,你只能依赖企业开发团队提供的服务器后台,而不能自己搭建一个完整的网站应用。

换句话说,由于过度的专精,一旦脱离了企业的环境,你可能就无法独立地进行生产。

当然,这样说可能有点过分夸大问题,但它一定是值得注意的。

这个社会当然需要专精一些领域的人,但是 m5-201 希望让大家有全方面的潜力,或者,在决定自己专精领域之前,能先广泛地了解各个领域。