Junaid Chaudhry
junaidch@gmail.com | http://www.linkedin.com/in/junaidch
Music
Painting
Photography
Film
Creative Writing
Software Engineering
Lowest Common Denominator
What 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 development
Large 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
Developing an Engineering Mindset by Junaid Javed

Developing an Engineering Mindset by Junaid Javed

  • 2.
    Junaid Chaudhry junaidch@gmail.com |http://www.linkedin.com/in/junaidch
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
    Lowest Common Denominator Whatdo these professions have in common?
  • 10.
    “Software development isart. 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
  • 11.
    Exciting Times You area 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
  • 12.
    Exciting Times Your professionis rapidly transforming the world Your skills are appreciated Outlook for the next 10 years
  • 13.
    The Big Picture Typicalsoftware 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
  • 14.
    Programming Vs. Engineering ProgrammingSoftware Engineering Personal activity (instrument) Team activity (orchestra) One aspect of software development Large 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
  • 15.
    Programming Vs. Engineering AProgrammer… 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…
  • 16.
  • 17.
  • 18.
  • 19.
    Mind Your Language Growyour 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
  • 20.
    Do You HearThe 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?
  • 21.
    Quality Control Quality isnot 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”
  • 22.
    When interviewing candidatesfor 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
  • 23.
    Evolve Mindset Work towards yourgoals 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

Editor's Notes

  • #2 Audience: Front–End Developers (HTML; CSS) PHP Developers RoR Developers IOS Developers Android Developers Project Managers
  • #3 Junaid is a Software Engineer by profession and passion and has over 10 years of relevant industry experience in the US. He holds a Bachelors and Masters degree in CS from LUMS and USC respectively and a Business Management Certification from UPENN’s Wharton School of Business. Junaid moved to the Bay area in 2007 and has since worked for a number of medium to large scale tech firms including AT&T/YP. He has also lead engineering teams at early stage startups and is currently leading the UI and Server Engineering teams at Athos – an early stage wearable tech company building smart fitness clothes and virtual trainers. In his spare time, Junaid has also acted as a technical advisor for a few startups including Sweetness Labs, the development for which was handled by Virtual Force. Junaid’s industry experience spans verticals such as research and education, supply chain management, e-commerce, risk management, wireless location-based services, and wearable technology.
  • #10 All these are creative professions. Engineering is part science and part art
  • #13 Your profession is rapidly transforming the world. You can bootstrap a company from your garage and disrupt an entire industry! Your skills are appreciated Data Scientists & Software Engineers are amongst the most highly paid skill-based professions Next 10 years Automation and tooling will result in significant job reductions in most industries. Engineering jobs will continue to grow.
  • #16 Writes a software component Combined with components written by other engineers to build a system May be modified by others Requires the big picture
  • #20 Grow your skills Your engineering skills are a function of experience and the problems you have solved in the past. Strive to be a generalist Technology changes rapidly. Learn as much as possible to adapt! Build an arsenal of tricks, tools, and techniques General principles easily translate across languages & platforms Solve more interesting problems and grow your skills/career faster Become a specialist as the situation demands Don’t form loyalties to any language or framework. Be free! Consider the entire stack