Slide 1

Slide 1 text

zsmb.co zsmb13 Creating a Kotlin Course from Scratch Márton Braun

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

› Budapest, Hungary

Slide 4

Slide 4 text

› Budapest, Hungary › BME (Budapest University of Technology and Economics)

Slide 5

Slide 5 text

› Budapest, Hungary › BME (Budapest University of Technology and Economics) › VIK (Faculty of Electrical Engineering and Informatics)

Slide 6

Slide 6 text

› Budapest, Hungary › BME (Budapest University of Technology and Economics) › VIK (Faculty of Electrical Engineering and Informatics) › AUT (Department of Automation and Applied Informatics)

Slide 7

Slide 7 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011

Slide 8

Slide 8 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011

Slide 9

Slide 9 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective)

Slide 10

Slide 10 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book

Slide 11

Slide 11 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc)

Slide 12

Slide 12 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc)

Slide 13

Slide 13 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc)

Slide 14

Slide 14 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student)

Slide 15

Slide 15 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin

Slide 16

Slide 16 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin

Slide 17

Slide 17 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin

Slide 18

Slide 18 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin Converting the Android course to Kotlin

Slide 19

Slide 19 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin Converting the Android course to Kotlin Creating a Kotlin Course from Scratch

Slide 20

Slide 20 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin Converting the Android course to Kotlin Creating a Kotlin Course from Scratch Kotlin course (elective)

Slide 21

Slide 21 text

2013 2014 2015 2016 2017 2018 2019 2020 2021 2012 2022 2010 2011 Android & iOS courses (elective) Android development book Mobile Software Development minor (MSc) Flutter course (elective) Mobile and Web Development course (BSc) Android course (as a student) Learning Kotlin Converting the Android course to Kotlin Creating a Kotlin Course from Scratch Kotlin course (elective)

Slide 22

Slide 22 text

Acknowledgements Bertalan Forstner Péter Ekler Hassan Charaf Imre Kelényi Gergely Csúcs

Slide 23

Slide 23 text

Goals › Teach independently of Android

Slide 24

Slide 24 text

Goals › Teach independently of Android › Build an interest in Kotlin

Slide 25

Slide 25 text

Goals › Teach independently of Android › Build an interest in Kotlin › Deep understanding of language basics

Slide 26

Slide 26 text

Goals › Teach independently of Android › Build an interest in Kotlin › Deep understanding of language basics › Building on Java and OO knowledge

Slide 27

Slide 27 text

Student language stats 3% 4% 4% 10% 11% 25% 32% 37% 61% 72% 77% 87% 0% 20% 40% 60% 80% 100% Dart pascal Swift PHP TypeScript Kotlin JavaScript Python C# C C++ Java

Slide 28

Slide 28 text

Materials › Full written material in English

Slide 29

Slide 29 text

Materials › Full written material in English

Slide 30

Slide 30 text

Materials › Full written material in English

Slide 31

Slide 31 text

Materials › Full written material in English › Many links, lots of code

Slide 32

Slide 32 text

Materials › Full written material in English › Many links, lots of code › Some original illustrations

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

All on GitHub

Slide 37

Slide 37 text

All on GitHub István Juhos stewemetal

Slide 38

Slide 38 text

Lectures

Slide 39

Slide 39 text

Lectures › 0 slides

Slide 40

Slide 40 text

Lectures › 0 slides › All live coding

Slide 41

Slide 41 text

Lectures › 0 slides › All live coding

Slide 42

Slide 42 text

Live coding

Slide 43

Slide 43 text

Live coding › The IDE is a core part of the Kotlin experience

Slide 44

Slide 44 text

Live coding › The IDE is a core part of the Kotlin experience

Slide 45

Slide 45 text

Live coding › The IDE is a core part of the Kotlin experience

Slide 46

Slide 46 text

Live coding › The IDE is a core part of the Kotlin experience – and it’s free!

Slide 47

Slide 47 text

Live coding › The IDE is a core part of the Kotlin experience

Slide 48

Slide 48 text

Live coding › The IDE is a core part of the Kotlin experience › Great for encouraging questions

Slide 49

Slide 49 text

Useful IDE functionality

Slide 50

Slide 50 text

Useful IDE functionality

Slide 51

Slide 51 text

Useful IDE functionality

Slide 52

Slide 52 text

Useful IDE functionality

Slide 53

Slide 53 text

Useful IDE functionality

Slide 54

Slide 54 text

Useful IDE functionality

Slide 55

Slide 55 text

Useful IDE functionality

Slide 56

Slide 56 text

Useful IDE functionality › Java to Kotlin converter › Kotlin scripts › Scratch files › REPL

Slide 57

Slide 57 text

Lectures › Usual setup › In-person lectures

Slide 58

Slide 58 text

Lectures › Usual setup › In-person lectures › Extras outside of the core material › Events › Language news

Slide 59

Slide 59 text

Lectures › Usual setup › In-person lectures › Extras outside of the core material › Events › Language news › Easy interaction

Slide 60

Slide 60 text

Remote

Slide 61

Slide 61 text

Remote › Recordings are essential

Slide 62

Slide 62 text

Remote › Recordings are essential › Started these in person already

Slide 63

Slide 63 text

Remote › Recordings are essential › Started these in person already › Making them available very quickly

Slide 64

Slide 64 text

Remote › Recordings are essential › Started these in person already › Making them available very quickly › Available in multiple forms

Slide 65

Slide 65 text

Remote › Recordings are essential › Started these in person already › Making them available very quickly › Available in multiple forms

Slide 66

Slide 66 text

Remote › Recordings are essential › Started these in person already › Making them available very quickly › Available in multiple forms › Zoom classes › Harder to get interaction

Slide 67

Slide 67 text

Remote › Recordings are essential › Started these in person already › Making them available very quickly › Available in multiple forms › Zoom classes › Harder to get interaction › Clear communication of important info

Slide 68

Slide 68 text

Remote › Recordings are essential › Started these in person already › Making them available very quickly › Available in multiple forms › Zoom classes › Harder to get interaction › Clear communication of important info

Slide 69

Slide 69 text

Requirements Homework Test

Slide 70

Slide 70 text

Homework › Free choice of project

Slide 71

Slide 71 text

Homework › Free choice of project › … as long as it’s not Android

Slide 72

Slide 72 text

Homework › Free choice of project › … as long as it’s not Android › Varying difficulty › Create something meaningful › Write neat Kotlin code

Slide 73

Slide 73 text

Homework › Starter projects › Command line, JDK8 › JavaFX JDK8 › TornadoFX › JavaFX JDK11

Slide 74

Slide 74 text

Homework › Starter projects › Command line, JDK8 › JavaFX JDK8 › TornadoFX › JavaFX JDK11 › Largest setup problems › JDK versions › Missing JavaFX support

Slide 75

Slide 75 text

Homework › Starter projects › Command line, JDK8 › JavaFX JDK8 › TornadoFX › JavaFX JDK11 › Largest setup problems › JDK versions › Missing JavaFX support › No problems installing IntelliJ IDEA

Slide 76

Slide 76 text

Homework examples

Slide 77

Slide 77 text

Homework examples › Basic Kotlin classes with operators, unit tests, conventions

Slide 78

Slide 78 text

Homework examples › Basic Kotlin classes with operators, unit tests, conventions › REST services › Ktor/Exposed stack › Spring Boot apps

Slide 79

Slide 79 text

Homework examples › Basic Kotlin classes with operators, unit tests, conventions › REST services › Ktor/Exposed stack › Spring Boot apps › JavaFX / TornadoFX games › Minesweeper, Tetris, Game of Life

Slide 80

Slide 80 text

Homework examples › Basic Kotlin classes with operators, unit tests, conventions › REST services › Ktor/Exposed stack › Spring Boot apps › JavaFX / TornadoFX games › Minesweeper, Tetris, Game of Life › Integrations with video games

Slide 81

Slide 81 text

Homework examples › Basic Kotlin classes with operators, unit tests, conventions › REST services › Ktor/Exposed stack › Spring Boot apps › JavaFX / TornadoFX games › Minesweeper, Tetris, Game of Life › Integrations with video games › Image processing

Slide 82

Slide 82 text

Homework examples › Basic Kotlin classes with operators, unit tests, conventions › REST services › Ktor/Exposed stack › Spring Boot apps › JavaFX / TornadoFX games › Minesweeper, Tetris, Game of Life › Integrations with video games › Image processing › Data analysis

Slide 83

Slide 83 text

Testing

Slide 84

Slide 84 text

Testing › Not super hard

Slide 85

Slide 85 text

Testing › Not super hard › Lots of quiz type questions

Slide 86

Slide 86 text

Testing › Not super hard › Lots of quiz type questions › Open ended questions

Slide 87

Slide 87 text

Testing › Not super hard › Lots of quiz type questions › Open ended questions › Some coding questions

Slide 88

Slide 88 text

Testing › Not super hard › Lots of quiz type questions › Open ended questions › Some coding questions › “Rewrite this by using apply” val square = Square() square.x = 10 square.y = 20 square.side = 50

Slide 89

Slide 89 text

Testing › Analyzing broken code

Slide 90

Slide 90 text

Testing › Analyzing broken code › “Someone wrote this code without sufficiently learning Kotlin. Mark and fix as many mistakes as you can!”

Slide 91

Slide 91 text

Testing › Analyzing broken code › “Someone wrote this code without sufficiently learning Kotlin. Mark and fix as many mistakes as you can!” class Car(val year = 2000) { val model: String; } void drive(car: Car?) { println("Driving around in a $car.year $car.model") }

Slide 92

Slide 92 text

Stats 0 20 40 60 80 100 120 2019/20/1 2019/20/2 2020/21/1 2020/21/2 Students Survey responses

Slide 93

Slide 93 text

External resources used

Slide 94

Slide 94 text

External resources used › kotlinlang.org

Slide 95

Slide 95 text

External resources used › kotlinlang.org › Ktor, TornadoFX, Spring docs

Slide 96

Slide 96 text

External resources used › kotlinlang.org › Ktor, TornadoFX, Spring docs › StackOverflow

Slide 97

Slide 97 text

External resources used › kotlinlang.org › Ktor, TornadoFX, Spring docs › StackOverflow › YouTube tutorials

Slide 98

Slide 98 text

External resources used › kotlinlang.org › Ktor, TornadoFX, Spring docs › StackOverflow › YouTube tutorials

Slide 99

Slide 99 text

External resources used › hyperskill.org

Slide 100

Slide 100 text

External resources used › play.kotlinlang.org

Slide 101

Slide 101 text

More to consider › play.kotlinlang.org

Slide 102

Slide 102 text

More to consider › play.kotlinlang.org

Slide 103

Slide 103 text

More to consider › play.kotlinlang.org

Slide 104

Slide 104 text

More to consider

Slide 105

Slide 105 text

Favourites

Slide 106

Slide 106 text

Favourites › Showing everything through examples

Slide 107

Slide 107 text

Favourites › Showing everything through examples › Homework assignment

Slide 108

Slide 108 text

Favourites › Showing everything through examples › Homework assignment › GitHub repo materials

Slide 109

Slide 109 text

Favourites › Showing everything through examples › Homework assignment › GitHub repo materials › Functional programming

Slide 110

Slide 110 text

Favourites › Showing everything through examples › Homework assignment › GitHub repo materials › Functional programming › Coroutines

Slide 111

Slide 111 text

Favourites › Showing everything through examples › Homework assignment › GitHub repo materials › Functional programming › Coroutines › Looking at Java bytecode

Slide 112

Slide 112 text

Favourites › Showing everything through examples › Homework assignment › GitHub repo materials › Functional programming › Coroutines › Looking at Java bytecode › Nyan progress bar

Slide 113

Slide 113 text

Favourites

Slide 114

Slide 114 text

Feedback

Slide 115

Slide 115 text

Feedback “Never seen live coding like this in a course before”

Slide 116

Slide 116 text

Feedback “Never seen live coding like this in a course before” “The most useful elective course I’ve had so far”

Slide 117

Slide 117 text

Feedback “Never seen live coding like this in a course before” “The most useful elective course I’ve had so far” “Finally understood lambdas after seeing it elsewhere before”

Slide 118

Slide 118 text

Feedback “Never seen live coding like this in a course before” “The most useful elective course I’ve had so far” “Finally understood lambdas after seeing it elsewhere before” “Didn’t just learn the language, but also the design decisions behind it, and the IDE’s capabilities”

Slide 119

Slide 119 text

Feedback “Never seen live coding like this in a course before” “The most useful elective course I’ve had so far” “Finally understood lambdas after seeing it elsewhere before” “Didn’t just learn the language, but also the design decisions behind it, and the IDE’s capabilities” “Would love a 4 credit subject with labs each week”

Slide 120

Slide 120 text

Feedback “I’m an electrical engineer in the 4th semester, realized I want to code for a living instead, this course reenforced that decision.”

Slide 121

Slide 121 text

Feedback “I’m an electrical engineer in the 4th semester, realized I want to code for a living instead, this course reenforced that decision.” “Was looking for copper but found gold. I wanted to take a 2 credit filler course for my last semester, but this turned out to be really useful.”

Slide 122

Slide 122 text

Overall subject rating: 9.63 0 20 40 60 80 100 120 140 160 1 2 3 4 5 6 7 8 9 10

Slide 123

Slide 123 text

No content

Slide 124

Slide 124 text

› Meet students where they are › Live lectures or recordings › Written material › Projects to follow along with

Slide 125

Slide 125 text

› Meet students where they are › Live lectures or recordings › Written material › Projects to follow along with › Teach more than syntax › Explain the “why” › Show underlying details

Slide 126

Slide 126 text

› Meet students where they are › Live lectures or recordings › Written material › Projects to follow along with › Teach more than syntax › Explain the “why” › Show underlying details › Put students first › Clear communication, open for feedback › Involve them in the lectures › No super hard requirements

Slide 127

Slide 127 text

No content

Slide 128

Slide 128 text

Everything’s a remix › Android-based Software Development (VIAUAV21) › C11 and C++11 Programming (VIEEAV01) › Server Side JavaScript (VITMAV42)

Slide 129

Slide 129 text

Kotlin @ BME › Android software development (4) › Kotlin software development (2) › Mobile & web development › 400+, all BSc students › Mobile Software Development minor (MSc) › Mobile Software Platforms (4) › Mobile Software System Development (4) › Mobile Software Laboratory (4) › 3D Graphics › KotlinJS for WebGL

Slide 130

Slide 130 text

zsmb13 zsmb.co/talks

Slide 131

Slide 131 text

zsmb.co/talks zsmb13 Márton Braun › Meet students where they are › Teach more than syntax › Put students first Creating a Kotlin Course from Scratch