Software is the set of instructions and data that enable computers to function. It encompasses computer programs, data storage, and documentation. There are different types of software including generic products sold broadly and customized products tailored for specific customers. Software engineering aims to develop software through systematic, disciplined processes to produce reliable and efficient software economically. It involves layers of process, methods, tools, and a quality focus. A generic software process framework includes activities like communication, planning, modeling, construction, and deployment managed through umbrella activities.