大量的框架会使程序员感到沮丧吗?[关闭]


22

如今,有了所有可用的框架,ORM依赖项注入(DI),控制反转(IoC)等,我发现许多程序员正在迷失或没有解决难题所需的解决问题技能。很多时候,我已经看到意外的行为蔓延到应用程序中,并且开发人员无法真正挖掘和发现问题。在我看来,对引擎盖下正在发生的事情的深刻了解正在丢失。

不要误会我的意思,我并不是在暗示这些框架不是很好,也没有使行业向前发展,只是问开发人员是否没有获得深入了解所需的知识和技能,这是意想不到的结果系统。


这是我几年前记得的一篇与您的问题有关的好文章。特别是,作者指出缺乏类似于BASIC作为学习平台的问题。salon.com/technology/feature/2006/09/14/basic
GrandmasterB

我们训练从众多“又一个”框架中选择适当框架所需的解决问题的技能。
systempuntoout 2010年


1
愚弄一群人是什么意思?
兰德尔·舒尔茨

Answers:


18

同意 我目前正在开发一个受框架限制的软件包,几乎无法理解其业务。一旦框架使您脱离实际解决业务问题,而不仅仅是解决MVC,那就太过分了。如您所言,IMO许多程序员尝试使用架构师/程序来解决ORM和MVC,他们很少问这是否真的以任何方式有助于解决软件最初存在的问题。


是的,我知道在JSP页面中看到一些原始SQL 是“不可以”,但是,如果您是现场顾问,这在哪里适合特定解决方案?不,这并不意味着该框架是不正确的,并非所有客户都动20动用2万美元来确保在页面上投影一个次要数据点。


4
+1...just solving MVC, it has gone too far.
Talvi Watia

2
我很高兴Gratzy接受了这个答案,而不是社区投票给他的主观问题的最佳答案(相反)。看来他是在寻找答案,而不是问问题。
Craige '04

1
@Craige-您是否暗示正确的答案始终是最受欢迎的答案?
JE队列

1
@Xepoch-一点也不。作为一个主观的问题,我觉得这个问题没有真正的答案。我觉得很有趣,他选择的答案与该页面上大多数其他答案相反。我认为他找到了一个与他在问题中所提出的建议相吻合的答案,并认为这是正确的,因为这符合他的信念。
Craige'4

31

这个论点经常以许多领域和形式出现。

该参数的一般形式为:

使用[x:工具/技术]是否会使[y:受x影响的功能]的人变得更糟?

例如:

  • CAD软件是否会使较差的工程师受益?
  • 高中时期的计算器会使学生的数学成绩变差吗?
  • 社交软件是否会阻碍人们的亲身社交技能?
  • 会计软件会产生较差的会计结果吗?

从记忆中,无处不在的答案几乎总是这样:不是真的。您总会在[y]方面有好有坏的人,但现在他们在技能的另一个方面都很烂。

无论您做什么工作,对任何工作的基础知识都有更深入的了解都会有所帮助,即使是被认为是“补救性”的工作。知识总是有帮助的。


更大的球拍要求网球运动员的技巧更少会更糟吗?
systemovich 2011年

22

抽象是计算机编程的关键概念,框架可帮助程序员实现这一目标。这是一件好事。我怀疑我们许多人想用汇编语言开发复杂的系统!我认为,当程序员对抽象层掩盖的内容一无所知时,问题就来了。换句话说,即使您不直接与之交互或交互,也需要对幕后情况有所了解。

我记得在90年代中期,使用C和CGI(当时大多数网站仍然是静态HTML)开发了一些第一个动态网站。实际上并没有成熟的服务器端脚本语言(如PHP或ASP),并且几乎没有库,因此您必须将每个页面的整个HTTP响应流写出到服务器。解析GET和POST参数需要编写自己的库。这是乏味的,缓慢的,努力的并且非常容易出错。我一点也不会错过!

但是,我也感到像ASP.NET Web窗体之类的框架使Web的整个无状态本质抽象化了,以至于许多新的Web开发人员几乎不了解引擎盖下的实际情况。这会导致效率低下,methodology肿的代码,导致性能降低,因为开发人员使用“拖放”方法将组件组合在一起,而没有意识到HTTP级别正在发生什么。

因此,我认为框架对于开发高级软件是必不可少的,但是它们并不能免除开发人员对抽象内容的理解。是的,框架会使您愚蠢,但前提是您不了解框架。


我完全不同意“ ASP.NET Web表单抽象了Web的整个无状态本质”,有很多次我遇到了一些开发人员,他们不了解其IsPostBack
底层

14

自动变速箱或可感应雨水的雨刷器会使我们成为更差的驾驶员吗?

我认为没有框架的编码不一定意味着对底层系统有更好的理解。雇主必须在面试中问一些简单的编码问题,以确保应聘者能够采用一种连贯的方法来证明这一点。

最终,这取决于开发人员来学习。好人做,坏人不做。

同样,仅仅因为没有实际分析其功能和优点/缺点而选择框架,这也是开发实践不佳的标志。


11
自动变性人确实让驾驶更糟糕:)
JE队列

3
我不会不同意,只问框架是否可以使更多不良的开发人员受益?
Gratzy

2
@格拉茨:我不这么认为。我认为,即使没有框架,同样糟糕的开发人员仍然会以不同的方式蓬勃发展。
亚当李尔

3
我不同意安娜。没有框架,甚至懒惰的程序员也不得不扩展他们的知识。框架实际上正在增加(也许只是轻微增加)不良程序员的数量。
巫师

1
为了反驳自动变速器的论点:许多专业驾驶员不驾驶手动车,还有更多人将要进行浮板换挡,这通常是由计算机控制的。
史蒂文·埃弗斯

10

我认为问题在于,新程序员从越来越高的抽象水平开始,因此不会暴露于“幕后”事物的点点滴滴。因此,他们没有学习一些真正的基本编码基础知识,而这是过去几年中首先学到的东西。

每当一个明显的新程序员问有关存储数据的问题时,我每次都会摇头,每个人都立即告诉他们使用ORM工具。 不,不,不,不,不...他们需要先自己学习如何做。


4
“您需要自己做”的心态在哪里停止?每个程序员都需要在使用编译器之前编写自己的编译器吗?
mipadi

2
它不会停止。程序员应该始终在学习。并非所有程序员都需要编写编译器。但是我怀疑有很多伟大的程序员在整个职业生涯中都对自己的技术一无所知,以至于在某个时候他们不愿意尝试。
GrandmasterB

6
在不首先使用ORM工具直到您自己“完成”的逻辑下,在直接编写对数据库的调用之前,我可能也不应使用数据库抽象层?或者实际上,在使用文件系统编写存储系统之前,我不应该使用数据库吗?嗯,文件系统也是一个抽象...我从哪里开始?对于每一代人来说,它们都是从更高的抽象层次开始的,或者是为了在更短的时间内完成更多有趣的事情。
RationalGeek

2
我认为,如果程序员停留在较高的抽象层次上,那么他们可以成为一名完全称职的程序员,并从其功能齐全的小隔间创建功能完善的业务应用程序。但是我怀疑它们会是创建下一个必须使用的编程语言的人,还是在数据库中创建下一个创新的人,或者编写将图形技术推向边缘的下一个创新游戏的人。
GrandmasterB 2010年

2
@jkohlhepp:在我尝试过的每个重要项目中,提供的抽象总是会泄漏。如果我没有动力去理解正在发生的事情的深层内容,那我将会迷失而无能为力。如果您想做有趣的事情,那么您必须了解一切。
保罗·内森

4

也许“笨拙”的分布并没有真正改变,我们只是向开发人员提供更大,更复杂的方式来射击自己?


4

不是让程序员感到沮丧的框架。愚蠢的程序员无论是否使用框架都将变得愚蠢。

确实,了解工具或框架可以帮助您简化的低级工作可以使您更好地使用工具和框架。您还可以更轻松地调试问题,并解决工具不可避免的功能缺陷。

例如,我在大学的Compiler Design上了一堂课,在学习使用lex和yacc之类的解析器生成器之前,我们用C从头开始编写了LR解析器。这非常有教育意义,从那时起,我对所使用的所有编程语言有了更好的理解和赞赏。

但是我并不是说每个程序员都需要花很多年的时间才能为宫城先生的汽车打蜡,然后才能允许他们进行高水平的工作。很多编程工作都是明智的,决定了软件需要做什么而不是用特定语言或工具进行编码的机械工作,而是由。

在智力工作中,聪明与愚蠢之间的关系更为重要。


4

引用詹姆斯·拉鲁斯(James Larus)出色的“支出摩尔的红利”(强调):

30年前,比尔·盖茨将Altair Basic中的提示从“就绪”更改为“确定”,以节省5个字节的内存。如今,令人难以置信的是,开发人员会意识到他们程序的这一详细级别,更不用说担心它了,正确的是,因为今天如此大的变化是不明显的... 不可能我们可以生产目前的系统使用具有4K内存的机器上可能(必要)的手工制作技术。

我认为说框架会让您避免解决棘手问题所必需的技能,或者让您避免深入理解可能会误导您。相反,我们之所以能够构建当今复杂的系统(其复杂性可能会产生困难的问题并无法深入理解)的唯一原因是因为我们拥有框架(以及高级OO垃圾收集语言以及具有上下文相关帮助和功能的IDE。动态语法检查,以及所有其他软件开发的进步,这些进步有时被批评为愚蠢的程序员)。


2

框架很棒。但是您必须知道幕后情况。因此,问题在于程序员在没有足够的底层系统知识的情况下过于依赖框架。

MFC是一个过时的示例:程序员可以使用MFC而不是Windows API来节省大量时间,但是如果不了解API(这意味着具有使用原始API的实际工作背景),他们通常会被困。几乎从来没有发生过,因为典型的MFC程序员具有Windows API知识。

然而,Windows窗体上的.NET,多亏了更好的封装和更好的对象模型,程序员可以忽略差不多,他只用另一个Windows API的包装。因此,卡住的可能性较小,但是一旦发生,可能会造成伤害。

不幸的是,上市时间总是很短,项目也越来越复杂,因此程序员没有时间去深入研究。那是软件业的悲哀状态。


1

它可以将智能放置在需要的地方。人们不需要了解量子力学和牛顿物理学就可以建立一种将球从建筑物顶部掉落的机制。软件中的每个新层都应建立在最后一层之上,并从有用的应用程序构造中删除样板

那些需要或想知道框架背后的“东西”的人将通过钩子或骗子进行研究和调查。


1

不,绝对不是。框架的核心是子例程库和模板以及两个久经考验的程序员工具的组合。``可怜的工人责怪他的工具...

...而且有很多贫穷的工人在使用和指责框架。


我认为您可能会遗漏这个问题,我并不是在暗示框架不是它的好工具,因为那里有太多的工具提供了太多的抽象,从而使更多的人可以责怪他们的工具。
Gratzy

3
@格拉茨:好吧,当然。使用工具的人越多,就越难受。当计算机庞大,昂贵且稀有时,世界上只有少数人可以抱怨他们的使用难度—现在每个人都在抱怨。同样,框架不必使程序员变得笨拙,它们恰好吸引了很多笨拙的程序员。
Shog9

1

在构建软件时,框架可以节省时间。在学习构建软件时,框架会妨碍理解。

我认为问题主要出在功能过于强大的计算机之一上。对于大多数程序员来说,没有明智的理由“扎根基础”。做相同的事情只需要花费更多时间,而在运行时则没有任何有意义的区别。解决该问题的唯一方法是引入人为的限制,就像js1k这样的竞争。

也许学校应该有一个专门的主题“优化设计”,您必须在有限的时间和空间限制下建立程序?


-1

不,学习框架可以提高程序员的技能。框架是编程语言的扩展。一些语言已经基于框架。我同时使用PHP和Java。PHP需要一个类似模板引擎的框架(有时)。Java不需要框架(大多数时候),它已经具有许多方法和库。

大多数框架将具有程序员反复使用的功能。


1
噢,您的答案绝对不会错。
NB 2012年

-1

为了看似在这里扮演魔鬼的拥护者,我认为框架(无论如何都是“好”框架)实际上可以大大促进程序员的学习。一个设计良好的框架将解决许多问题,并且通过使用该框架,程序员可以了解正在解决的问题以及如何解决这些问题。在我看来,框架是(应该是)编程最佳实践的结晶,并且可以通过示例来教程序员。


为什么要下票?仅仅是因为您不同意?嘘
克里斯·艾伦·莱恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.