What you choose is not a major, but a class (reproduced)



Original link: http://atongyeye.iteye.com/blog/2342806

What I chose four years ago was not a major, but a class.
I want to say, yes, your income is not determined by your ability, but by the needs of society, and now is the best era of the Internet.
And I boldly predict that programming ability will be the same as English, and it will be a basic skill for students in the future.

Now the first-line Internet companies are recruiting fresh graduates of CS-related majors in 985 colleges and universities. Generally, the package price of cabbage is above 16*16. Think about how many majors it is, and if you are in the top 5%, you will not be able to reach this number even after ten years of work. Therefore, when I chose a major, I almost really chose a class.

After talking nonsense, just like the upgrade of online games to fight monsters, I, an old bird who has been rolling and climbing for more than 6 years, will share the programmer's leveling route that I think is correct.

Let's talk about goals first.
Except for self-employment, programmers who do not aim to enter first-line Internet companies are all performances without ambition!
Except for the real estate bigwigs, the rest of Forbes' top ten are basically Internet bigwigs. There is no traditional IT bigwig. Based on the central idea of ​​aligning everything with Grandpa Mao, let's go to the Internet.
Generally speaking, the treatment of Internet companies is more than 50% better than that of traditional IT companies, and Internet companies are more geek-off-peak travel, flexible working hours, no punch-in, no endless meetings, relatively simple relationship with colleagues, technological innovation Quick, can fully study the technology.

Let's talk about the
leveling process written in the previous few sentences -
1. For any technology - official documents, demos, and official communities are the best tutorials.
2. github, google and stackoverflow are the best teachers.
3. Good things are open source, which is determined by the genes of the Internet.
(For this, I adore my idol, the founder of Linux and git - Linus Torvalds.) Software is like SEX; it's better when it's FREE. Linus Torvalds.
I really think those commercial companies that don't have open source products are awesome Not open source? To tell you the truth, that's because the source code of their products is so bad that no one can use it if it's open source.

The real leveling strategy
First , give up the win platform as a productivity tool, go to Linux/MacOS, and be familiar with the common things under Linux Order.
Second, to get started with scripting languages, python or ruby ​​is recommended. They can free you from the fear of programming and develop useful small programs within a week.
Third, learn Web basics (HTML5/CSS3/ES6/Angularjs/Vue.js/React.js)
Fourth, learn C language and operating system calls (at this point, the door to the computer world is truly opened to you)
Fifth, learn Java. Java is the most powerful and most used engineering language. The .net platform is worse than shit. Java is clunky though, and the higher you get, the less you like it. But for complex business processing, it is the most mature and has the most solutions. Learn java well, become a senior java engineer, and achieve the average income of bxj without any difficulty.
Sixth, learn the database. MySQL, pgsql and mongodb (relational databases have no future, the future is json)
Seventh, learn to learn mainstream frameworks, learn business design and architecture, learn performance tuning, learn sustainable integration, etc., and become an architect.

In addition, apart from business architecture, senior architects must be business experts and senior business consultants in a certain field.

As for why I suggest linux C Java this mainline
Because they are all excellent technologies that have been popular for more than 20 years, have been tested by various mature projects and products and projects, are widely used in a large area, and will continue to be popular. I am a person with technical anxiety. While keeping up with new technologies and new trends, this main line of software development must not be abandoned.

The last one is my current technology stack. Probably this level can be regarded as a senior architect of the Java stack.
Java
Spring, SpringMVC, Restful Api, Webservice, JBPM, Activiti, ActiveMQ, RocketMQ, Netty, Dubbo, Jenkins, Jmeter, Solr, ElasticSearch , Hadoop, Spark
Web
jQuery, Bootstrap, Angularjs, Vue.js, React.js
Other Linux, Maven, Tomcat, Nginx, Keepalived, Apache, Memcached, Redis, MongoDB, Mysql, Docker, C, Python ,
Golang
https, ssl related, I also delved deeper.

Advice on traditional it and Internet, java language, database.

2 Traditional it is being eroded by WeChat and Alipay. Alipay pays water and electricity, WeChat checks goods customs clearance, applies for Hong Kong and Macao passes, applies for passports, and checks traffic violations, etc. Ali Ding Ding is an enterprise-level OA, etc., and according to the trend of these two giants, the road ahead for traditional IT will become narrower and narrower.

4,5 The most powerful thing about Java is its ecology. This .net is too far behind. For big data, is there anything else like solr and ES that can be used to drive? Is there a continuous integration tool like jenkins that can be used directly? Is there a distributed stress testing tool like jmeter?
For the java language, I want to say a little more, I said it earlier, I don't like it in pure language.
assert(simple > clever);
so I'm actually more of a fan of python and golang.
But the accumulation of java in the Internet is too deep (of course, traditional it is also the deepest).


After talking about the business logic of the web, the business logic can be designed beautifully. For example, your creative community can be decoupled and integrated into a blog system, a forum system, a picture (file) storage system, a comment system, a user system, and so on.
Each system uses restful/webservice/private protocol/asynchronous queue to communicate with each other. If a module of a system becomes a bottleneck, add a corresponding machine/container to this module. After there are more users, the picture system can't support it, and the load greatly exceeds other systems, so you can add machines to the picture system. In this regard, docker is a great container tool.
After a system is split into modules that are small enough and good enough, each module becomes a separate service. If a depends on b, then a directly calls the service interface of b. If there are many modules in a system, you call me and I call you, and the calling relationship will become very complicated and become a network. At this time, service governance needs to be introduced, and a registration center is needed to register each service itself. In terms of java, Alibaba has a dubbo framework in this area, an asynchronous and non-blocking nio network framework based on netty. I don't know much about python yet.
Let's talk about business cache. The design of business cache can best reflect a programmer's ability to understand and refine requirements, control business, aop-based interception mechanism, which methods should use the cache, when should the cache be refreshed, and how to do it under distributed cache. To the synchronization of data, these are the subtleties.
Speaking of the database level, since mongodb is selected, read and write separation, and indexing will not be discussed. How to achieve business-based requests, less query libraries, and return part of json are also areas that should be paid special attention to in tuning. If the amount of data increases, data sharding can be considered. In this regard, hadoop is good.
Let's talk about the operating system level, linux kernel-level tuning, the number of http connections, the maximum number of open files, etc., there are too many places that can be optimized.

This is the biggest advantage of the Java stack. It is mature, has few pits, builds a team quickly, has low recruitment costs, and draws a good frame, so you can use a lot of pig teammates.

6 The core of oracle is the legal department (non-black). A company I have worked with used to be a customer of oracle. I really feel sorry for them when I look at their operation and maintenance team. The cluster of several minicomputers basically hangs every night. Once, and then the oracle technical support over there charges by the hour from boarding the plane to returning to the plane after processing, and will fly over in a few days to deal with it. Later, mysql was migrated as a whole, and Ali's team contributed a lot to the mysql community. Based on the community experience, the project was stable after that.
I have always thought that Sun had a vision at the beginning, and he must have acquired oracle instead of being acquired by oracle.
Let's talk about the nosql database based on json format. I started to contact mongodb in 12 years. I should be very experienced in this area, and I have stepped on a lot of pits. At that time, I participated in a technology sharing meeting in the industry, and I gave a speech. I said a word at the beginning, I was very opposed to ormapping , this kind of mapping relationship is not suitable for business development at all. If you think about adding a field, you need to change the database table structure, persistent class, and view layer layer by layer. Are you not tired? JSON-based nosql does not have this problem. (At that time, most programmers' understanding of nosql was still in the fact that single-table query was much faster than relational database.)
I asked them at that time, when you design the database table structure, you will reserve some more fields to deal with future business development? Most of them say they do. And based on json without table structure, these are not a thing.
Sure enough, it didn't take long for mainstream relational databases to support json storage. (So ​​the paradigm theory of relational databases seems to be a big joke now)

9 The best IDE is not vs, but the jetbrains family bucket. (No kidding)

Jobs Let’s talk about finding a job
first .
1. I always think that the first job can basically determine your upper limit. (If you go to a not-so-good company, the gap between you and your classmates will be very large in the first 2 years. And it will greatly affect your future job-hopping. A good company depends on your education and work background.)
2. Talk to you about money If you are a good company, don’t go if you draw cakes, talk about ideals, and talk about the future development of the company. (Don't have a hard time with money, the money you get is money)
3. Options are shit. (The Internet industry has a lot of flow. This is just a big cake drawn by the company to keep you, and when you can exercise your rights, I don’t know the year of the monkey.)
4. All treatment is subject to the contract in black and white, and the hr and the boss verbally agree are required to be written into the contract.

Let's talk about development at work.
I always thought that programmers should be three heads and six arms.
Understand and refine requirements by yourself, design by yourself, code by yourself, test by yourself, and operate and maintain by yourself.
I really like the phrase - eat your own dog food!
Excellent programmers have to eat their own dog food. Only by understanding the difficulty of testing can programmers understand how to write testable software, how to automate testing and test systems; only when they really operate and maintain their own systems can programmers know how to write logs in the program, Do monitoring, do statistics.
And if you have always been a programmer who can't control the business, refine the requirements, and implement it efficiently, you may only be a low-level functional programmer for the rest of your life according to the product manager's opinion. They should all be burned!)

And the details of the work
1. Make the function small enough and good enough. Don't let one block of code do several things. (Write programs that do one thing and do it well.)
2. Let each small enough function work together. (Write programs to work together.)
3. Design the interface instead of implementing it (object-oriented programming is a big trick, the correct one should be interface-oriented programming.)
4. Think more about the efficiency of program execution, Use cache.
5. Insist on code review.
6. Adhere to English as the mother tongue. Reject the junk culture such as Baidu and CSDN. Embrace github, google and stackoverflow.
7. Stay away from all so-called business training. (As mentioned earlier, official documents, demos, and official communities are the best tutorials)

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326565640&siteId=291194637