course-info

Welcome to JavaScript Programming for Planners & Designers!

Syllabus

Course Overview

Dashboards, maps, and other interfaces that enable the display, analysis, and in some cases generation new geospatial data, are often the end product of a data analysis or modeling process. In this course we’ll focus on the interface and interaction aspects of creating these products. You learn to design and build interfaces to help users access the value promised by geospatial data, modeling, and analysis.

As this is a JavaScript course, we’ll be doing a lot of programming in JavaScript. Because of the nature of interactive interfaces with JavaScript, we’ll also be doing a lot of work with HTML and CSS.

This course is the first part of a track in MUSA in which you will learn to build data products. In the second course (Geospatial Cloud Computing & Visualization) we’ll focus on the data pipeline aspects of building these products. The courses are best together, but they can each also stand alone.

Objectives

Course Outline

Throughout this 15 week course, you’ll be learning to program applications using HTML, CSS, and Javascript. In addition to programming skills, we will stress the “tools of the trade”: you will use a text editor designed for programming; your code will be turned in with git and managed through GitHub. You will be programming in the same way and with some of the same tools as software developers in the industry.

We’d like to keep the course somewhat freeform — there are basic skills which must be touched on, but your interests will help shape the direction to a large extent. Most of your practice will come through building three projects in JavaScript, including a self-directed interactive final project that can take any topic you find interesting (so long as you use tools from our class).

This syllabus is a living document. As the course progresses, greater detail will be added to reflect the content of each week.

Exercises

Projects

There will be two structured projects that everyone will take part in:

  1. A Story Map – Story maps utilize maps, text, and multimedia to present interactive narratives to engage users and provide accessible geographic context. You will create a story map based on a topic of your choosing. The focus of this project will be on explaining some topic through a geospatial lens.
  2. A Dashboard – Dashboards are a type of data visualization often use common visualization tools such as graphs, charts, and tables to summarize and present related data sets in a way that makes the information easier to understand. You will choose some publicly available data to build a dashboard around, while honing in on the actual use case that drives the work. The focus of this project will be on helping users make decisions.
  3. An Interactive Final Project – Your final project for the class will be decided through a project proposal negotiated with me. The projects should build upon many of the concepts learned throughout the class, and incorporate some significant amount of interactivity. The focus of this project will be on engagement – i.e. inviting members of the public to create or add to a dataset in some way.

    Final projects will be done in groups or independently — criteria for success will be hammered out in the final project proposal and group projects (if we have any) will be expected to engage with a wider scope and greater difficulty than individual projects. Group projects will also leverage the power of GitHub to make collaboration simpler and more transparent for grading purposes (this will make more sense once you’re familiar with GitHub).

Work Evaluation & Feedback

Regarding grading, your successful completion of the class will be dependent on the successful completion of the minimum requirements of the three projects laid out above.

More thorough evaluation of and feedback on your work will come in the form of:

  1. Code reviews – You will submit pull requests (PRs) which the course instructors will leave feedback and suggestions on.
  2. Linters – You will learn to read the output from linters and accessibility checkers, and to use them to debug and improve your work.

Software

Supplimentary Resources

There will be additional resources on topics covered in the class in the resources/ folder.

Schedule

Subject to change as necessary!

Week Date Topic Project
1 30 Aug Getting started
Intro to Web Tech
Story Map
2 06 Sep Intro CSS (selectors)
Debugging layouts
3 13 Sep The Box Model
Flexbox and Grid Layouts
4 20 Sep JS Style & Linting
Working with Data in JS
5 27 Sep DOM Manipulation Dashboard
6 04 Oct Asynchronous Behavior #1 (events)
7 11 Oct Asynchronous behavior #2 (requests)
Browser APIs
8 18 Oct Map Tiles
9 25 Oct 3rd-party APIs Final
10 01 Nov  
11 08 Nov  
12 15 Nov  
  23 Nov  
13 29 Nov  
14 06 Dec Project presentations
  13 Dec Overflow presentations
(if necessary)
 

Academic Integrity

In compliance with Penn’s Code of Academic Integrity, blatantly and egregiously copying another student’s work will not be tolerated. However, because this course is designed to help prepare students for work in professional programming environments, copying and pasting is not universally prohibited: we encourage students to work together and to freely use the internet as a resource for finding solutions to vexing problems. Citing every copied and pasted line of code is not necessary. Large patterns or multiple lines of code taken from external sources should, however, be noted with in-code comments. If an instance is unclear, you should feel free to speak with the instructors.

Note about AI tools…

I don’t mind generative AI tools to help with coding – I use them myself on a limited basis. If you use Chat GPT or any other AI tool, note that you are subject to the same guidelines around citation as above.

Also, understand that many of these tools often make mistakes that can be difficult to identify if you don’t know what you’re doing. If you and can verify that the generated code is correct, cool. But if you come to me or the TA to help debugging something generated with AI, it is always best to disclose the source of the code (for that matter, I’ll be able to tell), as it would be with any code.