Statement: the article is I accidentally saw, the article is very long, but I carefully read, other people can write so much, I have no reason to even read the perseverance, feeling quite deep, how dare to enjoy, should share with more people.

I don’t know the main character, but I hope his experience can inspire more struggling young people

—————————————————————————————————-

My path to program learning


I went to a third-rate college, along with most people in a city do not know. Because the school is not good, there is no hope of relying on the reputation of the school to get a good job. I remember that the first book I bought was “Computer Basis DOS3.0”. Don’t be scared. In fact, DOS6.22 was already popular at that time, but I saw DOS4.0, 5.0 and 6.0 books in the bookstore. I thought it was volume 4, 5 and 6 like English. I remember looking for DOS1.0 everywhere at that time, but now THAT I think about it, FORTUNATELY I didn’t find it: I had no idea what a program was, so I had to memorize codes by rote and write them on paper. I didn’t have a 486 until my junior year. I don’t remember how many programs I wrote on paper before that. I wrote more than 30 pages on A4 paper. My C language, C++ and VC were all introduced under such conditions. Therefore, conditions can be overcome, and I hope my experience can give students a little confidence in difficult conditions. Computer for the first time was in my brother-in-law’s room, my mood is excited, but a computer I gawking at once, they use the English version of Win3.1, that DOS of the information I have seen a ghost, scary a blind, accidentally get Word became a full screen, how are not the original, was worried, I thought I broke the machine. The first C language program, that is the classic HelloWorld, I tuned for a few weeks, very few computer opportunities, there was no book to tell me that the development environment (TC2.0) needs to be set, and I didn’t know there was a compiler at the beginning, I even smart enough to write the program extension from.c to.exe, the results can be expected. Finished the assembly of C and X86 in freshman year.The data structure, c + +. As a result of energy spent in self-study, big once four courses hang color, three types of schools is this good, hang ten or twenty doors also graduated as usual. But going further, I can’t even pass the exam so hard, which shows how rigid our country’s computer education is.

Sophomore prepare to learn VC and BC, at that time difficult choice, later chose VC, not for other, only for two books in the bookstore, VC that cheap 6 dollars. My efforts in the class can not be matched, learning day and night, after having a computer in my junior year, especially so, many times my father taught me in the middle of the night that I had to die, I always feel that my foundation is poor, memory is not good, conditions are not good, so I think only to spend more time to catch up with others. Actually later many friends said THAT I have a talent for learning computer, let me laugh and cry. I used 486, 16m ram and 1G hard disk. At that time, the configuration of my classmates was P166MMX. It took me all night to install a WindowsNT4.0 and nearly two hours to compile a program generated by BC5.0 wizard. ), once after writing a program for too long, I thought the background of the white editor turned to purple, and I thought the monitor was broken. Later, I found that my eyes were not working, but strangely enough, it is a miracle that my eyesight can still keep 1.5 till today. But is that broken machine accompanied me for two years, let me learn VC, Delphi, SQLServer and so on. Later, the machine was used by my aunt for typing. According to her, she was playing happily one day when a puff of smoke and flames came out of the monitor, and then it died.

During my junior year vacation, I had an opportunity to work as an intern in a computer research institute, which was more like a volunteer than an intern. I worked for two months without receiving a penny. However, these two months have helped me a lot in my development and helped me understand the society early. Of course, I was completely ignorant when I first went there. I got familiar with the network and learned Delphi and Oracle. Due to work very hard, get a good evaluation, in under the introduction of an elder, I begin to do projects together with them, which makes me in senior year have their own income, senior again to find two MIS company part-time, although money is not much, but during the student has an income of more than 1000 I have been very satisfied, I finally with his own money to replace the computer. I began to look for a job in my senior year, when I already had more work experience (of course, NOW I think it is very naive). I began to listen to my parents and wanted to go to that institute, and the department that I had interned also wanted me to go, but I don’t know why it didn’t work out in the end, this kind of unit is quite bureaucratic. I was so angry that I took a part-time job in a company as the MIS TeamLeader. From junior year to graduation, I worked in various MIS, from gas factory, tobacco factory, public security, railway, catering to university. I worked hard and worked overtime and stayed up all night. I had to do everything from talking with customers about their needs to designing, coding, testing and delivery. At the time, I felt so fulfilled, I felt so good, but now I think it’s really shallow.

Start work journey

It’s easy to be misled when you’re just starting out in the workforce, to be dazzled by the tools, and to feel valued by the company, but you’re always going to be a low-level developer. Don’t tell me how important systems analysis is or how hard it is. Do you think that talking with users about their needs and doing design is system analysis and design? How many domestic companies can do it in place and very standardized? I am an ISO9000 internal auditor. I also received multiple training at Rational and have 4 certifications. Another company offered me a CMM position. These I have heard a lot, but a lot of things to the domestic nature of the change, a company is not through ISO9000 or CMM can be standardized, I am now working in a foreign company with decades of history, the management is not the general domestic enterprises can and. As a student who has not stepped into the society before graduation, it is almost impossible to master system analysis and design in a short time. Object-oriented and UML are just tools, but the key is people’s own ideas. It does not mean that you can make a good design if you are familiar with C++ and Rose, on the contrary, if you have high quality, You can write programs in C that are more modular than others in C++.

Further words, domestic software development industry has a strange circle, a lot of people think VC>Delphi>VB, is really very funny. I have done development for all of these software. To put it bluntly, they are tools and should be chosen according to the needs of the application, not the level of feeling. If you choose a development tool because it looks good, you’re shallow. If you say level, then these tools are not level, because they are used to some system API, Microsoft friends will not think you are great because you remember how many API or how many classes, you will always be their customer, they value the money in your pocket. I’ve done system kernels, I’ve packaged a lot of apis, and I don’t care if a client uses those apis for secondary development, unless they come up with their own unique design.

There are several operating system kernels written in C++, and several real-time systems using C++. Of course, I am not saying that C++ is bad, but C++ is not as good as C in the current kernel and real-time system. Saying C++ is suitable for application development is another matter. So my point is it’s not what tools and language you use, it’s what you do. Your design reflects your level of skill.

After working like this for a year, I felt very depressed. Most of the work I did was skilled work, and I didn’t have much improvement in personal skills and couldn’t see the direction. Therefore, I decided to leave this city and go to Shanghai to seek better development, and I planned to give up my previous MIS and transfer to the communication industry.

I can’t write here without mentioning my girlfriend. We met half a year before we came to Shanghai. She worked as an intern in our company during her senior year, and the company sent her to write documents for me. She told me a lot of things, her family was originally the reform and opening up the first batch of nouveau riche, lost millions of, her mother love playing CARDS, still owe a lot of debt, she has a boyfriend, but she no feelings to him, just because he gave her mother more than twenty thousand dollars, then also forced her to write forty thousand ious, her boyfriend betrayed her and beat her more than once, Make her marry now or pay her back. This person unexpectedly still is a high school teacher! Her mother had spent the money her father had given her for school, and she had no way to get her diploma because of unpaid tuition. Her mother was sick and needed money, so I took out some of my savings and borrowed some money from my friends to pay for her tuition and to see her mother (later I found out that the money for the treatment had no meaning, even I didn’t know whether her mother was sick or not, but there was nothing she could do). At this time my family knew some things, resolutely opposed me and her together, her original boyfriend also tried to destroy. But we decided to leave this sad city early, and hide from our home. Due to time rush, I only prepared 4000 yuan, she’s only a few hundred dollars was her mother will go to, I bought three tickets, one is the noon, two is in the evening, at noon, my family sent me into the boat, they left me off the boat, she and I night the ship left the city for many years I live with her, is a debt. Having never been to Shanghai, we are both stubborn and unwilling to bother our classmates and friends. It was 6:30 in the evening when we arrived in Shanghai. We didn’t know where to go, so we found a hotel with 20 yuan. The room didn’t even have Windows. The next day we began to rent a house, because the money is not much, we are walking, basic spent one week time, don’t know after how many circuits of pudong found a $400 house, but we don’t know about Shanghai is a pay three voltage, pay half a month of intermediary fee, after bought some POTS and pans, we only have 800 dollars with me, The 800 yuan should support us until we get our first salary. In order to save money, we cook by ourselves and only spend 2 yuan to buy food every day. She likes eating very much (maybe she was always willing to starve in college). Her former boyfriend did not let her go. He often called to harass her and came to Visit her in Shanghai. He even threatened her a lot. After a day in the home is waiting for the interview notification, originally I want to quickly find a MIS to solve the present difficulties, but she insisted that I don’t give up his ideal, finally, everything comes to him who waits, I found a communication company, 4000 piece wages while miss MIS company I quote price, but also enough to survive in Shanghai. She also found a job. On her first day at work, she cried. This was the first time she shed tears when she came to Shanghai.

Because it is a new industry, I reduced myself to zero, I learned VC, Delphi,The databaseI had embedded, protocol, signaling in front of me, some knowledge I had never touched before. I knew I had no retreat, so I studied hard. I treated myself as a fresh graduate, and every minute I worked hard, EVERY minute I gained. After half a year, I finally got familiar with the work, and was commended by the company, and my salary was also increased one level. In the days that followed, we scrimped and saved. We paid back the 10,000 yuan we owed to our friends and finally got our life back on track. At that time, my girlfriend told me that she wanted to take the postgraduate examination, and I supported her very much, so she quit her job and prepared for the examination at home.

In addition, I would like to thank my ProjectManager, who used to be a product manager of a big communication company. He is very kind to people. I have learned a lot from him and he has given me a lot of selfless help. He gives me plenty of space and trust in my work. Remember the company arranged for me to maintain a access server software, due to the amount of code is not too small (50000), data and documents are not complete, I am very hard to maintain, so you want to do it again, the company leadership don’t support, may feel workload is too big, but he is trying to support me, in private, he let me to do, my he squeeze time to do maintenance work. With his support, I spent half a year to complete the software to access the server, and realized a relatively complete TCP/IP protocol stack. Here, I learned embedded system design, driver development, TCP/IP and a lot of communication knowledge. It took me a year to transfer myself from MIS development to communication industry and gain a firm foothold. A lot of my development is the direct operation of hardware, no longer subject to the constraints of Microsoft operating system, VC, Delhpi and these development tools, I finally see another sky.


I like to get to the bottom of things. With the deepening of development, software development is more and more closely linked with hardware, and the lack of hardware knowledge hinders my development. Moreover, chip technology is basically in the hands of foreign companies, which is a great constraint to system-level design. The first (and often the richest) profits are often made by IC companies such as Intel and Motorola, leaving domestic manufacturers to eat soup. Therefore, I am determined to solve my hardware technical obstacles and plan to leave the communication industry and enter the field of IC design.

Hardware knowledge

Of course, I knew that if I knew very little about hardware, no IC company would be kind enough to hire me for training. So I must work hard to lay a solid foundation and learn some relevant knowledge to prepare for the future. Just as I started to move from MIS to communication, I had read a lot of books on communication and worked for an ISP to make a RADIUS billing sorting desk. This communication company gave me this opportunity against this background. I’m in the communications company do system design, there are many PCBLayout hardware, I will pay attention to learn from them, usually because of what I do is software, the hardware in the company information I’m sorry, so start had to look at home, I came to work in Shanghai a year in a row in overtime, then do not add, because I have to find time to learn, I usually sleep around 12 o ‘clock, From 5:30 the next day, I went to work early. If there were not many people on the subway, I also used to read. Study certainly is not plain sailing, some don’t really understand the problem ask for accumulated hardware personnel, their help I progress a lot quickly, because in the case of no one great self-study, half of my time is spent on solving problems, but this kind of question is often a word from the others can let me be suddenly enlightened, I’m very glad that I have such a learning environment. In the back of the year, I learned to look at the hardware schematic diagram, learn the simple hardware design (analog circuit there is a big gap), the thing is, when do you do in a copy of the software, people always think you are a software developer, when you start to learn hardware would not necessarily agree with others, there is a friend of zte also said to me, It’s impossible for one person to learn everything. I know that, but I wish I could have done better. But once you’re familiar with the hardware, it’s like you already know everything about it, and your colleagues take it for granted. At this time I can take the hardware data to the company to see, no one fuss again. What makes me proud is that I made an IAD (soft switch terminal device) system scheme through my own efforts, including the selection and design of hardware and software, etc. This scheme has been recognized by the company and colleagues, which makes me feel very pleased.

Technology is complementary to each other. When my hardware has made some progress, my software design has also been greatly improved, so THAT I can understand the problem from a deeper level. The CPU of the access server I made is MOTOROLA PoerPC860. Hardware personnel are used to using fixed BD table when driving, and copy data from BD table to user Buffer or user Buffer to BD table when receiving or sending data. Due to a deeper understanding, I re-realized this process by myself, using dynamic BD table to drive data receiving from a network port. The software submitted to me was swapped at three layers until it was sent from another interface without a copy. This design greatly improves the performance and makes the system index close to the theoretical value. The combination of hardware and software brought my design to a higher level. The operating system I’m writing now, after I compile it, I decompile it into assembly, find the code that isn’t optimized, and then tweak it in C. For example, a lot of cpus don’t have specific instructions for multiplication, and you probably know that it takes a lot of instruction cycles to do a multiplication operation on this CPU, and some of your friends will say I know that, and I’ll try to avoid using the x sign, but it’s not always that simple, you know

C language array subscript operation is how to achieve? If you look closely at the disassembly code, you will see that the C compiler sometimes produces displacement instructions by subscript positioning, but sometimes by multiplication. There is a huge difference in efficiency between the two, so understanding these problems will help you achieve the best performance of the system. ?

Some questions will not say, interested words can be discussed together later.

Speaking further, I sincerely hope that those who are in-depth in software will have the opportunity to learn hardware and other relevant knowledge, especially those who are engaged in low-level development and embedded design. This is very helpful for improving software technology, otherwise you only know the way things should be but don’t understand why. My point of view is also verified in my current IC company, ProjectManager. He told us that the software manager of the current 802.11 chip product of the company was originally engaged in the hardware design of the chip, and so-and-so was originally engaged in software and is now engaged in IC. There are many similar examples, but it is not very popular in China.

Life choices

I have some comments to share with you, only when I do a good job, I will study and work is technical, this company’s boss is not, I don’t usually go to ask the question of the induction phase those veterans, but ask some friends with more seniority, soon graduate students, for example, because they tend to be things with you, And senior people usually think your question is too simple, so the answer is also very simple, AND I am embarrassed to ask more. I will ask them after I have a certain level of technology, and they can give you a more in-depth answer. In addition, some friends said that I had a good chance, and they also hoped that I could engage in a new job, but I did not have the chance. I only had a bitter smile when I heard that. People who know about my chance should know that I was not born in an IT family: ) no one promoted me all the way, all the way out of their own, my mother died early, my stepmother (I call her aunt) looked at me to come over, once she saw me 30 years old is still writing programs, she said that like ME so hard wood can learn.

My ultimate goal is IC rather than PCB, so my next step is to learn the knowledge of IC design. I bought a lot of related books and searched a lot of information on the Internet. I spent a lot of time to learn VHDL, and carried out some simple design and simulation with software (no ASIC design, only FPGA). With the further learning, I gradually understand the basic process of IC design, but also understand the hardships of this road. At this time, I was ready for job-hopping. I sent my resume to a well-known IC design company in the industry and passed a long interview (more than 4 hours). I was satisfied with everything else except the salary, and I understood why, because I was new to the industry and I had no experience, so I cleaned myself up again. The boss of the company asked me if I could accept more than 6000 yuan a month. I knew he was following the rules. Think of my friends who are the communications industry, basically is the salary of more than 100000, about a month also abound, friends also help me introduce a lot of treatment is good, how should I choose, I was hesitant, I love my career and I look forward to my pursuit, but I am a ordinary person, I also need to support a family, I also want to buy an apartment and a car earlier. Life has presented me with a difficult problem.

At the age of 63, Einstein said, “A man who has not achieved his greatest scientific achievement by the age of 30 will never achieve it.” I will soon be 26 years old. I have only four years to go before 30. I must seize these precious years and strive to reach the peak of my skill. For this ideal, in order to be closer to my dream, I choose this IC company. I understand that my salary is almost the same as that of the master students who just came in the company. But for the future development, I can only endure, and everything has to start again. Changing careers can be a painful process, especially when moving from a comfortable position to an unfamiliar one can feel like jumping out of a warm quilt into icy water. In my previous communication company, I was the only employee who got a salary raise five times in two years. I was highly recognized by the company and my colleagues, and was often entrusted with important responsibilities at work. But now all that is past, I am just a new comer in the new company, no one knows or cares about my past achievements. I decided to start again, I regard myself as a new graduate student, I want to use their own efforts to get recognized by the company. Entering a new industry is very painful, I told myself that I must endure all this, although there are many temptations outside, but since I have made a choice, I will not allow myself to give up easily.

I’ve been working at the new company for more than a month now. It was very difficult at first, but I’m getting used to it. At the end of the first month, the TeamLeader talked to me and said that I was the best one among the new employees. I felt very pleased, which was also an affirmation of my efforts. Here also want to thank my girlfriend, she gave me a lot of support and encouragement, every time when I shake her in the encouraged me, let me to stick to his ideal, came to Shanghai is she let me don’t force to do the MIS, this also is she let me to resist the temptation of the thousands a month, without her I might not have today’s achievement. Now the company has its own operating system, its own CPU, DSP and other chips. I can learn the most advanced technology in the world here. Our design and development is no longer completely dependent on others’ hardware and systems, which makes me happy. I plan to learn new knowledge and realize my dream after I get on the right track.

I set several goals for myself in the next two years:

I. Strive to do a good job, in the work of the company and colleagues recognition;

2. Study hard IC hardware design knowledge, consult colleagues, and use every opportunity to practice;

Three. Realize the main part of my real-time operating system, complete the TCP/IP protocol stack module, and release the source code for free;

Four. Marry my girlfriend and buy a small house, this is the most important, because I understand that careers can be restarted, but precious relationships are hard to get back.

The operating system I’m developing is a real-time embedded system that currently supports the following features:

A. Supports time-slice rotation scheduling and priority-based scheduling, with a maximum of 64 priorities;

B. Preemptive real-time kernel;

C. In order to facilitate transplantation, the main body is implemented with standard C;

D. Assembly code is very small, less than 100 lines;

E. Support task management, each task has an independent stack;

F. Process synchronization and communication is currently completed with Semaphore, and MessageQueue is being debuged;

G. Realize the timing system call;

H. Can be simulated and debugged on Windows

** I also plan to implement priority reversal protection, EventFlag, DataPipe, memory management (previously implemented), driver interface, etc. After that, I will try to improve it, such as adding file system, protocol stack, debugging interface, etc. Hope friends to put forward their own opinions and suggestions, in this very grateful! 天安门事件

Postscript:

As some friends have said, my experience may be misleading to some friends. I must explain here. Before I came to Shanghai, I studied too hard and often only slept for more than 3 hours at night. I was 171cm tall and only weighed 108kg at that time (I am more than 130kg now). My family also said that I could not live to be 60 years old by working so hard, but I was too stubborn then. At that time, my body was affected by the hard work. Once in the morning, I suddenly had a severe pain in my lumbar muscle, so painful that I fell on the bed and could not stand up. Although I’m more aware of it now, I still have a dull ache sometimes. Later, after my girlfriend convinced me to come to Shanghai, I was no longer like this. I often quote my father’s words, “The body is the capital of revolution.”

I can pull an all-nighter or two. At most, I worked three nights and three days in a row, but I didn’t recover for half a month. Is it not worth the loss? Learning and working should be a long process, like a marathon, not a sprint. I’m very pay attention to adjust the intensity of the study and work, I want to ensure that every day there are relatively abundant energy as far as possible, some young friends feel should also try very hard to work hard, it makes me somewhat worried that if my story makes you work a little more interest in learning, I feel very happy, but if misled by some friends, let you do something not worth pay, I would feel so guilty.

Technology is not cheap. I changed industries because of my interest, not any bias. I hope my experience does not give my friends the wrong impression that I am always developing towards higher technology. It’s hard to get to the top in any industry. Words come back again although the technology is not noble or cheap, but the threshold is on any account, in any case, the threshold to do IC than do high web pages, this point is undeniable. All kinds of talents are needed in our country, but we should have the idea of making progress as individuals. We should try our best to do better in the industry we like, instead of staying at a superficial level.

I am a self-aware person, and perhaps my greatest strength is knowing that I have many shortcomings :). Many twists and turns and mistakes in my story are caused by my shortcomings. I hope you can look at my experience with a prudent eye and not be confused by my “sweet words”. I study carelessly, which brings me endless trouble and greatly hinders my development. Remember when I was a kid in excellent grades, but later learning seriously dine, repeatedly landslide result in my school, also did not take an examination of what good school, when I was a child, a friend of similar grades and I at that time, but not I this shortcoming, she went to tsinghua university, then went to America for further study, in a famous teacher’s scientific research theory, That would be a better way forward. My learning method is also in the continuous improvement, learning too pay attention to quantity and time in the past, that learning both bitter efficiency is not high, now I really pay attention to the efficiency of learning and skills, this is a shortcut to learning (of course not opportunistic), such as learning a relatively new technology, if there are conditions, might as well ask experienced people, do not need to ask a lot, Often his casual words will help you more than you read in a week. You’ll save a lot of time studying with that in mind, so why not? I learned a lot of things in these years, but I was very blind at the beginning, so I learned things haphazardly. It makes me laugh when I look back on it now. I wasted a lot of time on some knowledge that was not necessary to know deeply. Many friends like me have memorized the wubi character form, indeed it is a good input method, but for a research and development personnel it is absolutely not worth your back, your time should be spent in valuable places. I’ve done a lot of things like this. I’ve memorized CCED, WPS commands and shortcuts, and I’ve spent a lot of time learning how to use dBase after it basically retired. Therefore, in the early stage of my study, THERE is no plan, no clear short-term goal, medium-term goal, only an illusory long-term ideal. Just like design, good design takes a long time to abstract from requirements to code, and you can’t just start coding once you’ve got the requirements.

Of course, so many years of learning and work more or less some harvest, I say my experience of some learning, these methods may not be correct, I also constantly explore and improve. I have a relatively clear goals of study and work, I will not to learn the techniques of a temporary move to the next decision before I will consider a lot, including the development of long-term, personal route planning, need to pay the price, you may encounter difficulties and solutions, etc., after the decision will be made more clear plan, including short-term, medium-term and long-term, Side can make use of the resources (including good books, materials, software and hardware environment, including experienced friends or teachers), and how each phase transition to a higher stage of the plan, often in a learning phase, once the road will go relatively smooth, but across the stage is usually more trouble, such as from learning the basic knowledge to practice. In addition, I have my own way to buy books. There are far fewer high-quality books than low-quality books in the world. For a strange technology, I will often make a wrong choice when I buy it for the first time. After I have a little concept, I will buy a relatively thin, relatively cheap and relatively general book, which is the best book written by domestic authors.), I will basically understand the key points of this technology after browsing it again, and it will be much clearer to buy books and make plans. Otherwise, it is often difficult to find a good book in the beginning, and when you buy it, you study hard, sometimes half way through it, only to find that it is a low-quality book or relatively outdated technology, which makes you very frustrated. In addition, it is often a good choice to have an experienced person introduce you.

Some friends want to learn communication, embedded development, but always feel that they do not have software and hardware environment, I will introduce to you how to build such an environment according to my understanding, of course, I only understand my study and work direction. Communication I do data network work, including TCP/IP, layer 2 and layer 3 switching, also have a little knowledge of access network, H.323 and soft switch. These hardware and software environments can be built on a PC. You can even no card in a PC build a contains multiple routers, access to the server, VoIP gateway, network, host, such as the simulation of the network environment, and very close to the actual network, of course, this requires you to have a clear concept and certain network knowledge, I have been working to develop a set of software will simplify this process, the experiment has been done, I’ll probably incorporate it into my OS peripheral extension software. This way I can’t use simple statement to speak clearly, I can say about thoughts, simulation is implemented on the PC card, (know how Windows without card machine to implement virtual network card technology’s friends should understand), then every simulation card corresponding to a virtual device, such as a router or host. You can also use third-party tools, such as VmWare, to do some of the work. I am now using a simulation network card to do their own development.

As for the embedded development environment is easier to achieve, PC is a very large hardware platform, the existing embedded operating system usually support X86, you can do development on the above, through the floppy disk Boot or use virtual machine load, I used VxWorks to do the test, in a PC to run Windows and VxWorks two systems. In addition, the 16-bit emulation X86 environment compatible with DOS on Windows also provides an excellent experimental environment for many operating systems, which is how my operating system was implemented on Windows. Linux is also widely used in embedded applications, it has a lot of information on the web, and it is relatively easy to practice. At the same time, many perfect embedded development environments support software simulation, such as Tornado, WinCE, etc.

\