Slide 1

Slide 1 text

Where Do I Start? An introduction to software development from the very beginning By @tuttiq

Slide 2

Slide 2 text

● Tutti Quintella (@tuttiq online) ● From São Paulo, Brazil ● Major in Computer Engineering ● Software Engineer since 2011 ● Main experience with web & mobile development ● Like dancing, cooking and going out/socializing (not all developers are introverts!) Who am I?

Slide 3

Slide 3 text

● What's a software or app? Can I run software anywhere? ● What are operating systems or platforms? ● What are the types of software? What can be done with software development? ● What are programming languages? What types are there? ● How is code transformed into applications? First things first

Slide 4

Slide 4 text

Refreshing basic concepts

Slide 5

Slide 5 text

Basic concepts ● Computer: any electronic device that has a processor (laptops, smartphones, smartwatches, smart tvs, servers, micro-computers…) ● Software: the programs that run in a computer ● App: software application. Software designed to perform a specific function directly for the user or, in some cases, for another application.

Slide 6

Slide 6 text

Basic concepts In other words: software or apps are a bunch of text files with instructions that a computer can understand and execute.

Slide 7

Slide 7 text

Basic concepts ● Operating system: the base software that supports a computer's basic functions, like managing hardware resources and software applications. Ex: managing information on the memory, managing peripherals, installing and running apps. ● Platform: a major piece of software. Ex: operating systems.

Slide 8

Slide 8 text

What are the types of software? What can be done with software development?

Slide 9

Slide 9 text

Web Apps / Games (software you access from a browser) ● Web pages built with HTML, CSS and Javascript ● Examples: Amazon, Gmail, Google Docs, web games Types of software: App / Games

Slide 10

Slide 10 text

Mobile Apps / Games (software you run on a phone or tablet) ● Android, iOS ● Examples: Mercari, Line, Instagram, mobile games Types of software: App / Games

Slide 11

Slide 11 text

PC Apps / Games (software you run on a personal computer) ● Windows / Linux / MacOS ● Examples: Microsoft Office, Skype, Photoshop, PC games Types of software: App / Games

Slide 12

Slide 12 text

Game Console Apps / Games (software you run on a game console) ● XBox, PlayStation, Nintendo Wii, etc… ● Examples: Netflix for XBox, any console game Types of software: App / Games

Slide 13

Slide 13 text

Other devices ● ATMs, SmartTVs, Smart Watches, micro-computers… ● Examples: ATM Bank system, Apple Watch apps, IoT, etc... Types of software: App / Games

Slide 14

Slide 14 text

● Infrastructure (SRE) / DevOps ○ Windows / Linux Servers ○ Server configuration, performance monitor, continuous integration ● Data Analysis ○ Analyze big amounts of data and turn into meaningful information ○ SQL, R, Google BigQuery, TrasureData, Tableau ● Data Science / AI / Machine Learning ○ Algorithms and systems built to learn and adapt over data ○ Image recognition, NPL (Natural Language Processing), etc... Other types of engineering

Slide 15

Slide 15 text

What are programming languages? What types are there?

Slide 16

Slide 16 text

Programming languages ● Languages that computers can understand What time is it? ? 01010101011001 13:30

Slide 17

Slide 17 text

Types of Programming languages 01001011 00010100 01101001 10001010 10110010 10000101 01010101 01010010 Low-level (Binary) movb $4, %al xor %ebx, %ebx inc %ebx movl $hello, %ecx let date = new Date(); let time = date.getHours(); return `The time is: ${time}` High-level (E.g. Javascript) Closer to human language Closer to machine language

Slide 18

Slide 18 text

How is code transformed into applications?

Slide 19

Slide 19 text

Human languages Raise your hand. Read + interpret Execute Language: English Person that can understand English

Slide 20

Slide 20 text

Programming languages console.log ("Hello World") Read + interpret Execute Language: Javascript Interpreter that can understand Javascript

Slide 21

Slide 21 text

Compiler / Interpreter 01001011 00010100 01101001 10001010 10110010 10000101 01010101 01010010 Low-level (Binary) movb $4, %al xor %ebx, %ebx inc %ebx movl $hello, %ecx let date = new Date(); let time = date.getHours(); return `The time is: ${time}` High-level (E.g. Javascript) High-level programming language Machine language COMPILATION / INTERPRETATION

Slide 22

Slide 22 text

Wanna try an interpreter right now? ● Open Chrome browser in any tab + J + J Macbook Windows

Slide 23

Slide 23 text

Type some code!

Slide 24

Slide 24 text

So... text files! (that machines can understand) Software or apps are a bunch of text files with instructions that will be compiled or interpreted so a computer can understand and execute.

Slide 25

Slide 25 text

Programming languages Libraries Frameworks

Slide 26

Slide 26 text

Programming languages ● Just like human languages, there are many programming languages (Java, Ruby, Python, Javascript…) ● Just like human languages, programming languages also have their own syntax, vocabulary and semantics. Raise your hand . verb pronoun noun punctuation var date = new Date(); punctuation variable reserved word method or function operator

Slide 27

Slide 27 text

Libraries ● Libraries are extensions of a programming language to add functionalities to it (like "add-on" packages or expansions you can install on a game, for example) + jQuery is a Javascript library that adds several utility functions to Javascript.

Slide 28

Slide 28 text

Frameworks What is a framework? ● "A supporting structure around which something can be built" ● "A system of rules, ideas, or beliefs that is used to plan or decide something" ● Usually a big language extension, that provides standards and features that the programming language doesn't have by itself ● A big and opinionated library + +

Slide 29

Slide 29 text

Language Frameworks/Libraries Go Echo, Chi, Gin C / C++ Wt, CppCMS... C# ASP.NET Perl Mojolicious, Catalyst... Scala Play Elixir Phoenix Languages and their popular extensions Language Frameworks/Libraries JavaScript jQuery, React, Angular, NodeJS... Java JSF, Spring, Android SDK... Swift FlourishUI, Perfect, ReactKit Ruby Rails, Sinatra... Python Django, Flask... PHP Laravel, CodeIgniter, Zend...

Slide 30

Slide 30 text

● Templates, markup, key-value formats: HTML, XML, JSON, YAML ● Styling: CSS (Frameworks: Bootstrap, Material UI, Bulma…) Other languages and file formats

Slide 31

Slide 31 text

What to consider when choosing a programming language or framework?

Slide 32

Slide 32 text

Different types of application require different programming languages, frameworks and toolset. For example: ● Android app: Java or Kotlin + Android SDK ● iOS app: Objective C or Swift ● Web app: A million possibilities between back-end and front-end ● AI/Machine Learning: Most commonly Python + ML libraries/tools Don't remember all the possibilities? Go back to slide #8 Already know what you want to do? Google "tech stack for [X] development" to read about some common sets of programming language + frameworks + tools to get started 1. What do you want to do?

Slide 33

Slide 33 text

A. Age of a language/framework a. Is it already obsolete due to new languages? b. Does it solve modern problems? c. How mature is it (how stable are updates and how complete is its documentation)? B. What's the learning curve like and how much effort/time do I want to spend learning it? C. Is it appropriate and useful for what I want to develop? a. Is it commonly used for similar purposes? b. Does it have libraries/helpers/tools that will help with it? D. Is it valuable in the market? a. Are many companies hiring to work with it? Are the jobs well paid? b. Is it a market trend? What are the reasons for the trend? c. Will it be valuable in the short/mid-term future? 2. Other things you can consider

Slide 34

Slide 34 text

What else can you expect to learn if you want to become a Software Engineer? (This is an unnecessary look into more advanced stuff, skip this session if you don't want to feel confused/scared. Go ahead if you're feeling adventurous.)

Slide 35

Slide 35 text

How do you make a bunch of text files work together?

Slide 36

Slide 36 text

Structure of software apps Project structure: how you organize your files (usually following frameworks, design patterns, modules, etc) (don't worry about understanding any of this now, just know that this exists)

Slide 37

Slide 37 text

Structure of software apps Data / Database structure: how do you organize the data your system needs (don't worry about understanding any of this now, just know that this exists)

Slide 38

Slide 38 text

Structure of software apps Architecture: how do you organize your whole system (what pieces do you need, how do you break your system in major parts, including infrastructure, external modules, etc) (you're NOT supposed to understand any of this, just know that system architecture is a thing)

Slide 39

Slide 39 text

Structure of software apps Infrastructure: how do you make your system available for your users (servers, data centers, cloud platforms, etc)

Slide 40

Slide 40 text

Structure of software apps DevOps: how do you automate everything cause you're lazy (and humans executing repetitive tasks are more error-prone than scripts)

Slide 41

Slide 41 text

How do you make a bunch of engineers writing a bunch of text files work together?

Slide 42

Slide 42 text

Scaling software development ● SDLC: Software Development Life-Cycle ● Industry standards: guidelines and best practices well known among software developers ● Project management methodologies: agile, waterfall ● Collaboration techniques: pair programming, code review, documentation, etc

Slide 43

Slide 43 text

If you're hungry for more ● Web Development 101 ○ Front-end, back-end, servers, clients, APIs, etc ● Scaling Software Development ○ Code organization, best practices, DevOps, team structures ● Refactoring Fat Components ○ Breaking down classes and modules the right way

Slide 44

Slide 44 text

Questions? Thank you!