Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Creating a Kotlin Course from Scratch (JetBrains Kotlin webinar)

Creating a Kotlin Course from Scratch (JetBrains Kotlin webinar)

This talk tells the story of mobile development at BME-VIK-AUT, how I joined that story, and how we introduced Kotlin to the university curriculum. First as part of the Android software development course, then eventually creating a standalone course to teach it in depth.

It covers the all-live-demo approach used for lectures, the choices made to make the course fun to complete, the wonders that remote teaching introduced, and how the students have received the course.

More about the talk:
https://zsmb.co/appearances/kotlin-for-education-webinar-july-2021/

Marton Braun

July 29, 2021
Tweet

More Decks by Marton Braun

Other Decks in Programming

Transcript

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

    View Slide

  2. View Slide

  3. › Budapest, Hungary

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 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)

    View Slide

  12. 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)

    View Slide

  13. 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)

    View Slide

  14. 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)

    View Slide

  15. 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

    View Slide

  16. 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

    View Slide

  17. 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

    View Slide

  18. 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

    View Slide

  19. 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

    View Slide

  20. 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)

    View Slide

  21. 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)

    View Slide

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

    View Slide

  23. Goals
    › Teach independently of Android

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. 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

    View Slide

  28. Materials
    › Full written material in English

    View Slide

  29. Materials
    › Full written material in English

    View Slide

  30. Materials
    › Full written material in English

    View Slide

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

    View Slide

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

    View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. All on GitHub

    View Slide

  37. All on GitHub
    István
    Juhos
    stewemetal

    View Slide

  38. Lectures

    View Slide

  39. Lectures
    › 0 slides

    View Slide

  40. Lectures
    › 0 slides
    › All live coding

    View Slide

  41. Lectures
    › 0 slides
    › All live coding

    View Slide

  42. Live coding

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  49. Useful IDE functionality

    View Slide

  50. Useful IDE functionality

    View Slide

  51. Useful IDE functionality

    View Slide

  52. Useful IDE functionality

    View Slide

  53. Useful IDE functionality

    View Slide

  54. Useful IDE functionality

    View Slide

  55. Useful IDE functionality

    View Slide

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

    View Slide

  57. Lectures
    › Usual setup
    › In-person lectures

    View Slide

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

    View Slide

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

    View Slide

  60. Remote

    View Slide

  61. Remote
    › Recordings are essential

    View Slide

  62. Remote
    › Recordings are essential
    › Started these in person already

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  67. 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

    View Slide

  68. 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

    View Slide

  69. Requirements
    Homework Test

    View Slide

  70. Homework
    › Free choice of project

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  76. Homework examples

    View Slide

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

    View Slide

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

    View Slide

  79. 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

    View Slide

  80. 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

    View Slide

  81. 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

    View Slide

  82. 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

    View Slide

  83. Testing

    View Slide

  84. Testing
    › Not super hard

    View Slide

  85. Testing
    › Not super hard
    › Lots of quiz type questions

    View Slide

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

    View Slide

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

    View Slide

  88. 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

    View Slide

  89. Testing
    › Analyzing broken code

    View Slide

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

    View Slide

  91. 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")
    }

    View Slide

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

    View Slide

  93. External resources used

    View Slide

  94. External resources used
    › kotlinlang.org

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  99. External resources used
    › hyperskill.org

    View Slide

  100. External resources used
    › play.kotlinlang.org

    View Slide

  101. More to consider
    › play.kotlinlang.org

    View Slide

  102. More to consider
    › play.kotlinlang.org

    View Slide

  103. More to consider
    › play.kotlinlang.org

    View Slide

  104. More to consider

    View Slide

  105. Favourites

    View Slide

  106. Favourites
    › Showing everything through examples

    View Slide

  107. Favourites
    › Showing everything through examples
    › Homework assignment

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  113. Favourites

    View Slide

  114. Feedback

    View Slide

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

    View Slide

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

    View Slide

  117. 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”

    View Slide

  118. 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”

    View Slide

  119. 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”

    View Slide

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

    View Slide

  121. 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.”

    View Slide

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

    View Slide

  123. View Slide

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

    View Slide

  125. › 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

    View Slide

  126. › 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

    View Slide

  127. View Slide

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

    View Slide

  129. 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

    View Slide

  130. zsmb13
    zsmb.co/talks

    View Slide

  131. 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

    View Slide