How to fix your Java learning: a story of one tutor

John Selawsky - Feb 1 '19 - - Dev Community

About a boy

It was over decade ago… I decided to become a real boyprogrammer. I looked for a language that was ‘mine’, tried some of them.

Once I tried Java and fell in love with it! Then later I coded like mad permanently and my developer skills grew rapidly. I’ve been learning 10 to 18 hours every bloody day…

Well, I got my first job, and then second… and I never stopped my intensive learning. As a consequence, I turned into Java Senior Developer pretty fast. I reached my goal.

I was happy but… not completely. It seemed there was a piece of my self-fulfillment puzzle I’d missed.

I looked for it and you know what. I did find it in my parents’ cup of tea. Teaching! Now I guess I inherited the teacher’s gene.

Say, the industry needs new programmers and new programmers need teachers among the pro developers. So I became one. Java Tutor. And, I must admit, I enjoy teaching no less than a good coding. Or even more.

Several years have passed since then. During that time, I collected diligently common mistakes or rather “wrong steps” of my students and other people who learned how to code. I don’t mean bugs in code but wrong learning concepts.

It was really beneficial experience that gave me more insight into how to avoid and correct mistakes.

I also had found a lot of useful Internet resources for my students. Of course, they suit everyone who is serious about learning Java. In this article I am going to mention these resources. But first of all this article is about avoiding common mistakes in your learning.

So let’s try to speak one at a time.

Common mistakes and how to struggle them

1. Too much theory from the first steps

So, you started to learn a programming language.

What should you do first? Read a lot then write a program? Not at all, buddies. Read a bit and then code, code and again code!

 

Recall your kindergarten or primary school. Drawing class… Did you listen or read a lecture then how to draw? I am pretty sure the answer is “no”. You and other kids just took your crayons and… drew. At most your teacher could show you how to hold a pencil or tell something about “red and blue is violet”. Or you took part in stage playing Cucumber or Broccoli… I don’t think your drama teacher explained you Stanislavsky system that time…

The same story with programming. JUST.START. CODING. Theory is important. But later.

2. Trying to get everything at once

 

You are right. This paragraph is about ‘harmful theory’ again. Some students dive into it so deeply trying to understand every word in System.out.println in their very first task. But they just can’t budge it. All in due time, my friends. The best way to get Java theory is to learn it cyclically, gradually increasing difficulty. A few months later, you will easily get to grips with the topic that scares the today’s You so much.

I recommend starting to read books/documentation after learning the basics of Java Core confidently. In this case they will go like fiction books.

3. Not enough practical tasks

 

I insist that in the first stages of your developer’s way you need to get the knack of coding.

I mean it is much better for a beginner to solve many small and simple tasks than few complex ones. No, I’m not saying that you don’t need complex tasks at all.

Sure you do need. Good ratio: 1 difficult task for 10–20 simple tasks. Where to get tasks? I am going to tell you later.

4. Sticking with complex tasks for ages

Some students simply do not know how to quit a task they can’t solve. My advice is to solve a dozen other tasks now, and come back to your intractable one after it. But if you really REALLY want to get the solution right now … see 5th paragraph.

5. Inability to ask questions

There are students who do not want to ask anything. They are afraid their question is stupid and some unknown experienced programmer dude will troll them. And there are others who ask questions in ‘hey guys! There’s something wrong!’ style.

So, something went wrong, well, what to do? Ask a question! Ask your mentor if you have one, or forums like Javaranch , dev.to or stackoverflow.

How to formulate a question? Be sure to give the particular description of the problem and show your code. Then describe the sequence of your code manipulations, your trying to fix it, and the results. You will get help I promise. Every programmer has been in your situation. Believe me, everyone.

6. Self-students: inattention to actual errors in the code

 

During self-learning it is very difficult to understand how well your code works. And what if on some data it gives the perfect result, but you didn’t take something into account? If you have a mentor who has time to check everything, it is just fine. What if you don’t? Learn to ask yourself the question “what if” and test the program on different data. In the future this skill will help you learn how to write unit tests.

However, over recent years it is getting better and easier to learn programming with some online courses and collections of tasks with code auto-checkers. I will give you links to such resources below.

7. Debugging the code? Sorry guys, it’s not for me!

It is for you, my dear student developer. End of story. Debugging in modern IDEs is very simple. Learn how to do it once and you will get the gem of a skill for your learning and future job! Start to debug no later than the end of the first month of your learning. Or even faster.

8. Learning for the sake of learning

While you learn to program, remember: it is not just for passing a test and empty your brain after it. Well, for passing a test too, but first it is for your future. So relax and … prepare for endless absorption of information and even more endless coding.

9. Start writing code before thinking about a solution

How to avoid it? Try good old pen&paper, my young Padawan. If you are faced with a task and don’t find a solution immediately, before proceeding with the code, consider what exactly you are going to do. You program not only while writing code, but even more so when you design a solution. Take a pen and paper and write out an approximate algorithm. By the way, some companies offer puzzles on paper to applicants.

10. Fear of experiments

 

Some guys get used to a certain construction, and even if they know that there are other options for solving a certain problem, they go along the beaten track. If you are one of these people, try the following:

A. solve the problem in a proven way, check its operability.

B. try to solve the same problem in a new way. You do not waste time, consider that you are solving another problem. The main concept: do not be afraid, you already have the right solution! I also recommend returning to some tasks after passing a new material and solving them using your new knowledge.

11. Loss of motivation due to difficulties

It is very typical for self-path students or those guys who study in a group and are lagging behind, because they learn everything a little bit slower.

What to do? Understand that programming is not rocket science.

Almost everyone can do it if he or she tries enough.

You think you can’t? Most likely, you check this out too early. In the end, go on the Internet, there are thousands of stories of those who are not immediately able to reach the goal. Among these people you will meet a lot of programmers.

Useful links for every Java student

As you already understood, I am an apologist for practical programming training. Accordingly, I always advise all students my regular ones, or those who take several classes from me, or especially those who study on the Internet on their own to use as many resources as possible with Java coding tasks. Over the past two years I have found some great sites. Here they are.

 

CodeGym. Once I have found CodeGym. ‘This is it’, I thought, ‘It is a course I’ve been dreaming of’.

This Java Core course 80% is based on practice. It is really helpful for Java Students from rookies to confident upper intermediate. The best feature of CodeGym is its practice system. The site is full of tasks to improve your skills every day. I guess it has about 1000 problems for different levels.

You can use browser CodeGym IDE to solve them or plugin for IntelliJ IDEA, the most popular Java IDE for now. Smart verification system checks your code and gives you some recommendations if something goes wrong. It is very important for self-path students such as for student with mentor, because no one breather can check out properly 10 programs of 20 students per day. However, verification system can do it.

CodeGym is divided into 40 levels. Each level includes about 15–30 coding tasks, 10–20 Java lectures and motivation articles to cheer up the students. So you go through the course level by level, solve your tasks — it is kind of game so you’ll never get bored, I guess. And one last thing: the lectures here are fun and full of humor. I enjoyed reading them.

 

CodinGame. Solving the CodinGame tasks is a really nice way to improve your programming skills. This site targets people who already know at least the basics of programming language (Java and 22 others). It has some hardcore challenges for expert developers as well.

CodinGame has the browser-based IDE (as well as CodeGym). It lets you code and compile in the same window and you can see the result — game changing in real time. It is not an online course but challenge exercises tied to real games. After solving them you get visual feedback, a small change in this game.

 

Codewars is where developers achieve code mastery through challenge. So it is the good site for upper intermediate to advanced Java students. It is really enjoyable. You’ll find challenging tasks here rather then lectures.

First, you’ve got kyu 8 (rank) and you try to improve it to kyu 1 (the highest rank). Train on kata in the dojo and reach your highest potential.

Сonclusions

Start coding! Don’t hesitate. Code a lot. Code every day. Use tasks collections with validation. Sometimes read the theory. Ask some questions. Code. Code. Code.

First published on HackerNoon

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .