ซอฟต์แวร์

[thumb|300px|[OpenOffice.org Writer]]

**ซอฟต์แวร์** () หรือ **ส่วนชุดคำสั่ง** คือ ส่วนหนึ่งของระบบคอมพิวเตอร์ที่ใช้ในการจัดเก็บและประมวลผลข้อมูล เป็นชุดคำสั่งที่บอกวิธีการทำงานของคอมพิวเตอร์ ซึ่งตรงกันข้ามกับฮาร์ดแวร์ที่เป็นระบบคอมพิวเตอร์ที่สามารถจับต้องได้ ในสาขาวิชาวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์นั้น ซอฟต์แวร์คอมพิวเตอร์ คือ ข้อมูลทั้งหมดที่ได้รับการประมวลผลโดยระบบคอมพิวเตอร์ และ โปรแกรมคอมพิวเตอร์ ซอฟต์แวร์คอมพิวเตอร์นั้นประกอบด้วย โปรแกรมคอมพิวเตอร์, ไลบรารี และ ข้อมูลที่ไม่สามารถเรียกใช้งานได้ด้วยโปรแกรมคอมพิวเตอร์ เช่น เอกสารออนไลน์หรือสื่อดิจิทัล คอมพิวเตอร์เครื่องหนึ่งจำเป็นต้องมีทั้งฮาร์ดแวร์และซอฟต์แวร์ และหากขาดอย่างใดอย่างหนึ่งไป จะไม่สามารถใช้งานระบบคอมพิวเตอร์ได้

ในระดับโปรแกรมคอมพิวเตอร์ที่ต่ำที่สุด โค้ดปฏิบัติการนั้น ประกอบด้วย คำสั่งภาษาเครื่อง (machine language) ที่โปรเซสเซอร์ (processor) แต่ละตัวรองรับ โดยทั่วไปคือหน่วยประมวลผลกลาง (CPU) หรือ หน่วยประมวลผลกราฟิก (GPU) ภาษาเครื่อง ประกอบด้วย กลุ่มค่าไบนารี (เลขฐานสอง) ที่แสดงถึงคำสั่งของตัวประมวลผลที่ได้เปลี่ยนสถานะของคอมพิวเตอร์จากสถานะก่อนหน้า เช่น คำสั่งภาษาเครื่องอาจเปลี่ยนค่าที่จัดเก็บไว้ในตำแหน่งจัดเก็บเฉพาะในคอมพิวเตอร์ ซึ่งผู้ใช้ไม่สามารถสังเกตเห็นได้โดยตรง หรือ คำสั่งนั้นอาจเป็นการเรียกอินพุตหรือเอาต์พุตอย่างใดอย่างหนึ่งซึ่งผู้ใช้คอมพิวเตอร์สามารถมองเห็นได้ เช่น การแสดงข้อความบนหน้าจอคอมพิวเตอร์ โปรเซสเซอร์จะดำเนินการตามคำสั่ง ตามลำดับที่ระบุไว้ เว้นแต่จะได้รับคำสั่งให้ "ข้าม" ไปยังคำสั่งอื่น หรือ ระบบปฏิบัติการถูกขัดจังหวะ ในปี ค.ศ. 2015 คอมพิวเตอร์ส่วนบุคคล อุปกรณ์สมาร์ทโฟน และ เซิร์ฟเวอร์ส่วนใหญ่ มีหน่วยประมวลผลที่มีหน่วยประมวลผลหลายหน่วย (multiple execution unit) หรือโปรเซสเซอร์หลายตัว ทำการคำนวณร่วมกันและการประมวลผล ทำให้ส่วนโปรเซสเซอร์สามารถทำงานร่วมกันในเวลาพร้อม ๆ กัน (concurrent activity) มากกว่าระบบโปรเซสเซอร์ในอดีต

ซอฟต์แวร์นั้นนอกจากจะสามารถใช้งานบนคอมพิวเตอร์ได้แล้ว ยังสามารถใช้งานบนเครื่องใช้ หรืออุปกรณ์อื่น เช่น โทรศัพท์มือถือ หรือหุ่นยนต์ในโรงงาน หรือเครื่องใช้ไฟฟ้าต่าง ๆ 

ซอฟต์แวร์ส่วนใหญ่เขียนด้วยภาษาโปรแกรมระดับสูง (high-level programming language) ซึ่งง่ายกว่าและมีประสิทธิภาพมากกว่าสำหรับโปรแกรมเมอร์ เพราะใกล้เคียงกับภาษาธรรมชาติที่มนุษย์ใช้มากกว่าภาษาเครื่อง ภาษาระดับสูงจะถูกแปลเป็นภาษาเครื่องโดยใช้คอมไพเลอร์ (compiler) หรืออินเตอร์พรีตเตอร์ (interpreter) หรือทั้งสองอย่างรวมกัน ซอฟต์แวร์อาจเขียนด้วยภาษาแอสเซมบลีระดับต่ำ (assembly language) ซึ่งมีความสอดคล้องกับคำสั่งภาษาเครื่องของคอมพิวเตอร์อย่างมาก และ ภาษาแอสเซมบลีจะถูกแปลเป็นภาษาเครื่องโดยใช้แอสเซมเบลอร์ (assembler)

## นิรุกติศาสตร์
คำว่า "ซอฟต์แวร์" ใช้ครั้งแรกโดย จอห์น ดับเบิลยู. เทอร์กีย์ (John W. Turkey) ในปี พ.ศ. 2500 (ค.ศ. 1957) โดยแนวคิดของซอฟต์แวร์ปรากฏครั้งแรกในเรียงความของแอลัน ทัวริง บิดาของวิทยาการคอมพิวเตอร์ กล่าวกันว่าโปรแกรมคอมพิวเตอร์ชิ้นแรกของโลกเขียนโดยเอดา ไบรอน เป็นโปรแกรมที่ใช้สำหรับเครื่องวิเคราะห์ (analytical engine) ของชาร์ลส แบบเบจ

## ความสัมพันธ์กับฮาร์ดแวร์
ซอฟต์แวร์ เป็นชื่อเรียกเพื่อใช้เปรียบต่างกับฮาร์ดแวร์ ซึ่งเป็นลักษณะทางกายภาพในการเก็บและประมวลผลของซอฟต์แวร์ ในคอมพิวเตอร์ซอฟต์แวร์จะถูกเรียกใช้งานในแรมและประมวลผลผ่านซีพียู

## ประเภทของซอฟต์แวร์
การแบ่งประเภทของซอฟต์แวร์แบ่งออกได้เป็นหลายแบบ เช่น
# การแบ่งเชิงเทคนิค อาจแบ่งซอฟต์แวร์เป็น 3 ประเภทหลักคือ
#* ซอฟต์แวร์ระบบ (System/Infrastructure software) ใช้ในการทำให้คอมพิวเตอร์ฮาร์ดแวร์ทำงานกับระบบคอมพิวเตอร์ได้ โดยรวมถึงระบบปฏิบัติการ ไดรเวอร์ และระบบหลักของคอมพิวเตอร์ต่าง ๆ 
#* โปรแกรมประยุกต์ หรือซอฟต์แวร์ประยุกต์ (Application software) ช่วยให้ผู้ใช้งานสามารถดำเนินงานต่าง ๆ โดยทั่วไปเช่น โปรแกรมสำนักงาน ฐานข้อมูล คอมพิวเตอร์เกม เว็บเบราว์เซอร์ โดยโปรแกรมประยุกต์จะมีจียูไอ
#* โปรแกรมคอมพิวเตอร์ (Tools/Utilities) ประกอบไปด้วยเครื่องมือช่วยให้โปรแกรมเมอร์เขียนโปรแกรมอื่น ๆ หรือโปรแกรมประยุกต์ได้ เครื่องมือต่าง ๆ ประกอบไปด้วย คอมไพเลอร์ อินเตอร์พรีเตอร์ ดีบักเกอร์
# การแบ่งตามรูปแบบการส่งมอบ แบ่งได้เป็น 2 กลุ่มคือ
#* ซอฟต์แวร์สำเร็จรูป (Package software) ซอฟต์แวร์ที่มีการขาย ให้เช่า หรือให้บริการ โดยคิดค่าบริการเป็น transaction หรือ license
#* ซอฟต์แวร์ที่พัฒนาเงินเดือน (Outsources software development) เป็นการออกแบบและพัฒนาซอฟต์แวร์เพื่อใช้งานเฉพาะกับงานประเภทต่าง ๆ เฉพาะกิจกรรมไป ส่วนใหญ่ลิขสิทธิ์ของซอฟต์แวร์นี้จะเป็นของผู้ที่ว่าจ้างให้พัฒนาขึ้น
# การแบ่งตามประเภทของการนำไปใช้งานหลัก แบ่งได้เป็น 3 กลุ่มคือ
#* ซอฟต์แวร์ช่วยในการบริหารจัดการทั่วไป (Enterprise software) เป็นซอฟต์แวร์ที่ใช้กับการทำงานเพื่อแก้ปัญหา/จัดการทรัพยากรของ บุคคล/องค์กร เช่น ซอฟต์แวร์บัญชี ซอฟต์แวร์จัดทำเอกสาร เป็นต้น
#* ซอฟต์แวร์สำหรับอุปกรณ์พกพาขนาดเล็ก (Mobile applications software) เป็นซอฟต์แวร์ที่ทำงานผ่านระบบปฏิบัติการพิเศษบนอุปกรณ์ขนาดเล็ก เช่น โทรศัพท์มือถือ PDA โดยสามารถแบ่งเป็นกลุ่มใหญ่ ๆ ได้ 2 กลุ่ม คือ (1) ซอฟต์แวร์เพื่อสนับสนุนธุรกรรมทางธุรกิจ (Business applications) เช่น Mobile banking, Mobile payment, GPS on Mobile, Mobile applications for business process management และ(2) ซอฟต์แวร์ที่เกี่ยวข้องกับนันทนาการและบันเทิง (Entertainment applications) ซึ่งรวมเกมบนโทรศัพท์เคลื่อนที่
#* ซอฟต์แวร์สมองกลฝังตัว (Embedded System Software) เป็นซอฟต์แวร์ซึ่งฝังอยู่ไว้ในอุปกรณ์อิเล็กทรอนิกส์ต่าง ๆ เพื่อใช้สำหรับควบคุมการทำงานของอุปกรณ์นั้น ๆ เช่น ระบบ GPRS ระบบทำความเย็นอัจริยะ ระบบตรวจสอบย้อนกลับ เป็นต้น

## ซอฟต์แวร์ กับ ไลบรารี
ซอฟต์แวร์แตกต่างกับไลบรารี คือซอฟต์แวร์สามารถนำมาประมวลผลได้ด้วยตัวเอง ในขณะที่ไลบรารีเป็นส่วนประกอบของซอฟต์แวร์และไม่สามารถนำมาใช้ประมวลผลด้วยตนเองได้

## อ้างอิง

## ดูเพิ่ม
* ฮาร์ดแวร์
* วิศวกรรมซอฟต์แวร์
* กระด้างภัณฑ์และละมุนภัณฑ์