**Course Review: The Complete Java Masterclass**
PrefaceThe word "Java" has become so ubiquitous that even non-technical folks seem to be aware of it these days. Thanks to the tremendous popularity of the programming language, its growth across various domains has been unprecedented. The major reason behind the language's success is in its platform independent nature. Java code written on one platform works on others without any modification. And it supports most of the major platforms ranging from mobile devices to cloud computing server farms. Being the backbone of the Android operating system, Java has a massive advantage over its counterparts in terms of number of users and contributors alike. When a language is so prevalent, its user-base is bound to grow at a constant rate. And what could be a better way to enter the Java ecosystem than to follow a path that is well proven. There is a plethora of self-learning material available for Java, including books, YouTube tutorials, and online courses. In this article I am going to provide insight in to one of the best courses available on the popular online training platform, Udemy. The Complete Java Masterclass by Tim Buchalka and Goran Lochert is a great course for learners entering the world of Java, as well as those who are already familiar with the language and looking to better their understanding of the newer versions.
Tim BuchalkaHaving worked as a software engineer for more than 30 years, we cannot ask for a better instructor than Tim Buchalka, who is a Java, Android, and Python expert. He has trained more than 335K students so far, which proves his teaching skills beyond doubt. It's not always common for a very technical person to be good at explaining concepts to others, but he does a perfect job breaking things down to a basic level for beginners to understand. Tim has been using Java for over 15 years now, and his command over the language is evident as he makes the learning more of a fun experience than a mere exercise. Some other courses offered by Tim's Learn Programming Academy are:
- Advanced Algorithms in Java
- Android LibGDX Game Development Masterclass
- C Programming for Beginners
Goran LochertGoran Lochert has been a software developer for 11+ years focusing on desktop, web, and mobile applications. He is a certified Java Developer, well-versed with various tools and concepts associated with the language, such as Maven, Spring, Gradle, and JavaFX. Additionally, Goran is an avid game developer with expertise in gaming engines and frameworks. He also contributes to a popular game framework called LibGDX.
OverviewThis course spans across 356 lectures and the duration is around 76 hours in total. The target audience includes students of all levels, from beginner to advanced. At the time of this writing, more than 230K students have undertaken the course, which provides credibility to its contents. The Complete Java Masterclass has been created while keeping in mind versions 8 and 9 of the Java Development & Runtime Environments provided by Oracle Corp. The course has also been updated to include the new Java 10 version, but the instructor still focuses on long-term support versions to ensure stability of the course contents. Nevertheless, it still applies to the latest version of the software. The course is organized in such a format that every topic has source code associated with it followed by a challenge focusing on real-world scenarios. This challenge forces the learners to apply the concepts they've just learned to solve commonly encountered problems in software development. The quality of content is excellent, and it is presented in a professional manner using HD videos and subtitles in various languages, powered by Google translate. This increases the outreach of the course to audiences across various geographic locations.
ContentsLet's have a look at the topics being covered as a part of this course:
IntroductionTim kicks off the course by introducing himself and then goes on about explain how the contents are organized. He also explains how to navigate through the course and various settings related to the course videos.
SetupThis section covers how to choose the appropriate version of Java and set it up on the user's machine. Tim enlists the installation steps for commonly used platforms like Windows, Linux, and Mac. The IDE chosen for the course is IntelliJ IDEA and users can get an extended trial for its Ultimate Edition if interested.
First StepsLike most trainings, the course helps learners come up with their first Java application. Tim takes his time to make beginners comfortable with the Java Runtime Environment and then walks them through the IntelliJ IDEA interface to ease the learning process.
Variables, Data types, OperatorsThe next steps are learning about the basic building blocks of the language and various operations that Java allows to be performed on the data.
Expressions, Statements, Code blocks, Methods and Coding ChallengesThis section is essential for learners to keep up with the pace of the course as it covers a good amount of Java concepts as well as the first programming challenge. Learners get to apply the concepts they have picked up in the integrated exercises and the course allows them to check their solution for correctness.
Control Flow StatementsIn this section you'll learn the various ways to control execution flow of a Java program such as loops, switch constructs, and conditional statements, which are all covered as a part of this section.
OOP ConceptsWith Java being an object-oriented programming language, Tim spends a significant amount of time elaborating OOP concepts and their Java implementation. The first section covers classes, constructors, and inheritance while the latter covers composition, encapsulation, and polymorphism.
ConceptsSome more Java concepts are introduced in this section such as arrays, lists, boxing, unboxing, abstract classes, and interfaces. The entire next section is dedicated to Java Generics. In the subsequent sections, Tim covers features of the language such as packages, scope, and static/final keywords.
CollectionsA rather important section in terms of understanding where a lot of useful constructs and their implementations are covered using various challenges. The topics include Java collection framework, searching, comparator, maps, sets, hash sets, etc.
JavaFXThis section takes learners from command line interface applications to graphical user interface apps. They get to learn about APIs as well as event handlers responsible for interaction between application users and the interface. Another important concept of multithreading, which gives Java an edge over its counterparts, is covered in this section. How to take care of concurrency when multiple threads are to be synchronized is explained in subsequent sections later.
I/O, Exceptions, and FilesystemsLike all other languages, Java provides users with functionality to perform input and output operations. Tim explains to learners the concepts of I/O, filesystems, and exception handling as part of this course section.
Lambda ExpressionsLambda expressions, which let you express instances of single-method classes more compactly, are one of the prominent Java feature that provides users with functional programming features. Hence, it's important to develop a good understanding about the same.
Regular ExpressionsAnother useful feature which helps, especially in the field of analytics, is regular expressions. With the usage of pattern matching classes, RegEx becomes a powerful feature for any language to have.
Debugging and Unit TestingA programmer would never underestimate the criticality of debugging skills to troubleshoot through the issues arising while coding. Tim, being a hardcore programmer, knows this well and takes learners through the details of debugging and unit testing. He elaborates the usage of watch points to step through the code to understand its execution and introduces the JUnit suite used for unit testing along with assert examples.
DatabasesDatabase connectivity is a must-have for programming languages these days, and Java is no exception. It has various mechanisms to access many different types of databases through the many libraries available for the language. The course focuses on an open source DB tool SQLite, how to use SQL statements to perform various database operations, and how to use Java DataBase Connectivity APIs to access the database from Java code.
Network ProgrammingA popular choice for network applications, Java offers robust framework to design and implement client-server applications. The section explains various interfaces that Java provides for HTTP operations.
Java 9 ModulesA relatively new concept, Java modules were introduced in version 9 of the JDK. As the name suggests, modules help in categorization of the features i.e. JPMS. This section introduces the types of the modules, how to declare them and their actual usage.
Migrating Java Projects to Version 9An important section towards the end of the course helps learners migrate Java projects written in older version to the newer version 9. These steps provide guidance to structure the project in a modular way, categorize the configuration files, and resolving the project dependencies. It's important considering the features offered by JDK 9 to understand the migration process from older versions to newer.
Bonus materialThe concluding section includes a list of other courses offered by Tim at Learn Programming Academy and a list of source code organized according to the course sections. The list of contents seems fairly exhaustive, as Java has evolved to be vast in nature over the period of several years since its introduction. Tim, however, has done a fantastic job covering most of the important concepts in a fair amount of time.
FeaturesEnlisting some other features of the course here:
- The interface provided for coding challenges seems intuitive for learners as it has integrated solutions as well as a testing framework together. This encourages learners to come up with unit tests for their code.
- The instructor keeps revisiting concepts learned in previous sections to provide the learners with even more practice and a more solid understanding.
- Tim not only trains you on important Java constructs, but he also provides you with advanced coding tips and tricks used by programmers professionally. This is especially helpful for intermediate/advanced level learners.
- The course provides certificate of completion and a lifetime access to course material after conclusion. As the course contents keeps updating, this proves to be a continuous learning process for interested learners. I'd credit this as the reason for many of the thousands of 5-star reviews.
ProsHere are some positives about the course that stood out:
- Tim has been one of the top 10 instructors in the 2015 Udemy instructor awards, which speaks volumes about his credibility and grasp over Java, as well as the online tutoring platform.
- The course doesn't just focus on desktop platforms, but also talks about Android applications. Learners can utilize the knowledge obtained from the course to enter the rapidly growing ecosystem of mobile devices.
- The course content isn't just limited to Java, it also talks about tools and practices used by developers to increase productivity in general. An example is a well-known tool used by developers, DiffMerge.
- If interested, learners can also help instructors in generating course content, provided they have the skills.
ConsAs with everything, this course does have some areas that need improvement:
- While looking at the challenges, I felt that they focused more on the part covered in that section. The instructor frequently revisits previously covered topics as part of the course lectures, and if the same is done with challenges, it would help students understand things further.
- As the course videos are high quality, the video stream lags a bit at times. The performance does improve at lower resolutions, however the overall experience downgrades in doing so. This could be a bandwidth issue, but it was experienced on more than one device. This is probably more of a complaint about the platform than the actual course, but still worth noting.