Intro to Software Engineering for non-IT Audience

Post on 01-Jul-2015

188 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

Transcript

© Yuriy Guts, 2013

What do we actually do?

Myth #1

Our job is to operate computers

Computer is merely a helper tool in programming

Programmers can even weave cloth!

(Google: Jacquard Loom)

Myth #2

Machines can think

They do only what they’re told to do. Not quite yet.

Our job:

Describe absolutely precisely what to do

We have to speak the same language

For computers, this language is numbers

How to tell the computer to add 19+23?

Example:

160  16  1  138  30  17  1  2  195  162  18  1  180  76  205  33  19  23  

(Intel 80386, MS-DOS, .COM)

Fact:

Modern software consists of MILLIONS of instructions

Is there a simpler way?!

Let’s create a more human-readable language and let the computer translate it to numbers

.model  tiny  

.386    .data          num1    db  19          num2    db  23          sum      db  ?      .code  org  100h  

start:          mov      al,  num1            mov      bl,  num2            add      al,  bl          mov      sum,  al            mov      ah,  4ch            int      21h      end  start  

How is THAT simpler?!

To make things easier, we must abstract away from unimportant details

This is why new technologies appear

They allow us to focus on some details and ignore others

How to tell the computer to add 19+23?

Example (Python):

print  19  +  23  

That’s way better

How to ensure efficient and reliable storage?

Some famous abstractions

Databases

Networks

How to search and edit data conveniently?

How to make machines collaborate?

How to split difficult tasks among multiple machines?

Myth #3

It’s a boring and tedious job

An engineer is concerned with applying scientific knowledge and ingenuity to develop solutions for

technical, social and economic problems.

Ingenuity — [Wiki] The quality of being clever, original, and inventive, often in the process of applying ideas to

solve problems or meet challenges.

Code is only an end result. A good engineering design is comparable to art.

Types of software

Desktop Web

Mobile Embedded

(by means of access)

Desktop

•  Rich hardware capabilities

•  Many applications already have online alternatives

•  Adobe Photoshop

•  Microsoft Office

•  “Heavy” 3D games

Examples

Specifics

Software for workstations and laptops

Web

•  Distributed nature

•  Many simultaneous users

•  Unified access from many devices

•  Facebook

•  Wikipedia

•  Google Search

Examples

Specifics

Software accessible over the Internet

Mobile

•  Energy-efficiency, limited capabilities

•  Sensors: GPS, gyro, accelerometer, ...

•  Large family of devices and sizes

•  Instagram

•  Foursquare

•  iBooks

Examples

Specifics

Software for handheld consumer devices

Embedded

•  Limited user interaction

•  Low-level programming

•  Speed and reliability constraints

•  Medical devices

•  Airplane “black boxes”

•  Security systems

Examples

Specifics

Specialized device-specific integrated software

Popular programming languages

Java C#

JavaScript Objective-C

C++ Python

PHP Ruby

Functional (Scala, Haskell, Erlang, Lisp family...)

(as of Q1 2013)

Myth #4

Learning the “right” language will make you a good professional

Every language is a tool, know when to use it

Learning and switching

Types of IT professionals

System Analysts Project Managers

Software Architects Technical Writers

Software Developers System Administrators

QA Engineers Support Engineers

Software development lifecycle

Requirement analysis + user experience prototyping

Choice of technology stack & architecture

Design and implementation

Quality assurance and monitoring

Deployment

Maintenance and support iterative

Q & A

yuriy.guts@eleks.com

top related