React Native Application Development Autumn 2017

Course number: 51034 Location:TBD Time: TBD 5:30pm-8:30pm
Professor: Adam Gerber, PhD

Email:
gerber@uchicago.edu

Office: TBD
Office Hours: TDB 8:30pm to 10:30pm - directly after class

TA: John Hadidian Baugher jhadidianbaugher@gmail.com Office hours: TBD: Gleacher Center downtown from 5:15 PM - 7:15 PM on Mondays


Course Information

Content: Cross platform development remains the holy grail of mobile development. While there have been many attempts to solve cross-platform development, all of the solutions to date have either added their own complex and idiosyncratic layer onto the software stack, or been woefully lacking in performance. React Native is different; it uses native iOS and Android components, and thus performance is at parity with native iOS and Android. Perhaps the killer application of React Native is OTA or Over The Air updates which allows developers to provide updates directly to users bypassing the App/Play stores. React Native is a game-changer for mobile technology and it is perhaps the first technology to realistically hold the promise of convergence among Android, iOS, and Web.

In this course we will cover the economics of cross-platform development and alternatives to React Native, the history of cross-platform and JavaScript, the foundations of JavaScrirpt and then we will build several React Native applications during labs in class, covering Asynchronous, Networking, Navigation, Persistence and so on. By the end of this course, students will have a very good understanding of the cross-platform market, the key differentiators of React Native, and they will understand how to build React Native applications.
All the course content, including; videos, slides, projects, and labs are all located here (http://gerber.cs.uchicago.edu/react/content/)
IDE: We will be using WebStorm, which is a JetBrains (maker of IntelliJ) product. You may also use IntelliJ ultimate edition for students. Webstorm is a fork of IntelliJ and they work exactly the same. WebStorm is an outsanding, feature-rich, and extremely forgiving IDE available on all major platforms. Git is an indispensable and integral part of any mobile project, and we will be using git throughout this course.  A Mac laptop is strongly recommended, however it is possible to develop on a PC. Students are required to bring their laptops to class to participate in labs; and the lecture hall will be outfitted with powerstrips for students to plug-in their laptops.

Local source-control: We will be using git throughout this course. Git is an outstanding, distributed source-control tool and fast becoming the de-facto standard in software development. WebStorm has an excellent built-in git-gui tool.

Download/install Git here (http://git-scm.com/downloads/)
Remote source-control We will be using Bitbucket. Please register here 
Textbook We will be using the following textbooks for this course: Mastering React Native: ASIN: B01LPRN15M.  ES6 and Beyond: ISBN-10: 1491904240.  Textbooks may be subject to change as the date of the course approaches.
Slides Slides are available in powerpoint format. They are located in: content/slides/.
Labs During labs, we will use the course tools to create applications together in class. The TA's are there to help you with the tools and with Android Studio.

Projects & due dates

You will have four evaluated projects throughout this course and one Team project. All projects will closely follow the learning objectives from the textbooks and lectures. For instructions for each project, see the projects subdirectory in the content directory (see link above).
Project Short Description Due Date
proZen A simple app which teaches the principles of Navigation, styling, flexbox, and layout in React Native. TBD
proListView Progressing to ListViews which are among the most important components on mobile devices. We will create a contacts manager for this project. TBD
proWebService Most apps interact with data on a server. You will learn how to interact with web-services in this project. TBD
Team You will work with your assigned team to create some modular functionality for the final project. This can be google speech search, fingerprint MFA,  using the Yelp api, and so on. TBD
proReactFinal Your individual final project. You will create your own version of the Favorite Places app in React Native. The app will include functionality from all the previous lessons. For those that have already taken Android App development, you will be very familiar wit the Yelp API. TBD

Projects evaluation criteria


Final Project Presentation

Each student will have 15 minutes to present their final project. You must speak to your git repo and you may have optional slides. Address the following: Demo the app. Explain the architecture. What were the greatest challenges? What did you learn?

Team presentations

For your presentation - no more than 15mn with 5mn Q&A. Elect a captain who will initialize the git repo and be the git admin. Report to your captain with your GibLab user account name. The captain will create a public repo on GitLab and give his/her team-mates WRITE access. You may use power-point slides or other visual aids - which should be included at the head of the git project. I encourage you to use branches to demonstrate variations for possible solutions. You may have to deal with merge conflicts and resolve them. See video on resolving merge conflicts using IntelliJ products here: /content/videos/merge.webm Criteria for evaluation of team presentation: 34% Is the source code well organized, and demonstrating variations. 33% Is the content fresh, rich, and well-organized. 33% Is the content presented well and with style.

Exams

There will be one midterm exam in this course. The exam will be multiple choice questions.

Exam Length Exam Date Grade
Midterm exam 60 minutes TBD 20% of final grade

Missed exams policy

There are no make-up exams in this class. If you miss your midterm exam, the midterm exam points are added to your final project weight making the final project worth 51% rather than 31% of the final grade.


Participation

Class participation is 10% of the final grade. The participation evaluation will be based on: your questions/comments during class, your posts/replies to the Piazza, your willingness to help others during lab, and your presentation of project solutions when called on to do so. In addition, ten finalists will be chosen to present their final-projects to the class.


Final Evaluation

The final grade is determined as follows:

Weight
proZen 13%
proListView 13%
proWebService 13%
proReactFinal 31%
Midterm 20%
Class participation 10%

Possible Curve

Be advised that MPCS policy dictates that no more than 30% of the students in any MPCS course may receive an A. In most cases, I will curve the raw scores up to award as many A's as possible. An A is defined as 93% or higher. In rare cases, I will curve the raw scores grades down to conform to school policy. This policy is in place to protect students from grade inflation.

Evaluations are Final and Non-negotiable:

Project evaluations are final and non-negotiable. The TA for this course is experienced and fair. Please do not ask me to intervene to change your grade if you are dissatisfied with a project evaluation. The only way I would intervene is if there was a gross miscarriage of process, e.g. the TA/grader fails to evaluate any assignments at all, or moves to an isolated island with no internet connection and never comes back. If you are dissatisfied with an evaluation, you may appeal to me, describing why you feel you were not treated fairly, and I will note your dissatisfaction in the gradebook. This may mitigate in your favor when I assign final grades.

Getting Help

I will be available during office hours after each class. One of the best ways to get help is to schedule an appointment with either me or John remotely. With google hangouts, or TeamViewer + phone, we can work through any problem together on the phone as we share desktops. The pace of this course is rapid, so please email me or come to office hours if you feel you're falling behind or need help.

Piazza

Please feel free to post to Piazza. Piazza is the best place to get help quickly. To post to Piazza, go to: TBD The TA's and I will monitor Piazza as frequently as possible and often be able to answer immediately. Students are encouraged to help their peers on Piazza by contributing when it is convenient.

Course Software

WebStorm: https://www.jetbrains.com/shop/eform/students
[alternatively] IntelliJ: https://www.jetbrains.com/shop/eform/students
Git: http://git-scm.com/downloads/