码农杂谈:技术是第一生产力
《码农杂谈》系列的第三篇,写哪算哪,不成体系,将就着看——我是真没有那个时间去写长篇大论了,所以博客都长草了,就随便写点豆瓣日记,head dump 一下,以作记录。
想法起于这条广播:https://www.douban.com/people/xiaohanyu/status/2353400086/
我没有科研经历,算不上“懂科学”,但是这么多年来折腾过的工程项目还是有一些,大大小小的技术还是玩了一轮,因此“科学技术是第一生产力”,在我这里就打个折扣吧——技术是第一生产力。
从和朋友聊起这个问题,到最后完成 40 行的程序生成 640 页的 PDF,大概花了两个小时,期间还同时做着别的事,所以想法 + 写程序 + 调试最终也就花了一个多小时吧,算下来应该可以节省一天的工作量——如果是 10 个人用,那就可以节省 10 个人一天的工作量。稍微对程序进行一些改造,还可以玩出很多花样来,比如备份下自己所有的豆瓣广播或者书影音标注评论啊——万一哪一天,豆瓣挂了呢,对吧……
所以程序其实就 40 行:https://github.com/xiaohanyu/blog-html-to-pdf/blob/master/index.js ,加上 3 条 shell 命令,就解决了一个看上去很繁琐很枯燥工作量很大也很无聊的问题。
再比如这篇:https://github.com/xiaohanyu/douban-group-dingbot,用简单的程序来做一个顶贴机器人,我曾经挂在角落里的树苺派里跑了好几个月,https://www.douban.com/group/topic/92561439/ ,那段时间我一个人工作,这个顶贴机器人可以算是我手下的一个员工了……
再如这篇:http://blog.pluskid.org/?p=260,非常 impressive 的探索,简单的工具组合到了合适的人的手里,不光是能玩出花样,确确实实是可以提升工作效率节省大量时间的。
以上所谈,都不是今天所说的重点,顶多算个引子。接下来我们进入正题。
我在中文 README.md https://github.com/xiaohanyu/blog-html-to-pdf/blob/master/README.md 里提了一个问题:
二,如果做一个类似的 web 服务,会有人愿意买单么?
答案是肯定的。
我有位朋友(https://weixinshu.com/ & https://blog.xinshu.me/),在杭州,通过抓取微博微信朋友圈内容打印成书,做到了每年上千万的流水,养了 20+ 人的团队——类似的商业产品有一些竞品,可以 Google “微信书”试试看。
而这个商业模式的核心,就是那 40 行 JavaScript 代码。
而从这 40 行 JavaScript 到一个每年千万级别流水的产品,这中间又差了十万八千里,技术和产品之间的鸿沟,要比许多人的想象大得多。
我们一步一步聊。
先聊最简单的,技术,局限于此,就是 JavaScript 了。JavaScript 不难学,程序才 40 行而已。然而吧,这个程序只有 40 行,是因为我把它写出来了。我能把它写出来,是建立在我对 Chrome 非常熟悉——我熟悉 Chrome Devtools、熟悉 Chrome 的生态及各种周边工具,也熟悉在必要时可以利用 CSS 的媒体查询功能来对页面的打印效果进行特殊的定制——的基础之上。另外,我也还算熟悉 JavaScript,结合一下,JavaScript 加上 headless chrome,就解决了这个问题中最重要的一个点,就是将 HTML 转换成 PDF。
JavaScript 算不上难,但也绝对不简单。早年学习 JavaScript 有一个很有意思的段子,对应着两本书,

这个段子讲的是,JavaScript 的东西学全的话,很庞杂,有 1000 页,然而其核心的精华,大概只需要 100 页就够了。这个段子的主要槽点是说 JavaScript 早期设计太仓促,留下了很多坑,1000 页中只有 100 页(10%)是 good part,剩下的 90% 么——那明显都是 bad part 或者 boring part 了……
时过境迁,现在在学 JavaScript,如果再来一本《Definitive Guide》,其页码恐怕要翻个三五倍,这可能也是这本经典书籍没法子再出新版的原因了吧……想象一下 3000 页的《JavaScript: The Definitive Guide》?
真的有这么厚?
我们来捋捋一个人学习现代 JavaScript, 从写 hello world 到能上手工作,到底需要学多少东西:
- 原《JavaScript: The Definitive Guide》的全部,这主要包含经典 JavaScript 及浏览器端 DOM 相关以及 jQuery
- ES6,新一代 JavaScript,阮一峰总结过一本《ECMAScript 6 入门》,篇幅大概五六百页的样子
- Node.js 相关,主要是后端 JavaScript,加上 npm 相关生态,各种不同的 module 格式,AMD、UMD 及各种打包工具 webpack、parcel 及各种转译器 babel 之类的 blah blah 一堆工具,总结下来需要阅读的篇幅又得 500-1000 页
- 前端三大框架,React/Vue/Angular,任选一门武功修炼,加上围绕框架的生态挑挑拣拣,blah blah 一大堆中粗中选细细中选好好中选优,累计又得阅读 500-1000 页文档的篇幅。
等到这些玩意都过了一遍,累计你应该要阅读 3000-4000 页的文档了。说多不多说少不少,现代 JavaScript 就是需要这么多东西,再写一本 《JavaScript: The Definitive Guide》,这些东西一样都跑不了……3000 页的书啊,乖乖,你知道为啥这书写不下去出不了新版本了吧。
所以你玩熟了 Chrome,了解了 ES6,差不多就可以写出上面那个短短几十行的 HTML 转 PDF 的程序。
再加上三条 Shell 命令,流程就走完了。
而要写出这三条 Shell 命令,你又要去了解 Unix shell 的简单编程及小工具,如管道、文本处理、命令替换之类的。这又要阅读 500 页的文档。
聊完了技术,接下来我们来聊聊商业。
当你想把这个 40 行 JavaScript 程序变成一项产品,甚至一个小事业时,你需要做下面几件事。
首先,你得成立个公司吧。成立公司,你得了解一些公司的基本常识吧,税法、会计(复式记账法了解一下)、股权、有限责任,blah blah 一堆你听过但是从来没有了解过的名词。
其次,如果 40 行 JavaScript 要变成一项产品,那你要写的就不只是 JavaScript 了。你首先,得做个网站吧,要做网站,你得懂 HTML/CSS 和基本的设计吧(看我的《前端杂感》)。如果你想把网站做得更好一些,恐怕又要在细节上花费大量的精力(看我的《码农杂谈:造奔驰,还是拖拉机》)。哦对了,我们要做的是将 HTML 转成 PDF 离线阅读的产品,也许我们应该在数字排版方面也下一些精力?(看我的《关于数字排版(tex/indesign/web)的一些杂想》)。
静态网站做出来了,这时候你需要对接两套东西,一套是用户的注册登录系统,比如社交登录、邮件验证,两次验证 2FA 等等,别小看这个模块,国外有专门做这块的 SaaS 产品(https://auth0.com/),估值上亿美金。一个好用的、安全的用户系统是很难做的,这就是为什么你会每每听到某某大型知名公司用户账户泄漏的事情,不是因为这个用户注册登录的模块简单,而是因为难,难到大多数公司都做不好。
另外,你要对接的,是支付系统。这个时候你又要去阅读对应支付服务提供商的各种审核资质,文档之类,好在现在有 stripe 之类的服务帮你省了很多力气。
接下来,部署网站。国内需要备案。静态文件最好部署到 CDN 上,HTTPS 证书要么买,要么 let's encrypt,还要注意自动更新,blah blah 又是一堆的事。
网站上线,接下来要分析流量,流量的来源、关键词、跌失率、移动设备适配、网站性能,blah blah,又是一堆的事。
至于招聘推广带团队之类的事情,我所知有限,就不展开了。
所以技术和产品之间的鸿沟有多大?
大到你看不到头。
我已经记不得从哪里看来这么一句话,是一位物理学教授来形容自己的半生:
当我年轻时一头埋进了物理研究的海洋,等再抬起头来时,却发现自己已经是白发苍苍。
八九年前,当我蹒跚学步,写出第一个网页时(http://xiaohanyu.me/posts/2009-09-09-a-website-for-traveller/),也未曾想到自己会在这个领域耕耘这么长时间。一个训练有素的学生,经过几个月密集认真的培训学习,的确是可以上手出来做一些简单的入门的工作——写 HTML/CSS/JavaScript。我学了这么多年,还是在写 HTML/CSS/JavaScript。我的时间到底都去哪了呢?
我想,这些时间应该是沉浸到一本又一本未出世的《JavaScript: The Definitive Guide》里面去了吧。
The devil is in the detail.(魔鬼在细节中。)
总结:
- 技术是第一生产力。
- 心思要活络,技术要练级打怪,同时也要把思维打开。你会写代码,文笔不错,英文不错,还有基本的设计审美,不好意思,你在 21 世纪就是无敌的存在。失业在你的世界里是不存在的。
- 你掌握的工具越多,就越有可能在你想象不到的场景里摩擦出独特的火花和灵感。
- 方法有道学习有序,是可以在三到五年的时间内做到某个小领域内的专家的。
- Respect。HTML/CSS/JavaScript 并不一定简单,Machine Learning/AI 也并不一定难,找准自己的方向,不要随大流。
就这么多,end of head dump,enjoy and good night~~
-
dd 赞了这篇日记 2022-11-19 22:55:45
-
微风鼓浪 赞了这篇日记 2022-03-06 21:12:35
-
momo 赞了这篇日记 2022-01-17 10:18:20
-
unyzhq 赞了这篇日记 2022-01-15 17:03:20
-
我的名号被删了 赞了这篇日记 2022-01-09 20:22:05
-
Gandalf 赞了这篇日记 2021-12-21 18:56:56
-
Margo 赞了这篇日记 2021-10-28 10:37:24
-
微淋岛 赞了这篇日记 2021-08-09 21:11:27
-
EMMI 赞了这篇日记 2021-06-14 01:16:49
-
五花肉 赞了这篇日记 2021-05-24 19:47:55
-
Alprazolam 赞了这篇日记 2021-04-25 12:22:40
-
小竹山 赞了这篇日记 2021-02-11 17:54:47
-
喋喋不休 赞了这篇日记 2021-01-05 19:40:01
-
地窑中的穴鸟 赞了这篇日记 2021-01-05 01:46:46
-
白日梦huan者 赞了这篇日记 2020-10-29 11:15:12
-
zenghuan 赞了这篇日记 2020-10-22 22:16:02
-
一个吃货 赞了这篇日记 2020-09-11 18:11:14
-
寄语梦 赞了这篇日记 2020-08-11 23:31:27
-
豆友48264338 赞了这篇日记 2020-07-27 10:18:13
-
酥糖 赞了这篇日记 2020-04-24 21:58:59
-
elliot 赞了这篇日记 2020-02-20 23:14:35
-
史努斯姆姆 赞了这篇日记 2020-01-20 07:56:00
-
𝕪𝕪𝕞𝟞𝟠𝟞𝟠𝟞 赞了这篇日记 2019-11-10 23:42:37
-
Orchid 赞了这篇日记 2019-11-06 08:07:01
-
岁月何须溪上记 赞了这篇日记 2019-11-01 05:29:09
-
喵喵喵呜 赞了这篇日记 2019-10-29 10:56:56
-
夏心澄 赞了这篇日记 2019-10-05 10:52:12
-
BoboUofT 赞了这篇日记 2019-09-23 01:50:07
-
Nicolas·Z 赞了这篇日记 2019-09-17 22:00:20
-
open 赞了这篇日记 2019-08-21 17:53:18
-
木某尼 赞了这篇日记 2019-08-09 05:08:33
-
summer 赞了这篇日记 2019-07-01 13:29:51
-
李海拉 赞了这篇日记 2019-06-28 05:12:14
-
餅干今天看什麼 赞了这篇日记 2019-06-26 14:43:32
-
百万 赞了这篇日记 2019-06-25 23:51:24
-
剪刀手爱德华 赞了这篇日记 2019-06-25 22:33:24
-
Parker 赞了这篇日记 2019-06-13 19:12:25
-
就是了不起啊! 赞了这篇日记 2019-06-12 18:24:39
-
樂訫 赞了这篇日记 2019-06-09 17:57:37
-
已注销 赞了这篇日记 2019-06-08 16:07:53
-
慢时光 赞了这篇日记 2019-06-08 00:29:55
-
外太空的旅行者 赞了这篇日记 2019-06-07 23:02:16
-
周刊少年栗 赞了这篇日记 2019-06-07 19:37:25
-
Adrian 赞了这篇日记 2019-06-07 01:18:05
-
宿由未 赞了这篇日记 2019-06-06 21:44:48
-
亦真亦假 赞了这篇日记 2019-06-06 21:06:12
-
Niko 赞了这篇日记 2019-06-06 12:28:53
-
小哥吴邪 赞了这篇日记 2019-06-06 09:27:00
-
水调了谁的歌头 赞了这篇日记 2019-06-05 21:47:33
-
CINDER 赞了这篇日记 2019-06-03 22:32:10
-
[已注销] 赞了这篇日记 2019-05-28 18:47:47
-
[已注销] 赞了这篇日记 2019-05-28 11:46:50
-
无敌傲娇菜菜酱 赞了这篇日记 2019-05-24 14:01:34
-
jojo 赞了这篇日记 2019-05-22 08:04:41
-
玉衡🌟 赞了这篇日记 2019-05-21 10:36:53
-
长岛冰猹 赞了这篇日记 2019-05-18 14:16:52
-
J 赞了这篇日记 2019-05-17 12:11:29
-
豆友豆豆豆 赞了这篇日记 2019-05-17 08:33:51
-
泥儿 赞了这篇日记 2019-05-17 07:06:57
-
醒来后我叫建国 赞了这篇日记 2019-05-17 00:44:33
-
momo 赞了这篇日记 2019-05-16 20:28:41
-
追梦人 赞了这篇日记 2019-05-16 18:41:49
-
心下囚 赞了这篇日记 2019-05-15 18:51:52
-
林二熱 赞了这篇日记 2019-05-15 18:50:46
-
momo 赞了这篇日记 2019-05-15 18:23:13
-
白若白 赞了这篇日记 2019-05-15 11:57:42
-
Nestle 赞了这篇日记 2019-05-15 09:01:34
-
豆友192177357 赞了这篇日记 2019-05-15 07:42:13
-
nemo 赞了这篇日记 2019-05-14 21:45:27
-
甜来兮 赞了这篇日记 2019-05-14 01:03:28
-
noknowon 赞了这篇日记 2019-05-09 11:21:30
-
xtYao 赞了这篇日记 2019-05-08 23:52:45
-
蘑菇不寂寞 赞了这篇日记 2019-05-08 14:27:19
-
垃圾豆瓣再见 赞了这篇日记 2019-05-07 18:58:03
-
。。。 赞了这篇日记 2019-05-07 16:48:05
-
leon 赞了这篇日记 2019-05-07 12:56:14
-
stawang 赞了这篇日记 2019-05-06 16:31:25
-
momo 赞了这篇日记 2019-05-06 11:23:51
-
阿任 赞了这篇日记 2019-05-03 07:45:42
-
surge_tw 赞了这篇日记 2019-05-02 00:33:09
-
豆友191700616 赞了这篇日记 2019-05-01 14:22:38
-
丸子(^.^)v 赞了这篇日记 2019-04-30 22:04:55
-
游 赞了这篇日记 2019-04-29 09:27:26
-
[已注销] 赞了这篇日记 2019-04-27 20:56:47
-
小花 赞了这篇日记 2019-04-27 19:37:31
-
劳谦君子 赞了这篇日记 2019-04-26 14:09:35
-
OwlLovePeace 赞了这篇日记 2019-04-26 13:26:52
-
0xqO3pI 赞了这篇日记 2019-04-22 19:07:25
-
沐风少年 赞了这篇日记 2019-04-22 00:01:10
-
范特香 赞了这篇日记 2019-04-21 17:48:11
-
WhatWhy5 赞了这篇日记 2019-04-21 09:56:21
-
豆友180333754 赞了这篇日记 2019-04-18 18:52:58
-
Dreamer 赞了这篇日记 2019-04-17 23:28:12
-
young 赞了这篇日记 2019-04-02 17:11:39
-
豆友84586761 赞了这篇日记 2019-04-02 08:09:53
-
断言 赞了这篇日记 2019-03-27 13:18:04
-
痒痒鼠 赞了这篇日记 2019-03-27 02:29:14
-
魑魅.... 赞了这篇日记 2019-03-25 22:07:25
-
Jon Snow 赞了这篇日记 2019-03-25 01:53:59
-
豆友179852571 赞了这篇日记 2019-03-22 17:34:03