Please spend some time reading this document, as it contains vital information about the texts, course policies and grading.
This is a project-based course to enhance individual, technical engineering knowledge and skills as preparation for upper-division team-based coursework. Topics include adapting to new languages, tools and technologies; developing and analyzing models as a prelude to implementation; software construction concepts (proper documentation, implementing to standards, etc.); unit and integration testing; component-level estimation; and software engineering professionalism.
This course covers individual software construction skills: planning, detailed design, programming, debugging and unit testing. Software construction is the central activity guaranteed to happen on every project. As such, the quality of the construction substantially affects the quality of the software, and knowledge of construction principles is essential whether you are engaged in construction or are responsible for another phase of the project (architecture, requirements elicitation, quality assurance, maintenance, etc.).
Part of being a software engineer is knowledge of multiple programming languages; without such knowledge it is impossible to make intelligent technology decisions. What is more, the language landscape evolves rapidly over time, so the ability to learn and apply new languages is an essential skill. The language we will use is C; while you will not be an expert in either of these by the end of the term, you will have gained experience with the core concepts in each.
Why C? Well, C was one of the earliest high level languages to support efficient use of computer resources. Before C, most systems programs (operating systems, compilers, etc.) were developed in assembly language. With the advent of C and Unix, the days of large assembly language systems were numbered. In addition, C is the progenitor of a whole host of C like languages, of which Java is the most popular current example. This means we can focus on the unique aspects of C, particularly memory management and pointers, without having to spend much time on concrete syntax for loops, conditionals, expressions, etc. Finally, C is the immediate ancestor of C++, the current language of choice when efficiency and direct access to hardware is critical. Those who eventually take the real-time and embedded systems courses will find C and C++ are pervasive in those domains.
At the completion of this course students will be able to
During the course you will be introduced to a number of software construction techniques using a variety of technologies and tools, many that will be completely new to you. Much like in the workplace of a professional software engineer, these skills are not so much taught as they are learned. As you will know from your experiences in the introductory CS programming sequence, it requires much repeated practice and some amount of trial and error to achieve a desired level of proficiency in programming. You cannot learn to play the piano or golf by listening to piano music or watching golf videos. You must take the initiative to be responsible for your own learning - that is perhaps the most important learning objective to achieve during the semester. Listed below are the types of learning activities we will use throughout the course:
There are many different operating systems, compilers, and development platforms that support C language software development. There are often significant differences between these systems. Yes, you are allowed to use the platform of your choosing for development. However, before submitting your final work you must test on the hamilton system.
All Activities, Projects, and Practica must compile, link, and execute properly on the hamilton system.
During class time you will be working in small groups or paired with other students. The classroom activities are designed to help you learn and practice the construction skill currently being discussed. This may be learning a new programming language, development environment, experimenting with an open source tool, participating in a code walkthrough or testing exercise. It is critical that you are present and fully participate in these activities as they will be the individual skills that are needed to complete the projects and to perform well on the lab practica.
There will be three individual construction projects assigned during the semester. Details on the content of the project, expected deliverables and assessment will be provided with the description of each project. Help and assistance will be available during the projects, but it is required that each student work independently on their own implementation.
A practicum, or lab practical, is a supervised demonstration of your competence on a software construction task. There will be three practica overall: two during the semester and one during finals week. During each practica which you must complete a construction task on your own. Practica are open book, open notes, open web - the only thing you cannot do is consult with another person.
Note: It is common to be asked to complete a short programming assignment of a similar nature during most job interviews.
Homework and readings will be assigned periodically; consult the schedule frequently, as the
readings and homework may change.
These are not required or even directly
appropriate for this course. Still, they are valuable additions to any
software engineer's library.
The final course grade is a combination of your grades on exams, quizzes, class activities and projects.
Component | Percentage of Final Grade (100%) |
---|---|
C Project1 Part 1 | 10% |
C Project1 Part 2 | 10% |
Practicum #1 (C) | 15% |
Practicum #2 (C) | 15% |
Project 2 [Part 1 and 2] | 15% |
Final Exam | 15% |
Class Assignments | 20% |
You are expected to be present for all class sessions as we are often working collaboratively on in-class activities.
All SE courses use the +/- system. The numeric range of grades may vary from instructor to instructor, but multi section courses will use the same numeric ranges. The following chart will be used to determine your letter grade at the conclusion of the term.
Letter Grade | Numeric Grade | GPA Points |
---|---|---|
A | 93-100 | 4.000 |
A- | 90-92 | 90-92>3.667 |
B+ | 87-89 | 3.333 |
B | 83-86 | 3.000 |
B- | 80-82 | 2.667 |
C+ | 77-79 | 2.333 |
C | 73-76 | 2.000 |
C- | 70-72 | 1.667 |
D | 60-69 | 1.000 |
F | Below 60 | 0.000 |
When assigning final grades, each instructor reserves the right to alter these division points as he or she deems necessary based on the overall evaluation of individual or class performance and effort.
Please do not post your solutions in a public forum (e.g. GitHub). We consider such an action to be a violation of RIT's academic integrity policy.