banner

Computer Science I (Discussion Lab) - CSE 2010

Purpose: to help other instructors teaching the same course

Common Course ID:  CSE 2010
CSU Instructor Open Textbook Adoption Portrait

Abstract: This open textbook is being utilized in a [Computer Science and Engineering] course for undergraduate or graduate students by [Dr. Xiangyu Li] at [California State University, San Bernardino]. The open textbook provides [a comprehensive introduction to C/C++ programming fundamentals, including control structures, functions, arrays, and object-oriented concepts. Instructor-created slides, lab manuals, and coding exercises are included to enhance learning.]. The main motivation to adopt an open textbook was [to reduce the financial burden on students and improve accessibility to learning materials]. Most student access the open textbook in [digital PDF format via direct website links and use browser-based platforms for interactive coding].

About the Resource/Textbook 

Course Title and Number - Computer Science I (Discussion + Lab) - CSE 2010
Brief Description of course highlights:  CSE 2010 introduces fundamental programming concepts using the C/C++ programming language. Topics include variables, data types, expressions, conditionals, loops, functions, arrays, file I/O, and basic object-oriented programming principles. Students also gain hands-on experience through lab work focused on problem-solving and software development skills, preparing them for more advanced coursework in computer science and engineering. The course emphasizes computational thinking and algorithmic logic essential for success in the field.


Student population:  CSE 2010 is a required introductory programming course primarily taken by undergraduate students majoring in Computer Science and Computer Engineering. The course also occasionally attracts students from related disciplines such as Mathematics and Information Systems and Technology, particularly those pursuing minors in computer science.

Typical incoming students are freshmen or sophomores, and the course assumes no prior programming experience. However, many students may have completed high school coursework in computer science or have engaged in self-taught programming. The course serves as their first formal exposure to structured programming, algorithmic thinking, and software development practices.

Demographically, the class reflects CSUSB’s diverse student body, including a high percentage of first-generation college students, underrepresented minorities, and commuter students. Many students balance part-time or full-time work alongside their coursework, making affordability and access to instructional materials especially critical.


Learning or student outcomes:  List student learning outcomes for the course.
By the end of this course, students will be able to: 

  • Demonstrate knowledge of basic programming constructs including variables, conditionals, loops, and functions in C/C++.
  • Develop algorithms to solve computational problems and implement them using structured programming techniques.
  • Apply modular design principles through the use of user-defined functions and procedures.
  • Utilize arrays and strings for data processing and manipulation.
  • Debug and test programs effectively using standard development tools.
  • Write and read data to/from external files using file I/O.
  • Understand the fundamentals of object-oriented programming, including class and object concepts.
  • Collaborate on coding tasks and engage in peer reviews to improve software quality.
  • Demonstrate academic integrity and responsible computing practices.

Key Challenges faced and how they were resolved: 
Challenge 1: Finding a comprehensive and pedagogically appropriate open textbook for C++.
- Resolution: Rather than relying on a single OER, I created content from multiple open sources and supplemented it with custom-developed lecture slides, example code, and lab activities. This modular approach allowed me to better match course objectives and student needs.

Challenge 2: Student engagement and programming practice outside the classroom.
-  Resolution: I integrated CSUSB Server, a free online coding platform, to allow students to practice and submit code in real time. This not only reduced the setup burden for students but also made it easier for me to provide timely feedback.

Challenge 3: Ensuring equitable access to all course materials.
-  Resolution: All learning materials—including lecture notes, lab guides, and readings—were embedded directly into Canvas, ensuring zero-cost and device-independent access. I also provided printable versions of key resources for students with limited internet access.

About the Course

Textbook or OER/Low cost Title: Programming Fundamentals – A Modular Approach Using C++ (Open Textbook Library)

Brief Description:  For CSE 2010 – Computer Science I, I adopted a zero-cost, blended OER model anchored by the open textbook Programming Fundamentals – A Modular Approach Using C++, available through the Open Textbook Library.  This textbook provides clear, modular chapters that introduce C++ programming fundamentals including:

  • Data types, variables, and expressions
  • Control structures (if/else, loops)
  • Functions, arrays, pointers
  • File I/O
  • Introduction to object-oriented programming

The book uses an example-driven, modular pedagogical approach, supporting flexible teaching sequences. Each chapter includes summary points, sample code with inline commentary, and structured problem sets designed to reinforce key concepts. To enhance student engagement and mastery, I supplemented the textbook with:

  • zyBooks: Browser-based interactive content with coding activities that provide real-time feedback
  • CS50 C Lectures from Harvard: Multimedia lectures supporting visual learners and reinforcing complex topics
  • Instructor-created Canvas Modules: Weekly lecture notes, coding prompts, quizzes, and lab guides tailored to CSUSB outcomes
  • CSUSB Server Environment: Hands-on practice in a Unix-based terminal to develop practical programming experience
  • CSUSB Library eBook: A free reference resource, available digitally for enrolled students

This integrated OER approach provides students with comprehensive, high-quality materials that are both pedagogically effective and financially accessible.


Authors:  Bradley Kjell, author of Programming Fundamentals – A Modular Approach Using C++, available via the Open Textbook Library (https://open.umn.edu/opentextbooks/textbooks/144)

Dr. Xiangyu Li, instructor and creator of custom lecture notes, lab activities, coding prompts, quizzes, and course slides for CSE 2010 at CSUSB

Student access:  Students access all course materials through multiple convenient and fully digital platforms:

  • Canvas (Course Management System):
     Central hub for weekly modules containing lecture slides, lab guides, assignments, quizzes, and curated readings
  • zyBooks Classroom:
     Students use browser-based interactive content and practice problems
  • CSUSB Unix Server:
     Provides a hands-on coding environment where students practice compiling and debugging code in real-world conditions
  • CS50 C Track Lectures (Harvard):
     External video content embedded in Canvas, used to enhance multimedia engagement with course concepts
  • Open Textbook PDF (Open Textbook Library):
     Freely downloadable textbook for offline access
  • Pfau Library eBooks:
     Optional reference materials linked through the CSUSB Library system

All materials are accessible via laptop, desktop, or mobile device, ensuring maximum flexibility and equity in learning.

Supplemental resources: To support student success and enrich the learning experience, the course utilizes the following no-cost supplemental resources:

For Students:

  • zyBooks:
     An interactive platform providing step-by-step coding practice, visualizations of program execution, and auto-graded exercises
  • CS50 C Track (Harvard):
     Multimedia lecture videos that explain fundamental C programming concepts with engaging visual demonstrations
  • Canvas Modules:
     Custom lecture notes, quizzes, discussion prompts, and weekly programming challenges organized for progressive learning
  • Lab Guides & Assignments:
     Hands-on, guided exercises that align with core programming topics covered each week
  • CSUSB Unix Server:
     Provides a simulated development environment for compiling and testing C++ code

For Faculty:

  • Instructor Solution Keys for labs and quizzes
  • Editable PowerPoint Slides aligned with course objectives
  • Sample Programs and Grading Rubrics
  • zyBooks Instructor Dashboard
  • Support from CSUSB OER Librarian 


Provide the cost savings from that of a traditional textbook.  Previously, students were required to purchase Starting Out with C++: From Control Structures through Objects by Tony Gaddis, which costs approximately $135 per student. With the adoption of open educational resources and zero-cost digital platforms:

  • Current cost per student: $0
  • Estimated annual savings (based on ~60 students per year):
     $135 × 60 = $8,100

This transition not only eliminates financial barriers but also improves access and flexibility across devices and learning styles.

License:
·  The primary open textbook (Programming Fundamentals – A Modular Approach Using C++) is published under a Creative Commons Attribution-ShareAlike (CC BY-SA) license, allowing for adaptation and redistribution with attribution.

·  CS50 materials are freely available under the Harvard OpenCourseWare License, which permits educational reuse.
·  All instructor-created materials (lecture notes, quizzes, labs) are original and will be shared internally within CSUSB for academic use.

OER/Low Cost Adoption

OER/Low Cost Adoption Process

Provide an explanation or what motivated you to use this textbook or OER/Low Cost option.  The primary motivation was to eliminate financial barriers for students while improving the accessibility and relevance of learning materials. Many students in my class are first-generation college students and working part-time, and the cost of a traditional textbook (approximately $135) could be a major burden.

By adopting OER and zero-cost resources, I ensured that all students have immediate, full access to course content from the first day of class. Additionally, using OER allowed me to customize and supplement the materials with targeted lecture notes, lab activities, and coding exercises that are better aligned with my teaching style and course objectives. This flexibility also helped in integrating interactive tools like zyBooks and CSUSB Server for active learning.

How did you find and select the open textbook for this course?  I began my search by consulting with colleagues who had experience using open educational resources. I also explored reputable OER platforms such as the Open Textbook Library and LibreTexts, browsing by subject area and carefully reviewing peer ratings, usage data, and the structure of each resource.

After evaluating several options, I selected Programming Fundamentals – A Modular Approach Using C++ due to its clear modular structure, accessible explanations, and strong alignment with the learning outcomes of CSE 2010. I reviewed sample chapters in detail, mapped the content to my weekly syllabus, and identified areas that could benefit from further improvement. To address those gaps and enhance student engagement, I integrated instructor-developed materials, CS50 C video lectures, and interactive zyBooks coding activities as supplemental resources.


Sharing Best Practices: 
1. Start Small and Supplement Strategically

Don’t feel pressured to find a “perfect” open textbook that does everything. Start by identifying just one or two units you can replace with OER or low-cost materials. Then, build from there.I spent too long searching for a complete one-size-fits-all OER. I later realized that modular supplementation—combining an OER textbook, interactive coding platforms (zyBooks), and custom lecture slides—allowed me to create a more effective and flexible course.

2. Collaborate Early with Campus Librarians and OER Champions
Reach out to your university’s scholarly communications librarian early in the process. They can guide you to high-quality, peer-reviewed OER materials and help you understand Creative Commons licensing. Our OER librarian had a wealth of curated resources and knew how other faculty were already using open content. Collaborating with them saved me hours of independent searching and made the licensing aspect far easier.

3. Prioritize Accessibility and Digital Readiness
Ensure your course materials are mobile-friendly and clearly organized in your Canvas. Students should be able to access all readings, videos, and assignments with minimal clicks and no paywalls. Some students tried to access everything from their phones or had limited internet access. Designing with accessibility in mind from the start (e.g., embedding PDFs, adding clear links) improved student satisfaction and success.


Describe any key challenges you experienced, how they were resolved  and lessons learned. 

1. Incomplete Coverage in the OER Textbook
The open textbook I selected did not cover certain topics in enough depth.

No OER is perfect. I learned to fill content gaps using curated materials like CS50 videos, my own lecture slides, and hands-on lab exercises. Now, I treat OER as a starting point, not a complete solution.


2. Lack of Ancillary Materials (Quizzes, Solutions, Slides)
Unlike commercial textbooks, most OERs do not come with bundled instructor tools like quizzes, test banks, or solution manuals.

This required a significant time investment to create my own assessments and slides. But the benefit was that the course became better tailored to my students’ needs, and I now have reusable content for future terms.

3. Onboarding Students to Multiple Platforms Was Tricky

Students had to access resources across multiple platforms (Canvas, zyBooks, CSUSB server). Early in the term, this created confusion.

I now create a Week 1 “Onboarding Module” with walkthrough videos and a checklist to ensure every student is set up on all platforms by the end of the first week. This significantly reduces drop-off and tech issues later in the course.

About the Instructor

Instructor Name - Dr. Xiangyu Li
Assistant Professor, School of Computer Science and Engineering at the California State University, San Bernardino. 

Please provide a link to your university page.
https://www.csusb.edu/cse/faculty-staff

Please describe the courses you teach
CSE 2010 – Computer Science I (C/C++ Programming Concepts)  This is an introductory course designed for undergraduate students majoring in computer science and related disciplines. It focuses on foundational programming concepts using C and C++, including data types, control structures, functions, arrays, and basic object-oriented programming. The course emphasizes computational thinking, problem-solving, and hands-on lab experiences that prepare students for more advanced coursework.


CSE 5500 – Advanced Bioinformatics  A graduate-level course that explores computational methods used in modern biological research. Topics include sequence alignment algorithms, genome assembly, protein structure and function prediction, protein-protein interactions (PPI), and graph-based models for biological networks. Students also work with real-world biological datasets and apply machine learning and statistical methods to extract meaningful insights from complex biological data.


CSE 5120 – Introduction to Artificial Intelligence   This course introduces the fundamental concepts and algorithms of artificial intelligence. Key topics include search strategies, knowledge representation, reasoning, decision-making, machine learning, and applications such as natural language processing and computer vision. Students engage in both theoretical learning and practical programming assignments to build intelligent systems and explore the ethical dimensions of AI.


Describe your teaching philosophy and any research interests related to your discipline or teaching.  As an educator, I believe that effective teaching combines clarity, inclusivity, and adaptability. My teaching philosophy is rooted in the idea that computer science is not just about writing code, but about developing problem-solving mindsets and analytical reasoning. I aim to create a student-centered, hands-on learning environment that empowers learners of all backgrounds to engage with real-world challenges in computing. I emphasize project-based learning, active participation, and the use of open educational resources to ensure equitable access to knowledge. My courses are designed to scaffold learning progressively, integrate applied exercises, and encourage critical thinking. I also value mentorship and seek to guide students toward research and professional opportunities, particularly those from underrepresented communities.