preface

I’ve lost count of how many readers have asked:

Blogger, how do you learn? Any good advice for a situation like mine?

I don’t know when I became a life coach. Of course, I do not exclude these problems, and communication with everyone is a learning process.

Therefore, I also promised to prepare an article on learning; Therefore, this article is prepared for a long time, the length is long, everyone patiently read the hope that there can be harvest.

The following is just a summary of my experience in the industry, and I will try to explain what I consider to be a “less bad programmer” in terms of hard and soft skills.

The skill tree

As a skilled code worker, it is still a skilled job.

Since it is a technical job that professional strength has to stand up to the test, I will talk about what we should master according to the relevant categories below.

Computer Fundamentals

A job that deals with computers, the tools we rely on to survive. So some basic skills are what we should and must master.

For example, Internet related knowledge.

This includes the TCP protocol, which differs from UDP. You need to understand the meaning of the TCP three-way handshake, such as unwrapping and sticking packets.

Of course, the most common upper layer HTTP also needs to be understood and even familiar.

This section recommends the book illustrated HTTP.

Then there’s the operating system.

Since most of the code you write after work runs on A Linux server, you’ll need to be familiar with how it works.

Such as process, thread, memory concepts; Server common command use, this does not have what the trick is usually more knock knock more summary.

I also worked part-time in operation and maintenance for half a year before, so I am quite familiar with this area.

Linux this natural recommendation industry is very famous “bird brother Linux private house dishes”.

When learning these things as a beginner will certainly feel boring, the university will generally have these basic subjects before the specialized courses. I’m sure most of you didn’t pay much attention to the lecture, because it’s true that even if you learn to memorize these things, there’s not much direct motivation.

But when you work for a few years, you will find that as long as you are still doing computer related work, it is impossible to get around, when the knowledge inadvertently helps you one day you will be glad to have made the right choice.

Data structures and algorithms

Next comes another boring subject: data structures.

It was also the most unpopular course in college and the only one I ever failed.

I remember that every time the teacher asked us to use C language to practice the exercises on the book, and looked at the combination of the letters we all knew one by one. I resolutely chose to give up.

As a result, NOW I have to look at binary trees, red-black trees, stacks, queues and other knowledge every once in a while to deepen my impression.

Algorithm this thing I really do not have what say, before insisting on brushing part of LeetCode topic also mostly stay in the middle.

But something like basic search, sorting algorithms I think you have to know, you don’t have to write it out but you have to understand how it works.

Therefore, it is strongly recommended that students still in college actively participate in some ACM competitions, which will definitely be a bonus in the future.

While this may play a big role in college admissions, it may be less likely if you’re working in Java Web development.

But once you get into model design, middleware, efficient storage, query, and so on, there are pitfalls.

This piece of content is similar to the above computer foundation. For our Java development, I think in addition to brush LeetCode more to deepen the impression, in daily development, every time we choose a container to store data, we should think about why we choose it. Is there a better way to store it? What is the efficiency of write and query?

The same stick to it, the future is sure to receive a lot of goods.

Also recommend Algorithms (4th edition)

Java based

Most of the readers here are Java related, so this strongly related skill is important.

The Java foundation is the only way to advanced Java.

Let’s leave the basic grammar aside and focus on the high-frequency stuff in the real world.

  • Basic containers, such as HashMap, ArrayList, HashSet, LinkedList, etc., should not only be able to use them but also understand how they work. In this way, the best design can be selected in different scenarios.
  • IO and NIO also need to be mastered. Most of the daily development is dealing with disk and network (writing logs, databases, Redis), which are IO processes.
  • Common design patterns, such as agent, factory, callback, builder, are helpful for developing flexible, scalable applications.
  • Java multithreading is a very important feature in many daily developments. Understands threading models, advantages and disadvantages of multithreading, and how to avoid it.
  • Good habit of single testing, many people feel that writing single tests is a waste of time and pointless. But single tests can expose many problems in advance, reduce rework of tests, and improve code quality.
  • Good programming specifications. For this, please refer to Alibaba Java Development Manual and viPshop Java Manual optimized on the basis of it.

Java Core Technologies · Volume I is recommended.

Multithreaded application

With a solid foundation in place, let’s talk about multithreading and concurrency related topics.

If you want to add “advanced” in your title, you must go through concurrent baptism.

The concurrency discussed here mainly refers to the single-application scenario. For multi-application scenarios, see the distributed content below.

The main purpose of multithreading is to improve CPU utilization and task execution efficiency. This is not necessarily the case with multithreading, however, because it also brings some problems:

  • Context switch
  • Shared resources
  • Visibility, atomicity, order, etc.

Using multiple threads is bound to be more complex, less manageable, and even slower than using a single thread. So consider whether you really need multithreading.

After you use it, you need to think about why multithreading is such a problem, and you need to understand memory models, visibility, and so on.

What are the same solutions? Their strengths and weaknesses also need to be mastered.

When talking about multithreading, you have to include and send the following content java.util.concurrent.

The most common and important ones to master are:

  • Atomic class: Atomic operations for concurrent scenarios.
  • The queue. Often used for decoupling, you need to understand how it works.
  • Concurrency tools such as ConcurrentHashMap and CountDownLatch are used and how they work.
  • Thread pool usage, and related principles.
  • Information about locks: Uses and principles of synchronized and ReentrantLock.

This piece of content can let us know how to write the JDK to deal with concurrent ideas, to our own write high-quality multithreaded programs also have a lot of help.

The Art of Java Concurrent Programming is recommended as a good introduction to concurrency.

The JVM virtual machine

To get into Java, the JVM is indispensable. For most developers working for 1 to 3 years, direct exposure to these things is relatively rare.

To 3~5 years this stage must understand, I think the following content is necessary to master:

  • JVM memory partition, knowing which memory to store what; Thread safety; How to deal with insufficient memory and so on.
  • Different cases of memory overflow, stack overflow, and location solutions.
  • Generational garbage collection strategy.
  • Online problem location and related solutions.
  • The whole process of a class loading, object creation, garbage collection, and class unloading.

Knowing this can be a huge help in actually analyzing the problem.

I highly recommend Deep Understanding of the Java Virtual Machine, which I have read over and over again, with different insights at each stage.

The database

Do WEB application development of students must be with a lot of dealings with the database, and generally speaking, the first bottleneck of a system is often the database, said that the database is the last straw to pressure the system is no exaggeration.

So the grasp of the database is also very necessary. Take the MySQL database, which is widely used in the Internet, as an example. Some knowledge points must be mastered:

  • The data structure and principle of the index, and which fields should be indexed.
  • For a slow SQL optimization idea.
  • For the solution of horizontal and vertical database splitting, it is necessary to understand the middleware such as MyCAT and Sharding-Sphere commonly used in the industry.

For regular use, you can refer to the database chapter in Alibaba Java Development Manual. If you want to have a deeper understanding of MySQL, you must recommend the classic high-performance MySQL book.

Distributed technique

With the development of the Internet, traditional monomer applications are less and less suitable for existing scenarios.

So distributed technology comes along, and it covers a lot of things, and my experience is limited and I can only list some of the things THAT I use on a daily basis:

  • First, some basic theories, such as the CAP theorem, know some of the problems that a distributed system will bring and the way in which each application tradeoff.
  • Read the definitions, sources, and comparisons of the microservices that have become popular in recent yearsmartin fowlerOf the originalMicroservices, or you can search for relevant domestic translations.
  • When using distributed frameworks like Dubbo and SpringCloud, it is best to understand how they work.
  • The next step is to propose solutions to the problems of distribution. Such as distributed lock, distributed traffic limiting, distributed transaction, distributed cache, distributed ID, message middleware and so on.
  • Also understand some of the load algorithms in distribution: weights, hashes, consistent hashes, failover, LRU, and so on.
  • It is better to do a practice such as seckill architecture practice

Previously there was an open source distributed related solution component:

Github.com/crossoverJi…

At the same time, I recommend the introduction of a popular science “large website technical architecture”, the publication time is a little early, from which you can learn some ideas.

Understand the point of architecture

I believe everyone has a dream of being an architect.

There is a sense that the architect is drawing the paper, putting up the shelves, and the people below are adding the bricks to the final product.

But in fact, the internal work needs to be very deep, the above listed everything needs to be mastered, the bottom to the operating system, algorithm; The upper level to the application, the framework needs to be very proficient. (Except for PPT architects)

I don’t have much experience in architecture myself, so I can only offer limited advice.

First of all, distribution must be mastered. After all, most architectures are based on distribution.

It is necessary to choose consistency or availability according to CAP theory combined with the project situation, and how to do the technology selection suitable for the existing team.

Here recommend the next kaitao teacher “100 million level traffic website architecture core technology”, listed a lot of examples of architecture, but the net is mixed, but for the introduction of architecture can popular science a lot of knowledge.

How to learn

With skill trees out of the way, it’s time to talk about learning, which is one of the most frequently asked topics.

And the most discussed about learning is watching videos or reading books?

video

We have to admit that video is the most convenient source of knowledge, after all, contains pictures, text and sound.

University years time actually I also did not have a good professional course, I remember the real entry Java or a summer vacation spent two months time every day at home to see “horse soldier” teacher’s video tutorial, at that time the resources are also very old, remember it seems to be 07 years out of the video (with Google).

During that time, I got up early and went to bed late. After learning something every day, I practiced it immediately. I also had a sense of achievement in my heart. Later, when I started school, I became an outstanding student in the eyes of my classmates.

Now I turn on my 12-year-old computer and there are dozens of gigabytes of teaching videos on the hard drive.

Reading a book

Time is really precious after work, completely without the freedom of student life to learn. So now my main source of knowledge is books.

These are the books I read recently:

Reading will involve the difference between e-books and paper books. Personally, I prefer paper books. After all, I can easily take notes and switch between chapters at any time. The most important thing is to develop the habit of smelling books since childhood.

Knowledge of pay

Paying for knowledge has become increasingly popular in recent years, with many big names joining the ranks, and people are getting used to paying for knowledge.

To tell you the truth, it is not easy to write a good article and a video. Only with positive motivation can the author continue to output better content.

The ones that I think are done better in China and I pay for are geek time, the knowledge planet of the big guy, etc.

There is no absolute good or bad in these three points. In fact, it can be seen that I watched videos at the beginning, read books and learned paid content after work.

The advantage of video is that you can follow the teacher’s thinking step by step, which has a strong sense of audio and video substitution, just like the teacher’s lecture in school.

However, due to the long content, readers can not understand the key points, and even dare not to fast forward for fear of missing an important knowledge. Now, as IT is becoming more and more popular, there are many videos on the Internet, resulting in uneven quality and unsystematic.

In a book, you can selectively read the chapters you are interested in, and you can easily read the obscure content again and again

Therefore, it is suggested that students who are just beginning to learn can watch the video and learn. After a period of time, they can try to read more books.

Of course, this is not absolute, find their own learning style is good. But whether it’s a video or a book, practice.

Build your personal brand

Personal branding may seem out of place for programmers, but it’s important for everyone in the Internet age.

It used to be that we didn’t think to search for someone’s profile when we were writing or reviewing their resume, but in this age of information explosion, every little bit of your online footprint can be found.

blog

Therefore, we need to maintain their own business cards, such as building their own personal blog first.

I’ve talked a few times about the benefits of blogging. It doesn’t matter if you don’t follow a lot of people early on. It’s all about sticking to it.

GitHub

The second point is more technical: get involved in maintaining your own GitHub.

Thanks to the special nature of GitHub, it’s easier to build a personal brand after maintaining it.

Talk is cheap. Show me the code.

If you want to maintain it well, you can start from several aspects:

  • Get involved in other people’s projects, whether it’s a code base or a knowledge base. Get involved in the community.
  • Start your own open source project, whether it’s a small pain point in the development process or a well-organized knowledge point.

But there are a few things to note:

  • We need to follow GitHub’s social protocols. If you can use English, use English as much as possible, especially in foreign factories.
  • Push as little as possible that doesn’t have anything to do with the code, which I don’t think will improve my brand.
  • Don't brush star. This is just popular recently, do not know why there are always some people will drill this loophole, brush up the heat of their own and did not improve any.

How to build your personal brand as a new developer

Medium.freecodecamp.org/building-yo…

English is important

Now let’s talk about the importance of English. I remember when I first went to college, teachers and some training institutions would say:

Don’t be afraid that you can’t learn programming because your English is poor. The only words you really use are those.

Although this sentence is true, But English in the IT industry is a great plus ability.

Take common JDK source annotation is pure English, if English is good, some Spring things can be self-taught, go directly to the Spring official website can view, even the SpringCloud, the official information is the best tutorial.

Another is the usual search data, conditional can try Google + English search, you will find a new world.

Otherwise there would be no programming for Google/Stack Overflow.

For good English students naturally not afraid, that not so good how to do?

Like me, but I’m sticking to the following:

  • Switch all your phones and computer systems to English and make it a habit (even if you can’t find a menu).
  • Subscribe to some English weekly newspapers, such as the Bay Area Daily.
  • Regularly read articles from influential foreign communities such as Medium.com/.

Although now I am not much good, but I am also working hard, I hope you also insist together.

I recommend a recent book “English for Programmers”.

Stay competitive

Technology is a fast-moving, fast-changing industry, and with countless graduates entering the competition each year, it’s easy to be caught up or even overtaken.

So we have to be competitive all the time.

Not much. I’ll just talk about what I’m doing right now:

  • Lay the groundwork. Not after learning to forget, need to keep looking, consolidate, the foundation is ten thousand change from its zong.
  • Look at the source code, understand the principle, do not stay in the realm of shen Xia.
  • Pay attention to industry development, new technology, new dynamic at least can not be left behind.
  • Aim to produce one technology-related article per week.
  • Actively participate in open source projects.

Mind mapping

Combined with the above output of a more intuitive mind map.

conclusion

This paper lists some methods based on my own experience, which may not be effective for everyone.

Also repeatedly wrote about a week of time, hope in this road and on the road friends have some effect.

Most of them just talked about a train of thought, in fact, each single chat can write a lot. Each point has a book recommended, there are better suggestions welcome to leave a comment discussion.

Most of the above information is maintained on GitHub, interested friends can check it by themselves:

Github.com/crossoverJi…

Your likes and retweets are the biggest support.