Shout Java at the heart of technology-Themes and elemental technologies that Java engineers should pursue in 2017-

Java was once the center of technology

I am an architect and PM for system development at SIer. Java is still the mainstream in SI, but I realize that the time has come when you can't play an active role just by understanding and coding grammar. My boss explained using the unique expression ** "technical whirlpool" **, but from 2000 to 2006, writing Java means implementing various latest technologies. It was an era when I could learn. There are many things that are not good for modern evaluation such as application server, XML, SOAP, MQ, CORBA, multithreading, etc., but because there were many such technical challenges, Java engineers did not dare to go out and the main IT I was able to learn the technology.

Changes in the times and their follow-up

However, since the advent of Web 2.0 and iPhone / Android, the vortex of technology has moved to apps via the front end. And recently, I feel that we are moving to cloud, AI, blockchain, and reactive and distributed processing that supports them as technologies. At Qiita, you will often see front-end engineers writing posts that are full of great technical challenges and becoming a pillar of everyone. I really get down. Looking at such an article, "I have to challenge MVVM development with React and Angular ..." "I have to write ES2015 (ES6) or TypeScript using Visual Studio Code instead of JavaScript that I have known for a long time." "Kotlin and Scala are similar to Java, so let's try writing them."

You may be thinking.

However, ** Java engineers belonging to SIer who do not usually have the opportunity to write programs, it may be a good idea to leave it there. ** It's pretty hard to catch up in that area from now on. Furthermore, the area is evolving too quickly, and even if you study by toddlers now, by the time you remember it, young people will simply say, "That's right."

Write Java at the heart of technology

Fortunately Java is still a major language. It is said that Kotlin, Scala, etc., but End of public update of Oracle Java SDK etc. have been announced now. It must be said that languages that benefited from interoperability with Java have become more unstable in the enterprise world.

Why don't you jump into the vortex of the most vigorous technology now without abandoning Java instead of the vortex of technology where the wind speed has begun to weaken? Some people say that language is just a means, but I don't think there are many super engineers who can speak any language. Let's dive into a new field with the assets you already have.

Now, in order to challenge some technology whirlpool candidates with Java that I have now, I will raise the main themes and necessary technologies. Finally, as a summary, I briefly described how to learn the necessary skills, although it is my personal experience.

Blockchain

It is said that blockchain has slow transactions that can be processed and that there is no practical solution yet, but it is an area that continues to grow by involving the latest technology. Even if I enter here from now on, it will still be in time.

Blockchain and Java

I will leave the explanation of the blockchain itself to a specialized blog, but as a Java engineer, I think that it is good to first learn through the following three libraries for Java. However, from an enterprise point of view, BitCoinJ has security bugs that remain open and scalability issues in terms of performance, so I personally recommend that you exclude it unless you really want to understand BitCoin. Think about it.

  1. Web3J
  2. HyperLedger Fabric
  3. BitcoinJ

And if you try to develop an application using these libraries, you will find that the following major technologies are inevitable.

Cloud

I'm wondering what to write now, but surprisingly SIer has experienced EC2 / RDS / S3 and other projects that ** lift ** the current system to the cloud, but ** shift ** it. I think that is often inexperienced. Here, we are targeting the so-called cloud-native field.

Cloud and Java

I have to say that Java is clearly inferior in cloud-native deals at this point. It often comes with front-ends who are good at JavaScript, and when using AWS Lambda, I think that Node.js and Python are often adopted instead of Java. However, both AWS Lambda and Azure Functions can be implemented in Java. In addition, statically typed languages have the advantage of being easier to use in SI. There is an opinion that Java will fall in terms of performance, but I think there is a countermeasure. Furthermore, not only functional applications but also Web applications can be easily cloud-natively configured by using Docker. Under such circumstances, I think that the following major technologies are inevitable in order to become a cloud-native Java engineer.

How to hold elemental technology

I've taken blockchain and cloud as an example, but you may feel that you can't even modify the sample application without a little understanding of Docker, reactive, functional programming, streams, and so on.

With the advent of Java 8 and Rx Java 2, recent trends can be implemented in Java as well, but they bring to Java an architecture that already exists in other languages. While this ensures that the design is correct, it can be a barrier for engineers with a zero technical base to work on it. I also felt that there are not many books for Java that explain this part in an easy-to-understand manner because it is often already spoken in another language. In that case, reading a book in the field in another language is a detour, but it can also lead to a deeper understanding.

Below are a few books, each with a small amount, that I have learned and deepened my understanding of. It may be "chicken and egg", but even if you learn only RxJava and functional programming, you may be asked "what should you use it for?", So in the context of blockchain and cloud, the following I think it's one way to learn without frustration.

Maintain Java 8 knowledge

Java SE 8 Practical Programming that Java Programmers Want to Learn After all, a correct understanding of Java 8 is important. If you are worried about lambda expressions and streams and want to understand them, please read them about 3 times while writing a program.

Qiita: Write Java8-like code in Java8 It's important that it looks like Java8. Most libraries are already Java 8-ish.

Understand functional programming

Functional programming learned with JavaScript Learn the basics of functional programming using JavaScript To some extent, it is mentioned in the first Java book, but I think you can understand the power of functional programming by reading the above two books. If you try to understand it only with Java, it will be difficult for many people to understand why you are using functional types. Furthermore, as a by-product, you will be able to understand the meaning of JavaScript, which was difficult to read because it was full of parentheses.

Understand the architecture

Mystery of Agile Software Development 2nd Edition The essence of object-oriented development and craftsmanship Libraries such as blockchain utilize SOLID principles and design patterns, and it is necessary to understand this area in order to understand the overall movement.

Test Driven Development (New Translation) I'm embarrassed to think that "test-driven development cannot be done with SI!" This book is not a TDD fundamentalist textbook. You will notice that the test code refines the actual production code. Chapter 1 is Java, so please try copying it. You may see traces of code improvements, such as not knowing why the product code was created this way.

RxJava Reactive Programming Reactive is often used in modern architectures. This book is based on RxJava2 and should be fine in 2017. WebFlux is adopted as a reactive implementation in Spring5, but since the specification conforms to the same Reactive Streams as RxJava2, I think that the understanding of this document will be useful enough for using WebFlux.

Understand cloud native

Amazon Web Services Cloud Native Application Development Techniques: Acquire the Most Important Knowledge and Technology The cloud is constantly evolving, so I think it's good that the information on the website is fresh. However, I often skip the basics, so I think it's a shortcut to read this book and learn the basics of cloud native. Be careful not to be an uncle Lambda who keeps making only AWS Lambda.

end

By all means, please challenge with Java at the center of new technology, not just the conventional Servlet-only Web such as JavaEE7 and Spring4. I think you can experience the difficulty and fun in the essential part rather than trying the front end and Scala.

Recommended Posts

Shout Java at the heart of technology-Themes and elemental technologies that Java engineers should pursue in 2017-
This and that of the implementation of date judgment within the period in Java
A program (Java) that outputs the sum of odd and even numbers in an array
Let's implement the condition that the circumference and the inside of the Ougi shape are included in Java [Part 2]
Let's implement the condition that the circumference and the inside of the Ougi shape are included in Java [Part 1]
[Java] Get the dates of the past Monday and Sunday in order
This and that of the JDK
A collection of phrases that impresses the "different feeling" of Java and JavaScript
The story of forgetting to close a file in Java and failing
Sample program that returns the hash value of a file in Java
Find the maximum and minimum of the five numbers you entered in Java
Review of "strange Java" and Java knowledge that is often forgotten in Java Bronze
Get the result of POST in Java
The story of writing Java in Emacs
Discrimination of Enums in Java 7 and above
I received the data of the journey (diary application) in Java and visualized it # 001
[Java] Where is the implementation class of annotation that exists in Bean Validation?
Code that deletes all files of the specified prefix in AWS S3 (Java)
[Java] What to do if the contents saved in the DB and the name of the enum are different in the enum that reflects the DB definition
Regarding the transient modifier and serialization in Java
The story of low-level string comparison in Java
[Java] Handling of JavaBeans in the method chain
About the idea of anonymous classes in Java
The story of learning Java in the first programming
Measure the size of a folder in Java
[Java] The confusing part of String and StringBuilder
I compared the characteristics of Java and .NET
Feel the passage of time even in Java
Basics of threads and Callable in Java [Beginner]
Import files of the same hierarchy in Java
[Android 9.0 Pie Java] Implement setOnTouchListener in the margin of RecyclerView and close the soft keyboard
Error logging and exception handling that you can't often see in the Java area
Find the maximum and minimum values out of the 5 numbers entered in Java (correction ver)
The story that the variable initialization method called in the Java constructor should not be overridden