Many programmers, including computer-born programmers, as well as non-students who have become programmers through self-study, are basically running into technical bottlenecks after a year or two of work, which can lead to a long period of confusion.
In this period of confusion, many programmers are thinking about whether they are suitable to be a programmer, whether to be a lifeprogrammer, whether to move to other professions, such as product managers and so on. If the answers to these questions are not answered quickly, these programmers will be beset by these questions, which can be difficult and wasted.
Almost all programmers’ introductory learning is through the Windows platform before it is gradually expanded to the Linux platform. Therefore, we recommend that you install the genuine Windows 10 key and program training through VS Code.
Programmers must have a firm grasp of basic courses and expertise
The purpose of this article is to help confused programmers to be more determined to keep going on the programmer’s path, or even go further.
Almost all programmers, when they first started programming, started with specific programming languages. Since advanced languages did not appear in the early days, early programmers were exposed to assembly languages, machine languages, and even direct electronic circuits to program.
In recent decades, with the advent of advanced programming languages, programmers have first come into contact with these advanced languages, such as Python, Java, C/C++, C#, PHP and so on.
For students who are just starting to learn programming, being able to make some software in the advanced language you are learning is the fundamental driving force and the ultimate goal of learning. So, at this stage, everyone is hungry and tireless lying about how to write some software such as snake-eating, course management systems, etc. in programming languages such as Python, Java, and C.
However, in the process of continuous learning, beginners often feel confused or confused, and this feeling can not be described, can not be said.
- Java is object-oriented, while the C language is process-oriented. But what is object orientation and what is a process orientation? Do I really know object-oriented? Why don’t I realize the benefits of object orientation?
- Java is a static type language, while Python is a dynamic type language. So what is a static type language? What is a dynamic type language?
- For example, when learning multithreaded programming, you often come across the concepts of lock, mutual exclusion, semaphore, and so on, what do these concepts represent?
- For example, the newly emerging Kotlin language has better grammatical sugar than the Java language, what is the Syntactic sugar?
Such questions will appear from time to time in the path of our study, and even hinder the pace of our progress, so that we can only float on the surface, can not grasp the essence of technology. I hope that each programmer can seriously study and master the following courses (computer courses for beginners & computer courses for seniors):
- Digital circuits
- Computer composition principle
- Assembly language
- Computer operating system
- Principle of computer compilation
- Discrete mathematics
- Data Structures and Algorithms
- Computer network
Of course, programmers need to learn more, and the above list are computer undergraduate courses, and these computer courses for high school students are very important.
The figure above is a hierarchical diagram of the computer system. From bottom to top, it represents everything from computer hardware to software. The bottom layer is the computer hardware part, and the top layer represents the application we write in the programming language. Each floor here represents one or two courses in the above eight courses.
- Hard Linked Logic: It represents computer hardware, that is, electronic components. These two lessons (Digital Circuits and Computer Composition Principles) are devoted to explaining how electronic components represent 1 and 0 in a computer, and how these electronic components fit and how they are calculated. This is the root of the computer, and the programmer should master.
- Microprogram: It is a hardware level program. There are no specific courses to introduce at this level, but this layer can be understood by combining computer composition principles and assembly language.
- Machine language: In the initial impression, when it comes to machine language, the first thing that comes to mind is the 01 code. This is the dividing line between software and hardware. This layer can be understood through assembly language.
- Operating system: It mainly has two functions, one is to provide an interface for the upper programming language, and the other is to manage the underlying hardware operations. At this level, many and very important concepts are introduced, such as threads and processes, concurrency, semaphores, locks, memory management, and so on.
- Assembly language: Early programmers first programmed with holes in paper tape, which can be understood as programming directly with 01. Then, in order to facilitate development, the assembly language was developed, and some basic program logic can be realized by simple commands such as “add”. High-level languages appeared later. Therefore, understanding assembly language has a direct and important role in understanding high-level languages, and the bottom layer of many programs is currently implemented in assembly.
- High-level programming language: Before the high-level language is run, it will usually be compiled by the compiler or interpreted by the interpreter. The compiler and interpreter are described in the course of computer compilation principle. Concepts such as syntactic sugar are also introduced here.
The last three courses of discrete mathematics, data structures and algorithms, and computer networks are not reflected in this structure diagram, but these three are throughout the entire computer system structure. The relevant knowledge points in these three courses are used more or less in the various levels mentioned above.
The study of these courses is not something that can be done overnight, nor can it be fully understood during college. However, if it is possible, you still have to master as much as you can, and the rest is not particularly clear. You need to slowly understand and understand it in your future work.