Sorry, this page is no longer available
We may earn an affiliate commission when you visit our partners.
Course image
Robert Sedgewick and Kevin Wayne

The basis for education in the last millennium was “reading, writing, and arithmetic;” now it is reading, writing, and computing. Learning to program is an essential part of the education of every student, not just in the sciences and engineering, but in the arts, social sciences, and humanities, as well. Beyond direct applications, it is the first step in understanding the nature of computer science’s undeniable impact on the modern world. This course covers the first half of our book Computer Science: An Interdisciplinary Approach (the second half is covered in our Coursera course Computer Science: Algorithms, Theory, and Machines). Our intent is to teach programming to those who need or want to learn it, in a scientific context.

Read more

The basis for education in the last millennium was “reading, writing, and arithmetic;” now it is reading, writing, and computing. Learning to program is an essential part of the education of every student, not just in the sciences and engineering, but in the arts, social sciences, and humanities, as well. Beyond direct applications, it is the first step in understanding the nature of computer science’s undeniable impact on the modern world. This course covers the first half of our book Computer Science: An Interdisciplinary Approach (the second half is covered in our Coursera course Computer Science: Algorithms, Theory, and Machines). Our intent is to teach programming to those who need or want to learn it, in a scientific context.

We begin by introducing basic programming elements such as variables, conditionals, loops, arrays, and I/O. Next, we turn to functions, introducing key concepts such as recursion, modular programming, and code reuse. Then, we present a modern introduction to object-oriented programming.

We use the Java programming language and teach basic skills for computational problem solving that are applicable in many modern computing environments. Proficiency in Java is a goal, but we focus on fundamental concepts in programming, not Java per se.

All the features of this course are available for free. People who are interested in digging deeper into the content may wish to obtain the textbook Computer Science: An Interdisciplinary Approach (upon which the course is based) or to visit the website introcs.cs.princeton.edu for a wealth of additional material.

This course does not offer a certificate upon completion.

Enroll now

What's inside

Syllabus

BASIC PROGRAMMING CONCEPTS
Why program? This lecture addresses that basic question. Then it describes the anatomy of your first program and the process of developing a program in Java using either virtual terminals or a program development environment, with some historical context. Most of the lecture is devoted to a thorough coverage of Java's built-in data types, with example programs for each.
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Suitable for beginners who seek an introduction to programming and computer science fundamentals
Covers crucial programming concepts like data types, variables, conditionals, loops, and functions
Imparts a strong foundation in object-oriented programming principles and practices
Emphasizes practical problem-solving skills applicable to various computing environments
Utilizes Java as the primary programming language, building proficiency in a widely-used technology

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Foundational programming with purpose

According to learners, Computer Science: Programming with a Purpose is a highly effective introduction to foundational computer science concepts using Java. Students frequently praise the clarity of instruction and the challenging, yet rewarding, programming assignments that significantly deepen understanding. The course provides a strong theoretical and practical base, setting learners up well for more advanced topics. While widely regarded as excellent for building a solid programming background, some absolute beginners might find the pace demanding, requiring dedicated effort. The lack of a certificate is a potential warning for those solely seeking formal credentials, but the consensus is that the knowledge gained is exceptionally valuable.
Uses Java effectively for teaching concepts.
"Using Java was a good choice for learning these fundamental concepts."
"I appreciated learning Java through this course; it's a powerful language."
"While not my first language, the course teaches programming principles that apply beyond Java itself."
Programming assignments are rigorous and helpful.
"The programming assignments are tough, but they are where you truly learn and solidify concepts."
"I spent a lot of time on the assignments, and it was absolutely worth it; they pushed me to think."
"The hands-on coding tasks were the best part for applying what I learned in the lectures."
Instructors explain complex topics effectively.
"The professors explain everything with remarkable clarity and precision."
"Lectures are well-structured and easy to follow, making difficult ideas accessible."
"I appreciated the way the instructors broke down abstract concepts into understandable parts."
Builds a solid base in programming fundamentals.
"This course gave me a really solid foundation in programming fundamentals."
"I feel much more confident about my understanding of core CS concepts after this."
"It provided the necessary groundwork to tackle more complex programming challenges."
Does not offer a completion certificate.
"It's a shame there's no certificate available for finishing this course."
"Lack of a certificate is a drawback for using it to demonstrate skills to employers."
"I took it for the learning, but others might miss the formal credential."
Can be challenging, especially for absolute beginners.
"As someone completely new to programming, the pace felt very fast at times."
"It requires significant dedication and effort if you have no prior coding experience."
"The leap from basic syntax to complex assignments can be steep."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Computer Science: Programming with a Purpose with these activities:
Review Modern Computer Science: An Interdisciplinary Approach
Review key concepts and prepare for the course by reviewing the companion text.
Show steps
  • Read the preface and introduction
  • Review the table of contents
  • Identify chapters and sections that will be covered in the course
  • Make notes on key concepts
Follow Java Programming Tutorials
Supplement your learning with step-by-step guidance from online tutorials.
Browse courses on Java
Show steps
  • Research and identify reputable online Java tutorials
  • Start with tutorials that cover the basics of Java
  • Follow the instructions provided in each tutorial
  • Practice the concepts learned through exercises and examples
  • Seek assistance from the tutorial comments section or online forums if needed
Practice Java Coding Drills
Solidify your understanding of Java syntax and problem-solving through practice.
Browse courses on Java
Show steps
  • Find online Java coding exercises or purchase a coding practice workbook
  • Set aside regular practice time and commit to it
  • Start with basic exercises and gradually increase the difficulty level
  • Review your solutions against provided answers or consult discussion forums for assistance
Four other activities
Expand to see all activities and additional details
Show all seven activities
Participate in Online Study Group
Engage with peers, share knowledge, and reinforce your understanding through collaborative discussions.
Browse courses on Java
Show steps
  • Join or create an online study group for the course
  • Meet regularly with the group and discuss course topics
  • Review key concepts, work on practice problems together, and share resources
  • Seek support and clarification from group members
  • Present your own understanding of concepts to the group
Create Java Code Examples
Solidify your understanding of Java concepts by translating them into code and creating your own examples.
Browse courses on Java
Show steps
  • Identify a Java concept or algorithm you want to reinforce
  • Design and write a Java program that demonstrates the concept
  • Test your program to ensure it works as expected
  • Document your code with comments
  • Share your code with classmates or in online forums for feedback
Participate in Online Coding Challenges
Test your skills, solve real-world problems, and gain recognition by participating in online coding challenges.
Browse courses on Java
Show steps
  • Identify reputable online coding challenge platforms
  • Select challenges that align with your skill level and interests
  • Read the problem statement carefully and develop a solution strategy
  • Implement your solution in Java and submit it for evaluation
  • Analyze the results and reflect on areas for improvement
Develop a Simple Java Application
Apply your programming skills by building a functional Java application that solves a real-world problem.
Browse courses on Java
Show steps
  • Identify a problem or need that you can address with a Java application
  • Design and plan the functionality of your application
  • Write and test the Java code for your application
  • Deploy and run your application
  • Gather feedback from users and iterate on your design to improve the application

Career center

Learners who complete Computer Science: Programming with a Purpose will develop knowledge and skills that may be useful to these careers:
Software Engineer
A cornerstone of software development is the capacity to program efficiently. This course, Computer Science: Programming with a Purpose, offered by Princeton University, caters directly to this necessity. Through a comprehensive exploration of programming fundamentals, control structures, data structures, input/output mechanisms, and object-oriented programming, you will gain a robust foundation in software engineering practices. These concepts are the backbone of modern software applications, and mastering them will significantly enhance your ability to design, develop, and implement software solutions effectively.
Data Scientist
In the realm of data science, proficiency in programming is paramount. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a solid foundation in programming principles and techniques. Through hands-on exercises and real-world examples, you will learn how to manipulate and analyze data, construct predictive models, and communicate insights effectively. The course's emphasis on problem-solving and computational thinking aligns perfectly with the core responsibilities of a data scientist, enabling you to excel in this rapidly growing field.
Web Developer
Web development hinges on the ability to translate designs into functional and visually appealing websites. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a comprehensive introduction to programming concepts essential for web development. You will learn how to create interactive web pages, handle user input, and manage data effectively. The course's focus on object-oriented programming and modular design will equip you with the skills necessary to build robust and maintainable web applications.
Computer Programmer
As a computer programmer, you will be responsible for translating complex requirements into efficient and reliable software solutions. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a foundational understanding of programming principles and practices. Through a structured approach, you will learn the fundamentals of programming, including data types, control structures, functions, and object-oriented design. These concepts are essential for developing high-quality software applications that meet the needs of users effectively.
Software Developer
Software developers play a pivotal role in designing, developing, and maintaining software systems. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a comprehensive foundation in programming concepts and techniques essential for software development. You will learn how to write clean and efficient code, design modular and reusable components, and leverage object-oriented programming principles. These skills are in high demand in the software industry and will empower you to contribute effectively to the development of innovative software solutions.
Computer Scientist
Computer science is a vast and rapidly evolving field that encompasses the study of computation, data, and their applications. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a foundation in the core concepts of computer science, including programming, algorithms, and data structures. Through hands-on projects and real-world examples, you will gain a deep understanding of how computers work and how to solve computational problems effectively. This course is an excellent starting point for individuals aspiring to a career in computer science or related fields.
Systems Analyst
Systems analysts play a crucial role in bridging the gap between business requirements and technical solutions. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a solid foundation in programming principles and problem-solving techniques essential for systems analysis. You will learn how to analyze complex systems, design efficient solutions, and communicate effectively with stakeholders. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop robust and maintainable software systems that meet the needs of organizations.
Database Administrator
Database administrators are responsible for managing and maintaining the integrity of an organization's data. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a solid foundation in programming principles and data management techniques essential for database administration. You will learn how to design and implement database systems, optimize data storage and retrieval, and ensure data security and integrity. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop robust and scalable database solutions.
Information Security Analyst
Information security analysts are responsible for protecting an organization's data and systems from unauthorized access, use, disclosure, disruption, modification, or destruction. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a strong foundation in programming principles and security concepts essential for information security analysis. You will learn how to identify vulnerabilities, assess risks, and implement security measures to protect sensitive data and systems effectively.
Technical Writer
Technical writers are responsible for creating user manuals, technical documentation, and other written materials that explain complex technical concepts to non-technical audiences. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a solid foundation in programming principles and technical writing techniques essential for technical writing. You will learn how to organize and present technical information clearly and concisely, with a focus on user experience and readability. The course's emphasis on modular design and object-oriented programming will equip you with the skills necessary to create well-structured and maintainable technical documentation.
Quality Assurance Analyst
Quality assurance analysts are responsible for ensuring the quality of software products and services. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a solid foundation in programming principles and testing techniques essential for quality assurance analysis. You will learn how to design and execute test cases, analyze results, and report defects effectively. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop robust and reliable software products.
Business Analyst
Business analysts are responsible for understanding business needs and translating them into technical requirements. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a foundation in programming principles and business analysis techniques essential for business analysis. You will learn how to gather and analyze business requirements, design and document system solutions, and communicate effectively with stakeholders. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop software solutions that meet the needs of businesses effectively.
Project Manager
Project managers are responsible for planning, organizing, and executing projects to achieve specific goals. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a foundation in programming principles and project management techniques essential for project management. You will learn how to define project scope, develop project plans, track progress, and manage risks effectively. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop and manage software projects successfully.
Data Architect
Data architects are responsible for designing, building, and maintaining data architectures to meet the needs of an organization. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a strong foundation in programming principles and data architecture concepts essential for data architecture. You will learn how to design and implement data models, manage data quality, and ensure data security and integrity effectively. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop robust and scalable data architectures.
Software Tester
Software testers are responsible for testing software products to identify and report defects. This course, Computer Science: Programming with a Purpose, offered by Princeton University, provides a foundation in programming principles and testing techniques essential for software testing. You will learn how to design and execute test cases, analyze results, and report defects effectively. The course's emphasis on object-oriented programming and modular design will equip you with the skills necessary to develop robust and reliable software products.

Reading list

We've selected 11 books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Computer Science: Programming with a Purpose.
Provides a wealth of practical advice on how to become a better Java programmer. It good choice for students who want to learn how to write more effective and efficient Java code.
Comprehensive reference guide to Java programming. It good choice for students who want to learn more about the Java language and its features.
Provides a comprehensive guide to writing clean and maintainable Java code. It good choice for students who want to learn how to write high-quality Java programs.
Provides a collection of best practices for writing effective Java code. It good choice for students who want to improve their Java programming skills.
Provides a fun and engaging introduction to design patterns in Java. It good choice for students who want to learn how to design and implement reusable Java components.
Comprehensive guide to Java concurrency. It good choice for students who want to learn how to write concurrent Java programs.
Provides a comprehensive guide to Java network programming. It good choice for students who want to learn how to write Java programs that can communicate over a network.
Provides a comprehensive guide to Java database development. It good choice for students who want to learn how to write Java programs that can interact with a database.
Fun and engaging introduction to Java programming. It good choice for students who are new to Java or who want to learn in a more interactive way.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser