نرمافزار کامپیوتری مجموعهای از برنامههای کامپیوتری و دادههای مرتبطشان است که دستورالعملی برای کامپیوتر فراهم میکند که چه کاری را چگونه انجام دهد. به عبارت دیگر نرمافزار مجموعهای از برنامههای کامپیوتری، روشها، الگوریتمها و مستندات مرتبط به آن است که قابلیتهای پردازشی سختافزار را در اختیار کاربر میگذارد. نرمافزارهای کامپیوتری را میتوان به دو دسته بزرگ نرمافزارهای سیستم و نرمافزارهای کاربردی تقسیم کرد. نرم افزارهای سیستمی مسئولیت کاربردهای سطح پایین و مدیریت اجزای سخت افزاری سیستمهای کامپیوتری را بر عهده دارند. سیستمعامل و درایورها از نرم افزارهای سیستم هستند. در برابر نرمافزارهای سیستم، نرمافزارهای کاربردی قرار دارند که برای انجام وظایف خاص ساخته میشوند. مانند پردازشگر متنی که این متن در آن نوشته شده است و بازیهای کامپیوتری.
اصطلاح نرمافزار در سال ۱۹۵۸، درمقابل کلمه قدیمی سختافزار (به معنای اسباب و اشیا) ابداع شد. گرچه «نرم افزار» و «برنامه» به جای هم به کار میروند، ولی اصطلاح «نرم افزار» بیشتر برای مجموعه نسبتاً بزرگی از برنامهها بهکار میرود و «برنامه» به جزئی از سیستم نرم افزاری اشاره دارد. امروزه واژه نرم افزار را بیرون از حوزه کامپیوتر نیز بهکار میبرند. مثلاً در مدیریت به روشها و دانش فنی (در مقابل وسائل و تجهیزات و نیروی انسانی) نرم افزار میگویند.
صنعت نرم افزار کامپیوتر در زمان نسبتا کمی رشد زیادی کرده است و با بسیاری از صنایع شناخته شده رقابت میکند و حتی آنها را کنار زده است. بیل گیتس، رییس شرکت مایکروسافت، با فروش نرم افزارهای ویندوز و آفیس ثروتمندترین مرد دنیا در سال ۲۰۰۹ شد. در کنار جنبه تجاری نرم افزار، حرکتهایی هم مانند بنیاد نرم افزار آزاد و پروژه GNU وجود دارند که بر مشارکتی بودن و رایگان بودن نرم افزارها تاکید دارند.