Junaid [email protected] | http://www.linkedin.com/in/junaidch
“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…
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