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.
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."
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.
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.
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.
And if you try to develop an application using these libraries, you will find that the following major technologies are inevitable.
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.
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.
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.
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.
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.
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.
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.
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