软件
軟體（）是一系列按照特定顺序组织的電腦数据和指令，是電腦中的非有形部分。電腦中的有形部分稱為硬體，由電腦的外殼及各零件及電路所組成。電腦軟體需有硬體才能運作，反之亦然，軟體和硬體都無法在不互相配合的情形下進行實際的運作。
一般来說，计算机软件划分为程式語言、系统软件、应用软件和介于这两者之间的中介軟體。其中系统软件为计算机使用提供最基本的功能，但是并不针对某一特定应用领域。而应用软件则恰好相反，不同的应用软件根据用户和所服务的领域提供不同的功能。
软件包括所有在電腦執行的程式，和其架構無關，例如執行檔、函式庫及腳本語言都屬於软件。軟體不分架構，有其共通的特性，在執行後可以讓硬體執行依設計時要求的機能。軟體儲存在記憶體中，軟體不是可以碰觸到的實體，可以碰觸到的都只是儲存軟體的零件（記憶體）或是媒介（光碟或磁片等）。
软件并不一定只包括可以在计算机上运行的電腦程式，有些定義中，与電腦程式相关的文档，一般也被认为是软件的一部分。简单的说软件就是程式加文档的集合体。软件被应用于世界的各个领域，对人们的生活和工作都产生了深远的影响。
以最低階的角度來看，執行檔中包括了針對特定微處理器（一般會是CPU）的機械碼，機械碼包括了一連串二進位的數值，使處理器從目前的狀態變換到下一個狀態。例如指令可能會修改電腦內一特定位置中的數值，其效果是使用者無法直接觀測到的，指令也可能讓螢幕上顯示特定資料，這種狀態變換是使用者可以看到的。處理器會依照順序處理收到的指令，不過處理器的處理也可能受到中斷，或是因為流程控制指令而改變其要處理的指令。
機械碼是許多二進位的數值，不方便工程師閱讀及開發程式，因此有組合語言，將機械碼轉換為人可以看懂的助憶碼。不過現在多半的軟體是用高階語言撰寫，比較類似自然語言，對人類而言比機械碼或組合語言要簡單，方便人類使用。高階語言一般會用直譯或編譯的方式，將軟體的原始碼轉換為機械碼。
原始碼是指以程式語言所撰寫的一系列人類可閱讀的電腦指令，以實作出軟體的行為和功能。
軟體的分類方式有很多種，可以依軟體的目的分為以下幾種：
系统软件负责管理计算机系统中各种独立的硬件，使得它们可以协调工作，提供基本的功能，並為正在運行的應用軟件提供平台。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。而各個硬件工作的細節則由驅動程式處理。
一般来说，系统软件包括操作系统（例如BSD、DOS、Linux、macOS、iOS、OS/2、QNX、Unix、Windows等）和一系列基本的工具（比如编译器，数据库管理，存储器格式化，文件系统管理，作業系統管理，用户身分验证，驱动管理，网络连接等方面的工具）。
应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程式，比如一个图像浏览器。也可以是一组功能联系紧密，可以互相协作的程式的集合，比如微软的Office软件。也可以是一个由众多独立程式组成的庞大的软件系统，比如数据库管理系统。
较常见的有：
恶意软件是發展到危害和破壞計算機的計算機軟件，因此，惡意軟件是不受欢迎的。惡意軟件與計算機相關的犯罪相關聯，儘管一些惡意程序可能被設計為用于惡作劇。
用戶常會看到一些程式設計者不會注意的事物。使用現代通用型電腦（相對於嵌入式系統、類比電腦或超級電腦）的用戶常會用以下三層的軟體架構來進行不同的任務：系統平台、應用程式及用戶軟體。
軟體在載入到電腦的數據存貯器（例如硬碟或記憶體）後，電腦就可以執行該軟體。「執行」指的是將指令集由軟體移到電腦硬體中，硬體會處理指令集對應的機器碼。每一個指令都會讓電腦執行特定的動作，包括搬移資料、執行運算或是改變控制流程。
資料搬移一般會由記憶體的一個位置移到另一個位置，有時資料搬移會用到中央處理器中允許較快速資料處理的暫存器。大量的資料搬移會用去不少的系統資源，因此有時會用「指標」來處理資料。執行運算的範圍很廣，簡單的可以包括將某位置的資料加一，複雜的可能包括許多資料及對應的處理。
軟體的執行多半是一個指令接一個指令的循序進行，但有時會需要改變軟體中指令執行的順序，例如有可以使某一段程式執行數次的迴圈，或是依特定條件執行兩段程式中的一段的分支指令，甚至是可以執行子程式，執行完成後再回到原來程式，而有些語言也支援無條件的跳躍指令。
軟體可以以許多不同的方式運作，包括執行檔、原始碼、腳本及。
软件的品質有一定的重要性，尤其在像Microsoft Office、Microsoft Windows 及Linux等商用軟體或系統軟體更是如此。若軟體無法正確執行，可能會刪除用戶工作的成果，使電腦當機或是出現其他無預期的情形，這類情形稱為程式錯誤，俗稱bug。軟體也會受到的影響，也就是因為許多未發現的程式錯誤造成的性能退化。藉由軟體測試可以找出並消除許多的程式錯誤，不過軟體測試很少可以完全消除程式錯誤。很多大型的軟體公司，例如微軟、Novell及昇陽電腦等，會有專門的軟體測試部門，其主要工作就是測試軟體。軟體可以用單元測試、回歸測試及其他方式進行測試。測試可能用人工進行，若是大型的程式，更常見的是用電腦自動測試。像NASA就針對其作業系統及其通訊程序有特別嚴謹的測試流程。
不同的软件一般都有对应的软件授權，软件的使用者必须在同意所使用软件的许可证的情况下才能够合法的使用软件。从另一方面来讲，特定软件的许可条款也不能够与法律相抵触。
依據許可方式的不同，大致可將軟體區分為幾類：
有些國家可以申請軟體專利，有些國家不行，而是用著作權的觀點保護軟體。不過在軟體產業中，軟體專利是個爭議性高的議題，各方人士有不同的立場。的主要爭議點是在軟體專利中，受保護不得複製的部分是其演算法還是其用到的技術。
软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉，需求分析，设计，实现和测试的系统工程，其中可能包括研究、新的开发工作、修改、复用、重新设计（再工程）、维护，或者任何最终获得软件产品的其他活动。
軟體開發過程是指軟體從起始到完成過程中如何進行計劃、控制和監控的模型。有以下不同的幾種：
軟體開發工具指的是軟件開發人員用來創建、調試、維護或以其他方式支持的軟件程序或應用程序的形式。
軟件由一种或多种編程語言所写成。现在存在有很多种編程語言，並且每种都具有至少一种编写的方式，其中包括它自己的一套編程工具。這些工具包含相對独立自足的程序，如編譯器，調試器，直譯器，鏈接器和文本編輯器，可以結合共同完成一個任務，很像一個人可以使用多個手握工具來固定一個物理對象。
这套工具也有可能是一個集成開發環境（IDE），它結合了許多這種工具或它们的全部功能。無論是通過調用程序員等有關人士的工具，或通過以一種新的方式重新實現它們的功能，IDE可以做到這一點。幾乎所有的編程語言为编写提供了使用單獨的工具，而不是一個IDE，因為有些程序員由于各種原因不喜歡使用IDE，或是因为IDE通常需要更長的時間才能發展形成一個可接受的標準，而不是一个個人工具。事實上，新的編程語言最初通常不會提供他們​​的IDE 。
軟體產業是由許多軟體公司及程式設計者所組成的產業，其性質較類似服務業。由於其產業特性，毛利率較其他產業要高。軟體產業的獲利相當高，像微軟的創始人比尔·盖茨就因為銷售Microsoft Windows及Microsoft Office而數次成為美國首富。不過隨著時代的變化，軟體產業的分工及專業化也越來越細。例如电子游戏产业及辦公室軟體都屬於軟體產業，而兩者就有不少的差異。
有許多非營利的軟體組織，例如自由软件基金会、GNU計劃及Mozilla基金會。像全球資訊網協會（W3C）及網際網路工程任務組（IETF）等組織發展許多軟體標準，因此不同的軟體可以藉由這些標準互相溝通，這種標準包括例如XML、HTML、HTTP及FTP等。
其他著名的軟體公司有Google、Novell、SAP、Symantec、Adobe Systems、Corel，不過其中也有許多小公司有一些創新的產品。