我只想知道,这是因为人们有不同的思维方式,或者是懒得学习更多并感觉在自己所知道的领域很舒适,还是其他原因。
我可能会重新表达这个问题:为什么(一些)应用程序开发人员认为他们可以在不真正了解数据库的情况下做“数据库相关工作”?而数据库开发人员通常不会认为他们可以在没有一定的培训和经验的情况下编写出一个好的应用程序!
这涉及到抽象层次。在典型的商业应用程序中(软件方面),数据库是最低级别的抽象。在外围抽象层上工作的开发人员比内部抽象层上的开发人员更有可能了解内部抽象层,因为对于依赖它们的外部抽象层而言,内部抽象层表现得越无知表现得就越好。
这是因为内部抽象层最好在不了解依赖它们的外部抽象层的情况下执行。
因此,网站演示层的设计师可能会对他们所依赖的服务器端代码有一定的了解,因为他们与之交互。但是在服务器上工作的开发人员根本不需要了解设计方面的任何知识。
我认为这是需要知道的基础。应用程序开发人员通常需要知道如何连接数据库,添加记录,删除记录等等...随着新技术的出现,例如LINQ,开发人员可以在实际代码中编写数据库查询。
另一方面,数据库开发人员只需要知道如何编写数据库查询,因为那是他们的工作,可能不需要担心应用程序层面的代码。
因为程序员在工作中经常需要理解和与数据库交互,但数据库管理员通常不需要在其工作范围之外进行编程(除了在DBMS中)。
我认为这源于在SQL编程中看起来很容易,而要开始学习只需要一点点的知识(对于程序员来说,学习SELECT * FROM Table
非常容易)。应用程序编程并不是这样。它在短时间内变得非常复杂,这使很多人望而却步。现在我并不是说数据库人员比其他人聪明,只是他们所做的事情看起来比构建应用程序更容易。
根据我的经验,我开发过“数据库”和“应用程序”(按照您的命名法...),我想状态管理方面有很大的区别。
正确设计的数据库始终处于“干净”的状态,并且每个事务都保持这种一致性。因此,在开发数据库时,您必须非常清楚地将数据抽象成表格,并指定哪些更新是合法的等等。
我发现大多数应用程序开发人员(包括我自己 :)) 在保持应用程序中的一致状态方面做得很草率。任何非平凡的界面都有比适度的数据库更多的可能状态需要管理,而且要确保它始终处于干净的状态并不容易。分析用户执行的每个可能步骤也更加困难。
根据我的经验,应用程序开发人员并不处理所有与数据库相关的事情。考虑到与数据库相关的所有管理工作,如备份、复制等。
一个典型的数据库管理员(至少在我参与的大多数项目中)负责与项目数据库相关的所有事务 - 所有管理工作,与应用程序开发人员合作进行性能调整,提供有关应用程序使用的SQL的建议,编写一些存储过程代码,创建(或至少审查和咨询)物理数据库设计等。
那么,从应用程序开发人员的角度来看,数据库人员是不是“懒惰”,或者“对他们已经知道的东西感到满意”?我自己也是应用程序开发人员,有很多关于我们项目中使用的数据库的事情我不知道。
我的教育背景确保了我对数据库的工作原理有一个不错的理解。我进入这个领域时希望能够从事很多数据库相关的工作,因为我是一个Web应用程序员,我想这就是我的职责所在。
我的两份开发者工作都是在两家可以被描述为微小的公司(包括我在内只有2个人,然后就只有我一个人;3名开发人员的微小公司,短暂地还有第四个人)。我没有观察到立即需要一个专门的数据库工程师,也没有在任何资源不足以雇佣一个专门的数据库工程师的公司工作过。我可以设想一些情况可能会改变这种状况(包括新工作:P)。
至于其他方面,我同意抽象化也是一个因素,作为开发人员,我们处于顶层/外部看着。我无法想象在没有DB技能的情况下进行Web应用程序开发,而我认为SQL/DB管理既是一个重要的工具,也是我需要保持锐利的领域。
我要补充说的是,我将数据库方面视为一个独立的领域。这之间有许多可以相互转换的技能,但是有很多专业知识我需要掌握才能变得更好,并且成为一个好的程序员并不意味着我在后端方面也做得很好(幸运的是,我不是一个好的程序员;))。另外,我可以肯定地说,这就是她说的话。