It is estimated that Windows XP has 50,000,000 lines of code. The average mobile phone has over 10 million lines of code. The average developer writes 10 – 20 useful lines of code per day, so a couple of engineers and 2 friends could break away, start a new company, and create a new “Windows” operating system in only about 1700 years. That’s not reasonable.
Up until now, most of the programs that you have been asked to write could probably fit in your mind. When you complete the letter, you fold it, seal it up, and mail it off (or hit send). But now it is plain to see that products that you use daily simply could not be recreated by you and 10 of your best friends in an afternoon, weekend, or semester. A 1700-year project is wildly unreasonable. There must be a better way.
In this course, you will learn a better way. You will dive into the world of software engineering and hone your teamwork (and, yes, coding) skills. Effective teamwork is essential, and software design methodologies make development more efficient. This course gives you very practical skills for being an effective member of a development team and producing high-quality, sustainable software. Learning these methods of working together, managing requirements, producing quality software products, and testing, delivering, and maintaining these products is every bit as valuable as coding.
Why I Teach This Course
This course is offers you a unique learning experience. I am always especially excited to teach this course, and here is why:
- Building software is fun and rewarding
You get many opportunities to “learn by doing” this course - There’s more to software than coding
You will get a taste of software engineering - Working on teams can be messy, but it’s worth it
You will be amazed at what you can accomplish together, so much more than on your own
Course Information
The course syllabus is posted on Howdy.
Course Description:
Intensive programming experience that integrates core concepts in Computer Science and familiarizes with a variety of programming/development tools and techniques; students work on 2 or 3 month-long projects each emphasizing a different specialization within Computer Science; focuses on programming techniques to ease code integration, reusability, and clarity.
Credits: 3 (2 Lecture Hours, 2 Lab Hours)
Special Designation: W (writing course)
As a writing course, you will receive instruction on writing and complete writing assignments so you can master writing related to the major. You must pass the writing components to earn a grade in the course.
Prerequisites: CSCE 312 and CSCE 314; or CSCE 350/ECEN 350
Corequisite: CSCE 313
Learning Outcomes:
This course is intended to be an intensive programming experience that integrates core concepts in Computer Science and familiarizes you with a variety of programming/development tools and techniques. You will primarily work in small teams on month-long projects emphasizing different specializations within computer science. The course focuses on honing good programming techniques to ease code integration, reuse, and clarity. The primary goal for this class is for you to emerge with strong programming skills, able to address both individual and team programming challenges competently. The class is also meant to allow you to improve your programming skills through significant practice.
After this course you will be able to:
- Explain the need for software engineering through industry examples and personal experience
- Exercise the fundamental concepts of software construction on new projects (including managing requirements, design, implementation, testing, deployment, and maintenance)
- Design and develop software that is clearer, more maintainable, and solves complex problems
- Integrate a variety of current software technologies to build new software products
- Collaborate and communicate effectively in small teams
- Recognize and apply characteristics of effective technical writing
We will cover many topics including:
- Software system design for portability, performance, and testability
- Coding layout and style considerations
- Programming specifications and documentation
- Use of basic software tools and APIs
- Subject-specific topics related to the team projects (DB, HCI)
Though many topics will overlap, this course is not intended to be as in-depth or comprehensive as a standard software engineering course. For a deeper understanding of software development and project management, take software engineering after completing this class.
Required Textbooks:
Code Complete, 2nd edition by Steve McConnell (Microsoft Press, 2004).
(Code Complete PDF)
Database Design, 2nd edition by Adrienne Watt (BCcampus Open Education, 2014).
(Database Design PDF)
Other supplementary material as needed will be supplied electronically.