In recent years , It's been a lot . From Xiaobai to intermediate ( There is a game called Chinese chess in the mobile phone , In it, the computer level in the game is divided into small white , green hand , Novice , introduction , primary , intermediate , senior , master , Super Master , Programming, I'm going to distinguish between them ).
What the school taught me was from Xiaobai to entry ( Of course, there are also some academic bullies who directly skip these to become senior or even master level , For most ordinary people, it's from Xiaobai to entry ).
But everyone's process from Xiaobai to entry is different . Some people are talented and intelligent , Others have a solid foundation ( If you're good at math and chemistry , So it's easy to learn programming ), Others work hard ( I think I belong to this category ).
And then my first job after graduation made me a junior programmer , After years of training , To be an intermediate programmer .
Why ” It's kind of ” instead of ” yes ”?
By age , One year junior , Three years intermediate , Five year senior . So I've been there for three years , It happens to be intermediate .
Three years of intermediate , Let me have the ability to develop websites independently .
What are the capabilities of developing websites independently ?
* Requirements understanding , requirement analysis , Data modeling .
* Front and rear development capability ( Include problem solving in the development process ).
* Operation and maintenance capacity ( Write a project to deploy to Linux The server , Build various software environments and install various software , Monitoring server (CPU, Memory , Hard disk , Whether the software runs normally ), Online troubleshooting, etc ).
* Test capability ( functional testing , performance testing ( Piezometry )).
* Certain project management ability .
* Technology selection and framework building capacity .
* Secondary development capability .
* “ copy ” ability .
But three years of intermediate didn't make me feel so happy , Because I have a lot to learn , It's far from what I think ” intermediate ”.
But one thing I'm glad about , Because I've been growing all these three years . Did not repeat one year's work experience for three years .
In the past three years , It taught me a lot , It also makes me think a lot , So there is today's article .
Back to the point , As Java programmer , I think there are two general abilities , These two general capabilities , Let's talk about it ?
Someone will say :
* Coding ability ( spot ( algorithm ), Line ( Design pattern , Organization code ), Noodles ( Framework and learning , Understanding and Application ), body ( operating system , computer network , Compilation principle, etc ))
* Business capability ( Ability to understand needs or problems , Ability to communicate and coordinate resources , Ability to estimate and plan , Research and problem solving ability )
Some people will say :
* learning ability
* Problem solving ability
* communication skills
Two general capabilities I'm talking about today , Not communication , It's not learning , It's not about solving problems . But deep understanding Java And database .
Because in my opinion, learning ability , Problem solving ability , Communication skills , It's a person, whether he works or goes to school , Required capabilities ( It's like dressing up and eating , All the time we're not learning , Not only work but also life , All the time, we're not solving problems , Not only work but also life , All the time, we're not communicating , Not only work but also life ).
If a person 22 Year old work ( Four years at University ), according to 60 Retirement standard at , A long career 38 year .
In addition, as IT In terms of , The domestic environment , Most programmers can't be programmers all their lives ( Someone's been working for a few years. They can't change careers , Someone goes to the management , Someone continues to work on Technology ).
And programmers don't have to 60 Retired at , perhaps 50 Years old or 40 Multi year old . How about that , at least 20 year .
20 Year time , The world will change dramatically . It's hard for people to adapt to society without learning .
The purpose of learning can be understood in two aspects , One is not want to be eliminated by the world , On the other hand, not being fired ( Work is for survival , It's also for life , But the boss hired you to solve problems, not create them ).
Society is a collection of people living together through various social relations ( So communication is essential ).
Why Java And database is Java General capabilities of programmers ?
My reasons are as follows :
first , Mastery and deep understanding of a programming language determine how far you can go .
second , Any business application needs storage , And the database is the most , And among them SQL Ability is the foundation , And the most important one .
Why can mastering and understanding a programming language determine how far you can go ?
first , When you master a programming language , Next, you learn other programming languages , You will find it very easy ( Because programming languages have a lot in common ).
second , It's also very easy to learn and use the programming language Framework .
So what's the hardest ? It's understanding , Understand the programming language .
Understanding includes two aspects , One is shallow , The other is depth .
As a Java programmer , no kidding , I'm right Java So far, it's a shallow understanding, not a deep one ( For depth , I think it is necessary to understand the source code ).
At the same time, I think many people are in a shallow understanding just like me . Shallow understanding does not affect the actual development work ( But sometimes it becomes the cause of production downtime or unexpected problems , I used to have a code problem that messed up the production environment ), It does not affect the learning of any framework or other .
actually , I hate shallow . Because superficiality is a very dangerous thing . The reasons are as follows :
* The program is composed of algorithm and data structure , And you don't have to use algorithms in developing software , But data structure is essential , Such as string , Linked list , array , Hash , heap , Stack , Trees, etc
It seems that the code is OK , But if you don't understand the corresponding method ( source code ), There may be problems ( One of the interviewers , It's also Java Most used in development , as equals and ==, If you don't understand what you're writing, something goes wrong )
Data will eventually be stored in the database , But it will also be shown in the database , No matter you are XML still JSON, You need data structures (Java Related as String,Array,List,ArrayList,LinkedList,Vector,Map,HashMap,Set etc. ,Java Programmers must be familiar )
Sometimes it's not because there are too many users , It's a problem with the code ( It's not just about logic , There is also a problem in the way of writing . for instance , When the start-up company develops the intelligent hotel project , There was a period of frequent downtime , I'll write a temporary shell Script monitoring , If down , Automatic restart , In order to ensure the use , That's all it has to do , Finally, one day, we'll check it carefully , Discovery is a code problem , Code problems reflect more than logic , It's also a deep understanding of the programming language )
Let's extend it , Back to personal career :
Shallow is equal to not deep , No depth means ordinary and mediocre , Commonness and mediocrity mean strong substitutability . Strong substitutability means easy to replace . That explains why programmers have a midlife crisis ( It's not just about programmers , Other industries are also common ).
So how can we avoid shallowness and better depth ?
My mentor , Gave me a good idea , Here I share with you .
Start by reading some of your own common code ( as String,ArrayList,HashMap,FastJSON Etc ). Because often , Avoid strangeness , At the same time, it's more meaningful because it's often read . At the same time, you can also refer to the relevant high-quality blogs , Let's see how the predecessors understand it , But before I read what my predecessors wrote , I have to have my own opinion ( Because it means you think about it ).
Next, I will write related source code understanding articles . The purpose of writing is also to hope that they are no longer one ”API Bricklayer ( I don't need a cannon here )”.
Maybe some readers are confused , Why is the database listed by me Java One of the two general abilities of a programmer ?
with MySQL take as an example , I'm interested in INNODB and MyISAM( Just one InNODB No real understanding ), Index principle , Views and triggers , Stored procedures and cursors, etc , It's just understanding, not really understanding .
Even though I don't understand , Can also carry out simple business normally , More complex business , Complex business CRUD. No impact on business development . But I don't really understand , Will become a real senior Java Bottleneck of Development Engineer , When it's time, even when it's time 5 year , Become a senior R & D Engineer , But the strength has not reached , Wait until the interview , deny all knowledge of an event , In the end, the interviewer may say : Five years of working experience , I don't even know , Why do you want such a high salary ?
A leader of the company before me T Brother once told me , In depth Java And database for a Java Programmers are very important , Because no matter which company you go to , Both are required , Not so-called business capabilities
( Each company's technology stack is not very different , There is a big difference in business , But for programmers , Business knowledge does not necessarily require you to be proficient 100%, At most 20%~30% about , Business knowledge is usually not very mobile , Let's say , You can go from outsourcing to self-employed companies or start-ups to other industries , There's no limit , Yes, of course , Financial aspect may require higher business knowledge ).
Actually, I want to come here carefully , Developed over the years CRM,OA,ERP,CMS, Smart hotels and locks , Internet of things cloud platform , online retailers , Programming platform , Education platform and other projects ( It also includes secondary development ), Exclude programming languages ( Because it's useful to Node.js,Python,PHP etc. ), Basically, databases are common , And it's all used MySQL. Carefully from another point of view , A project from 0 reach 1, Finally put into operation , Include high availability , High concurrency , High performance, etc , Are closely related to the database , Because it tests whether your database design is reasonable , A database with unreasonable design , Unlimited cost ( Server input , To ensure ” Three highs ”, The easiest way is to add machines , Keep adding machines , But if the design is reasonable , Less machines , Less means lower costs , Of course, some companies are profitable , Good profit , It means that these costs can not be ignored ).
Look back , Even the database is worth studying and mastering ?
with MySQL take as an example , My first push INNODB. because INNODB Storage engines are the most used .
At the same time, it's very important , That is SQL ability ( Including the ability to write complex SQL, optimization SQL, Know how to index, etc ). Basically speaking , If your SQL Good ability , Then the work efficiency and work quality will go up to a higher level or several higher levels . with Java Three tier architecture of , Data access layer , Business logic layer , View layer ( also called UI layer ), The data access layer will test your SQL ability , Business logic layer depends on data access layer (SQL ability ), If your data access layer is not well written, there is a problem , Then it will be affected from the bottom up , I've learned a lot about it ( Once suffered from it ).
last , My experience over the years tells me Java Two common skills of programmers are deep understanding Java And database ( Many times , I hope you don't give up , Pursuing so-called new technology , Technology is changing with each passing day , And the bottom is the same , Hold on to this , It's enough to deal with all kinds of changes ). Because these are the general abilities you need no matter which company you go to , On the contrary, I don't think the framework is that important , And it's not hard to use a frame skillfully . Any programming language and framework , The most difficult is to understand deeply rather than simply use ( not only Java, Other languages are just as common , Deep understanding of a programming language and database , You can be invincible no matter where you go ).