软件工程师必须知道的10个概念

简介

软件工程师必须知道的10个概念|  《软件开发的未来》介绍了一些编程时所用到的技术。有了诸如Amazon 络服务之类的基础构件及丰富的基础库,开发一个好的软件就不需要像一个村落那么多的人了。

软件工程师必须知道的10个概念|  一个成功的软件工程师知道并会使用一定的设计模式、分解代码、撰写单元测试并从意识上追求简单化。除了这些基本方法外,还有一些优秀的程序员知晓的概念。这些概念超越了编程语言和不同的项目——它们不是设计模式,而是你需要掌握的更宏观的东西。这10个概念是:

  1. 软件工程师 必须知道的10个概念|
  2. 软件工程师必须知道的10个概念|接口
  3. 软件工程师必须知道的10个概念|协议和模板
  4. 软件工程师必须知道的10个概念|分层
  5. 软件工程师必须知道的10个概念|算法复杂度
  6. 软件工程师必须知道的10个概念|哈希
  7. 软件工程师必须知道的10个概念|缓存
  8. 软件工程师必须知道的10个概念|并发
  9. 软件工程师必须知道的10个概念|云计算
  10. 软件工程师必须知道的10个概念|安全
  11. 软件工程师必须知道的10个概念|关系数据库

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|10、关系数据库

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  关系数据库的核心是将信息以“记录”的方式表现出来。每一条记录都被添加到了一张表里,该表定义了信息的类型。该数据库提供了一种查询语言来搜索这些数据,目前最流行的是SQL语言。该数据库还允许从多个表中提取数据。

软件工程师必须知道的10个概念|  数据正规化技术是为将数据正确地保存再各个标准,从而使数据冗余达到最小,存取速度达到最高。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|9、安全

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  认证主要是用来验证用户的身份,典型的方法是在 站中弹出一个密码输入对话框。认证主要使用在SSL(安全套接字层)连接中,它可以在HTTP协议之上传输加密后的数据。授权是关于权限管理方面的,也是交互系统中非常重要的一项功能,特别是定义了工作流的项目。最近开发出来的OAuth原型帮助 络服务系使用户可以访问自己的私密信息,这也是Flickr所使用的工具。

软件工程师必须知道的10个概念|  另一个安全领域是 络保护,这牵涉到操作系统配置、监视黑客的行动等。不仅 络是脆弱的,任何一个软件工程师必须知道的10个概念|软件都是脆弱的。火狐浏览器,宣称是最安全的浏览器,也需要持续地打补丁。所以,要为你的项目写安全保护代码就需要了解这一领域的知识并识别出潜在的问题。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|8、云计算

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  云计算诞生于并行计算,即多个问题可以通过同时在多台计算机上运行来加快速度。

软件工程师必须知道的10个概念|  在并行算法之后出现了方格算法,这项技术在空闲的计算机上进行并行运算。第一个用例是Berkley的SETI@home项目,它使用了空闲的CPU周期来处理来自各方的数据。方格计算被金融公司广泛用来进行风险计算。但是,对这些资源的低估及J2EE平台的迅速发展,成为了云计算诞生的前兆:应用程序服务器虚拟化。其理念是:根据计算机用户的使用情况来决定要不要其参与计算。

软件工程师必须知道的10个概念|  如今最鲜活的云计算用例是使用应用程序接口(API)来连接的Amazon 络服务包。Amazon提供云服务(EC2)、用来储存大媒体文件的数据库(S3)、索引服务器(SimpleDB)、队列服务器(SQS)。这些最初的模块已经产生了前所未有的大规模计算了,而更棒的即将到来。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|7、并发

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  并发也就是平行,只不过是在程序内部进行的。大多数现代编程语言都原生支持了并发,如在Java中可以使用线程来实现这个功能。

软件工程师必须知道的10个概念|  一个经典的并发用例是生产/消费模型。当生产者在进行数据和任务处理时,消费者也在进行消费和执行。并发编程的复杂度取决于线程通常是需要对共有数据进行操作的。每个线程都有自己的执行流程,但都需要操作共有数据。目前一个最为复杂的并发程序是由Douq Lea开发的,目前作为Java核心的一部分。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|6、缓存

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  使用缓存也是有代价的。只有一小部分数据可以被存放在内存中。比较通用的数据剔除手段是通过算法选出最不常使用的数据(LRU)。这种算法必须是有效率的,而不是减慢程序的运行。

软件工程师必须知道的10个概念|  现在许多 络应用程序,包括Facebook,都在使用一种由Brad Firzpatrick开发的分布式的缓存系统Memcached。其理念使使用 络中空闲的空间来储存缓存。如今,这项技术已在包括Java和PHP中有了相应的实现。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|5、哈希

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  除了在数据储存中的应用外,哈希表在分布式系统中的应用也是非常重要的。所谓的正规哈希指的是用来在云数据库中定位数据的。谷歌的索引服务就是这项技术的一个很好的应用:每个 络地址都被定位到了特定的计算机上。Memcached也使用了类似的哈希函数。

软件工程师必须知道的10个概念|  哈希函数可以非常复杂,但现在已经有类库提供了很好的缺省支持。所以最关键的是哈希函数是如何运行的,并怎样才能使其发挥最大的效用。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|4、算法复杂度

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  在编写代码时应尽量避免嵌套循环,目前大多数代码都是使用了哈希表、简单链表和单循环。

软件工程师必须知道的10个概念|  由于有许多优秀的类库,我们很少在程序的效率上花功夫。这样是可以的,因为优化可以之后在进行。

软件工程师必须知道的10个概念|  一流的算法和表现不能被忽略,写出规整可读的代码可以保证算法的简洁明了。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|3、分层

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  Lakos说一个好的软件工程师必须知道的10个概念|软件应该是金字塔形状的,也就是说,随着构件的增加,软件的复杂度也在增加,但不是急剧地增加。换言之,一个好的软件系统是有多个小型的可重复使用的构件搭建起来的,每个构件都有自己的任务。在一个好的系统中,不存在循环依赖,从而系统由能独立完成作业的层构成,这样就形成了金字塔的结构。

软件工程师必须知道的10个概念|  Lokos的想法启迪了软件工程师必须知道的10个概念|软件工程师们,最著名的就是重构的广泛应用,其理念就是通过对软件的分析来保证系统的稳定性和灵活性。另外一个主要贡献者是Object Mentor的Robert Martin博士,他写了一本关于依赖和非循环架构的书。

软件工程师必须知道的10个概念|软件工程师必须知道的10个概念|2、协议和模板

软件工程师必须知道的10个概念|

软件工程师必须知道的10个概念|  许多 会化的软件工程师必须知道的10个概念|软件以类似的方式使用协议。如,你的名字是jonsmith,那你的图片被命名为johnsmith.jpg,你的RSS订阅被命名为johnsmith.xml。

软件工程师必须知道的10个概念|  这里讨论的模板并不是C++和Java的一个结构,而是一个包含变量的文件可以被绑定到对象、解决方案上,从而显示出用户的结果。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2008年9月13日
下一篇 2008年9月13日

相关推荐