軟件
軟件是指用于操作計算機和執(zhí)行特定任務的一系列指令、數(shù)據(jù)或程序,與硬件相對,硬件用于描述計算機的物理組件,而軟件使用戶能夠與計算機及其硬件交互或執(zhí)行任務。一般來說,軟件可以分為系統(tǒng)軟件和應用軟件。系統(tǒng)軟件用于運行計算機硬件并為應用程序提供平臺,應用軟件用于用戶執(zhí)行任務。每種類型的軟件都有不同的功能和用途,以滿足用戶和開發(fā)人員的需求。
軟件的生命周期可以用來描述軟件從創(chuàng)建到報廢的全過程,一般包括問題定義、可行性分析(需求分析)、總體設計、編碼、測試、運行、維護和升級到報廢等階段。它的開發(fā)語言可以是Python、Java、JavaScript、HTML/CSS、C/C++、SQL、Ruby、PHP、Swift和Go。
定義概述
軟件是相對于硬件而言的,其定義主要是解釋性的。
1982年,美國軟件工程專家Roger S.Pressman將軟件解釋為:能夠在計算機執(zhí)行時提供所需功能和性能的程序,能夠使程序有效地處理信息的數(shù)據(jù)結構和描述程序運行和使用的文檔。簡單來說,軟件由程序、數(shù)據(jù)和文檔組成。
1983年,IEEE(電氣和電子工程師協(xié)會)將軟件定義為在計算機上運行程序所必需的計算機程序、方法、規(guī)則、相關文檔和數(shù)據(jù)。
2011年,英國軟件工程專家伊恩·薩默維爾(Ian Sommerville)將軟件定義為一個系統(tǒng),通常由若干程序、建立這些程序的配置文件、描述系統(tǒng)結構的系統(tǒng)文檔、解釋如何使用系統(tǒng)的用戶文檔以及供用戶下載最新產(chǎn)品信息的網(wǎng)站組成。
軟件可以看作是知識的載體,它涵蓋的內容和范圍非常廣泛。一般來說,計算機程序及相關文檔、數(shù)據(jù)、視頻資料、方法、規(guī)則、網(wǎng)頁及其鏈接都可以視為軟件。
發(fā)展歷史
從1842年到1843年,世界上第一個程序員阿達·洛芙萊斯為查爾斯·巴貝奇的分析引擎開發(fā)了算法,這被認為是第一個計算機程序。
1936年,艾倫·圖靈提出了圖靈機的概念,其核心思想是對計算過程進行抽象,被認為是計算機科學的開創(chuàng)性理論之一,成為計算機科學中許多理論和算法的基礎。
1947年,凱瑟琳·布斯和她的丈夫安德魯·布斯去美國時遇到了約翰·馮·諾依曼。之后,凱瑟琳設計了第一臺ARC計算機的匯編語言和匯編程序,為后來的計算機編程奠定了基礎。
1948年6月21日,英國曼徹斯特大學的湯姆·基爾本為曼徹斯特嬰兒電腦編寫了世界上第一個軟件。
20世紀50年代初,通用汽車公司為IBM 701電子數(shù)據(jù)處理器創(chuàng)建了第一個操作系統(tǒng),被稱為通用汽車操作系統(tǒng)(GM OS)。
1952年,格蕾絲·霍珀的團隊創(chuàng)造了第一個計算機語言編譯器,它是COBOL的前身。
1958年,統(tǒng)計學家John Tukey在一篇關于計算機編程的文章中首次提出了“軟件”一詞。
20世紀60年代末,軟盤被引入,并在80年代和90年代用于分發(fā)軟件。
1971年11月3日,美國電話電報公司發(fā)布了Unix操作系統(tǒng)的第一個版本。自推出以來,Unix操作系統(tǒng)及其分支對計算機產(chǎn)生了深遠的影響,提供了跨各種異構環(huán)境和設備類型的可移植性、穩(wěn)定性和互操作性。
1977年,蘋果發(fā)布Apple II,消費軟件開始蓬勃發(fā)展。Apple II的成功促進了個人電腦的普及,并為普通用戶提供了友好的界面和豐富的應用程序。消費軟件的開發(fā)包括各種娛樂、教育、創(chuàng)作和生產(chǎn)力工具,為個人計算機的用戶提供新的體驗和功能。
1979年,VisiCorp發(fā)布了第一款適用于Apple II的個人電腦電子表格軟件VisiCalc。
1981年,微軟發(fā)布了MS-DOS操作系統(tǒng),許多早期的IBM計算機都運行在該系統(tǒng)上。與此同時,IBM開始銷售軟件,商業(yè)軟件開始面向普通消費者。
80年代,硬盤成為電腦的標配,IBM等電腦廠商開始在電腦中捆綁軟件,與早期的OEM廠商合作銷售軟件。這種軟硬件捆綁銷售模式為消費者提供了一站式解決方案,簡化了購買和安裝軟件的流程,促進了軟件行業(yè)的發(fā)展,催生了更多的軟件開發(fā)者和應用。
1983年,理查德·M·斯托曼(Richard M.Stallman)的GNU Linux項目推動了自由軟件運動,旨在創(chuàng)建一個類似Unix的操作系統(tǒng),其源代碼可以自由復制、修改和分發(fā)。
1984年,Mac OS發(fā)布,帶動了蘋果的Macintosh系列。
80年代中期,AutoDesk、AutoCAD、Microsoft Word、Microsoft Excel等一些重要的軟件應用相繼發(fā)布。
1985年,微軟發(fā)布了Windows 1.0,將個人電腦推向了主流。Windows 1.0引入了圖形用戶界面(GUI),為個人計算機用戶提供了更直觀、更易于使用的操作環(huán)境。這標志著個人電腦進入了圖形化時代,為Windows操作系統(tǒng)的后續(xù)發(fā)展奠定了基礎。
1989年,光盤成為標準媒體,它能比軟盤存儲更多的數(shù)據(jù),因此大型軟件程序可以快速、方便和相對便宜地分發(fā)。
1991年,開源操作系統(tǒng)Linux的內核發(fā)布。
1997年,DVD問世,它可以存儲比CD更多的數(shù)據(jù),使得將軟件套件(如微軟Office套件)放在一張CD上成為可能。
1999年,Salesforce利用云計算開創(chuàng)了通過互聯(lián)網(wǎng)交付軟件的模式。
在2000年,術語“軟件即服務”(SaaS)被提出。
2007年,蘋果推出了iPhone,標志著移動技術新時代的開始。IPhone的特點是創(chuàng)新的觸摸屏界面和豐富的移動應用生態(tài)系統(tǒng),引領了智能手機的潮流,改變了人們使用移動設備和應用的方式。移動技術的快速發(fā)展和移動應用的興起催生了新的移動軟件產(chǎn)業(yè),如移動游戲、社交媒體、移動支付等。,已經(jīng)成為當代軟件開發(fā)的一個重要方向和趨勢。
自2010年以來,軟件分發(fā)和訪問的方式發(fā)生了巨大變化。DVD和物理媒體越來越不受歡迎,用戶現(xiàn)在更傾向于直接從互聯(lián)網(wǎng)或云端購買和下載軟件。這種變化得益于高速互聯(lián)網(wǎng)的普及和數(shù)字發(fā)行的便利。
操作方式
軟件是由一系列指令和數(shù)據(jù)組成的程序,旨在執(zhí)行特定的任務和滿足用戶的需求。其工作原理是基于計算機的處理能力和指令執(zhí)行機制。
軟件按功能類別可分為應用軟件和系統(tǒng)軟件,它們在工作方式上有明顯的區(qū)別。
系統(tǒng)軟件的工作模式:系統(tǒng)軟件位于計算機硬件和應用軟件之間,用于協(xié)調系統(tǒng)的硬件和軟件,使用戶可以運行高級的應用軟件,執(zhí)行特定的操作。用戶不能直接與系統(tǒng)軟件交互,因為它在后臺運行,處理計算機的基本功能。系統(tǒng)軟件在計算機系統(tǒng)啟動時執(zhí)行,并在系統(tǒng)啟動期間一直運行。
應用軟件的工作模式:應用軟件是為用戶執(zhí)行特定功能的程序,例如編寫報告和瀏覽網(wǎng)站。應用程序也可以為其他應用程序執(zhí)行任務,但需要計算機的操作系統(tǒng)和其他支持系統(tǒng)軟件程序的支持才能工作,不能單獨運行。桌面應用程序安裝在用戶的計算機上,并使用計算機內存來執(zhí)行任務。它們會占用計算機硬盤的空間,并且可以在沒有互聯(lián)網(wǎng)連接的情況下工作。此外,桌面應用程序必須滿足它們運行的硬件設備的要求。而Web應用不依賴硬件和系統(tǒng)軟件,只需要上網(wǎng)就能工作。用戶可以從任何配備網(wǎng)絡瀏覽器的設備上啟動網(wǎng)絡應用程序。因為負責應用程序功能的組件位于服務器上,所以用戶可以從Windows、Mac、Linux或任何其他操作系統(tǒng)啟動應用程序。
主要分類
根據(jù)軟件功能的分類,軟件可分為系統(tǒng)軟件和應用軟件,其中系統(tǒng)軟件包括操作系統(tǒng)和支撐軟件(包括語言和編譯系統(tǒng)以及數(shù)據(jù)庫管理軟件),應用軟件包括通用應用軟件和專用軟件。
系統(tǒng)軟件
系統(tǒng)軟件是用來運行計算機硬件和為應用軟件提供平臺的,為計算機的使用提供最基本的功能。系統(tǒng)軟件可分為操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、系統(tǒng)實用程序、編程語言和編譯系統(tǒng)等。
操作系統(tǒng):操作系統(tǒng)是管理計算機軟硬件資源的程序,也是計算機系統(tǒng)的核心。操作系統(tǒng)的主要功能包括管理和配置內存,確定系統(tǒng)資源的分配順序,控制輸入輸出設備,管理網(wǎng)絡和文件系統(tǒng)等基本事務。常見的操作系統(tǒng)有Windows、UNIX、Linux、Mac OS和OS/2。
數(shù)據(jù)庫管理系統(tǒng):數(shù)據(jù)庫管理系統(tǒng)是管理和操作數(shù)據(jù)庫的系統(tǒng)。作為用戶和數(shù)據(jù)庫之間的接口,它為用戶提供了一組命令來管理數(shù)據(jù)庫的創(chuàng)建、修改、檢索、統(tǒng)計和排序。關系數(shù)據(jù)庫管理系統(tǒng)是最常見的類型,包括FoxPro、SQL Server、Oracle、Sybase、DB2和Informix。
系統(tǒng)實用程序:系統(tǒng)實用程序是一些工具性的服務程序,方便用戶使用和維護計算機。主要的實用程序包括語言處理程序、編輯程序、連接匯編程序、打印管理程序、測試程序和診斷程序。
程序涉及語言和編譯系統(tǒng):編程語言和編譯系統(tǒng)是編寫和執(zhí)行計算機程序的工具。常用的高級語言有C,BASIC,PASCAL,F(xiàn)ORTRAN,COBOL。編譯系統(tǒng)負責將編程語言轉換成計算機可以執(zhí)行的機器語言。
應用軟件
應用軟件是在系統(tǒng)軟件的基礎上開發(fā)的,用于解決特定領域的問題。既有電信、金融、電力、公安、交通管理、招生、考試、錄取等領域使用的專用軟件,也有企事業(yè)單位生產(chǎn)、工作、管理和服務中使用的各種交易軟件,還有各種實時軟件,各種用于監(jiān)測、分析和控制現(xiàn)實世界事件的科學和工程軟件,以及工業(yè)、民用或軍用中用于各種功能的嵌入式軟件和個人計算機軟件。
通用應用軟件:通用應用軟件是一種具有通用信息處理功能的商業(yè)軟件。其通用性使其適合有多種類似應用需求的用戶。通用應用軟件可以通過選擇、設置和調整來滿足用戶的特定需求。一些典型的通用軟件包括文字處理軟件、表格處理軟件、數(shù)值統(tǒng)計分析軟件和財務會計軟件。
特殊應用軟件:專用應用軟件是為滿足用戶特定需求而開發(fā)的軟件。在某些情況下,由于用戶對數(shù)據(jù)處理功能的要求差異較大,通用軟件無法滿足要求,需要專業(yè)人員采用自主開發(fā)的方法,為用戶開發(fā)具有特定要求的專門應用軟件。一些典型的專用軟件包括特定業(yè)務處理系統(tǒng)、電子設備控制系統(tǒng)、空中交通管制系統(tǒng)等。
功能特點
隱形:軟件是隱形的,看不見摸不著。與物理產(chǎn)品不同,軟件存在于計算機系統(tǒng)中,以代碼的形式表現(xiàn)出來。
持久性:軟件不會隨著時間的推移而降級或退化。即使長期存放在計算機系統(tǒng)中,軟件的質量和性能也不會自動下降。
易于復制:軟件可以很容易地復制和分發(fā)。開發(fā)完成后,通過復制代碼或安裝文件,該軟件可以在多臺計算機或設備上部署和運行。
復雜性:軟件可能非常復雜,有許多相互關聯(lián)的部分和功能。一個復雜的軟件系統(tǒng)可能包含多個模塊、組件和服務,它們相互作用以實現(xiàn)功能。
難以理解和修改:特別是對于大型復雜的系統(tǒng),理解和修改軟件可能具有挑戰(zhàn)性。軟件開發(fā)人員需要仔細研究代碼和系統(tǒng)結構,了解其工作原理,并進行修改和維護。
受需求變化的影響:對軟件的需求可能會隨著時間而變化。用戶的需求和市場要求可能導致軟件需要更新和修改,以滿足新的功能、性能或安全要求。
受錯誤和其他問題的影響:軟件可能會受到錯誤、缺陷和其他問題的影響。這需要測試和調試軟件,以確保它以預期的方式工作并解決問題。
使用周期
軟件生命周期(SDLC)是指軟件從創(chuàng)建到報廢的全過程,一般包括問題定義、可行性分析(需求分析)、總體設計、編碼、測試、運行、維護和升級到報廢等階段。
問題定義階段:開發(fā)團隊與利益相關者(包括客戶、銷售人員、行業(yè)專家和程序員)溝通,確定現(xiàn)有系統(tǒng)中存在的問題。在這個階段,我們應該評估當前系統(tǒng)的優(yōu)點和缺點,并確定需要改進的問題。
可行性分析階段:基于第一階段定義的問題,團隊分析需求,估計實現(xiàn)所需的成本和資源,評估項目可能存在的風險。即確定項目的可行性,以及如何以最低的風險成功實施項目。
總體設計階段:將第二階段分析的需求轉化為詳細的設計計劃。該設計計劃通常包括軟件開發(fā)的架構、數(shù)據(jù)庫設計、用戶界面設計和其他技術規(guī)范。利益相關者審查設計計劃并提供反饋和建議,以確保設計滿足他們的需求。
編碼階段:開發(fā)人員根據(jù)設計方案和既定的技術規(guī)范對軟件進行編碼。開發(fā)人員應該遵守編碼技術規(guī)范,并使用適當?shù)拿?guī)范來編寫模塊化和可重用的代碼。
測試階段:測試階段的目的是通過使用各種測試技術來識別和修復代碼中的缺陷和問題。常見的測試技術包括單元測試、集成測試、系統(tǒng)測試和用戶驗收測試。測試有助于在軟件部署到生產(chǎn)環(huán)境之前發(fā)現(xiàn)并解決任何問題。
操作和維護階段:團隊將系統(tǒng)部署到生產(chǎn)環(huán)境中,并持續(xù)監(jiān)控和維護系統(tǒng)的穩(wěn)定性和性能。這包括更新硬件和軟件,以滿足用戶不斷變化的需求,并及時為用戶提供最新的修改和操作指南。
軟件許可
軟件許可證是一種法律文件,它為軟件的使用和分發(fā)提供了具有法律約束力的準則和規(guī)定。
不同的軟件一般都有相應的軟件許可,軟件的用戶只有同意自己使用的軟件的許可,才能合法使用軟件。根據(jù)軟件許可的不同,軟件分為自由軟件、專有軟件、公共軟件、自由軟件、共享軟件、專有軟件和商業(yè)軟件。
自由軟件:自由軟件是指可以自由使用、復制、分發(fā)和修改,并提供源代碼供用戶自由使用的軟件。自由軟件的重點是軟件的自由,而不是價格。
Linux和GCC editor等軟件都是廣泛使用的免費軟件。開源軟件的概念類似于自由軟件,有一些限制,但只是在少數(shù)情況下自由軟件不是開源軟件。在表達方式上,自由軟件比開源軟件覆蓋的范圍更廣。
Copylefted軟件也是自由軟件的一種,是指采用copy left協(xié)議的軟件。Copyleft協(xié)議是一個使程序可以自由使用的協(xié)議,并且要求該程序的衍生版本也可以自由使用。通過版權保護軟件,軟件開發(fā)者可以確保他們的作品保持自由軟件,避免私有化和封閉源代碼的可能性。這使得用戶可以自由地使用、學習、改進和共享軟件,同時保留原作者賦予其作品的自由。
無版權的自由軟件意味著作者允許軟件被重新分發(fā)和修改,但也可能增加額外的限制。這種軟件不受版權保護,因此軟件的拷貝或修改版本可能不會一直免費。軟件公司可以編譯這種軟件,修改或不修改,然后作為專有軟件產(chǎn)品發(fā)布。
專有軟件:非自由軟件是由公司或組織擁有和控制的軟件,禁止用戶隨意復制、修改或分發(fā)該軟件。與自由軟件相反,使用專有軟件的用戶通常必須支付許可費才能使用。
公共軟件:公共領域軟件是不受版權保護的軟件。但是,大多數(shù)自由軟件都不是公共軟件,受著作權法保護,因此著作權人可以通過自由軟件授權條款合法地向任何人提供授權,允許他人自由使用。
免費軟件:免費軟件是指可以免費使用和重新發(fā)布的軟件,但并不是所有的自由軟件都是自由軟件。自由軟件可能會限制對軟件的修改和對源代碼的訪問權限。
共享軟件:共享軟件是一種允許用戶試用一段時間并支付許可費后再繼續(xù)使用的軟件。共享軟件允許軟件副本的再分發(fā),但是通常不提供修改和訪問源代碼的權利。
私有軟件:私有軟件是為特定用戶(如組織或公司)開發(fā)的軟件,該用戶擁有使用該軟件的專有權利,但不公開分發(fā)該軟件的源代碼。
商業(yè)軟件:商業(yè)軟件是為商業(yè)目的開發(fā)和銷售的軟件,不同于專有軟件。商業(yè)軟件可以使用專有或免費許可條款進行分發(fā)。商業(yè)軟件也可以是自由軟件,只要它符合自由軟件的原則。
開發(fā)語言
Python:Python是一種靈活性高、功能強大的通用編程語言。其可讀性和簡潔的結構使其成為初學者、中級和專業(yè)程序員的首選。1989年,荷蘭計算機程序員吉多·范·羅蘇姆實現(xiàn)了Python,它是開源的,有一個標準庫。全世界的程序員都用它來創(chuàng)建網(wǎng)站、編寫軟件、實現(xiàn)任務自動化、數(shù)據(jù)分析和數(shù)據(jù)可視化。像IBM、美國國家航空航天局和皮克斯這樣的大公司都在使用Python。
Java:1995年,Sun Microsystems首次發(fā)布了Java語言和計算平臺。Java語言是一種高級的面向對象編程語言,語法類似于C和C++,但更簡單,更容易學習和使用。程序員使用Java開發(fā)web和移動應用程序、嵌入式系統(tǒng)和大數(shù)據(jù)技術。Java的依賴性較小,使用類來定義屬性和行為,這使得Java可以從類繼承屬性和行為,而不必重新創(chuàng)建它們。Java是軟件開發(fā)中最常用的編程語言之一,因為它包含強大的安全協(xié)議,并且不局限于特定的平臺或系統(tǒng)。
Java Script語言:JavaScript在前端和后端開發(fā)中具有廣泛的適用性,在Web應用開發(fā)中得到了廣泛的應用。JavaScript更像是一種腳本語言,而不是編程語言,因為它的代碼可以被現(xiàn)有的系統(tǒng)解釋。JavaScript是最流行的軟件工程語言之一,尤其是對于那些從事Web應用程序開發(fā)的人來說。JavaScript的語法與C++和Java非常相似,速度快,簡化了升級和應用維護的過程。結合Node.js,程序員可以在Web瀏覽器之外使用JavaScript,在服務器端開發(fā)。
HTML/CSS:HTML和CSS是開發(fā)人員經(jīng)常一起使用來創(chuàng)建網(wǎng)頁的語言。HTML最初寫于1993年。它是一種標記語言,而不是編程語言,因為它不包含內部邏輯。1996年發(fā)明的CSS是一種樣式表語言,用于描述用HTML或任何標記語言編寫的信息的表示。因為HTML是Web開發(fā)的基石之一,學習HTML可以幫助你更好的理解網(wǎng)絡原理。作為網(wǎng)頁設計的基礎,CSS允許用戶根據(jù)自己的需要設計網(wǎng)頁的外觀。
C/C++:C++是C語言的擴展,功能強大,應用廣泛。C語言誕生于20世紀70年代,而C++由比雅尼·斯特勞斯特魯普于1985年創(chuàng)立,被廣泛用于開發(fā)操作系統(tǒng)、網(wǎng)頁瀏覽器、桌面應用和游戲。微軟、蘋果、Adobe等公司都在產(chǎn)品中使用C++。C++是最難學的編程語言之一。它具有高級語法和多范式的特點,比Java和Python更復雜。C++使用指針存儲內存地址,可以通過引用指針來操作內存。其優(yōu)點是速度快,模板庫豐富,接近硬件。
SQL:SQL(結構化查詢語言)是一種用于管理關系數(shù)據(jù)庫的特殊編程語言。它由美國國家標準協(xié)會在1986年標準化,使用由子句、表達式、謂詞、查詢和語句組成的語法來處理數(shù)據(jù)。SQL可以存儲、檢索、管理和操縱數(shù)據(jù)庫管理系統(tǒng)中的數(shù)據(jù),這在大數(shù)據(jù)分析中尤其有用。SQL內置在MySQL等數(shù)據(jù)庫管理系統(tǒng)中,其他SQL數(shù)據(jù)庫管理系統(tǒng)包括Oracle、Microsoft SQL Server、PostgreSQL和Microsoft Access。
Ruby:Ruby是一種開源的動態(tài)高級編程語言,旨在最大化生產(chǎn)率和簡單性。Ruby吸取了Perl和BASIC的特點,自1995年發(fā)布以來,Ruby吸引了全世界忠實的程序員。由于其自然的流程,Ruby的語法易于閱讀和編寫。Ruby把一切都看成對象,所以它的多樣性和可移植性適合Web開發(fā)、自動化和數(shù)據(jù)處理。它的易用性和Python差不多,但Ruby更適合商業(yè)用途,而不是教育用途。一些使用Ruby的大公司包括GitHub、Airbnb和Shopify。
服務器端編程語言(Professional Hypertext Preprocessor的縮寫):PHP作為一種通用腳本語言,非常適合Web開發(fā),近80%的網(wǎng)站都是用PHP開發(fā)的。PHP成立于1994年,被認為快速、靈活、實用。它可以很好地處理HTML、CSS、JavaScript和數(shù)據(jù)庫。
PHP是免費的,也包含了很多用戶自建的免費開源庫。開發(fā)者可以通過用C語言編寫的擴展來擴展PHP的功能,這在編寫、測試和故障排除方面特別有用。
Swift:蘋果公司于2014年發(fā)布的Swift是一種適用于iOS、iPad、macOS和其他類似技術的通用編程語言。Swift相對易學易讀,被認為是初學者不錯的編程語言選擇。使用Swift簡單而有趣,主要是因為圖形、列表和圖表可以立即呈現(xiàn),允許實時實驗和調試。Swift類似于C語言,以速度快著稱,兼容Linux。作為另一種iOS編程語言Objective-C的繼承者,Swift可能很快就會讓它的前身過時。
Go:Go(有時稱為Golang或Go language)簡單、可靠、高效。它是由谷歌在2009年設計的。它的語法類似于C,具有和Java一樣的跨平臺應用能力。Go編譯速度快,函數(shù)集簡潔,具有自動內存管理能力。Go可移植,可以與外部庫和本地系統(tǒng)交互,支持Linux、macOS和Windows,非常適合云原生應用、分布式網(wǎng)絡服務和獨立工具。一些使用Go的公司包括谷歌、優(yōu)步和Dropbox。