preface

In the “About me” post, you should know that I am not a graduate student, but a mechanic who forced my way into Linux application development. I will introduce myself to you in detail this way the course of career change, I hope to inspire you.

I am learning machinery major, I am still very interested in machinery major, and then this major is also my own choice. Undergraduate results did not rank first, but also ranked the forefront of the major. When I was a master, I always ranked first in my major and won a national scholarship. Therefore, I still love machinery, and even want to go to the Chinese Academy of Sciences for further study (unfortunately failed), want to become a mechanical brick.

The turning point

But the turning point came after I graduated. Originally, I wanted to be a solid mechanical engineer, but by a strange combination of circumstances, my first job was transferred from mechanical engineer to electronic engineer. Although I was an electronic engineer, I did a lot of code work. At that time, I learned some Verilog and C#, and developed a test tool and a production PC in C#. It is said that the test tool is still used in the electronic department. That’s when I really got into programming and became fascinated by it.

However, I studied mechanics in school. The most I learned about software was C language and assembly language. But C language was learned ten years ago and was given back to the teacher. Therefore, in order to work, I began to learn programming. I get up at 6 am every morning, study for an hour, catch the bus at 7 am, and continue studying when I come back from work in the evening. Under such conditions I learned Verilog and C# and had a general understanding of STM32.

But that position isn’t all about software, it also involves electronic work. Everyone who makes software knows that when writing code, he needs an environment not to be disturbed. However, in my position, I can receive dozens of phone calls a day, which seriously interferes with my software development progress. Therefore, I decide to leave the company and become a real software engineer.

An introduction to

My second job was as an embedded engineer. Before going to the company, I systematically learned 51, watching Guo Tianxiang learned 51 microcontroller in ten days, and had a preliminary introduction to microcontroller. After really entering the job, I spent a month to systematically learn THE C language and read the C programming language written by the father of THE C language. Although written in the 1980s, the book still looks outdated. And the book is thinner, easier to read, more sense of achievement.

After reading “THE C Programming Language,” it’s best to look at C and Pointers, C expert programming, AND C pitfalls and pitfalls. These three books are known as the “three Swordsmen of C language”, after learning them your C language level is absolutely very high. In our line of work, C is the basic language, so make sure you get rid of C completely.

Later, I started to contact Marvell 88MC200 and 88MW300 for my work. These two are WIFI chips, but the essence is a single chip microcomputer, using the ARM M3 core. The underlying driver has been written by the manufacturer, what we need to do is to do the secondary development of applications on the basis of SDK. In this process, I gained a preliminary understanding of agile development and read the book 45 Habits of Effective Programmers: The Path to Agile Development.

In the second company, I learned the overall solution of the Internet of Things and gained a deeper understanding of the overall framework of the Internet of Things. At the same time, I have a comprehensive grasp of the skills required for embedded development, and have reached the level of being able to do an Internet of things project independently. Of course, during this period, I also learned the version control tool Git, read Pro Git and git authority guide. At the same time, I further studied STM32 systematically. The book I read was wildfire’s STM32 library development combat guide, but the video I watched was about spot atoms. I highly recommend the spot atom video, it’s really well done.

Because I am a career change, I know that the foundation is weak, starting point is much behind others, so I study very hard. I live near my office, which starts at 8, and I still get up at 6 and go to bed at 12. In my spare time, I studied in the company, reading codes, writing codes and adjusting codes. I even spent several weekends in the company. I devoted myself to my studies and gave up all recreational activities in order to catch up with my colleagues. This has continued throughout my tenure at the company.

A new challenge

Unfortunately, I had to leave after a year, because my wife was in Guangzhou, I went to Guangzhou to follow my wife. Because of my good performance in the interview and my good oral English, I was successfully employed by a fortune 500 company in Guangzhou. My new position is Linux application development engineer, using C++ development. At the time, I knew neither Linux nor C++, so it was very brave of the company to hire me.

From SCM to Linux is a relatively large span. There are three main directions for Linux: operations, applications, and infrastructure, and I chose the application direction. To do my job, I had to get C++ first. Fortunately, the company is a foreign enterprise, so I hardly work overtime, so I have enough time to study. However, the time of taking the bus adds up to three hours every day, so I can’t waste such a good time, so I bought an iPad, download a set of videos, and study on the bus. Of course, I also pay attention to protect my eyes, never read on the bus, and often look out of the window when watching videos.

Here’s a little bit about whether you use books or videos for self-study. I watch the video first and then read the book. Why? Because I personally feel that a lot of technical books are very thick, it takes a lot of time and energy to read them, and a lot of knowledge points are rarely used in the work, so we can temporarily skip them. The video will be relatively short, generally can watch in a few days, and the teacher generally only pick the key point. We all have precious time. I suggest that after you have fully mastered the knowledge taught by the teacher, you can further expand other knowledge by using books. However, whether reading a book or watching a video, must write code, must write code, must write code, otherwise it is very easy to cause high ambition low hand!

I still get up at 6 am and go to bed at 11 PM in my company. So 1 hour in the morning, 3 hours in the evening, 3 hours on the shuttle bus, a total of 7 hours a day can be used for study. On weekends, I would sleep in, get up at 7 and still go to bed at 11. I hardly went out on weekends, so I had a lot of time to study.

C++ was so difficult that it took me more than a month to get everything out of the video. After that, I started to read C++ Primer for further consolidation in my work. Other recommended books: Effective C++, design and evolution of the C++ language, C++ standard libraries. Check out the C++ must-read list on stackoverflow.

After learning C++, I learned the programming of Linux system, which also adopted the way of video first and then books. Whether it’s a video or a book, make sure to watch the best. There are so many videos and books on the market that choosing a bad material can be a waste of time and can be misleading. For the choice of video, you can go to the major training institutions, there are usually some free video materials for us to download.

For Linux application learning, there are mainly six parts: 1. 2. Basic operation; 3. System programming; 4. Network programming; 5. Database programming; 6. Shell programming. The following details one by one.

  1. As a Linux engineer, there is no doubt that you need a Linux environment. There are three ways to get a Linux environment:

    • Install the entire computer as Linux system;
    • Install a virtual machine in the computer, run Linux computer;
    • Windows +Linux dual system.

    Having a Linux environment is not enough; you also need to know how to configure it, how to connect to a Linux computer remotely, how to exchange files with a Linux computer, how to read code from a Linux computer on the host, and so on.

  2. Linux is known for having little or no interface, and almost all operations can be done from the command line. For operations personnel, there are quite a few Linux commands to master. For the application, driving direction of the personnel, just to master some basic common commands. For this part, many people suggest watching “Bird’s Private dishes”, but I think this is more suitable for operations staff, we don’t have to master so many commands.

  3. System programming Before learning system programming, be sure to learn Makefile first, which will improve the efficiency of subsequent learning. After the system programming, there are several major chunks: IO programming, process, thread, interprocess communication (including pipes, signals, semaphore, shared memory, etc.). These several parts of learning, the basic is about the same.

  4. Network programming network programming is mainly socket, poll, epoll, as well as the understanding of TCP/IP, at the same time to learn how to write high concurrency server.

  5. Database programming The contents of a database are not actually Linux, but are often used in projects. This part mainly to learn the basic operation of the database, and how to write a set of interfaces to operate the database.

  6. Shell programming The Shell is a scripting language for Linux. Although it is not as powerful as a high-level language, it can do a lot of things, and in some cases it is even more convenient than a high-level language. In addition to Shell scripts, of course, there are Python scripts.

Linux Application Programming Books recommended:

  • Advanced programming in UNIX environments. APUE, for short, claims to be the programmer’s Bible. It is not an API dictionary, it also tells a lot of operating system details, memory, file system, etc., is a rare good book. But it starts a little too high for beginners.
  • Linux programming. If you find APUE a little difficult to get started, you can choose this book to get started.
  • Unix/Linux System programming manual. This book claims to be beyond APUE. It is a relatively new book with new Linux/Unix features that APUE does not have. And it does speak better than APUE for some conceptual things. However, as to whether it can overload APUE, it has yet to be tested by history.
  • UNIX network programming. It is also a very classic book, mainly in the direction of network programming.
  • MySQL will know and will know. This book has been ranked number one in database sales on Amazon for a long time and is recommended for beginners who want to quickly understand database principles and MySQL. Fast food nature, concise and quick, small, and very thin, easy to read.
  • Linux Shell Script Guide. The book is thin and essential, and it strives not for the whole, but for the whole, so it’s perfect for getting started.

After learning the above six parts, you will be able to complete application programming in the Linux environment. Of course, there may be occasions when you need Python scripts. For example, part of my company’s project scripts are done in Python. For an introduction to Python, see the concise Python tutorial. But if you want to improve further, you need to read a lot of books. For scripting applications at the Linux level, some basic knowledge is sufficient.

The above is my Linux application development self-study road, although I still have a long way from the master, but I will share this self-study experience, hoping to help friends to take some detours, but also look forward to learning and improving with the master. Well, that’s it for today.

5T technical information, including: Linux, C/C++, Python, Raspberry PI, embedded, Java, artificial intelligence, etc. Public number inside reply into group, invite you to enter master such as cloud technology exchange group.