Today's recommended is an old post, the Nanjing University of Mr. Sir's "Hu Yu" and later two additional posts. Count is more than 10 years ago post, I know the post from the Nanjing University BBS, Baidu a bit, but did not turn to the original. But Baidu to a lot of irresponsible reprint, I think I this is not a copy of it. That year, I have a very respectable seniors to recommend this article, let me benefit (seniors young and arrogant because this matter also ate a lot of losses, he himself has been very guilty).
These posts apply to the study of computer theory, for undergraduate students want to learn computer well, or to work after the system of learning computer and mathematical theory of students very helpful.
========== reprint need separation line ==========
"Hu Yu Learning (theory) Computer"
Sir (a astringent)
I also come to pretend to be a master, talk about learning computer a little personal experience. Since I do the theory, I will focus on the theory first.
Remember that year freshman, just when the undergraduate, six hours a week math analysis, six hours of advanced algebra, daily operations (then is the 6th work system). Quite a few students exclaimed the wrong door: what is the line we are going to read? Yes, you did not go the wrong door, this is the (then) NTU Computer department. The tradition in the department is to cultivate people who do academic research, especially theoretical research. The theory of computer research, after all, is mathematics, although perhaps the orthodox mathematicians in the eyes of non-mainstream mathematics.
Mathematical analysis of this stuff, we learn computer people have a very complex feelings. Love It is that it is the first door, but also the most credit of a math class, and long-term postgraduate course. 94 can be selected before the mathematical analysis and Advanced algebra, and later to the famous so-called "engineering Mathematics One." Its importance is evident. Hating it is that it seems like a rare opportunity to be useful, and thinking is quite different from the discrete/limited work we do. The strange phenomenon that appeared in the year is: the computer department students of high School Mathematics Foundation in one of the best (hope not offend other departments of classmates), teaching hours is second only to the mathematics department, but after learning the effect is almost the bottom of the first. The reason for this is thought-provoking.
My humble opinion is: Computer class students, the requirements of mathematics is different from the mathematical system, and the physical difference is greater. The so-called "higher mathematics", usually non-mathematics majors, is simply to delete the more difficult theoretical parts of mathematical analysis, emphasizing the formula calculation. And for computer science, the most useful thing in mathematical analysis is precisely the part of the theory that was deleted. To speak a little bit, to the computer department students, the pursuit of the calculation of the so-called "engineering Mathematics One" has been thoroughly into the Magic road. Remember a pile of curved area of the formula, it can be counted to understand the mathematical analysis?
Chinese mathematical analysis of the book, generally believe that the Peking University Zhang Sheng Teacher's "mathematical analysis of the new talk" for the best. I personally think that the "Math Analysis course" of the Department of Mathematics is also good, at least in the typical South style, we look cordial. It's OK to learn whichever one you want. In case your maths is too good, the two books are not enough to eat, then go to see Fihkingorts "Calculus Tutorial" well--but I think there is no need, after all, you do not want to transfer to the math department.
Demidovich's "Mathematical Analysis of Problem sets" is basically a computational type of dongdong. If you're going to test that "engineering math One", you can do it. Otherwise, do not do.
The so-called higher algebra in China is equal to the linear algebra plus a point polynomial theory. I think there's a good side to this, because it allows students to feel that algebra is a structure rather than a bunch of matrices tossing and turning. That year we used Lin Chensen, Sheng Pine Two teachers made up of "advanced algebra", feel quite comfortable, I still keep the textbook. This book contains a fairly comprehensive overview of the basic elementary results of polynomial and linear algebra, as well as some useful and deep content, such as Sturm sequences, shermon-morrison formulas, generalized inverse matrices, and so on. Can say, as an undergraduate if can thoroughly understand this book, can calculate master. Later it was published in the South Big publishing house, but it seems that after the bounce has not been used again.
The better advanced algebra textbooks in China and the Tsinghua Computer Department of the book, Tsinghua Publishing house published, bookstore a lot, a look will know. It's not much worse than the NTU.
But neither of these books can be said to be perfect. From the point of view of abstract algebra, the results in higher algebra are just some examples of the nature of algebraic systems. Mr. Mozongjian's "algebra" was a profound discussion. However, Mr Mo's book is very deep, as undergraduates may be difficult to accept, it is advisable to wait until they mature some re-reading. Probability theory and mathematical statistics This course is very important, but there are a few things missing.
The missing thing is a random process. To graduate has not heard the Markov process, this is the computer department student's disgrace. How do you analyze networks and distributed systems without a random process? How to design randomization algorithms and protocols? It is said that Tsinghua computer department has "random mathematics", has long been a compulsory course. I am ashamed to be a student of engineering school, as a person who has been born of "Science computer Department".
In addition, the discrete probability is of special importance to the students of computer science. Now, some schools in the United States have opened a simple "discrete probability theory" course, simply delete the continuous probability, the discrete probability is deeper. We do not have to do this, but there is no doubt that the discrete probabilities should be more emphasized.
The method of calculation is the last class taught to us by the Department of Mathematics. The average student's attention to this course is limited, and it doesn't work. In fact, do graphic images can not be separated from it. Moreover, in many scientific engineering application computation, all take the numerical value as the main.
There are two extremes in this course: one is classical "numerical analysis", which fully speaks mathematical principles and algorithms, and the other is the increasingly popular "Science and Engineering Computing", which simply teaches students to program with software packages. Several teachers of the South Mathematics department did a great deed and published a very classical textbook of the former: "Introduction to Numerical Analysis" by German stoer. If you can learn the most obvious of the book One-third, even if there is no white on the calculation method of this course! The latter one seems to have not been keeping up with the trend in China. However, as long as you have the opportunity to put a MATLAB on your computer, you can completely taught.
In this department, we usually open a discrete mathematics, including set theory, graph theory, and abstract algebra, in addition to open a single mathematical logic. This arrangement, mainly because of the south of the logical tradition: a lot of teachers in the department are janitor, even Mr. Sun is a logical professional background (see Mr. Sun's Readme).
But is it too much time to squeeze in a discrete math class? In addition, the computer department students do not understand the combination and number theory, but also a huge flaw. To do the theory, do not understand the combination or the number of losses can be too big.
From the ideal state, it is best to separate six courses: Set, logic, graph theory, combination, algebra, number theory. This is certainly unrealistic, because there are not so many classes. Maybe in the future we can open a class: Set and Logic, graph theory and combination, algebra and number theory.
No matter how the class is opened, students always have to learn. Let's talk about the above three groups separately.
Classical set theory, Beijing Normal University out a "Basic set theory" good. Zhu Yu published the teacher's "set theory Guide" may have a higher opinion, but his book is too formal and arduous to read.
Mathematical logic, Mr Mo's book is naturally Classic. However, we have to admit that it is not enough to read this book for ages. In particular, the proposition/predicate calculus itself has a lot of different kinds of lectures, more to see a few can greatly broaden their horizons. For example, Lu Zhongwan teacher's "Mathematical Logic for Computer science" is good. Mr. Zhu also has a "mathematical Logic tutorial" book, but also read more laborious.
In general, it is not difficult to set up/logical hands, but the more backward the more unfathomable. Suggested that interested students read Zhu's "Introduction to Mathematical Fundamentals"-this book a little time a brief history of the style, talk about the wonderful place, the so-called "hype, Wonderful rain colorful", dizzying. After reading, you have a general understanding of the most fundamental problems in mathematics/philosophy, and how high the mountains are and how deep the sea is.
After learning the above books, if you still have the energy to delve deeper, try the introduction to axiomatic Set theory and a Course of mathematical Logic in the GTM series. Both have the introduction of the World Book. If you can handle these two, you can say that in the logic of the real door, you will not have to waste time to listen to my blind talk.
It is said that there are only 30 people in China who understand graph theory (Chen Daoxu teacher quoted Zhang Kemin teacher when he was in class). The remark is not false. Figure theory of this stuff, skill is too strong, almost every problem has a unique method, people headache. But it is also the charm: as long as you are creative, it can give you a sense of accomplishment. So there is nothing to learn about graph theory, do the problem.
In the domestic graph theory book, Wang Shuhuo Teacher's "graph theory and its algorithm" is very successful. On the one hand, its content in the domestic textbooks are very comprehensive. On the other hand, its emphasis on algorithms is well suited to the computer system (which was originally a textbook for hkust computer science). With this book as the main, and then refer to a few translations, such as bondy&murty "graph theory and its application", post and Telecommunications publishing house translation of "graph Theory and circuit network" and so on, so-so, for undergraduates enough.
Further, the World Book introduction has the GTM series of modern Graph theory. This book is really classic! There seems to be another one in the country that has published a translation version. However, to learn this level, or read the original good. Fix this book, also marked the graph theory into the door, hehe. The combination feeling is not too suitable for homemade books. Or read Graham and Knuth and other people co-author of the classic "Specific math" bar, there are translated version, the West.
Abstract algebra, the domestic classic for Mr. Mozongjian's "algebra." This book is the University of Mathematics, the Department of teaching materials, won praise. For undergraduates, however, the book is too deep. You can learn some other textbooks first and then look back at "algebra." International classics can be more, the GTM series has a lot of. Recommend a not classic, but the simplest, the easiest to learn: http://www.math.miami.edu/~ec/book/
This introduction to Linear and abstract algebra is very easy to understand, and combines abstract algebra with linear algebra, which is ideal for beginners. But please pay attention to copyright issues, do not violate the law oh.
In number theory, there are classics in China and "Elementary Number Theory" (Pan Brothers, Peking University Edition) known for its difficulties. Again, there are more classic (world-Class) and more difficult "number-theoretic guides" (Mr. Hua's masterpiece, the Science edition, the Nine Chapters bookstore reprint). It is enough for undergraduates to get a rough idea of the basic chapters. But this is only elementary number theory. After graduating from college, you have to learn to calculate number theory, and you must read English books, such as Bach's introduction to Algorithmic numbertheory. The fundamental of theoretical computers lies in algorithms. It is true that the system has been designed and analyzed for undergraduates. Looking around the Western world, there is no more than a three-stream computer system that does not take the algorithm as a compulsory.
The algorithm textbook is currently recognized as the best introduction to Algorithms Corman. This one is enough for getting started, and there is no need to refer to other books. Nan da has translated and published this book, the Chinese name is "modern computer commonly used data structure and algorithm". Pie seems to provide a link to the online course, and I don't have to talk nonsense.
Finally, the formal language and the automata. We have used bupt textbooks, we should say that it is clear to write. However, it is important to emphasize that formal languages and automata are primarily used as computational models, rather than as compilers. In fact, the compiler front end is already dead field, without any open problem. If this is the case, we have absolutely no need to learn formal language-using YACC or whatever. The bupt, in the depth, in the relationship with the computable has a greater limitation, the modern sense is not enough. So it is suggested that interested students read English documents. However, the English book is not much good, and the domestic does not seem to introduce the teaching materials.
After getting started, it is very interesting to compare the formal language with the model defined in automata, and the model defined by recursive function in mathematical logic. Now know, what is called "the beauty of palace, the rich of the Bai"!
"Hu Yu Learning Computer--Beyond theory"
If the computer has only theory, then it is just a branch of mathematics, not an independent science. In fact, beyond the theory, there is a wider sky in computer science. I have always believed that 4 years is not enough to learn the basic knowledge of computers, because the face is too wide. A first-class computer Department of excellent students should not be just a programmer, but he must first be a master programmer.
When I was in college, the first professional class was programmed, and now it seems to be an introduction to computer science? No matter what the name is, in short, the person who reads the computer relies on the program to eat.
There was a debate last year in computer science about which of the first programming languages to use. I personally think, in which language belongs to the stub, the key is to develop good programming habits. When the teacher told us that it would take one weeks to build a new language. Now I don't think it's going to be one weeks at all--the premise is to get the basics right.
There are two different methods of data structure: one that treats it as a primary algorithm for lowering requirements, and the other as an advanced programming class. At present, the domestic curriculum seems to be between the two and slightly biased towards the former. I personally think that if there is another required algorithm class, I am afraid that the latter purpose is more important.
The domestic popular data structure book also has two kinds: Peking University's Red Book (Zhuoqun Wait, Higher Education edition) and Tsinghua's Green Paper (Min Wait, Tsinghua Edition). There is little difference between the two books. The red Book is slightly deeper in theory, and certainly far from the strict algorithm book. The Green Paper is easier to accept and has a good problem-sets, but I think it's too good for students to write in pseudo-code. It is best to put the algorithm code after debugging, in order to exercise programming ability.
Compiling prophecies and microcomputer principles are two extra annoying lessons. Your math/theory base is better and less expensive. The order between the two classes is like a chicken or an egg first, whichever you learn first, involves something in another class. So, just calm down and slowly pondering. This is the typical engineering class, do not need too much wisdom and insight, but need to stones the gradual realization.
The books on the two courses are not difficult to find in the computer bookstore. Get some of the latest, check it out.
Analog circuit This stuff, now not only the computer department students do not, electronic students are mostly afraid. If you really want to hardware and software take-all, then it is recommended that you first look at Chu Guanyuan "circuit principle", perhaps later to see the analog circuit emboldened will be sufficient.
Textbook: Kang Hua Light "Electronic Technology Foundation" is still good. If you are interested, you can also refer to Tongshibai's book.
Digital circuits are much better than analog circuits. Shi's book is also counted as a good textbook, it is regrettable that the integrated circuits speak less. Really interested, go to the Southeast Radio Department to audit their class.
The structure of computer system should be taught, the international debate. The better teaching materials can be found in China for the Stallings computer Organization andarchitecture:designing for performance (Tsinghua photocopy). The most popular international is computer architecture:a quantitative approach, by Patterson &hennessy.
The operating system can freely choose one of Tanenbaum's Operating system Design andimplementation and modern Operating system. These two can be counted as classics, the only drawback is that the theory is not strict enough. But this area belongs to the Hardcoresystem, so in theory sloppy is understandable.
If the formal linguistics is good, then the compiler principle of the front-end I see as long as four algorithms: the most easily implemented recursive descent; best top-down algorithm ll (k); The best bottom-up algorithm LR (k); LR (1) Simplified SLR (perhaps another simplified lalr?). The back end is completely engineering nature, and nature is another story.
Recommended textbook: Aho and other people's famous dragon Book:Compilers:Principles, techniques and Tools. or Appel modern Compiler implementation in C.
The first significance of learning database is to tell you that you will use VFP programming not equal to understand the database. (There are so many people in the world who think they know the database!) Database design is both science and art, database implementation is a typical project.
So in a sense, the database is the most typical of a computer class-science and technology integration, mutual infiltration.
Recommended materials: Silberschatz, et al, Database System Concepts.
The standard textbook of the network is still from Tanenbaum:computer Networks (Tsinghua photocopy). However, the network also belongs to the hardcore System, so reading is not enough. It is recommended that you read the RfC more, from the IP reading. Until you can master 10 kinds of commonly used agreements, few people dare to underestimate you.
Must end this "Hu Yu", and then kan down is not in my power. In fact, there are many basic courses of computer is worth a kan, such as the principles of programming language, graphic image processing, artificial intelligence and so on. Zennai I have limited attainments, I dare not let the connoisseur ridicule.
The final statement: the two articles before and after the "Hu Yu" only for the undergraduate stage of learning. Even if these are all good grasp, the road ahead is long.
A ramble on theoretical computer science
The relationship between computer science and mathematics is a bit strange. Twenty or thirty years ago, computer science was basically a branch of mathematics. Now, computer science has a wide range of research areas and a large number of researchers, in turn, in many ways to promote the development of mathematics, in a sense it can be said that the child is taller than the mother.
But in any case, the child always flows from his mother's blood. The blood is the mathematical underpinning of computer science (the mathematical basis of computer sciences)-that is, theoretical computer science.
Another intersection of modern computer science and mathematics is computational mathematics/numerical analysis/scientific calculations, which are not traditionally included in theoretical computer science. So this paper ignores all computational mathematics.
What is the most common word that is put together with theoretical computer science? Answer: Discrete mathematics. The relationship between the two is so close that they become synonymous on many occasions.
Traditionally, mathematics has been centered on analysis. The students of the Department of Mathematics should study the mathematical analysis of three or four semesters, then the complex change, the real change, the functional and so on. Consolidation and functional are considered by many to be an introduction to modern mathematics. In physics, chemistry, engineering applications, but also to analysis-based.
With the advent of computer science, some of the previously less valued branches of mathematics are suddenly important. It is found that the mathematical objects of these branches are distinguished from the traditional analysis: the object of the analysis is continuous, thus the differential, the integral becomes the basic operation, and the objects of these branches are discrete, so there is very little opportunity for such calculation. People thus call these branches "discrete mathematics". The name of "discrete Mathematics" is getting louder, and finally leading to the analysis-centered traditional branch of mathematics is referred to as "continuous mathematics".
Discrete mathematics has been largely stabilized after decades of development. It is generally believed that discrete mathematics consists of the following disciplines:
1) Set theory, mathematical logic and meta-mathematics. This is the basis of the whole mathematics, but also the basis of computer science.
2) Graph theory, algorithm graph theory, combinatorial mathematics, combinatorial algorithm. Computer science, especially the core of theoretical computer science, is the algorithm, and a lot of algorithms are based on graphs and combinations.
3) abstract algebra. Algebra is ubiquitous and is very important in mathematics. In computer science, people are surprised to find that there are so many applications of algebra.
But does theoretical computer science simply add "discrete" hats to math? Until about more than 10 years ago, finally, a master told us: No.
D.e.knuth (How great he is, I don't want to use my crap) opened a new course concrete mathematics in Stanford. The word concrete has a two-story meaning here:
First, for abstract. Knuth that the object of traditional mathematics research is too abstract, resulting in insufficient care for specific problems. He complained that the mathematics he needed in the study often did not exist, so he could only create some mathematics on his own. In order to directly face the needs of the application, he should advocate "concrete" mathematics.
Here I do a little simple explanation. In set theory, for example, mathematicians are concerned with the most fundamental problems-the various properties of the axiom system. And the nature of some specific collections, the various common sets, relationships, mappings are what, mathematicians think not important. However, it is precisely these specific things that are applied in computer science. Knuth can first see this, is worthy of present soberly computer first person.
Second, concrete is continuous (continuous) plus discrete (discrete). Whether continuous mathematics or discrete mathematics, are useful mathematics!
The front is mainly from a mathematical point of view. From the computer point of view, the main research areas of theoretical computer science currently include: Computational theory, algorithmic design and complexity analysis, cryptography and information security, distributed computing theory, parallel Computing theory, network theory, bioinformatics, computational geometry, programming language theory and so on. These areas are cross-cutting and new topics are being raised, so it's hard to figure out a clue. Give some examples below.
Cryptography is now the focus of research due to the push of application demand. Cryptography is established on the basis of number theory (especially computational number theory), algebra, information theory, probability theory and stochastic processes, and sometimes uses graph theory and combinatorial studies.
Many people think cryptography is encryption and decryption, and encryption is to use a function to disrupt the data. That's a big mistake. Modern cryptography contains at least the following levels of content:
First, the fundamentals of cryptography. For example, is it really difficult to break down a large number? Is there a general tool to prove that the agreement is correct?
Second, the basic subject of cryptography. For example, better one-way functions, signature protocols, and so on than before.
Third, the advanced question of cryptography. For example, the length of the 0 knowledge proof, secret sharing method.
Four, the new application of cryptography. For example, digital cash, traitor tracking and so on.
In the distributed system, there are also many important theoretical problems. For example, synchronization between processes, mutual exclusion protocols. A classic result: when the communication channel is unreliable, there is no deterministic algorithm to achieve inter-process synergy. Therefore, it makes little sense to improve the TCP three-time handshake. such as timing issues. A common order is a causal order, but the causal order has a theoretical result until recently. For example, deadlocks do not have a practical way to deal with them perfectly.
On deadlock--a discussion on theoretical computer science
I simply think it's about the "entropy" thing. Not so complicated. Key in efficiency: the methods of dealing with deadlocks, such as deadlock detection, are extremely inefficient, and are not worth the candle because deadlocks are not a recurring phenomenon. So in the global, generally use the so-called "ostrich algorithm", that is, pretend nothing will happen. Locally, for example, to design an algorithm that accesses shared data, you need to prove that your algorithm is locally deadlock free. As to whether it will lead to a global deadlock, it will not be a lot of trouble.
Sir: Some additional notes on < Hu Yu learning computer >
About two years ago, I wrote the article "Hu Yu" and posted in this version, after some students have letters to ask questions related. For the sake of completeness, I would like to add some of the more important ideas here.
(1) "Hu Yu" although coverage is limited to undergraduate courses in computer science, the overall requirements are very high. In writing this article, my idea is that a higher goal is conducive to stimulating the enthusiasm of learning. As a result, it is virtually impossible for undergraduates to reach the level stated in the text within four years and to read all the reference books given. If you can learn six or seven, you can count very good students, no longer adhere to the "Hu Yu" in the direction of the article. And if you're having trouble learning, you don't have to feel discouraged at all. The difficulties you encounter, 99.99% of people will also meet. The question is not whether there is any difficulty, but how far you can go in the face of difficulties.
(2) Frankly speaking, the article "Hu Yu" contains significant prejudice. Because I am involved in theoretical research, my personal thinking inevitably raises the theory and degrades other branches of computer science. But in fact, not all students will learn theory, even the majority of students are not the direction of the theory. Therefore, it is necessary for everyone to study in accordance with their own actual choice of "Hu Yu" mentioned in the content. According to an example, if you are prepared to do the operating system, then set theory, mathematical logic is almost useless to you, can be abandoned; combinatorial mathematics, graph theory as long as the most obvious point, and algebra is the same .... The mathematical basis you need may include a little queuing theory or something like that. But more importantly, you need a lot of engineering practice, need to study the Linux kernel, x-windows .... Need to go to hack a variety of common system software, need to work on the operating system has a global picture. Since such work is not my forte, please do not expect to get much help from the article "Hu Yu". Please remember that everyone's eyes are limited, the author of "Hu Yu" is only a few years more than you learned, mature you will soon find his limitations.
(3) The most ideal way of learning is, of course, from the foundation, each step is solid. But the tradition of our country has overemphasized this point. In fact, because of various reasons, our graduate students, senior undergraduates often do not have the basic course to perfect, and even a lot of essential basic courses have not learned. So what should we do? Do you learn from scratch? Do you have enough time and energy to re-learn from your freshman year? This kind of enthusiasm is very good, unfortunately generally does not accord with the reality. Look at the teaching system represented by the United States, and you will find that there is another way to learn, that is, what to do when you need something. Practice has shown that students in the United States are not significantly poorer than students in other countries----or that they have their own strengths. If you are a graduate student who is giving yourself a "lesson", why can't you refer to the American method?
========== to the end of the separation line ==========
The end of the text, and finally recommend my group: Fish fragrant shredded pork. Group number: 234509621. Here are product managers, testers, code Daniel, have determined to engage in the IT industry is reading the future star, there are various technical information. Welcome it patients to join. However, dabigatran there are restrictions, please specify the reasons for the group, otherwise the administrator will not give through (generally write an IT ah, computer ah, algorithm ah, or do what work, almost can). After entering the group to say hello to everyone, and then to the group file to download the group rules to see. After that, we can play happily with everyone.
"Turn" "Hu Yu Learning (theory) computer" Post and two supplement