Emerging Technologies

in Software in Engineering

... and why you should care

April 11, 2019 @ FEU Makati

Johnny Estilles

Regional Director of Engineering
Freelancer.com

johnny@freelancer.com

@JohnnyEstilles

Emerging Technology Areas

  • Web Development
  • Mobile Development
  • Continuous Integration/Continuous Development (CI/CD)
  • Infrastructure as Code/Continuous Configuration Automation (IaC/CCA)

Web Development

Languages, Services & Tools

Web Development

Languages, Services & Tools

Web Development

Languages, Services & Tools

Web Development

Languages, Services & Tools

COMMON LANGUAGES

Web Development

Languages, Services & Tools

EMERGING LANGUAGES

Web Development

Languages, Services & Tools

  • Classes
  • Default Parameters
  • Rest and Spread Parameters
  • Template Literals
  • Multi-line Strings
  • Destructuring Assignment
  • Enhanced Object Literals
  • Arrow Functions
  • Promises

JAVASCRIPT ON STEROIDS

function greeter(person) {
    return `Hello ${person}`;
}

let user = "Jane User";

document.body.innerHTML = greeter(user);

Web Development

Languages, Services & Tools

Web Development

Languages, Services & Tools

  • Starts and ends with JavaScript
  • Strong tools for large apps
  • State of the art JavaScript

JAVASCRIPT THAT SCALES

interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = { firstName: "Jane", lastName: "User" };

document.body.innerHTML = greeter(user);

Web Development

Languages, Services & Tools

Web Development

Languages, Services & Tools

  • Concurrency
  • Simplicity and Consistency
  • Object Oriented
  • Compiled
  • Pointers

SIMPLE, RELIABLE & EFFICIENT

package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

Web Development

Languages, Services & Tools

Web Development

Languages, Services & Tools

ES2015 vs TYPESCRIPT vs GO

Mobile Development

Non-Native Frameworks

Mobile Development

Non-Native Frameworks

COMMON LANGUAGES/FRAMEWORKS

Mobile Development

Non-Native Frameworks

EMERGING LANGUAGES/FRAMEWORKS

Mobile Development

Non-Native Frameworks

import React, {Component} from 'react';
import {Text, View} from 'react-native';

class HelloReactNative extends Component {
  render() {
    return (
      <View>
        <Text>
          If you like React, you'll also like React Native.
        </Text>
        <Text>
          Instead of 'div' and 'span', you'll use native components
          like 'View' and 'Text'.
        </Text>
      </View>
    );
  }
}

Mobile Development

Non-Native Frameworks

import {Component} from 'angular2/core';

@Component({
  selector: 'main',
  template: `
    <StackLayout>
      <Label align="center" text="Hello World!"></Label>
    </StackLayout>
  `,
  styles: [`
    label{
      font-size: 45;
      horizontal-align: center;
      padding-top:70;
    }
  `]
})

export class MainPage {
  constructor() {
  }
}

Mobile Development

Non-Native Frameworks

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Welcome to Flutter',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Welcome to Flutter'),
        ),
        body: Center(
          child: Text('Hello World'),
        ),
      ),
    );
  }
}

CI/CD

Continuous Integration/Continuous Development

CI/CD

Continuous Integration/Continuous Development

CONTINUOUS INTEGRATION

 ... the practice of integrating code into a shared repository and building/testing each change automatically, as early as possible - usually several times a day

CI/CD

Continuous Integration/Continuous Development

CONTINUOUS INTEGRATION

  • Detects errors as quickly as possible:
    fix problems while fresh in developers mind
  • Reduces integration problems:
    smaller problems are easier to digest
  • Avoid compounding problems:
    allows teams to develop faster, with more confidence

CI/CD

Continuous Integration/Continuous Development

CONTINUOUS DEPLOYMENT

 ... provides the ability to release software to production at any time, often by automatically pushing changes to a staging system and eventually to production.

CI/CD

Continuous Integration/Continuous Development

CONTINUOUS DEPLOYMENT

  • Ensures every change is releasable:
    test everything, including deployment, before calling it done
  • Lowers risk of each release:
    makes releases “boring”
  • Delivers value more frequently:
    reliable deployments mean more releases
  • Tight customer feedback loops:
    fast and frequent customer feedback on changes

CI/CD

Continuous Integration/Continuous Development

CI/CD PIPELINE

CI/CD

Continuous Integration/Continuous Development

JENKINS

CI/CD

Continuous Integration/Continuous Development

TRAVIS CI

CI/CD

Continuous Integration/Continuous Development

CIRCLE CI

CI/CD

Continuous Integration/Continuous Development

CODESHIP

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

INFRASTRUCTURE AS CODE

 ... the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

CONTINUOUS CONFIGURATION AUTOMATION

 ... the methodology or process of automating the deployment and configuration of settings and software for both physical and virtual data center equipment

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

EXISTING IAC/CCA TOOLS

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

resource "aws_instance" "example" {
  ami = "ami-2d39803a"
  instance_type = "t2.micro"
  
  user_data = <<-EOF
              #!/bin/bash
              echo "Hello, World" > index.html
              nohup busybox httpd -f -p 8080 &
              EOF
  tags {
    Name = "terraform-example"
  }
}

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

> terraform plan
(...)
-/+ aws_instance.example
    ami:                      "ami-2d39803a" => "ami-2d39803a"
    instance_state:           "running" => "<computed>"
    instance_type:            "t2.micro" => "t2.micro"
    security_groups.#:        "0" => "<computed>"
    vpc_security_group_ids.#: "1" => "<computed>"

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

# helloworld/manifests/init.pp 
class helloworld {
  notify { 'hello, world!': }
}


# helloworld/manifests/motd.pp 
class helloworld::motd {
    file { '/etc/motd':
    owner   => 'root',
    group   => 'root',
    mode    => '0644',
    content => "hello, world!\n",
  }
}

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

# /etc/puppetlabs/code/environments/production/manifests/site.pp
node default {
  class { 'helloworld': }
  class { 'helloworld::motd': }
}

IaC/CCA

Infrastructure as Code/Continuous Configuration Automation

[root@agent1 ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for agent1.example.com
Info: Applying configuration version '1437172035'
Notice: hello, world!
Notice: /Stage[main]/Main/Node[default]/Notify[hello, world!]
  /message: defined 'message' as 'hello, world!'
Notice: Applied catalog in 1.25 seconds

Do I really need to know all of these?

No!

But the more you know, the more hireable you will be.

Emerging Technologies

in Software in Engineering

... and why you should care

April 11, 2019 @ FEU Makati

Thank you!
Any questions?

Made with Slides.com