Difference between revisions of "BITL-CS2"
(→13.01.20) |
(→GitHub) |
||
(34 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
=Administrative information= | =Administrative information= | ||
− | Course Syllabus | + | Course [https://www.dropbox.com/s/gix0cxm82b1fgxj/Syllabus_CS2_2020-1.pdf?raw=1 Syllabus] |
<!-- [https://www.dropbox.com/s/aqbvmka49h9xowp/Syllabus.pdf?raw=1 is available here] --> | <!-- [https://www.dropbox.com/s/aqbvmka49h9xowp/Syllabus.pdf?raw=1 is available here] --> | ||
Communication: | Communication: | ||
− | * via slack: workspace name: bitl-cs2- | + | * via slack: workspace name: bitl-cs2-2020 |
* via email: use instructor's email address for personal communication | * via email: use instructor's email address for personal communication | ||
* office hours: by appt. | * office hours: by appt. | ||
+ | |||
+ | <!-- | ||
+ | = Tests = | ||
+ | * [https://forms.gle/4jhSre18yhSyUtLV6 Homework Quiz 1] | ||
+ | --> | ||
+ | |||
+ | =Deliverables= | ||
+ | Deliverables in this course include the following: | ||
+ | * Lecture questions - due by midnight on the next day, unless otherwise specified. | ||
+ | * Lab activities | ||
+ | * Homework | ||
+ | * Quizzes as scheduled on the calendar | ||
+ | * Final exam | ||
=Calendar= | =Calendar= | ||
− | {| border=1 cellspacing=0 cellpadding=4 | + | {| border=1 cellspacing=0 cellpadding=4 style = ""border-color: #ddd;"" |
|- | |- | ||
! Date | ! Date | ||
! Topic | ! Topic | ||
− | ! | + | ! Deliverables |
|- | |- | ||
| | | | ||
==== 06.01.20 ==== | ==== 06.01.20 ==== | ||
| | | | ||
− | '''Course Introduction''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Course Introduction'''</big> | ||
+ | |} | ||
+ | |||
Introduction to the course. [https://www.dropbox.com/s/gix0cxm82b1fgxj/Syllabus_CS2_2020-1.pdf?raw=1 Syllabus]. | Introduction to the course. [https://www.dropbox.com/s/gix0cxm82b1fgxj/Syllabus_CS2_2020-1.pdf?raw=1 Syllabus]. | ||
+ | |||
| | | | ||
Line 48: | Line 65: | ||
==== 08.01.20 ==== | ==== 08.01.20 ==== | ||
| | | | ||
− | '''IDE Setup. Scala Introduction''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''IDE Setup. Scala Introduction'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/mgo4xacl5gfheol/L01_Scala_intro_1.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/mgo4xacl5gfheol/L01_Scala_intro_1.pdf?raw=1 Slides] | ||
− | '''Objective | + | '''Objective''': Setup your IDE (IntelliJ) for Scala and Python development on your laptop and write a simple Scala program. |
'''Reading/Reference''': | '''Reading/Reference''': | ||
Line 64: | Line 83: | ||
==== 10.01.20 ==== | ==== 10.01.20 ==== | ||
| | | | ||
− | '''Scala Types and Reading Files''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Scala Types and Reading Files'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/i1x8qeldz4skb9f/L02_Scala_intro_2.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/i1x8qeldz4skb9f/L02_Scala_intro_2.pdf?raw=1 Slides] | ||
Line 84: | Line 105: | ||
==== 13.01.20 ==== | ==== 13.01.20 ==== | ||
| | | | ||
− | '''Unit Testing''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Unit Testing'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/7zeact2v8k9a1y7/L03_Unit_testing.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/7zeact2v8k9a1y7/L03_Unit_testing.pdf?raw=1 Slides] | ||
'''Objective''': Test your own code without needing AutoLab | '''Objective''': Test your own code without needing AutoLab | ||
+ | |||
+ | [[#HW1 | HW1]] announced. | ||
'''Reading/Reference''': | '''Reading/Reference''': | ||
Line 93: | Line 118: | ||
* [https://www.dropbox.com/s/8z0k2pjjq8nij9c/pom.xml?dl=1 Example pom.xml] - You can copy this into your projects and expand it when needed | * [https://www.dropbox.com/s/8z0k2pjjq8nij9c/pom.xml?dl=1 Example pom.xml] - You can copy this into your projects and expand it when needed | ||
* [http://www.scalatest.org/ Scalatest Homepage] - For reference only | * [http://www.scalatest.org/ Scalatest Homepage] - For reference only | ||
− | * [http://www.scalatest.org/getting_started_with_fun_suite Scalatest FunSuite Example] - A practical unit testing example | + | * [http://www.scalatest.org/getting_started_with_fun_suite Scalatest FunSuite Example] - A practical unit testing example"" |
+ | |||
| | | | ||
− | * | + | * [https://docs.google.com/document/d/1SSlynEeirnk10dXY4-cGDysqfS673y8qNHBe8e2KpZE/edit?usp=sharing '''Lab Activity 1'''] |
|- | |- | ||
| | | | ||
− | |||
==== 15.01.20 ==== | ==== 15.01.20 ==== | ||
| | | | ||
− | '''Practice Unit Testing''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Practice Unit Testing'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
Line 109: | Line 138: | ||
==== 17.01.20 ==== | ==== 17.01.20 ==== | ||
| | | | ||
− | '''Classes and Objects''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Classes and Objects'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/wzljvj7tisf97gu/L04_Classes.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/wzljvj7tisf97gu/L04_Classes.pdf?raw=1 Slides] | ||
Line 118: | Line 149: | ||
* [https://docs.scala-lang.org/tour/classes.html Scala: Class] - Application of Classes using Scala syntax | * [https://docs.scala-lang.org/tour/classes.html Scala: Class] - Application of Classes using Scala syntax | ||
* [https://www.w3schools.com/python/python_classes.asp Python: Class] - Application of Classes using Python syntax | * [https://www.w3schools.com/python/python_classes.asp Python: Class] - Application of Classes using Python syntax | ||
− | * [https://www.scala-lang.org/api/2.12.9/ Scala API] - Reference for all Scala packages/classes/objects | + | * [https://www.scala-lang.org/api/2.12.9/ Scala API] - Reference for all Scala packages/classes/objects"" |
+ | |||
| | | | ||
Line 125: | Line 157: | ||
==== 20.01.20 ==== | ==== 20.01.20 ==== | ||
| | | | ||
− | '''Model of Execution 1''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Model of Execution 1'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/4ktq1dldxyt1j7v/L05_Execution_1.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/4ktq1dldxyt1j7v/L05_Execution_1.pdf?raw=1 Slides] | ||
Line 132: | Line 166: | ||
'''Reading/Reference''': | '''Reading/Reference''': | ||
* [https://medium.com/@nickteixeira/stack-vs-heap-whats-the-difference-and-why-should-i-care-5abc78da1a88 Program Stack and Heap] | * [https://medium.com/@nickteixeira/stack-vs-heap-whats-the-difference-and-why-should-i-care-5abc78da1a88 Program Stack and Heap] | ||
− | * [https://www.jetbrains.com/help/idea/run-debug-and-test-scala.html#debug_scala_code Debugging in IntelliJ] | + | * [https://www.jetbrains.com/help/idea/run-debug-and-test-scala.html#debug_scala_code Debugging in IntelliJ]"" |
+ | |||
| | | | ||
− | * '''Lab Activity 2''' | + | * [https://docs.google.com/document/d/1ZV0MK5Gud959EAQVAUNWxAy7X09fQso0LA0o8oCAtnw/edit?usp=sharing '''Lab Activity 2'''] |
|- | |- | ||
Line 140: | Line 175: | ||
==== 22.01.20 ==== | ==== 22.01.20 ==== | ||
| | | | ||
− | '''Model of Execution 2''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Model of Execution 2'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/hgiwb9r170usv34/L06_Execution_2.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/hgiwb9r170usv34/L06_Execution_2.pdf?raw=1 Slides] | ||
Line 147: | Line 184: | ||
'''Reading/Reference''': | '''Reading/Reference''': | ||
* [https://medium.com/basecs/a-deeper-inspection-into-compilation-and-interpretation-d98952ebc842 Compilers vs. Interpreters] - Scala/Java/C++ are compiled while Python/JavaScript are interpreted. What does this mean? | * [https://medium.com/basecs/a-deeper-inspection-into-compilation-and-interpretation-d98952ebc842 Compilers vs. Interpreters] - Scala/Java/C++ are compiled while Python/JavaScript are interpreted. What does this mean? | ||
− | * [https://www.jetbrains.com/help/idea/run-debug-and-test-scala.html#debug_scala_code Debugging in IntelliJ] | + | * [https://www.jetbrains.com/help/idea/run-debug-and-test-scala.html#debug_scala_code Debugging in IntelliJ]"" |
+ | |||
| | | | ||
Line 154: | Line 192: | ||
==== 24.01.20 ==== | ==== 24.01.20 ==== | ||
| | | | ||
− | '''Physics Engine Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Physics Engine Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
+ | [[#HW2 | HW2]] announced. | ||
+ | |||
| | | | ||
− | * '''HW1: Physics Engine''' | + | * [https://docs.google.com/document/d/1rrq5WjyOwupKH3GigH7crZ6elXv2ggZoSGrnP9hEMKU/view#heading=h.4012eaop3dxl '''Due HW1: Physics Engine'''] |
|- | |- | ||
Line 162: | Line 206: | ||
==== 27.01.20 ==== | ==== 27.01.20 ==== | ||
| | | | ||
− | '''Inheritance''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Inheritance'''</big> | ||
+ | |} | ||
* [https://www.dropbox.com/s/tc0hdxyhn2e78ej/L07_Inheritance.pdf?raw=1 Slides] | * [https://www.dropbox.com/s/tc0hdxyhn2e78ej/L07_Inheritance.pdf?raw=1 Slides] | ||
Line 169: | Line 215: | ||
'''Reading/Reference''': | '''Reading/Reference''': | ||
* [https://www.geeksforgeeks.org/inheritance-in-scala/ Inheritance in Scala] | * [https://www.geeksforgeeks.org/inheritance-in-scala/ Inheritance in Scala] | ||
− | * [https://www.digitalocean.com/community/tutorials/understanding-class-inheritance-in-python-3 Inheritance in Python] | + | * [https://www.digitalocean.com/community/tutorials/understanding-class-inheritance-in-python-3 Inheritance in Python]"" |
+ | |||
| | | | ||
− | * '''Lab Activity 3''' | + | * [https://docs.google.com/document/d/1OpjGr1FTuBcj06_BMw_S8HvzyYHaetyYot_IZ7-LmUg/edit?usp=sharing '''Lab Activity 3'''] |
|- | |- | ||
Line 177: | Line 224: | ||
==== 29.01.20 ==== | ==== 29.01.20 ==== | ||
| | | | ||
− | '''Level 1 Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Level 1 Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''Level 1 Quiz''' | * '''Level 1 Quiz''' | ||
Line 185: | Line 236: | ||
==== 31.01.20 ==== | ==== 31.01.20 ==== | ||
| | | | ||
− | '''Polymorphism and JSON''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Polymorphism and JSON'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/zimg0h83faqu6uy/L08_Polymorphism.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': You will study polymorphism and apply it to use JSON in a strongly typed language | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://beginnersbook.com/2013/03/oops-in-java-encapsulation-inheritance-polymorphism-abstraction/ OOP Overview] | ||
+ | * [https://overiq.com/python-101/inheritance-and-polymorphism-in-python/ Polymorphism in Python] | ||
+ | * [https://dev.to/jmcclell/inheritance-vs-generics-vs-typeclasses-in-scala-20op Polymorphism in Scala] - Just the Subtype Polymorphism (Inheritance) section | ||
+ | * [https://www.playframework.com/documentation/2.7.x/ScalaJson Play JSON library documentation] | ||
+ | * [https://mvnrepository.com/artifact/com.typesafe.play/play-json_2.12/2.7.1 Play JSON Maven artifact] | ||
+ | * [https://github.com/scalaj/scalaj-http scalaj-http library4]"" | ||
+ | |||
| | | | ||
Line 192: | Line 257: | ||
==== 03.02.20 ==== | ==== 03.02.20 ==== | ||
| | | | ||
− | '''Design Pattern: State Pattern 1''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Design Pattern: State Pattern 1'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/xgd3dsnra43iz1e/L09_State_Pattern_1.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': You will gain experience with the state design pattern to dynamically change the behavior of an object | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://en.wikipedia.org/wiki/State_pattern State Pattern on Wikipedia] | ||
− | |||
| | | | ||
− | * Project Demo 1 | + | * [https://docs.google.com/document/d/18mxVo3_T0WmFWljXpsOZ88h52fFtdL6JmpbUFFW1Pi0/edit?usp=sharing '''Due Project Demo 1'''] |
|- | |- | ||
Line 202: | Line 274: | ||
==== 05.02.20 ==== | ==== 05.02.20 ==== | ||
| | | | ||
− | '''Design Pattern: State Pattern 2''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Design Pattern: State Pattern 2'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/9gymjldb3khbvn8/L10_State_Pattern_2.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Gain more familiarity with the state design pattern by reviewing the Jumper code | ||
− | |||
| | | | ||
Line 211: | Line 287: | ||
==== 07.02.20 ==== | ==== 07.02.20 ==== | ||
| | | | ||
− | '''Design Pattern: State Pattern 3''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Design Pattern: State Pattern 3'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/qo10tcodvyvmy9h/L11_State_Pattern_3.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Gain more familiarity with the state design pattern | ||
− | |||
| | | | ||
Line 220: | Line 300: | ||
==== 10.02.20 ==== | ==== 10.02.20 ==== | ||
| | | | ||
− | '''GUI''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''GUI'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/wep3zxfptwlevdt/L12_GUI.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Build desktop GUIs | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [http://www.scalafx.org/ ScalaFX Homepage] - Adapter for JavaFX in Scala | ||
+ | * [https://openjfx.io/index.html JavaFX Homepage] | ||
+ | * [http://sjgpsoft.blogspot.com/2016/02/scalafx-button-positioning-with-hbox.html#more ScalaFX Button Example] | ||
+ | * [https://www.tutorialspoint.com/javafx/javafx_2d_shapes.htm JavaFX 2D Shapes] | ||
+ | * [https://www.youtube.com/watch?v=63Utq7Ht-w0&index=1&list=PLLMXbkbDbVt__x5VUQHbI8g25Phxi2yBy ScalaFX Videos] - Playlist by Mark Lewis | ||
+ | * [https://www.tutorialspoint.com/javafx/javafx_3d_shapes.htm JavaFX 3D Shapes] - Optional, but helpful if you're making a 3D app for your project | ||
− | |||
| | | | ||
− | * '''Lab Activity 4''' | + | * [https://docs.google.com/document/d/16khfhVph_5_bsYSeMXmGz0r3ydGMP-Vp3zkJWR3klMs/edit?usp=sharing '''Lab Activity 4'''] |
|- | |- | ||
Line 230: | Line 322: | ||
==== 12.02.20 ==== | ==== 12.02.20 ==== | ||
| | | | ||
− | '''Design Architecture: MVC''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Design Architecture: MVC'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/cr1u7gcuuk88xnu/L13_MVC.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Become familiar with the MVC architecture pattern and its benefits | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller MVC on Wikipedia] | ||
+ | * [https://www.codecademy.com/articles/mvc MVC Analogies] | ||
− | |||
| | | | ||
Line 239: | Line 339: | ||
==== 14.02.20 ==== | ==== 14.02.20 ==== | ||
| | | | ||
− | '''Calculator Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Calculator Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
+ | [[#HW3 | HW3]] announced. | ||
+ | |||
| | | | ||
− | * '''HW2: Calculator''' | + | * [https://docs.google.com/document/d/1Kjo2nRqKAXY8JJaXxtAJY27RaS-_XnwNzOk3ekOjlZY/edit?usp=sharing '''Due HW2: Calculator'''] |
|- | |- | ||
Line 247: | Line 353: | ||
==== 17.02.20 ==== | ==== 17.02.20 ==== | ||
| | | | ||
− | '''Actors Introduction''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Actors Introduction'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/9wdgrnj04gwwbzi/L14_Actors.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Write programs with multiple pieces of code executing at the same time | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.12/2.5.22 Akka Library] | ||
+ | * [https://doc.akka.io/docs/akka/2.5.22/actors.html?language=scala Akka Actors] | ||
+ | * [https://docs.scala-lang.org/tour/case-classes.html Case Classes] | ||
+ | * [https://en.wikipedia.org/wiki/Actor_model Actors Model (Wikipedia)] | ||
− | |||
| | | | ||
* '''Lab Activity 5''' | * '''Lab Activity 5''' | ||
Line 257: | Line 373: | ||
==== 19.02.20 ==== | ==== 19.02.20 ==== | ||
| | | | ||
− | '''Level 2 Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Level 2 Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''Level 2 Quiz''' | * '''Level 2 Quiz''' | ||
Line 265: | Line 385: | ||
==== 21.02.20 ==== | ==== 21.02.20 ==== | ||
| | | | ||
− | '''Testing Actors and Database Connections''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Testing Actors and Database Connections'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/9dg1ia2szrqcjjp/L15_Actors_Databases.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Write unit tests for actors and connect to a MySQL server | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://doc.akka.io/docs/akka/current/testing.html?language=scala Testing Actors] | ||
+ | * [https://dev.mysql.com/downloads/mysql/ MySQL download page] | ||
+ | * [https://alvinalexander.com/scala/scala-jdbc-connection-mysql-sql-select-example Connecting to MySQL] | ||
+ | * [https://www.w3schools.com/sql/default.asp SQL Tutorial] - | ||
+ | ** [https://www.w3schools.com/sql/sql_create_table.asp Create Table] | ||
+ | ** [https://www.w3schools.com/sql/sql_insert.asp Insert Into] | ||
+ | ** [https://www.w3schools.com/sql/sql_select.asp Select] | ||
+ | ** [https://www.w3schools.com/sql/sql_where.asp Where] | ||
+ | ** [https://www.w3schools.com/sql/sql_update.asp Update] | ||
− | |||
| | | | ||
Line 274: | Line 409: | ||
==== 24.02.20 ==== | ==== 24.02.20 ==== | ||
| | | | ||
− | '''Web Sockets 1''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Web Sockets 1'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/6dkmly1ue8ucgnq/L16_WebSocket_Server.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Enable 2-way communication between the browser and web server | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://github.com/mrniko/netty-socketio Scala socket.io Server] | ||
+ | * [https://en.wikipedia.org/wiki/WebSocket Web Sockets (Wikipedia)] | ||
− | |||
| | | | ||
− | * Project Demo 2 | + | * [https://docs.google.com/document/d/1-Rpz1nUcWKTzMJVYDwFKj6Nq8qgy5YFlpFDxDXRZVlQ/edit?usp=sharing '''Due Project Demo 2'''] |
|- | |- | ||
Line 284: | Line 427: | ||
==== 26.02.20 ==== | ==== 26.02.20 ==== | ||
| | | | ||
− | '''Web Sockets 2''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Web Sockets 2'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/9ttm77llpr6ud2z/L17_WebSocket_Clients.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Connect a Scala front end to a web socket server | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://github.com/socketio/socket.io-client-java Socket IO Library - Scala] | ||
+ | * [https://socket.io/docs/client-api/ socket.io Client Docs] | ||
− | |||
| | | | ||
Line 293: | Line 444: | ||
==== 28.02.20 ==== | ==== 28.02.20 ==== | ||
| | | | ||
− | '''Actors Application with Web Sockets''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Actors Application with Web Sockets'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/mfvgrlyavg2u0e1/L18_WebSocket_App.pdf?raw=1 Slides] | ||
+ | |||
+ | |||
| | | | ||
Line 300: | Line 456: | ||
==== 02.03.20 ==== | ==== 02.03.20 ==== | ||
| | | | ||
− | '''MMO Architecture 1''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''MMO Architecture 1'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/ccscfme4k7haznv/L19_MMO.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': See an example using the MMO architecture form this class | ||
− | |||
| | | | ||
* '''Lab Activity 6''' | * '''Lab Activity 6''' | ||
Line 310: | Line 470: | ||
==== 04.03.20 ==== | ==== 04.03.20 ==== | ||
| | | | ||
− | '''MMO Architecture 2''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''MMO Architecture 2'''</big> | ||
+ | |} | ||
+ | * [https://www.dropbox.com/s/1ou1orerfq0oo18/L20_MMO_2.pdf?raw=1 Slides] | ||
+ | |||
+ | '''Objective''': Explore the MMO architecture applied to the course project | ||
− | |||
| | | | ||
Line 319: | Line 483: | ||
==== 06.03.20 ==== | ==== 06.03.20 ==== | ||
| | | | ||
− | '''Clicker Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Clicker Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
+ | [[#HW4 | HW4]] announced. | ||
+ | |||
| | | | ||
− | * '''HW3: Clicker''' | + | * '''Due HW3: Clicker''' |
|- | |- | ||
Line 327: | Line 497: | ||
==== 09.03.20 ==== | ==== 09.03.20 ==== | ||
| | | | ||
− | '''Custom Sorting with First-Order Functions''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Custom Sorting with First-Order Functions'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Explore custom sorting in scala and gain experience with function and type parameters | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://alvinalexander.com/scala/how-sort-scala-sequences-seq-list-array-buffer-vector-ordering-ordered Custom Sorting - Scala] | ||
+ | * [https://en.wikipedia.org/wiki/Selection_sort Selection Sort on Wikipedia] | ||
+ | * [https://docs.scala-lang.org/tour/polymorphic-methods.html Type Parameters - Scala] | ||
− | |||
| | | | ||
* '''Lab Activity 7''' | * '''Lab Activity 7''' | ||
Line 337: | Line 515: | ||
==== 11.03.20 ==== | ==== 11.03.20 ==== | ||
| | | | ||
− | '''Level 3 Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Level 3 Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''Level 3 Quiz''' | * '''Level 3 Quiz''' | ||
Line 345: | Line 527: | ||
==== 13.03.20 ==== | ==== 13.03.20 ==== | ||
| | | | ||
− | '''Merge Sort and Recursion''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Merge Sort and Recursion'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Gain an understanding of recursion combined with first-order functions and type parameters | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/merge_sort_algorithm.htm Merge Sort Algorithm] | ||
+ | * [https://javascript.info/recursion Recursion - Also discussed Linked-List, which is the next lecture] | ||
+ | * [https://www.scala-exercises.org/scala_tutorial/tail_recursion Tail Recursion] | ||
+ | * [https://docs.scala-lang.org/tour/higher-order-functions.html Higher-Order Functions - Scala] | ||
− | |||
| | | | ||
Line 354: | Line 545: | ||
==== 16.03.20 ==== | ==== 16.03.20 ==== | ||
| | | | ||
− | '''Linked List''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Linked List'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Understand the structure of a linked list | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/linked_list_algorithms.htm Linked List] | ||
+ | * [https://www.interviewbit.com/tutorial/arrays-vs-linked-lists/ Array v. Linked List] | ||
− | |||
| | | | ||
* '''Lab Activity 8''' | * '''Lab Activity 8''' | ||
Line 364: | Line 562: | ||
==== 18.03.20 ==== | ==== 18.03.20 ==== | ||
| | | | ||
− | '''Linked List Algorithms''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Linked List Algorithms'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Explore how various operations are performed on a linked list | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/linked_list_algorithms.htm Algorithm Examples] | ||
+ | * [https://www.codementor.io/codementorteam/a-comprehensive-guide-to-implementation-of-singly-linked-list-using-c_plus_plus-ondlm5azr Linked List and Operations] - Code is in C++ | ||
− | |||
| | | | ||
Line 373: | Line 578: | ||
==== 20.03.20 ==== | ==== 20.03.20 ==== | ||
| | | | ||
− | '''Stack and Queue''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Stack and Queue'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Use a linked list to implement the functionality of a stack and queue | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/stack_algorithm.htm Stack] | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/dsa_queue.htm Queue] | ||
− | |||
| | | | ||
Line 382: | Line 594: | ||
==== 23.03.20 ==== | ==== 23.03.20 ==== | ||
| | | | ||
− | '''Binary Tree and Traversals''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Binary Tree and Traversals'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Gain familiarity with the structure of binary trees and how to traverse existing trees | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/tree_data_structure.htm Trees] | ||
+ | * [https://en.wikipedia.org/wiki/Tree_traversal Tree Traversals (Wikipedia)] | ||
+ | * [https://en.wikipedia.org/wiki/Binary_expression_tree Expression Trees (Wikipedia)] | ||
+ | * [https://www.101computing.net/binary-expression-trees/ Expression Tree Examples] | ||
+ | * [https://www.hackerrank.com/contests/data-structure-tasks-binary-tree-union-find/challenges/binary-expression-tree Hacker Rank Question] | ||
− | |||
| | | | ||
* '''Lab Activity 9''' | * '''Lab Activity 9''' | ||
Line 392: | Line 614: | ||
==== 25.03.20 ==== | ==== 25.03.20 ==== | ||
| | | | ||
− | '''Binary Search Tree''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Binary Search Tree'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Explore an application of binary trees by using them for searching and sorting | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/binary_search_tree.htm BST] | ||
− | |||
| | | | ||
Line 401: | Line 629: | ||
==== 27.03.20 ==== | ==== 27.03.20 ==== | ||
| | | | ||
− | '''Genetic Algorithm Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Genetic Algorithm Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
− | * '''HW4: Genetic Algorithm''' | + | * '''Due HW4: Genetic Algorithm''' |
|- | |- | ||
Line 409: | Line 641: | ||
==== 30.03.20 ==== | ==== 30.03.20 ==== | ||
| | | | ||
− | '''Graph Representations and Breath-First Search''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Graph Representations and Breath-First Search'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Learn how to represent a graph in code and work with that representation | ||
+ | |||
+ | '''Reading/Reference''': | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/graph_data_structure.htm Graph Overview] | ||
+ | * [https://en.wikipedia.org/wiki/Adjacency_list Adjacency List] | ||
+ | * [https://www.tutorialspoint.com/data_structures_algorithms/breadth_first_traversal.htm BFS Overview] | ||
− | |||
| | | | ||
− | * Project Demo 3 | + | * '''Project Demo 3''' |
|- | |- | ||
Line 419: | Line 659: | ||
==== 01.04.20 ==== | ==== 01.04.20 ==== | ||
| | | | ||
− | '''Level 4 Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Level 4 Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''Level 4 Quiz''' | * '''Level 4 Quiz''' | ||
Line 427: | Line 671: | ||
==== 03.04.20 ==== | ==== 03.04.20 ==== | ||
| | | | ||
− | '''Pathfinding with Breath-First Search''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Pathfinding with Breath-First Search'''</big> | ||
+ | |} | ||
+ | |||
+ | '''Objective''': Find the shortest path between two nodes using BFS | ||
− | |||
| | | | ||
Line 436: | Line 683: | ||
==== 06.04.20 ==== | ==== 06.04.20 ==== | ||
| | | | ||
− | '''Review and Examples''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Review and Examples'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
− | * Project Demo 3 (alt) | + | * '''Project Demo 3 (alt)''' |
|- | |- | ||
Line 444: | Line 695: | ||
==== 08.04.20 ==== | ==== 08.04.20 ==== | ||
| | | | ||
− | '''MMO Quiz''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''MMO Quiz'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''HW5: MMO''' | * '''HW5: MMO''' | ||
Line 452: | Line 707: | ||
==== 10.04.20 ==== | ==== 10.04.20 ==== | ||
| | | | ||
− | '''Holiday''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Holiday'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
Line 459: | Line 718: | ||
==== 13.04.20 ==== | ==== 13.04.20 ==== | ||
| | | | ||
− | '''Holiday''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Holiday'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
Line 466: | Line 729: | ||
==== 15.04.20 ==== | ==== 15.04.20 ==== | ||
| | | | ||
− | '''Consultation week''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Consultation week'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
Line 473: | Line 740: | ||
==== 17.04.20 ==== | ==== 17.04.20 ==== | ||
| | | | ||
− | '''Consultation week''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Consultation week'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''HWb: Bonus Homework''' | * '''HWb: Bonus Homework''' | ||
Line 481: | Line 752: | ||
==== 20.04.20 ==== | ==== 20.04.20 ==== | ||
| | | | ||
− | '''(Exam week)''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''(Exam week)'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
Line 488: | Line 763: | ||
==== 22.04.20 ==== | ==== 22.04.20 ==== | ||
| | | | ||
− | '''Exam week - Final Exam''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''Exam week - Final Exam'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
* '''Final Exam''' | * '''Final Exam''' | ||
Line 496: | Line 775: | ||
==== 24.04.20 ==== | ==== 24.04.20 ==== | ||
| | | | ||
− | '''(Exam week)''' | + | {| width='100%' style='background-color:#ddd;' |
+ | |<big>'''(Exam week)'''</big> | ||
+ | |} | ||
+ | |||
+ | |||
| | | | ||
|- | |- | ||
− | |||
|} | |} | ||
=Assignments= | =Assignments= | ||
− | + | Assignment due dates are in the calendar. | |
+ | |||
+ | Assignments are announced by the course Slack channel. | ||
+ | |||
+ | Every lecture has a lecture question that is due by midnight the same day. | ||
+ | Submitting you work should be done in the respective GitHub repositories, as published in Slack. | ||
+ | |||
+ | == Homeworks == | ||
+ | ===HW1=== | ||
+ | [https://docs.google.com/document/d/1rrq5WjyOwupKH3GigH7crZ6elXv2ggZoSGrnP9hEMKU/view HW1 description] - Physics Engine | ||
+ | <!-- [https://docs.google.com/document/d/1rrq5WjyOwupKH3GigH7crZ6elXv2ggZoSGrnP9hEMKU/view#heading=h.4012eaop3dxl HW1 description] --> | ||
+ | |||
+ | ===HW2=== | ||
+ | [https://docs.google.com/document/d/1Kjo2nRqKAXY8JJaXxtAJY27RaS-_XnwNzOk3ekOjlZY/edit?usp=sharing HW2 description] - Calculator | ||
+ | |||
+ | ===HW3=== | ||
+ | [#HW3 HW3 description] | ||
+ | |||
+ | ===HW4=== | ||
+ | [#HW4 HW4 description] | ||
+ | |||
+ | == Projects == | ||
+ | * [https://docs.google.com/document/d/18mxVo3_T0WmFWljXpsOZ88h52fFtdL6JmpbUFFW1Pi0/edit?usp=sharing Project1 description] - JRPG | ||
+ | * [https://docs.google.com/document/d/1-Rpz1nUcWKTzMJVYDwFKj6Nq8qgy5YFlpFDxDXRZVlQ/edit?usp=sharing Project2 description] - JRPG GUI | ||
+ | * | ||
=Resources= | =Resources= | ||
+ | Look for resources in the calendar, after the lecture objectives. | ||
+ | |||
+ | ===GitHub=== | ||
+ | * [https://idratherbewriting.com/learnapidoc/pubapis_github_desktop_client.html Tutorial about GitHub Desktop] | ||
+ | * [https://missing.csail.mit.edu/2020/version-control/ About version control] - a lecture from MIT | ||
===Scala=== | ===Scala=== | ||
Line 512: | Line 823: | ||
* [http://www.tutorialspoint.com/scala/scala_if_else.htm Scala Conditionals] | * [http://www.tutorialspoint.com/scala/scala_if_else.htm Scala Conditionals] | ||
* [https://www.tutorialspoint.com/scala/scala_data_types.htm Scala: Basic Types] - We'll primarily use Int, Double, Char, String, Boolean, and Unit | * [https://www.tutorialspoint.com/scala/scala_data_types.htm Scala: Basic Types] - We'll primarily use Int, Double, Char, String, Boolean, and Unit | ||
+ | |||
+ | * [https://www.playframework.com/ Play framework] | ||
+ | |||
+ | * [https://mvnrepository.com/ MVN Repository] | ||
===IDE=== | ===IDE=== | ||
Line 521: | Line 836: | ||
===Misc=== | ===Misc=== | ||
* [https://app.sli.do/event/wkqtbios/live/questions Slido for Q&A sessions] | * [https://app.sli.do/event/wkqtbios/live/questions Slido for Q&A sessions] | ||
+ | * [https://missing.csail.mit.edu/ The missing lecture at MIT] about basic tools and techniques for CS. | ||
+ | |||
+ | ==For another time...== | ||
+ | * [https://github.com/NARKOZ/hacker-scripts Personal automation examples] | ||
+ | * Apollo 11, computer warnings 1201,1202 while landing - [https://qr.ae/TzsGtr story on Quora] |
Revision as of 10:00, 14 February 2020
Introduction to Computer Science II
Shortcuts: Calendar | Assignments | Resources | Today (if there is a class)
Introduction
What is Computer Science?
- From Wikipedia:
- Computer Science is the study of processes that interact with data and that can be represented as data in the form of programs. It enables the use of algorithms to manipulate, store, and communicate digital information.
- A video version from Udacity
Administrative information
Course Syllabus
Communication:
- via slack: workspace name: bitl-cs2-2020
- via email: use instructor's email address for personal communication
- office hours: by appt.
Deliverables
Deliverables in this course include the following:
- Lecture questions - due by midnight on the next day, unless otherwise specified.
- Lab activities
- Homework
- Quizzes as scheduled on the calendar
- Final exam
Calendar
Date | Topic | Deliverables | |
---|---|---|---|
06.01.20 |
|
||
08.01.20 |
Objective: Setup your IDE (IntelliJ) for Scala and Python development on your laptop and write a simple Scala program. Reading/Reference:
|
||
10.01.20 |
Objective: Write a program that can read the lines of a file in a strongly typed language (Scala) and store values in a data structure Reading/Reference:
|
||
13.01.20 |
Objective: Test your own code without needing AutoLab HW1 announced. Reading/Reference:
|
||
15.01.20 |
|
||
17.01.20 |
Objective: Define and use classes Reading/Reference:
|
||
20.01.20 |
Objective: Describe how the program stack and heap store values in your program Reading/Reference: |
||
22.01.20 |
Objective: Use a debugger to see the state of your program during execution Reading/Reference:
|
||
24.01.20 |
|
||
27.01.20 |
Objective: You will be able to write abstract classes and concreted classes that inherent an abstract class Reading/Reference: |
||
29.01.20 |
|
| |
31.01.20 |
Objective: You will study polymorphism and apply it to use JSON in a strongly typed language Reading/Reference:
|
||
03.02.20 |
Objective: You will gain experience with the state design pattern to dynamically change the behavior of an object Reading/Reference: |
||
05.02.20 |
Objective: Gain more familiarity with the state design pattern by reviewing the Jumper code |
||
07.02.20 |
Objective: Gain more familiarity with the state design pattern |
||
10.02.20 |
Objective: Build desktop GUIs Reading/Reference:
|
||
12.02.20 |
Objective: Become familiar with the MVC architecture pattern and its benefits Reading/Reference: |
||
14.02.20 |
|
||
17.02.20 |
Objective: Write programs with multiple pieces of code executing at the same time Reading/Reference: |
| |
19.02.20 |
|
| |
21.02.20 |
Objective: Write unit tests for actors and connect to a MySQL server Reading/Reference: |
||
24.02.20 |
Objective: Enable 2-way communication between the browser and web server Reading/Reference: |
||
26.02.20 |
Objective: Connect a Scala front end to a web socket server Reading/Reference: |
||
28.02.20 |
|
||
02.03.20 |
Objective: See an example using the MMO architecture form this class |
| |
04.03.20 |
Objective: Explore the MMO architecture applied to the course project |
||
06.03.20 |
|
| |
09.03.20 |
Objective: Explore custom sorting in scala and gain experience with function and type parameters Reading/Reference: |
| |
11.03.20 |
|
| |
13.03.20 |
Objective: Gain an understanding of recursion combined with first-order functions and type parameters Reading/Reference: |
||
16.03.20 |
Objective: Understand the structure of a linked list Reading/Reference: |
| |
18.03.20 |
Objective: Explore how various operations are performed on a linked list Reading/Reference:
|
||
20.03.20 |
Objective: Use a linked list to implement the functionality of a stack and queue Reading/Reference: |
||
23.03.20 |
Objective: Gain familiarity with the structure of binary trees and how to traverse existing trees Reading/Reference: |
| |
25.03.20 |
Objective: Explore an application of binary trees by using them for searching and sorting Reading/Reference: |
||
27.03.20 |
|
| |
30.03.20 |
Objective: Learn how to represent a graph in code and work with that representation Reading/Reference: |
| |
01.04.20 |
|
| |
03.04.20 |
Objective: Find the shortest path between two nodes using BFS |
||
06.04.20 |
|
| |
08.04.20 |
|
| |
10.04.20 |
|
||
13.04.20 |
|
||
15.04.20 |
|
||
17.04.20 |
|
| |
20.04.20 |
|
||
22.04.20 |
|
| |
24.04.20 |
|
Assignments
Assignment due dates are in the calendar.
Assignments are announced by the course Slack channel.
Every lecture has a lecture question that is due by midnight the same day. Submitting you work should be done in the respective GitHub repositories, as published in Slack.
Homeworks
HW1
HW1 description - Physics Engine
HW2
HW2 description - Calculator
HW3
[#HW3 HW3 description]
HW4
[#HW4 HW4 description]
Projects
- Project1 description - JRPG
- Project2 description - JRPG GUI
Resources
Look for resources in the calendar, after the lecture objectives.
GitHub
- Tutorial about GitHub Desktop
- About version control - a lecture from MIT
Scala
- Scala Basics - (Except for classes, cases classes, and traits which will be covered later in the semester)
- Scala Conditionals
- Scala: Basic Types - We'll primarily use Int, Double, Char, String, Boolean, and Unit
IDE
Algorithms
Misc
- Slido for Q&A sessions
- The missing lecture at MIT about basic tools and techniques for CS.
For another time...
- Personal automation examples
- Apollo 11, computer warnings 1201,1202 while landing - story on Quora