An introduction to how broad software development is, what are the kinds of software development and things to consider when you start studying it.
These slides were used for a lightning talk at Women Who Code Tokyo event themed around "How Do You Start a Career in Tech?" - Sep 18, 2018.
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?
3. ● What's a software or app? Can I run software anywhere?
● What are operating systems or platforms?
● What can I do with software development? What kind of developer
do I want to be?
● What are programming languages vs frameworks?
● What to consider when choosing a programming language or
framework?
First things first
5. Basic concepts
● Computer: any electronic device that has a
processor (laptops, servers, smartphones,
smartwatches, smart tvs, 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.
6. Basic concepts
In other words: software or apps are a bunch of text files with instructions
that a computer can understand and execute.
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.
8. What can I do with software
development?
What kind of developer do I
want to be?
9. App / Game Development
● Web Apps / Games (web pages, software you access from a browser)
○ Divided in Back-end (Server side) and Front-end (Client side)
○ Examples: Amazon, Gmail, Google Docs, web games
● Mobile Apps / Games (software you run on a phone or tablet)
○ Android, iOS
○ Examples: Uber, Whatsapp, Instagram, mobile games
● PC Apps / Games (software you run on a personal computer)
○ Windows / Linux / MacOS
○ Examples: Microsoft Office, Skype, Photoshop, PC games
What do I want to do?
10. App / Game Development
● Game Console Apps / Games (software you run on a game console)
○ XBox, PlayStation, Nintendo Wii, etc…
○ Examples: Netflix for XBox, any console game
● Other devices
○ ATMs, SmartTVs, Smart Watches, micro-computers…
○ Examples: Netflix for SmartTVs, Apple Watch apps, IoT, etc...
● Multi-platform
○ Code once, use it for multiple devices / operating systems
○ Examples: Cordova, Ionic, Electron, Unity3D
What do I want to do?
11. Other types of programming
● Infrastructure / DevOps
○ Windows / Linux Servers
○ Server configuration, performance monitor, continuous integration...
○ Tools: AWS, Jenkins, Sentry, NewRelic, Docker, Kubernetes, etc...
● Data Analysis
○ Analyze big amounts of data and turn into meaningful information
○ Tools: 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...
What do I want to do?
12. App Development
● Web Apps (web pages, software you access from a browser)
○ Divided in Back-end (Server side) and Front-end (Client side)
○ Examples: Amazon, Gmail, Google Docs
● Mobile Apps / Games (software you run on a phone or tablet)
○ Android, iOS
○ Examples: Uber, Whatsapp, Instagram, mobile games
● PC Apps / Games (software you run on a personal computer)
○ Windows / Linux / MacOS
○ Examples: Microsoft Office, Skype, Photoshop, PC games
My "choice"
14. Programming languages vs Frameworks/Libraries
● Programming languages: Java, Ruby, Python, Javascript...
● Frameworks/Libraries: Spring, Rails, Django, ReactJS, NodeJS
● What is a library?
● 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"
○ In a more practical definition: usually a big language extension, that
provides standards and features that the programming language doesn't
have by itself (a.k.a a big and opinionated library)
15. Language Frameworks
Go Echo, Chi, Gin
C / C++ Wt, CppCMS...
C# ASP.NET
Perl Mojolicious, Catalyst...
Scala Play
Elixir Phoenix
Programming languages vs Frameworks
Language Frameworks
JavaScript jQuery, React, Angular, NodeJS...
Java JSF, Spring, Android SDK...
Swift FlourishUI, Perfect, ReactKit
Ruby Rails, Sinatra...
Python Django, Flask...
PHP Laravel, CodeIgniter, Zend...
16. ● Templates, markup, key-value formats: HTML, XML, JSON, YAML
● Styling: CSS (Frameworks: Bootstrap, Materialize, Bulma…)
Other languages and file formats
17. What to consider when choosing
a programming language or
framework?
18. 1. 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)?
1. What's the learning curve like and how much effort/time do I want to spend learning it?
1. 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?
1. 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?
Choosing what to learn/use
20. About the profession / industry / community
● After the first programming language and tools, it gets easier.
● Don't let technical jargon scare you.
● Be aware of opinions being presented as rules or "the right way" to
do things.
● Software development is insanely broad, don't worry about having
to know everything. Keep on learning.
21. Last but not least
● Everybody has to consult Google/StackOverflow ALL THE TIME. You
are NOT the only one.
● If you hear something like "A true software developer...", just ignore
whatever comes next.
● There are different types of developers and software development.
And every type deserves respect.
● Let's respect our differences and support each other :)
Frameworks are optional, but very commonly used
Those are just a few examples, there are many other languages and frameworks
- After you learn your first programming language and how to use its tools, you'll need way less time and effort to learn other languages and tools, as there are a lot of similarities. Base concepts and sometimes syntax are the same, a lot of tools are multi-platform or support multiple languages
- There are a lot of technical jargon for concepts you probably already know. Don't let them scare you. If you think you know something similar but with a different name, it's probably because they're the same thing, in different contexts.
Examples: pointer == reference, static attributes == class attributes, integration tests == end-2-end tests, dependency injection == passing all you need as parameters to a class/function, interpreted language == scripting language, NoSQL DB == Non-relational DB
- Some people will mention "rules" you should follow or "the right way" to do things. Take it with a grain of salt. Many things are subjective and based on personal opinion or empirical knowledge.
Example: test philosophy, design patterns, code readability, what language/framework is better
- There are no obvious or dumb questions. Don't believe if you hear "everyone knows this". Software development is insanely broad, it's impossible for everyone to know everything.