Course Policies (ITMD 513)
From the Catalog: Contemporary open-source programming languages and frameworks are presented. The student considers design and development topics in system, graphical user interface, network, and web programming. Dynamic scripting languages are covered using object-oriented, concurrent, and functional programming paradigms. Concepts gained throughout the course are reinforced with numerous exercises which will culminate in an open-source programming project.
Extended Description: This course is an introduction to the Ruby programming language and the Rails framework, with intensive practice in the applied theory of object-oriented programming and full-stack web application development. You will develop a thorough understanding of object-oriented programming and model-view-controller architecture (MVC), which will be coupled with bespoke database-driven application design, executed through object-relational mapping (ORM). Course projects afford the opportunity for you to leverage MVC architecture to develop and interact with open data APIs expressed in serialized formats such as JSON. You will also engage in mobile-first, responsive interface design using standards-compliant forms of HTML, CSS, and the DOM and a suite of a modular preprocessors including Haml, Sass, and CoffeeScript.
Students enrolled in this course are expected to:
- Identify and understand the basic syntax, semantics, and style of the Ruby programming language
- Gain a solid understanding of object-oriented programming as achieved through Ruby
- Learn the organization and purpose of Ruby’s and Rails’s core classes and standard libraries, and develop reading skills in them
- Understand the structure and purpose of model-view-controller (MVC) software architecture, and how MVC is implemented in Rails
- Understand the connections between MVC architecture and full-stack web development
- Leverage an object-relational mapper (ORM) for data-driven application design and database-neutral implementation
- Become conversant with documentation and release notes in order to properly implement and stay current with ongoing development to Ruby, the Rails framework, and gem dependencies
- Become familiar with the customary practices of the Ruby and Rails communities, including those for source formatting, semantic versioning, and configuration
- Understand the values behind open-source languages and development generally, including liberal licensing, community organization, and the significance of contributions by community members
- Go beyond assigned readings in class and become something of a subject-matter expert for a particular Rails module (e.g., ActiveRecord or ActionView)
At the conclusion of this course, successful students will be able to:
- Analyze specific computing problems of information storage and dissemination, and articulate their requirements and appropriate solution in object-oriented languages, such as Ruby
- Explain the deep object-oriented design of Ruby and its hallmark features, including dynamic/duck typing; sharing functionality across objects using mixins and inheritance; and dynamic reflection
- Design, implement, and evaluate a Ruby on Rails web application that meets specific, desired user needs
- Understand and articulate how Rails and other frameworks adhere, or fail to adhere, to open standards for networking and the web
- Read and interpret documentation and release notes for languages, libraries, and frameworks, and adjust professional practice based on the contents of that material
- Make connections between course material and existant knowledge from your professional practice and other graduate coursework
Books and Technologies
My policy for assigning books: they are all required in the edition indicated; the total retail pricetag for the entire course should be less than $100 (this one is $84 on the high end, assuming you opt for the electronic editions); and each book should be worthy of a place on your bookshelf or electronic device of choice long after the class has ended. My aim is to help you build your professional library, while also being sensitive to your personal finances.
- Pine, Christopher. Learn to Program. 2nd ed. Pragmatic Bookshelf. $18.50 (eBook). ISBN 9781934356364
- Ruby, Sam, Dave Thomas, and David Heinemeier Hansson. Agile Web Development with Rails 5. Pragmatic Bookshelf. $28.00 (eBook). ISBN 9781680501711
- Other readings linked from the course calendar and otherwise made available electronically
Strongly Recommended Books
- Swicegood, Travis. Pragmatic Version Control Using Git. Pragmatic Bookshelf. $25.00 (eBook). ISBN 9781934356159
- Fulton, Hal and André Arko. The Ruby Way. 3rd ed. Addison-Wesley. $25.00 (eBook). ISBN 9780321714633
- Perrotta, Paulo. Metaprogramming Ruby 2. Pragmatic Bookshelf. $25.00 (eBook). ISBN 9781941222126
- Thomas, Dave, with Chad Fowler and Andy Hunt. Programming Ruby 1.9 & 2.0. 4th ed. Pragmatic Bookshelf. $28.00 (eBook). ISBN 9781937785499
Required Materials and Technologies
- An email account that you check daily
- A browser- or cloud-based bookmarking scheme to aid your information management
- A Basecamp account (invite will arrive via email); Basecamp, not Blackboard, will be where we coordinate our work and communication during and outside of class.
- A GitHub account (see note about anonymity in the course technology policy below)
A personal computer, Unix-based (Linux, BSD, OS X) or virtualized to run a Unix-like OS,
with the following software installed:
- A plain-text editor capable of Ruby syntax highlighting and configured for UTF-8/Unicode character encoding and Unix-style line endings (LF), entabbed with spaces (two spaces per tab)
- Firefox Developer Edition (free)
- Git (free)
- Node.js (free)
- rbenv (free), running Ruby 2.4.x
Grading Policy: ITMD 413
- Project 1: 20pts
- Project 2: 20pts
- SME Rails Module Project: 10pts
- Weekly Production Work: 20pts
- Basecamp Questions: 15pts
- Basecamp Discussions: 15pts
- TOTAL: 100pts
A = 90+ pts; B = 80-89pts; C = 70-79pts; E =< 69 pts
- A - Student has turned in all required components of a project, the work is exceptional in quality, and reflects the student’s dedication to adjusting the project to his or her own interests.
- B - Student has turned in all required components of a project, and the work is exceptional for graduate work.
- C - Student has turned in all required components of a project and submitted work that is acceptable as graduate level.
- E - Student has not turned in all required components of a project, or work that is not acceptable as graduate level.
All major projects for this course will be submitted as URLs to Git repositories sent via email to the instructor, at email@example.com. Emails should not include email attachments, but rather URLs pointing to your project’s Git repository. Examples will be demonstrated in class.
I do not accept late work. No exceptions. All major projects must be submitted as specified in the project description. Weekly work is due before the start of the first class meeting each week.
Your active participation in class and especially in online discussions and chats on Basecamp is required both for your own success in the class, and for the success of the class as a whole. I do not give reading quizzes, but I assign a lot of reading. And I expect you to be prepared to discuss that reading on Basecamp.
Participation is the largest share of points for the class (30 points); it’s split 15 points each between discussion contributions and questions. I want to reward students for asking lots of questions, and asking them publicly. There seems to be a toxic, cultural problem at IIT that seems to discourage students from asking questions. You are required to ask questions in this class, and to ask them regularly and publicly, on Basecamp, unless the question is over a private matter such as a grade concern, an absence, or something else that’s not germane to the class as a whole. As you can see on the course calendar, each Tuesday class will begin with Tuesday Morning Q&A. That will be class time devoted to me responding to questions and elaborating on our discussions on Basecamp, which I expect to continue outside of class.
Questions about particular code issues should always include a URL to a file or commit in a GitHub repository. And of course, you should participate in discussions as well, pointing to the assigned readings, useful resources, and other researched responses based on the questions other students have.
Course Technology Policy
You are just as responsible for learning to command various technologies as for any other course content. Difficulty with technology is not an acceptable excuse for being unprepared for class or late with assignments.
If you are having trouble with technology or any other material covered in this course, it is your professional responsibility to do research beyond the resources and guidance provided in class and find supplemental materials that work for you. I also encourage all students to meet with me during my virtual office hours or at another arranged time. I prefer that you contact me via Basecamp Ping, email, or Google Hangouts, and well in advance of assignment and project deadlines. If your question or issue is one that may be troubling other students as well, please ask it publicly, on Basecamp.
Note that coming to class with broken or malfunctioning work is far better than showing up with nothing but an excuse like “I just didn’t get it.” In a class like this, it is expected that you’ll show up with broken work much of the time. When you’re learning, effort is more important than perfection. Just be sure to put in the effort early, and not the night before a project is due.
Also, I have asked you to sign up for a GitHub account for this class. Note that GitHub accounts are public, as are most social-type accounts. To protect your privacy you are certainly allowed to use a pseudonym/alias for GitHub and any other account. You may also push to repositories that you keep private, so long as you add me as a collaborator, for grading purposes. At the same time, you might want to think about the high value of establishing GitHub and other accounts under your own name or professional alias. Public accounts where you conduct yourself professionally might well be an asset to your online presence, improving the search results that future schools or employers turn up when they look for you on Google and elsewhere.
As with any course at IIT, you are expected to uphold the Code of Academic Honesty as described in the IIT Student Handbook). All work for this course must be your own original effort, including print and digital page design and computer code. Summarizations and quotations of text, as well as any use of open-source code libraries and images not of your own making, should be clearly cited as legally and ethically warranted and rhetorically appropriate. Access, storage, dissemination, and other use of data from third-party sources must conform to the source’s terms of service, licensing, and other relevant legal and ethical restrictions.
If you are at all uncertain as to whether you are submitting work that in whole or in part may violate the Code of Academic Honesty, please contact me immediately and before the work is due. The consequences of academic dishonesty are severe. Any student who violates the Code of Academic Honesty will be subject to expulsion from this course with a failing grade, and I will report the student to the Dean of the School of Applied Technology, who may take additional disciplinary action, including reporting violations to the relevant offices of Undergraduate or Graduate Academic Affairs.
Special Needs Statement
I place a very high value on developing courses that are welcoming and accessible to all students. I will make additional reasonable accommodations for students with documented disabilities. In order to receive formal accommodations, students must obtain a letter of accommodation from the Center for Disability Resources. The Center for Disability Resources is located in IIT Tower, 3424 S. State Street - 1C3-2 (on the first floor). Contact the Center by telephone at 312-567-5744, by TDD at 312-567-5135, or via email at firstname.lastname@example.org
Students who have any difficulty (either permanent or temporary) that might affect their ability to perform in class should contact me privately, either in person or electronically, at the start of the semester or as a documented difficulty arises. Methods, materials, or deadlines will be adapted as necessary to ensure equitable participation for all students.