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

More Decks by Tutti Quintella

Other Decks in Programming


  1. • 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?
  2. • 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
  3. 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.
  4. Basic concepts In other words: software or apps are a

    bunch of text files with instructions that a computer can understand and execute.
  5. 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.
  6. 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
  7. Mobile Apps / Games (software you run on a phone

    or tablet) • Android, iOS • Examples: Mercari, Line, Instagram, mobile games Types of software: App / Games
  8. 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
  9. 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
  10. Other devices • ATMs, SmartTVs, Smart Watches, micro-computers… • Examples:

    ATM Bank system, Apple Watch apps, IoT, etc... Types of software: App / Games
  11. • 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
  12. 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
  13. Human languages Raise your hand. Read + interpret Execute Language:

    English Person that can understand English
  14. Programming languages console.log ("Hello World") Read + interpret Execute Language:

    Javascript Interpreter that can understand Javascript
  15. 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
  16. 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.
  17. 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
  18. 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.
  19. 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 + +
  20. 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...
  21. • Templates, markup, key-value formats: HTML, XML, JSON, YAML •

    Styling: CSS (Frameworks: Bootstrap, Material UI, Bulma…) Other languages and file formats
  22. 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?
  23. 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
  24. 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.)
  25. 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)
  26. 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)
  27. 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)
  28. Structure of software apps Infrastructure: how do you make your

    system available for your users (servers, data centers, cloud platforms, etc)
  29. 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)
  30. How do you make a bunch of engineers writing a

    bunch of text files work together?
  31. 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
  32. 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