Syllabus

Subject to revision during the first week of class.

INF 380P: Introduction to Programming, Fall 2022

Instructor: Prof. Elliott Hauser

Teaching Assistant: TBD

Location: UTA 1.208 (and remote as indicated on Materials page)

Office hours: Schedule here (UTMail or Google account required), or contact me. All office hours will be conducted via Zoom.

Official Course Description

INF 380: Introduction to Programming (3 credits)

Introduction to common concepts and constructs of modern computer programming such as classes and objects, methods, inheritance, data types, variables, operators, procedures, and code libraries. Development of programmatic solutions to specific computing problems and design applications for modern computing platforms such as desktop, tablet, mobile, and the World Wide Web. Intended for students with no significant prior programming experience. Offered fall and spring.

Overview

This course is an introduction to Programming as a skill, a discipline, and a profession for graduate students. We’ll dive into hands-on programming from day one and progress to evaluating, using, and contributing to open source libraries and frameworks. We’ll focus equally on reading and writing code. Students will leave the course with real skills, an ability to learn new programming technologies, and an understanding of how to incorporate open source code into their projects. It will serve as an appropriate foundation for students seeking a career in programming and indispensable background for any information professional needing to evaluate, communicate with, or work with programmers or code.

Objectives

At the end of this course, students should:

  • Have the skills required to solve problems by creating and modifying programs and systems, using modern programming tools.

  • Have the knowledge of basic programming concepts, their appropriate usage, and how and where to learn more.

  • Have an attitude of confidence when reading, writing, or discussing computer code

Students will be prepared to integrate these skills and knowledge with other iSchool courses in Databases, Web Development, User Experience and others. Students will also be well versed in common tools and workflows used by developers and development teams.

Course Format: In-person, with virtual components

While originally taught in-person, this course will include both in-person and remote elements. In changing the modality of this class in response to the Covid pandemic, I have come to believe that a hybrid format offers great advantages over either entirely in-person or entirely remote modalities. You will gain valuable skills switching seamlessly between in-person and remote technical contexts, and gain confidence performing highly in either. This will benefit you greatly in future professional settings. We will also be able to gracefully transition to all-remote if circumstances so require. While students should be prepared to come to all in-person classes on the schedule, including the first day of class, I will endeavor to provide effective ways to participate remotely if any student becomes unable to attend due to illness.

Synchronous Design

For both in-person and remote classes, students should be available synchronously during the scheduled class times. While the affordances of in-person interaction are ideal for learning to program collaboratively, we will utilize remote collaboration and communication tools to their fullest. Many courses will involve synchronous interaction with your peers, and other activities will utilize asynchronous tools. This mimics professional programming practice, which commonly involves a mix of both modes of collaboration.

Flipped Design

Almost all of the content consumption (readings, videos, etc) will be pushed outside of the class sessions. During class I’ll give short talks or walk through examples, but we’ll focus on completing in-class exercises almost every day, which will be due by midnight if you need extra time (see below). I’ll help answer questions and provide clarification, but understanding the concepts and techniques in the content I assign you will be essential for completing the exercises in class. Failure to do this will be a serious hindrance to understanding programming, completing the take-home exercises, and doing well in the class.

Interaction with readings will be tracked by the Runestone textbook platform, but are not a formal component of the grade. You and I will both be able to see how and whether you engaged with our course readings. If you run into difficulties and have not engaged with the relevant readings, that will be a logical first place for me to send you.

Real-world Tools

This class will introduce you to and utilize many of the tools that real development teams use for collaboration, coding, and communication. This will include Github, Jekyll, text editors, videoconferencing, persistent online chat, and screensharing. By the end of the course you should be prepared to collaborate on code effectively with others in a variety of styles and via a variety of tools.

There are many real-world tools we will not use in this class. Jupyter notebooks, Integrated Development Environments (IDEs), Linux virtual machines, and command line interfaces are examples of tools that professionals use that we will not. You are welcome to and encouraged to use these tools outside of class or in other classes as ways to extend your growing skills. But I discourage you from using them for assignments, since you will be required to turn in your work using the educationally oriented tools I’ve selected. I’m unable to provide support if code you wrote in another tool doesn’t work on the platforms we use. Regardless, you will end this class with the experience of and confidence required to learn and adopt new technologies as needed in your future endeavors.

COVID-19 Modifications: Though this course includes in-person components, we will practice remote work and collaboration as well, mimicking common professional practice of working on distributed teams. We will also use several University-provided tools optimized for education, such as Panopto, to record ‘code talks’ and other activities that might normally occur in person. Again, this mirrors the adaptations occurring in the professional world, even if the tools may differ in some cases.

Internet Access During ‘Remote’ Classes

The remote portions of class require a fast and reliable internet connection. If your home internet connection is unreliable, it is critical that you upgrade your connection and/or networking setup, if feasible, or acquire access to fast internet during class. If obtaining a fast connection at home is impossible or not affordable, our classroom will be available during our scheduled class time as long as the university is open. All students are welcome to attend ‘remote’ classes from our classroom (with headphones; see below), and to thereby utilize the University’s internet connection for class activities. If your internet is unsuitable for remote participation and you are unable to come to campus for remote sessions, please contact me to explore alternatives so that you and your classmates can collaborate seamlessly during these sessions.

We Will Follow University Health Policies

I have family and friends who are at high risk of complications from COVID-19 and/or are not vaccine eligible, as I’m sure many of you do, and take the health and safety of everyone in our classroom extremely seriously. I recommend following University mask guidance. Visit protect.utexas.edu for other resources and recommendations. Materials for sanitization of hands and individual workspaces will be available before and after class. Please contact me or School administration with any concerns or questions.

If you become sick, follow University policy in terms of reporting your illness. I will work with you to make sure that you’re able to make progess, including on group assignments, even if you’re unable to attend our in-person sessions. You do not have to disclose the specifics of any protected health information to me to obtain my assistance with illness-related absences.

Assignments

Cultural Immersion Activities: Like other cultural products, digital technologies require an immersive experience for effective learning. After a vocabulary of about 300-400 words is developed, learners can begin teaching themselves human languages, and a roughly similar threshold applies to programming concepts and technologies. Exposure to topics and technologies outside those that we study is thus critical to eventually developing fluency with programming. Students in this course will immerse themselves in the culture surrounding programming in these ways:

  • Attending one in-person programming meetup over the course of the semester. This should be with an off-campus group such as Austin Python, our local Python user group. Contact me if you’re not sure whether a specific event will qualify. COVID-19 Modifications: Your meetup need not be in-person. Ideally your event should involve synchronous interaction with other participants, but I know this can be difficult for remote events, as many have transitioned to more presentation-like formats. Do your best, and participate fully, whatever that involves for your event. One benefit of remote events is that you have drastically more to choose from, around the country and the world.

  • Extra Credit: Contributing to one open source project in the form of a Github issue or pull request. This should be an active, independent (i.e. not related to this class) project. See me to confirm that your chosen project will qualify.

These experiences will combine with class assignments, readings, and in-class exercises to deepen students’ interest and facility with the concepts and skills we’ll learn. Students who are unable to attend the in-person meetups may propose a comparable virtual community interaction in its place. (Virtual meetups explicitly allowed above).

Readings: Assigned readings, lectures, or exercises should be completed before the indicated class. In most cases their content will be essential to completing the in-class exercises. In technology we’ll often encounter terms or project names that we haven’t heard of before (myself included). Students will be encouraged to keep track of new terms, research them, and bring them up in class.

Exercises (In-class and Take-Home): Like any skill, frequent practice is key to coding. Almost every class will feature exercises that build on assigned readings. These assignments can be completed and submitted during class, or students can submit them before midnight if they need extra time after class. Exercises may involve pair programming and I will circle through class to resolve any confusion and share important concepts with the group. In addition to in-class exercises, there will be frequent assignments of exercises from our texts and larger project-style assignments. Submission instructions will be included with each assignment. These in-class and take-home exercises are the largest component of your grade.

Website chat: Our class website has a Gittr chat room available from the upper right of every page. This is available for backchannel Q&A during class. Participation in this chat will count as classroom participation. Students are expected to conduct themselves in this room as they do during class, keeping content appropriate and relevant. Click here to open the chat

Final Project: The semester will culminate in a fully developed program or system of the student’s creation. More details on the final project will be forthcoming as the course progresses.

Extra Credit: There will be infrequent opportunities to earn small amounts of extra credit. This will usually involve doing things I might normally do, like deploying our class blog, tidying up code I write for this class for wider consumption, or helping moderate our forums.

Educational Privacy: It is your FERPA right to keep your educational record, including your enrollment in any specific class, private, if you choose to. Assignments that require public submission (via a public Github repository, for instance) may be completed pseudonymously if you would like to exercise this right. This choice will not affect your grade. Details will follow during relevant class sessions, and you’re welcome to contact me at any time with questions.

Materials

Software: The course will utilize free or University-provided software almost exclusively, much of it open source. Zoom and Panopto will be used for synchronous collaboration and asynchronously created screencasts, respectively. Most, if not all, Python exercises will be completed in browser using Runestone or Trinket.io. A subscription to Trinket Code+ will make some activities more convenient, but is not technically required. A discount code will be provided for students who choose to subscribe.

Hardware: Students will need laptops able to run Chrome or other modern web browser. iPads are NOT recommended for coding. If you must use an iPad, I highly recommend purchasing and external keyboard. Or, since iPad accessories are already pretty expensive, purchase a $150 Chromebook. Coders need keyboards. Panopto works best for video capture when using the Windows or Mac clients. University-owned machines may be available for the times you will need to record your screen if your machine is incapable of doing so. Contact me early if you’d like help securing access to hardware you don’t have or can’t afford for screencasting.

Accessories: Headphones, ideally with high quality microphones, are required so that we can listen to things together while in class. They are also ideal if you intend to use the classroom for attending remote classes, and often improve the experience of video conferences even when you’re by yourself. If you plan on using headphones you already own, make sure to test them with Zoom. For some reason I have yet to identify, Zoom just plain won’t pick up my audio with some of my headphones but is fine with others.

Primary Textbook: We’ll be using a new version of Charles Severance’s excellent Python for Informatics, edited and improved by Barbara Ericson. The book is free and open, and contains many interactive exercises. We’ll use it via the Runestone platform, which will help you save and track your progress and, fingers crossed, sync up well with Canvas.

Readings: As often as is possible, materials used in this course will be drawn from freely available resources on the Internet. This mimics the working environment of most programmers.

Additional Materials: There is a wealth of excellent Python material on the Internet. Here is a selection of some resources students may wish to consult for additional perspectives or information on some of the concepts we’ll cover:

  • Python Game Development for Beginners. I recorded a video series with O’Reilly several years ago that you may find useful during the section on making interactive games. The video is available for purchase from O’Reilly, Udemy, or available along with thousands of other videos and books with a subscription to O’Reilly Media. Free trials of the subscription service are available.
  • Coursera’s Python for Everybody by Dr. Chuck. Yes, the same Dr. Chuck who wrote our ook. Some of these older videos use Python 2 syntax but regardless they are an excellent option for students who want a more multimedia experience. The Week chunks roughly correspond to the first few chapters. Highly recommended for any time something didn’t ‘click’ in class and you want to hear it again. Free.
  • Related, Dr. Chuck has a YouTube playlist with lectures and walkthroughs of much of the course content.
  • Automate the Boring Stuff by Al Sweigart. Al’s book was a close contender for the text of this course. Free online, and you can buy the book. Highly recommended if you intend on developing Python proficiency further after the course.
  • Google’s Python Class by Nick Parlante. This is an intensive 2 day course for programmers with experience in a language other than Python. Its quick pace means that it’s best as a refresher or extender after we’ve covered something. The link is to a version that I made interactive with Trinket, so it should be quick and easy to pop in and do a section.
  • Python’s official documentation. You can use this during activities that restrict you to class materials by using a special google search restricted to just this domain (or add site:docs.python.org to your query).
  • The Missing Semester has lots of real-world utilities and tools that you might find useful if you want to take your skills to the next level. We won’t cover much of this, but you will gain the skills and confidence needed to work through material like this should you need it for a future project, class, or job.

I’ll occasionally pull readings from these sources or refer you to them.

Grading

All for-credit assignments and activities will be assigned either a letter grade, which corresponds to the mid-point of the number scale, or a number grade when more precision is required to evaluate student performance. For simplicity, each letter grade corresponds to a ten point numeric range:

Performance Letter Grade Number Grade
Clear excellence A 90+
Entirely satisfactory B 80 - 90
Largely satisfactory C 70 - 80
Unsatisfactory D 60 - 70
Unacceptable F Less than 60

Weights of course components are as follows:

  • Cultural Immersion Activities: 10%

  • In-Class and Digital Participation: 15%

  • Midterm: 0%

  • Exercises: 50%

  • Final Project: 25%

For the purposes of this course, entirely satisfactory performance (the ‘B’ grade) involves completing all of the assignments, participating extensively, and showing personal competence with the material. Clear excellence (the ‘A’ grade) means active participation in our classroom community, mastery and extension of the material, and effective collaboration with other programmers, either inside or outside our class.

Consistent, authentic participation is an expectation of the course, and your peers are depending on you to help shape their learning experiences with your efforts. Unsatisfactory or unacceptable participation, including unexcused absences, in even a few class sessions will quickly reduce this item of the grade to zero.

Note that there is a midterm, but that it is ungraded. This will function as an excellent check-in for you (and me) on how your progress is translating into knowledge and skills, and help us both make sure you’re on track to meet your goals. It is adapted from a more traditional introduction to Python programming course.

How to Do Well In This Class

Learning to program is a process of acquiring knowledge, mastering skills, and understanding the culture within which these technologies have developed and are employed. Earnest effort and authentic engagement are key to doing well in this course. Students who do the best in this course will identify the aspects of programming which are most personally interesting and build competencies around them. Prior experience with programming or technology can be helpful, but the most important determinant of success in programming, and therefore this class, is a commitment to and immersion in the practice of coding. Many of my best students enter the class with little to no experience with programming.

The policies and resources in this syllabus are designed to help all students thrive. Understanding and utilizing them for that purpose will make success that much easier.

Office Hours

I will be available for office hours by appointment via video and/or text chat. I will be free and on campus at least a couple afternoons each week. Email me or grab me during class to schedule a time to talk.

COVID 19 Modifications: While in-person office hours may be allowed depending on the University’s current Level, I will be requiring virtual office hours during the pandemic, unless a student requires specific accommodations for a disability, in which case we’ll follow University and School guidelines for in-person meetings.

Student and Instructor Expectations

There are several expectations I have of you and that you can have of me so that we can all have a great experience this semester.

Code of Conduct

The core values of the University of Texas at Austin are learning, discovery, freedom, leadership, individual opportunity, and responsibility. Each member of the University is expected to uphold these values through integrity, honesty, trust, fairness, and respect toward peers and community.

I take the university’s mission and values very seriously, and expect you to as well. Trusting all students to act with integrity allows for the extremely open design of my classes. The collaborative learning possibilities of an open classroom are unmatched, and integrity and trust play a central role in enabling this experience for me and my students alike. This also mimics the larger professional and civic context that we all operate in, where personal integrity is fundamental.

For this course in particular, collaboration with other students will be expected in many instances, but work that is assigned to you as an individual should be yours alone. Some of the exercises in the course have solutions or other relevant resources available on the internet. Unless I specify otherwise, students should complete exercises as far as they can without these resources and then acknowledge the resources and how they were used in their exercise writeup. In group projects a combination of git commit histories, writeups and/or project documentation should attribute individual and collaborative work. My assignment are largely designed so that there are a range of possible answers, and considerable room for individual style. It will be obvious if you haven’t approached the problem authenticly.

If you have any questions about what’s allowed, please contact me immediately. Good faith mistakes are no problem; tell me about them and we’ll move on. I’ve had very few problems with student cheating or dishonesty and hope I never encounter them again. That said, if I discover bad faith, intentional cheating on any assignment I will not hesitate to report the violation and advocate strenuously for the harshest punishments allowed. Such behavior has no place at UT Austin.

Attendance & Attention

Students should attend every class and give it their undivided attention. Use of non-coding websites or social features is prohibited. There will be many opportunities for interaction, but during class time please pay attention. Students that do not follow this will be asked to leave class.

If you must miss class please let me know as soon as possible, check the class website for any class notes I post that day, and contact a fellow student for a recap. You will still be responsible for any in-class exercises completed that day.

COVID 19 Modifications: When classes are attended remotely, it’s especially important to maintain attention upon our work together. Please do your best to attend remote classes from a location where you can give the class your full attention. I will support this by including frequent breaks in the schedule. Please limit trips to the restroom, getting something to drink, talking with others in your household, etc. to these break times as much as possible. Let anyone else who will be with you in your space know that you need your full attention upon your class.

To the extent allowed by your internet connection and personal situation, please keep your video on for these sessions, so that your peers can see your face. Facial interaction is one of the major benefits of in-person learning, and we can only replicate it remotely if we keep our video on. Zoom backgrounds are absolutely welcome if you’d like to avoid showing your personal space to me or your peers; please choose a professional-looking, non-distracting background. UT has some excellent ones available.

Please make sure that your face is adequately lit. This usually means making your face at least as bright as whatever’s behind you.

Finally, as mentioned above, the class room will be available during scheduled times for students who wish to utilize it instead of their personal space.

Late Work

Contact me as soon as you think you may have difficulty meeting a deadline with your rationale for an extension. Turning work in early is good for all involved, for this class and your career beyond, so start early.

If you experience any kind of emergency, take care of yourself first and let me know whenever you’re able. In the absence of an emergency, contact me as soon as you think you might encounter problems with a due date.

COVID 19 Modifications: It is especially important to reach out to me early if you suspect that your work will be delayed directly or indirectly by the pandemic. I will make reasonable accommodations for the inevitable disruption of COVID-19, but expect you to be as proactive as possible in notifying me of disruptions. As mentioned above, you are not required to disclose protected health information to me to receive my assistance with this.

Diversity & Inclusiveness

As The University of Texas at Austin strives to meet its mission of unlocking potential and preparing future leaders of the state, it embraces diversity in many forms. The university is dedicated to attracting highly-qualified students, faculty and staff with a wide range of backgrounds, ideas and viewpoints. This includes those from all races and ethnicities; first-generation college students; women; and others who have been historically underrepresented on campus.

As a university with a past history of denying equitable access to qualified students, UT recognizes the profound benefits of creating an inclusive environment in which students can learn from one another. All students are better prepared to succeed in an increasingly diverse state and interconnected society when they receive the educational benefits of learning on a diverse campus.

I take the happiness and wellbeing of all students very seriously and share the university’s commitment to diversity. The field of programming has historically struggled with diversity but we have the opportunity to help build a more inclusive future for the profession. I expect students to join me in welcoming the diverse perspectives and backgrounds of their peers in the course.

I Am a Sexual Misconduct Mandatory Reporter

Sexual misconduct has no place at the University of Texas, and I will believe you if you disclose any experience of sexual misconduct to me or during class. The notice below informs you of my legal responsibility to inform our Title IX Office of any such incidents I become aware of. Its purpose is to help you make an informed decision about whether disclosing an incident to me or during class is right for you. You are welcome to disclose this type of information to me privately if this would be helpful to you, especially if it involves University-affiliated individuals. I will of course keep any information you share with me confidential within the constraints of my responsibilities as a University employee. The notice also provides the advocate@austin.utexas.edu email address, which will allow you to access University support and remedies for sexual misconduct without triggering a mandatory report. If you’re unsure of your options or their potential consequences, contact the Title IX office directly for general information about University policies.

Below is the University-recommended syllabus notice regarding mandatory reporting.

“Beginning January 1, 2020, Texas Senate Bill 212 requires all employees of Texas universities, including faculty, report any information to the Title IX Office regarding sexual harassment, sexual assault, dating violence and stalking that is disclosed to them. Texas law requires that all employees who witness or receive any information of this type (including, but not limited to, writing assignments, class discussions, or one-on-one conversations) must be reported. If you would like to speak with someone who can provide support or remedies without making an official report to the university, please email advocate@austin.utexas.edu. For more information about reporting options and resources, visit http://www.titleix.utexas.edu/, contact the Title IX Office via email at titleix@austin.utexas.edu, or call 512-471-0419.”

“Although graduate teaching and research assistants are not subject to Texas Senate Bill 212, they are still mandatory reporters under Federal Title IX laws and are required to report a wide range of behaviors we refer to as sexual misconduct, including the types of sexual misconduct covered under Texas Senate Bill 212. The Title IX office has developed supportive ways to respond to a survivor and compiled campus resources to support survivors.”

Land Acknowledgement

I would like to acknowledge that we are meeting on Indigenous land. Moreover, I would like to acknowledge and pay my respects to the Carrizo & Comecrudo, Coahuiltecan, Caddo, Tonkawa, Comanche, Lipan Apache, Alabama-Coushatta, Kickapoo, Tigua Pueblo, and all the American Indian and Indigenous Peoples and communities who have been or have become a part of these lands and territories in Texas, here on Turtle Island.

Acknowledgements

This course and its content has been deeply influenced by my interactions with and the input of others. I’d like to thank Craig Blaha, Quinn Stewart, Denise Anthony, David Gotz, Hilmar Lapp, Stephanie Haas, Brian Marks, Greg Wilson, John D. Martin III, Rob Capra, Alan Dipert, Ryan Shaw, Grant McLendon, Al Sweigart, and Charles Severance for a wide range of help over its years of development.