JAVA programmers usually work overtime seriously, how to improve themselves efficiently?

Working overtime until more than 10 o'clock every day, how do programmers arrange time to improve themselves, such as learning English, or participating in MBA courses, socializing widely, etc.?

Looking back on my journey of improvement, I think there are a few things I can share with you:

The first is "interest". This is also the most important point in my opinion. If you have no interest in doing something for 10 years or even a lifetime, I think it is very painful. Interest is the driving force of instinct. When you have interest, you will always think about how to solve problems when you encounter problems, instead of thinking that it is "difficult to do." It feels like a burden; when you have an interest, when you come into contact with something, it is like a more in-depth understanding, rather than using it and leaving it alone. So I think if you want to develop and improve in an industry (not limited to the software industry) for a long time, you must ask yourself if you have enough interest.

The second is "persistence". The book "Alien" mentioned a 10,000-hour theory, which I think is very reasonable. It means that if you want to become a top talent, you must accumulate more than 10,000 hours of training and experience. Especially in the field of software development, there are many technologies and fast technological updates. If you don't insist on accumulating and improving, it is difficult to reach a certain level. Operating systems, databases, networks, programming languages, design methods, etc. must be mastered, and each technical point has many more detailed classifications. In terms of programming languages, there are about 10 mainstream ones such as C, C++, Java, PHP, Python, etc. Each language has a lot of content if you go deeper. For example, Java can list JVM, IO, NIO, network programming ,reflection. . . . . . etc. So with so many things, it is okay to get started quickly in a short time, but if you say that you are proficient in XXX in 21 days, it is impossible, and it must be accumulated for a long time. In fact, I dare not say what I am proficient at now, I can only say that I am proficient relative to others around me.

The third is the "method". Mastering the correct method can make us do more with less and improve faster. I will not repeat some common methods. Here I will share the exclusive secret recipe:

A secret recipe is "write a blog", note that this is not "watching a blog", nor "reposting a blog" but "writing a blog yourself". If you think you understand something better, then you write a blog. When you actually write, you will find that there are still a lot of things you don't understand or don't know, which will prompt you to study and research again; when your blog is published, other people can learn from your blog. Outside of things, it can also help you find some problems or errors, so that you can master it further;

Another secret recipe is "chain learning". To put it figuratively, you grab a chain by one chain and slowly pull all the chains out. Give a very simple example: socket sever programming. When many people are programming, they go to the search engine to search for "socket server samples", and then quickly write the functions according to the samples. and then. . . . . . Many people don't have it, and they don't care if they complete the task. In fact, doing so is a missed opportunity to improve yourself.

"Chain learning" is different. It does this: After I search the sample through the search engine and complete the work, I will ask myself a lot of questions: what does each parameter of the api in the sample mean, and what are the precautions? matter, are there any other APIs? In order to solve these problems, I may look for this book, socket programming in a certain programming language; after reading it, I know the whole picture of socket programming and some precautions, which are not found in the examples searched by search engines; After knowing the whole picture of socket programming, I will ask myself: how does the operating system do it? Then I will read "UNIX Network Programming" again. After reading it, I will know more about the operating system level. After reading "UNIX Network Programming", I also know that socket is related to tcp/ip, then I will read "TCP/IP Protocol Detailed Explanation" again. . . . . .

Doing this is a learning chain: socket server programming -> socket programming -> UNIX network programming -> TCP/IP protocol, and it can continue to expand in the future. Such continuous expansion and in-depth, a small opportunity can initially learn a lot of things, and these things will come in handy at some point in the future work.

I used MFC to develop on the Windosw platform in Huawei before, and then switched to Linux platform development in UC. Using this method, it took me about 2 years to master the development technology related to the Linux platform, including Linux, MySQL, C++, Java, PHP, etc.

The third recipe is "closed-loop learning". "Chain learning" is suitable for the learning of a set of related knowledge or skills, while "closed-loop learning" is more suitable for the learning of business and mutual knowledge and skills. Since software development requires the division of labor among multiple teams, most people are only responsible for the entire system or a part of the entire process, which leads many people to think that they only need to be proficient in the part they are responsible for. In fact, this is not conducive to personal development. One reason is that my responsibility is generally narrow, and there may not be much room for learning and improvement. Another reason is that it is difficult to design an overall excellent program.

"Closed-loop learning" is different. It does this: to understand the realization of the entire function or business process, which modules and systems are involved, what functions each module and system is mainly responsible for, what technologies are involved, and what is the performance? What's the point. Take an example of an HTTP business I made: starting from the user clicking a url, going through browser -> network -> CDN -> Nginx -> PHP -> MySQL -> PHP -> Nginx -> network -> browsing The device is finally presented to the user. When I develop, I only use PHP to develop, but it is not limited to PHP itself. Closed-loop learning requires understanding and familiarity with every link in the whole process, so that you can learn "browser, Nginx, CDN, MySQL" "Wait a lot of knowledge.

Some friends may ask: what is the use of doing this? In fact, it is very useful. One is that when there is a problem, with the knowledge and skills acquired by closed-loop learning, you will know where there may be problems and how to deal with them; It is not limited to PHP itself. Maybe a certain function Nginx or CDN or front-end can do better, but it is very lame to use PHP.

What skills and accomplishments should a good programmer have?

The first is "quick learning ability". This is not to say that you must learn all kinds of new technologies quickly, but to be able to learn quickly when the need arises. When many people start to learn new technologies and skills, they start to write samples, demos, and look at the source code. I think this is not a good method, and it is time-consuming and the effect is not obvious.

I will share with you my 4W2H fast learning method. When I learn new technologies, I follow these steps to understand:

1) What problems can this technology solve (why)

2) Which scenarios are more suitable for application (where + when)

3) This technology is similar to which knowledge or skill I have mastered, what are the differences, what are the characteristics, what are the advantages and disadvantages (what)

4) After understanding the previous problems, I will start to try to write Demo, or go further to apply (How to use)

5) If I am interested or the implementation is very impressive, I will study the principle and mechanism, look at the source code, etc. (How it implements)

The second is "good comprehension". Programmers need to translate requirements expressed in natural language by product personnel or users into programming language. One of the characteristics of natural language is that it is popular but not rigorous, while programming language must be very rigorous. If you don't have a good understanding of the requirements put forward by product personnel or users, no matter how beautiful the programming language is and how high the skills are, the final product will still be a product that does not meet the requirements.

I remember a joke about "beauty": people's reaction after hearing "beauty" is to think of "angel face, devil figure, childish face and big breasts", while pig's reaction after hearing "beauty" is "big white Ukrainian pig", the cat listens The reaction to "Beauty" is "Persian cat with golden smooth fur". If the programmer gave the cat a beauty with an "angel face, devil figure, childish face and big breasts", the cat would definitely find it ugly.

The third is "continuous learning". The knowledge and skills of design in the field of software development are overwhelming. In terms of breadth, there are operating systems, databases, programming languages, networks, design, etc., and there are dozens of programming languages; in terms of depth, operating systems, databases, programming languages, etc. can all be learned in depth. Whether you are engaged in business development that requires higher skill breadth, or are engaged in the development of special systems that require higher skill depth, you need continuous learning, so as to continuously improve your abilities.

The fourth is "happy to share". If you only look at the ability of individuals to complete the work, there may indeed be many programmers who do not like to share but are really powerful. But I think that a really good programmer must be good in addition to himself, but also can make other people become good, or can contribute to excellent open source projects to reduce the duplication of work for others. There are many ways to share, you can do training for company personnel, you can write blogs, you can contribute to open source projects, etc.

How do programmers "squeeze" out time to improve themselves or improve themselves technically?

The key lies in the word "squeeze", which is actually "use of time fragments", and 10 minutes is enough. Take me as an example recently and talk about how I squeeze time now, and everyone may understand it.

7:40 ~ 8:00: After delivering the child, there will be 20 minutes between going out and going to the subway, read the chapter "Out of Control"

08:20 ~ 09:00: Take a book on the subway, you can read about one chapter, and you can read two chapters for easy-to-read books

09:30 ~09:50: Read technical PDFs, such as JQuery recently, you can read about a chapter, don’t worry, 20 minutes a day will not affect your work at all

20:20 ~ 21:00: Same as the morning subway

15 minutes before going to bed: read a book for 15 minutes, it took about 2 months to finish reading "Romance of the Three Kingdoms"

In this way, I can read about 2 hours a day, and I read about 23 books in the first half of this year.

A few tips for young programmers

Build your toolbox. If a worker wants to do a good job, he must first sharpen his tools. Every developer should have a Swiss Army Knife of their own, tools that can save you valuable time and help you better organize your personal knowledge base in your long career. Give two examples

An efficient development environment

An information collector and a notebook

Efficient development environment. We can start with the editor, there are IDE vs Text Editor, Vim vs Emacs, Sublime vs Atom, so how to choose? Before making a choice, let's think about our goals. We hope this is a long-term investment, this editor can be used for a long time, and in the process of continuous polishing, it can fully suit your habits and maximize editing efficiency. If the programmer is a knight, the editor is the sword in his hand.

Information collector and notebook. The former is used to collect information generated by others, while the latter is used to collect information generated by oneself. A simple example of the former is the browser's Bookmark. You need to be able to archive a useful set of information at any time and quickly find it at some point in the future. The most intuitive example of the latter is the notebook that comes with Mac OS or iOS, where the purpose is to record your own thoughts anytime, anywhere. Essentially, you need a set of useful tools for your knowledge management (Knowledge management), which can also be said to be an external backup of your knowledge and ideas. I personally use Evernote for information collection and note-taking at the same time. If you have a good process, you can also use two tools to do these two things separately. But I recommend that you spend enough time thinking about how to organize your personal knowledge base.

The above are just two typical examples. What you need to do is to find those tasks that you will be working on for a long time (often not changing with technology or company), and adjust the tools needed to complete them to the best. As another example, I pay attention to the keyboards of the programmers around me. Only a small number of programmers will buy high-end electrostatic capacitive keyboards, such as HHKB. In my opinion, this is obviously a worthwhile investment. Programmers need to deal with keyboards for most of their work. A comfortable typing experience is very profitable, not to mention such high-quality keyboards. Are very durable.

Broaden your horizons and build your technical system

First of all, you have to set a goal for yourself, just like a company will set its Vision.

The target needs to be big enough so you can see more of the scenery.

The goal should be what kind of problem to solve, not what kind of technology you are proficient in. Technology is a means, not an end.

For example, the goal of "I want to be an iOS developer" is far less meaningful than "I want to be an expert in front-end application development." In the former, you may delve into the various tricks and tricks in the iOS framework, while in the latter, you will start to pay attention to visual and interaction design, and study the differences and common trends between platforms. Obviously, the latter is more conducive to your personal development.

In the end I suggest that every programmer should run their own product, it can be an app, a website or an open source software. Unless you are an early employee of a startup, you may not have the opportunity to put all the techniques or ideas you have learned into practice. There are many people who want to become a full stack engineer, and the fastest shortcut is to build a product of your own. Any designer will carefully craft their own Portfolio, but most programmers don't. When evaluating a programmer's Coding ability, I will see if there are outstanding projects on his Github. Unfortunately, the Github of most programmers in China is empty, or there are only some very simple programs. I recommend everyone to run their own projects on Github, which will not only improve your reputation, but also be very helpful for your future job search. When you complain about being asked all kinds of nonsensical procedural questions during the job interview, have you ever thought that the interviewer is also helpless, because he has no other way to know your coding ability? If every programmer has their own work, I think the interview of programmers will be much easier.

Emphasis on the development of communication skills

When asked "What's the biggest difference you've learned between Junior Developer and Senior Developer", my most natural response is communication and documentation. Communication includes communication within the programmer team, communication with other teams, communication with the Manager, and so on. I don't think I'm capable of making these questions very general, but I can give one piece of advice: learn to talk to your Manager first and let him teach you the rest. Many companies will set up a 1:1 between Manager and team members. An efficient 1:1 should have team members leading most of the time. This requires you to spend enough time to think about the question to ask before 1:1, and it is best to send it to the Manager 1 day in advance to give him a chance to think about the answer. A lot of people don't take this seriously, or ask very specific questions rather than some open-ended questions, which makes it difficult for you to learn from your manager. If you get to know how to use 1:1 time, it will likely become your highest ROI activity per hour at work.

Accumulate your network

Everyone understands the importance of networking, but actually doing it is not easy. Participating in some offline conferences or events may be one of the most direct ways to expand your network. Too bad most people seem to just go home after a tech talk. Of course, this is also related to the schedule of many events. The lecture time is too full, the tea break time is short, and sometimes the guests are late or have no time control, so the tea break is simply cancelled. In fact, meeting one or two like-minded people is far more valuable than listening to tech talks. Next time you go to such a meeting, you might as well set a goal for yourself, such as adding at least two WeChat peers. It may take more time to maintain your connections after work, so grab a coffee with your friends after work or on weekends!

In addition, I think everyone needs a career mentor. He can be the mentor or manager of your first job, or it can be other seniors you know. You need to maintain a very long-term relationship, not just with one company, but ideally throughout your career. Whenever you are in doubt, you can ask for his advice. I think this will be your most valuable network asset.

Find a platform to use your talents

The last and most important step is finding the right company for you. There are three aspects to evaluating a company as a job seeker

The company's development prospects (for large companies, look at the development prospects of the department)

the team you will be joining

Salary and benefits

So when interviewing for a company, you need to realize that the interview is a two-way street, and while the company is interviewing you, you are also interviewing the company. Before the interview, you should do your homework about the company and prepare quality questions, such as pointing out problems in the product, asking about the development process or how to do performance reviews. Then you can also check whether your interviewer is qualified.

Every time you choose a company, you should take into account the above three aspects, but at different stages of your career, the focus is different. For example, when you are just working, it is most important to join a good team, they can teach you a lot and improve your ability. After working for 5 years, you need a platform to display your talents and reflect your personal value. The importance of the company's development prospects is rapidly increasing. When you have made some achievements and proved your worth, and gradually enter the harvest period, you will be qualified to ask the company for the price. On the other hand, team strength also has a great impact on a company's prospects.

To a classmate who just graduated and entered the workplace, a question that has been asked countless times in recent years, "Is my first job going to a startup company or a large company?" My answer is still "The best thing to do is to join a good team." important".

In some well-known large companies, the quality of the team is guaranteed to a certain extent, but startups are not, and the quality of the team is uneven, so as I said earlier, you need to interview the team and make your own judgment. But aside from the team factor, I would like to mention a few benefits of graduates going to startups. First of all, during the period of time after graduation, the economic pressure is low, and it is the most free and risk-tolerant period, and this period is often not long, so you should grasp this prime time to go to a startup company. Second, after all students enter large companies, they will take up junior positions, which are a continuation of school learning to some extent. They are well-organized, but lack independence and innovation, which is what most students in China lack. This ability can be quickly exercised in a startup company, while in a large company you may have to wait until you are promoted to a mid-level position before you have the opportunity. Personal point of view, only for reference.

The first 3 years of entering the workplace are particularly important for future development. I hope this article can be helpful to young programmers

Java developers can look here.

For students who have worked for 1 to 2 years. Students in this part of the time period already have a deeper understanding of Java.

For the students who have been working for 2 to 3 years, some students feel that they are already very good at this time, so they can't help but start to relax slowly.

Students who have worked for 3 to 4 years at this stage are already very difficult to improve, and the learning at this stage is often more diverse.

Students who have worked for 4 to 5 years have experienced the previous year and believe that you already have your own insights in the field you are studying. At this time, you should have encountered a technical bottleneck.

You can join the group to learn: 697579751 JAVA advanced development to communicate and learn together, help you improve yourself, picture bottlenecks, and keep up with the pace of the times.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325176051&siteId=291194637