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