Software Development An overview of careers in Business Application Development http://goo.gl/3go6re Sources: Dice.com, money.CNN.com, InfoWorld.com, money.USNews.com,

Slides:



Advertisements
Similar presentations
Design Principles & Patterns
Advertisements

General OO Concepts and Principles CSE301 University of Sunderland Harry R. Erwin, PhD.
Lecture 9 Improving Software Design CSC301-Winter 2011 – University of Toronto – Department of Computer Science Hesam C. Esfahani
SOLID Object Oriented Design Craig Berntson
More Inheritance and LSP CS340100, NTHU Yoshi. More about Inheritance Reuse? – Q1: 你有沒有程式 ” 砍掉重練 ” 的經驗 ? – Q2: 你有沒有 ” 再造輪子 ” 的經驗 ? class Rectangle – Firstly,
EXtreme.NET Dr. Neil Roodyn. eXtreme.NET Who is Dr. Neil? MISSION: To increase the value of your Software Business Working with software for way too long.
1 CS4850 Programming Languages Wuwei Shen. 2 Aministrivia Course home page: Reference books: –Programming Languages,
Using TDD Making code maintainable, reusable and readable by writing tests.
Developed by Reneta Barneva, SUNY Fredonia Component Level Design.
Unit Testing Tips and Tricks: Database Interaction Louis Thomas.
CSc 335: Three More OO Design Principles
1 Data Structures - CSCI 102 CS102 C++ Polymorphism Prof Tejada.
Building SOLID Software with Dependency Injection Jeremy Rosenberg.
CLASS DESIGN PRINCIPLES Lecture 2. The quality of the architecture What is a good design? It is the design that at least does not have signs of “bad”.
Sadegh Aliakbary Sharif University of Technology Fall 2011.
1 OO Design Novosoft, 2001 by V. Mukhortov. 2 OO Design Goals  Flexibility Changes must be localized  Maintainability Modules requiring changes can.
Company Confidential – Do Not Duplicate 2 Copyright 2008 McLane Advanced Technologies, LLC S.O.L.I.D. Software Development Achieving Object Oriented Principles,
Software Engineering. Administrivia This is me: Cyndi Rader You can reach me: Or find me here: BB 280D Class notes here:
Course Overview & Topics CSc 335: Object-Oriented Programming and Design © Rick Mercer 1.
© 2004 Capgemini - All rights reserved SOLID - OO DESIGN PRINCIPLES Andreas Enbohm, Capgemini.
CSE 301 Exam Revision Lecture
Introduction to SOLID Principles. Background Dependency Inversion Principle Single Responsibility Principle Open/Closed Principle Liskov Substitution.
S.O.L.I.D. Software Development 12 January 2010 (Martin Verboon, Patrick Kalkman, Stan Verdiesen)
Башкирцев (Старовер) Станислав JavaTalks OOD Principles.
SOLID Principles in Software Design
1-1 C Sc 335 Course Overview Object-Oriented Programming and Design Rick Mercer.
The benefits of SOLID in software development Ruben Agudo Santos (GS-AIS-HR)
Software Design Principles
1 Single Responsibility Principle Open Closed Principle Liskov Substitution Principle Law of Demeter CSC 335: Object-Oriented Programming and Design.
OO Design Principles Copyright © Vyacheslav Mukhortov, Nikita Nyanchuk-Tatarskiy, Copyright © INTEKS LLC,
Salman Marvasti Sharif University of Technology Winter 2015.
High Cohesion Low Coupling Old Standards for Object Oriented Programming.
Five design principles
Inheritance CSI 1101 Nour El Kadri. OOP  We have seen that object-oriented programming (OOP) helps organizing and maintaining large software systems.
1. Perspectives on Design Principles – Semantic Invariants and Design Entropy Catalin Tudor 2.
Principles of Object Oriented Design
PRINCIPLES OF OBJECT ORIENTED DESIGN S.O.L.I.D. S.O.L.I.D Principles What is SOLID?  Acrostic of 5 Principles:  The Single Responsibility Principle.
SOLID Design Principles
SOLID Principles in Software Design
Session 33 More on SOLID Steve Chenoweth Office: Moench Room F220 Phone: (812) Chandan Rupakheti Office: Moench.
SOLID PHP & Code Smell Wrap-Up
Ukázková aplikace je ke stažení na wug
Mantas Radzevičius ifm-2/2
What is Agile Design? SRP OCP LSP DIP ISP
Interface Segregation / Dependency Inversion
OCP and Liskov Principles
Course information Old exam Resit Report Result and walkthrough
Software Design Principles
Design Principles and Approaches
Inheritance ITI1121 Nour El Kadri.
Software Architecture & Difference from Design
CMPE 135: Object-Oriented Analysis and Design October 24 Class Meeting
Copyright © by Curt Hill
CSE 331 Subtyping slides created by Marty Stepp based on materials by M. Ernst, S. Reges, D. Notkin, R. Mercer, Wikipedia
Factory Method, Abstract Factory, and More
Object Oriented Practices
Software Design Principles
Week 6 Object-Oriented Programming (2): Polymorphism
11/29/2018 © 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks.
Test Driven Development
Subtype Polymorphism, Subtyping vs
15 letters that will change your code
CMPE 135 Object-Oriented Analysis and Design March 21 Class Meeting
The SOLID Principles.
A (partial) blueprint for dealing with change
Principles of Object-Oriented Design
European conference.
Object Oriented Design & Analysis
Careers week ICT/Computing.
Chapter 10 – Component-Level Design
Presentation transcript:

Software Development An overview of careers in Business Application Development http://goo.gl/3go6re Sources: Dice.com, money.CNN.com, InfoWorld.com, money.USNews.com, GlassDoor.com, Indeed.com, OODesign.com, LosTechies.com, myself

The Job Market Or… “How to win at life”

Jobs… jobs EVERYWHERE! 120% growth over the last 4 years Estimated 30% growth through 2020 Jobs in every city Demand for developers far exceeds supply

Who likes money? Average salary of $92,000+ Salary starts lower, but scales quickly with experience. Some of the highest disposable income is in Texas!

The most fun you can have at a desk (legally). Flexible hours Casual dress code Fun environments Beer and ping pong!

What is Software Development? No, really…

Consulting vs Product vs IT

git merge reality Coding is only half the battle. You must understand the needs of many different clients. Development methodologies are part of the job.

Do you like Waze or Google Maps? Agile (http://agilemanifesto.org/) Waterfall XP SCRUM KANBAN

It’s all fun and games until someone uses REGEX. Complexity comes from modeling the real world in code in a manageable way. Complex algorithms are rarely needed. Business requirements are often mundane.

Let’s just rewrite it… Making WORKING code is easy Making GOOD code is hard Aim for Readability and Maintainability Performance is rarely a concern

Principals of Software Development An overview of the tools we use in Business Application Development http://goo.gl/3go6re

TDD Unit testing aids in bug finding and refactoring. Writing tests first guarantees that code is tested and follows good design. This process normally follows the Red->Green->Refactor workflow.

It’s dangerous to go alone! Take this. DRY SOLID Principals Design Patterns YAGNI Standards/Conventions Automated Testing/TDD Pair Programming

Single Responsibility Principal Each class should do ONE thing and only ONE thing. Classes should be as small as possible. Then make them smaller.

SRP Example class Book class Book class Printer { { {     string getTitle()…       string getAuthor()…     void printCurrentPage()… } class Book {      string getTitle()...       string getAuthor()...     string getCurrentPage() {         return currentPage;     } } class Printer {      void PrintPage(string page) {         Console.Print(page);     } }

Open-Closed Principal Classes should be open for extension, but closed for modification. If you add functionality, you should be able to add code, not change existing code.

OCP Example class Sql { public Sql(string table)… public void Create()… public void Update()… interface ISql { public Sql(string table)… public void Run()… class SqlCreate : Sql class SqlDelete : Sql

Liskov Substitution Principal Derived types and base types should be compatible. Derived classes should EXTEND base classes, not change them.

LSP Example class Square extends Rectangle { public void setWidth(int width) m_width = width; m_height = width; } public void setHeight(int height) m_width = height; m_height = height; class Rectangle { public int getWidth()… public void setWidth(int width)… public int getHeight()… public void setHeight(int height)… public int getArea()… }

LSP Example continued… public void SetRectangle(Rectangle shape, int width, int height) { shape.setWidth(width); shape.setHeight(height); } // What happens if we pass this function a Square object?

Interface Segregation Principal Interfaces should not be “fat”. If you implement an interface, it should mean that you need the whole thing.

ISP Example interface IWorkable { public void Work(); } interface IWorker { public void Work(); public void Eat(); } class Worker : IWorker class Robot : IWorker interface IWorkable { public void Work(); } interface IFeedable() public void Eat(); class Robot : IWorkable

Dependency Inversion Principal Higher level classes should depend on lower level classes. Classes should depend on abstractions, not concretions.

DIP Example interface IPrinter { void PrintPage(); } class ConsolePrinter : IPrinter {      void PrintPage(string page) {         Console.Print(page);     } } class TreeBurner: IPrinter         HPPrinter.Print(page); class BookPrinter {      void PrintBook(Book book, IPrinter printer) {         var page = book. getCurrentPage() while(page != null) printer.PrintPage(page); page = book. getCurrentPage() }     }

Design Patterns http://www.dofactory.com/net/design-patterns Patterns provide solutions for common situations that follow best practices. Patterns are easily recognizable by other developers.

Josh Rizzo Senior Consultant Improving Enterprises Josh.Rizzo@ImprovingEnterprises.com