自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

軟件工程師必知的十個概念

開發(fā) 項目管理
本文向您介紹作為一個軟件工程師應(yīng)該知道的十個概念,這些概念集中在設(shè)計模式、測試、代碼重構(gòu)等方面,希望對您有所幫助。

出色的軟件工程師善用設(shè)計模式,勤于代碼重構(gòu),編寫單元測試,并對簡單有宗教般的追求。除了這些,優(yōu)秀的軟件工程師還要通曉10個概念,這10個概念超越了編程語言與設(shè)計模式,軟件工程師應(yīng)當(dāng)從更廣的范圍內(nèi)明白這些道理。

1.接口(Interfaces)

軟件工程中最重要的概念是接口。任何軟件都是一個真實系統(tǒng)的模型。如何使用簡單的用戶接口進(jìn)行模型化至關(guān)重要。很多軟件系統(tǒng)走這樣的極端,缺乏抽象的冗長代碼,或者過分設(shè)計而導(dǎo)致無謂的復(fù)雜。

在眾多軟件工程師書籍中,RobertMartin寫的《敏捷編程》值得一讀。

關(guān)于模型化,以下方法對你會有幫助。首先,去掉那些只有在將來才可能用得著的方法,代碼越精練越好。第二,不要總認(rèn)為以前的東西是對的,要善于改變。第三,要有耐心并享受過程。

2.慣例與模板(ConventionsandTemplates)

命名慣例和基礎(chǔ)模板在編程模式中常被忽視,然而它可能是最強(qiáng)大的方法。命名慣例使軟件自動化成為可能,如,JavaBeans框架在getter和setter方法中,使用簡單的命名慣例。del.icio.us網(wǎng)站的URL命名也使用統(tǒng)一的格式,如http://del.icio.us/tag/software會將用戶帶到所有標(biāo)簽為software的頁。

很多社會網(wǎng)絡(luò)均使用簡單命名,如,你的名字是johnsmith,那你的頭像可能命名為johnsmith.jpg,而你的rss聚合文件的命名很可能是johnsmith.xml。

命名慣例還用于單元測試,如,JUnit單元測試工具會辨認(rèn)所有以test開頭的類。

我們這里說的模板(templates)指的并不是C++或Java語言中的constructs,我們說的是一些包含變量的模板文件,用戶可以替換變量并輸出最終結(jié)果。

ColdFusion是最先使用模板的程序之一,后來,Java使用JSP實現(xiàn)模板功能。Apache近來為Java開發(fā)了非常好用的通用模板,Velocity。PHP本身就是基于模板的,因為它支持eval函數(shù)。

3.分層(Layering

用分層來討論軟件架構(gòu)是最容易的。JohnLakos曾出版過一本關(guān)于大型C++系統(tǒng)的書。Lakos認(rèn)為軟件包含了層,書中介紹了層的概念,方法是,對每個軟件組件,數(shù)一下它所依賴的組件數(shù)目就可以知道它的復(fù)雜程度。

Lakos認(rèn)為,一個好的軟件擁有金字塔結(jié)構(gòu),就是說,軟件組件擁有層層積累的復(fù)雜度,但每個組件本身必須簡單,一個優(yōu)秀的軟件包含很多小的,可重復(fù)使用的模塊,每個模塊有自己的職責(zé)。一個好的系統(tǒng)中,組件之間的依賴性不可交叉,整個系統(tǒng)是各種各樣的組件堆積起來,形成一個金字塔。

Lakos在軟件工程師的很多方面都是先驅(qū),最著名的是Refactoring(代碼重構(gòu))。代碼重構(gòu)指的是,在編程過程中需要不斷地對代碼進(jìn)行改造以保證其結(jié)構(gòu)的健壯與靈活。

4.算法的復(fù)雜性(AlgorithmicComplexity

關(guān)于算法的復(fù)雜性,軟件工程師需要理解這樣幾件事。第一,大O標(biāo)記法(bigOnotation);第二,你永遠(yuǎn)都不應(yīng)該使用嵌套式循環(huán)(循環(huán)里面套循環(huán)),你應(yīng)該使用Hash表,數(shù)組或單一循環(huán);第三,如今優(yōu)秀類庫比比皆是,我們不必過分糾纏于這些庫的效能的差別,我們以后還有機(jī)會進(jìn)行細(xì)調(diào);最后,不要忽視算法的優(yōu)雅及性能,編寫緊湊的,可讀的代碼可以讓你的算法更簡單,更干凈。

5.散列法(Hashing)

Hashing的目的是加速訪問速度。如果數(shù)據(jù)是序列存儲的,從中查詢一個項的時間取決于數(shù)據(jù)列的大小。而散列法對每一個項計算一個數(shù)字作為索引,在一個好的Hashing算法下,數(shù)據(jù)查找的速度是一樣的。

除了存儲數(shù)據(jù),散列法對分布式系統(tǒng)也很重要。統(tǒng)一散列法(uniformhash)用來在云數(shù)據(jù)庫環(huán)境下,在不同計算機(jī)之間分存數(shù)據(jù)。Google的索引服務(wù)就是這種方法的體現(xiàn),每一個URL都被散列分布到特定計算機(jī)。

散列函數(shù)非常復(fù)雜,但現(xiàn)代類庫中都有現(xiàn)成的類,重要的是,如何對散列法進(jìn)行細(xì)調(diào)以獲得最好的性能。

6.緩存(Caching)

緩存對現(xiàn)代Web程序不可或缺,緩存是從數(shù)據(jù)庫取回,并存放在內(nèi)存中的數(shù)據(jù)。因為數(shù)據(jù)庫直接存取的代價非常高,將數(shù)據(jù)從數(shù)據(jù)庫取回并放在緩存中訪問就變得十分必要。比如,你有一個網(wǎng)站,要顯示上周的暢銷書,你可以從數(shù)據(jù)將暢銷書榜一次性取回放在緩存中,而不必在每次訪問時都去數(shù)據(jù)庫讀數(shù)據(jù)。

緩存需要代價,只有最常用的內(nèi)容才可以放入緩存。很多現(xiàn)代程序,包括Facebook,依靠一種叫做Memcached的分布式緩存系統(tǒng),該系統(tǒng)是BradFirzpatrick在工作于LiveJournal項目時開發(fā)的,Memcached使用網(wǎng)絡(luò)中空閑的內(nèi)存資源建立緩存機(jī)制,Memcached類庫在很多流行編程語言,包括Java和PHP中都有。

7.并發(fā)(Concurrency)

并發(fā)是軟件工程師最容易犯錯的地方,這可以理解,因為我們一直遵從線形思維,然而并發(fā)在現(xiàn)代系統(tǒng)中非常重要。

并發(fā)是程序中的并行處理,多數(shù)現(xiàn)代編程語言包含內(nèi)置的并發(fā)能力,在Java,指的是線程。關(guān)于并發(fā),最經(jīng)典的例子是“生產(chǎn)/消費”模式,生產(chǎn)方生產(chǎn)數(shù)據(jù)和任務(wù),并放入工作線程消費或執(zhí)行。并發(fā)的復(fù)雜性在于,線程需要經(jīng)常訪問共同數(shù)據(jù),每個線程都有自己的執(zhí)行順序,但需要訪問共同數(shù)據(jù)。DougLea曾寫過一個最復(fù)雜的并發(fā)類,現(xiàn)在是coreJava的一部分。

8.云計算(CloudComputing)

RWW最近的關(guān)于云計算的文章ReachingForTheSkyThroughComputeClouds講到了云計算如何改變大規(guī)模Web應(yīng)用的發(fā)布。大規(guī)模的并行,低成本,與快速投入市場。

并行算法發(fā)明以來,首先迎來的是網(wǎng)格計算,網(wǎng)格計算是借助空閑的桌面計算機(jī)資源進(jìn)行并行計算。最著名的例子是Berkley大學(xué)的SETI@home計劃,該計劃使用空閑的CPU資源分析太空數(shù)據(jù)。金融機(jī)構(gòu)也大規(guī)模實施網(wǎng)格計算進(jìn)行風(fēng)險分析??臻e的資源,加上J2EE平臺的崛起,迎來了云計算的概念:應(yīng)用服務(wù)虛擬化。就是應(yīng)用按需運(yùn)行,并可以隨著時間和用戶規(guī)模而實時改變。

云計算最生動的例子是Amazon的Web服務(wù),一組可以通過API進(jìn)行調(diào)用的應(yīng)用,如云服務(wù)(EC2),一個用來存儲大型媒體文件的數(shù)據(jù)庫(S3),索引服務(wù)(SimpleDB),序列服務(wù)(SQS)。

9.安全(Security)

隨著黑客的崛起與數(shù)據(jù)敏感性的上升,安全變得非常重要。安全是個廣義的概念,涉及驗證,授權(quán)與信息傳輸。

驗證是對用戶的身份進(jìn)行檢查,如要求用戶輸入密碼。驗證通常需要結(jié)合SSL(securesocketlayer)進(jìn)行;授權(quán)在公司業(yè)務(wù)系統(tǒng)中非常重要,尤其是一些工作流系統(tǒng)。最近開發(fā)的OAuth協(xié)議可以幫助Web服務(wù)將相應(yīng)信息向相應(yīng)用戶開放。Flickr便使用這種方式管理私人照片和數(shù)據(jù)的訪問權(quán)限。

另外一個安全領(lǐng)域是網(wǎng)絡(luò)設(shè)防,這關(guān)系到操作系統(tǒng),配置與監(jiān)控。不僅網(wǎng)絡(luò)危險重重,任何軟件都是。Firefox被稱為最安全的瀏覽器,仍然需要頻頻發(fā)布安全補(bǔ)丁。要為你的系統(tǒng)編寫安全代碼就需要明白各種潛在的問題。

10.關(guān)系數(shù)據(jù)庫(RelationalDatabases)

關(guān)系數(shù)據(jù)庫因為在大規(guī)模Web服務(wù)上缺乏可擴(kuò)充性而頗受微詞,然而,關(guān)系數(shù)據(jù)庫仍然是近20年來計算機(jī)技術(shù)中最偉大的成就。關(guān)系數(shù)據(jù)庫對處理訂單,公司數(shù)據(jù)方面有著出色的表現(xiàn)。

關(guān)系數(shù)據(jù)庫的核心是以記錄表示數(shù)據(jù),記錄存放在數(shù)據(jù)庫表,數(shù)據(jù)庫使用查詢語言(SQL)對數(shù)據(jù)進(jìn)行搜索與查詢,同時,數(shù)據(jù)庫對各個數(shù)據(jù)表進(jìn)行關(guān)聯(lián)。

數(shù)據(jù)庫的標(biāo)準(zhǔn)化技術(shù)(normalization)講的是使用正確的方式對數(shù)據(jù)進(jìn)行分存以降低冗余,并加快存取速度,這也是軟件工程師必知的技術(shù)。

 

【編輯推薦】

  1. 軟件工程師必知的12個單元測試技巧
  2. 軟件工程之需求分析過程介紹
  3. 軟件工程中質(zhì)量保證體系的監(jiān)理
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2011-07-08 16:37:20

2009-11-04 10:57:35

2010-08-10 13:22:41

2023-10-23 11:49:59

2017-04-18 09:46:31

機(jī)器學(xué)習(xí)工程師算法

2024-01-23 18:49:38

SQL聚合函數(shù)數(shù)據(jù)分析

2009-07-02 14:05:55

2019-07-05 07:49:19

TCPIP網(wǎng)絡(luò)協(xié)議

2023-09-20 22:52:12

Kubernetes快捷方式

2011-02-28 16:43:55

2023-11-08 18:01:53

硬重置Git命令

2019-05-15 11:14:22

監(jiān)控工具運(yùn)維

2014-02-12 09:31:53

2020-06-03 15:25:27

運(yùn)維架構(gòu)技術(shù)

2023-12-01 18:06:35

2022-07-29 09:12:44

軟件硬件開發(fā)

2013-09-03 09:30:44

軟件工程師軟件工程師頭銜

2022-09-16 08:00:00

軟件工程師求職薪酬

2014-09-22 09:47:14

2009-02-11 13:15:54

軟件工程師女工程師google
點贊
收藏

51CTO技術(shù)棧公眾號