Any learning process consists of practice and theory. In programming, everything is exactly the same — two approaches: practical and theoretical. Both have their pros and cons. In this post, you will learn more about each of them and decide what approach to use to learn Java. You decide.
So, let’s get started.
Theoretical Approach
The name itself says that you will start with the theory in this approach that supposes learning Java from the very basics, starting from pretty complicated topics such as JVM and compiler work, then to go syntax of Java (variables to loops, methods, classes, OOP concepts and so on). This bottom-up approach is frequently used in formal programming courses specific to colleges or other institutions. The idea is to give you a solid foundation of the essential programming skills needed to start making things and practicing on real-world projects in the future.
Advantages
- When you have a clear understanding of basic concepts, you most likely experience no gaps in knowledge when learning more advanced topics. One of my friends who used this approach in training, before taking each subsequent step, read a ton of books on the previous topics to avoid missing something and get a full understanding of each topic.
- Although the time from the very beginning to your first implemented project usually takes time, in a long-run perspective, your knowledge breadth will eventually speed up your process down the line. Other than that, it will help you be more attentive to details while coding to avoid possible pitfalls.
Disadvantages
- Students find it hard to understand how things they’ve learned are connected. There are no issue writing functions throughout the day until the students have to build software beyond individual functions or classes. This is where the main problems start.
- The complete beginners can hardly understand how to implement all the acquired knowledge. Without putting them into practice right away, a huge amount of theory can just pass by without lingering in your head. This is another proof that programming is more about practice — many things are hard to explain in theory. Same as with swimming — you won’t understand how to swim until you try.
- The theoretical approach is slow. It may take you forever to master all the essential skills, and I am still silent about the fact that the OOP concepts sometimes change during your study, so you need to start all over again. When you have to spend months or even years on the theory without creating some exciting things during that time, you get bored, demotivated, and are more likely to give it up.
Practical Approach
The main idea of the hands-on approach is to learn by doing or, in other words, developing pieces of real projects. Many independent learners use a practical approach, so they start creating things, be it games or interactive web pages, straight away since the moment they begin to learn programming. This is where tutorials published on YouTube by other devs can help — when coming after the instructions, you can end up creating something significant.
Advantages
- The practical approach allows you to create some real pieces of software in the blink of an eye. The faster you can create something, the more excited you get.
- Coding itself lets you learn about different components from practice, they won’t necessarily be written in books or mentioned in courses. As far as you get to know about them, you get a clear understanding of what you want to learn further and what you don’t, what is interesting for you, and what is not. Based on that, you make your informed choice and keep up learning following your choice.
Disadvantages
- The hands-on approach doesn’t emphasize basics, so the students who are keen on creating something as soon as possible often skip the fundamentals. For this reason, they end up creating their own projects without a clear understanding of how their code works. Another flaw of the hands-on approach is that many tutorials lack enough details — the students have to fill the gaps themselves, but they can’t do that. A small deviation from the instructions might lead to a broken project and difficulties in diagnosing the problem.
- Without acquiring fundamental knowledge, the students are missing the big picture and understanding what they are actually doing.
Which One is the Winner?
So, you’ve gotten to this paragraph to find out which approach is worth choosing. But, the point is that one approach doesn’t exclude another one. In other words, there is no purely practical or theoretical approach — those are considered as ones skewed in one direction or another. But, it is still important to combine both of them while learning to code and mix them in the correct proportion. Given the fact that programming is a hands-on activity, I recommend devoting not more than 80% to practice, whereas theory will take 20%.
If you want to work on real projects in the future, it doesn’t make sense to study Java concepts or theory alone. You need basic programming skills to start creating things, the same as you need the motivation to keep up learning, which is possible to get with a sense of accomplishment. Other than that, the fundamental skills will help you understand and debug code, be it your own code or the one written by other programmers. A solid foundation of important skills will also help you program in non-standard situations without having to read a tutorial.
With bottom-up and top-down approaches combined, you can always switch between them. If you feel you have no idea of what your code is doing, get back to basics, and fill in the gaps in your knowledge. If you happen to get bored with the theory, try to create something small, be it a simple web page or a game. Putting the acquired knowledge into practice and exercising the learned concepts will give you that sense of accomplishment.
My point is that every student who starts learning programming should stick to the 80/20 approach. Knowledge is easy to study, yet the skills need repeated practice so that you can use them in real-world projects.
Java Courses With a Good Balance Between Theory and Practice
So, given the importance of theory and practice combination, I’ve decided to give you a list of sources, where you can take theory, and sources, where you can take practice. To edge your skills, you need both of them. Start with courses focused on Java language fundamentals and then go to hands-on programs to put everything you’ll learn into practice.
Sources to Get Hands-On Experience
CodeGym
I find CodeGym useful for novice programmers who want to focus more on top-down learning. This is a Java-based course that is 80% based on practice. It contains 1200 hands-on tasks, so you will have to write loads of code, which is actually good to put your previously acquired knowledge into practice. THe course has an auto validator of your code and tips to help with solving problems. But, don’t be put off by so much practical work in the learning process — the company implements the latest teaching methods, including visualization, storytelling, and gamification, to keep you excited about the training.
GeeksforGeeks
GeeksforGeeks is the learning platform, where you can master your skills in main programming languages, such as C, C++, Java, and Python. Here, you can work within the interactive IDE that allows manipulating with the code and test it right after. Other than that, you will be able to get well-written, well-thought, and well-explained solutions for selected questions and prepare yourself for the interview with recruiters or companies’ owners to land a programmer job in the end.
Codecademy
Codecademy is a new word in code learning. The company has invented a great system that allows choosing whatever you want to learn from building websites to analyzing data. This course is developed to guide you through different technologies, including Java, HTML, CSS, and JavaScript. If you are not sure where to start, you will be suggested to take the quiz and then pointed in the right direction. Other than creating interactive web pages, you will also be able to acquire mastery in back-end development to become a full-stack specialist.
Sources to Get Theoretical Knowledge
Java Fundamentals by Pluralsight
This theoretical course focuses on the basics of Java to give complete beginners a solid foundation before they can get to the more advanced concepts. This introductory course will teach you how to effectively work with Java and force you to master control flow, object orientation, and collections along with syntax and Streams in Java. So, you’ll end up with the skills needed for building your own Java apps.
The complete Java masterclass
This course by Udemy is perfect if you are a complete beginner in Java programming, if you know other languages and want to learn Java, or if you want to land a job as a Java developer. It will teach you from the very basics and move towards more advanced topics, like Lambda Expressions, Multithreading, Generics, and others. The structure follows the step-by-step teaching method, so the learning process will be smooth. Upon course completion, you will be ready to read and write a Java program and feel confident at any job interview.
Closing Words
Let’s face it: life is a never-ending learning process. Programming is no exception. It is rather impossible to understand everything in coding — there is always something new to learn, at least because of the highly-developing environment. In programming, like in many other spheres, there are two approaches: theoretical and practical. Sure, you can choose one of them following your purposes and previous experience. However, I would recommend combining them both while training and stick to the optimal 20/80 proportion, where theory will take 20% of your time, and practice — 80%.
First pulished on LevelUp GitConnected.
Top comments (1)
Although I know Java very well, I find this post really interesting, because it made me wonder which approach works better for me. And it's theoretical.
I have started learning Java with a rather practical course javastart.pl (before it became paid) and after completing it I knew the syntax, but could not really write good-quality object-oriented code. Later, at University of Wrocław (one of the more "theoretical" CS institutes in Poland), I have learnt Java with very object-oriented approach and this gave me great understanding of the language.
And it's similar for me with other languages. I have first learnt Python at university and understood everything fine, while later, at work, I have only supplemented my Python knowledge a bit.
There are also languages, which I was learning only with "practical approach" and I don't really remember much of it (e.g. Ruby) and ones which I was learning "practical" online and "theoretical" at university at the same time and I was apprehending with the theoretical approach so much faster, that it didn't make sense to continue the "practical" course online.
Different approaches work for different people; I don't say theoretical is better, but I say everyone should think about it before learning a new language :)