The previous period should be the cause of the carding of their own Java knowledge system, written a look can help the coming into or is in the Java World Trek of the program staff.
First, base map
About 2003 I began to know Java (which was still using Delphi), but it was only after 2004 years of college that I began to formally decide to learn java. At that time, I think the program with Delphi to write C/s architecture is not very interesting, Java at the time proposed the concept of the EE specifications, enterprise-class architecture feel all kinds of tall, suppress the desire of the heart to open a Java journey. To be honest, the door to the Java world was faint, and all kinds of norms, concepts and abbreviations could make the whole person dizzy.
- J2se
- J2ee
- J2me
- Jsp
- Jdbc
- Jms
- Ejb
- Jndi
- Jdbc
- Jta
Casually recalled the next time I saw something, a lot of unfamiliar English noun abbreviation (fortunately, Java has not been all kinds of frameworks, or more dizzy), do not know where to start learning. And just the students have this JSP book, so I started from the JSP. Honestly that's a bad book, I don't even remember the name now, probably remember to start with some examples to build a JSP Demo site. By a variety of environmental, container problems abused times finally ran an example, from the native browser finally see the page in the example, there is a second sense of accomplishment, and then is dazed. Because I don't even know how it all works, what's the principle of it? Around a large circle, took a lot of detours, if you give me another chance, I will start from the Basic Java Language Foundation.
What is the basis? Java is an object-oriented language, the most important concept is the object, and all its syntax is just around it. and the basic structure and variables of other programs: order, loop, branch, and other language bases before, but just a change of form. Understand the object, then the concept around the object: classes, interfaces are natural extensions. Of course mastered the core concepts and basic grammar, but also can write a Hello world level, but the focus is your starting point, the journey to the nearest.
This stage is familiar with the language and related libraries by reading good books and doing some basic exercises. Java started the book in My impression of "thinking in Java" very suitable (ah, I went around to see this book), of course, there are some other good books, such as "Introduction to Java Programming", "Core java." My feeling is that this kind of start-up books can be more than a few, a knowledge point reference to read, after all, a writer may also have omissions, horizontal reading, rather than portrait of a book from scratch to the end. A knowledge point of a knowledge point of the grasp, straightened out, step on a deep footprints, do not run around, the results are general, start slowly, back to fast.
On the basis, in my eyes the most core and important parts are not much, I here simply listed below:
- Core Concepts
- Object model
- Interface design
- Class Library
- Lang
- Collections
- Concurrent
- Io
Here the core concept is not much written, basically embodied in all Java code base, along with always, the difference is only understanding and abstraction of moderation or not. JDK so many libraries, here are only listed above, Lang in fact the most important I want to say is the String, which many people have ignored. C does not have the concept of String, Java provides this object, but did not understand well and good use of this object, will let you step on the endless pits, but also repeatedly trampled. No, no, go search. How many low-level questions about the various character encodings, along with various performance issues caused by String. The core object of String is emitted out about the encoding of the character, the byte expression of the character (big, small end, network byte order), the effect on the GC, the regular expression, pattern matching, which is probably the most abundant object in Java.
Collections Framework provides a large number of commonly used data structure encapsulation, basically let the Java programmer farewell to the manual implementation of the data structure you learn from the most common data structure. The correct understanding of the different data structure of the applicable scene than they can manually implement them more useful, nothing more to see the code in the collections, are the implementation of the Master level ah. Remember when I learned Java or JDK 1.3, into the work after the mainstream is 1.4, then there is no concurrent library. When processing their own communication between the threads, by a variety of notifications missed, early notification, deadlock to make a death. So now Java programmers are much happier, concurrent and a master Class library implementation, but also can see nothing more, try to figure it out. IO libraries, whether file IO or network IO are the most common of Java programmers, it is important to familiarize themselves with the API, but it is more important to understand how to abstract and model IO operations and understand the nature and rationale behind the different IO models.
Well, when we finish learning the basics above, we get the first map, like this one.
The second one, the skill map
It's a little difficult to master the first picture to be free in the world of Java. Now a mainstream use of Java is back-end development, this field in its previous era is the Java EE (now known as the World, also known as the Enterprise) Java Edition. The Java EE contains a lot of content, the core is EJB. At the time, I was just Red in the school. Distributed object technology, with CORBA and EJB as an example to implement. Read several EJB design patterns and best practice books, and then did not graduate into the company an internship found that we do not have EJB now, we use a call Spring. The IoC, DI and other new English abbreviations appeared again, a mouthful of old blood before the spurt, and re-cheer to start a new learning journey.
Yes, EJB began to slowly exit the mainstream at that time (2005). Dr. Rod Johnson, a "Expert one-on-one development without EJB", pronounced the death penalty for EJB, and Spring stepped onto the historical stage. Since Java has entered the framework of the great development of the era, Ssh/ssi and other technical framework combination formed the mainstream of Java development, and continue to affect today.
Java framework more and more, more and more ecological, beginners face such a complex framework, it is also the inner confusion, feel really learning, endless. In fact, real projects, the real use of the framework is not much, Ssh/ssi basic as the core of Java Web Project Framework, you get the core of the tool, from the need to master. But it needs to know why, Spring takes over the work of object creation and interdependence management, and hides the design pattern in the application of the framework, which many people only know and never think about. Web development from early JSP a big mess stew (HTML + CSS + JS + Java + SQL, early I just put all these in a JSP, think how difficult to maintain), to the Division of the role of MVC. Just a View layer has evolved from a tag library to a page template (Velocity, Freemarker), and now I prefer a more thorough front-end separation model. A few times the CSS style of the page killed me how much time, specialization is conducive to efficiency and depth, the Internet and mobile Internet development triggered by the Web version evolution, so today's front-end complexity is no longer below the backend.
So how many frameworks do I have to master as a Java engineer? This is a pseudo proposition, because the number of masters is not enough. The core of the mastery of a few, a general understanding of a large number of the ability to master the Rapid Learning Framework is the solution. Or take Ssh/ssi as an example, the trend of professional front-end division of labor becomes more and more obvious, completely liberated the back-end Java engineer's distress. The spring-based framework solves a large number of general-purpose problems, and today's spring is dozens of times times bigger than it was at the beginning (counting all of the spring-named sub-projects) to solve specific common problems. So when you write code suddenly want to write a class named Util, stop to think that this is a common problem to solve the class, you might want to search the ready-made library, such as perhaps Apache Commons there is the code you need. General-purpose libraries and frameworks let us free ourselves to focus on business logic and efficiency, which is probably the most valuable part of your code, and programmers may complain about the technical content, and I think the most effective technology to maximize business value is the most technical content.
Frames such as weapons, 18-like (far more than 18) weapons I may not be everything, but we have to have the same ability, such as Zhang Mowgli learn the sword, the enemy Learn swords can also win. The trick in this is not learning moves, like you may think that your Hibernate usage mastery of the perfection of how, an online database but first collapsed. The essence of this is still the understanding of relational (SQL) databases, which may now need to be coupled with an understanding of the principles and mechanisms of a particular non-relational (NoSQL) database, even the essential understanding of the O/R mapping model.
Therefore, the foundation like the internal strength, the framework such as weapons, the use of the moves, with the heart, the use of the wonderful, three mastery, it is already available in the Java World side. As mentioned above, we have a second map based on this.
The third one, the extension diagram
And the third picture, I can no longer give a suggestion that I think is a little more general. At this stage each person's growth and development direction will be affected by their environment and actual situation, I take the example of itself a little explanation. After entering the Internet company in the past few years, the development of Java technology began to evolve from a single application of the EE container to SOA and microservices. Large-scale distributed systems become the norm, so more of my work is focused on this area. On the one hand deep excavation continues to complement the whole knowledge blind area, for example, the basis of distributed program is RPC call, RPC is the essence of network plus object serialization. The corresponding to thoroughly understand the principle of TCP, Unix/linux network programming model, several different network IO models. And then up to Java based on this provided network programming model, BIO (blocking), NIO (non-blocking) and AIO (asynchronous IO), and with practical work practice to understand deeply.
This process is exposed to a number of different RPC technologies, from the Java-brought RMI to the WebService technical specification. Later, some of the more concise, more powerful RPC frameworks emerge, such as Hessian, Thrift, and so on. The nature of the different frameworks is still the same, with the development of services based on the RPC framework and further derived from the provision of additional value-added functions of the service framework, such as Ali Open source Dubbo. With the deepening of the work practice, it is possible to go down to the JVM level to analyze the memory usage of the objects, the scheduling of the threads, and the delay situation. The core role of this phase is still the ability to quickly learn and apply to work practices.
The other side of the scale is horizontal expansion, which may require a wider range of technical knowledge as the nature of the work changes. As architects, for example, the breadth of technical knowledge requires some aspects to be higher. Techniques of technical learning and techniques allow you to expand the width of the technology faster, standing in the higher dimensions to look at different technical directions and products, and make the right technical decisions most effectively.
Everyone at this stage may face different environments and practices, so the maps that are formed at this stage can vary widely. Here is my third picture, only for those who walk on the Java journey. And according to the map of the way through the path, it happened to constitute a unique you.
Even if you do not have a map now, but also don't be dazed and Forever keychains. Keep forward always find the way, in fact, I just came over, always, dare not stop.
Write some words, draw some pictures, "wink" everything has changed. Feel good, can long press or scan two-dimensional code attention.
Go Java Journey: A map of Walker