Sharing the experiences of predecessors, hoping to provide some help to friends who are new to embedded development. Having been in the internet industry for over seven years, I have taken many detours and faced numerous hardships.
University Stage The university I attended was not a prestigious one, so before the semester started, I resolved to study hard and make a living through my skills. I completed PASCAL before the semester began, without even a concept of programming, so I had to memorize the code by rote, taking notes on paper. I can’t recall how many programs I wrote on paper, with the longest being over 30 pages on A4 draft paper. Under such conditions, I began learning C/C++. My first C language HelloWorld program took several weeks to debug, as no one told me that TC2.0 needed to be configured first. In my freshman year, I completed courses in C, x86 assembly, data structures, and C++. In my sophomore year, I planned to learn VC and BC, and after much deliberation, I chose VC, not for any particular reason, but because the VC book was 6 yuan cheaper than the other. My efforts were unmatched in class; I studied day and night, especially after getting my own computer in my junior year. Many times my father scolded me late at night, asking if I was trying to kill myself. I always felt my foundation was weak, my memory poor, and my conditions unfavorable, so I thought I had to spend more time to catch up with others. Later, many friends said I had a talent for computers, which made me smile awkwardly. At that time, I was using a 486 computer that looked like the one in the picture below, with a large monitor placed on top of a horizontal chassis. This type of computer is probably something the new generation has never seen.
With 16MB of memory and a 1GB hard drive, the monitor was second-hand and emitted a lot of radiation, with sparks flying when it powered on. Installing Windows NT4.0 took an entire night, and compiling a program generated by BC5.0 took two hours. But this old machine accompanied me for two years, allowing me to learn VC, Delphi, SQL Server, and more. During the summer vacation of my junior year, I found an internship opportunity at a computer research institute. I worked there for two months without pay, but those two months greatly helped my development. Due to my diligence, I was introduced by an elder to work on projects with them, which allowed me to earn my own income while studying. Earning over 1000 yuan as a student made me very satisfied, and I eventually used my earnings to buy a new computer.Entering Society In the second semester of my senior year, I started looking for a job, naively thinking I had a lot of work experience. Following my parents’ advice, I wanted to go to that research institute. The department head where I had interned previously also hoped I would go, but due to the bureaucratic nature of such organizations, I ultimately did not go. Instead, I joined a company where I had previously worked part-time, focusing on Management Information Systems (MIS). In the year before graduation, I worked on various MIS projects, from coal mines and tobacco factories to railways and universities, doing whatever was profitable. The work was tough, often requiring overtime and all-nighters. I was involved in everything from discussing requirements with clients to design, coding, testing, and delivery. At that time, I felt a great sense of accomplishment and was very motivated, but looking back now, I realize how naive I was. Fresh graduates entering the workforce can easily be misled, thinking they are valued by the company, but in reality, continuing in such roles may lead to being a low-level developer forever. Do you think that discussing requirements with users and doing design equates to system analysis and design? How many companies in China can do this properly and systematically? A company is not standardized just because it has passed ISO9000 or CMM. I currently work in a foreign company with decades of history, and its management is not something typical domestic enterprises can compare to. As a recent graduate who has just entered society, it is almost impossible to master system analysis and design in a short time. Object-oriented programming and UML are just tools; the key lies in the individual’s mindset. Just because you are familiar with C++ and Rose does not mean you can create good designs. Note: Unified Modeling Language (UML) is a standard language for specifying, visualizing, and documenting products of object-oriented systems. It is a non-patented third-generation modeling and specification language. UML is a modeling tool for object-oriented design, independent of any specific programming language. My viewpoint is that it does not matter what tools and languages you use; what matters is the work you do. Your design reflects your technical level.Transitioning to Embedded Systems After a year in MIS, I felt very frustrated, as most of the work was routine tasks, and I saw little improvement in my personal skills or direction. So I decided to leave this city for Shanghai in search of better opportunities and planned to abandon my previous MIS work. Since it was a completely new industry, the VC, Delphi, and database knowledge I had learned were of no use. What lay ahead were embedded systems, protocols, and signaling—knowledge I had never encountered before. So I studied hard, treating myself as a fresh graduate, and after six months, I finally became familiar with the work, and my salary increased. I remember the company assigned me to maintain an access server software, which had a considerable amount of code (50,000 lines), and the documentation was incomplete, making it very challenging for me to maintain. Therefore, I decided to rewrite it, spending six months to complete the access server software and implementing a relatively complete TCP/IP protocol stack. Here, I learned embedded system design, driver development, TCP/IP, and much knowledge about communication. After a year, I finally transitioned from MIS development to the communication industry and established my footing. At this point, most of my development involved direct hardware manipulation, no longer constrained by operating systems or development tools like VC and Delphi, and I saw a whole new world.Learning IC Design As my development deepened, the connection between software development and hardware became increasingly close, and the lack of hardware knowledge became a barrier to my development. Chip technology is primarily controlled by foreign companies, which poses a significant constraint on system-level design. When a new product is released, the first profits are often the most substantial, and they are usually taken by IC companies, leaving domestic manufacturers with only scraps. Therefore, I decided to overcome my hardware knowledge barrier and planned to leave the communication industry to enter the IC design field. Of course, I understood that if I had very little knowledge of hardware, no IC company would be kind enough to hire someone completely clueless and train them. So I had to work hard to build a solid foundation and learn some relevant knowledge to prepare for the future. Just as I transitioned from MIS to communication, I read a lot of books on communication and worked on a RADIUS billing sorting platform for an ISP (Internet Service Provider). With this background, the communication company gave me this opportunity. The communication company I worked for was involved in system design and had several PCB layout hardware personnel, from whom I learned regularly.Related ArticlesRecommended:Learning Path to Improve Hardware Design Skills. Since I was working in software, I felt embarrassed to look at hardware materials in the company, so I started studying at home. When I first came to Shanghai, I worked overtime for a whole year, but later I stopped because I needed to find time to study. Usually, I would sleep around midnight and wake up at 5:30 AM. I started work early, and if the subway was not crowded, I would read on the way. Learning, of course, is not always smooth sailing. Some questions I genuinely did not understand accumulated, and I would ask hardware personnel for help. Their assistance significantly accelerated my learning progress. Without guidance, I spent half my time solving difficult problems, but often a single sentence from someone else could enlighten me, and I was very fortunate to have such a learning environment. In the following year, I learned to read hardware schematics and simple hardware design. Once I became familiar with hardware, people began to think I was someone who understood both software and hardware, and my colleagues became accustomed to it. At this point, I could confidently take hardware materials to the company without anyone raising an eyebrow. I take pride in having developed an IAD (Intelligent Access Device) system solution through my efforts, which included hardware and software selection and design. This solution was recognized by the company and my colleagues, which made me very gratified. Technology is interdependent; as my hardware skills improved, my software design also saw significant enhancement, allowing me to understand problems at a deeper level. The combination of software and hardware elevated my design level. The operating system I am currently writing, after compilation, I decompile the program into assembly, identify unoptimized code, and then adjust it in the C program. For example, many CPUs do not have dedicated multiplication instructions, which everyone should know. Performing a multiplication operation on such CPUs often consumes a lot of instruction cycles. Some friends might say they know this. I try to avoid using the multiplication sign, but it is often not that simple. Do you know how array indexing is implemented in C? If you take a close look at the disassembled code, you will understand that the C compiler sometimes generates displacement instructions for indexing, but sometimes it uses multiplication, and the efficiency of the two can be vastly different. Therefore, understanding these issues is crucial for maximizing system performance. I hope that friends who delve deeply into software will have the opportunity to learn about hardware and other related knowledge, especially those involved in low-level development and embedded design. This greatly aids in improving software technology; otherwise, you may know that something should be done this way but not understand why it should be done that way. Only after doing my job well do I learn technologies that are not directly related to my work, so that my superiors in the company do not feel annoyed. In the initial stages, I usually do not ask senior professionals but rather ask friends with less experience, such as recent graduates, because they often explain things to you in detail, while senior professionals may find your questions too simple and provide brief answers, making it awkward for me to ask more. Once my technical level reaches a certain point, I will then ask them, and they can give you more in-depth answers. My ultimate goal is IC design, not PCB, so my next step is to start learning IC design knowledge. None of my colleagues understand IC design, so I have to rely on myself for the road ahead. I have bought many related books and searched for a lot of information online. I spent a lot of time learning VHDL and performed some simple designs and simulations using software. I have not designed ASICs, only targeting FPGAs. I gradually understood the basic processes of IC design and also realized the difficulties of this path.Cross-Industry Development Changing industries is a very painful process, especially moving from a position of success to an unfamiliar role. In my previous communication company, I was the only employee who received five salary increases in two years, and both the company and colleagues gave me great recognition, often entrusting me with important tasks. Ultimately, I prepared to switch jobs and submitted my resume to a well-known IC design company in the industry. After a long interview lasting over four hours, I was generally satisfied with everything except for the salary, which was somewhat disappointing. I understood the reason; I was a newcomer to this industry without experience. The company owner asked if I could accept a salary of over 6000 yuan a month. I knew he was just following the rules. Thinking of my friends in the communication industry, most of them earn over 100,000 yuan a year, with many earning over 10,000 yuan a month, and they had introduced me to several companies with good compensation packages. At that time, I was very hesitant. I love my career, but I am also an ordinary person who needs to support a family and wants to buy a house and a car as soon as possible. Life presented me with a dilemma. To get closer to my dream, I chose this IC company, where my salary was not much different from that of newly graduated master’s students, but I had to endure it for the sake of future development; everything had to start over. After working at this new company for over a month, it started off very difficult, but I am gradually adapting. At the end of the first month, the Team Leader spoke to me, saying I was the most outstanding among the new employees, which made me feel very gratified; this was a recognition of my efforts.Conclusion Quoting a saying my father often says, “Health is the foundation of revolution.” Before coming to Shanghai, I studied too hard, often sleeping only three hours a night. My family said that if I continued like this, I wouldn’t live past 60. My relentless efforts affected my health; once, I suddenly experienced severe lower back pain in the morning, making it impossible for me to get out of bed. Learning and working is a long-term process, like a marathon rather than a sprint. It is essential to adjust the intensity of learning and work to ensure that I have relatively abundant energy every day. Previously, I changed industries out of personal interest, and I hope my experiences do not mislead friends; in fact, excelling in any industry can lead to great opportunities. Now, I pay great attention to the efficiency and techniques of learning. For instance, when learning a relatively unfamiliar technology, it is helpful to ask experienced individuals. You do not need to ask many questions; often, a few casual remarks from them can provide you with significant assistance.