We may earn an affiliate commission when you visit our partners.
Course image
Robert Duvall, Owen Astrachan, Andrew D. Hilton, and Susan H. Rodger

Solve real world problems with Java using multiple classes. Learn how to create programming solutions that scale using Java interfaces. Recognize that software engineering is more than writing code - it also involves logical thinking and design. By the end of this course you will have written a program that analyzes and sorts earthquake data, and developed a predictive text generator.

After completing this course, you will be able to:

1. Use sorting appropriately in solving problems;

2. Develop classes that implement the Comparable interface;

3. Use timing data to analyze empirical performance;

Read more

Solve real world problems with Java using multiple classes. Learn how to create programming solutions that scale using Java interfaces. Recognize that software engineering is more than writing code - it also involves logical thinking and design. By the end of this course you will have written a program that analyzes and sorts earthquake data, and developed a predictive text generator.

After completing this course, you will be able to:

1. Use sorting appropriately in solving problems;

2. Develop classes that implement the Comparable interface;

3. Use timing data to analyze empirical performance;

4. Break problems into multiple classes, each with their own methods;

5. Determine if a class from the Java API can be used in solving a particular problem;

6. Implement programming solutions using multiple approaches and recognize tradeoffs;

7. Use object-oriented concepts including interfaces and abstract classes when developing programs;

8. Appropriately hide implementation decisions so they are not visible in public methods; and

9. Recognize the limitations of algorithms and Java programs in solving problems.

10. Recognize standard Java classes and idioms including exception-handling, static methods, java.net, and java.io packages.

Enroll now

What's inside

Syllabus

Welcome to the Course
Welcome to “Java Programming: Principles of Software Design”! We are excited that you are starting our course to learn how to write programs in Java, one of the most popular programming languages in the world. In this introductory module, you will hear an overview of this course and be introduced to the supporting resources available.
Read more
Earthquakes: Programming and Interfaces
In this module, we will introduce a data set containing details about earthquakes around the world. You will learn how to pull this data into a program, search through the data, and filter the data based on desired criteria. By the end of this module, you will be able to (1) write programs that include multiple classes and ArrayLists of class types, (2) find the maximum value in an ArrayList, (3) use a Filter interface to search through data, (4) implement interfaces with method signatures, and (5) combine several filters together.
Earthquakes: Sorting Algorithms
In this module, you will continue using real earthquake data to explore several sorting algorithms. You will learn how to implement a selection sort and a bubble sort, then be introduced to a Java method Collections.sort, which sorts with much greater efficiency. By the end of this module, you will be able to (1) implement several sorting algorithms from scratch, (2) use efficient pre-existing sorting classes, (3) modify a class’s compareTo method to choose the criteria by which objects of that type are ordered, and (4) write classes that implement the Comparator interface to create interchangeable sorting criteria.
N-Grams: Predictive Text
In this module, you will explore some of the underlying concepts of predictive text. The first lesson will introduce random character generation and then how to train the character selection based on an input text. The second lesson will extend this concept to complete words. By the end of this module, you will be able to: (1) base random text generation on the frequency of characters in a training text, (2) collect a set of characters that occur in a text after randomly chosen initial character(s) to create a semi-random text, (3) extend the predictive text generation to use whole words, and (4) implement your own .equals method to compare complex data types.
Java: Tools and Libraries for Everyone
As you reach the end of this series, you may wish to extend your Java experience to tools beyond those provided here. This module will cover some of the Java basic information that is needed to program without BlueJ or the edu.duke library. After completing this module, you will be able to: (1) write a main method to start a Java program in any programming environment, (2) use the “static” keyword to modify fields, (3) find alternative editors to use with Java, (4) use exceptions to debug your program and make it more robust, and (5) reference Java libraries that are necessary to read files without the edu.duke library.

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Challenges learners to grapple with comprehensive programming concepts that are relevant to industry, such as abstract classes and interfaces
Introduces concepts like N-grams and predictive text
Helps learners explore the connections between logic, design, and coding by studying concrete, real-world problems
Allows learners to practice these concepts by asking them to build a program that analyzes and sorts earthquake data and a predictive text generator
Provides opportunities to apply sorting algorithms in a practical context
Offers numerous hands-on lessons that allow for practical application of concepts

Save this course

Save Java Programming: Principles of Software Design to your list so you can find it easily later:
Save

Reviews summary

Well-received java programming course for beginners

Learners largely agree that this course is a superb introduction to Java programming. They recommend it for beginners who have little to no experience with coding. Many found the programming assignments to be challenging but rewarding, and several noted that they improved their coding skills significantly as a result. The course is well-structured and provides clear and engaging video lectures. The instructors are knowledgeable and supportive, and they provide timely feedback on assignments. Overall, learners say this course is a great value for the price, and they highly recommend it to anyone interested in learning Java.
Suitable for learners with little to no coding experience
"very good course for beginners"
"This course is a very well-designed course with meaningful projects."
Instructors are knowledgeable and provide timely feedback
"Really great teachers and extremly well prepared learning units with a lot of practical and challenging exercises!"
Engaging assignments help learners improve coding skills
"Good course with a lot of programming assignment which an improve your coding skills."
Assignments can be difficult but rewarding
"challenging but rewarding"
"Really hard but great course if you have the time and desire to learn!"
Comprehensive and well-structured course
"Well designed and well structured with the packages, resources, programming exercises and practice quiz."
"This course is a very well-designed course with meaningful projects."
Some assignments lack clear instructions and guidelines
"assignments are frustrating"
"It is a good course, but I believe it needs to be updated and that some quiz need reviewing."
Video lectures can be hit or miss in terms of quality and depth
"The video lectures were not enough to understand the concepts."
"videos explain less and less but tasks become more and more complicated."

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 Java Programming: Principles of Software Design with these activities:
Explore Java Exception Handling and Debugging Techniques
Enhance your ability to handle errors and improve the robustness of your Java programs.
Browse courses on Java
Show steps
  • Review the basics of exception handling in Java.
  • Practice using try-catch blocks to handle exceptions.
  • Explore common Java exceptions and their causes.
Organize and Review Course Materials
Establish a structured approach to managing your course materials for enhanced retention and retrieval.
Show steps
  • Create a dedicated folder or notebook for course materials.
  • Organize materials into logical categories or sections.
  • Review materials regularly to reinforce learning.
Join a Java Study Group
Collaborate with peers to discuss course concepts, share knowledge, and support each other's learning.
Show steps
  • Find a study partner or group.
  • Establish regular meeting times and a study schedule.
  • Take turns presenting and discussing course material.
  • Work together to solve problems and complete assignments.
  • Provide feedback and support to your group members.
Six other activities
Expand to see all activities and additional details
Show all nine activities
Practice Java Sorting Algorithms
Reinforce your understanding of sorting algorithms by implementing several from scratch.
Browse courses on Java
Show steps
  • Implement the selection sort algorithm.
  • Implement the bubble sort algorithm.
  • Use the Collections.sort method to sort an array.
Attend a Java Programming Workshop
Engage with industry professionals and experts to enhance your Java skills and knowledge.
Browse courses on Java
Show steps
  • Identify relevant Java workshops in your area or online.
  • Register for the workshop.
  • Actively participate in the workshop sessions.
  • Network with other attendees and speakers.
Build a Java-Based Predictive Text Generator
Apply your knowledge of Java programming to create a practical tool that demonstrates your understanding of predictive text algorithms.
Browse courses on Java
Show steps
  • Design the structure of your predictive text generator.
  • Implement the random character generation algorithm.
  • Enhance the generator to train based on input text.
  • Extend the generator to predict words.
  • Test and refine your predictive text generator.
Read "Effective Java" by Joshua Bloch
Gain insights into best practices and design patterns for writing robust, maintainable, and efficient Java code.
Show steps
  • Read the book.
  • Apply the principles to your own Java projects.
  • Discuss the book's concepts with your peers or instructor.
Create a Java Application to Analyze and Visualize Earthquake Data
Apply your knowledge of Java, data structures, and algorithms to develop a practical application that analyzes and presents earthquake data.
Browse courses on Java
Show steps
  • Design the architecture of your application.
  • Implement data processing and analysis algorithms.
  • Create interactive visualizations to present the data.
  • Test and refine your application.
  • Present your findings and insights from the earthquake data.
Develop a Java Class Library for Data Structures and Algorithms
Demonstrate your mastery of Java by creating a reusable and well-designed class library that implements a collection of data structures and algorithms.
Browse courses on Java
Show steps
  • Design the architecture and interfaces for your class library.
  • Implement the data structures and algorithms as Java classes.
  • Create unit tests to verify the functionality of your library.
  • Document the usage and APIs of your library.
  • Share your library with the community or use it in your own projects.

Career center

Learners who complete Java Programming: Principles of Software Design will develop knowledge and skills that may be useful to these careers:
Java Developer
As a Java Developer, you will be responsible for designing, developing, and maintaining Java applications. This course will help you build a strong foundation in Java programming, including object-oriented programming concepts, data structures, and algorithms. You will also learn how to use Java libraries and frameworks to develop robust and scalable applications. With this knowledge, you will be well-equipped to succeed as a Java Developer.
Software Engineer
As a Software Engineer, you will be responsible for designing, developing, and maintaining software systems. This course will help you build a strong foundation in software engineering principles, including object-oriented design, software testing, and agile development. You will also learn how to use Java programming language to develop high-quality software applications. With this knowledge, you will be well-equipped to succeed as a Software Engineer.
Data Scientist
As a Data Scientist, you will be responsible for collecting, analyzing, and interpreting data to solve business problems. This course will help you build a strong foundation in data science principles, including data mining, machine learning, and statistical analysis. You will also learn how to use Java programming language to develop data science applications. With this knowledge, you will be well-equipped to succeed as a Data Scientist.
Mobile Developer
As a Mobile Developer, you will be responsible for designing, developing, and maintaining mobile applications. This course will help you build a strong foundation in mobile development principles, including Android and iOS development. You will also learn how to use Java programming language to develop native and hybrid mobile applications. With this knowledge, you will be well-equipped to succeed as a Mobile Developer.
Game Developer
As a Game Developer, you will be responsible for designing, developing, and maintaining video games. This course will help you build a strong foundation in game development principles, including game design, game programming, and game art. You will also learn how to use Java programming language to develop 2D and 3D games. With this knowledge, you will be well-equipped to succeed as a Game Developer.
Web Developer
As a Web Developer, you will be responsible for designing, developing, and maintaining websites and web applications. This course will help you build a strong foundation in web development principles, including HTML, CSS, JavaScript, and Java. You will also learn how to use Java programming language to develop dynamic and interactive web applications. With this knowledge, you will be well-equipped to succeed as a Web Developer.
Database Administrator
As a Database Administrator, you will be responsible for managing and maintaining databases. This course will help you build a strong foundation in database management principles, including database design, database optimization, and database security. You will also learn how to use Java programming language to develop database applications. With this knowledge, you will be well-equipped to succeed as a Database Administrator.
Systems Analyst
As a Systems Analyst, you will be responsible for analyzing and designing business systems. This course will help you build a strong foundation in systems analysis principles, including business process analysis, requirements gathering, and system design. You will also learn how to use Java programming language to develop system prototypes and simulations. With this knowledge, you will be well-equipped to succeed as a Systems Analyst.
Technical Writer
As a Technical Writer, you will be responsible for writing technical documentation, such as user manuals, white papers, and training materials. This course will help you build a strong foundation in technical writing principles, including audience analysis, information design, and document production. You will also learn how to use Java programming language to develop interactive documentation and online help systems. With this knowledge, you will be well-equipped to succeed as a Technical Writer.
Project Manager
As a Project Manager, you will be responsible for planning, organizing, and managing projects. This course may be useful for you as it will help you build a strong foundation in project management principles, including project planning, project scheduling, and project budgeting. You will also learn how to use Java programming language to develop project management tools and applications. With this knowledge, you will be better equipped to succeed as a Project Manager.
Business Analyst
As a Business Analyst, you will be responsible for analyzing business needs and developing solutions. This course may be useful for you as it will help you build a strong foundation in business analysis principles, including business process analysis, requirements gathering, and solution design. You will also learn how to use Java programming language to develop business analysis tools and applications. With this knowledge, you will be better equipped to succeed as a Business Analyst.
Information Security Analyst
As an Information Security Analyst, you will be responsible for protecting an organization's information systems from cyber threats. This course may be useful for you as it will help you build a strong foundation in information security principles, including risk assessment, vulnerability assessment, and incident response. You will also learn how to use Java programming language to develop security tools and applications. With this knowledge, you will be better equipped to succeed as an Information Security Analyst.
Quality Assurance Analyst
As a Quality Assurance Analyst, you will be responsible for testing and evaluating software products. This course may be useful for you as it will help you build a strong foundation in software testing principles, including test planning, test execution, and test reporting. You will also learn how to use Java programming language to develop automated testing tools and applications. With this knowledge, you will be better equipped to succeed as a Quality Assurance Analyst.
Computer Support Specialist
As a Computer Support Specialist, you will be responsible for providing technical support to computer users. This course may be useful for you as it will help you build a strong foundation in computer support principles, including hardware troubleshooting, software troubleshooting, and customer service. You will also learn how to use Java programming language to develop support tools and applications. With this knowledge, you will be better equipped to succeed as a Computer Support Specialist.
Network Administrator
As a Network Administrator, you will be responsible for managing and maintaining computer networks. This course may be useful for you as it will help you build a strong foundation in network administration principles, including network design, network configuration, and network troubleshooting. You will also learn how to use Java programming language to develop network management tools and applications. With this knowledge, you will be better equipped to succeed as a Network Administrator.

Reading list

We've selected 13 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 Java Programming: Principles of Software Design.
Offers a comprehensive and in-depth examination of Java programming language concepts, design patterns, and best practices. It is commonly used as a textbook in academic institutions and by industry professionals.
Teaches the principles of writing clean, maintainable code. It's a must-read for any software developer who wants to improve their coding skills.
Effective Java teaches the Java programming language and advanced techniques to programmers who already know the basics of the language. It's a great resource for learning about best practices and common pitfalls to avoid.
Valuable resource for anyone who wants to learn about concurrency in Java. It covers a wide range of topics, including thread safety, synchronization, and performance.
Provides a comprehensive overview of agile software development. It covers the principles, patterns, and practices of agile software development.
Comprehensive guide to Java security. It covers a wide range of topics, including security threats, security best practices, and security tools.
Introduces the concepts of domain-driven design, which software design approach that focuses on the business domain of the software.
Practical guide to design patterns. It uses a humorous and easy-to-understand approach to teach the concepts of design patterns.
Good starting point for the beginners who are looking to study Java for the first time. It provides a friendly and humorous introduction to the Java programming language. This book is very useful as it covers the basics of Java and provides various examples to help the reader understand better.
Good option for beginners as it goes over the basics of Java. It's easy to follow and provides a good foundation for learning Java.

Share

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

Similar courses

Here are nine courses similar to Java Programming: Principles of Software Design.
Java Programming: Solving Problems with Software
Most relevant
Java Programming: Arrays, Lists, and Structured Data
Most relevant
Java Programming Fundamentals
Most relevant
Object-Oriented Programming in Kotlin
Most relevant
Mastering UX & Business App Development with OOP
Most relevant
Business Application of Machine Learning and Artificial...
Most relevant
Working with Classes and Interfaces in Java 11
Most relevant
C# 10 Playbook
Most relevant
Java SE 17 Advanced Language Features
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 - 2024 OpenCourser