Lecture 1 - What Is SE

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 48

Introduction to SE

 What is software?
• Software is a set of instructions, data or programs
used to operate computers and execute specific tasks.
• It is the opposite of hardware, which describes the
physical aspects of a computer.
• Software is a generic term used to refer to
applications, scripts and programs that run on a
device.
 What is software?
• The two main categories of software are application
software and system software.
• An application is software that fulfills a specific need
or performs tasks.
• System software is designed to run a computer's
hardware and provides a platform for applications to
run on top of.
 What is software engineering?
• Software engineering is defined as a process of
analyzing user requirements and then designing,
building, and testing software application which will
satisfy those requirements.
• IEEE, in its standard 610.12-1990, defines software
engineering as the application of a systematic,
disciplined, which is a computable approach for the
development, operation, and maintenance of
software.
• Fritz Bauer defined it as ‘the establishment and used
standard engineering principles. It helps you to obtain,
economically, software which is reliable and works
efficiently on the real machines’.
• Boehm defines software engineering, which involves,
‘the practical application of scientific knowledge to
the creative design and building of computer
programs. It also includes associated documentation
needed for developing, operating, and maintaining
them.’
 Who are software engineers?
• Software engineers are computer science professionals who
use knowledge of engineering principles and programming
languages to build software products, develop computer
games, and run network control systems.
• According to the US Department of Labor, there were well
over 1.4 million people employed as software developers in
2021.
• As more and more of us rely on smart devices, the number
of software developers will only increase, with job outlook
predicted to grow at 25 percent by 2031.
 What Does a Software Engineer Do &
Types of Software Engineers
• The software engineering field is broad.
• Developers have different sets of technical expertise,
from building computer information systems to
maintaining network security to creating customer
facing web pages.
• There are two primary types of software engineers:
applications software developers and systems
software developers.
Applications Software Developers
• Overview
• Client-focused
• Design software for the end user to interact with
• Develop applications for iOS, Android, Windows, Linux,
and more
• Conduct requirements analysis
• Improve software and release updates regularly
• Front-end or back-end?
• Both
• Who they work with
• Graphic designers, project managers, marketers, and
customer success staff
Systems Software Developers
• Overview
• Build operating systems and networks for user-facing applications
• Responsible for both the hardware and software needs
• Integrate disparate software products onto one platform
• Often serve as general IT managers or systems architects
• Design and enforce IT standards
• Maintain IT documentation and update to new technologies
• Front-end or back-end?
• Mostly back-end
• Who they work with
• Data science professionals, senior systems architects,
development teams, and senior management
Software Engineering Jobs and Salaries

• Thanks to strong industry demand and their own


technical expertise, skilled software engineers on both
the applications and the systems sides are
compensated well for the value they deliver.
• The Bureau of Labor Statistics lists the median annual
salary for applications developers at $120,730 and at
$110,140 for systems developers.
• Of course, applications and systems developer jobs
are not the only two positions available in the field of
software engineering.
• Other common roles include mobile developers,
applications architects, quality assurance analysts,
and database administrators.
How to Become a Software Engineer
• Completing a two- or four-year computer science
degree has, until recently, been the only path to
suddenly launching a career as a software engineer.
• Other math- and science-related degrees in fields like
information systems, electronics, and civil engineering
or even community college courses have also enabled
people to transition into software development.
• But a formal degree or some college coursework are no longer
the only paths to becoming a web developer.
• Coding bootcamps are an increasingly popular option for those
who want to quickly transition into software engineering.
• Coding bootcamps are intensive eight- to 30-week programs that
focus on practical, language-specific programming skills but also
typically cover information technology fundamentals.
• Most bootcamps are designed to prepare students to enter the IT
job market ASAP and focus on the skills most in-demand within
online or in a certain geography
• Before you choose a program, consider which type of job you are
looking for and which language you should therefore learn.
Every Industry Needs Software
• With the proper qualifications, a software engineer
can work in almost any industry with any type of
organization.
• While IT firms lead the pack in hiring software
developers, government agencies, nonprofit
organizations, healthcare facilities, transit and logistics
companies, and every other business needs software.
Why should I pursue a career as a
software engineer?
• If you enjoy solving problems and have strong
analytical skills, a career as a software engineer can be
both fun and challenging.
• And as technology continues to evolve, the need for
software developers continues to grow much faster
than the national average
• Choosing a career as a software engineer gives you
opportunities to work in many different industries and
fields, as nearly all businesses use software.
• Whether you enjoy finances, entertainment, sports,
real estate, or some other industry, there’s a good
chance there are jobs for software engineers.
• It’s also a career that allows flexibility in where you
work.
• You may be able to work from home for companies in
other states or even other countries.
• The important thing is that you’re able to meet
deadlines and deliver a project on time.
Career paths in software engineering
• Once you become a software engineer, you can
choose which path you want to take (applications or
systems) and how far you want to progress with it.
• You can decide to advance toward a role as a senior
software engineer, or you can continue gaining
certifications and experience to advance to roles like
project manager or systems manager.
• As a software engineer, you have both flexibility and
mobility to create the career experience that is most
appealing to you.
How to become a software engineer

• Getting a job as a software engineer typically involves


building the right technical and workplace skills.
• Some jobs might also require a certain degree or
certification to validate your skills.
• However, there are many ways to enhance your skill
set. "Although I did have a formal education, taking
online classes on how to build mobile apps, doing
internships where I work on projects at a company,
and trying to build my own side projects was the most
helpful," says Laila Rizvi, a software engineer at Meta.
Software engineering skills
• As a software developer, you’ll be designing software
to help solve problems that real people face.
• This requires a combination of technical know-how
and solid communication skills.
• If you’re considering this as a career, here are some
skills you should focus on building:
• Coding languages like Python, Java, C, C++, or
JavaScript
• Object-oriented programming
• Database architecture
• Agile and Scrum project management
• Operating systems
• Cloud computing
• Version control
• Design testing and debugging
• Attention to detail
Software engineering certifications
• By earning a certification, you can build new skills and
validate those skills to potential employers.
• Some jobs might require a specific certification, so it’s
a good idea to research some job listings of roles
you’re interested in before preparing for a certification
exam.
• Here are some common options:
• Certified Software Development Professional
(CSDP)
• Certified Software Engineer
• C Certified Professional Programmer (CLP)
• C++ Certified Professional Programmer (CPP)
• AWS Certified Developer
• Microsoft Certified: Azure Fundamentals
Software engineering professionalism

• Software engineering does not have worldwide


recognition as being a profession but is a fully licensed
discipline in Texas, Australia, and large parts of
Canada.
• Since 1993 there have been numerous groups trying
to lobby for software engineering to be recognized as
a profession but so far their efforts have not been
realized.
• Despite having some of the same characteristics,
software engineering has not yet received widespread
acceptance as a profession.
• There are several associated societies and professional
associations but none have come together to define
what software engineering would look like as a
profession.
• There is even an argument to be made that software
engineering is a trade rather than a profession.
What is a profession?
• A profession is a group of people who have special
knowledge and skills recognized by a governing body
that licenses their work.
• They typically adhere to a strong set of ethical
standards and apply their training and education in
the interest of others in society.
• They are accredited by various organizations that
uphold the group’s high standard.
• A profession is not a trade or an entire industry.
Magali Larson defines a few
characteristics of a profession these
include:
• Having a professional association
• Having a cognitive base or set of knowledge
• Institutionalized training
• Licensing
• Automoney
• Colleague control
• A code of ethics
• High standards of professional and intellectual
excellence
• An elite group with special power and prestige
• Requires prolonged specialized training in a body of
abstract knowledge
• Service-oriented
• Various governing bodies have claimed occupational
specialization these include:
• mechanical engineering
• veterinary medicine
• psychology
• Teaching
• nursing
Is software engineering considered a
profession?
• Software engineering is not considered a profession
and is not a projected job title despite having many of
the hallmarks of a profession.
• Software engineering is still a relatively young
occupation and the various bodies within it have not
been able to agree on a set of standards to define the
job.
• Let’s explore some of the characteristics of a
profession and look at how software engineering
compares.
• Professional Association – Software engineering has
some professional associations including the IEEE
Computer Society in the U.S. and the British Computer
Society in the UK. They cater to various aspects of
professions in IT and technology.
• Cognitive Base – The Software Engineering Body of
Knowledge is sponsored by IEEE, National Research
Council Canada, Boeing, Construx Software, Canadian
Council of Professional Engineers, the MITRE
Corporation, Raytheon NIST, Rational, and SAP.
• It was created to take a step toward making software
engineering a legitimate discipline that has a
recognized body of knowledge.
• Institutionalized Training -Training for software
engineers in the USA can be accredited by ABET.
• There are also two exams based on the Software
Engineering Body of Knowledge – the Certified
Software Development Associate exam for recent
graduates and the Certified Software Development
Professional exam for professionals.
• Licensing – Licensing is only required in Texas to work
on embedded or real-time systems that “require a
detailed understanding of the engineered electrical or
mechanical components”.
• However, apart from that, there is no single
professional body that licenses software engineers.
• Code of Ethics – There is a code of ethics for software
engineers.
• The IEEE and ACM created the Software Engineering
Code of Ethics and Professional Practice.
• The other aspects like work autonomy, high standards,
intellectual excellence, and colleague control can be
observed in most top-end software engineering
environments.
• However, not all employees, employers, or freelancers
treat software development as an engineering
profession.
• So even though software engineering has many of the
characteristics of a profession there are a few specific
things that may make it difficult for the occupation to
be fully accepted as a profession.
Why software engineering is not a
profession
• Software engineering is not considered a profession because
of the relatively low barriers to entry, the lack of
accreditation and a single body of knowledge, and the speed
of change in the industry.
• Software development is also a relatively new field and
suffers from an unclear job definition.
• There are so many different areas to programming that it is
hard to pinpoint exactly what software engineering is.
• It differs depending on the stack you work with and the
company you work for.
Ease of entry
• Software engineering is easy to get into.
• You don’t need a degree to be a successful software
developer and can teach yourself at home.
• Development is a competitive field but largely due to the
sheer number of junior developers.
• For software engineering to become a profession it would
need to license developers and restrict the flow of people
into the industry.
• Most professions require their members to acquire abstract
or specialized knowledge, which programming could fall
under.
• However, the availability of such knowledge removes its
allure.
Rapidly changing field
• Coding standards and practices change rapidly.
• New updates and releases of certain languages
change the way people write software.
• Most professions have a set of standards and practices
that rarely change.
• In software engineering, developers can’t even agree
on a set of best practices between languages.
No licensing
• There is no licensing in software engineering and any
attempts to implement it would likely be unsuccessful.
• The industry is just too broad.
• There isn’t a single body of knowledge that once a
developer knows would allow them safely or
effectively write code.
• The journey to being a great developer is never
ending and changes with innovations in the various
coding languages.
Short learning curve

• One of the core tenements for an industry to become


a profession is that it requires prolonged specialized
training.
• Granted it can take years to become a proficient coder
but the initial learning curve is quite short.
• You can go from a complete beginner to job-ready in
six months, could the same be said for a doctor or
lawyer?
Not a service
• For an occupation to be considered a profession it should be
service orientated.
• There is an argument to be made that software engineers
help society but they don’t serve people in the same way
teachers or nurses do.
• The reason for high standards in a lot of professions is
because they serve the public or groups in some manner.
• It’s important that bridges are built to good standards and
that people are sold correct eyewear.
• You only have to look at codebases created by contractors to
know they aren’t doing it with wider public use or greater
good in mind.
Meritocracy
• The best thing about software development is that you don’t
need endless accreditations or certificates to prove you are
great.
• You only need to prove you can get things done and have a
portfolio of your work and you are good to go.
• The entire industry is a meritocracy that feeds off people’s
ability to produce great code, not pass a specific exam, and
becomes certified.
• It works in software engineers’ favor but the lack of a
widespread professional body that credits developers may
be a hurdle to it becoming a profession.
Software Engineering Code of Ethics and
Professional Practice.

• Software Engineering Code of Ethics and Professional


Practice (Version 5.2) as recommended by the
ACM/IEEE-CS Joint Task Force on Software
Engineering Ethics and Professional Practices and
jointly approved by the ACM and the IEEE-CS as the
standard for teaching and practicing software
engineering.
• Software engineers shall commit themselves to
making the analysis, specification, design,
development, testing and maintenance of software a
beneficial and respected profession.
• In accordance with their commitment to the health,
safety and welfare of the public, software engineers
shall adhere to the following Eight Principles:
1. PUBLIC – Software engineers shall act consistently
with the public interest.
2. CLIENT AND EMPLOYER – Software engineers shall
act in a manner that is in the best interests of their
client and employer consistent with the public
interest.
3. PRODUCT – Software engineers shall ensure that
their products and related modifications meet the
highest professional standards possible.
4. JUDGMENT – Software engineers shall maintain
integrity and independence in their professional
judgment.
5. MANAGEMENT – Software engineering managers and
leaders shall subscribe to and promote an ethical
approach to the management of software development
and maintenance.
6. PROFESSION – Software engineers shall advance the
integrity and reputation of the profession consistent with
the public interest.
7. COLLEAGUES – Software engineers shall be fair to and
supportive of their colleagues.
8. SELF – Software engineers shall participate in lifelong
learning regarding the practice of their profession and
shall promote an ethical approach to the practice of the
profession.
For More refer to
https://ethics.acm.org/code-of-ethics/software-engineering-code/
Next : Software Process and
Models

You might also like