Java Programming: Arrays, Lists, and Structured Data

Duke University via Coursera

Go to Course: https://www.coursera.org/learn/java-programming-arrays-lists-data

Introduction

### Course Review: Java Programming: Arrays, Lists, and Structured Data If you're looking to deepen your knowledge of Java and software engineering, look no further than Coursera's "Java Programming: Arrays, Lists, and Structured Data." This course builds upon the fundamentals introduced in the prior course—“Java Programming: Solving Problems with Software”—and delves into more advanced data structures and programming concepts, making it an essential step for any aspiring Java developer. #### Overview At its core, this course aims to expand your understanding of Java by introducing you to new data structures, teaching you to read from and write to files, and enabling you to tackle real-world problems involving data manipulation. By the end, you will have gained the skills necessary to create complex Java programs, including an encryption program and an algorithm to break your own encryption, providing a practical application of your newfound knowledge. #### What Will You Learn? Here are some key skills you can expect to acquire upon completing the course: 1. **File Handling**: Learn to effectively read and write data from and to files, a foundational skill in programming that enables you to handle persistent data. 2. **Problem-Solving with Data Files**: Use real-world data files to solve various problems, enhancing your ability to work with data in a practical context. 3. **Cryptography Fundamentals**: Dive into the basics of cryptography, learning how to implement and break simpler cryptographic systems. 4. **Data Structures**: Gain hands-on experience with arrays, ArrayLists, and HashMaps to organize and manage your data efficiently. 5. **Object-Oriented Design**: Apply object-oriented principles to refactor and improve your code, fostering better organization and readability. #### Course Highlights 1. **Welcome Module**: Kick-off your journey with an engaging overview of the course and the resources available to support your learning. 2. **Cryptography and Ciphers**: Explore the historical and practical aspects of cryptography, implementing various ciphers that will develop your understanding of both strings and arrays in Java. 3. **GladLibs Project**: This creative module allows you to apply your skills by building a randomly generated story program. Not only does this enhance your coding abilities, but it also sparks creativity as you see the unexpected narratives that unfold. 4. **Web Server Logs Exploration**: Delve into the world of web servers by analyzing logs, counting unique visitors, and gathering insightful statistics, a highly relevant skill for those interested in web development. 5. **MiniProject: Vigenère Cipher**: This is a pivotal project that challenges you to break a more complex encryption method. It allows for an iterative learning process, expanding your problem-solving and algorithm-design skills. #### Recommendation For anyone who has completed “Java Programming: Solving Problems with Software” and is looking to advance their Java skills further, "Java Programming: Arrays, Lists, and Structured Data" is highly recommended. The blend of theoretical knowledge and practical application is superb, providing a comprehensive learning experience that is both enjoyable and educational. The course is well-structured, and the instructors make complex topics accessible and engaging. The projects, particularly the GladLibs and Vigenère Cipher task, are fun and encourage creative thinking while ensuring that learners apply what they’ve learned in meaningful ways. In summary, whether you are preparing for a career in software engineering or simply looking to enhance your programming skills, this course offers invaluable insights and practical experience in Java programming, data structures, and cryptography. Enroll today and take the next step toward becoming a confident Java developer!

Syllabus

Welcome

Welcome to “Java Programming: Arrays, Lists, and Structured Data”! 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.

Cryptography: Keeping Information Secret

In this module, you will learn about the basics of cryptography, the science of keeping information private and secure. You will learn about simpler cryptographic systems, which were used from the Roman Empire through the early 1900s. You will learn how to implement these ciphers, as well as how to break them. To solve these problems, you will work more with processing Strings, but also learn about arrays—a way to store an indexable sequence of elements. You will be able to: (1) combine Strings using concatenation; (2) build Strings within a Java program using StringBuilder; (3) use arrays to store and manipulate collections of data; (4) refactor your programs for improved organization using object-oriented principles; (5) and practice effective algorithm design.

GladLibs: Stories from Templates

After completing this module, you will be able (1) to program a word frequency counter to analyze any input text file, (2) to select and substitute words from a list into a document template using both ArrayList and HashMap, (3) to create new lists to use in templates, (4) to recognize brittle code, and (5) to improve code with flexible, object-oriented design. You will gain these skills in the framework of developing a randomly generated story that we call GladLibs. You may discover that bald lions change peoples’ lives, or that fluffy dinosaurs get things done in a jiffy. We hope you have fun developing your Java skills this week!

Web Server Logs: From Logs to Visits

In this module, you will learn about how web server logs store information about visitors to a website, and you will write programs to access information like user IP address, date and time of access, and more. Using Java programs you write in this module, you will be able (1) to read information from a web server log, (2) to count the number of unique visitors to your website, and (3) to count the number of times each visitor uses your website.

MiniProject: Vigenère Cipher

In this module, you will develop a program to break the Vigenère Cipher, a more complex version of the Caesar Cipher. You will improve your program in three stages: first decrypting messages where you know the language and key length, then adding the capability to handle messages with unknown key length, then extending the program to handle messages in a range of possible languages. Through this project, you will be able (1) to effectively use HashSet and HashMap, (2) to expand an algorithm from solving a simpler problem to handle broader, more complex problems, and (3) to design and modify program code involving a more complex collection of classes, methods, and data.

Overview

Build on the software engineering skills you learned in “Java Programming: Solving Problems with Software” by learning new data structures. Use these data structures to build more complex programs that use Java’s object-oriented features. At the end of the course you will write an encryption program and a program to break your encryption algorithm. After completing this course, you will be able to: 1. Read and write data from/to files; 2. Solve problems involving data files; 3. Perform quantita

Skills

Data Structure Cryptography Hash Table Java Programming

Reviews

The homework is really helpful to master data structure in Java, while some of it is redundant. Learning this course takes more time than I expected, but it gives me a solid basis.

Learned a lot from the course, but the amount of programming assignment and number of Qs to complete the module (especially week2) was absurdly large. Could be split into separate sessions.

Great course with clear level of difficulties laid out for each sub courses. But the course content jumped between cryptography and other materials making things hard to remember.

This is a very nice course. The teachers speak clearly and explain very well. The subject used to teach Java (cryptography) is interesting. Many thanks!\n\nKind regards, Wim

learned so much during this course. i never thought i'd be able to break the Vigenere cipher and i'm so glad that i was able to. thank you so much, instructors!