软件工程师不可不知的 10 个概念
出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追
求。除了这些,优秀的软件工程师还要通晓 10 个概念,这 10 个概念超越了编程语言与设
计模式,软件工程师应当从更广的范围内明白这些道理。
10. 关系数据库 (Relational Databases)
关系数据库因为在大规模 Web 服务上缺乏可扩充性而颇受微词,然而,关系数据库仍然
是近 20 年来计算机技术中最伟大的成就。关系数据库对处理订单,公司数据方面有着出
色的表现。
关系数据库的核心是以记录表示数据,记录存放在数据库表,数据库使用查询语言
(SQL)对数据进行搜索与查询,同时,数据库对各个数据表进行关联。
数据库的标准化技术(normalization)讲的是使用正确的方式对数据进行分存以降低冗
余,并加快存取速度。
9. 安全 (Security)
随着黑客的崛起与数据敏感性的上升,安全变得非常重要。安全是个广义的概念,涉及验
证,授权与信息传输。
验证是对用户的身份进行检查,如要求用户输入密码。验证通常需要结合 SSL (secure
socket layer)进行;授权在公司业务系统中非常重要,尤其是一些工作流系统。最近开
发的 OAuth 协议可以帮助 Web 服务将相应信息向相应用户开放。Flickr 便使用这种方式
管理私人照片和数据的访问权限。
另外一个安全领域是网络设防,这关系到操作系统,配置与监控。不仅网络危险重重,任
何软件都是。Firefox 被称为最安全的浏览器,仍然需要频频发布安全补丁。要为你的系
统编写安全代码就需要明白各种潜在的问题。
8. 云计算 (Cloud Computing)
RWW 最近的关于云计算的文章 Reaching For The Sky Through Compute Clouds 讲
到了云计算如何改变大规模 Web 应用的发布。大规模的并行,低成本,与快速投入市场。
并行算法发明以来,首先迎来的是网格计算,网格计算是借助空闲的桌面计算机资源进行
并行计算。最著名的例子是 Berkley 大学的 SETI@home 计划,该计划使用空闲的 CPU
资源分析太空数据。金融机构也大规模实施网格计算进行风险分析。空闲的资源,加上
J2EE 平台的崛起,迎来了云计算的概念:应用服务虚拟化。就是应用按需运行,并可以随
着时间和用户规模而实时改变。
云计算最生动的例子是 Amazon 的 Web 服务,一组可以通过 API 进行调用的应用,如
云 服 务 ( EC2 ) , 一 个 用 来 存 储 大 型 媒 体 文 件 的 数 据 库 ( S3 ) , 索 引 服 务
(SimpleDB),序列服务( SQS)。
7. 并发 (Concurrency)