Non-famous universities, non-computer majors, self-taught, from novice to project management, five years of program life

Source: Internet
Author: User

Http://topic.csdn.net/u/20090509/00/c5af1bc2-04a4-4615-be77-de36a79f062d.html

Many people in the forum like to talk about the topic of program life. I will also post a post. For your reference, you can also look at yourself!

I hope more experienced programmers can record their career and learn from each other here!

I graduated from an ordinary college with a non-computer Major. I have been working for five years since I graduated. Recalling the life of a program is also quite appealing.

I learned about computers since the last semester of my sophomore year. At that time, my computer was quite popular and I had the ability to buy a computer at home. After buying a computer, I first read the data structure of C language. I used my computer to debug the various programs in the book. At that time, I first looked at the data structure and tried my best to see it, but I didn't understand much. Just repeat the code in the book and run it to see if the result is the same as that in the book. However, most of the time, it was not debugged for the first time. It was found that the error was not copied here, but it was wrong there. By constantly searching, we can finally run correctly. At that time, we will have a little sense of accomplishment in our hearts, and feel that the program we wrote has been tuned (although it was just copied again ). After reading the data structure (in fact, there are many things I still don't understand), I went to view the composition principle of this computer. The results are more obscure. Because there is no code in this book, there are only some abstract concepts. At that time, it seems that I only remember that the CPU has a few registers for addressing, and there are also some supplementary codes and anti-code. The book was thick, and I did not see it after I flipped it over. Then I bought the operating system. It is also very difficult to see. They are all concepts and there is no code debugging. For example, gdt, virtual memory segmentation, paging, real mode, protection mode, and interruption. It is also a matter of turning your scalp over and understanding how much it is. After reading this, I will go back to the compilation principle, because people who know the compilation principles on the Internet are very good, and I also hope to become a cool man, so I will go back and read it. The results show that people who can understand the compilation principles are indeed cool. It involves the concept of automatic machines. It belongs to the field where computers are used for AI. I also want to become a cool man, and I am still powerless to look at the result with my head. After such a process, although many do not understand, but it makes me have a vague understanding of programming from nothing. I understand what memory allocation is and how the letter symbols of the program are executed by the computer. Then I turned back to the original data structure and read it again. I suddenly found this book is easier and easier to understand than the other three books. I understand what algorithms are called and can try to implement some algorithms I want. At that time, pride came into being. I felt very excited that my computer could work as I thought. Although I didn't know much about the C language at that time, I only knew what the pointer was, but it would not actually be applied. But at least what I know can be used to achieve what I think. Under the impulse of the time, I wrote several algorithms with my own memories:
1. When the number ranges from 1 to 100, the number is raised every time it reaches 7, and the remaining number continues to cycle and asks the last number. I remember 50.
2. Enter any number and the plus sign (+-*/() to form an arithmetic expression and calculate the value.
3. Remember that there is a disk scheduling algorithm in the computer composition principle, which is commonly used by elevators. I felt that this algorithm was good and I implemented it in C language.

At the beginning of writing the program, it was all done by a main function. In the process of algorithm implementation, it is found that if an algorithm is too large to be written all the way, the code will be very long, and it is easy to forget how to write it later, or write it later and forget what it was written earlier. At this time, we came up with the idea that when we first started designing algorithms, we thought about the steps and replaced them with a function. The main function only controls the process of step-by-step functions. In this way, the code of the main function is greatly reduced, and the logic becomes very clear. Then you can complete each partial function just like filling in the blanks. Then, the sub-functions can be divided into sub-functions. Later, we found that many functions can be called by other functions. Achieve the purpose of reuse. I remember that I was excited when I found this method. This method was thought of by myself, and I felt like I was a real talent. Because I am a non-computer professional and want to find a programming job, at least one thing must prove that I have learned computer science. So during this period, I applied for the high-level Programmer (elevation). Because I had to take the exam, I learned something messy like assembly. The exam seems to be divided into a written test and a computer, but now I have forgotten which one has not passed. Depressed! After that, I submitted a Computer Grade Examination (grade 3, Internet technology). The result was no surprise, and the certificate was included. I never showed it back, but now I don't know where to put it ).

After completing these steps, I almost finished my work. I also knew that I was about to start looking for a job in my senior year, so I could not study any algorithms on my own. That thing cannot be eaten. So we need to get some popular things, at least a job. So I created a "C # entry-level classic ". At that time, I heard that. Net was quite popular, so I had to find a job. In addition, I prefer to find some books with the word "entry" on their names (such books usually tell you in detail how to set up a debugging environment ). Because of the program, you must first be able to build a debugging environment, and you can't see anything at all. Later, I felt that this book was not bad, and I did not waste 100 oceans. I learned some basic usage of. net. In addition, it gives a detailed description of the object orientation. I have read the "Object-Oriented" Chapter several times carefully, because it was very popular in the past 03 years and the word "Object-Oriented" was everywhere on the network, I feel that programmers are all object-oriented. I also want to become a master, so I will look at it with a kind of momentum that doesn't understand and doesn't give up. As a result, only the object-oriented syntax is remembered. The examples provided in books and on the Internet are also very simple. Most of them are abstract classes of animals. Then, the animals have interfaces to eat, such as chickens, ducks, and geese, examples of duck swimming interfaces and so on. After reading the program for a long time, I didn't know how much it will do for me to write the program. Later, I copied a website Shopping Cart program from the book and realized the web development process. I felt like I could be on the road. Because I was a senior in the last semester, I didn't send my resume everywhere. I only pay attention to some recruitment information on the Internet. At that time, in csdn, I saw a local company recruiting posts. The company was very small and just started out. I think there should be no more requirements, so I will apply for a try and hope that I can apply for a job, so that at least I can prove that I am qualified to become a programmer. When applying, the boss asked some questions, most of which were web development technical questions. At that time, I was just new to Web, but I didn't know much about it. It seems that more than half of them did not answer at the time. When I left, I put the program I copied from the book into my computer and ran it for him. I wrote a comment. He looked at it, nodded, and then went back to wait for the message. I went to the interview on Friday. On Sunday, the company called me to go to work on Monday. After hearing this message, I was inexplicably excited. Please have a big meal with your friends in the dormitory. Everyone is also happy that I can find a job so early. Later, I went to my company for an internship during the day and went back to my bedroom to go to bed at night. After work, the sense of attention disappears and the work pressure is replaced. Due to web development, the server's C # is better to say, but the front-end uses a lot of HTML and JavaScript, at that time, I knew little about this. I had to read books and do things. To meet the boss's requirements, work can be completed around 8 o'clock every day.

As work expands, it is a peaceful life, working, eating, sleeping, and living fast every day. At the beginning, since there were few things available, every task was completed actively because I was afraid that I could not finish it myself. But gradually, when you know how to do it, people will get tired because they do some similar work every day. Slowly, I like to drag on things. After assigning a task, estimate how long it will take for the job. Generally, the boss will give more time. So I like to put my work first, go to the web page, visit the forum or something, and wait until the rest of the time is almost done. I need to start working, and then enter the working state lazily, however, the quality of work is usually not good, and many bugs may occur after submission. But I didn't care much about it. Because it has a good relationship with the boss, like me, it also belongs to the old yuan level. I have been working for several years. Because small companies have to do everything, and technologies have accumulated a lot. Including usage of various mainstream databases ,. net, CSS, JavaScript, PHP, Java, Perl, Flash, etc. During the independent development project, I always want to find an architecture to speed up the development of my next project. However, after each development, the architecture designed last time is really spam. I have developed many projects and think about some new architecture methods each time. Up to now, there are not many architecture ideas worth using. I remember that when I was working on JSP, I felt that the server code in JSP was mixed with HTML, which was ugly. It is not as easy as. Net event-driven. Write a module so that jsp can also implement the event-driven mode. The result is written later, and it does not get any benefits, and it feels a bit nondescribable,

Later, the project gradually grew bigger, and gradually understood the intention of object-oriented. When a project is small and its logic is very simple, it is of little use to design with object-oriented methods, but components are of greater use. Because the project is small, it basically involves creating several tables and modifying HTML. However, the project is large and the logic becomes complicated. If you need to understand the logic, a methodology is needed here. The method I used to write algorithms at the beginning was a little inapplicable. It turns out to be subdivided from the top layer down. Is a top-down design method. But object-oriented is not. It is a design method based on points and surfaces. Object-oriented means finding object points first, and then finding the relationship between each point. In actual projects, it is difficult for you to design from top to bottom. Because the project requirements are often not comprehensive at the beginning, many projects were changed to a non-comprehensive view later. The top-to-bottom design is not suitable for such ordinary changes. In addition, when the demand is very large, it involves too many things, and it is difficult for you to look at the system comprehensively from a look-down perspective. Therefore, the top-to-bottom design cannot meet the requirements. For example, if the customer finds it inconvenient to use a project that has already been deployed for 80%, change it. Many functions are not required and several new functions are provided. However, these functions are only slightly changed to the original functions. But logically, they are quite different. The human brain is not a computer. If you think about this code and modify it, you will be confused later. Therefore, several objects need to be abstracted according to the customer's way of thinking. Then the abstracted object contains the original functions. In this way, you can get twice the result with half the effort.

During the work, I found some differences between common programmers and excellent programmers:
1. When a common programmer encounters a problem, he or she may ask someone else, but he or she has never thought about it before. This is a bad habit. First, you don't have to think about it. Even if someone else solves the problem for you, you will not forget it for a long time. It will not happen again. You are not going through the brain because of this problem. Second, most people who can answer your questions have some experience. They may well arrange their own affairs and manage their time. If you interrupt them from time to time, they will find you annoying.
Most of the outstanding programmers will first go online to find related problems and see if there are any solutions on the Internet. After a lookup, he will remember the problem.

2. in cooperative development of a project, common programmers often only know what they develop. After the project is completed, it is often unclear about the functions of the entire project. Some people may complain that they can't finish their work, and they have time to understand the entire system. However, most of the reality is that they spend a lot of time hanging out on the Internet, but do not want to spend time improving their knowledge. If you always think that the design of the project is the work of the designer, you do not have to understand it. So such programmers can only be manual workers.
Excellent programmers will have an understanding of the entire project, and will have a look at some of the functions they are interested in. Better, they will have a look at the architectural design of the entire project. Ask yourself what if he is a project designer? Learn the excellence of project design and discover the shortcomings of design. By analogy, you can use the excellent information in your future work.

3. Common programmers often have great inertia. You cannot consciously learn and improve your abilities. Therefore, it takes a lot of time every day to get in some pastimes. Therefore, time is often wasted.
Excellent programmers often arrange their work and study. Learn at work and work at work. I can feel that I am moving forward toward my goal every day, with a good state and powerful power. They work very hard every day, so they study a lot of things and time is precious. Therefore, they will be good at using some tools to operate their own computers, greatly reducing trivial computer operation time. More winners will develop small programs that meet their operating habits to improve their efficiency. Maybe these small programs will be shared online, and unexpected gains may come.

I am now a Project Administrator. Looking at my programmers, I often think of the bad habits I had when I was a programmer. For example, if you are late for work, go online during work hours, and submit a bunch of program bugs ...! I often smile and understand this! However, I often remind them that if you want to become an IT elite in the future, rather than waiting until you are 30 years old and you feel you have no way to go, Please cherish your time. If you do not cherish your time, others will not cherish your time.

Today, I spent more than two hours writing a short self-explanation. I think it is worthwhile to review my time over five years. Previous stories are vivid. After writing it down for five years, I will review it again. Maybe it will be another feeling.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.