In other words, “Learning programming, how do I choose which language to learn?” ** This should be an annoying bug on the mind of most beginners!
If you have the mindset that “learning a language will help you find a job”, you may have a very limited vision and learning mindset. “Software personnel should take a long-term view, try to go to the middle and senior direction, improve their core competitiveness, will not be eliminated by The Times.” Sincere advice from a senior.
So, if you want to make a career out of work and get to know the backbone of software programming, then C/C++ and other low-level languages, you must learn and master.
C++, in particular, as an extension and enhancement of C, has been the development language chosen by big companies.
Nowadays, self-study has become a common trend, and there is no shortage of C++ gurus who self-study…
However, if you can’t find the feeling and practice writing code in the early stage, your learning efficiency is very low. Here we find a comprehensive C/C++ learning program that many beginners agree with.
C/C++ Employment Field and Learning Direction Plan
** Embedded
** (I) ** Embedded employment field
1. Employment Field:
Internet of Things, smart home, smart medical, smart automotive electronics, smart hardware product development, etc
**2. Specific Position:
Embedded software engineer, embedded hardware engineer, embedded system engineer, embedded application/driver/kernel/transplant engineer, etc
(2) Embedded knowledge architecture system
**1. ** understands hardware
-
Understand some principles of hardware, at least understand the schematic diagram, will design schematic points;
-
PCB design software Altium Designer, PADS, etc.
-
Will structure design, will be welded plate, delivery of professional plate company plate system
C/C++ language and **** data structure and simple algorithm
Basic C/C++ syntax, data types, arrays, Pointers, structures, linked lists, classes, templates, file operations, queues, stacks, etc
3. Basic of Linux operating system
-
The concept and installation method of Linux operating system;
-
Detailed knowledge of Linux directory structure, basic commands, editor VI, compiler GCC, debugger GDB and Make project management tool;
-
Knowledge of Makefile Shell script writing;
-
The construction of embedded development environment;
-
SDK does secondary development
4. Linux**** network programming
-
TCP/IP protocol, SOCKET programming, TCP/UDP network programming, HTTP;
-
In the direction of Internet of Things, we should know more about some network interfaces related to cloud storage, such as Amazon and Ali Cloud
5. Peripheral protocol and RADIO frequency
-
Simple communication interface: UART, I2C, SPI, CAN, USB, GPIO, WiFi, SDIO chip;
-
Network communication interface: Ethernet;
-
Other input interface: keyboard, mouse, AD device, LCD, 433, 2.4g wireless communication module;
-
In the direction of Internet of Things, be sure to be familiar with MQTT protocol
6. Understand the principle of embedded platform system
-
System resources, clock controller, power management, abnormal interrupt controller, NAND Flash controller and other modules are ready for the building of the underlying platform;
-
Linux platform includes: kernel reduction, kernel transplantation, cross-compilation, GNU tool use, kernel debugging, Bootloader production and principle analysis, root file system production, as well as to add their own modules to the kernel, complete mobile software
7. Drive development
-
Familiar with Linux kernel mechanism, driver and user level application program interface, master the system to the device concurrent operation;
-
Familiar with the working principle of the developed hardware, have the basic knowledge of ARM hardware interface;
-
Familiar with processor resources, master Linux device driver framework;
-
Familiar with the common Linux advanced character device, block device, network device, USB device driver development;
-
At work, I can independently be competent in the development of low-level drivers and do well in configuration
** (**** iii) ** Recommended by embedded company
-
Front-line: Huawei Haisi, ZTE, C/C++
-
Second line: Mill Technology, Zhou Ligong, Mediatek
(4) Recommended learning projects (source code attached)
An intelligent lock factory lock after the board source
2. Desktop Application Development (MFC/QT)
(A) Desktop application employment direction
Traditional industrial companies, industrial control, digital image software, graphics rendering engine, PC, reverse, UI, video conference, etc
(2) Desktop application knowledge architecture system
1. **C/**C++ language, common data structures and common design patterns
-
Basic C/C++ syntax;
-
Data types, arrays, Pointers, structs, linked lists, file operations, queues, stacks, binary trees, singletons;
-
Design patterns such as factory pattern and policy pattern
2. Controls and component applications
-
VC++ control, components, MFC document class;
-
Menu, Windows message;
-
Sendmsg function, dynamic link library;
-
Qt Core, Qt GUI, Qt Multimedia, Qt Multimedia Widgets, Qt Network, Qt QML, Qt Quick, Qt SQL, Qt Test, Qt Widgets and other basic modules of Qt (Qt Essentials);
-
QPainter drawing system and QSS style sheet are applied to realize various self-drawing Windows
3. Operating system principle and IDE
-
Windows core programming, multi-threading, multi-process, thread synchronization and inter-process communication;
-
Character parsing protocols such as XML and Json;
-
Familiar with VS and QT environment
4. Network programming
-
TCP/IP protocol, socket programming, HTTP;
-
Focus on learning network programming related API;
-
Understand HTTP protocol and its implementation method;
-
Familiar with UDP broadcast, multicast principle and programming method;
-
Master the design of hybrid C/S architecture network communication system;
-
QTCP, QHttp network programming;
-
Asynchronous non-blocking framework IOCP etc
5. Debugging technology
-
IDA+ WinDBG Advanced Debugging Windows;
-
Generate dump file for code debugging;
-
Use the DebugView tool for debugging
6. Database design
-
Master the practical skills of SQL language;
-
How to use SQLite, Oracle and MySQL
7. Good frame design
(3) Recommended by desktop application companies
Dao Tong Technology, deep conviction, toutiao, Thunderbolt, Baidu, 360, Cool Dog
(4) Recommended learning projects (source code attached)
Super task manager: Processhacker
Image processing and audio and video development
(a) Image processing and audio and video employment direction
Streaming media, research institutes in universities, Toutiao (Douyin), Youku
(2) Image processing and audio and video knowledge architecture system
**C/**C++ language and design patterns
-
Basic C/C++ syntax, data types, arrays, Pointers, classes, templates, etc.
-
Common design patterns
2, OpenCV/OpenGL knowledge system and various image formats and video formats
-
OpenCV environment configuration, digital image processing knowledge;
-
Image filtering, image recognition, expansion, corrosion, square distribution, binarization, gray, target recognition, detection, positioning and other image processing related technologies;
-
Pattern recognition related algorithms such as binarization, SIFT feature, edge contour detection, etc.
-
Computer Graphics/Computer vision/Camera Calibration;
-
Three-dimensional modeling;
-
Basic concepts of various image formats;
-
RGB yuv JPG. FFmpeg common codec format usage;
-
Write MP4 container
3. Operating system principle and **** network programming and related protocols
-
Linux/ Windows operating system core principles, threads/processes;
-
TCP/UDP RTMP RTP RTSP
4. Good algorithm skills
-
Master the principle and basic model of deep learning algorithm;
-
Familiar with deep learning open source frameworks (e.g. TensorFlow, Keras, Caffe, etc.);
-
Crowds, gestures, face recognition
5. Good knowledge of **** mathematics
-
Familiar with MATLAB, matrix theory;
-
Have the ability to read SCI papers
6. Open source code
-
Audio and video: Live555; Webrtc;
-
Image processing: OpenCV source code
(iii) Recommended by image processing and audio and video companies
Toutiao, Youku, Samsung, SONY, Tsinghua Tongfang, Tencent Research Institute, some foreign companies
(4) Recommended learning projects (source code attached)
Cross-platform streaming media solution: Live555 project支那支那
**Linux background service development
(I) Employment direction of Linux background service
-
Enterprise distributed server, smart city, smart traffic and other scene AI background system;
-
Game background service development;
-
Cloud computing, banking system, enterprise Web server, etc
(2) Linux background service knowledge architecture system
C/C++ language and design patterns
Basic C/C++ syntax, data types, arrays, Pointers, structures, linked lists, file operations, queues, stacks, etc
2. Operating system **** Basic
-
Linux operating system concept, installation method, thread, process;
-
Detailed knowledge of Linux directory structure, basic commands, editor VI, compiler GCC, debugger GDB and Make project management tool;
-
Knowledge of Makefile Shell scripting
3, Linux system programming **** and Linux operating system
-
Focus on standard I/O library, multi-process and multi-thread in Linux multi-task programming;
-
Interprocess communication (PIPE, FIFO, message queue, semaphore, shared memory, signal) synchronization and mutual exclusion, access control of shared resources and other important knowledge;
-
Improve the understanding of Linux application development and code debugging ability;
-
Linux file system
4. Network principle and network programming
-
TCP/IP protocol, SOCKET programming, TCP network programming, UDP network programming, HTTP;
-
Focus on learning network programming related API;
-
Familiar with HTTP protocol and its implementation method;
-
Comparing network framework, analysis of the source, such as the ACE/ICE/ZMQ/Libevent/Muduo, etc
5. Database and middleware
Mysql, Redis nginx mongdb and other middleware
6. Cluster and distributed architecture
7, high performance components of the ability to make wheels high concurrency IO
(iii) Recommended by Linux background service company
Tencent, Huawei Cloud, netease games, Mi cloud platform, Huya live broadcast, Kuaishou backstage, etc
(4) Recommended learning projects (source code attached)
Distributed version control system: Git source code
Five, reverse and anti-plug-in
(a) reverse and anti-plug **** employment direction
Firewall, Intrusion detection/Intrusion prevention, Web application firewall, Online behavior management, VPN, Anti-ddos, database security, data leakage prevention, vulnerability scanning
(2) Reverse and anti-plug **** knowledge architecture system
1, C/C++ language reverse representation and X86 assembly language
C language /C++ reverse syntax representation, memory distribution, X86 assembly language, array and pointer reverse representation, function reverse representation;
Learning reverse if you do not master some assembly, is basically a blind man touching an elephant, can only rely on luck.
With the popularity of 64-bit machines, there will be fewer and fewer 32-bit programs. The difficulty of learning this part is that there is a significant difference between 64-bit cpus and 32-bit cpus, even a huge difference. You should pay attention to distinguish between them when learning.
2. Operating system **** and windowsPE
-
Operating system process/thread concepts, mutex, semaphores, events, etc.
-
PE header, import/export table;
-
Relocate/resource/lazy load import table
3, the game against plug-in /HOOK/ injection
-
Anti-plug-in attack and defense based on injection;
-
HOOK – based anti-plug-in attack and defense;
-
Anti-plug-in attack and defense based on CALL;
-
Window based plug-in detection;
-
Reverse analysis of game opening
4. Encryption/coding algorithm
-
Basic, such as xor, URL encoding, etc.
-
Base64 (high visibility) CRC check algorithm MD5;
-
Learn tea and AES DES
It is suggested here that we can learn some algorithms of forward development first. Data that has been processed by different algorithms will have some characteristics; I’ve seen it a lot, and a lot of times it helps when you’re working backwards.
5. Tool classes
-
OD, CE, Windbg and other debugging tools;
-
Wireshark, X64DBG, Frida, Visual Studio, some of which are development tools, such as Visual Studio;
-
Although these tools are development tools, they contain many gadgets, such as spy++, depends, etc
6, framework,
-
There are many reverse frames, such as Cydia, Xposed, Substrate, GHidra, etc.
-
Platforms and conditions vary slightly for each framework, for example:
-
Cydia works backwards under apple;
-
Xposed is Android under the reverse;
-
Substrate is an interception scheme;
-
Ghidra is an integrated environment and so on
7, other
Reverse and reverse plug-in this part is more special, their knowledge point is endless.
In addition to network protocols (Http, Https, FTP, SSH), CPU architecture (ARM architecture, x86 architecture, 64-bit architecture, machine code), operating systems (Windows, Linux, Android, iOS), driver development interrupt principle, loading and unloading of dynamic libraries, and file formats also need to be grasped.
The content of file format is also complex, simple including WAV, BMP, APK file format; With a certain understanding, you can try to parse PE and ELF file formats; You can also learn PNG, JPEG, JAR, dex file formats. Of course, there are some undocumented file formats, such as LuAC and OCX, that are worth learning and exploring.
(three) reverse and anti-plug **** recommended
Qi an Xin Group, Qihoo 360, Deep convinced, Qiming Stars, Green Alliance Technology, Kingsoft
Interested or question partners, welcome to add comments or private letter I exchange.