Syllabus

6 downloads 9128 Views 123KB Size Report
What distinguishes a “master” programmer from a “regular” programmer, ... Python Programming: An Introduction to Computer Science, John M. Zelle, Franklin ...
Component-based Software Development COSI 157a – Fall 2010

Instructor: J´ohann Ari L´ arusson Office: Phone: Email: Office Hours:

Feldberg 127 x62712 [email protected] Mon,Wed 10am–11am, (or by appointment)

Teaching assistant: Hui Qi Office: Email: Office Hours:

Volen, Room 109 [email protected] Volen 119 (Berry Patch), Tue, Thur 1:30pm - 2:30pm, (or by appointment)

Meeting times & location Monday, Wednesday & Thursday at 11:10am – 12pm in Volen 105.

Course overview: In your earlier coursework you learned how to create a desktop application or a website. But so can a lot of other people! What distinguishes a “master” programmer from a “regular” programmer, however, is being able to easily explore the source code of an existing exotic software application, understand its limitations, as well as its future possibilities, and then plan, design and implement new functionality for the application at hand.

This course will help students develop multiple advanced professional programming skills. By taking the course, students will mature towards being experienced professionals that know how to develop elegant, well-documented, flexible, scalable and well-organized applications that need to run on top of, or interact with, other existing platforms by e.g. implementing plugins, interacting with a predefined API or at times “hacking” a part of an existing open source code base. The term project for the course will give students first hand experiences with the “industry normal” work culture of participating in multi-person code development projects. Students will be introduced to some of the most advanced technologies available for use today like jQuery (AJAX – Web application framework) and Python (programming language). Emphasis and discussion is focused on the advantages and disadvantages of these technologies. Students will learn how to use these technologies to innovate and implement unique solutions for business, academia and industry. This is a hands-on course. We will have a lot of fun building things that other people will use! We will meet three times a week. There will be many in-class labs, so if you have a laptop, you should bring it to class on those days. There will be four homework assignments, where students learn and practice good software engineering techniques and do some programming. A much larger teambased term project will build on the foundation of the smaller projects. An example of a potential theme of the term project is overhauling the information architecture of the Brandeis campus.

Learning goals: • Discuss the properties of good software design including the nature and role of various kinds of documentation. • Getting familiar with selecting the appropriate design patterns in the construction of a software application. • Develop thorough understanding of the value of application programming interfaces (APIs) in software development. • Design, implement, test and debug programs that use on- and offline third party API packages, libraries and frameworks/platforms. • Demonstrate through involvement in a team project the central elements of team participation, building and management. • Discuss and select an architecture for a component-based system suitable for a given scenario.

• Design and build an interactive website/desktop application (that collects information from other applications via e.g. API, webservices, “hacking” and then stores and manipulates the information locally according to user demands).

Prerequisites: COSI 11a, COSI 12b and COSI 21a or consent of instructor.

Required texts: 1. Learning with Python: How to think like a Computer Scientist, (a) Authors: Allen Downey, Jeffrey Elkner and Chris Meyers (b) Publisher: Addison Wesley (c) ISBN: 978-0321313799 2. Other readings supplied by the instructor throughout the semester.

Additional readings and other useful resources: 1. jQuery Cookbook: Solutions & Examples for jQuery Developers, Cody Lindley, O’Reilly Media, ISBN 978-0596159771 2. Python Programming: An Introduction to Computer Science, John M. Zelle, Franklin Beedle & Associates, ISBN 978-1887902991 3. Learning Python, 3rd edition, Mark Lutz, O’Reilly Media, ISBN 978-0596513986 4. The Python online documentation contains tutorials and references: http://www.python.org/doc 5. Learning to program by Alan Gauld. A free online eBook on Python programming: (a) http://www.freenetpages.co.uk/hp/alan.gauld/ 6. Documentation on the jQuery framework: http://docs.jquery.com/Main Page

Grading: Class participation

15%

Come prepared to each class and participate intelligently in discussions.

Homework ments

30%

Four pair/group programming assignments, each worth 10% (top 3 are counted).

Term project

45%

Team based programming project.

Term project presentation

10%

All projects must be presented in class at the end of the semester.

assign-

Working Together: It is perfectly acceptable that students work together on homework assignments, even those that are to be handed in individually. If a homework assignment requires each student to turn in their solutions individually, it is expected that each student has acquired the appropriate knowledge of the learning goals so that they can articulate the solution in their own words. It is not acceptable to use the words or ideas verbatim that another student developed entirely on their own. Violations of University policies on academic integrity, described in Section Three of Rights and Responsibilities, may result in failure in the course or on the assignment, or in suspension or dismissal from the University. I will report all instances of cheating, plagiarism, or other alleged dishonesty to the Office of Campus Life for possible referral to the Student Judicial System. If at any time you are in doubt about the instructions for any assignment in this course, or have questions regarding my expectations, it is your responsibility to ask for clarification.

Where to work: If you have a laptop you can of course work on the programming assignments from anywhere on or off campus. You can also use the desktop computers in the Computer Science Department’s computer cluster, also known as The Berry Patch, which is located in Volen 119. Regardless of where you work or what computers you use, when you hand in your programming assignments, you must identify a particular machine (one or more) in the Berry Patch where your code will run without a problem.

Should you have any computing-related issues concerning the Berry Patch machines, please contact the Gurus by phone (x62740), email ([email protected]) or stop by their office (Volen 125) during regular business hours.

Absences: You are expected to attend every class. The 15% for participation is a real grade! If unforeseen circumstances prevent you from doing any part of the coursework on time, please contact me or the teaching assistant as soon as possible.

Expectations: I expect that everyone will maintain a classroom conducive to learning. I like an informal atmosphere, but it must be orderly. Thus, everyone is expected to behave with basic politeness, civility, and respect for others. Talking in class is absolutely acceptable if it’s part of a class discussion. Browsing Facebook, using cell phones, or sleeping are not signs of good participation.

Accommodation for disability: A student with a diagnosed disability should alert me as soon as possible to any special needs that arise from that disability, and provide documentation of the disability.

Suggestions: Suggestions for improvement are welcome at any time. Any concern about the course should be brought first to my attention.

Keys {Py : Python, SE: Software Engineering, TPL: Term project lecture}

Date Thursday, 8/27 Monday, 8/30 Wednesday, 9/1 Thursday, 9/2 Wednesday, 9/8 Monday, 9/13 Wednesday, 9/15 Thursday, 9/16 Monday, 9/20 Wednesday, 9/22 Monday, 9/27 Tuesday, 9/28 Wednesday, 9/29 Monday, 10/4 Wednesday, 10/6 Thursday, 10/7 Monday, 10/11 Wednesday, 10/13 Thursday, 10/14 Monday, 10/18 Wednesday, 10/20 Thursday, 10/21 Monday, 10/25 Wednesday, 10/27 Thursday, 10/28 Monday, 11/1 Wednesday, 11/3 Thursday, 11/4 Monday, 11/8 Wednesday, 11/10 Thursday, 11/11 Monday, 11/15 Wednesday, 11/17 Thursday, 11/18 Monday, 11/22 Monday, 11/29 Wednesday, 12/1 Thursday, 12/2 Monday, 12/6

Topic First day: Overview Py: Introduction Py: Variables and expressions Py: Functions and conditionals Py: Fruitful functions and iteration Py: Strings and lists Py: Tuples and dictionaries Py: File I/O and pickling Py: Classes, objects and methods Py: Classes, objects and methods Py: Web programming Py: Web programming Py: Web programming Py: Working with APIs Py: Working with APIs jQuery jQuery jQuery SE: Identify needs and requirements SE: Object oriented design SE: UI design SE: Project management SE: Code organization/documentation SE: Code scalability/extendability TPL: Awareness SE: Code collaboration TPL: Task management TPL: Semi structured messages HTML/CSS SE: Extending Firefox SE: Extending Firefox TPL: Social translucence SE: Extending Firefox (Greasemonkey) TPL: Communication SE: Extending Firefox (Greasemonkey) Term project workday Term project workday Term project presentations Course review and term projects due

Notes

HW 1 assigned

HW1 due HW 2 assigned

HW 2 due HW 3 assigned

HW 3 due HW 4 assigned

Term project work starts HW 4 due

Last day of class;