首先申明,本人没怎么写过 JS ...
https://github.com/azer/left-pad
不算空行的话, left-pad 真的只有 11 行,当然再处理一下可能几行就搞定了。
那么问题来了,为什么这么短的代码,也能成为众多库比如 RN 的依赖?
难度人们已经懒到这种程度了?
1
yangxiongguo 2016-03-24 09:59:25 +08:00 1
|
2
mthli OP @yangxiongguo 有点意思。
|
3
yangxiongguo 2016-03-24 10:02:42 +08:00
@mthli
感觉我在 “以己之矛攻己之盾” |
4
ChiangDi 2016-03-24 10:03:02 +08:00
这是很好的,看看 SICP 第一章。
|
5
v1024 2016-03-24 10:24:48 +08:00
让自己的代码只做最重要的事。
这儿一个 11 行,那一个 11 行,多了之后弄个 utils ,臃肿,也不专注。 |
6
shyling 2016-03-24 10:26:50 +08:00 via Android
是的~模块化本身就是人懒。。有什么不好的嘛
|
7
chmlai 2016-03-24 10:40:06 +08:00
npm 的小模块哲学
|
8
Wangxf 2016-03-24 10:41:04 +08:00
这是多米诺骨。。。首先开始写一个项目的用了这个包再发包,然后另一个程序猿用了这个程序猿的包,再另一个程序猿,如此往复下去,你就会发现某个大型项目居然会有你的包,而你的包出问题有可能导致整个项目挂掉,说到底所谓 unix 哲学虽然讲究只做好一件小事然后集合小事办大事,但是某个人对于这么多所有的小事是无法掌控的,
|
11
zhujinliang 2016-03-24 10:49:35 +08:00 2
假设我需要处理字串了
首先我要先去 google 搜索一下应该用什么包 然后我要看看这个包应该怎么调用,至少要读一遍 readme 吧 然后 install ,写引用,写调用 怎么看也不如自己写两句话来的快啊 好吧,假设从性能考虑,毕竟 string 操作会牵涉出一大堆问题 a 包说我是 fast left pad b 包说我 3x faster than A c 包给出了 benchmark ... 开始晕了,我觉得还不如从算法开始调研呢 后期维护考虑,一个组件总有机会得到性能提升的吧 然而我在 golang 上的体验是,妈的这个包又不兼容了,编译不过都是给面子的,有时候得跟进包里调试,最终你会发现辣个人不经意地改了某处导致你的程序 bug |
12
wingoo 2016-03-24 11:16:16 +08:00
而且这边会有一个问题, 就像这次 left-pad 包挂掉一样, 如果某个深度依赖的包被黑(被黑的意思是不管你指定啥版本, 啥版本我都给污染了)
那么会不会有很大的安全风险? |
13
sox 2016-03-24 11:19:27 +08:00
@zhujinliang 如果是相对简单的包,那了解如何使用也很快,而且测试、维护成本更少。如果是实现 重要功能的模块花费更多时间熟悉也是有价值的。
|
14
bramblex 2016-03-24 11:22:45 +08:00 via Android
Monad 定义还只有两行呢…但是绝大多数程序员都搞不懂
|
15
allan888 2016-03-24 11:33:50 +08:00
@zhujinliang 人家写了 11 行,你自己写真不见得只要两句话。
字符串长了是个合格的程序员总会想想效率吧,而你自己写的还得好好想想到底高效不高效。 举个例子,假如 left pad 也许有什么黑科技,用了一些普通人根本看不懂的 trick 写了个特别高效的算法,那么用的人肯定很多,你用大家都用的就得了,管那么多干啥,反正至少不比你自己写慢。 然后你觉得这个算法不可能有黑科技,那大多数人怎么知道没有,确定“没有”更好的算法要求的功力根本不比知道更好的算法低。 用库的话基本上至少库里面那部分都是“优秀”的,你自己写的话不能保证,就这么简单。。 |
16
martianyi 2016-03-24 11:36:47 +08:00
如果这次不是 11 行的 left-pad 而是 1100 行的大包被撤了引起恐慌是不是你就不会问这个问题了?
我引 11 行的三方库和引 1100 行的三方库有区别吗?都是为了解决我的问题而已。 |
18
SourceMan 2016-03-24 11:46:25 +08:00
现在是一行( N 多 NPM 包不包括头尾,只有一行),你确保以后为了兼容不会变成多行?
然而,我们为什么要关心实现它需要多少行,直接使用它就好了。 让它变成一个黑盒,通过项目本身大覆盖的测试用例保证可用性 |
19
6IbA2bj5ip3tK49j 2016-03-24 11:48:09 +08:00
前端毕竟走在潮流前端,新时代的搬运工。
11 行的包都需要引入,都不用考虑整个项目的掌控问题吗? |
22
jsonline 2016-03-24 11:59:57 +08:00 via Android
楼上们,请问多少行才能作为包?
|
25
learnshare 2016-03-24 12:09:52 +08:00
复用代码, npm 就是为了这种需求才存在的
|
26
zhujinliang 2016-03-24 12:11:20 +08:00
@allan888 有道理
|
29
MaiCong 2016-03-24 12:38:07 +08:00 via iPhone
懒癌,现在随随便便安装一个模块, node_modules 里面全是一大堆的依赖。
|
30
martianyi 2016-03-24 12:55:27 +08:00 via iPhone
left-pad :怪我咯
|
31
bramblex 2016-03-24 13:15:41 +08:00
我还真不知道有这种东西,我都是自己手写的。
然后我自己写的是给一个 block 加 left pad 的……比他不知道高到那里去了 /w\ |
32
msg7086 2016-03-24 13:28:27 +08:00
|
33
sox 2016-03-24 13:31:09 +08:00
|
34
mthli OP @msg7086 这要权衡利弊吧。没有足够的理由说服我自己能引用这样的库到项目里。而且出了错自己也能很快定位。
|
35
allan888 2016-03-24 13:37:53 +08:00
@ibigbug 没说他优秀。
我是说你尽量都用库“一般来说”“至少”不会比自己写的差。 而且在某个你认为很简单的没几行的库里面,你很可能已经享受到大神写的算法带来的好处,这种没必要去一一鉴别,只需要从统计角度来说用库更有好处就足够了。 |
36
msg7086 2016-03-24 13:38:33 +08:00
@mthli 公共的东西提取出来模块化对构建大型软件有帮助。
就算是你自己写一份,通常也是提倡封装成单个 library 或者库的,也就是像这位库作者一样单独拉出一个项目来。 |
40
poke707 2016-03-24 14:05:33 +08:00
先不说 NPM 。若在多个项目之间有复用模块的需求,只是 copy-paste 到代码里面,有修改的时候每个项目都要改一次,你不希望让维护更简单高效吗?
NPM 可以是一种方案,怕被撤了被黑了或想要掌控的话可以自建 registry 。 不过主题说的意思貌似是 LOC < x && 'too simple' 所以是否应成为模块。这个 1L 可解答。 理解错了还望指正。 |
41
cc7756789 2016-03-24 14:19:12 +08:00
我多加了几行代码: https://github.com/ZhangHang-z/string-pad (/ □ \)
|
42
thcode 2016-03-24 14:19:29 +08:00
第三方的包真不是随便就可用的啊
https://github.com/tjmehta/is-positive-integer | Version | 1.0.0 | 2.0.0 | 3.0.0 | 3.1.0 | |---------------------------|-------|-------|-------|-------| | isPositive(1) | true | true | true | true | | isPositive(0) | true | false | false | false | | isPositive(new Number(1)) | error | error | false | true | 来源 https://www.reddit.com/r/programming/comments/4bjss2/an_11_line_npm_package_called_leftpad_with_only/d19vysi |
43
k9982874 2016-03-24 14:23:35 +08:00
面向 github 编程的核心思想,能找现成的绝不自己写,)手动斜眼笑
|
44
tabris17 2016-03-24 14:46:38 +08:00
说到底就是 javascript 缺少 std 库呗
|
46
lwbjing 2016-03-24 18:18:07 +08:00
依赖是种病, node 社区可能没救了...
|
47
Vesper 2016-03-24 18:19:19 +08:00
JavaScript 的锅 (逃..
|