2. Topics Covered
2
The Software Industry Landscape
Software Engineering Career Paths
Essential Skills for Success in Software Engineering
Software Communities
Software Learning Resources
Fundamentals of Software Engineering - Osamah Abduljalil
3. The Software Industry Landscape
3
Fundamentals of Software Engineering - Osamah Abduljalil
Market Size and Growth
The global software market size was valued at USD 583.47 billion in 2022 and is expected to grow at a
compound annual growth rate (CAGR) of 11.5% from 2023 to 2030. This growth is because more companies are
using a lot of data, automating their processes, and going digital.
The COVID-19 outbreak positively impacted the global market, as it stimulated the demand for software solutions
for remote work, cybersecurity, e-commerce, and digital transformation.
Key Players and Market Trends
Some of the key players in the global software market include Microsoft, IBM, Oracle, SAP, Adobe, Salesforce,
VMware, Dell, Cisco, and Symantec1.
Some of the key market trends include the adoption of cloud-based software, the emergence of artificial
intelligence (AI) and machine learning (ML) technologies, the rise of software as a service (SaaS) and platform as
a service (PaaS) models, and the increasing focus on cybersecurity and data privacy.
4. Software Engineering Roles
4
Fundamentals of Software Engineering - Osamah Abduljalil
Front-End Engineer
Plan, design, and build the user-interface components of a software application. They
ensure that the interface meets both an organization’s goals and user needs.
Back-End Engineer
Design, build, and maintain the server-side of web applications with a focus on speed, and
functionality. They write server scripts and work with application programming interfaces
(APIs) that are eventually used by front-end engineers.
Full-Stack Engineer
As the name suggests, a full-stack engineer does it all—they are familiar with the full
software development cycle and can contribute to both the front-end and back-end.
5. Software Engineering Roles
5
Fundamentals of Software Engineering - Osamah Abduljalil
Quality Assurance (QA) Engineer
QA engineers have in-depth knowledge of different testing processes and methodologies.
They are good in data management, bug reporting, and creating test environments.
DevOps Engineer
DevOps engineers help make sure that new code gets released and deployed smoothly.
They work in the middle of software development and IT operations, knowing a lot about
testing how well things work, setting benchmarks, and finding ways to make the basic
infrastructure better.
Security Engineer
Security engineers are cybersecurity specialists who are trained to detect security
problems within systems and build protections from malware and unauthorized entry. They
are also trained in digital forensics to determine how and when an attack took place.
6. Software Career Ladder
6
Fundamentals of Software Engineering - Osamah Abduljalil
Intern
Internships provide an opportunity for individuals to apply their academic knowledge to
real-world projects, acquire hands-on experience, and develop skills under the guidance of
experienced professionals. Interns often work on specific tasks or projects within a team
and are exposed to the day-to-day operations of the software development process.
Junior Developer (1-3 years)
Junior software engineers have an entry-level role. They typically assist the engineering
team with basic tasks such as writing code and debugging existing software.
7. Software Career Ladder
7
Fundamentals of Software Engineering - Osamah Abduljalil
Mid-level Engineer (3-5 years)
Mid-level software engineers are competent in all stages of the software development
cycle and can usually work independently.
Senior Engineer (5+ years)
Senior software engineers have the most independence. They usually have an area of
expertise (i.e. DevOps, full-stack development, back-end development), have
demonstrated leadership capabilities, and are able to lead a project from start to finish.
8. Essential Skills for Success in Software
Engineering
8
Fundamentals of Software Engineering - Osamah Abduljalil
Soft Skills
Organizational and Project Management Skills
Technical Skills
9. Soft Skills
9
Fundamentals of Software Engineering - Osamah Abduljalil
Communication and Collaboration
Manage Time and Honor your commitments
Problem-Solving
Critical Thinking
Analytical Thinking
Attention to Detail
Continuous Learning
10. Organizational and Project Management Skills
10
Fundamentals of Software Engineering - Osamah Abduljalil
Coordinate with team members, vendors, and customers to solve problems
Gather business and functional requirements
Test different scenarios (Test Cases)
Use project management tools such as Jira, Trello..etc.
Use Version Control Systems Such as: Git, GitHub..etc.
11. Technical Skills
11
Fundamentals of Software Engineering - Osamah Abduljalil
Programming languages: Software engineers need to be proficient in at least one programming
language, such as JavaScript, Python, Java, C#, or Ruby. Programming languages are the tools that
software engineers use to create instructions for computers to execute.
Software development methodologies: Software engineers need to follow a systematic and
disciplined approach to developing software, such as Agile, DevOps, Scrum, or Waterfall. Software
development methodologies are the frameworks and processes that software engineers use to
manage the software development life cycle, from planning and design to testing and deployment.
Testing and debugging: Software engineers need to ensure that the software they create is reliable,
secure, and error-free. Testing and debugging are the activities and tools that software engineers use
to verify, validate, and improve the quality of software.
Containers: Software engineers need to be familiar with containers, which are software packages
that bundle up an application and its dependencies into a single unit that can run on any platform.
Containers are the technologies that software engineers use to create portable, scalable, and
consistent software environments.
12. Software Communities
12
Fundamentals of Software Engineering - Osamah Abduljalil
Software communities are online platforms where developers and software engineers can meet,
connect, and interact with each other around their shared interests, challenges, and goals. Software
communities can help developers learn new skills, find solutions, get feedback, network, and
collaborate on projects.
Where can I find Software Communities?
Social Media Groups.
Some popular software communities are:
o GitHub: A platform where more than 40 million people learn, share, and work together to build
software. You can join the GitHub Community Forum to share ideas and follow discussions on
topics that interest you.
o Stack Overflow: An open community for anyone that codes. You can get answers to your
toughest coding questions, share knowledge with your coworkers, and find your next dream job.
o Hacker News: A social news website focusing on computer science and entrepreneurship. You
can post anything that gratifies your intellectual curiosity and join the lively discussions with other
developers.
13. Software Learning Resources
13
Fundamentals of Software Engineering - Osamah Abduljalil
Search Engines – software that allow users to search for information of interest.
• Examples: Google Search and Microsoft Bing
• Use algorithms that can predict or suggest your searches
• Finds documents on the Internet that closely align with the search terms entered by the user
Recent development in artificial intelligence have enabled generating, testing, and debugginh code
capabilities Examples: Github Copilot, ChatGPT.
User Generated Content Websites: users generate content that meets some specialized information
needs for other users such as: GeeksForGeeks, W3School, Medium..etc.
Coding Challenge Websites: are platforms that offer programming problems and exercises to help
developers enhance their coding skills, practice problem-solving, and prepare for technical interviews.
14. Coding Challenge Websites
14
Fundamentals of Software Engineering - Osamah Abduljalil
LeetCode: is a widely used platform for coding challenges that cover a variety of topics, including
algorithms, databases, shell, and more. It is commonly used for technical interview preparation.
HackerRank: provides a diverse set of coding challenges in various domains, such as algorithms,
data structures, artificial intelligence, and databases. It also hosts coding competitions.
CodeSignal: offers coding challenges, as well as interview preparation kits and coding arcade games.
It is known for its adaptive assessments that help users understand their skill levels.
Codewars: focuses on providing coding challenges in the form of kata, where users can solve
problems and rank up based on difficulty. It emphasizes community-driven learning.
TopCoder: is not just a coding challenge platform; it also hosts competitive programming contests. It
covers algorithmic challenges, and users can participate in single-round or marathon matches.
15. Software Learning Resources – Online Training
15
Fundamentals of Software Engineering - Osamah Abduljalil
Popular sites like YouTube have become useful sources of information for learning:
YouTube videos are rated by the community with likes, dislikes, and subscribes.
YouTube algorithm constantly tunes its suggestions for videos which can most likely be used to
love your problem.
Massive Open Online Courses (MOOCs)
Online educational courses open to anybody in the world
Some are free and some require payment
Examples: Khan Academy (https://www.khanacademy.org/) or Coursera (https://www.coursera.org/)
MIT Open Courseware offers a vast majority of their class materials for free (https://ocw.mit.edu/)
Training by Industry-Specific Organizations
Example: Amazon Web Service (AWS) Training, Google, IBM..etc.