Basic setup for some Tutorials
Tags: kafka, springboot, java, development
Published: 2019-06-05 19:49:40

Now that I am back to writing as I explained in [my previous post](https://dev.to/thegroo/back-to-writing-304a) I will kick start it with the basic setup needed in order to be able to run the code I will be sharing in posts here in the near future. 

My initial posts will most likely be about [Apache Kafka](https://kafka.apache.org) development, integrated with [Spring Boot](https://spring.io/projects/spring-boot) applications as this is the stack I am mostly working for the past years. 

[Apache Kafka](https://kafka.apache.org/) is an open-source stream-processing software platform developed by LinkedIn and donated to the Apache Software Foundation and with its late improvements, especially for Streams, it's now a very suitable alternative to running your stream pipelines directly co-located with your microservices applications and this is possible because Kafka-streams is delivered as a simple library. This also means that data is very close and available to your applications, reducing latency and opening up lots of possibilities to enhance your services and add business value to your applications. We will get into details in future posts, for now, let's go to the setup. This is what we will need: 

- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) If you're not familiar with it, pls check [What is Git?](https://git-scm.com/book/en/v2/Getting-Started-What-is-Git%3F) and for quick useful commands I like to recommend [git the simple guide](http://rogerdudler.github.io/git-guide/) and of course it's great [official documentation and free online book](https://git-scm.com/doc).
- Java 8 up to latest Java. Java 8 will be around for a long time so you can consider using it. If you're learning java and plan to join the working force I would recommend you start learning from Java 8 by now. Currently, there are many distributions, all of them should work, I am currently running OpenJDK 11 in Ubuntu Linux, but there are many more options, some: 

  - [Open JDK](https://openjdk.java.net/install/)
  - [Amazon's Corretto](https://aws.amazon.com/corretto/)
  - [IBM JDK](https://developer.ibm.com/javasdk/downloads/)
  - [Pivotal Distribution of Open JDK](https://docs.pivotal.io/pivotal-distribution-openjdk/index.html)
  - [Oracle JDK](https://www.oracle.com/technetwork/java/javase/downloads/index.html) - requires a license for non-personal use as described in [this FAQ](https://www.oracle.com/technetwork/java/javase/overview/oracle-jdk-faqs.html).
- [Docker](https://docs.docker.com/install/) - Really helpful to run a local stack for development and share it with fellow developers.
- [Docker Compose](https://docs.docker.com/compose/install/) - Helps to create full local, easily manageable infrastructure for local development.
- [Apache Maven](https://maven.apache.org/install.html) -  Maven is an opinionated software project management tool, it helps managing project dependencies and much more using it's many available plugins.
- Your preferred IDE to run Java projects.

## Some extra support in your terminal

I really like to add some extra tooling support to my preferred terminals, being Gnome Terminator on Linux or iTerm on Macs, my favorite one is ["oh my zsh"](https://ohmyz.sh/), it's installation instructions and functionality are better described in [their docs](https://github.com/robbyrussell/oh-my-zsh/wiki),  you need to [install zsh](https://github.com/robbyrussell/oh-my-zsh/wiki/Installing-ZSH) first and configure your terminal to use zsh by default or switch to it. 

Oh my zsh has some nice existent plugins for different command aliases and you can easily configure your own aliases and full javascript functions with complex instructions to be executed in your terminal, this turns out to be very handy to automate things in our local development machines. 

## Want to learn Java

If you're completely new to java you can find a lot of free online material so, it's really up to you: 

* [Java Books](https://www.java67.com/2013/11/10-free-java-programing-books-download-PDF-HTML.html)
  * [Thinking in Java by Bruce Eckel](http://sd.blackball.lv/library/Thinking_in_Java_4th_edition.pdf)
* [Free Udemy Java Tutorial](https://www.udemy.com/java-tutorial/) 
* [Java Tutorial](https://docs.oracle.com/javase/tutorial/) is still useful, it used to be a great reference but since... Oracle happened, it's just not being taken care anymore, so it's Java 8 and will most likely not be updated.

## IDEs 

As a long time Java developer I've used many different IDEs, Text Editors, Visual Age for Java, Visual Cafe, JBuilder, Together, Eclipse and finally, for the past 4 years I've been using IntelliJ Ultimate, also tried VSCode with java but my lack of shortcut and mechanical memorization using it is a blocker for me by now. 

What I've learned from all these tools? Actually it turns out the best IDE is the one you're more familiar with and know the shortcuts and tricks to speed up your craft, so pick any you would like and make sure to keep always learning it, there's always something else to learn that can improve your development experience, doesn't matter which tool you pick and this is naturally not limited to your IDE.

Being a developer is learning a bit every day. And it's awesome.