So you studied something thinking you understood everything about it, but when you're asked something related to it, you can't answer it and wonder how on earth you couldn't answer it even after being convinced that you understood it well?
Well, here are some reasons to ponder over. In this presentation, I tried to explain how to learn something so effectively so that you might be able to use your learned knowledge to any questions and solve any problems related to it.
Remember, 'knowing' something and 'learning' something are different!
2. The WH-Questions for Learning
● Why
● What
● How
● Where
● When
Effective Learning (& Teaching) 1 / 17
3. The WH-Questions for Learning...
● Why
1. Why do we have to learn this?
● What
2. What is it?
4. What are the other available options?
● How
3. How does it work?
5. How is it different (as well as better / worse) than
the other available options?
● Where
6.1. Where should this be used?
● When
6.2. When should this be used?
Effective Learning (& Teaching) 2 / 17
4. Example Learning Object
● Java synchronized keyword
● Example usage of synchronized keyword:
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public synchronized int value() {
return c;
}
}
Effective Learning (& Teaching) 3 / 17
5. The Why Part
● Why
1. Why do we have to learn this?
Answer: Understand Race condition.
public class UnsynchronizedCounter {
private int c = 0;
public void increment() {
c++;
}
public void decrement() {
c--;
}
public int value() {
return c;
}
}
Effective Learning (& Teaching) 4 / 17
6. The What Part - 1st Question
● Why
1. Why do we have to learn this?
● What
2. What is it? public class SynchronizedCounter {
private int c = 0;
Answer: Putting the public synchronized void increment() {
c++;
synchronized keyword }
before the method public synchronized void decrement() {
name prevents }
c--;
concurrent access to
public synchronized int value() {
the method. return c;
}
}
Effective Learning (& Teaching) 5 / 17
7. The How Part - 1st Question
● Why
1. Why do we have to learn this?
● What
2. What is it?
public class SynchronizedCounter {
● How private int c = 0;
3. How does it work? public synchronized void increment() {
c++;
}
Answer: Understand the
public synchronized void decrement() {
intricacies of locking. c--;
}
public synchronized int value() {
return c;
}
}
Effective Learning (& Teaching) 6 / 17
8. The What Part - 2nd Question
● Why
1. Why do we have to learn this?
● What
2. What is it?
4. What are the other available options?
● How
3. How does it work?
Answer: Can't we put the synchronized keyword before the class
name or even just a block of statements?
public synchronized class SynchronizedCounter { public void do() {
private int c = 0;
//some statements
public void increment() { synchronized {
c++; //a few statements
}
}
public void decrement() { //some more statements
c--;
} }
}
Effective Learning (& Teaching) 7 / 17
9. The How Part - 2nd Question
● Why
1. Why do we have to learn this?
● What
2. What is it?
4. What are the other available options?
● How
3. How does it work?
5. How is it different (as well as better / worse) than
the other available options?
Answer: Understand how method synchronization is
better than class synchronization but worse than
synchronizing group of statements.
Effective Learning (& Teaching) 8 / 17
10. The How Part - 2nd Question...
Method Synchronization
public class SynchronizedCounter {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
}
Class Synchronization Statement Block Synchronization
public synchronized class SynchronizedCounter { public void do() {
private int c = 0;
//some log statements
public void increment() { synchronized {
c++; //a few statements
} }
public void decrement() { //some activity publishing statements
c--; }
}
}
Effective Learning (& Teaching) 9 / 17
11. The Where Part
● Why
1. Why do we have to learn this?
● What
2. What is it?
4. What are the other available options?
● How
3. How does it work?
5. How is it different (as well as better / worse) than
the other available options?
● Where
6.1. Where should this be used?
Answer: To the part of code where concurrent access might occur.
Effective Learning (& Teaching) 10 / 17
12. The When Part
● Why
1. Why do we have to learn this?
● What
2. What is it?
4. What are the other available options?
● How
3. How does it work?
5. How is it different (as well as better / worse) than
the other available options?
● Where
6.1. Where should this be used?
● When
6.2. When should this be used?
Answer: Understand when to use method level and block level
synchronization.
Effective Learning (& Teaching) 11 / 17
13. The Common Part
● Why
1. Why do we have to learn this?
● What
2. What is it?
4. What are the other available options?
● How
3. How does it work?
5. How is it different (as well as better / worse) than
the other available options?
● Where
6.1. Where should this be used?
● When
6.2. When should this be used?
Effective Learning (& Teaching) 12 / 17
14. Characteristics of an Example
● Precise, to the point
○ The more useless information you get, the more
your chance of missing the actual point.
● Concise
○ Lengthy examples make one feel sleepy...
● Must be based on something the audience is
familiar with
○ Surely you don't want to have the 'Rover Robot' as
an example of an object!
● Easy-to-understand
○ It's the ultimate outcome of the above points.
Effective Learning (& Teaching) 13 / 17
15. Effective Teaching (Problem-Solving Style)
[Don't confuse with Gangnam Style!!]
When teaching a new topic,
● Start with something the audience is familiar
with.
● Point out its limitations, failure cases etc.
○ Make sure to clearly identify the root cause of
limitation/failure.
● Discuss possible solutions for overcoming
the root cause and thus the limitations.
● Discuss the difference of the various
solutions, their shortcomings, remedy and so
on.
Effective Learning (& Teaching) 14 / 17
16. Effective Memorization
● Find out why something is named as it's
named.
○ Knowing the justification for naming something helps
memorize about what it means or does.
● Know the subtle differences (if exists) among
similar things / terminologies.
○ For example, the difference between function
parameter and function argument.
○ This also enables one to use appropriate term in
appropriate places.
Effective Learning (& Teaching) 15 / 17
17. Learning / Teaching the Big Picture
● Know the ultimate goal / target / objective.
● Know why that should be learnt.
● Know a shallow overview of the steps.
● Start learning a step in details, following the
approach discussed in this presentation.
● When moving to the next step, know why
you need to move to it and why you
shouldn't move to other available steps
before this one. (i.e., know the link between
steps)
Effective Learning (& Teaching) 16 / 17
18. Learning Languages / Frameworks
● Method 1
○ Read all topics in depth
○ Take a big project and implement it.
● Method 2
○ Read a topic in depth
○ Implement it in code
○ Progress...
● Method 3
○ Read all topics in short (i.e., knowing what topics are
available, what they mean and why do you need
those).
○ Take a big project but start it small.
○ While implementing each part, learn it in depth.
Effective Learning (& Teaching) 17 / 17