After the launch of the column on Zhihu, the response was very good, which exceeded my expectation. It attracted thousands of followers and received many private messages, mostly asking the following questions: What is Java used for at work? How to learn Java? Is Java complex to learn? Is English bad mathematics bad can learn Java? First of all, I’m just an ordinary software engineer. I need to code at work and take care of my children after work. I can’t reply to my private letter one by one.

First, learn what Java can do with it. What are the current career directions in Java? Let’s take a look at the picture below

The figure above shows the two most important directions: Java Web and Ardroid. In fact, we often refer to Java software engineer as Java Web software engineer or Java back end (server side) engineer. Java Web can do a lot of things, we use Taobao to find goods, open the browser to enter the url, enter the name of the product, click search, at this time the front page (browser) through HTTP protocol to transfer the name of the product to the Java server, Java server using JDBC technology to retrieve data from the database and return, It is then assembled into web content that is returned to the browser and displayed to the user. Java Web to learn a lot of things, network request protocol (HTTP, etc.), Web front-end technology, Java server technology, JDBC, database and so on to learn.

Android has a little less to learn. Android is generally client-side software, and basically doesn’t involve the server side. Theoretically, you can ignore the server side technology (shown in the gray box) and the backend database, but I think it is still necessary to spend time understanding these things in order to be a qualified Android engineer. Similarly, Android engineers also need to learn the Network request protocol (HTTP, etc.), after all, it is also through the Web server to retrieve data from the database to display on the APP. There are more and more hybrid (native +HTML5) apps, so you need to learn some front-end knowledge.

Note that the Web server in the Android orientation diagram can be written in Java or in other languages, such as C#, but Android programmers don’t need to care.

Whether you are learning Java Web or Ardroid, Java Basics (J2SE) is a must, which will be explained in more detail later. Others also have some desktop programs (Swing/ AWT), embedded development (J2ME), JavaFX development, basically has been eliminated, not good to find a job, not recommended to learn. The following is the recruitment data of various positions in Beijing from a large recruitment website for your reference






In addition, Java has a big data (Hadoop) direction, but this direction is not recommended for newcomers until they have some work experience.

Many people ask me in private letters, how is the Java employment environment? Is Java difficult to learn? Is mathematics bad English bad can learn Java well?

It’s time to show this picture:

Above, in August 2017 programming language list, although compared with 2016, but can see out, a few names before the overall decline, the reasons for the decline is caused by the rise of a variety of emerging languages, although the decline, Java still firmly occupy the top, so the Java job market prospects compared with other languages or comparative advantage.

In addition, Java is easy to learn, Java is a C-like language, the syntax is not much different from C/C++, I believe you have learned a bit of C or C++ in school, so many easy to learn, Java also abandoned C++ features that are rarely used, difficult to understand, confusing. Examples include operator overloading, multiple inheritance, automatic casting, etc. Unlike C/C++, Java runs on a JVM (Java Virtual Machine), as shown below

The JVM hides the details of the underlying operating system and does a lot of things for developers, such as memory allocation and reclamation, so Java developers don’t have to worry about memory allocation and reclamation when they write programs, and they don’t have to worry about memory fragmentation, which is already done by the JVM. This is why the Java language is cross-platform (compile once, run anywhere). This means that any machine that can install the JVM can, in theory, run programs written in Java. C# is also easy, doesn’t allocate or reclaim memory, and is designed to be better than Java, so why not C#? Yes, I can’t deny that. Let’s take a look at the recruitment data from a large website:


Location in Beijing, search keyword Java, 24,564 jobs, search C#, 6177 jobs. Java still offers a lot more jobs, which is consistent with the rankings.

To sum up, for beginners to start and find a job, I recommend Java, in fact, we do not have to tangle in the end to choose which language to start, such as Java and C# these two languages, in the idea is basically the same, Java, C# familiar with the grammar and environment immediately can be handwritten, and vice versa.

Java does not require a lot of mathematics, and the commonly used data structures and algorithms have been encapsulated. Java is mainly used to do enterprise applications, large websites, etc., mainly to deal with business logic, rather than scientific calculation, so do not worry if you are not good at math. For writing Java code for English requirements are not high, a total of dozens of keywords, most of which are at a glance to know what the meaning of, such as if, else, while, for, public, private, etc., do not see the old bird screen is full of English will be shocked, in fact, those English is only variable names, Is his name, although English is not good to write a Java program didn’t make much difference, but reading English API documentation is difficult, a lot of first-hand data are only English documents, the JDK source code and comments in English, but also need not too much but heart, most of the API can be found in Chinese version, but always see some original or trust, so, Please try your best to learn English well, if you are good at English, you may not find a job abroad (high salary).

Here’s a look at what it takes to learn Java Web and Android. Start by searching for Java Web software engineers on job boards.



Java foundation will not say, must focus on learning, other such as: JavaScript, JQuery, Ajax, JSP, HTML5, Oracle, DB2, framework, template, Servlet, Spring, SpringMVC, Struts, Mybatis/ IBatis, database, MySql, etc. Spring, SpringMVC, Struts, Mybatis/ibatis, MySQL appear the most times, some words many beginners may not have heard. Don’t be afraid, most of the terms mentioned above are frameworks. The main purpose of a framework is to improve productivity and standardize people’s development. In other words, it is written by someone else and used in the project. Instead of using a framework to start a project, it’s easier to understand what’s underneath. Let’s go back to the first figure at the beginning of this article:

The previous article has said, whether it is Android or Java Web direction, JavaSE (Java foundation) is the focus, must lay a good foundation, which Swing/ AWT related knowledge can choose to skip, above the client, server, database knowledge to wade into, the main things to learn as follows, so a look at a lot of fresh.

Web client (Web front-end) : JavaScript, HTML, CSS

Java server side: JDBC, Servlet/JSP, etc

Database: MySQL

Above these Java server is the most important, database MySQL also need to learn about, the Web front end also need to understand, work in the Web front end code is generally written by the front-end engineer, but we have to understand, and can add some script labels, etc., My suggestion is to learn MySQL and JDBC immediately after learning the Java foundation, and then find Wang Yong’s DRP project online to learn, this project not only talked about the front-end foundation, but also to the Java server needs to master the content of the detailed explanation. After careful study of DRP project, I already have the ability of software development, but it is not enough to enter the enterprise, because enterprises generally use the framework in practical work, there are many frameworks, I suggest learning SpringMVC, Spring, Mybatis, also known as SSM, these videos are easy to download on the Internet. After downloading, learn one by one, and then integrate into the DRP project one by one. After you are familiar with it, you can consider preparing your resume. With the learning experience of the SSM framework above, you will soon learn other frameworks.

Back to Android, click on a job listing for Android Engineers:



Android’s requirements are similar, except for the emphasis on Java, which is Android, you can search the video on the Internet to learn on the line.

As for the choice of Java Web or Android, we like to see, have energy can learn about it.

Long-term development: Java Web > Android

The path of Java Web seems to be more complicated, but it is not difficult, but it involves a lot of things, and many people can’t stick to it after learning half of it. They are defeated by persistence, not difficulty.

Some people asked me in a private letter, how to do if I can’t remember the code in the study? First of all, we must make clear in the learning process, we learn a Java in order to find a job, rather than dealing with exams, forgot all schools of those style, do not go back code, check the key, the key is to begin, software engineering is a practical subject, in the process of learning, will light the hearing is not enough, learn each knowledge point must be to understand, Start typing code, finish typing, move on to the next point. LeiJunYou article: give some Suggestions of programmers, in which one thing is you must write one hundred thousand lines of code, this point of view I agree, don’t start work, and this will not progress, writing code is a skill practice makes perfect, do not have enough amount of code that is become a player, therefore, must knock code, more much knock code, extra code.

In learning, stick to the main line of learning, at least do a small Web project on your own first, and then consider further learning something else. Some people learn about multithreading in the process of learning the basics of Java, and they have to get the theory straight again, go to some books on multithreading, and some people read some articles that say Java creates a space in heap memory when a new object is created, and they have to study heap memory, and then study JVM. Such a learning method is not desirable, the initial stage to learn to grasp the focus, to understand, practice, looking for a job, to learn to give up some things first, and so have extra time to in-depth research what they want to know. One more thing, don’t sit in the process of learning, I have a small, learn multithreaded deadlock this piece, anyway don’t understand, gave up, and a more poor, learned in training an anonymous inner class, keep thinking this thing is what, why do you want to have an anonymous inner class, the teacher class is at the back, still want to, Even every word to understand thoroughly before they are willing to continue, Java foundation has not finished learning, fell behind, want to drop out of school, training institutions do not return, more than 20,000 dozen lost in water. Study in but encounter temporarily can not understand, first rest, go out exercise, relax the brain, calm down to think, look again may be. I still don’t understand it, so I’ll just skip it and learn from it, and maybe when I see it, I’ll suddenly understand why I did it.

And some friends, in the process of debugging code, as long as a little mistake, is making a fuss, also don’t take a closer look at mistakes, direct phone take a picture of a piles of stack Exception send direct messages to me, let me help to look at the code, a look, and are generally not null pointer Exception, array subscript crossing the line, I guess they didn’t see at all, it directly to me. In learning, do not be afraid of problems, everyone is like this, including once I, must carefully look at the error log, see which line of code error, analysis of the cause of the problem, and then go to the troubleshooting, in the process of solving the problem, is the process of unknowingly progress. In your own writing process of the project, the web front end, Java server, database, every link may appear problem, want to step by step, first to see if the value of the web front-end to the Java server, Java server to have transferred to the database, if there is any data in the database and so on, more careful, will be found that the problem, Still can not solve, baidu bar, Baidu can not come out, looking for senior school elder sister, the side of the master ask, still can not solve? Then go to value or join my rice ball and ask me, hey hey.

Some people ask me, is it better to study by myself or go to training institutions for systematic training?

If you or a sophomore junior, now there are a lot of time, I suggest or their learning, training institutions always writes the groom cost, not the average person can afford, is now so rich network resources, to what kind of information can be found, mostly just self-study time is a bit long, slightly easier to walk some detours. University courses, language classes such as C language, C++, Java, C#, data structure and algorithm, assembly, software engineering and everything related to software, try to spend time to learn, can learn how much to learn how much, are useful.

If you have been working now, want to study Java career change, I suggest you can consider the appropriate training institutions to study system, training institutions in the opinion of zhihu seems not very well, actually, there are several is doing well education, I go to training institutions recruit people, basically can, also dare not to want too much salary just learning, be good and inexpensive, Training institutions also have the advantage of saving time, generally four to five months can be released, learn well, find a job or no problem.

Say so many, feel fast into the training institutions, the give you emphasize that learning Java is very hard, after all whether self-study or training institutions, please everyone to do a self-assessment, first look at their Java is not suitable for learning, it is one of my answer, please reference: zhihu users: Java is not suitable for the regular self-study training into the line?

Finally, if you decide to learn Java, please put your hand down the king of glory, LOL, fantasy westward journey, let’s make a commitment to learning, don’t learn to learn, then play didn’t play well, with much of training course, still have not started, that’s embarrassing, play games, will be reassuring to play, after all, I was once in king glory of Kings.

Here are some of my answers about learning Java, there is a certain reference value, please take yourself

Self-taught programming can’t remember the code?

In September 2017, is it harder for Java self-learners to get started?

Why do I always want to learn more about programming than about problem solving?

How do beginners learn Java?

What does it take to be a programmer from scratch?

My column: Java those things – column directory for beginners to learn Java is very helpful, suggest in the learning process can be appropriate to have a look, like if you can pay attention to me. Recently created a rice ball, specially to help learning Java friends, attached rice ball link, if necessary, wechat scan code: click to view the TWO-DIMENSIONAL code