- Description
- Running the Programs
- Extra Dependencies
- Checklist
- Tests
- Further Reading
- Known Issues
- Resources
- Contributions
This project is geared towards the practical as well as theoretical exploration of the Java language in depth. Primarily, this is to serve as a checklist of my own knowledge in Java but since the best way to learn is to make something that others may learn from as well, this repository has been made public.
This also deals with certain general problem solving and algorithmic programs as well as design patterns that is just for my own reference. Others are welcome to check those out as well, in any case. There are already more complete and better repositories out there that are more famous for the various implementations of algorithms using Java. This repository is more geared to focus on the nuances of the language in general, rather than recreate the same work.
The project has NO dependencies.
Here is the link of the repository containing Java programs on algorithms.
Here is the link of the repository containing design patterns elucidated in an intuitive and resourceful manner by experienced and passionate engineers and experts.
(Top)
Visual Studio Code with the extension Language Support for Java (TM) by Red Hat
has been used. Sections for other IDEs such as IntelliJ or Eclipse shall be added if those environments bear certain feasilbility that deems their adoption over the present IDE.
The required dependencies (JDK 17) have firstly been installed.
Methods to run programs directly from Docker coming shortly. To run the programs from the terminal:
- From the directory in which the source file is stored:
javac fileName.java
- From the root directory (exactly from within the
\src\main\java
directory):java com.ragingcoffee.directoryName.fileName
(Top)
None of the dependencies mentioned below are a must for the project, except Maven to test (since it is purely educational and the programs are standalone, not a part of any application). Even these have been used for learning purposes (as well as making the project more accessible and standard) and their guides are in the furtherreading
directory.
- Apache Maven: Project Management and build tool used to define a standard structure for the project. If code needs to be tested, however, Maven is to be used for convenience.
- Jenkins: Pipeline used to automatically build and test the code on a local server upon every push.
- Docker: Containerization application used to run the programs directly by running a container of an image without any worries about any dependencies.
- Gitpod: Running, editing and contributing to the projects are now simpler with Gitpod - an online, collaborative development platform. This allows users to run and test programs without using the project locally.
- GitHub Actions: Running automated workflows such as sending out greeting mails for contributions, standard CodeQL checks, etc.
(Top)
The list below is not to be followed in any particular order but is more of a record of what has been done and what is yet to be done.
- Annotations
- Inheritance
- Interfaces
- Enumerations
- Multithreading
- Well-known array algorithms and problem-solving techniques.
- Recursion
- Divide and Conquer Technique
- Dynamic Programming Technique
- Greedy Technique
- Searching Techniques
- Sorting Techniques
- Caching Algorithms
- General problems with multiple approaches
- Problem Solving
- Design Patterns
- String Operations
- Data Structure Implementations
- File Operations
- The Reflection API
- The
java.lang
Package - The
java.util
Package
(Top)
Incorporating tests in this repository for every program is a work in progress. Since this repo is more educational and exemplary, there are many classes that exist just to show the behaviour of certain in-built methods provided by the Java API. According to the rules of testing (as well as common sense), it is meaningless to test the use of the built-in API and is adviced against. This is why there would exist certain source files without any test files. For example, testing a program that uses the built-in sort that Java offers (Arrays.sort()
) is meaningless and is not done.
To run tests Maven is required is this command is to be used:
mvn test
JUnit5 has been used to write tests for this project.
(Top)
Certain build tools and applications have been discussed here within the scope of their use in Java development. They may serve as a guide to understand how these tools integrate with Java, along with how they are used for development (this project is an example as well). These can be found under the furtherreading
directory.
- Apache Maven
- Docker
- Gradle
- Jenkins
- JUnit5
- Java Access Modifiers
- Java Conventions
- Java Keywords with Multiple Uses
(Top)
For this project, the amalgamation of the following resources are used:
- Java: The Complete Reference by Herbert Schildt: Core content of the project and the explanations.
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert Cecil Martin: Guide to write disciplined, maintainable and production-friendly code.
- Head First Design Patterns by Bates Bert, Freeman Eric, Robinson Elisabeth and Sierra Kathy: Intuitive methodology of programmatic design patterns for low-level design.
- Test-Driven Development with Python: Obey the Testing Goat by Harry J.W. Percival: A book written in Python elucidating the importance and guidelines to get started with Test-Driven Development as well as to learn to test code.
(Top)
- The Google Java Style-Guide: Go through the documentation to understand the the correct way to write Java code.
(Top)
- Refer to
CONTRIBUTING.md
first. - Contribution rules are stringent to ensure community and project standards never regress. There may be multiple reviews and changes that get suggested to PRs. Contributors are expected to view this as a challenge rather than to turn away from it.
- No matter what, a PR must have a mapping to an issue. Otherwise, it would not be evaluated.
- A response to an Issue or a PR is guaranteed from the side of the maintainer, even if the same may not follow the proper format of contributing. This is a platform of learning accessible to everyone, after all.
(Top)