Idealized Knowledge System of Computer Science:
-∞. Theory
(Math, Number Theory, Graph, Automata, Geometry)
-3. Hardware
(Processor Architecture, Memory Hierarchy, Cache, System I/O)
-2. Machine-Level Programming
(Assembly, Executable File Format, Linking & Loading)
-1. Operating System
(Process & Thread, Memory Management, File System, I/O, Kernel & Drivers)
0. Programming Fundamentals
(Data Structure, Algorithms)
+ 1. Programming Language
(Compilation, C is a must,; C ++ Java recommended; C # Python JS, etc, optional)
+ 2. Advanced Programming Frameworks and Libraries
(Windows Programming, Unix/Linux Programming; STL, MFC, Boost, TR1, Qt, GTK optional)
+ 3. Programming Design and Software Engineering
(OOP Design Pattern is a must; Agile, RUP, Iterative, and other models are optional; Debugging and QA)
+ ∞. Applications
(Computer Network, Database, Http & Web, Concurrent Programming, Distributed System)
Theory is the ultimate goal of all basic applications
[-∞, + ∞]
The focus on software development can only be on natural numbers.
Beginners usually start from 1st and start from 1st. Before, they all hide and turn off a few things. Then you will naturally want to hide and turn off the things.
The following are the corresponding bibliography (only for those I have read and want to add)
Abbreviation:
Advanced Programming in the UNIX Environment => APUE
Computer System: A Programmer's Perspective => CSAPP
The Art of Computer Programming => TAOCP
Introductin to Algorithms, 2nd => CLRS
The C Programming Language => K & R
Design Patterns => GOF
-∞. Theory
(TAOCP vol.1, ch.1)
-3. Hardware
(CSAPP)
-2. Machine-Level Programming
(CSAPP, Intel x86 Assembly Reference Manual (Tool Book), Linkers & Loaders, to be supplemented)
-1. Operating System
(CSAPP, Modern Operating System)
0. Programming Fundamentals
(CLRS, TAOCP vol1.ch. 2)
+ 1. Programming Language
(Compilers, K & R, C ++ Primer, tive C ++, and Thinking in Java, to be supplemented)
+ 2. Advanced Programming Frameworks and Libraries
(Programming Windows, APUE, and MFC to be supplemented)
+ 3. Programming Design and Software Engineering
(GOF, little to be supplemented)
+ ∞. Applications
(Computer Network and MySQL Manual need to be supplemented)
Postscript
1. I have to get a glimpse of it on the paper. I am sure this is the case.
If you look at the theory without practice, it will become the same as pack teacher and I will only be fooled, sigh ~
To look at the lower layer, you need to write compilation and tracking programs. to read the API manual, you need to use the language features whenever possible in practice.
2. Do not win Thinking Beyond ages
Advanced languages are just tools. The author's design must have his own principles.
I don't want to be a driver's cook, not a good tailor. I want to think about Know How, then Know Why like God.
The Concrete Book tells you How Theoretical Book tells you Why
3 good memory is not as good as reading a book without taking notes.
This is like a cache for the content of each book. You need to check the note cache every time you need the knowledge fetch.
If fault occurs, add the content from the book to the note cache.
4 a us Naval General concluded that the language used by his opponent was not accurate enough to be one of the reasons for their failure.
Although English is not extensive and profound in Chinese, it can simplify the problem of complicated description to avoid fuzzy semantics.
Do not believe that you can express int (* func_ptr [10]) (INT, INT) (INT) in Chinese and English respectively.
It is better to read the English version unless the original book is written in Chinese.
My undergraduate course is not about computer science. My younger brother is connected to the bibliography opened in the amiao edition of Daniel. I feel that there are too many books. For those who are not from computer science, it is very difficult to read so many books. Carefully cut and then cut, column 1
Next I think the computer software discipline should have at least seven copies, it only covers "C Language", "Data Structure", "Operating System", "Computer Network", and half of "architecture" topics.
C ++, compilation principle, assembly language, database, Java, software engineering, object-oriented, and other peripheral theme I think is not absolutely necessary.
I have mentioned a lot of nonsense, but it is actually 7 books. I think it is really necessary to read, and I think it is more practical. I can finish it within half a year:
C language + Data Structure + operating system concepts + operating system practices + computer network concepts + computer network practices + general review
1. C Language
The C Programming language (C Programming language) (Brian W. Kernighan & Dennis M. Ritchie)
(Ps.
C language is the descriptive language of Computer Software. Each discipline has its own descriptive language. The descriptive language of computer software is C language. The operating system source code and
The source code of the TCP/IP protocol stack is the version of the Linux kernel. It is written in C language. You can understand the source code of the operating system and the source code of the TCP/IP protocol stack.
C language is necessary .)
(Ps. Dennis M. Ritchie is one of the creators of the C language. He and Ken Thompson created the C language only to effectively rewrite the UNIX system, and two people finally won the Turing Award for the UNIX system. "Hello, World !" Is the original of this book .)
2. Data Structure
Algorithms in C, Parts 1-4 Fundamental Algorithms, Data Structures,
Sorting, Searching (algorithm: C language for basic knowledge, data structure, Sorting, and search) (Robert Sedgewick)
(Ps. The source of Robert Sedgewick's book with Mark Allen Weiss is this, Donald
E. Knuth is The originator of Computer Software science.
Programming (computer Programming art), people say that learning software doesn't know Knuth is like learning physics doesn't know Newton, learning music doesn't know Mozart Beethoven,
The Art of Computer Programming is a little far away from us. I am really interested in turning over another and famous book called Concrete.
Mathematics (Specific Mathematics) and Concrete Mathematics are equivalent to The Art of Computer
The first volume of Programming is the author of the book. Because Donald E. Knuth is too common, so with Robert
Sedgewick, Robert Sedgewick is Donald
E. Knuth's students demonstrated Knuth's advanced theories in specific engineering languages. The books are called Algorithms in according to different engineering languages.
C, Algorithms in C ++, and Algorithms in Java, each of which is two. The first is Parts.
1-4 refers to "Basic", "Data Structure", "sorting", and "Search", and the second Part 5 refers to "Graph Algorithm ". Robert
Sedgewick's book is too big, not suitable for teaching materials, and does not cover Introduction
The newer theme in Algorithms, so with Mark Allen Weiss, Mark Allen Weiss is Robert
Sedgewick's student, he wrote according to the style of the teaching material, also covers "Introduction
The newer theme in Algorithms is the same as his teacher's style. The book is called Data ures and according to the different engineering languages used.
Algorithm Analysis in C, Data Structures and Algorithm Analysis in
C ++, Data ures and Algorithm Analysis in Java)
(PS.
Because Mark Allen
Weiss's books cover a wide range of fields, and the basic parts are taken over. However, the subsequent chapters can only be read without learning algorithms. Therefore, we recommend Robert
Sedgewick's book. But Robert
Sedgewick's book involves a lot of content, and details are also very detailed, so it is very difficult. If you get it done, the Foundation will be very solid .)
(PS. If this line goes deeper, it will be "Introduction to algorithms" (Introduction to algorithms ).)
(Another series of PS. Mark Allen Weiss is data structures and problem solving using.
C ++ and data ures and problem solving using
Java, this series is based on the object-oriented language features, with the implementation of data structures as an example, I have explained in detail how these object-oriented language features are used in specific problems.
The true understanding of C ++ comes from this book and is strongly recommended .)
3. Operating System
Operating system concepts (operating system concept) (Abraham silberschatz)
Modern Operating Systems (modern operating system) (Andrew S. Tanenbaum)
Operating systems-internals and design principles (Operating System-essence and Design Principles) (William Stallings)
(Ps. Three are operating system concepts, so you can choose one of them. Tanenbaum focuses on engineering practice, and programmers should like it. Stallings involves some macro concepts. I have not read Silberschatz, but it should also be recommended from multiple comments)
(Ps. Let's talk about Andrew S. Tanenbaum. The predecessor of linux is the minix he wrote for teaching purposes only. His other book Operating
Systems Design and
Implementation (operating system design and Implementation) introduces minix in detail, two volumes. The first volume is based on the operating system principle described in minix, And the next volume carries a CD, that is, the minix source.
. In a sense, the TCP/IP protocol stack is also part of the operating system, and the applications are also tied to the dead, therefore, the average operating system is also a computer network (for example
Dijkstra), Andrew S. Tanenbaum's "Computer Networks" is also highly respected .)
Advanced Programming in the UNIX Environment (Advanced Programming in UNIX Environment) (W. Richard Steven S)
(Ps.
Apue is the best practice book for operating systems. If you can finish it, you should be familiar with the interfaces of the operating system. However, it is indeed difficult to get rid of apue. apue is almost the whole book.
The most difficult one, but in this field, there is really no other relatively simple alternative. Someone recommends Beginning Linux
Programming (linux program design), in my opinion, is still too far away .)
(Ps.
If this line is deep, the operating system practice should include two parts: application and implementation. The application uses the operating system interface functions to implement the application, that is, the apue content; and the implementation is
It is the source code implementation of the operating system, which is generally the Linux kernel, but this part is very difficult, generally, only embedded, write-driven, or network security protocol stack change will look so deep .)
4. Computer Network
Computer Networks (Computer Network) (Andrew S. Tanenbaum)
Computer Networking: A Top-Down Approach Featuring the Internet
-Top-down method and Internet features) (James F. Kurose & Keith W. Ross)
(Ps. II is a computer network concept, so you can select either of them .)
Internetworking with TCP/IP Vol. III: Client-Server Programming and
Applications -- BSD Socket Version (using TCP/IP for Internet interconnection Volume 3:
Customer-Server programming and Application) (Douglas E. Comer)
Unix Network Programming, Vol. I: Networking APIs)
(Ps. As a network application practice, W. Richard
However, unlike apue, unp has the "Internetworking with TCP/IP Vol.
III can be used as an alternative, Internetworking with TCP/IP Vol.
III is much simpler than unp. It is completely from the beginning, and it is a style that has been repeatedly described in detail. Therefore, experts may not like it and may think that it is too simple to speak .)
(The fame of PS. W. Richard Steven S is indeed well-known. In fact, I have written a total of six books, in addition to the apue mentioned earlier, and the UNIX Network
Programming (UNIX Network Programming) two volumes, "TCP/IP multicast stracted" (TCP/IP details) three volumes, originally "Unix"
Network Programming is planning to write three volumes. Unfortunately, the first two volumes of W. Richard Stevens will soon die. TCP/IP
Volume stracted Vol. I: The Protocols (TCP/IP details Volume 1:
Protocol) is the best book to learn about network protocols from a practical perspective. Similarly, computer network practices should also include applications and implementations. Applications use the socket interface functions to implement network applications, that is
Internetworking with TCP/IP Vol. III or UNIX network programming, vol.
I. The implementation is the source code implementation of the TCP/IP protocol stack, that is, the TCP/IP protocol stracted Vol. II:
Implementation (TCP/IP Volume 2: Implementation) or internetworking with TCP/IP Vol II:
Design, Implementation, and Internals:
Design, Implementation, and internal composition. Similarly, implementation is much harder than application .)
5. Review & Computer Architecture
Computer Systems: A Programmer's Perspective)
(Ps. from the back to the front, let's take a look at the previous articles, because the books are written from the underlying hardware to the software layer. For those of us who do the software, the previous part of the computer architecture can only be viewed as much as possible. At the beginning of Part 1 of the book, some chapters detail the content of the "Link". I personally think it is a very important part .)
Slave --------------------------------------------------------------------------------------------------------------------------------
Reply to jokerlee's comment
Thanks to jokerlee for adding two points. I also want to add my views on these two points.
First, the basis of assembly should be the underlying basis of C language, which should include at least three, assembly language, computer architecture, and compilation principles, in the entire computer science system
The door is important. However, this bibliography is intended for developers who do not have a computer science background or have a poor computer base and want to engage in computer software Science (in fact, it is our lab,
All communications are transferred ). Therefore, the reason why I omit these seven books is that I am afraid there are too many teachers and younger siblings. It is difficult to read a book because it is easy to read the seven books.
I am afraid that my teachers and younger siblings will lose their confidence in learning too much. Therefore, to minimize the number of bibliography entries, I have to try to cut down the three keys focusing on hardware and underlying content. In addition, the first half of the csapp is the three
The content should cover most of the underlying knowledge, and I hope that the teachers and younger siblings will still be able to flip the dragon books after these seven books, so it would be better.
Second,
With regard to object-oriented, software engineering, and design patterns, the design patterns are the object-oriented techniques summarized, so there are only two things here, that is, object-oriented and software engineering, these two are important in modern software science,
For beginners, I do not recommend these two types of content. Looking back at my learning experience, the learning sequence is reversed. I used to listen to too many design patterns, man-month myths, and
Code Daquan. In fact, the content of object-oriented and software engineering should not be valued by a basic student. If a function is not well written, it is about object-oriented, and an application is connected.
I do not know the principle of the program to complete its functions. I will talk about software engineering. This is a simple truth. Just like learning cooking, the first thing we should learn is oil, salt, and soy sauce, instead of having to look at the recipe of the Buddha dance wall first.
Before reading these things, you can only seem to understand and understand them. So I think that in the seven books in the bibliography, we should not consider object-oriented and software engineering as important. They are at least not in this gradient.
Content that should be included should be learned in this gradient, and object-oriented and software engineering should be placed in the next higher gradient. However, the span between the two gradients is very large.
Span is the Programming Practice, which takes a long time to accumulate.
To put it another way, most people in the Chinese technical community are actually positioning themselves with the set of software schools. There is no such thing as the advantages and disadvantages. After all, the market needs many J2EE programmers. But its positioning is
In a completely different way, the software school first looks at the Java grammar book, and learns at most SQL statements, and then directly starts object-oriented and software engineering, bibliography
These seven books can be completely ignored. I think this should be an important reason for the technical community to respect object-oriented and software engineering.