developing an engineering mindset by junaid javed

24

Upload: jamil-goheer

Post on 17-Jul-2015

175 views

Category:

Software


4 download

TRANSCRIPT

Junaid [email protected] | http://www.linkedin.com/in/junaidch

Music

Painting

Photography

Film

Creative Writing

Software Engineering

Lowest Common DenominatorWhat do these professions have in common?

“Software development is art. It is science. It is craft, archeology, fire fighting,

sociology, and a host of other activities. It is amateurish in some quarters,

professional in others. It is as many different things as there are different

people programming.”

The Art, Science, and Engineering of Software Development

Steve McConnell

Exciting Times

You are a part of the most disruptive profession out there.

Disruptor Industry Disrupted

Uber, Lyft Taxi / Transportation

PayPal, Square, Mint Financial Services, Payments

Orbitz, Kayak Travel Agencies

Airbnb Hospitality / Hotels

Apple CarPlay, Android Auto Automotive Electronics / Navigation

(Pioneer, Garmin, TomTom)

NetFlix, Amazon Prime, YouTube Entertainment (TV/Cable, Film)

Google Voice, Whatsapp, Viber, Slack Telecom / Communication

Amazon, Ebay Retail

Amazon Web Services, Google

Application Engine

IT Infrastructure and services

Exciting Times

Your profession is rapidly transforming the world

Your skills are appreciated

Outlook for the next 10 years

The Big Picture

Typical software systems have dozens of moving parts

and failure points

Knowledge of a small subset of the system limits your

problem solving abilities and hence your impact

Without the big picture, you cannot innovate or improve

the current status quo

Programming Vs. Engineering

Programming Software Engineering

Personal activity (instrument) Team activity (orchestra)

One aspect of software developmentLarge systems must be developed

similar to other engineering practices

Concerned about accomplishing the

objective of the program itself

Concerned about the entire solution, its

feasibility, and future use

Programming Vs. Engineering

A Programmer… A Software Engineer…

Writes a complete program with a

specific objective

Writes a software component

Uses a known tool (language/framework) Learns and uses the right tool to solve

the problem

Gets things done on a deadline without

getting bogged down in technical details

Focuses on reusable solutions that

scale, elegant architectures, and building

tools to automate work

Loves to keep up with the latest

tools/plugins to solve his/her problems

faster

Write & maintain the tools/plugins that

developers tend to use

Knowledge a mile wide but a foot deep May need to be focused

However it takes all kinds…

Engineering Failures

Engineering Failures

Mind Your Language

Mind Your Language

Grow your skills

Strive to be a generalist

Become a specialist as the situation demands

Don’t form loyalties to any language or framework. Be

free!

Consider the entire stack

Do You Hear The Voices?

Requirements

Do these requirements make sense?

Problem Solving

Have I architected a suitable solution to the problem?

Have I chosen the right data structures?

Is my algorithm reasonably efficient?

Have I checked boundary conditions and corner cases?

Scalability

Will my code scale?

Do I need to optimize?

Will my architecture scale (horizontally/vertically)?

Build & Deploy

Will the build break when I commit?

How will my code deploy?

Maintainability

Will others find it hard to read or maintain my code?

How will I troubleshoot my code in production?

Extensibility

Does my design allow for future features?

How easily can others build on top of my code?

Quality Control

Quality is not an activity. Its an attitude and a mindset!

Tools to increase quality

Unit tests

Continuous Integration

Using Git the right way

Code reviews

Pair Programming

Team mentorship

Thoughts

Shortcuts - when should you take one?

When checking in your code…

Stack Overflow - read the rest of it!

Hire “right”

When interviewing candidates for programming jobs, one of my favorite

interview questions is, "How would you characterize your approach to

software development?"

My favorite answer came from a candidate who said, "During software design,

I’m an architect. While I’m designing the user interface, I’m an artist. During

construction, I’m a craftsman. And during unit testing, I’m one mean son of a

b****!”

The Art, Science, and Engineering of Software Development

Steve McConnell

Evolve

Mindset

Work towards your goals and ambitions; not your paycheck

Motivate yourself to actively learn and push your boundaries

Love what you do and do it well or make room for someone who will

Practice

Each problem you solve grows your skill, interest, and confidence

When you realize you are good at something, you become passionate about it

Share

Reinforce positive values in your colleagues

Mentor talented but less experienced colleagues. They will assimilate your values and work ethic