Course Description

This course is a study of a class of programming languages and tools known as scripting languages. Topics include: writing scripts to control and connect other programs, strengths and weaknesses of interpreted languages, extending scripting languages to include new functionality, embedding functions of a scripting language in other tools, and the syntax and usage of regular expressions. Programming projects in multiple languages will be required.

Course Information

Meeting Times

Mondays & Wednesdays

4:00 PM - 5:15 PM

Sherman 013

TA

Taneeya Satyapanich
taneeya1 at umbc dot edu

Office Hours: ITE 349
Wednesdays 10:30 AM - 12:30 PM

Instructor

Dr. Bryan Wilkinson
bryan dot wilkinson at umbc dot edu

Office Hours: ITE 373
Mondays 10:30 AM - 11:30 AM
Thursdays 3:00 PM - 4:30 PM
or by appointment

Syllabus

Course Objectives

  • Explain the common characteristics of scripting languages and be able to differentiate them from systems languages
  • Apply regular expressions to tokenize and validate data in a variety of languages
  • Author shell scripts to automate workflows by leveraging UNIX utilities
  • Utilize R to solve a wide range of statistical and numerical problems
  • Understand the nuances and differences in a web based environment as compared to more traditional environments
  • Employ JavaScript as a general purpose web-based client-side scripting language
  • Define and develop Ajax applications and understand how different Ajax applications are from traditional web applications
  • Utilize a variety of languages to develop interactive web applications

Class participation

Education works better when we're all actively engaged in it. It's more effective and more interesting when there are questions, comments, challenges, and occasional rants.

Exams and quizzes

We will have a quiz for each major topic in the course in class and a comprehensive final examination.

Homeworks and Projects

There will be 5 programming projects in the course. Each project will consist of several small problems to solve.

Textbook

There is no required textbook for this course. Many online resources exist for the topics we are studying, and will be linked to in both the lectures as well as in the schedule below.

Online Resources

This course will use Blackboard to record grades as well as send important announcements to the whole class. We will also use Piazza as our main discussion forum. To join the Piazza for this class, sign up at https://piazza.com/umbc/spring2018/cmsc433. Programming assignments will be submitted through GitHub Classroom, which will be covered when the first programming assignment is assigned. All lecture content and assignments will be hosted on the course website.

Expectations

Unless otherwise specified, all assignments are to be turned in by midnight on the day they are due (which is given in the schedule). It is your responsibility to contact the instructor in advance if this will not be possible. There will be a penalty for every day an assignment is late. Students are expected to adhere to all university policies regarding student conduct, academic and otherwise, as posted on the University web site and in the Student Handbook. Academic dishonesty of any kind will be handled in accordance with University policy.

Regular class attendance is expected.

Grading Policy

Semester grades will be based on the following components. The percentages are initial estimates and subject to change to reflect the actual number and complexity of the quizzes, homework assignment and projects.

  • Homework and programming assignments: 68%
    • Regular Expressions 8%
    • Shell Scripting 15%
    • R 15%
    • Web + JavaScript 15%
    • PHP 15%
  • Quizzes 16% (Best 4 of 5)
  • Final exam 16%

Assignments

We will have several programming and homework assignments. Doing these is critical to learning the material. Consequently, your performance on these assignments will count towards about 68% of your grade. Homework assignments will have a strict due date and penalties will be applied for late homeworks according to the following scale.

Each student will be given 3 free late days to be used at their discretion on the short projects throughout the semester. You may choose to use all 3 late days on a given project, or split them up among several projects the choice is yours. To claim free late day you must email the instructor before the assignment is due, with the subject line "LATE DAY CMSC 433 <ASSIGNMENT_NAME>" asking to use a free late day. Because of the high volume of these emails, do not expect a response. If you wish you ask a question at the same time, please send two separate emails. If you wish to utilize an additional free late day, you must request an additional free late day via email before midnight. Late days will be recorded on Blackboard, and will be incremented when the corresponding assignment is being graded. (Idea from Daniel Hood)

  • -10% one day late
  • -20% two days late
  • -30% three days late
  • -40% four days late
  • -100% homeworks more than 4 days late will receive a 0

Counseling Center Resources

Diminished mental health can interfere with optimal academic performance. The source of symptoms might be related to your course work; if so, please speak with me. However, problems with other parts of your life can also contribute to decreased academic performance. UMBC provides cost-free and confidential mental health services through the Counseling Center to help you manage personal challenges that threaten your personal or academic well-being.

Remember, getting help is a smart and courageous thing to do -- for yourself and for those who care about you. For more resources get the Just in Case mental health resources Mobile and Web App. This app can be accessed by clicking: http://counseling.umbc.edu/justincase

The UMBC Counseling Center is in the Student Development & Success Center (between Chesapeake and Susquehanna Halls). Phone: 410-455-2472. Hours: Monday-Friday 8:30am-5:00pm.

Student Disability Services (SDS)

UMBC is committed to eliminating discriminatory obstacles that may disadvantage students based on disability. Services for students with disabilities are provided for all students qualified under the Americans with Disabilities Act (ADA) of 1990, the ADAAA of 2009, and Section 504 of the Rehabilitation Act who request and are eligible for accommodations. The Office of Student Disability Services (SDS) is the UMBC department designated to coordinate accommodations that would allow students to have equal access and inclusion in all courses, programs, and activities at the University.

If you have a documented disability and need to request academic accommodations, please refer to the SDS website at sds.umbc.edu for registration information and to begin the process, or alternatively you may visit the SDS office in the Math/Psychology Building, Room 212. For questions or concerns, you may contact us through email at disAbility@umbc.edu or phone (410) 455-2459.

If you require accommodations for this class, make an appointment to meet with me to discuss your SDS-approved accommodations.

Statement on Respect

Students in this class are encouraged to speak up and participate during class meetings. Because the class will represent a diversity of individual beliefs, backgrounds, and experiences, every member of this class must show respect for every other member of this class.

From CSU, Chico's Office of Diversity and Inclusion

Academic Integrity

UMBC Statement of Academic Integrity

By enrolling in this course, each student assumes the responsibilities of an active participant in UMBC's scholarly community in which everyone's academic work and behavior are held to the highest standards of honesty. Cheating, fabrication, plagiarism, and helping others to commit these acts are all forms of academic dishonesty, and they are wrong. Academic misconduct could result in disciplinary action that may include, but is not limited to, suspension or dismissal.

Academic Integrity Tips

Here is some guidance on what we expect from you. Some of this was adopted from David Matuszek's policies at UPenn.
You may:

  • Discuss the assignments with one another.
    • If you don't understand something about the assignment, ask.
    • The best people to ask are the instructor and TA, but there is no harm in talking to other students about the assignments.
  • Help others debug their work.
    • Sometimes other people will notice immediately something that you have spent hours trying to find. Maybe they've had the same problem. Being "stuck" for long periods is not a good way to learn.
    • More often than not, your errors become obvious when you try to explain your program to someone else. The other person doesn't even have to be a programmer; in fact, it's probably better if they aren't a programmer. It's often said that explaining your program to your dog can be a big help.
    • If you help someone else, don't overdo it--don't write their program for them. Help them understand their errors and how to fix them, but don't do it for them. Teach them how to catch a fish rather than buying them a flounder and cooking it with a white wine sauce.
    • If someone is helping you, do not let them take a copy of your program. Not everyone is honest.
  • Use, without attribution, anything we post to the Web.
    • If we post it, it's so that you can use it. We will know where it came from.
    • However, it's an important habit in general to give credit to any source that you "borrow" code from -- it's the honest thing to do

You may not:

  • Work together on the same program.
    • We emphasize this one because this is where we always hear, "but I didn't understand."
    • Talking about the program is fine, but when it comes to writing the program, do it by yourself.
    • Writing programs jointly is unacceptable. You will very probably be caught and that will be grounds for failing the course.
    • If you write a program jointly and try to hide the fact by making cosmetic changes, this will be regarded as further evidence that you know the rules and are being deliberately dishonest.
    • Working together may be acceptable in your home culture, and it is usually encouraged in business; it but working together is not acceptable in this educational system.
    • If you discuss your assignment extensively with another student, and make reasonably detailed plans about how you will do it, and then go off and each write each program separately, you will be surprised at how different they turn out. We have never had a problem with programs that were "accidentally" the same.
  • Copy another's code.
    • If you copy someone else's program -- even just a part of it -- that fact will be noticed.
  • Allow your code to be copied. Fair or not, this is the rule.
    • If you and someone else turn in the same program, both of you are guilty, regardless of who did the actual work.
  • Lend your code to someone else.
    • There is no good reason to do this, and if they copy your program, you are at fault.
  • Leave your code lying around where someone else may copy it.
    • Please be careful with your disks, flash drives and your program listings. Please.
    • If you lose a disk, just tell us. Tell us right away. So long as we know about it before we discover that someone else has turned in the same program, you won't be in any trouble.
  • Use any code from textbooks or the Web without our permission.
    • Let's be clear. There is no problem with looking up how to do something, and copying two or three lines to, say, open a file, or create a Frame. Even an entire method of, say, ten lines, should be OK -- particularly if it's a general-purpose thing that might be used in a lot of different programs.
    • Finding code that does a significant part of your assignment, and using it, particularly if you use it without attribution, is a violation.
    • For the most part, it should be pretty obvious what is assignment-specific and what is general-purpose. If in doubt, ask me.
  • Have someone else write your program for you.
    • This one is pretty obvious.

If you think you may have accidentally broken a rule, come and talk to us about it. You will be much better off than if we discover it ourselves.

Email Policy

I get a lot of email, to help ensure better communication between everyone, please adhere to the following policies

  • Include "CMSC 433" (all caps) in the subject
  • Don't include source code in email, instead commit what you have to GitHub
  • I will make every attempt to respond with in 24 hours. If I do not respond with in 48 hours (excluding weekends) please send me a gentle reminder

Office Hours Policies

Office hours are an invaluable resource for getting help in this course. If your schedule doesn't work with my office hours, email me, or just stop by and see if I am there, I still want to help you!

To make office hours more effective for everyone, please have a specific question or questions in mind to ask. Bring your work with you so I can see what you have already tried. This will help me help you efficiently while ensuring that everyone can meet with me who needs to. If you don't know where to start, that is a valid question! Please stop by and chat.

Assignments

Assignment Topic Released Due GitHub Link
Project 1 Regular Expressions Wednesday 2/7 Wednesday 2/21, 11:59 PM https://classroom.github.com/a/qvOJYcdi
Project 2 Bash Monday 2/26 Monday 3/12, 11:59 PM https://classroom.github.com/a/AJeuageo
Project 3 R Wednesday 3/14 Monday 4/9, 11:59 PM https://classroom.github.com/a/4KGf0URx
Project 4 Web + JavaScript Monday 4/16 Monday 4/30, 11:59 PM N/A
Project 5 PHP Monday 4/30 Monday 5/14, 11:59 PM TBA

Schedule

Date Topic Resources Assignments
Monday 1/29 Introduction View PDF Launch Binder Jupyter
Wedensday 1/31 Regular Expressions: Matching View PDF Launch Binder Perldoc
Wikibook
Online Regular Expression Tester
Monday 2/5 Regular Expressions: Backreferces & Substitution View PDF Launch Binder Lookaround Information
Wednesday 2/7 Regular Expressions III View PDF Launch Binder
Git & GitHub View PDF Launch Binder
Python 2.7 re module documentation
Git tutorial from BitBucket
Project 1 Out
Monday 2/12 Bash I: Unix Utilities & Variables View PDF Launch Binder
Shell Scripting Tutorial
bash Kernel for Jupyter
Wednesday 2/14 Bash II: Redirection & Control Structures View PDF Launch Binder
Bash-Hackers Wiki Regex Quiz
Monday 2/19 Bash III: Input & Processes View PDF Launch Binder
Wednesday 2/21 Bash IV: grep, awk, sed & Functions View PDF Launch Binder
GNU awk User's Guide
GNU sed manual
Project 1 Due
Optional Feedback Survey (Complete by 2/24 Please)
Monday 2/26 Bash V: Network Uses and Debugging View PDF Launch Binder Project 2 Out
Wednesday 2/28 R I: Data Types, Math View PDF Launch Binder Advanced R
Monday 3/5 R II: Control Structures & Functions View PDF Launch Binder Shell Scripting Quiz
Wednesday 3/7 R III: Objects, Statistics, and Packages View PDF Launch Binder
Monday 3/12 R IV: TidyR, DplyR, & GGplot2 View PDF Launch Binder The TidyVerse
TidyR and DplyR Cheatsheet
ggplot2 Cheatsheet
Project 2 Due
Wednesday 3/14 R V Class Cancelled Project 3 Out
Monday 3/26 Web I R V: Strings, Regexes, Misc. View PDF Launch Binder
Wednesday 3/28 Web II Web I & II View PDF Launch Binder MDN: HTML
MDN: CSS
R Quiz
Monday 4/2 JavaScript I: Background & Basics View PDF Launch Binder Eloquent JavaScript
MDN: JavaScript
R Quiz
Wednesday 4/4 JavaScript II: Functions, Objects, & DOM View PDF Launch Binder MDN: Introduction to the DOM
The DOM as a Weekly Schedule (Analogy)
Monday 4/9 JavaScript III: Standard Libraries, Events, & Canvas View PDF Launch Binder MDN: Events Developer Guide Project 3 Due
Wednesday 4/11 JavaScript IV: Storage & AJAX View PDF Launch Binder
Monday 4/16 JavaScript V: Misc. View PDF Launch Binder Project 4 Out
Wednesday 4/18 PHP I View PDF Launch Binder Hacking with PHP
PHP The Right Way
Monday 4/23 PHP II: Arrays, Functions, & Files View PDF Launch Binder JavaScript Quiz
Wednesday 4/25 PHP III: Super Globals, Headers, & Objects View PDF Launch Binder
Monday 4/30 PHP IV: Regex, Sorting & Networking View PDF Launch Binder Project 4 Due
Project 5 Out
Wednesday 5/2 PHP V: Misc. View PDF Launch Binder PHP.earth Security
Survive the Deep End: PHP Security
Monday 5/7 Julia View PDF Launch Binder Introducing Julia Wikibook
Julia Documentation
Wednesday 5/9 Ruby View PDF Launch Binder Chris Pines' Learn to Program
Wikibooks: Ruby
PHP Quiz
Monday 5/14 Review View PDF Launch Binder Fall 2017 Final Project 5 Due

Final Exam

Section Meeting Time Exam Date Exam Time
01 MoWe 4-5:15 Monday May 21 3:30PM-5:30PM