Concept of Hardware &
Software
                    Hardware
The term hardware refers to mechanical device that makes up
  computer. Computer hardware consists of interconnected
   electronic devices that we can use to control computer’s
 operation, input and output. Examples of hardware are CPU,
               keyboard, mouse, hard disk, etc.
         Hardware Component
     Computer hardware is a collection of several several
 components working together. Some parts are essential and
others are added advantages. Computer hardware is made up
       of CPU and peripherals as shown in image below.
                     Software
  Software refers to set of programs that instruct hardware
  what to do and how to do.
  It comprises of instructions and data to be processed using
  computer hardware.
  Each software is written for some computational purpose.
  Softwares are intangible.
Need of Softwares
  Software acts as an interface between user and hardware.
  It makes computer hardware operational and useful.
              Types of Software
Software can be broadly classified in three categories:
   System Software
   Application Software
   Programming Tools
System Software
   It manages computer system by interacting directly with
   its constituent hardware.
   It helps in providing various services to user and resources
   to other softwares.
               System Software
Following are different types of System software:
    Operating System
    System Utilities (Utility Software)
    Device Drivers
Operating System
  The software that acts as an interface between user and
  computer hardware.
  It is a System Software.
  Every computer system must have at least one operating
  system installed.
  Windows, Linux, Solaris, MAC OS, Ubuntu, MS DOS are some
  of the examples of Operating System.
  It helps in performing the core functionalities like accepting
  input from various input devices, directing the output to
  the display, managing the files and directories,
  communicating with hardware, and installing /uninstalling
  of peripheral devices.
System Utilities
  System Utilities are Softwares used to maintain computer
  systems to work more smoothly, efficiently and effectively.
  It helps in improving the performance of computer
  It helps in providing security from virus
  It helps in managing and freeing disk space and providing
  data backups
  Disk defragmentation, formatting, system restore are
  some utilities inbuilt in Operating System.
Device Driver
  Device Drivers are programs that help functioning a
  hardware device with computer system
  It acts as an interface between the device and operating
  system.
  Overall control, interpretation, operation and management
  of a device at the hardware level is handled by device
  driver.
            Programming Tools
Programming tools refers to the tools used to write
instructions, converts high level to machine language and
develop softwares for computer system.
Following are the programming tools used
    Programming languages
    Language translators
    Program development tools
Programming Languages
   Programming languages are used to write instructions
   which are applied by computer system to get desire
   results.
   Programming languages are developed to simplify coding
   for computers.
Programming language can be classified in two categories:
   Low level language
   High level language
Low Level Language
These are machine dependent language that includes:
   Machine language
   Assembly language
Machine language
   It uses binary code i.e. 0s and 1s to write instructions for
   computer system.
   It is directly understood by computer system and hence no
   intermediate software is required to execute them.
   It is difficult to use machine language as one has to
   remember all operational codes and machine addresses.
   It is difficult to find errors in the code written in machine
   language
Assembly language
   Assembly language uses English like words to write
   instructions for computer system.
   It is platform dependent means code written for a
   particular CPU cannot be used for another CPU.
High Level Language
 High level languages uses English like words using its own
 grammar (set of rules) to write instructions.
 It is platform independent and simple to write code.
 Translators (compilers) are needed to translate high level
 language into machine language.
 Examples: C++, Java, Python, C# etc.
Language Translators
   Language translators are used to convert instructions
   written in assembly or high level language to machine
   language.
   The code converted into machine language is called object
   code.
   Different translators for different languages are used for
   conversion.
There are three types of language translators:
   Assembler
   Compiler
   Interpreter
Assembler
   The translator used to convert the code written in assembly
   language to machine language is called assembler.
   Each assembler can understand a specific microprocessor
   instruction set only and hence, the machine code is not
   portable.
Compiler
   Compiler converts source code written in high level
   language into machine code.
   If the code does not follow all syntactic rules of the
   language, compiler generates error.
   Once source code is translated successfully, the compiler
   is not needed further.
Interpreter
    Interpreter converts source code written in high level
    language into machine code line by line.
    Interpreter is always needed whenever a source code is to
    be executed.
Program Development Tools
Program development tools are also referred as Integrated
Development Environment which provides all resources
needed for software development. It consist of:
   Text editor
   Debugger
   Compiler
   GUI Editor etc.
Examples: Python IDLE, Netbeans, Eclipse, Visual Studio, Atom
          Application Software
   Software which is developed for a particular type of
   application such as drawing, presentation,
   documentation, calculation etc,
   It is used by user to accomplish their task.
   It always runs on the top of the system software.
There are two main categories of application software:
   General purpose software
   Customized software
          Application Software
General purpose software
  These are application software designed for generic
  applications such as Spreadsheets, Photoshop, and
  Chrome etc.
  These are developed to meet the requirement of mass
  users in mind without any geographical barrier.
Customized software
  These are application software designed to meet the
  requirement of individual or organization.
  Examples: school management software, hospital
  management, inventory management, payroll etc.