Course Description:

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.

Term:

Spring  2019 -- 2191

Course Topics:

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 languages we will use are C and Ruby; 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.

Course Objectives:

At the completion of this course students will be able to

Method of Instruction:

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:

Mandatory Target Platform

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 OpenBSD system.

Classroom Activities

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.

Projects

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.

Practica

A practicum, or lab practical, is a supervised demonstration of your competence on a software construction task. There will be four practica overall: three 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/Reading

Homework and readings will be assigned periodically; consult the schedule frequently, as the readings and homework may change. Readings are due by the start of the week they are associated with. For homework the due date will be given when it is assigned. These assignments will supplement and reinforce project and classroom activities.

Quizzes

Quizzes will normally occur at the beginning of each class. The quizzes are strictly for determining attendance.


Textbook(s):

Highly Recommended Books  (primary references for Ruby, C and Rails content of the course)

These are not required or even directly appropriate for this course. Still, they are valuable additions to any software engineer's library.

Grading Breakdown:

The final course grade is a combination of your grades on exams, quizzes, class activities and projects.

Component Percentage of Final Grade (105%)
Ruby Project15%
C Project Part 110%
C Project Part 210%
Database Project  5%
Practicum #1 (C)10%
Practicum #2 (C)10%
Practicum #3 (Ruby)10%
Final Exam15%
Class Activities10%
Quizzes  5%

Submission Policy

  1. All submission of course work (activities, practicums, projects, etc.) is done via Git using your individual "pushbox" repository. The use of Git is covered during the first two weeks of class.
  2. Each required submission will explicitly identify the name of directory and the file(s) to submit. It is important that you follow the naming conventions exactly   as defined in the instructions. Failure to follow naming conventions may lower your grade.
  3. It is your responsibility to maintain your Git repository so that your instructor has access for grading. Notify your instructor immediately if you are having issues with your repository. 

Attendance Policy - PLEASE READ CAREFULLY!

You are expected to be present for all class sessions as we are often working collaboratively on in-class activities.

Grading Policy

  1. Grading of assignments is performed by your instructor and courses assistant(s). Much is done via automated scripts, so be sure to follow submission instructions.
  2. Grades will be posted to  myCourses->Gradebook.
  3. If you have a question about a grade, please email me (even if you have verbally spoken to me) so that there is a record of your request.

Plus/Minus Grades

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 GradeNumeric GradeGPA Points
A93-1004.000
A-90-923.667
B+87-893.333
B83-863.000
B-80-822.667
C+77-792.333
C73-762.000
C-70-721.667
D60-691.000
FBelow 600.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. For more information consult the Provost's website: http://www.rit.edu/provost/grading


Plagiarism

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.