翻译自原文:https://dev.to/gypsydave5/why-you-shouldnt-use-a-web-framework-3g24

你正在使用什么框架?是Bootstrap、Materialize、Foundation?还是Vue、Angular 1、Angular 2、Ember?还是Ruby on Rails、Sinatra、Express、Meteor、Flask、Korbin、Hapi、Spring、……

所有的框架都是可怕的。我很认真地表示——它们把你们都变成不好的开发者。现在停止使用它们。

让我们来聊聊这个,因为我可能因为这个开场失去你们中的大多数人。为什么像你这样的人喜欢框架?你是软弱还是愚蠢?还是两者兼具?

框架意味着我不需要重复造轮子

我正在建造一辆自行车,当然我不需要重复造轮子,我只要一个带轮子的框架。

和一个方向盘 和一个蓝色的引擎盖。 和一个引擎。 还有一个CD播放器

什么?你没有CD?行吧,那就别用它。或者就直接用CD播放器转MP3播放器的适配器。

至于你正在建造的自行车,在汽车顶上。

但是没关系,因为AutocarJS有一个模块化插件系统,可以让你在你的汽车和自行车之间添加自行车踏板。这很简单,只要写下“自动汽车脚手架添加踏板”。或者编辑autocar.js.manifest.nightmare文件。

这样很简单是吗?

“你不需要重复造轮子”适用于下面两种情况:

  • 你知道轮子如何工作的
  • 你知道这个轮子如何工作的
  • 这个轮子没有一堆你永远不会用的废物
  • 你只是想要一个轮子

初学者用框架会更容易

当然,如果你是西斯。

什么?是的,住在一个奇怪黑色地堡里的西斯主。你选择了通往终极力量的捷径,但你仍然不知道HTTP怎么工作。或者一个POST请求长什么样。或者如何写一个表单元素。或者如何在没有奇怪的ActiveRecord噩梦的情况下使用数据库……

并且它会让人上瘾,因为你不清楚所有东西是怎么工作的,你将因为JS框架没有满足你的需求而花费你的职业生涯去追新的JS框架。因为因为你不清楚所有东西是怎么工作的,你将永远患上冒充者综合症。你将结束你的职业,你将成为一名“React开发者”或者一名“Rails开发者”,你将想要知道哪里出了问题。

一个真实的故事。某些人在一个知名的代码训练营中面试一个职位时,被要求用Ruby做FizzBuzz(打印1~100的数字,当遇到3的倍数时打印Fizz,当遇到5的倍数时打印Buzz,而当遇到3和5的倍数时则打印FizzBuzz)的算法题,他们先在命令行敲的什么?

1
gem install rails

你是阿纳金·天行者,你所期待的生活是你对一切都一无所知,你的事业和生计都建立在你的无知之上。不,你不是黑武士。你没那么酷。你是阿纳金,你烂透了。

但是没有框架真的很难

是吗?真的吗?你尝试过不用框架写一些东西吗?我的意思是你可以不用框架写一个漂亮的、复杂的、面向客户端的网站吗?比如像GitHub……

是的你可以的!

现在网页环境比十年前好多了——不,是比十个月前。你不需要框架——你只需要花费几分钟阅读MDN上的文档。你不需要Sass了,CSS现在已经有变量了。你不要Bootstrap了,flexbox或者grid都是你的朋友。

那服务器这些呢?我不用框架怎么运作?

你在开玩笑吗?你看过HTTP有多简单吗?

简单的HTTP

看,一个HTTP请求

1
2
3
GET /hello-world?framework=none HTTP/1.1
Accept: text/html
Host: my-hello-world-server.com

这看上去太难解析了?真的吗?你基本能像读单词那样阅读它。它只是一个大的旧字符串。你应该能够用任何你选择的语言来提取你想要接收的ContentType、method和查询参数。如果这个这么简单,为什么你要依赖于一个臃肿的、死板的框架来为你做事呢?

我不是说你应该基于HTTP自己去抽象——几乎所有现代编程语言都内置一个抽象,帮你完成繁重的工作。如果不是内置的,那就是一个现成的库。去用它们——一种更简单的方式来通过套接字解释请求和响应。这才是你所需要的。

“基于HTTP抽象”是这里的关键思想。这就是需要从套接字上的字节流中抽象出来的东西。框架是对一堆乱七八糟东西的抽象。它通常是其他人对网站或程序应该是什么样的想法的抽象。这不是你的想法,也不是你的产品——它是他们的,它限制了你的创造力。

学习基础知识,而不是其他人的抽象

Stack Overflow上到处是像“在框架Y里我要怎么做X”这样的问题,回答围绕着“你为什么想要做X?”、“你不能做”,或者“你不能做X,但怎么不是试试做Z?”。

这是因为糟糕的开发者习惯于使用将数据库附加到请求对象或其他内容的框架,而现在他们使用的是具有完全不同抽象的新的JS框架。他们学到了错误的东西。

如果你想要扎实的职业开端,就不要学习框架和框架的抽象;学习基础知识。

不要学习Express的路由系统;学习HTTP如何工作的。

不要太过熟悉ActiveRecord使查询更快的技巧,学习写SQL。

不要学习如何用带有JQuery的Bootstrap的构建React,学习HTML、CSS和JavaScript。

99%你要做的事,这些都足够了。

这个知识将永不会过时。

不像框架。