Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Where Do I Start? Introduction to Software Development from the very beginning

Where Do I Start? Introduction to Software Development from the very beginning

An introduction to Software Development from the very beginning.
Refreshing some basic concepts and going over concepts like:
- What kind of platforms and software are there?
- What are programming languages and how do they work?
- What are frameworks and libraries?
- What to consider when choosing a language/framework?
- How does this all work together?

Tutti Quintella

September 18, 2018
Tweet

More Decks by Tutti Quintella

Other Decks in Programming

Transcript

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

    View Slide

  2. ● 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?

    View Slide

  3. ● 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

    View Slide

  4. Refreshing basic concepts

    View Slide

  5. 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.

    View Slide

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

    View Slide

  7. 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.

    View Slide

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

    View Slide

  9. 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

    View Slide

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

    View Slide

  11. 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

    View Slide

  12. 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

    View Slide

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

    View Slide

  14. ● 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

    View Slide

  15. What are programming
    languages?
    What types are there?

    View Slide

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

    View Slide

  17. 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

    View Slide

  18. How is code transformed into
    applications?

    View Slide

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

    View Slide

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

    View Slide

  21. 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

    View Slide

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

    View Slide

  23. Type some code!

    View Slide

  24. 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.

    View Slide

  25. Programming languages
    Libraries
    Frameworks

    View Slide

  26. 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

    View Slide

  27. 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.

    View Slide

  28. 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
    +
    +

    View Slide

  29. 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...

    View Slide

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

    View Slide

  31. What to consider when choosing
    a programming language or
    framework?

    View Slide

  32. 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?

    View Slide

  33. 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

    View Slide

  34. 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.)

    View Slide

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

    View Slide

  36. 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)

    View Slide

  37. 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)

    View Slide

  38. 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)

    View Slide

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

    View Slide

  40. 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)

    View Slide

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

    View Slide

  42. 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

    View Slide

  43. 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

    View Slide

  44. Questions?
    Thank you!

    View Slide