Syllabus
### INLS 560: Programming for Information Professionals Instructor: Prof. Elliott Hauser
Official Course Description
INLS 560: Programming for Information Professionals (3 credits)
An introduction to computer programming focusing on language fundamentals and programming techniques for library and information science applications. Emphasizes problem-solving through the development of practical applications that include text processing, file handling, user interfaces, and web data access. 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 SILS courses in Databases, Web Development, Text Mining and others. Students will also be well versed in common tools and workflows used by developers and development teams.
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, terminal and GUI-based text editors, videoconferencing, persistent online chat, and screensharing. By the end of the course you should be comfortable joining and collaborating on real development teams.
Flipped Design
I’d like to emphasize the flipped design of the course. Almost all of the content consumption (readings, videos, etc) will be pushed outside of the class sessions. During class 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.
Office Hours
I will be available for office hours immediately after class and by appointment via video and/or text chat. Email me or grab me during class to schedule a time to talk.
Guest Speakers
We’ll have a series of programming professionals come in and discuss their experiences and their personal relationships to the topics we’re covering. I’m still confirming this guest list but I hope to have some previous students of this class talk about their current professions and how they’re using code professionally.
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, students can begin teaching themselves languages, and a roughly similar threshold applies to programming concepts and technologies. Students in INLS 560 will immerse themselves in the culture surrounding programming in three ways:
-
Attending two in-person programming meetups over the course of the semester. At least one of these must be with an off-campus group such as TriPython, our local Python user group.
-
Discussions with our guest speakers from industry
-
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). See me if you’re not sure your project would 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.
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. 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 requent assignments of exercises from our texts and larger project-style assignments. Most of these exercises will involve submitting a post to our class blog via Github, with your code included in a Trinket. Some may involve the creation of a separate Github repo. These in-class and take-home exercises are the largest component of your grade.
Readings & Jekyll Blog: 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. We’ll collaboratively author a Jekyll blog on Github, at first as an in-class exercise, and then as a way to keep explain these novel concepts and projects to each other and the community at large.
Ungraded Midterm: Inspired by SILS Prof. David Gotz, there will be an ungraded midterm to help you know what you don’t know. This will serve as an inventory of knowledge to revisit as we head into the final project. I’ll return them to you along with personalized feedback on your progress in the course. This will allow you to understand your trajectory in this class an make any desired course corrections before we head into the project.
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. This program can either be an interactive game developed using Trinket, custom extensions of the Turtle Class, and with a fully articulated user interface or a command-line Python program, using third-party modules, developed using Cloud9 and posted to Github. The Final Project is due at the time and date of our final exam block, 12:00pm Friday, April 29. See below for my policy on late work (short version: don’t be late). More details on the final project will follow.
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 enrollment in any specific class, private. Assignments that require public submission (e.g our Github repository) may be completed pseudonymously if you would like to exercise this right. This choice will not affect your grade. That said, most students in past classes have enjoyed and benefitted from starting their public Github profile with assignments and projects from this class.
Materials
Primary Textbook: We’ll be using a new version of Charles Severance’s excellent Python for Informatics. This book is being revised to support Python 3, and I’m actively helping. The free PDF and EPUB are available here, and I’ve gotten permission to maintain an HTML version at http://ils.unc.edu/~eah13/textbook/. I’m working on getting an HTML version up so that you’ll always have access to the latest version. Since the textbook is open source you can make contributions or fixes to any errors you find with the Github-based collaboration skills we’ll learn in the class.
Primary Video: I recorded a video series with O’Reilly this year and we’ll use the videos extensively during a section on making interactive games. The video is available for purchase from O’Reilly. Students who choose to make an interactive game as a final project may want to purchase the video; others can probably make do with the limited-time free access options out there. More info on this when we get there; no need to get anything yet.
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.
Software: The course will utilize free software almost exclusively, much of it open source. For in-class exercises, some exercises will be completed in browser using Trinket.io and for actual development we’ll all use the cloud based development environments provided for free by Cloud9. This provides a headless Ubuntu server instance and a graphical text editor. It is a professional quality tool that students can use in most real-world development tasks with little modification.
Hardware: Students will need their own laptops able to run Chrome or other modern web browser compatible with Cloud9. 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.
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:
- Coursera’s Python for Everybody by Dr. Chuck. Yes, the same Dr. Chuck who wrote our textbook. 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 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.
I’ll occasionally pull readings from these sources or refer you to them.
Grading
Weights of course components are as follows:
-
Cultural Immersion Activities: 10%
-
In-Class and Digital Participation: 15%
-
Midterm: 0%
-
Exercises: 50%
-
Final Project: 25%
Note that the SILS grading policy is based on the University Grading Policy. SILS uses the following graduate and undergraduate grading scales:
Graduate | Undergraduate | |
---|---|---|
H | Clear excellence | A |
P | Entirely satisfactory | A-, B+, B, B- |
L | Low Passing | C+, C, C- |
F | Failed | D+, D, F |
For the purposes of this course, satisfactory performance (the ‘P’ grade) involves completing all of the assignments and showing personal competence with the material. Clear excellence (the ‘H’ 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.
Student and Instructor Expectations
Honor Code
I take Honor very seriously. Trusting all students to follow the honor code allows for the extremely open design of my classes. The collaborative learning possibilities of an open classroom are unmatched, and Honor and trust play a central role in enabling this experience for me and my students alike. This also mimics the larger professional context that we all operate in, where personal integrity is fundamental.
All students should familiarize themselves with the University of North Carolina at Chapel Hill Honor Code on the Office of Student Conduct’s site if they have not already done so.
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.
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 never had a problem with student cheating or dishonesty and hope I never do. That said, if I discover bad faith, intential cheating on any assignment I will not hesitate to report the violation and advocate strenuously for the harshest punishements allowed. Such behavior has no place at UNC.
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.
Late Work
In general, lateness is not tolerated in the professional world, and that’s the same standard I’m holding you to. Late work without prior approval will not be accepted. Exceptions will be rare. 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.
Diversity & Inclusiveness
I take the happiness and wellbeing of all students very seriously and share the university’s commitment to diversity (available here: http://diversity.unc.edu/our-committment/div-values/). 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 different perspectives and backgrounds in the course.
Acknowledgements
This course and its content has been deeply influenced by my interactions with and the input of others. I’d like to thank David Gotz, Hilmar Lapp, Stephanie Haas, Brian Marks, Greg Wilson, John D. Martin III, Rob Capra, Alan Dipert, Al Sweigart, and Charles Severance for a wide range of help.