你使用什么框架?您使用的是Bootstrap,Materialise还是Foundation?或Vue,或Angular 1,Angular 2或Ember?或Ruby on Rails,或Sinatra,或Express,或Meteor,或Flask,或Korbin,或Hapi,或Spring,或......
框架都很糟糕。他们都是。我很认真 - 他们让你们成为糟糕的开发者。现在停止使用它们。
让我们谈谈这个,因为我可能已经失去了你们大多数人的开场白。为什么像你这样的人喜欢框架?你是弱者还是愚蠢的?或两者?框架意味着我不需要重新发明轮子
当然,我正在建造一辆自行车。我不需要重新发明轮子,我只是抓住一个带轮子的框架。
还有一个方向盘
还有一个发动机罩。穿蓝色衣服。
还有一个引擎。
和一个CD播放器
什么,你没有任何CD?很好,只是不要使用它。或者只是将CD播放器用于MP3播放器适配器。
为你的自行车。
您还在建设中。但现在在汽车之上。
但它很好,因为AutocarJS有一个模块化的插件系统,允许你添加自行车踏板到你的汽车自行车憎恶。这很简单。只需输入'autocar scaffold add pedal'即可。或者编辑autocar.js.manifest.nightmare
文件。
这更容易,是吗?
“你不需要重新发明轮子”在两种情况下都很好:
[list=square]
[*]
你知道一个轮子是如何工作的[/*]
[*]
你知道这个轮子是如何工作的[/*]
[*]
这个轮子没有带来一堆你永远不会使用的垃圾[/*]
[*]
你只想要一个轮子[/*]
[/list]
初学者使用框架更容易
当然,如果你是西斯。
什么?是的,一个奇怪的黑色沙坑中的西斯勋爵。您选择了通往ULTIMATE POWER的快速路径,但您仍然不知道HTTP的工作原理。或者POST请求是什么样的。或者如何编写表单元素。或者如何使用数据库而没有一些奇怪的ActiveRecord噩梦分层顶部...
它让人上瘾,因为你不知道有什么用,所以你会在职业生涯中追逐NewShinyFrameworkJS,因为ShinyFrameWorkJS并不能完全满足您的需求。你将患有永恒的冒名顶替综合症,因为你不知道有什么作用。你将完成你的工作,你将是一个'React Developer'或'Rails Developer',你会想知道出了什么问题。
真实的故事。当有人在一个着名的编码训练营中接受采访时,他们被要求在Ruby中使用FizzBuzz kata。他们在命令行输入的第一件事是什么?[size=16][code]gem install rails
[/size][/code]
你是Anakin Skywalker,所有你期待的生活是你不知道有什么作用的生活,你的事业和生活是建立在你无知的沙滩上。不,你不是Darth Vader。你不那么酷。你是阿纳金而且你很糟糕。
但没有框架,这真的很难
是吗?是真的吗?您是否尝试过不使用框架来编写内容?我的意思是,你能写一个没有框架的漂亮,复杂,面向客户的网站吗?说像GitHub ......
是的你可以!
网络比十年前要好得多 - 十个月前,地狱。您不需要框架 - 您只需花几分钟阅读MDN上的文档。你不需要Sass,CSS现在有变量。你不需要Bootstrap,flexbox或grid是你的朋友。
那个服务器的东西怎么样?除非我使用
框架,否则它甚至如何工作?
你在开玩笑吗?你看过HTTP有多简单吗?HTTPeasy
看,一个HTTP请求:[size=16][code]GET /hello-world?framework=none HTTP/1.1
Accept: text/html
Host: my-hello-world-server.com
[/size][/code]
这看起来难以解析吗?真?你几乎可以像读它一样读它。这只是一个很大的旧字符串。您应该能够使用您选择的任何语言提取您要接受的内容类型,方法和查询字符串参数。如果这很容易,为什么你依靠一个臃肿的,自以为是的框架来为你做所有的工作?
我并不是说你应该通过HTTP编写自己的抽象 - 几乎每种现代编程语言都有一个内置的抽象,它将为你做繁重的工作。如果它不是内置的那么它就是一个随时可用的库。使用其中一个 - 通过套接字解释请求和响应的更简单方法。这就是你真正需要的。
“HTTP上的抽象”是这里的关键想法。这就是需要从socket上的字节流抽象出来的东西。框架是对......一大堆东西的抽象。它通常是对其他人对网站或程序应该是什么的想法的抽象。这不是你的想法,它不是你的产品 - 它是他们的,它限制了你的创造力。
礼貌回顾
我认为Web框架为项目增加了附带的复杂性,从使用它们的开发人员那里获得控制权,并将其置于编写框架的人手中。因此,我们被迫采用特定的方式来构建和配置可能不符合我们需求或目的的应用程序。我们可能不会在项目开始时就认识到这一点,但到了我们的时候,我们将在框架系统中“嵌入”,以至于很难做出必要的改变。
更强烈的是,对框架的依赖变成了恶性循环; 当我们缺乏从简单库构建Web应用程序的技能时,我们将转向构建我们网站的框架,当这不可避免地以某种方式使我们失败时,我们将寻求另一个同样不适合的框架。2
一个特别令人震惊的例子是使用前端JavaScript框架来呈现纯HTML内容,这些内容可以很容易地托管在静态站点服务器上。
最后,“框架优先”的思维方式使人们远离编写没有框架的应用程序 - 他们自动认为它必须很难,如果不是,那么首先就不会有框架。这是不真实的。理解和使用一组编写良好的库来构建应用程序就像使用框架一样容易,并且您不会对上面列出的问题保持开放态度。3对批评的回应
有些人似乎认为我想在C.或汇编程序中编写所有内容。没有; 虽然这可能很有趣,但就时间而言可能效率低下。4我的问题特别针对框架。框架的良好定义可能是:
你调用了库的代码。框架调用您的代码。
如果您想要更多细微差别,请阅读此Stack Overflow问题。但是,如果你没有猜到,在我看来,图书馆(大多数)是好人。所以 - 使用库(希望具有良好抽象的库),避免使用框架。
其他人声称,如果他们不使用框架,他们“最终将自己构建一个框架”。这是不太可能的,除非他们想要优化以生成具有相同结构的多个应用程序。你不会'建立一个框架'。
您将构建的是您首先尝试构建的应用程序 - 仅此而已。如果你做得对,它将具有足够的灵活性,可以在未来改变和发展。
学习基础知识,而不是某人的抽象
Stack Overflow充满了诸如“如何在框架Y中执行X”这样的问题,答案范围从“你为什么要做X?”,“不,你不能”,或“你不能做X” ,但为什么不做Z?“
这是因为可怜的dev ask被用来使用数据库附加到请求对象或其他任何东西的框架,现在他们正在使用具有完全不同抽象的NewShinyFramework。他们倾向于错误的东西。
如果你想要一个稳固的职业生涯,不要学习框架和框架的抽象; 学习基础知识。
不要学习Express的路由系统; 了解HTTP的工作原理。
不要熟悉ActiveRecord黑客,以使您的查询更快,学会编写SQL。
不要学习如何使用带有JQuery的Bootstrap与Redux一起构建React,学习HTML,CSS和JavaScript。
对于你需要做的99%,他们将绰绰有余。
这种知识永远不会陈旧。
与框架不同。