那里有很多程序员,他们也是查询编写和数据库设计方面的专家。
这是成为专家程序员或软件工程师的核心要求吗?
尽管查询和代码的开发方式有很多相似之处,但我个人认为,查询似乎与代码具有不同的结构,并且由于方法不同,很难同时掌握两者。
那里有很多程序员,他们也是查询编写和数据库设计方面的专家。
这是成为专家程序员或软件工程师的核心要求吗?
尽管查询和代码的开发方式有很多相似之处,但我个人认为,查询似乎与代码具有不同的结构,并且由于方法不同,很难同时掌握两者。
Answers:
数据库查询编写是否应该成为核心要求取决于工作,但是关系数据库在当前技术中无处不在。
因此,如果遇到一位不知道如何编写数据库查询的程序员,那么我会期望以下两件事之一:
数据库查询从根本上与更多标准编程语言不同。它们是代数的,并且打算在关系数据上运行,而C#或Java是必不可少的,并且在磁盘,内存,用户输入等上运行。即使是形式更代数的LISP或Haskell之类的功能语言也很少面向关系数据。
编辑:正如我和其他人在评论中所指出的那样,有经验的开发人员可能不太了解数据库查询有一些正当的理由:
这些警告虽然有效,但不能说服经验丰富的开发人员不知道数据库查询的原因。除非高度专业,否则程序员应该熟悉关系数据库。
总而言之,大多数经验丰富的开发人员都应该了解数据库查询。
任何软件工程师都应该对数据库以及如何使用SQL进行数据库有基本的了解,至少要达到他们了解该数据库可用于什么目的的水平(并且我还将包括对键,视图的理解)。 ,存储过程和触发器)。
并非每个软件工程师都需要成为专家,并且所需的专业知识水平实际上取决于他们关注的软件类型。嵌入式软件,硬件驱动程序和操作系统很少使用SQL,但是应用程序软件(基于Web或桌面或基于服务/守护程序)始终使用数据库。
在某些专业领域(例如嵌入式系统)中,不需要数据库知识。但是大多数业务应用程序都使用某种类型的数据库,如果您不完全了解如何正确使用它,则可能会造成性能问题,而这些问题很难修复。重构数据库可能是一个复杂而困难的过程,许多地方都因为这种困难而选择不修复结构性问题,而只是将自己挖得更深。如果您具有数据库知识,那么设计会变得容易得多,并且随着时间的流逝工作的可能性会更大。
ORM不能代替获取数据库知识。任何不了解数据库查询和设计基础知识的人都注定要拥有性能低下,设计不良的数据库,这将影响应用程序处理负载的远程能力。知道自己在做什么的人手中的ORM很好;在那些不愿学习数据库的人的手中,它们通常是一场灾难。
如果我有一个带有数据库后端的项目,那么数据库专家将是我雇用的第二个开发人员(仅次于初始应用程序开发人员)。通常,数据库并不是一成不变的,数据将在20年后以几乎相同的形式存在于数据库中,因此在开始阶段就具有专业知识是值得的。
项目经常会遇到麻烦,因为在数据库拥有1亿条记录并且运行缓慢之前,他们不会雇用这些人。否则他们会指责该工具的性能不佳(如果设计正确,SQL Server的运行速度不会慢)。
政治上正确的答案:这取决于。如果开发人员从不使用关系数据库,那么SQL知识就毫无价值(在当今NoSQL应用程序的时代,这实际上很有可能)。
其次,如果有DBA或专职查询编写器(无论标题如何),那么理解也就没有那么重要了。
只有开发人员需要千篇一律,并且在他的项目中有使用关系数据库的要求(例如,在老式的Web应用程序中或与现有数据库连接)时,这才非常重要。
我的个人看法:否。有经验的软件开发人员应能在必要时学习新技能(例如SQL),而不是“默认”。恕我直言,灵活性和学习与理解的能力使优秀的开发人员与优秀的开发人员区分开。“金锤子”规则也适用-如果您有一个具有丰富的SQL知识的开发人员,则该开发人员很可能会拉出他最了解的工具-关系数据库-尝试解决每个问题,而不一定有成为最佳解决方案。当然,这也适用于NoSQL倡导者;)。
有经验的程序员应该知道为正确的工作选择正确的工具。
一位具有企业和业务应用程序背景的优秀软件工程师(编辑:特别是在使用RDBMS的项目中)应该具有以标准格式编写关系数据库查询的专业知识。此外,他们应该能够理解复杂的模式并提出至少中等复杂度的模式设计。
数据建模人员或功能架构师应从事极其高级或复杂的方案设计。
这并不意味着数据库程序员也没有位置。如果可能,最好将复杂的存储过程,复杂而高效的查询以及针对单个数据库供应商(例如Oracle,MySQL,SQLServer等)的独特工具和产品的数据库层软件设计和体系结构最好地留给专业软件具有这些高度专业化和复杂的报价的经验的工程师。
但是,我认为绝大多数业务和企业系统都不能证明需要数据建模人员和专门的数据库程序员,但是在从事此类项目之前,我曾从这些人带给桌面的知识和专业知识中受益匪浅。
我认为查询编写不应成为程序员的核心要求。话虽如此,我相信能够编写查询和设计数据库的程序员对组织来说将更有价值。
但是,如果该程序员只能编写“ select * from tblxxxx”类型查询,则我不会认为该程序员是专家。同样,如果由该程序员设计的数据库将一对多关系放入一个表而不是两个表中,那么我不会认为该程序员是专家。
这是我向非IT人员解释的方法。IT专业人员专门研究某些领域,类似于木匠,电工和水管工专门研究那里受人尊敬的领域。他们倾向于重叠某些技能,但不是所有领域的专家。电工可以满怀信心地完成简单的木工任务,但尝试应对复杂的结构却并非好兆头。
同样,程序员可以并且应该知道如何编写或操作简单的查询和数据库设计,但不应期望设计复杂的数据结构。