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 :)
#16: Frameworks are optional, but very commonly used
Those are just a few examples, there are many other languages and frameworks
#21: - 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.