Author: Linqing Zhong, 1990, graduated from the Kunming Institute of Technology computer software professional, after graduation to complete the Master of Software Engineering at Nanjing University study in 1999, is now at a CNPC subsidiary of industry software R & D center, because many read online Have experienced software developers wrote a good post, it is ready to rise, and make a strong situation.
Suppose you are an undergraduate student who graduated from a software professional. How to cultivate a programmer with a higher occupational level, this article tries to summarize the meaning of the auto development work, hoping to become a professional programmer The people have helpful, and take this opportunity to thank the primary Kunming Institute of Technology and Teacher Zhang Huai Ning, a teacher, especially for my master's tutor, and Professor Zheng Guoliang, a computer department of Nanjing University.
Note: This post is a speech, which is the temper. If you look at the gas, please forgive me, let go.
The program is a series of operational sequences in steps, which has many levels, such as minimum microprogram, secondary and low assembler, advanced various programming language programs, the most advanced scripting language program, maybe I am not column But it doesn't matter, what I want to say is whether the level of the program is the logical sequence of operation. Most systems and applications are built on advanced programming languages, such as C, C , C #, Fortran, Bisic, Java, etc., let us only pay attention to this level of programming skills. So if a programmer is not high, he will never be a programmer with qualified occupational level. We discuss all aspects of programming ability, eventually to maximize and implement a program. The logical ability of the staff.
First, master the basic knowledge: the continued accumulation of the cold window in the 16th year
From the age of 7, after 16 years of study, after graduating from the software professional, you must complete the following professional courses: computer composition, operating system principle, assembly language, data structure, compilation principle, database principle, Software Engineering, Structural Design Language (Pascal, C), Object-oriented Design Language (C , C #), Computer Network, etc., you'd better understand some algorithm analysis, distributed system, computer graphics, form logic, artificial intelligence Principles, software design patterns, software architecture / frameworks, etc. For 16 years, in addition to knowledge, in addition to knowledge, it is more important to form the best learning methods and working methods. These are the basic capabilities of your programmers, don't be affected by the legend of computers' geek, but it is a small probability event, and these weirders have not read the software undergraduate and graduate students, and often learn from school. Most professional courses are likely to understand the essence of these courses better than students in school, and their working methods and way of thinking are particularly efficient, but universality, they can learn from, should not imitate. Ok, so now you only need to ask yourself, are those courses and knowledge to learn and master it? If so, it is ready to practice.
Second, in practice: becoming a high level of CODER
Ok, you graduated, you have a good job in school, and I also found a professional pair of work. You want to show our grand map, but don't worry, your wings are not hard enough, don't believe us, let's take a look.
Typically, you will use a unit / company fixed operating system and programming language development environment, such as Windows, UNIX, Linux, etc., such as VC, VB, PB, Delph, Java, MotiF / XWindow, Qt, OpenGL, OpenInventor and other programming languages and development environments, we are collectively referred to as a development environment later. As far as the knowledge of the development environment of the school is concerned, it is not small if the gap you need is not small. When a operating system and programming language environment become your rice bowl, it should not use the course / certification. Eyes and requirements such as exams to evaluate your ability, even if you can test 100 points. You need to go deep into all the contents of the various development manuals of the operating system and programming language environment, you will say that most of you can not use it, in fact, you are right and wrong, right, is from the perspective of use, You don't use most of the development manual, such as a huge VC development class library and complex development environment, you can use 1/10 or 1/5 of the total number of total numbers in the actual work, no place lies in The part you use is not isolated. They are part of the entire system. Only with a more complete understanding of the entire system, they can have their own hands, and you can use the part you want to use. You will prelimately In this development environment, Coding career standards (still not enough for programmers), and this is just beginning. How to truly master a comprehensive knowledge of the development environment, the most primitive method is to read development guides / tutorials, reference manuals, general, when you learn to develop guidelines / tutorials, if you are a serious person, you will complete 5 / 10 ~ 7/10 Learning and practice, if you want to be a professional player, you should complete the learning and practice of more than 9/10 content. The reference manual is different, most of the so-called "programmers" are only used to flip over, this is too far, you should be like reading a guide / tutorial, every link must be read, such as VC, reference manual Each class, each function of the class, is read a few times. They are often a small guy to be used together. When you start, you will have no hair, upset, no tight, and one hand If you develop a comprehensive environmental installation, they often have a developer's Demo example, you entered another realm, you will pay attention to the specific technology in Demo, and then you found these demo processes written It's still good, simple, reasonable, if you really use your heart, you can find some individual DEMO is the best, what the program logic structure it shows is that you can't design, you are now more concerned about its program design Architecture, is paid to your original purpose (some kind of technical / skill), at this time, you started the shift from a CODER to a programmer, you will don't help but look at the developer Source programs, such as .h and .cpp, usually you will find all the .h programs under the incrude path, you know, wow! A lot of Dongdong did not mention it in the reference manual, you have to learn too much, there is no time to take care of other hobby, now I know why the programmer is the occupation of the young people, you have enough time. Talent, even if your IQ has 160.
If you have come to this step, in the team you work, it is already often ask you to ask for technical issues. Some people often ask you to help Debug, you are already recognized "master", don't be proud, because you are still a CODER, Why do you think, you think, you have learned about the various skills in this development environment, know how a CODER uses these things, but can you design something to CODER? Oh ..., you think about it, it may not be too good. Yes, that is, this is the programmer of a small my realm, essence is a CODER, of course, is a high-level CODER, but you need to further board the room to become a real programmer.
Let's continue, usually you start with a programming environment, assuming that you have been more proficient in Windows with VC development software, at this time you will face a small one and a big challenge in terms of technology and skills. The first small challenge is if the company's / unit has changed the development environment, such as developing the QT interactive language tool under Linux, you just put the procedure of the VC in front, because of the learning process of VC tools In the objective development environment, there are too many similar aspects, which should be faster. Be careful, at this time, the first temptation door is open, because you feel good, look! This is so fast, I will have a new development environment so much. You have begun to pay attention to other similar environments that have not been used for the time being, such as VB, Delph, Java, such as hunger and thirst, to grasp a variety of development tools, prove your own learning ability. And value, but you forgot a little, you are still a CODER, just a CODER that can be programmed in a lot of development environments, just like you live in China, so proficient in Chinese, you need you to master English, then You will come, put Russian, Japanese, Arabic, Latin, and so on, I can only say, I can say, a bit BT. You forgot that you are a professional person. In the same class, you need to learn in your work. Too much CODER likes to compare and show off yourself. You will have several development tools. Don't believe you look at the job job in the recruitment. The book knows, Sigh! Most people in them will always stay at this level, the heart is temperament, and they will not be a real programmer. Summary, in fact, you need to confuse your ability to master new development environments, rather than repeating yourself over and over again. The second big challenge is that you understand that only the VC is not enough. You find that you will be a bit shallow, there are many Dongdong you will use but you don't understand, many aspects support VC programming knowledge You have not mastered, such as operating system Source, network protocol knowledge, the basic knowledge of Windows registry, process and thread, hardware driver knowledge, ActiveX, Windows huge API, is another, etc., these basic knowledge learning and mastery can spend In a lot of time, you feel too late to feel too much, because you have probably have a lot of customs, so you don't have to mention the IT industry every day, I don't know how much new things are released, kao, forever Can't keep up, more far more. Hey! Don't be discouraged, you can't forget that you are a professional person. Since you have no chance to use in your work, then do you want to learn? What to learn, mostly predict what is going on immediately, let's learn something first, you have to know no one is true, unless you are God, but if you are still a resistance This article, you are definitely a personal.
OK, in the past three or five years, you have experienced the above process, withdrawing temptation and test, finally understanding a truth: you want is a strong learning knowledge, a depth of knowledge of some software knowledge / skill Excellent, a depth of the root that is touched, not the type and quantity of the skills that have been mastered. At this time, no matter how many kinds of skills you won't use, you are useless, you are useless, you have only contempt for his level. Through a few years of learning and work, remember the most important point, always most important: to learn IT knowledge ability, a programmer must keep high-intensity learning, ask yourself, have Without this confidence? Don't tell yourself with vanity, if you don't, then you don't have to spend your precious time, thank you for your stay. Now I suggest you close this article, look at younger, comprehensively Go! Third, pay attention to logic: becoming an occupational programmer
Ok, let's get a little more, you have to be a professional programmer, let us continue to complete this task! We mentioned the previous section. (Some type of related technology / skill) focuses on ", in fact, you are paying attention to this Demo program author's thinking logic, the essence of all procedures is logical. Technologies have been well grasped, but only if the logic ability is completed, you can become an occupational programmer. Playing a bit, you will be eighteen martial arts, the knife stick stick is very proficient, but it is not enough, so it will never have battlefields, this strength is logical ability for programmers (its essence is a person's mathematics cultivation, Note, not mathematical knowledge). The logic ability is also gradually improved. You must be programmed with intuitive logic capabilities. How do you want to make it, don't change it, improve your logic capabilities in improvement, from intuitive logic ability to abstract logic capabilities This is normal. Speaking in advance, reaching the high level of logical ability, its performance is to describe problems and problems with mathematics language, high abstraction! Ok, say it back, you have to improve the logic ability, the fastest way is to read the outstanding procedures written by others. Excellent code is unbearable (this sentence is my copy), temporarily put on some of the technical and skills, you have to derive and learn the logical structure of these good programs, they are Designed. You can first cover this Demo program, design a functionality structure of the same function, then compare the demo program structure, if the gap is large, then you should not improve it, but to design the Demo Author's design In the heart, you may be a bit difficult, but this kind of work will be more, the faster you will get, getting more and more heart, your logic ability is rapid, you can see the logical structure The outstanding procedure is not much start, and the next step is to practice. Starting from the work, if you have idle, you need to do at least two types of exercises, a class is an algorithm practice, all classic algorithms are classic logic, and there is a good student, the annual domestic international programming The competition has a very high-quality question, you can only choose one or two difficulties. When you can turn the complex single collection program (A-A-A) to the non-recursive program, if you can understand the dual recursive program (A adjust A, A adjust B, B adjust A, B B is all), I applaud for you! You don't have to look down, I am a little sorry - the door ax, you will hurry! Another category is to turn down the procedures that you are not satisfied with the previous and current work, this is very important, saving time and effort, because you are familiar with demand, there is no problem, the purpose is to improve the logical structure of the program, very cost-effective Oh, the only thing to overcome is: You have a psychological barrier that overthrowing the little achievement in the past, if you really want to excellent, say a rough words: This psychological obstacle calculates a fart, repeatedly push down the existing results I can only make my own quick progress, let go, nothing is unfortunate, Mahn said in "a total. Production, Party Declaration": In this process, you have only chain chains (banned the chain of your thoughts) ).
Let us summarize it. After you have negate it, you have some kind of attachment to the past "performance", it is a preliminary programmer, which has the corresponding technical and techniques. High abstract logic thinking, the most important feature is: can consciously self-denial, constantly pursue higher levels of logical capabilities. During this process, if you can pay attention to some small aspects, your movement may be quick.
l Understand the advanced language you used in your work from the perspective of compilation principles. If you do this, there are at least two benefits, the first benefit is to avoid a large pile of low-level repeated compilation compilation. A excellent CODER averages 200 row of source code in a working day, and its compilation error should be controlled in 5 or less, know that the 200-line source code is not completed, so you have to pursue once in most cases. Compiling through, and a professional level of programmers should further use the tools such as PURIFY to check the source code, and there is no serious memory leak. The second advantage is to improve the readability and efficiency of the source code. Standardize your code to make your own logic clear, because you understand how to add a few parentheses and empty lines, multi-line alignment, multi-note, compiler is automatically identified, do not affect the efficiency of the program, in turn, control The IF statement in recursive calls and circles is the key to improving program efficiency. To avoid recursion, we must deeply understand recursive, able to convert recursive procedures into non-recursive procedures, requires it!
l Avoid thinking traps, as long as you must have your own thinking inertia, this will express it in your program logic, sometimes you can't jump from this inertia (no one has this time), but you want to Talents, so you need help, if you have a few horizontal or higher professional partners, it is great, when you have a bug that spends 30 minutes, you can't get time, look for them. The most important thing is that you can think clearly and clearly express your questions. Usually yourself in this process or someone in the partner will solve the problem, and fast. In addition, there are several professional partners that can be a benign partner of life, 1 1> 2, everyone has their own strengths, you'd better open your results in time, skill is not compressed, IT development So fast, you are so good, that point Dongdong is not worth hidden, so you can technology or level is not high enough, but you can't let the players who really have professionalism despise your career quality and behavior.
l There is the characteristics of DEBUG. The following statement is not too affirmation, just experience. Even in this highly perfect open environment of VC, you should still ask yourself to debug only with the printed statement. This also has two benefits. The first advantage is that you will think about the problem carefully, instead of using the debug tool to simply track the card, where you are positioning the BUG range is from big to small, from Thin to the fine, this is a kind of way to go downward, and use tool tracking, easy to form the way to bottom, this is not good, you should first see the forest, then see the trees. I repeatedly mentioned: The program is a logic process. Most programs start from the main function, which is a logic process of a tree structure consisting of data structures and functional subrograms (to recognize that even object-oriented program languages) Its execution process is a depth priority, but your positioning BUG should be a broad priority, think about this, um? The second benefit is to force you to think and remember rather than use tools to see the calling process. The abstract logical thinking ability of your brain is the same as the muscles on the arm. If your bug is the program structure. The logic is caused, this is very important, by the way, the most difficult bug is bug caused by the program logic structure. If you really understand this, then I have nothing to tell you. In short, programmers' professional standards: production efficiency and program quality, mainly depending on the number of bugs in the source code and the speed of Debug, not dependent on the speed of the source code. Give you an indicator of my own programs: a qualified professional programmer, programming, if you count, the accumulated debug's time cannot exceed one, the truly professional master's accumulated debug time should Control is below 0.5, how? You critically ask yourself, how much is your time spent on programming and debug? If you use the programmer as your own life, then you will always keep in mind a little: pursue a 0 bug outstanding programmer! This is an ideal for anyone who wants to be a professional programmer. Please believe that it is persistent to pursue this ideal will let you go out!
l Do a good job in the unit test of the program, this is another necessary indicator for the programmer you have qualified care. In fact, you have to prepare a unit test case when you get the needs, and these use cases will directly affect your detailed design (the software design is originally in the fourth quarter). We still fight, when you get a demand, in addition to analyzing its static function, it should also clarify its dynamic operation / execution process, clear this dynamic process to draw, such as A ~ Step 26, where A can further decompose into 5 steps of A1 to A5 until they cannot decompose. For example, the A3 is not decomposed, then you should list the normal operation of the A3 and all the exceptions of all the five-way door, ensuring that the normal operation is sure correct, and the abnormal operation of the operating minus program does not exit. So you have to write a lot of test cases, saying that you will never write! But I usually list an outline, such as the A3 steps from normal operations A, B, C, D, E total of 5, and the abnormal operation is F, G, H, I, J, K, L, M, N total Nine items, you should run again when you do unit testing, this program still doesn't dare to say how quality is good, but at least it can be said more stable! If you want to do fast, efficient during unit test, you should design the Judgment of all normal operations and exception operations in the step in detail, so that you can make A3 steps, making it The structure is reasonable and efficient, right? So, if you are cutting the software engineering from demand, analysis, design, programming, testing, etc., I am afraid that the level is very limited! But if you can see the test problem when you analyze the needs, and improve your design and implementation, do your corresponding preparation for this, 嘿嘿, your efficiency will be much higher, usually you are in a development team. It will be highly confident, you have crossed the realm of a biased, and the realm of the elderly, it becomes a calm master, this is the Best in the best! , Use Zhou Xingxing's words: It is a master of the master, because others can't see you high, I have not seen any tricks or desperate, but anyway, you are dry and good, and effort. Regarding the unit test, there are still many complicated methods. In this article, this article only mentioned the most basic point. The purpose is to make you think about week, arrange order, other you think, no one can eat it for you. ! l If you use C programming, I will talk about a little skill on the inner layer release, which is the class that you have written, plus print statements in the constructor and destructor, and constructs each class when running the program. And descent, if it is paired, then at least the inner layer of the object class level is not released at the end of the program, then you can delete the printed statement, although the trick is so, but the tube is used!
There is some other habits, here I write some, if you have different opinions, please smile. When programming, it should be harder, a Tab key with indentation, usually four spaces, strictly abide by the programming specifications of the development team. A subroutine should not exceed 30 rows (not blank line), and the multiple cycles should not exceed 3 layers, otherwise it should be divided into two subroutines, and individual algorithm programs can be longer, but should not exceed 200 lines. Usually, all members of a class should not exceed 1500 lines, and it should be decomposed into two classes (this work is best done when designing). Each time a short program is completed, such as 15 ~ 30 lines, immediately compile, do not pretend to be a master, first knock a lot of programs, then compile operation, delusions, experience a false, vanity pleasure, or show off Take someone else, this can only prove that he is a unclatted fool, and it is cool. Because as long as there is an unsuccessful, you will spend a lot of time to adjust the procedures. The progress of others is far more than you, the usual heart is the way, or practice the truth! The grandson's articles have a clear elaboration in this point, I don't quote, but I suggest you really don't do this, unless you're right is always a successful genius, then what do you still have this article? I am not writing to you these geniors. Again is to learn to buy a book, read a good book, there are too many books on computer and software. For example, there is a guy named Houjie, almost written per book is good, Zhang Guofeng's C programming is also good, This is just my personal opinion, a lot of books, listing more than this article, I will not say much. There is also a trick, if you are lucky, you can get some source code of some famous software systems, read it, here I can only tell you, some source code of the Linux operating system is good, open, you can legally , Other don't say, I suggest you violate knowledge of knowledge! Fourth, the natural power: becoming system analyst
It has been discussed how to become a professional programmer. This article has basically completed the task, but "vegetable roots" has a statement: 竭 机 机,, 于 于 于 于 于 于 于 于 于 于 于 于Too virtual. I have already saved here, why not set it too much, the author is not talented, and it is simply written.
If you are lucky, you can directly enter a software company employment of strict regulations. It should be a software design that is doing well in someone else. You can have the opportunity to learn software design, when you accumulate enough, It is possible to make a good improvement suggestion on some of these, and you will get fast, you will gradually show your head angle. I believe that you have become a software designer a day (note, not software product designer), step Enter the row of system analysts, but this still needs some other conditions and self-cultivation. If you work in an irregular software company, it is good, you are likely to have the opportunity to make software design, then develop, test, and even have to define the needs, take the part of the software development process. Of course, this is higher for you, and you don't easily get timely guidance. In the case of normal distribution, you should grow very slow. But regardless of the employment unit, if you are determined to be a top software professional player, usually any objective difficulties can't stop you, but your personal factors may stop your advancement. The following points are purely seeking, and the authors of the injured self-esteem apologize in advance, and suggest that you will see the fifth quarter or let go of the fifth quarter or let it see if you have a strong interest in this article. As a result, the facts in the development process of various software development organizations also prove that only a few programmers can become a system analyst, I think this is not my trouble, so you are looking down When I feel angry, it is really nothing, it is nothing to live, because the author is only explaining his own point of view, you can 呲 呲, indicate that your contempt, but there is no reason to be swear! The author did not arrive at Microsoft, but in the software industry, many of Microsoft, of course, there is still a hear, it is said that Microsoft recruits a programmer to have five interviews that have become Microsoft programmers, and it is a vote The veto is said to be non-programming, but some questions about logic and intelligence, the author has also done a lot of copied Microsoft's test questions, and it is deeply imposing. The essence of the program is logic, so some people have proposed programming is an art, and art is to rely on heaven, this little has opposed. A person's logic ability can be continuously improved, but the level of the ultimate logic capabilities that can arrive must be limited by its natural intelligence. This is not easy to accept. Laugh! People can publicize themselves without some or all of the artistic heaven, but it is not enough to say that they have a stupid, and IQ is not enough. It is often an anger. What is the difference? It's all said that I have been here again. If you are not confident, skip this section, look at the fifth section directly, ok?
Ok, let the topic come back, you have become a qualified professional programmer, if you want to be a professional system analyst for software system design, the first thing is to quietly find a standard IQ website or other channels. , Strictly test the IQ, if IQ is less than 130 (normal IQ is 110), please don't cost it, dispel to become the idea of system analyst! it is good! it is good! First, please calm down, think about it, in fact, the Microsoft interview is to measure your IQ and logic mathematics quality, this is the reason why this section is "natural power", because the design is created from nothing Whether it is software or other industries, it can be learned, no ready-made, design is creation! If you are more than 130 or more, it is determined to be a professional software system analyst. In fact, you must prepare a bigger bitterness, what is good?
The practice of cultivation is started from basic skills, the process and a professional programmer is similar. This is a need to use the design tool. At work, you basically encounter two types of design, one is structured design, the other is object-oriented design, and the object-oriented design is better for personal experience. If you have to use structured design, you must master the analysis and design of data flow graphs and control flow graphs. Generally speaking, if you design the data model used in a software, The process, it is not difficult to design a data flow map, but the next design control flow chart is challenge, if you walk in the need to design a good control flow map, then you or others will be implemented in accordance with this design programming No, there is no miracle, or in the design phase, it is necessary to keep in mind: rework is the slowest. When you are using the design of the control flow map, don't want to get the demand personnel to give you a clear point, usually, if you can write the function and operation of the demand, you should be grateful to Dade, from the demand Function, the topology and conditions of operation are your responsibilities as system analysts. Look, if there is no foundation of a chart theory and the introduction of topology, you are not a good career analyst, even if you talent, the necessary mathematics and logic quality are still indispensable. It is not discouraged, there is no best design, only better design, repeatedly designed iteration, bravely overthrowing the old design, you will make quick progress. If you use an object-oriented design, it is more advantageous. There are too many books for object-oriented design, and you don't have to read a classic book, such as Peking University Shao Weizhong. "Object-Oriented Analysis", some methods and skills may be over, but the basic principles of its logic are very correct, the essence is, how do you logically know this world? How do you design a software architecture? Then read other books, touch the category, create a chance to practice, success, in short, no matter whether it is structured design or object-oriented design, evaluate your own software system design plan, have a lot of indicators, such as whether it is uniform And balance? Is the local independence strong? Is there a structured structure? Is there too much or too little? Is there a level, Taigang? Is the logical structure complicated and then constraints? It is still only designed to be simple, complicated, it is stupid, if you have multiple times, please don't use things, turn it off)? The most important point, is it easy to understand, implement and improve? You will have a review. If you have the opportunity to see someone else's design, you must not miss the opportunity to learn, and you can derive it again, compare more, and benefit more.
Going to this step, you should pay attention to the design mode, first or learn, this good book is that the design model used in our work is more single, and you should try more other design patterns. Second, it must be understood that the design pattern is not design ideas, and it cannot replace the design idea. For example, you have to repair a road from A to B. The design mode is just letting you choose, is it to repair the cement or asphalt? Is the elevated road or ordinary, but the route must be your own, and the line is design ideas, the model has an impact on the idea, but it cannot be replaced, so if your IQ is 250, I believe you can use the assembly language. The program of the object is coming. Third, there is a trap. Many system analysts have moved hard sleeve design patterns. It does not understand how to integrate how to integrate. In your specific work, it is often a design pattern as the master, other models, thinking is not inhibiting The form is the key, and it is also prepared for you to reach a realm of higher software design. Ugh! I don't know how to write down, because I have reached the limit of the author's level, I am talking about it, you can see it. The final level of the software design is: in order to be a law, unlimited is limited, this sentence is Li Xiaolong, not what I said. Pick up the human teeth, the class is better than a story, Jin Dafin tells Zhang Wuji to the "Eternal Tulong Ji", the sign of the school is to have forgotten the tricks of the role, remember that the Tempance and spirit of Tai Chi, and Li Xiaolong is similar Oh, the software design is the same, forgetting all design patterns, as you want to design it to a high realm, so you can reach how high software design will eventually depend on your philosophical quality, this is really not written, You know yourself! The author only has a blessing!
V. The ultimate goal of professional people: comprehensive cultivation, become Leader
This section is not well written, involving too many other non-technical factors, especially the cultivation of personal life and worldview, if the click rate of this post exceeds the value of the author's private expectations, then I will try my best Buy it again. I only say, although everyone knows that software development is a team-based job, but pursuing successful development of a large software system is the instinct of a software personnel, just like Napoleon not wanting to be a good soldier. Therefore, it is not a good professional software personnel who do not pursue a large system, but you only have to become Leader, lead a good software development team, and have the opportunity to achieve this ultimate career goal, right?
Ok, no matter what you feel now, I thank you, you can read it! I am not getting used to false apology, I don't say anything is limited, this article is thrown into jade. Welcome everyone to criticize the right-class words and other words, although the author level is indeed limited. So I think you have the right to brick, but it is really no need to return, or when you want to return, or the top of the game, I just have to write a little experience for software development work, so I will hang it high. Do not respond to any reply. Thank you again, you can have patient read! I hope this article will benefit you, I wish you success! Goodbye!