Software Engineering

10 minute read

Concepts

Concept References
Front-end Development
 
The process of creating HTML, CSS and JavaScript to work on the client side for the user to interact with it. It can result in a Website or a Web Application.
  • Front-end Developer Handbook
  • Back-end Development
     
    The process of creating the server side or APIs to serve a Website or Web Application. It can be composed of a web server, an application, and a database. The back-end is the code responsible for communicating with databases and moving data to and from the client-side.
  • A Beginner’s Guide to Back-End Development
  • Full Stack The ability to work on front-end and back-end technologies.
    Software Framework It is a basic structure that provides some definitions and resources serving as a foundation for building faster applications using a certain programming language. Normally frameworks implement for example easy ways to use certain patterns such as MVC (Model-View-Controller), MVP (Model-View-Presenter), MVVM (Model-View-ViewModel)
    UI Libraries Library of visual components to make it faster to create visual interfaces, such as Bootstrap, Foundation, Bulma, Tailwind, Material UI, UI Kit, Materialize, Element. Normally this Libraries have variations for easily adapt to each framework.
    Development Platform Platform to which the application will be developed to run on: Web, Android, iOS, Windows, Linux, IoT Devices
    Platform Book Platform Ecosystems (by Amrit Tiwana) defines a platform as the extensible codebase of a software-based system that provides core functionality shared by apps that interoperate with it, and the interfaces through which they interoperate.

    Common Stacks

    Since 1998, when Michael Kunze created the LAMP stack, the concept of technology stack (also called simply “Tech Stack”) evolved a lot and cannot be represented anymore in complex products only by acronyms.

    The best reference today to look into stacks been used by companies and professionals is Stackshare. for example have a look into my Tech Stacks.

    But it is interesting to know which stacks acronyms were created until today and what they mean:

    Stack Components
    LAMP (1998)
     
     
     
     
    Linux, Apache, MySQL, PHP
  • Linux (operating system)
  • Apache (webserver)
  • MySQL (relational database management)
  • PHP (programming language for front-end and back-end)
  • LYME (2005)
     
     
     
     
    Linux, Yaws, Mnesia, Erlang
  • Linux (operating system)
  • Yaws (webserver)
  • Mnesia (database)
  • Erlang (functional programming language)
  • LYCE
     
     
     
     
    Linux, Yaws, Mnesia, Erlang
  • Linux (operating system)
  • Yaws (webserver)
  • CouchDB (database)
  • Erlang (functional programming language)
  • MEAN (2013)
     
     
     
     
    MongoDB, ExpressJS, AngularJS, NodeJS
  • MongoDB (document database)
  • Express.js (a back-end web application framework)
  • Angular.js (a front-end web application framework)
  • Node.js (a JavaScript runtime environment)
  • MEEN
     
     
     
     
    MongoDB, ExpressJS, EmberJS, NodeJS
  • MongoDB (document database)
  • Express.js (a back-end web application framework)
  • Ember.js (a front-end web application framework)
  • Node.js (a JavaScript runtime environment)
  • MERN
     
     
     
     
    MongoDB, ExpressJS, React, NodeJS
  • MongoDB (document database)
  • Express.js (a back-end web application framework)
  • React (a front-end web application framework)
  • Node.js (a JavaScript runtime environment)
  • JAM (2015)
     
     
     
    Also known as JAMstack: Javascript, API, Markup
  • JavaScript (as the programming language)
  • API (as a way to request data from different sources)
  • Markup (as a formatting language)
  • Software Development

    Popularity Indexes
    PYPL PopularitY of Programming Language
    TIOBE Index
    Stack Overflow 2021 Developer Survey

    Making Choices

    Avoid turning this process of choosing into a neverending journey. It is important to choose wisely, but taking too long will delay you from the beginning and start pushing things to production. Keep in mind that lots of products change their stack along the way as they learn what are exactly the product needs in terms of architecture and performance. Also, it is important to keep in mind how hard it is to hire people for each of the existing programming languages and frameworks.

    Keep in mind when making a choice:

    • How hard it is to hire someone with the technical knowledge?
    • How much it is to hire for this technical knowledge?
    • How much the technology is related to a company rather than a community? When a company is responsible for a programming language or framework they might take decisions that impact your product

    Cases that we might not forget

    • Remember Angular 2.0? - a new version launched by Google was completely different from the previous one. And yes I had products developed with Angular 1.
    • Remember Flex (by Adobe)? - it depended on a browsers having the runtime and once Steve Jobs decided to remove the support from Apples browsers it started to collapse. And yes I had products developed with Flex.
    References that may help
    Choosing a Programming Language
  • 14 Popular Programming Languages and Their Uses Explained
  • Top Programming Languages and Their Uses
  • Choosing a Framework
  • Five tips for choosing a UI development framework
  • Todo MVC - Examples of Todo Apps made with almost every available framework
  • Web Front-end

    All the following programming languages in the end produces and manipulate HTML and CSS.

    Programming Languages Frameworks
    Javascript
     
    React (by Facebook), Angular.js (by Google), Vue.js, Backbone.js, Ember, Knockout
  • You Don’t Know JS Yet
  • PHP Lavarel, Symfony, CodeIgniter, Zend, CakePHP
     
    Ruby Ruby on Rails
    Python Django

    Mobile Front-end

    Important to note that we have Native and Non-Native Programming Languages. Native programming languages usually have easier access to the mobile operating system libraries, but they only work in a specific operating system (iOS or Android).

    Programming Languages System  
    Swift iOS Apple’s iOS Native programming language
    Objective-C iOS Apple’s old iOS Native programming language
    Kotlin Android Android’s most recommended native programming language
    Java Android Android’s common programming language
    Javascript Any NativeScript (Angular and Vue), React Native (react-only), Ionic Framework (React, Angular, and Vue)
    Dart Any Flutter - created by Google
    References
    Kotlin vs Java Kotlin vs. Java: Which Is Best for Developing Android Apps?

    Back-end

    Programming Languages  
    Javascript
     
     
    The runtime Node.js enabled the creation of back-end frameworks like: Express, Hapi (by Wallmart), Sails.js. But if you are building APIs only I would suggest looking into Fastify, Fastly and Restify.
    Also check Node Framework
    Alternatives: Bun
    Kotlin
     
    Spring
  • Kotlin for server side
  • Python Flask
    Java Spring
    PHP Lavarel, Symfony, CodeIgniter, Zend, CakePHP
    Rust Which Rust web framework to choose in 2022 (with code examples)
    Go Created by Google
    C/C++  
    C#  

    Desktop

    Programming Languages Notes / Best used in…
    Javascript Electron

    Scripting

    Programming Languages Notes / Best used in…
    Shell Script  
    Javascript Node.js
    PHP  

    Data Science

    Programming Languages Notes / Best used in…
    Python  
    R  

    Architecture and Design

    Software Architecture Guide (Martin Fowler’s blog) is a great starting point. Most of the topics here makes reference to this Guide.

    Topics References
    Design Patterns
     
     
     
    A design pattern is the re-usable form of a solution to a design problem. (Wikipedia)
  • Patterns in Enterprise Software (Martin Fowler’s Blog)
  • Catalog of Patterns of Enterprise Application Architecture (Martin Fowler’s Blog)
  • Don’t Reinvent The Wheel, Unless You Plan on Learning More About Wheels (by Coding Horror)
  • Microservices Microservices Guide (Martin Fowler’s Blog)
    Serverless Serverless Architectures (Martin Fowler’s Blog)
    Micro Frontends Micro Frontends (Martin Fowler’s Blog)

    Common Techniques

    Technique References
    Feature Toggles
     
     
    Also known as Feature Flags, Toggles or Flags that turn on/off a feature. Normally used when a feature is still under development and cannot be released just yet. That enables the teams to keep pushing and sharing code without breaking deployments.
  • The Complete Guide to Feature Flags
  • The hub for feature flag driven development
  • Targeted Rollout Also known as Phased Deployment or Progressive Delivery is a technique to rollout a new version to a small group of users first and grow from that until the new features reach all users. This enables the team to securely evaluate the impact and behavior of the new feature within a small group of users, and address any problem encountered (from bugs to problems related to workload when scaling the usage). The targeted group can be random or selected according to some characteristics (location for example).
    Loosely coupled services Designing loosely coupled services by the author of Microservices Patterns (by Chris Richardson)

    References

    The Manager’s Path - by Camille Frontier
    A Guide for Tech Leaders Navigating Growth and Change
    Key takeaways
  • “One-on-one meetings with your manager are an essential feature of a good working relationship.”
  • “A manager’s job involves making it easy for her employees to get things done by creating fertile environments in which work can happen.”
  • “Mentoring new hires is critical.”
  • “Feedback works best when you, as a manager, pair that feedback with coaching.”
  • “It’s unrealistic to think you can or should shield your team from everything.”
  • Production-Ready Microservices - by Susan Fowler
    Building Standardized Systems Across an Engineering Organization
    Microservices Patterns - by Chris Richardson

    Refactoring - by Martin Fowler
    Improving the Design of Existing Code