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?
Emerging Technologies in Software Engineering and Why You Should Care
By Johnny Estilles
Emerging Technologies in Software Engineering and Why You Should Care
Emerging technologies in Web/Mobile Development, Continuous Integration and Continuous Development, Infrastructure as Code and Continuous Configuration Automation
- 364