为什么应用程序开发人员可以执行数据库工作,但数据库开发人员试图避开应用程序?

时间:2022-12-21 12:33:21

In my experience, this has been a contentious issue between "backend" (database developer) and "frontend" guys (application developer, client and server side).

根据我的经验,这是“后端”(数据库开发人员)和“前端”人员(应用程序开发人员,客户端和服务器端)之间的争议问题。

There have been many heated pub discussions on this subject.

关于这个问题,有很多热烈的酒吧讨论。

I just want to know is it just people have different mindsets, or lazy to learn more and feel comfortable in what they know, or something else.

我只是想知道,只是人们有不同的心态,或者懒得学习更多,对自己所知道的东西感到舒服,或其他什么。

12 个解决方案

#1


4  

I would say it's on a need to know basis. Applications developers often need to know how to connect to databases, add records, delete records etc... This is taken further with new technologies such as LINQ where developers can write database queries within their actual code.

我想说这是需要了解的基础。应用程序开发人员通常需要知道如何连接到数据库,添加记录,删除记录等......这是LINQ等新技术的进一步发展,开发人员可以在实际代码中编写数据库查询。

Database developers on the other hand only really need to know how to write database queries as that is their job and probably won't need to worry about the code at application level.

另一方面,数据库开发人员只需要知道如何编写数据库查询,因为这是他们的工作,并且可能不需要担心应用程序级别的代码。

#2


20  

I might re-phrase the question: why do (some) application developers think they can do "database stuff" without actually bothering to understand it properly? Whereas database developers do not (in general) assume they can write a good application without some training and experience!

我可能会重新说出这样一个问题:为什么(某些)应用程序开发人员认为他们可以做“数据库内容”而实际上并没有真正理解它?而数据库开发人员(通常)认为他们可以在没有一些培训和经验的情况下编写好的应用程序!

#3


10  

It is about levels of abstraction. A database is the lowest level of abstraction in a typical business application (software-wise). It is much more likely that a developer working on an outer layer of the abstraction would have knowledge of an inner layer than a developer in an inner layer would know about the outer layer.

这是关于抽象的层次。数据库是典型业务应用程序中的最低抽象级别(软件方式)。处理抽象外层的开发人员更有可能知道内层知识而不是内层开发人员知道外层。

This is because inner layers of abstraction best perform when they are ignorant of the outer layers who depend on them.

这是因为当内部抽象层不知道依赖它们的外层时,它们最能表现出来。

So a designer in the presentation layer of a website may know a bit about the server-side code they depend on because they interact with it. But the developer working on the server does not need to know anything about design at all.

因此,网站表示层中的设计人员可能会对他们所依赖的服务器端代码有所了解,因为他们与之交互。但是在服务器上工作的开发人员根本不需要了解任何有关设计的知识。

#4


2  

Because programmers very often must understand and interact with databases to do their job, but DBAs very often don't need to do any programming (outside of the DBMS) to do their jobs.

因为程序员经常必须理解并与数据库交互才能完成工作,但DBA通常不需要做任何编程(在DBMS之外)来完成他们的工作。

#5


1  

I believe it stems from the fact that programming in sql looks easy, and to get started you have to have a small amount of knowledge (Really for a programmer to learn SELECT * FROM Table is pretty easy). Application programming is not the same way. It becomes very complex in a small amount of time, and that discourages a lot of people. Now I am not saying that database people are any less intelligent it is just what they do looks easier than building applications.

我相信这源于sql中的编程看起来很简单,并且要开始使用,你必须掌握少量知识(真正让程序员学习SELECT * FROM Table非常简单)。应用程序编程的方式不一样。它会在很短的时间内变得非常复杂,并且会使很多人望而却步。现在我并不是说数据库人员不那么聪明,他们所做的事情看起来比构建应用程序更容易。

#6


1  

If you develop applications, then the chances are, that sooner or later, you'll have to connect an app to a back-end.

如果您开发应用程序,那么迟早您可能需要将应用程序连接到后端。

The opposite is not as true.

相反的情况并非如此。

#7


1  

I think it stems from necessity. If you consider the roles of each person, a programmer needs to to database related stuff far more than database workers need to do programming tasks.

我认为这源于必要性。如果考虑每个人的角色,程序员需要与数据库相关的东西远远超过数据库工作者需要进行编程任务。

#8


1  

From my experience, having developed both "databases" and "applications" (following your nomenclature...), I guess there's a big difference in state management.

根据我的经验,开发了“数据库”和“应用程序”(遵循您的命名法......),我想在州管理方面存在很大差异。

Properly designed databases are always in a "clean" state, and every transaction keeps this consistency. So when developing a database, you have to very clearly specify your data abstractions into tables and which updates are legal and so on.

正确设计的数据库始终处于“干净”状态,每个事务都保持这种一致性。因此,在开发数据库时,您必须非常清楚地将数据抽象指定到表中,哪些更新是合法的等等。

I've found that most application developers (myself included :)) do a very sloppy job in keeping this consistent state in the application. Any non-trivial interface has many more possible states to manage than a modest database, and it's not as easy to make sure it's always in a clean state. It's also harder to analyze every possible sequence of steps that users will perform.

我发现大多数应用程序开发人员(我自己包括:))在应用程序中保持这种一致状态时做了一项非常草率的工作。任何非平凡的接口都有比可用数据库更多的可管状态,并且确保它始终处于干净状态并不容易。分析用户将执行的每个可能的步骤序列也更加困难。

#9


1  

From my experience, the application developers don't do all the database stuff. Consider all the administration that is related to the databse, backups, replication, etc.

根据我的经验,应用程序开发人员不会完成所有数据库工作。考虑与数据库,备份,复制等相关的所有管理。

A typical DBA (at least on most of the projects I've been involved to) takes care about everything that is related to project databases - all administration, cooperates with application developers on performance tuning, gives advices about SQL used by the app, does some of the stored procs coding, creates (or, at least reviews and consults) physical DB designs, etc.

典型的DBA(至少在我参与的大多数项目中)都会关注与项目数据库相关的所有内容 - 所有管理,与应用程序开发人员合作进行性能调优,提供有关应用程序使用的SQL的建议,一些存储过程编码,创建(或至少评论和咨询)物理数据库设计等。

So, aren't the database guys "lazy", or "fine with what they already know" just from an application developer's perspective? I'm an app developer myself and there is a whole lot of things that I just don't know about the DBs we're using on our projects.

那么,从应用程序开发人员的角度来看,数据库人员不是“懒惰”,还是“他们已经知道的很好”?我自己是一名应用程序开发人员,我对我们在项目中使用的数据库有很多不了解的事情。

#10


1  

Part of my education ensured I got a decent understanding of how Databases work. I went into the field expecting to do database work, and a lot of it. I'm a web app guy; it comes with the territory I guess.

我的部分教育确保了我对数据库工作方式的理解。我进入该领域期待做数据库工作,以及很多。我是一个网络应用程序的人;它来自我认为的领域。

My two jobs as a developer have been at two shops that would best be described as tiny (2 people myself included, and then just me) and tiny (3 developers, briefly having a fourth). I have not observed an immediate business need for, nor worked anywhere that had the resources to employ a dedicated DB guy. I can envision some scenarios where that would change (including a new job :P).

我作为开发人员的两份工作一直在两个商店,最好被描述为微小(我自己包括2个人,然后只有我)和小型(3个开发人员,短暂地有第四个)。我没有观察到直接的业务需求,也没有在任何有资源雇用专职数据库人员的地方工作。我可以设想一些会改变的场景(包括新工作:P)。

As to the rest, I agree that abstraction is also a factor and as developers we're way up on top/outside looking in. I can't imagine doing web app development without DB skills, and I consider Sql/DB Management to be both an important tool and an area I need to stay sharp in.

至于其他方面,我同意抽象也是一个因素,作为开发人员,我们可以在顶部/外部查看。我无法想象没有数据库技能的Web应用程序开发,我认为Sql / DB Management是这是一个重要的工具和我需要保持锐利的领域。

I'll add that I treat the database side as its own field. There's skills that translate between the two, but there's a lot of specialized knowledge I need to acquire to get better at it, and that being a good programmer doesn't necessarily mean I'm doing a good job on the back end either (fortunately, I'm not a good programmer ;) ). Also, I'm pretty sure that's what she said.

我将补充一点,我将数据库端视为自己的字段。有两种技能可以在两者之间进行转换,但是我需要获得很多专业知识以获得更好的知识,并且作为一名优秀的程序员并不一定意味着我在后端也做得很好(幸运的是) ,我不是一个优秀的程序员;))。而且,我很确定这就是她所说的。

#11


1  

2 reasons:

原因2:

  • DB Vendors facilitate bad SQL, and
  • 数据库供应商促进了错误的SQL,以及
  • SQL is hidden from view while application UI is front and center.
  • 当应用程序UI位于前端和中心时,SQL将从视图中隐藏。

Most naive developers think SQL is a procedural language and write it as such because vendors ensure that the tools exist so that they can do so. DBAs know that good SQL is set-oriented and has optimization principles that are totally different from those involved in application programming.

大多数天真的开发人员认为SQL是一种过程语言,因此供应商确保这些工具存在以便他们可以这样做。 DBA知道好的SQL是面向集合的,并且具有与应用程序编程中涉及的完全不同的优化原则。

The visibility aspect makes it so the application developers can write bad SQL against a database and get it to perform in a marginal way, and no one ever sees quite how bad it is. When a DBA writes an application, there are immediate critiques on its appearance and behavior because it's directly visible to the end user.

可见性方面使得应用程序开发人员可以针对数据库编写错误的SQL并使其以边缘方式执行,并且没有人会看到它有多糟糕。当DBA编写应用程序时,会立即对其外观和行为进行批评,因为它对最终用户直接可见。

#12


1  

Good question. Actually why developers do Database Stuff because where no dedicated Database guys then developers have to do that. But a company have Database Guys also have Development guys.

好问题。实际上为什么开发人员会使用Database Stuff,因为没有专门的数据库人员,那么开发人员必须这样做。但是一家公司的数据库伙伴也有开发人员。

:) what is your idea ?

:) 你有什么想法 ?

#1


4  

I would say it's on a need to know basis. Applications developers often need to know how to connect to databases, add records, delete records etc... This is taken further with new technologies such as LINQ where developers can write database queries within their actual code.

我想说这是需要了解的基础。应用程序开发人员通常需要知道如何连接到数据库,添加记录,删除记录等......这是LINQ等新技术的进一步发展,开发人员可以在实际代码中编写数据库查询。

Database developers on the other hand only really need to know how to write database queries as that is their job and probably won't need to worry about the code at application level.

另一方面,数据库开发人员只需要知道如何编写数据库查询,因为这是他们的工作,并且可能不需要担心应用程序级别的代码。

#2


20  

I might re-phrase the question: why do (some) application developers think they can do "database stuff" without actually bothering to understand it properly? Whereas database developers do not (in general) assume they can write a good application without some training and experience!

我可能会重新说出这样一个问题:为什么(某些)应用程序开发人员认为他们可以做“数据库内容”而实际上并没有真正理解它?而数据库开发人员(通常)认为他们可以在没有一些培训和经验的情况下编写好的应用程序!

#3


10  

It is about levels of abstraction. A database is the lowest level of abstraction in a typical business application (software-wise). It is much more likely that a developer working on an outer layer of the abstraction would have knowledge of an inner layer than a developer in an inner layer would know about the outer layer.

这是关于抽象的层次。数据库是典型业务应用程序中的最低抽象级别(软件方式)。处理抽象外层的开发人员更有可能知道内层知识而不是内层开发人员知道外层。

This is because inner layers of abstraction best perform when they are ignorant of the outer layers who depend on them.

这是因为当内部抽象层不知道依赖它们的外层时,它们最能表现出来。

So a designer in the presentation layer of a website may know a bit about the server-side code they depend on because they interact with it. But the developer working on the server does not need to know anything about design at all.

因此,网站表示层中的设计人员可能会对他们所依赖的服务器端代码有所了解,因为他们与之交互。但是在服务器上工作的开发人员根本不需要了解任何有关设计的知识。

#4


2  

Because programmers very often must understand and interact with databases to do their job, but DBAs very often don't need to do any programming (outside of the DBMS) to do their jobs.

因为程序员经常必须理解并与数据库交互才能完成工作,但DBA通常不需要做任何编程(在DBMS之外)来完成他们的工作。

#5


1  

I believe it stems from the fact that programming in sql looks easy, and to get started you have to have a small amount of knowledge (Really for a programmer to learn SELECT * FROM Table is pretty easy). Application programming is not the same way. It becomes very complex in a small amount of time, and that discourages a lot of people. Now I am not saying that database people are any less intelligent it is just what they do looks easier than building applications.

我相信这源于sql中的编程看起来很简单,并且要开始使用,你必须掌握少量知识(真正让程序员学习SELECT * FROM Table非常简单)。应用程序编程的方式不一样。它会在很短的时间内变得非常复杂,并且会使很多人望而却步。现在我并不是说数据库人员不那么聪明,他们所做的事情看起来比构建应用程序更容易。

#6


1  

If you develop applications, then the chances are, that sooner or later, you'll have to connect an app to a back-end.

如果您开发应用程序,那么迟早您可能需要将应用程序连接到后端。

The opposite is not as true.

相反的情况并非如此。

#7


1  

I think it stems from necessity. If you consider the roles of each person, a programmer needs to to database related stuff far more than database workers need to do programming tasks.

我认为这源于必要性。如果考虑每个人的角色,程序员需要与数据库相关的东西远远超过数据库工作者需要进行编程任务。

#8


1  

From my experience, having developed both "databases" and "applications" (following your nomenclature...), I guess there's a big difference in state management.

根据我的经验,开发了“数据库”和“应用程序”(遵循您的命名法......),我想在州管理方面存在很大差异。

Properly designed databases are always in a "clean" state, and every transaction keeps this consistency. So when developing a database, you have to very clearly specify your data abstractions into tables and which updates are legal and so on.

正确设计的数据库始终处于“干净”状态,每个事务都保持这种一致性。因此,在开发数据库时,您必须非常清楚地将数据抽象指定到表中,哪些更新是合法的等等。

I've found that most application developers (myself included :)) do a very sloppy job in keeping this consistent state in the application. Any non-trivial interface has many more possible states to manage than a modest database, and it's not as easy to make sure it's always in a clean state. It's also harder to analyze every possible sequence of steps that users will perform.

我发现大多数应用程序开发人员(我自己包括:))在应用程序中保持这种一致状态时做了一项非常草率的工作。任何非平凡的接口都有比可用数据库更多的可管状态,并且确保它始终处于干净状态并不容易。分析用户将执行的每个可能的步骤序列也更加困难。

#9


1  

From my experience, the application developers don't do all the database stuff. Consider all the administration that is related to the databse, backups, replication, etc.

根据我的经验,应用程序开发人员不会完成所有数据库工作。考虑与数据库,备份,复制等相关的所有管理。

A typical DBA (at least on most of the projects I've been involved to) takes care about everything that is related to project databases - all administration, cooperates with application developers on performance tuning, gives advices about SQL used by the app, does some of the stored procs coding, creates (or, at least reviews and consults) physical DB designs, etc.

典型的DBA(至少在我参与的大多数项目中)都会关注与项目数据库相关的所有内容 - 所有管理,与应用程序开发人员合作进行性能调优,提供有关应用程序使用的SQL的建议,一些存储过程编码,创建(或至少评论和咨询)物理数据库设计等。

So, aren't the database guys "lazy", or "fine with what they already know" just from an application developer's perspective? I'm an app developer myself and there is a whole lot of things that I just don't know about the DBs we're using on our projects.

那么,从应用程序开发人员的角度来看,数据库人员不是“懒惰”,还是“他们已经知道的很好”?我自己是一名应用程序开发人员,我对我们在项目中使用的数据库有很多不了解的事情。

#10


1  

Part of my education ensured I got a decent understanding of how Databases work. I went into the field expecting to do database work, and a lot of it. I'm a web app guy; it comes with the territory I guess.

我的部分教育确保了我对数据库工作方式的理解。我进入该领域期待做数据库工作,以及很多。我是一个网络应用程序的人;它来自我认为的领域。

My two jobs as a developer have been at two shops that would best be described as tiny (2 people myself included, and then just me) and tiny (3 developers, briefly having a fourth). I have not observed an immediate business need for, nor worked anywhere that had the resources to employ a dedicated DB guy. I can envision some scenarios where that would change (including a new job :P).

我作为开发人员的两份工作一直在两个商店,最好被描述为微小(我自己包括2个人,然后只有我)和小型(3个开发人员,短暂地有第四个)。我没有观察到直接的业务需求,也没有在任何有资源雇用专职数据库人员的地方工作。我可以设想一些会改变的场景(包括新工作:P)。

As to the rest, I agree that abstraction is also a factor and as developers we're way up on top/outside looking in. I can't imagine doing web app development without DB skills, and I consider Sql/DB Management to be both an important tool and an area I need to stay sharp in.

至于其他方面,我同意抽象也是一个因素,作为开发人员,我们可以在顶部/外部查看。我无法想象没有数据库技能的Web应用程序开发,我认为Sql / DB Management是这是一个重要的工具和我需要保持锐利的领域。

I'll add that I treat the database side as its own field. There's skills that translate between the two, but there's a lot of specialized knowledge I need to acquire to get better at it, and that being a good programmer doesn't necessarily mean I'm doing a good job on the back end either (fortunately, I'm not a good programmer ;) ). Also, I'm pretty sure that's what she said.

我将补充一点,我将数据库端视为自己的字段。有两种技能可以在两者之间进行转换,但是我需要获得很多专业知识以获得更好的知识,并且作为一名优秀的程序员并不一定意味着我在后端也做得很好(幸运的是) ,我不是一个优秀的程序员;))。而且,我很确定这就是她所说的。

#11


1  

2 reasons:

原因2:

  • DB Vendors facilitate bad SQL, and
  • 数据库供应商促进了错误的SQL,以及
  • SQL is hidden from view while application UI is front and center.
  • 当应用程序UI位于前端和中心时,SQL将从视图中隐藏。

Most naive developers think SQL is a procedural language and write it as such because vendors ensure that the tools exist so that they can do so. DBAs know that good SQL is set-oriented and has optimization principles that are totally different from those involved in application programming.

大多数天真的开发人员认为SQL是一种过程语言,因此供应商确保这些工具存在以便他们可以这样做。 DBA知道好的SQL是面向集合的,并且具有与应用程序编程中涉及的完全不同的优化原则。

The visibility aspect makes it so the application developers can write bad SQL against a database and get it to perform in a marginal way, and no one ever sees quite how bad it is. When a DBA writes an application, there are immediate critiques on its appearance and behavior because it's directly visible to the end user.

可见性方面使得应用程序开发人员可以针对数据库编写错误的SQL并使其以边缘方式执行,并且没有人会看到它有多糟糕。当DBA编写应用程序时,会立即对其外观和行为进行批评,因为它对最终用户直接可见。

#12


1  

Good question. Actually why developers do Database Stuff because where no dedicated Database guys then developers have to do that. But a company have Database Guys also have Development guys.

好问题。实际上为什么开发人员会使用Database Stuff,因为没有专门的数据库人员,那么开发人员必须这样做。但是一家公司的数据库伙伴也有开发人员。

:) what is your idea ?

:) 你有什么想法 ?