Introduction to Software Engineering
Software Engineering is made up of two words. Software and Engineering.
Software is a set of instructions that tell a computer what to do in order to perform various tasks or functions (these tasks include: managing data, processing information and displaying output to the user).
These instructions can be written in different programming languages such as: C, Python, Go, Kotlin, etc.
Engineering refers to the process of designing, building and testing things, often using Math as Science principles.
Engineers use their knowledge and skills to solve practical problems and create new products, structures and systems that improve people's lives.
Software Engineering, therefore, is the process of designing and building computer programs (or in other words, the sets of instructions that a computer follows in order to accomplish various tasks and functions).
This is to say that Software Engineering is all about using computers and code to build useful and fun software people can use.
Categories of Software
- System software - provides the interface between the hardware and the user, managing resources such as memory, processing power and input/output devices. Examples include Operating Systems (Windows, Linux, Android, macOS, iOS), device drivers (Printer drivers, graphics drivers) and Firmware (BIOS).
- Application Software - is designed to perform specific tasks or functions for the user. Examples include Word processors (MS Word, Google Docs), Web browsers (Google Chrome, Mozilla Firefox), Media Players (VLC, iTunes), Gaming Software (Fortnite, Minecraft).
- Programming Software - is designed by software developers to create, debug and maintain other software programs. Examples include Text editors (Notepad++, Sublime Text), Integrated Development Environments (Visual Studio Code, Eclipse), Version Control Systems (Git, Subversion).
- Middleware Software - provides a bridge between different software applications and systems, allowing them to communicate with each other. Examples include Message-oriented middleware (IBM MQ, Apache Kafka), Database middleware (ODBC, JDBC), Application Servers (Apache Tomcat, Microsoft IIS).
- Utility Software - provides tools or functions that are useful for maintaining and optimizing a computer system. Examples include Antivirus software (Norton, McAfee), Backup software (Acronis, Carbonite), Disk utilities (Disk cleanup, Disk defragmenter).
- Embedded Software - is embedded withing hardware devices and is responsible for controlling the devices functionalities. Examples include Firmware in routers (DD-WRT, OpenWRT), Firmware in printers (HP, Brother), Firmware in cameras (Canon, Nikon).
- Artificial Intelligence software - uses machine learning and other techniques to perform tasks that would typically require human intelligence such as speech recognition, image recognition and natural language processing. Examples include Voice assistance (Alexa, Siri, Google Assistant), Image recognition software (Google photos, Adobe Photoshop), Natural Language Processing software (IBM Watson, Microsoft LUIS).
What Software Engineering Involves
Software engineering usually involves writing, testing, debugging, maintaining and updating computer programs over time.
A good example is when you want to build a computer game. You need to:
- come up with the idea for the game
- plan out how it will work
- use a programming language to write the code that will make the game run
- once the game is finished, you would need to test it to make sure it's working correctly
- if you find any problems, you will need to go back and fix them by updating the code until the game works as expected.
Large software companies like Google, Amazon, Facebook and Microsoft view software engineering as different from web development. For example, Amazon has Frontend Engineers (FEE) and Software Development Engineers (SDE).
Large companies require computer science knowledge for software development / engineering roles.
Some of the things you should know are
- Stack and heap
- Big-O notations
- Trees
- How to traverse a graph
- Coding a sorting algorithm
- Building your own data structures
- Managing memory
- Multidimensional arrays
- Associative arrays.
How to become a Software Engineer
Becoming a software engineer is a long-term journey that requires consistent learning and development of technical and non-technical skills.
Some steps to follow include:
- Learn the basics of programming - these include data types, variables, control structures and functions. Once you understand what these are, choose a programming language to practice these concepts.
- Build projects - after learning the basics, start building simple projects to practice your programming skills. This will help you develop your problem-solving skills and get used to working with different programming tools and libraries.
- Gain practical experience through working on open-source projects - this can help gain valuable experience working on real-world software projects, collaborate with other developers and learn new programming languages and tools. You can also do internships or by participating in hackathons and coding challenges.
- Develop software design skills - these skills include writing clean and maintainable code, following best practices and applying design patterns.
- Learn multiple programming languages - this is so that you can choose the best tool for the job. Focus on mastering the fundamentals of each language, rather than trying to learn too many at once.
- Improve your communication and collaboration skills - as you progress in your career, your ability to communicate effectively and collaborate with others becomes increasingly important. Practice your communication skills by explaining technical concepts to non-technical people, and work on your collaboration skills by participating in group projects and working with others.
- Stay up to date with new technologies and trends - to stay relevant in the ever changing field of software engineering, stay up to date with new technologies, tools and trends. Attend conferences, read technical articles and books, and participate in online communities to learn about new developments in the field.
- Give yourself time, be patient and consistently learn, practice and dedicate your focus towards building your skills, collaborating with others.