|MISSING LINKCourse schedule|
Nearly any ad-hoc technique, even trial and error, can be used to write a 50 line, bug-riddled, throw-away program. Software-based products are complex systems, beginning in size at several hundred thousand lines of code and increasing in complexity to several million lines of code. Given the level of investment and commitment needed to build such large systems, a vendor expects to sell and maintain a product for many years, if not decades. Ad-hoc techniques cannot be successfully applied to systems of practical scale and longevity.
This course is your first step toward large-scale system development. Large-scale software systems are composed of interacting modules -- components -- that implement a desired behavior. You will learn to design, build, test and reuse software modules. Later courses, such as COMP180 Software Engineering, address requirements analysis, "design in the large," integration, and other methods needed for large-scale software development.
Data structures and good algorithmic design underlie correct and efficient implementations. Data structures are part of the body of knowledge that every software engineer must know and be ready to apply. Through the study of data structures, and most importantly, by completing projects implementing and using the most common data structures, you will refine your software development skills.
It's time to start thinking and working like a professional software engineer!
Office hours: T 3:00-4:30, W 10:30-12:00
Section 01: M,W 1:30-2:20, Th 3:00-3:50, G block, H-111
Section 02: T,Th,F 1:30-2:20, H block, H-108
|Other teaching responsibilities||COMP150-PAT: T,Th 5:30-6:45, M+ block, H-106|
ADTs, Data Structures and Problem Solving with C++, Second edition,
L. Nyhoff, Pearson Prentice Hall, 2005.
Practical Debugging in C++, A.R. Ford and T.J. Teorey,
Prentice Hall, 2002.
Practical C++ Programming, Steve Oualline, Second edition, O'Reilly & Associates, 2003.
C++ Pocket Reference, K. Loudon, O'Reilly & Associates, 2003.
|Schedule||MISSING LINKLecture topics, readings, key dates|
|Laboratories||MISSING LINKLab and account information|
The primary textbook for this course is ADTs, Data Structures and Problem Solving with C++ by Larry Nyhoff. The assigned readings provide an essential knowledge base. The lectures cover some aspects of topics in the text and generally add enrichment material. You are responsible for material from both the text and class lectures.
As a further reference, expecially when working in the lab, I would recommend the C++ Pocket Reference from O'Reilly & Associates. The C++ Pocket Reference is inexpensive ($10) and is a better resource than the C++ "reference cards" that are available from Barnes and Noble or Borders.
This course is not an introduction to programming. We assume that you can competently write a 50 to 100 line program in a higher level, block-structured programming language like Java, C or C++. At a minimum, this means an understanding of and an ability to apply:
COMP10 Computer Science Primer does not provide sufficient background or programming experience for this course. Experience equivalent to COMP11 Introduction to Computer Science is required.
Mathematics required for this course include high school algebra, set theory, coordinate geometry and descriptive statistics. Many data structures and algorithms are based upon concepts in discrete mathematics:
If you have doubts or questions, please speak with me or take COMP11 Introduction to Computer Science. Our class will have students with a wide range of experience and different "entry points." We hope to accommodate everyone with the required base competence in programming.
The projects are the most important part of this course! Software engineering is an activity and software engineers are hired to produce high-quality software, not to theorize. There are two overarching principles for our work:
Every software engineer should know and be able to apply at least a little practical knowledge from several areas:
There is scientific evidence that active application of class knowledge is essential to learning. Recent research on brain structure and learning shows that learning causes physical changes in the brain. The most effective way to learn is to (iteratively) complete full learning cycles:
Research also shows that learning is not instantaneous. It takes 20-30 minutes of concentrated effort to develop potential new neural synapses where connections can be made. Effort and commitment are essential to learning and they must come from within. Learning is most effective when you actually enjoy the activity or subject matter in which you are engaged. This is why the expression, "Do what you enjoy and success will follow," is so true. Enjoyment does not preclude hard work -- think about fun activities that you willingly pour in effort. An activity must be intrinsicly important to you in order to motivate a high level of effort. Look for the fun aspect of every problem! It may also help you to decide what you want to do with your life. (But, please realize that there is more to computer science than just programming, too.)
Evaluation is an assessment of personal progress toward a learning goal. If you are obsessed with your GPA, please stop that behavior right now -- you are hurting yourself. Studies have shown that an obsession with grades (or "rewards") actually demotivates students in the long run.
Evaluations in this course are based upon the quality of results. Software development projects require and expect on-time, high quality results. Development processes are assessed and tuned for quality. Code reviews and other quality-oriented practices are the norm. Criteria to be considered include:
Contrary to "conventional wisdom," we are educators, not gatekeepers for the corporate world. Having been a campus recruiter, I can assure you that GPA is a weak factor in interview and hiring decisions. (GPA is also a very weak indicator of future success in the real world and is not even considered beyond entry-level positions.) Here are some suggestions to apply now:
The following table summarizes the relative weights of projects, quizzes, and exams.
|Projects #1 to #5, #7 and #8||5% per project, 35% total|
Project #6 is larger in scope and requires more effort than projects #1 to #5, #7 and #8. Quizzes are scheduled before key DROP dates to help you assess your progress.
Quotas are not used when assigning letter grades (e.g., 10% A's, 30% B's, etc.) Grade quotas have negative, undesirable effects:
The score for any late assignment will be reduced by 10% for each 48 hour period by which submission is delayed. For example, if the maximum score for an assignment is 100 points, then there will be a 10 point reduction for each 48 hour delay in submission. Please also be aware that some assignments will use the code developed in other assignments. In those cases, you have an added incentive to complete your work on time.
In case of severe illness or emergency, you may request an extension if you have a note from health services, a doctor, or a dean confirming your situation. If you miss an examination or quiz due to an emergency or severe illness, please contact me immediately. You must still obtain a confirmatory note from health services, a doctor or a dean. No other grounds for extension will be considered. The class schedule has been designed to accommodate religious holidays.
Within two to three weeks from the start of the semester, you will have access to our records of all your scores via the World Wide Web. Please check these records every week to make sure that you have received your proper credit. It usually takes about one week for scores to be posted. You will then have two additional weeks to check the recording of your scores. Any correction of a recorded score must be made within three weeks of submitting the assignment, quiz or examination. Thus, after you submit a project, you will not be able to review your score for revision, even if it is wrong.
If you detect an error in a score, you should contact the person responsible for recording that score. For projects, the person to contact is the responsible teaching assistant (TA.) For exams, the contact is your instructor. If an issue surrounding a score cannot be resolved by the TA, only then should you discuss the issue with me.
Correcting errors in not the same as groveling. Decorum, please!
Yes, ethics are important. Customers, managers and team members will rely on you to meet your commitments. You want to be perceived as a person of integrity as trust is essential for future promotion. Would you trust a liar or a cheat with the company's business?
The Association for Computing Machinery (ACM) is the society for computing professionals. The ACM publishes two codes of ethics:
Copying software (either binary or source code) in the real world puts your employer at risk for a lawsuit. Even open source software, such as that governed by the GPL, has legal restrictions and requirements. Improper use of open source code may force your employer to put its own source code into public release, thereby losing any competitive advantage or trade secret protection. Needless to say, if you're the culprit, you won't be employed.
The Tufts University policy on Academic Integrity has additional information, advice and suggestions. It treats both the ethics of academic work and the ethics and appropriate use of electronic resources. Of course, we are expected to comply with these policies. Violations of these policies, especially cheating and illicit use of computing resources, will not be tolerated. All examinations and quizzes are closed book and no electronic devices may be used.
Here are a few general guidelines regarding ethical academic work.
Your first and best resources for help are the teaching assistants. When you seek their advice and help, please come prepared. Bring a fresh listing of your program. Please make your program as readable and understandable as possible -- the quality of the advice that you receive is directly proportional to the quality of the input and questions that you bring. A teaching assistant has the right to refuse to help if a program is unreadable or just plain garbled in some way.
Class time is a great time to raise questions. Real engineers discuss problems over coffee in small groups. Let's use class time that way -- it will help you and will make life even more fun for me! Of course, I will hold office hours. I also believe in "managing by walking around," and if I'm in the lab, my time is up for grabs! Please respect the fact that I have other teaching responsibilities and generally need one hour+ to get my head together before a lecture. That's why I have listed my other lecture times in the table on "Basic course information."
User consultants are provided by Academic Computer Services in public user areas like Eaton Hall. Their responsibilities are limited to answering general usage questions, minding computer equipment, etc. They cannot help you with the assignments or C++ programming.
The table below has links to reference information that you will find useful. This material complements the textbooks, lectures, etc. and in some cases, is necessary to the successful completion of projects.
|Emacs and UNIX||
GNU Emacs reference card
UNIX help pages (Edinburgh)
Tutorials @ CProgramming.com
A Quick Introduction to C++ (HTML) (PDF) (PostScript)
|C++ vs. Java||Comparison of C++ vs. Java|
Standard streams reference
File streams reference
Standard C library reference Hexadecimal and bit twiddling
Compiling C++ programs
Using make to build programs
The GNU gdb debugger
Copyright © 2004-2013 Paul J. Drongowski