SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
© Pedro Alves 2019
Porque escolhi Kotlin
para ensinar programação
Pedro Alves, Professor na Universidade Lusófona
© Pedro Alves 2019
Licenciatura em Engenharia Informática
Licenciatura em Informática de Gestão
Licenciatura em Engenharia Informática, Redes e Telecomunicações
>160 novos alunos por ano
© Pedro Alves 2019
Fundamentos de Programação
Algoritmos e
Estruturas de Dados
Linguagens de
Programação I
Linguagens de
Programação II
Programação
Web
Computação
Móvel
© Pedro Alves 2019
© Pedro Alves 2019
Fundamentos de Programação
Objectivos
Aprender como funciona um programa
Aprender o que é um algoritmo
Aprender linguagens de programação
Aprender conceitos básicos de programação: variáveis, funções, …
Aprender a gostar de programar! 😃
© Pedro Alves 2019
Aprender a gostar de programar??? 🥺
© Pedro Alves 2019Fonte: https://insights.stackoverflow.com/survey/2018
© Pedro Alves 2019
O que se faz por aí
Quais as linguagens mais usadas nas disciplinas
introdutórias de programação?
© Pedro Alves 2019
Linguagens mais populares 

(Reino Unido)
Linguagens usadas em disciplinas introdutórias de programação, no Reino Unido,
em 2016 (universo: 106 disciplinas)

Fonte: An Analysis of Introductory Programming Courses at UK Universities, Ellen Murphy
© Pedro Alves 2019
Linguagens mais populares 

(Austrália/Nova Zelândia)
Linguagens usadas em disciplinas introdutórias de programação, na Australásia,
em 2016 (universo: 44 disciplinas)

Fonte: Introductory Programming Courses in Australasia in 2016, R. Mason
© Pedro Alves 2019
Linguagens mais populares 

(Equador)
Linguagens usadas em disciplinas introdutórias de programação, no Equador, em 2017 (universo: 13 disciplinas)

Fonte: Current Trends of Teaching Computer Programming in Undergraduate CS Programs: A Survey from Ecuadorian Universities, G. Arcos
0
10
20
30
40
Java
Javascript
C++
PHP
C#
C
Python
VisualBasic
R
Prolog
Scala
© Pedro Alves 2019
Linguagens mais populares 

(Estados Unidos)
Linguagens usadas em disciplinas introdutórias de programação, nos Estados Unidos, em 2016
(universo: 410 universidades)

Fonte: A longitudinal analysis of the reid list of first programming languages, 2016. RM Siegfried
0
45
90
135
180
Java
Python
C++
C
Scheme
Javascript
VisualBasic
Haskell
Scala
© Pedro Alves 2019
Linguagens mais populares 

(Portugal)
Instituição Linguagem
IST Python
FCUL Python
FCT/UNL Java
ISEL Java
Univ. Minho C
FEUP Python
Univ. de Aveiro Python
Univ. Beira Interior C
© Pedro Alves 2019
Razões para escolha de linguagem
(Reino Unido)
Fonte: An Analysis of Introductory Programming Courses at UK Universities, Ellen Murphy
© Pedro Alves 2019
Relevância para a indústria
Fonte: KotlinConf 2018 - Opening Keynote
Anúncios de emprego Kotlin
© Pedro Alves 2019
Benefícios pedagógicos
Curva de aprendizagem pouco acentuada
Ferramentas de apoio
Sem surpresas
Boas práticas
© Pedro Alves 2019
Curva de aprendizagem (1)
Kotlin Java
println("Hello World!")
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
© Pedro Alves 2019
Curva de aprendizagem (2)
Kotlin Java
import java.util.Scanner;
public class Programa {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Primeiro nome?");
String primeiroNome = scanner.nextLine();
System.out.println("Apelido?");
String apelido = scanner.nextLine();
System.out.println("Olá " + primeiroNome + " " +
apelido);
}
}
println("Primeiro nome?")
val primeiroNome = readLine()
println("Apelido?")
val apelido = readLine()
println("Olá $primeiroNome $apelido")
© Pedro Alves 2019
val numero1 = 1_000_000_000_000
val numero2 = 1
if (numero1 == numero2) { // compilation error
}
Curva de aprendizagem (3)
© Pedro Alves 2019
Curva de aprendizagem (3)
val numero1 : Long = 1_000_000_000_000
val numero2 : Int = 1
if (numero1 == numero2.toLong()) {
}
No início, programa-se com
tipos explícitos
val numero1 = 1_000_000_000_000
val numero2 = 1
if (numero1 == numero2.toLong()) {
}
Depois de ganhar
experiência, programa-se
com tipos implícitos
© Pedro Alves 2019
Ferramentas de apoio
Kotlin Python
run
© Pedro Alves 2019
Ferramentas de apoio
Kotlin Python
numero = "1"
...
numero = "ola"
...
print(numero + 1) # runtime error
var numero = 1
...
numero = "ola" // compilation error
...
println(numero + 1)
© Pedro Alves 2019
Sem surpresas
Kotlin
Java
println(Numero(3) == Numero(3)) // true
System.out.println(new Numero(3) == new Numero(3)); // false
© Pedro Alves 2019
Sem surpresas
Javascript
"" == 0 // true
0 == "0" // true
"" == 0 // compilation error
0 == "0" // compilation error
Kotlin
© Pedro Alves 2019
Sem surpresas
Javascript
"" == 0 // true
0 == "0" // true
"" == 0 // compilation error
0 == "0" // compilation error
Kotlin
array[-1] = 5 // runtime error
array["ola"] = 5 // compilation error
array[-1] = 5 // OK(?!)
array["ola"] = 5 // OK(???!)
© Pedro Alves 2019
Sem surpresas
Javascript
"" == 0 // true
0 == "0" // true
"" == 0 // compilation error
0 == "0" // compilation error
Kotlin
array[-1] = 5 // runtime error
array["ola"] = 5 // compilation error
array[-1] = 5 // OK(?!)
array["ola"] = 5 // OK(???!)
Math.min() < Math.max() // false 🙄Int.MIN_VALUE < Int.MAX_VALUE // true
© Pedro Alves 2019
Sem surpresas
C / JavaKotlin
switch(numero) {
case 0:
System.out.println("É zero!");
case 1:
System.out.println("É um!");
}
// escreve:
// É zero!
// É um!
when (numero) {
0 -> println("É zero!")
1 -> println("É um!")
}
// Escreve:
// É zero!
© Pedro Alves 2019
Boas práticas
(Nullable)
JavaKotlin
String texto = scanner.nextLine();
if (texto.charAt(0) == 'A') {
System.out.println("Começa com A");
}
val texto = readLine()
if (texto[0] == 'A') { // compilation error
println("Começa com A")
}
val texto = readLine()
if (texto != null && texto[0] == 'A') {
println("Começa com A")
}
© Pedro Alves 2019
Boas práticas
(Parâmetros imutáveis)
PythonKotlin
def incrementa(numero):
numero += 1 # sem efeito
fun incrementa(numero: Int) {
numero++ // erro: numero é imutável
}
© Pedro Alves 2019
Boas práticas
(conjuntos de objectos do mesmo tipo)
PythonKotlin
coisas = [1, "ola", 3.5] # OKval coisas = intArrayOf(1, "ola", 3.5) //error
Nota: Infelizmente em Kotlin também existe o arrayOf() que
permite misturar tipos
© Pedro Alves 2019
var numero = 3
for (i in 1..numero) {
print(i)
numero++
}
// escreve 123
var numero = 1
while(numero < 4) {
var numero = 2
print(numero)
numero++
}
// escreve 222222... (ciclo infinito)
Nem tudo é bom…
Name shadowing
Ranges with var
val numero1 : Int = Int.MAX_VALUE
val numero2 : Int = numero1 + 1
println(numero2) // escreve -2147483648
Overflow
© Pedro Alves 2019
Nem tudo é bom…
Poucos livros
Poucos exemplos disponíveis
(*) também é uma vantagem: menos copy/paste!
Menos ferramentas
(repl.it, pycharm edu, …)
Compile-Run
© Pedro Alves 2019
+ = ?
Conclusão
© Pedro Alves 2019
+ =
Conclusão

Mais conteúdo relacionado

Semelhante a Porque escolhi Kotlin para ensinar programação

[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx
[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx
[LP-A01] Slide - ui Conceitos e Princípios de programação.pptxprofdourivaljunior
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
Aula 00-info-PCPE
Aula 00-info-PCPEAula 00-info-PCPE
Aula 00-info-PCPETiago Felix
 
Uma abordagem de testes instrumentados usando MockK, Koin e Robot Pattern
Uma abordagem de testes instrumentados usando MockK, Koin e Robot PatternUma abordagem de testes instrumentados usando MockK, Koin e Robot Pattern
Uma abordagem de testes instrumentados usando MockK, Koin e Robot PatternLucas Conceição
 
Projeto airsoftware emca 2010 - centro paula souza - taubaté,sp
Projeto airsoftware   emca 2010 - centro paula souza - taubaté,spProjeto airsoftware   emca 2010 - centro paula souza - taubaté,sp
Projeto airsoftware emca 2010 - centro paula souza - taubaté,spCaique Guilherme Faria Dias
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoUbirajara Cavaco
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Marcel Caraciolo
 
Projeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdfProjeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdfHELENO FAVACHO
 
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...Tchelinux
 
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfMC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfLuanaBatista74
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisCaio Ribeiro Pereira
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonOsvaldo Santana Neto
 
Testes de Software - Módulo 1
Testes de Software - Módulo 1Testes de Software - Módulo 1
Testes de Software - Módulo 1Rodrigo Paes
 
TheWebMind Tche Linux 2009
TheWebMind Tche Linux 2009TheWebMind Tche Linux 2009
TheWebMind Tche Linux 2009thewebmind
 
TheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controle
TheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controleTheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controle
TheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controleFelipe Nascimento
 
Projeto academia de código júnior
Projeto  academia de código júniorProjeto  academia de código júnior
Projeto academia de código júniorCélia Barbosa
 
Teste para dispositivos móveis apresentação pra ufam -eliane
Teste para dispositivos móveis   apresentação pra ufam -elianeTeste para dispositivos móveis   apresentação pra ufam -eliane
Teste para dispositivos móveis apresentação pra ufam -elianeEliane Collins
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadoshenriqueprossi
 
Videoulas de algoritmos e lógica de programação
Videoulas de algoritmos e lógica de programaçãoVideoulas de algoritmos e lógica de programação
Videoulas de algoritmos e lógica de programaçãoaldoirjava
 

Semelhante a Porque escolhi Kotlin para ensinar programação (20)

[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx
[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx
[LP-A01] Slide - ui Conceitos e Princípios de programação.pptx
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Aula 00-info-PCPE
Aula 00-info-PCPEAula 00-info-PCPE
Aula 00-info-PCPE
 
Uma abordagem de testes instrumentados usando MockK, Koin e Robot Pattern
Uma abordagem de testes instrumentados usando MockK, Koin e Robot PatternUma abordagem de testes instrumentados usando MockK, Koin e Robot Pattern
Uma abordagem de testes instrumentados usando MockK, Koin e Robot Pattern
 
Projeto airsoftware emca 2010 - centro paula souza - taubaté,sp
Projeto airsoftware   emca 2010 - centro paula souza - taubaté,spProjeto airsoftware   emca 2010 - centro paula souza - taubaté,sp
Projeto airsoftware emca 2010 - centro paula souza - taubaté,sp
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?Python e 10 motivos por que devo conhece-la ?
Python e 10 motivos por que devo conhece-la ?
 
Projeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdfProjeto Integrado ADS - a agricultura familiar.pdf
Projeto Integrado ADS - a agricultura familiar.pdf
 
Revista programar 20
Revista programar 20Revista programar 20
Revista programar 20
 
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
Introdução ao desenvolvimento Android com Kotlin - Ricardo Robaina - Tchelinu...
 
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdfMC-102 — Aula 01 Introdução à Programação de Computadores.pdf
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
 
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas OperacionaisSimulaRSO - Simulador de Recursos de Sistemas Operacionais
SimulaRSO - Simulador de Recursos de Sistemas Operacionais
 
Matando o Java e Mostrando o Python
Matando o Java e Mostrando o PythonMatando o Java e Mostrando o Python
Matando o Java e Mostrando o Python
 
Testes de Software - Módulo 1
Testes de Software - Módulo 1Testes de Software - Módulo 1
Testes de Software - Módulo 1
 
TheWebMind Tche Linux 2009
TheWebMind Tche Linux 2009TheWebMind Tche Linux 2009
TheWebMind Tche Linux 2009
 
TheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controle
TheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controleTheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controle
TheWebMind - Desenvolvimento rápido ao extremo, com qualidade e controle
 
Projeto academia de código júnior
Projeto  academia de código júniorProjeto  academia de código júnior
Projeto academia de código júnior
 
Teste para dispositivos móveis apresentação pra ufam -eliane
Teste para dispositivos móveis   apresentação pra ufam -elianeTeste para dispositivos móveis   apresentação pra ufam -eliane
Teste para dispositivos móveis apresentação pra ufam -eliane
 
Codificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcadosCodificação segura em C para sistemas embarcados
Codificação segura em C para sistemas embarcados
 
Videoulas de algoritmos e lógica de programação
Videoulas de algoritmos e lógica de programaçãoVideoulas de algoritmos e lógica de programação
Videoulas de algoritmos e lógica de programação
 

Último

5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManuais Formação
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxleandropereira983288
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxferreirapriscilla84
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memorialgrecchi
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamentalAntônia marta Silvestre da Silva
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxLuizHenriquedeAlmeid6
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficasprofcamilamanz
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaronaldojacademico
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfjanainadfsilva
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...Rosalina Simão Nunes
 

Último (20)

5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Manual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envioManual da CPSA_1_Agir com Autonomia para envio
Manual da CPSA_1_Agir com Autonomia para envio
 
Pedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptxPedologia- Geografia - Geologia - aula_01.pptx
Pedologia- Geografia - Geologia - aula_01.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
Discurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptxDiscurso Direto, Indireto e Indireto Livre.pptx
Discurso Direto, Indireto e Indireto Livre.pptx
 
Libras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS MemoriaLibras Jogo da memória em LIBRAS Memoria
Libras Jogo da memória em LIBRAS Memoria
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
2° ano_PLANO_DE_CURSO em PDF referente ao 2° ano do Ensino fundamental
 
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptxSlides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
Slides Lição 5, CPAD, Os Inimigos do Cristão, 2Tr24, Pr Henrique.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Atividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas GeográficasAtividades sobre Coordenadas Geográficas
Atividades sobre Coordenadas Geográficas
 
Rotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riquezaRotas Transaarianas como o desrto prouz riqueza
Rotas Transaarianas como o desrto prouz riqueza
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdfPortfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
Portfolio_Trilha_Meio_Ambiente_e_Sociedade.pdf
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de..."É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 

Porque escolhi Kotlin para ensinar programação

  • 1. © Pedro Alves 2019 Porque escolhi Kotlin para ensinar programação Pedro Alves, Professor na Universidade Lusófona
  • 2. © Pedro Alves 2019 Licenciatura em Engenharia Informática Licenciatura em Informática de Gestão Licenciatura em Engenharia Informática, Redes e Telecomunicações >160 novos alunos por ano
  • 3. © Pedro Alves 2019 Fundamentos de Programação Algoritmos e Estruturas de Dados Linguagens de Programação I Linguagens de Programação II Programação Web Computação Móvel
  • 5. © Pedro Alves 2019 Fundamentos de Programação Objectivos Aprender como funciona um programa Aprender o que é um algoritmo Aprender linguagens de programação Aprender conceitos básicos de programação: variáveis, funções, … Aprender a gostar de programar! 😃
  • 6. © Pedro Alves 2019 Aprender a gostar de programar??? 🥺
  • 7. © Pedro Alves 2019Fonte: https://insights.stackoverflow.com/survey/2018
  • 8. © Pedro Alves 2019 O que se faz por aí Quais as linguagens mais usadas nas disciplinas introdutórias de programação?
  • 9. © Pedro Alves 2019 Linguagens mais populares 
 (Reino Unido) Linguagens usadas em disciplinas introdutórias de programação, no Reino Unido, em 2016 (universo: 106 disciplinas) Fonte: An Analysis of Introductory Programming Courses at UK Universities, Ellen Murphy
  • 10. © Pedro Alves 2019 Linguagens mais populares 
 (Austrália/Nova Zelândia) Linguagens usadas em disciplinas introdutórias de programação, na Australásia, em 2016 (universo: 44 disciplinas) Fonte: Introductory Programming Courses in Australasia in 2016, R. Mason
  • 11. © Pedro Alves 2019 Linguagens mais populares 
 (Equador) Linguagens usadas em disciplinas introdutórias de programação, no Equador, em 2017 (universo: 13 disciplinas) Fonte: Current Trends of Teaching Computer Programming in Undergraduate CS Programs: A Survey from Ecuadorian Universities, G. Arcos 0 10 20 30 40 Java Javascript C++ PHP C# C Python VisualBasic R Prolog Scala
  • 12. © Pedro Alves 2019 Linguagens mais populares 
 (Estados Unidos) Linguagens usadas em disciplinas introdutórias de programação, nos Estados Unidos, em 2016 (universo: 410 universidades) Fonte: A longitudinal analysis of the reid list of first programming languages, 2016. RM Siegfried 0 45 90 135 180 Java Python C++ C Scheme Javascript VisualBasic Haskell Scala
  • 13. © Pedro Alves 2019 Linguagens mais populares 
 (Portugal) Instituição Linguagem IST Python FCUL Python FCT/UNL Java ISEL Java Univ. Minho C FEUP Python Univ. de Aveiro Python Univ. Beira Interior C
  • 14. © Pedro Alves 2019 Razões para escolha de linguagem (Reino Unido) Fonte: An Analysis of Introductory Programming Courses at UK Universities, Ellen Murphy
  • 15. © Pedro Alves 2019 Relevância para a indústria Fonte: KotlinConf 2018 - Opening Keynote Anúncios de emprego Kotlin
  • 16. © Pedro Alves 2019 Benefícios pedagógicos Curva de aprendizagem pouco acentuada Ferramentas de apoio Sem surpresas Boas práticas
  • 17. © Pedro Alves 2019 Curva de aprendizagem (1) Kotlin Java println("Hello World!") public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }
  • 18. © Pedro Alves 2019 Curva de aprendizagem (2) Kotlin Java import java.util.Scanner; public class Programa { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Primeiro nome?"); String primeiroNome = scanner.nextLine(); System.out.println("Apelido?"); String apelido = scanner.nextLine(); System.out.println("Olá " + primeiroNome + " " + apelido); } } println("Primeiro nome?") val primeiroNome = readLine() println("Apelido?") val apelido = readLine() println("Olá $primeiroNome $apelido")
  • 19. © Pedro Alves 2019 val numero1 = 1_000_000_000_000 val numero2 = 1 if (numero1 == numero2) { // compilation error } Curva de aprendizagem (3)
  • 20. © Pedro Alves 2019 Curva de aprendizagem (3) val numero1 : Long = 1_000_000_000_000 val numero2 : Int = 1 if (numero1 == numero2.toLong()) { } No início, programa-se com tipos explícitos val numero1 = 1_000_000_000_000 val numero2 = 1 if (numero1 == numero2.toLong()) { } Depois de ganhar experiência, programa-se com tipos implícitos
  • 21. © Pedro Alves 2019 Ferramentas de apoio Kotlin Python run
  • 22. © Pedro Alves 2019 Ferramentas de apoio Kotlin Python numero = "1" ... numero = "ola" ... print(numero + 1) # runtime error var numero = 1 ... numero = "ola" // compilation error ... println(numero + 1)
  • 23. © Pedro Alves 2019 Sem surpresas Kotlin Java println(Numero(3) == Numero(3)) // true System.out.println(new Numero(3) == new Numero(3)); // false
  • 24. © Pedro Alves 2019 Sem surpresas Javascript "" == 0 // true 0 == "0" // true "" == 0 // compilation error 0 == "0" // compilation error Kotlin
  • 25. © Pedro Alves 2019 Sem surpresas Javascript "" == 0 // true 0 == "0" // true "" == 0 // compilation error 0 == "0" // compilation error Kotlin array[-1] = 5 // runtime error array["ola"] = 5 // compilation error array[-1] = 5 // OK(?!) array["ola"] = 5 // OK(???!)
  • 26. © Pedro Alves 2019 Sem surpresas Javascript "" == 0 // true 0 == "0" // true "" == 0 // compilation error 0 == "0" // compilation error Kotlin array[-1] = 5 // runtime error array["ola"] = 5 // compilation error array[-1] = 5 // OK(?!) array["ola"] = 5 // OK(???!) Math.min() < Math.max() // false 🙄Int.MIN_VALUE < Int.MAX_VALUE // true
  • 27. © Pedro Alves 2019 Sem surpresas C / JavaKotlin switch(numero) { case 0: System.out.println("É zero!"); case 1: System.out.println("É um!"); } // escreve: // É zero! // É um! when (numero) { 0 -> println("É zero!") 1 -> println("É um!") } // Escreve: // É zero!
  • 28. © Pedro Alves 2019 Boas práticas (Nullable) JavaKotlin String texto = scanner.nextLine(); if (texto.charAt(0) == 'A') { System.out.println("Começa com A"); } val texto = readLine() if (texto[0] == 'A') { // compilation error println("Começa com A") } val texto = readLine() if (texto != null && texto[0] == 'A') { println("Começa com A") }
  • 29. © Pedro Alves 2019 Boas práticas (Parâmetros imutáveis) PythonKotlin def incrementa(numero): numero += 1 # sem efeito fun incrementa(numero: Int) { numero++ // erro: numero é imutável }
  • 30. © Pedro Alves 2019 Boas práticas (conjuntos de objectos do mesmo tipo) PythonKotlin coisas = [1, "ola", 3.5] # OKval coisas = intArrayOf(1, "ola", 3.5) //error Nota: Infelizmente em Kotlin também existe o arrayOf() que permite misturar tipos
  • 31. © Pedro Alves 2019 var numero = 3 for (i in 1..numero) { print(i) numero++ } // escreve 123 var numero = 1 while(numero < 4) { var numero = 2 print(numero) numero++ } // escreve 222222... (ciclo infinito) Nem tudo é bom… Name shadowing Ranges with var val numero1 : Int = Int.MAX_VALUE val numero2 : Int = numero1 + 1 println(numero2) // escreve -2147483648 Overflow
  • 32. © Pedro Alves 2019 Nem tudo é bom… Poucos livros Poucos exemplos disponíveis (*) também é uma vantagem: menos copy/paste! Menos ferramentas (repl.it, pycharm edu, …) Compile-Run
  • 33. © Pedro Alves 2019 + = ? Conclusão
  • 34. © Pedro Alves 2019 + = Conclusão