-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Java Fundamentals Course
Fundamentals Course Overview
Below you can find the ordered content of the topic, in a linear progression
The linear progression of content aims to cover all content, course by course, workout by workout as follows:
- first course is the only core one, denoted by its manifest
- the next course is denoted by the first item of the next array in each course manifest
- each course has its order of workouts designated by the sections field in the same aforementioned manifest
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-java | ✅ | 👶 introduction | ❌ | ✅ | ❌ | ❌ | ❌ |
2 | why-should-i-learn-java | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | java-versions | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
4 | java-hello-world | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
5 | compiling-and-running-java-code | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
2. java-basics
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | java-identifiers | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
2 | java-primitives | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
3 | java-strings | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
4 | functions | ✅ | 👶 introduction 💪 workout |
❌ | ❌ | ✅ | ❌ | ❌ |
5 | packages | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
3. operators-i
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | difference-between-jre-and-jdk | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
2 | different-types-of-variables-in-java | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
3 | constant-notation | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
4 | ternary-operator | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ✅ | ❌ |
5 | use-meaningful-names | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
Exercises:
Game:
4. operators-ii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | equals-operation-on-different-data-types | ✅ | 👶 introduction 💪 workout |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | from-is-included-while-to-is-excluded | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | multiple-relational-operators | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
4 | prefix-and-postfix-of-increment-operators | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ✅ | ❌ |
5 | use-varargs-when-unsure-about-the-number-of-parameters | ✅ | 👶 introduction 💪 workout |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
5. tips-i
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | use-comments-to-explain-the-purpose-of-code | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | avoid-excessively-long-comments | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | avoid-synonyms-when-naming | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
4 | follow-existing-project-naming-conventions | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
name | type | aspects | standards | done |
---|---|---|---|---|
java-8 | tetris | 👶 introduction ✨ new |
❌ | ❌ |
6. tips-ii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | always-specify-type-parameter | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | common-mistake-on-switch-statements | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ✅ | ❌ |
3 | how-range-operations-work | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
4 | short-circuit-evaluation | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ✅ | ❌ | ❌ |
5 | there-is-no-such-thing-as-pass-by-reference-in-java | ✅ | 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
7. tips-iii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | the-trade-off-between-short-and-descriptive-names | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ❌ | ❌ | ❌ |
2 | supply-tostring-in-all-classes | ✅ | 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | package-naming-conventions | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
4 | calling-one-constructor-from-another | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
5 | avoid-using-static-variables | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | updating-interfaces-by-using-default-methods | ✅ | 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
2 | instance-methods-are-preferred-over-default-methods | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | using-static-fields | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
4 | using-inner-classes | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
5 | an-interface-s-methods-do-not-need-to-be-declared-as-public | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
9. iteration
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | two-ways-to-use-an-iterator | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
2 | iterate-without-an-index | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
3 | double-brace-initialization | ✅ | 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | diamond-operator | ✅ | 👶 introduction 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
5 | implementing-the-comparable-interface-to-give-objects-a-natural-order | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
10. memory
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | java-memory-management | ✅ | 🦑 deep 🔮 obscura 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
2 | distinction-between-stack-and-heap-memory | ✅ | 👶 introduction 🦑 deep |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | only-objects-that-are-not-referenced-are-to-be-garbage-collected | ✅ | 👶 introduction 💪 workout |
❌ | ❌ | ❌ | ❌ | ❌ |
4 | stop-the-world-and-garbage-collection | ✅ | 🦑 deep 🔮 obscura 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
5 | why-java-does-not-have-sizeof-like-c-c | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-a-class | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
2 | what-is-an-object | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | inheritance | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | polymorphism | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ✅ | ❌ |
5 | java-interfaces | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
12. modifiers
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | java-modifiers | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
2 | default-and-public-modifiers | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | the-private-and-protected-modifiers | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | the-static-modifier | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ✅ | ❌ |
5 | the-final-modifier | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ✅ | ❌ |
6 | encapsulation | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | loose-and-tight-coupling | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
2 | cohesion | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
3 | do-not-return-references-to-private-mutable-class-members | ✅ | 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ✅ | ❌ |
4 | using-an-interface-as-a-parameter | ✅ | 💪 workout 🦑 deep |
❌ | ❌ | ✅ | ❌ | ❌ |
5 | default-constructors | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | uses-of-the-final-keyword | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ✅ | ❌ |
2 | sibling-classes | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | utility-classes-and-static-methods | ✅ | 🔮 obscura | ❌ | ❌ | ✅ | ❌ | ❌ |
4 | use-a-copy-constructor-for-non-immutable-objects | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
5 | be-as-specific-as-possible-when-catching-exceptions | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ✅ | ❌ | ❌ |
Exercises:
Game:
15. exceptions-i
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | catch-multiple-exceptions-in-a-single-catch-block | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
2 | avoid-empty-catch-blocks | ✅ | 🔮 obscura | ❌ | ❌ | ❌ | ❌ | ❌ |
3 | creating-new-exceptions | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
4 | throwing-an-exception | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
5 | the-distinction-between-checked-and-unchecked-exceptions | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
16. exceptions-ii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | avoid-unnecessary-exception-handling | ✅ | 🔮 obscura | ❌ | ❌ | ❌ | ❌ | ❌ |
2 | use-descriptive-error-messages-when-catching-exceptions | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | retrieving-the-cause-of-an-exception | ✅ | 👶 introduction 💪 workout |
❌ | ❌ | ❌ | ❌ | ❌ |
4 | throwing-chained-exceptions | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
5 | use-standard-exceptions-when-possible | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
17. patterns
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | singleton-pattern | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | static-factory-methods | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | facade-pattern | ✅ | 🔮 obscura | ❌ | ❌ | ✅ | ❌ | ❌ |
4 | don-t-repeat-yourself-dry-principle | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
5 | hashing | ✅ | 💪 workout 🦑 deep 🔮 obscura |
❌ | ❌ | ✅ | ❌ | ❌ |
Exercises:
Game:
18. tips-iv
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | converting-stack-trace-to-a-string | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | getting-time-based-on-time-zones | ✅ | 💪 workout | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | measuring-time | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
4 | use-locale-class-for-internationalisation | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
5 | most-common-reason-behind-stack-overflow-error | ✅ | 🦑 deep | ❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | limit-accessibility-of-fields | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
2 | private-constructors | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
3 | the-distinction-between-overloading-and-overriding-methods | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
20. abstract-keyword
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | compare-classes-and-not-class-names | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ✅ | ❌ | ❌ |
2 | the-abstract-keyword | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | abstract-classes-can-have-static-members | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
4 | abstract-class-vs-interface-in-java | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
5 | template-methods-in-abstract-classes | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
21. immutability
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | defining-static-methods-within-an-interface | ✅ | 👶 introduction ✨ new |
❌ | ✅ | ✅ | ❌ | ❌ |
2 | fields-with-java-reflection-api | ✅ | 🦑 deep | ❌ | ✅ | ✅ | ❌ | ❌ |
3 | floating-garbage-and-how-to-deal-with-it | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
4 | increase-permgen-space-as-to-avoid-outofmemory-errors | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ✅ | ❌ | ❌ |
5 | creating-a-defensive-copy-of-an-object-to-guarantee-immutability | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
22. serialization
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-is-serialization | ✅ | 👶 introduction | ❌ | ❌ | ✅ | ❌ | ❌ |
2 | serializing | ✅ | 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | deserializing | ✅ | 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | serial-version-u-i-d | ✅ | 💪 workout 🦑 deep |
❌ | ✅ | ✅ | ❌ | ❌ |
5 | checking-if-a-class-is-serializable | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
23. tips-v
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | java-8-lambda-expressions | ✅ | 🦑 deep 🔮 obscura ✨ new |
❌ | ✅ | ✅ | ❌ | ❌ |
2 | use-lazy-initialization-to-defer-creating-an-object-until-it-s-used | ✅ | 💪 workout 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
3 | prevent-exceptions-while-logging-data | ✅ | 🔮 obscura | ❌ | ❌ | ❌ | ❌ | ❌ |
4 | throwing-proper-exceptions-for-unfinished-code | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
5 | generating-a-compact-java-code | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
24. annotations-i
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | what-are-annotations | ✅ | 👶 introduction | ❌ | ✅ | ✅ | ❌ | ❌ |
2 | retention-and-inherited-annotations | ✅ | 🦑 deep 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | variable-argument-function | ✅ | 👶 introduction 💪 workout |
❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
25. annotations-ii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | use-javadoc-comments-to-describe-the-purpose-of-a-class-or-method | ✅ | 👶 introduction 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | use-override-to-explicitly-indicate-that-a-method-has-been-overridden | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
3 | the-distinction-between-checked-and-unchecked-exceptions | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
4 | using-super-to-access-overriden-methods | ✅ | 👶 introduction | ❌ | ❌ | ❌ | ❌ | ❌ |
5 | specifying-an-annotation-retention-policy | ✅ | 🦑 deep 🔮 obscura |
❌ | ❌ | ❌ | ❌ | ❌ |
Exercises:
Game:
26. annotations-iii
Insights:
no | name | content | aspects | standards | PQ | RQ | Quiz | done |
---|---|---|---|---|---|---|---|---|
1 | declaring-repeatable-annotation-types | ✅ | 🦑 deep 🔮 obscura ✨ new |
❌ | ❌ | ❌ | ❌ | ❌ |
2 | including-annotations-in-javadoc | ✅ | 👶 introduction 💪 workout 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
3 | restricting-an-annotation-s-application-by-using-target | ✅ | 👶 introduction 💪 workout 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
4 | suppressing-warnings-using-suppresswarnings | ✅ | 💪 workout 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
5 | using-the-deprecated-annotation | ✅ | 💪 workout 🔮 obscura |
❌ | ✅ | ✅ | ❌ | ❌ |
Exercises:
Game:
Given the insights are tagged with aspects, we can filter over the linear content progression and create learning sub-paths.
These sub-path progressions will most likely not cover all content, but they will ensure and enforce an unified learning experience, tailor for the user wish.
For example, a user might be interested in new additions and updates of a language, rather than introduction lessions. Note that these sub-paths don't take games into consideration
If you are being introduced to the topic for the first time
Insights:
- what-is-java
- why-should-i-learn-java
- java-versions
- java-hello-world
- compiling-and-running-java-code
- java-identifiers
- java-primitives
- java-strings
- functions
- packages
- difference-between-jre-and-jdk
- different-types-of-variables-in-java
- constant-notation
- ternary-operator
- use-meaningful-names
- equals-operation-on-different-data-types
- from-is-included-while-to-is-excluded
- multiple-relational-operators
- prefix-and-postfix-of-increment-operators
- use-varargs-when-unsure-about-the-number-of-parameters
- use-comments-to-explain-the-purpose-of-code
- avoid-excessively-long-comments
- avoid-synonyms-when-naming
- follow-existing-project-naming-conventions
- common-mistake-on-switch-statements
- how-range-operations-work
- the-trade-off-between-short-and-descriptive-names
- package-naming-conventions
- using-static-fields
- using-inner-classes
- an-interface-s-methods-do-not-need-to-be-declared-as-public
- two-ways-to-use-an-iterator
- iterate-without-an-index
- diamond-operator
- distinction-between-stack-and-heap-memory
- only-objects-that-are-not-referenced-are-to-be-garbage-collected
- what-is-a-class
- what-is-an-object
- inheritance
- polymorphism
- java-interfaces
- java-modifiers
- default-and-public-modifiers
- the-private-and-protected-modifiers
- the-static-modifier
- the-final-modifier
- encapsulation
- loose-and-tight-coupling
- cohesion
- default-constructors
- be-as-specific-as-possible-when-catching-exceptions
- catch-multiple-exceptions-in-a-single-catch-block
- creating-new-exceptions
- throwing-an-exception
- the-distinction-between-checked-and-unchecked-exceptions
- use-descriptive-error-messages-when-catching-exceptions
- retrieving-the-cause-of-an-exception
- use-standard-exceptions-when-possible
- don-t-repeat-yourself-dry-principle
- measuring-time
- limit-accessibility-of-fields
- private-constructors
- the-distinction-between-overloading-and-overriding-methods
- the-abstract-keyword
- abstract-classes-can-have-static-members
- abstract-class-vs-interface-in-java
- template-methods-in-abstract-classes
- defining-static-methods-within-an-interface
- what-is-serialization
- throwing-proper-exceptions-for-unfinished-code
- what-are-annotations
- variable-argument-function
- use-javadoc-comments-to-describe-the-purpose-of-a-class-or-method
- use-override-to-explicitly-indicate-that-a-method-has-been-overridden
- the-distinction-between-checked-and-unchecked-exceptions
- using-super-to-access-overriden-methods
- including-annotations-in-javadoc
- restricting-an-annotation-s-application-by-using-target
Theory put into practice/that’s how you achieve X points
Insights:
- functions
- ternary-operator
- equals-operation-on-different-data-types
- use-varargs-when-unsure-about-the-number-of-parameters
- always-specify-type-parameter
- supply-tostring-in-all-classes
- avoid-using-static-variables
- updating-interfaces-by-using-default-methods
- instance-methods-are-preferred-over-default-methods
- java-memory-management
- only-objects-that-are-not-referenced-are-to-be-garbage-collected
- stop-the-world-and-garbage-collection
- inheritance
- polymorphism
- java-interfaces
- java-modifiers
- the-private-and-protected-modifiers
- the-static-modifier
- the-final-modifier
- do-not-return-references-to-private-mutable-class-members
- using-an-interface-as-a-parameter
- uses-of-the-final-keyword
- sibling-classes
- use-a-copy-constructor-for-non-immutable-objects
- retrieving-the-cause-of-an-exception
- singleton-pattern
- static-factory-methods
- hashing
- getting-time-based-on-time-zones
- serial-version-u-i-d
- use-lazy-initialization-to-defer-creating-an-object-until-it-s-used
- variable-argument-function
- including-annotations-in-javadoc
- restricting-an-annotation-s-application-by-using-target
- suppressing-warnings-using-suppresswarnings
- using-the-deprecated-annotation
Prerequisite knowledge consisting of 2 or more 👶/💪 workouts
Insights:
- always-specify-type-parameter
- short-circuit-evaluation
- there-is-no-such-thing-as-pass-by-reference-in-java
- supply-tostring-in-all-classes
- calling-one-constructor-from-another
- avoid-using-static-variables
- updating-interfaces-by-using-default-methods
- instance-methods-are-preferred-over-default-methods
- double-brace-initialization
- implementing-the-comparable-interface-to-give-objects-a-natural-order
- java-memory-management
- distinction-between-stack-and-heap-memory
- stop-the-world-and-garbage-collection
- why-java-does-not-have-sizeof-like-c-c
- do-not-return-references-to-private-mutable-class-members
- using-an-interface-as-a-parameter
- uses-of-the-final-keyword
- sibling-classes
- use-a-copy-constructor-for-non-immutable-objects
- throwing-chained-exceptions
- singleton-pattern
- static-factory-methods
- hashing
- converting-stack-trace-to-a-string
- use-locale-class-for-internationalisation
- most-common-reason-behind-stack-overflow-error
- compare-classes-and-not-class-names
- fields-with-java-reflection-api
- floating-garbage-and-how-to-deal-with-it
- increase-permgen-space-as-to-avoid-outofmemory-errors
- creating-a-defensive-copy-of-an-object-to-guarantee-immutability
- serializing
- deserializing
- serial-version-u-i-d
- checking-if-a-class-is-serializable
- java-8-lambda-expressions
- generating-a-compact-java-code
- retention-and-inherited-annotations
- specifying-an-annotation-retention-policy
- declaring-repeatable-annotation-types
Recently added/gained traction feature
Insights:
- defining-static-methods-within-an-interface
- java-8-lambda-expressions
- declaring-repeatable-annotation-types
Stories, obscure details that don’t specifically relate to a learning objective
Insights:
- constant-notation
- from-is-included-while-to-is-excluded
- use-comments-to-explain-the-purpose-of-code
- avoid-excessively-long-comments
- avoid-synonyms-when-naming
- follow-existing-project-naming-conventions
- always-specify-type-parameter
- short-circuit-evaluation
- there-is-no-such-thing-as-pass-by-reference-in-java
- the-trade-off-between-short-and-descriptive-names
- calling-one-constructor-from-another
- avoid-using-static-variables
- instance-methods-are-preferred-over-default-methods
- double-brace-initialization
- diamond-operator
- implementing-the-comparable-interface-to-give-objects-a-natural-order
- java-memory-management
- stop-the-world-and-garbage-collection
- why-java-does-not-have-sizeof-like-c-c
- uses-of-the-final-keyword
- sibling-classes
- utility-classes-and-static-methods
- use-a-copy-constructor-for-non-immutable-objects
- be-as-specific-as-possible-when-catching-exceptions
- avoid-empty-catch-blocks
- avoid-unnecessary-exception-handling
- use-descriptive-error-messages-when-catching-exceptions
- throwing-chained-exceptions
- singleton-pattern
- static-factory-methods
- facade-pattern
- hashing
- converting-stack-trace-to-a-string
- use-locale-class-for-internationalisation
- compare-classes-and-not-class-names
- floating-garbage-and-how-to-deal-with-it
- increase-permgen-space-as-to-avoid-outofmemory-errors
- creating-a-defensive-copy-of-an-object-to-guarantee-immutability
- serializing
- deserializing
- checking-if-a-class-is-serializable
- java-8-lambda-expressions
- use-lazy-initialization-to-defer-creating-an-object-until-it-s-used
- prevent-exceptions-while-logging-data
- throwing-proper-exceptions-for-unfinished-code
- generating-a-compact-java-code
- retention-and-inherited-annotations
- use-javadoc-comments-to-describe-the-purpose-of-a-class-or-method
- specifying-an-annotation-retention-policy
- declaring-repeatable-annotation-types
- including-annotations-in-javadoc
- restricting-an-annotation-s-application-by-using-target
- suppressing-warnings-using-suppresswarnings
- using-the-deprecated-annotation
✅ All content has been tagged with aspects.
Want to contribute to this wiki? Go right ahead! If it has to do with how the Enki software ecosystem works, or editorial guidelines for how to write, let us handle that. Anything else, edit away!
Curriculum Format:
- Topic Documentation
- Course Documentation
- Workout Documentation
- Insight Documentation
- Glossary Documentation
Contributor Resources:
Curriculum overview:
Topic pages: