My short talk about trends and industry practices in Software Engineering in one of the classes in Master of Science in Information Technology at Ateneo de Davao University
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
Software Engineering - Trends & Industry Practices
1. Software Engineering
INDUSTRY TRENDS AND PRACTICES
Alfred Jett Grandeza
Founder, Leangineer @ Lean Consulting
leanconsulting.ph | ajgrandeza.com | github.com/grandezaaj
2. About Me
•Graduate of Ateneo de Davao, Computer Science 2012
•Over 5 years of software engineering experience, .NET and AngularJS
•Former CTO of T.H.E. Patrons
•Co-founder of Lean Consulting/Lean Academy
•Microsoft Technology Associate (2)
•Member of Davao .NET Community (Davao .NET Users Group, Philippine .NET Users Group)
•I do consulting and freelance work from clients overseas
•Advocate of .NET Technologies
•I LOVE TO LEARN!
3. Lean Consulting
• Davao based start-up
• Founded: February 2016
• Lean Academy SOON!
• More info:
• leanconsulting.ph
• fb.com/leanconsutling.ph
4. Disclaimer
• Contents are half opinionated, half backed by studies
• I’ll be talking mostly from my experience – as a Developer and a Startup founder
• Mostly in the Object Oriented point of view
6. Image from Coding Dojo
http://www.codingdojo.com/blog/9-most-in-
demand-programming-languages-of-2016/
7. It’s a good time to be a C# Developer
• Microsoft is moving towards open source
• .NET Core
• https://github.com/dotnet/core
• Visual Studio Code
• Runs on Linux, Mac and Windows
• Xamarin for Cross platform mobile development
• Using C#
• iOS, Android and Windows Phone and Mac OS
• Microsoft has been a supporting other open source frameworks such as AngularJS
• Azure supports different distribution of Linux and other open source frameworks (also PHP)
9. The rise of JavaScript
• Your website sucks without JavaScript
• JS Frameworks make your website powerful
• JavaScript conquered the Web
• Now its taking over other areas
• Mobile
• PhoneGap, Ionic, Sencha Touch, jQuery Mobile and many more
• Server Side Applications
• Node JS
10. Single Page Applications
• SPAs are web apps that load a single HTML page and dynamically that page as the user interacts
• Much of the work happen in the client side
• Usually written in JavaScript
12. TypeScript
•Open source programming language
• Developed and maintained by Microsoft
• A superset of JavaScript
• Transpiles to plain JavaScript
• Strongly typed
• Class based / OOP approach
• Learn more:
• http://www.typescriptlang.org/Playground
Image from: https://weblogs.asp.net/dwahlin/getting-started-with-typescript-classes-static-types-and-interfaces
14. Agile Software Development
• a set of principles for software development
• collaborative effort
• Adaptive
• Iterative
15. Agile Methods & Practices
• Extreme Programming
• Lean Software Development
• Kanban
• Scrum
• Test driven development
• Domain Driven Design
16. Domain Driven Design
• DDD is an approach to software development
• Focuses on the complexity of the business domain
• Distinguishes core domain (unique to the business) from supporting sub domains
17. Why is DDD important?
• Helps you (Developer) understand more about the business
• Helps all of the stakeholders the needs of the business
• All stakeholders will be communicating in one language
18. Test Driven Development
• is a software development process
• relies on the repetition of a very short cycle
19. Why use TDD?
• Better understanding of your code and requirements
• Speeds up development
• By limiting bugs in QA phase
• Cleaner code
• Saves business’ money
20. S.O.L.I.D. Principles
• Basic principles which help you create good software architecture
• Acronym for
• Single Responsibility Principle
• Open Closed Principle
• Liskov Substitution Principle
• Interface Segregation Principle
• Dependency Inversion Principle
22. Open Closed Principle
• Open for extension
• extend existing code
• Close for modification
• Once a function or class or an entity has been developed and tested, it should only be modified to fix
bugs
23. Liskov Substitution Principle
• objects in a program should be replaceable with instances of their subtypes without altering the
correctness of that program
• A parent class object should be able to refer child objects seamlessly during runtime
polymorphism
24. Interface Segregation Principle
• many client-specific interfaces are better than one general-purpose interface
• client should not be forced to use a interface if it does not need it.
26. Continuous Integration
• is a practice of merging all developer working copies
• Best practices
• Automated tests
• Automated builds
• Self-testing builds
• Test in a clone of production environment
• Automated Deployment
27. Other Important topics
• Version Control (Git, SVN)
• Design Patterns
• Defensive Programming
• Information Security
• Debugging
• Understanding someone else’s code
• Rest Web Services