This article reproduced in : www.baidu.com/p/wave dripping
Just for sharing and no meaning
A reflection on computer science and technology
Computer Science and technology This science deeply attracts us these schoolmates, has been in the computer department for nearly three years, has also done some thinking, I have always thought that the computer science and technology this profession, in the undergraduate stage is impossible to divide into the computer science and the computer technology, because the computer science needs quite many practice, While practice requires technology, it is easy for everyone (including non-computer majors) to master simple computer technology (including programming), but the advantage of computer science is that we master many other disciplines that do not "delve into" things, such as algorithms, architectures, and so on. Non-computer professionals can easily do a chip, write a program, but they do not have a computer professional can do out of the large system. Today I would like to talk about computer science and focus on computational theory.
A core problem of computer theory--from mathematics:
I remember the freshman year, six hours a week of advanced mathematics, every day homework (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 didn't go the wrong door, this is the Department of Computer Science and technology. The tradition in the Department of Computer Science in China is to train people to do academic research, especially theoretical research (the direction is not necessarily problematic, but not so satisfactory). And the theory of computer research, after all, such as network security, graphic imaging, video and audio processing, which direction and mathematics has a great relationship, although perhaps the orthodox mathematicians in the eyes of non-mainstream mathematics. Here I also want to clarify one of my views: we all know that mathematics is from the actual life of the abstract theory, people to the actual abstract theory, the purpose is to use abstract theory to better guide the practice, some mathematical researchers like to use some existing theoretical knowledge to deduce a number of inferences, But one: The problem is not entirely likely to be a false inference, and the other: his inference in real life can not find a prototype, can not guide the practice. Strictly speaking, I am not an idealist, the theory of political science and practice has always been to guide me to learn scientific and cultural knowledge of the beacon (at least I think that computer science and technology should be in this direction).
In fact, our computer Science mathematics optics Higher mathematics is not enough (typical engineering colleges and universities generally open is the higher mathematics), we should like the Math department to learn the math analysis (Tsinghua Computer department seems to be mathematical analysis), mathematical analysis of this science, we learn computer people have a very complex feelings to it. Is that it is biased towards the mathematical curriculum, which is very helpful for us to develop good analytical skills. My software engineering mentor, Wang, of the University of North Engineering, has taught us that the students of the Department of Mathematics are mostly software design and analysis in the software enterprise, while the students of computer department are the majority of the programmers, the reason lies in the mathematics department's students ' analytical reasoning ability, from the training point of view far above us. 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 offended other department classmate), teaching hours is second only to the mathematics department, but after the effect is not satisfactory. is not all students do not work hard, I do not see, the direction of the wrong also said not necessarily, the reason why, thought-provoking.
My humble opinion is: The students of Computer department, the requirement of mathematics is different from the mathematics department, and the difference of physics is bigger. 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" has been thoroughly into the wrong place. A pile of curved area of the formula, you can understand the math? It is better to use the current search, why bother to remember it? Or just use mathematics or Matalab.
My favorite thing in the department is to recommend reference books to my younger brothers and sisters. 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. In case your maths is too good, go to see Fihkingorts's "Calculus Tutorial"-but I don't think it's necessary, after all, you don't want to go to the math department. Demidovich's "Mathematical Analysis of Problem sets" is basically a computational type of dongdong. The fame of the book is very big, it is not suitable for us, or that sentence, the important thing is the establishment of mathematical ideas, living in the information society we are seeking efficient, calculate this thing or left to the computer. But now it seems that Fudan University's "Mathematical Analysis" is also a good textbook.
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. Here has to mention Nanjing University Lin Chensen, Sheng Cypress Two teacher made up of "advanced algebra", feel quite comfortable. This book contains a fairly comprehensive overview of the basic elementary results of polynomial and linear algebra, as well as some useful and relatively profound 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. 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. 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" is a profound discussion of this. 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.
As discussed above, the students of Computer Science study higher mathematics: Know it more to know its why. The purpose of your study should be: To apply abstract theory to practice, not only to master the problem solving methods, but also to master the problem-solving ideas, for the study of theorems: not simple application, but to master the process of proving the origin of the theorem, training their own reasoning ability. This is the only way to achieve the purpose of learning this science, but also to reduce the gap between our students and the mathematics department of the thinking.
Probability theory and mathematical statistics This course is very important, but most institutions teach this course will be less things. The less things now look at at least 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. In addition, the theory of discrete probability has special importance for students of computer science. And our national Engineering mathematics is all about continuous probabilities. 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. I think it's better to do this work as soon as possible.
Computational methodology (some schools are also called mathematical analysis) is the last course taught to us by the Faculty of Mathematics. The average student's attention to this course is limited, and it doesn't work. No, it's just a set formula! In fact, do the graphic image can not be separated from it, the cryptographic science has been deep and inseparable 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. I personally think that the computer department students must understand why our computer department students to learn this course, I am inclined to learn the theory after the realization of the computer, preferably using C or C + + programming. There are a lot of books in this direction, it is recommended that the higher Education Press (CHEP) and Springer Publishing House (Springer) jointly published the "Calculation method (computational Methods)", Huazhong University of Science and Technology, the Department of Mathematics (currently Huazhong University of Science and Technology), In this regard, the work done by China University should be regarded as more and more, and personally think that this is the best, at least the program design aspects involved: the evaluation of arbitrary mathematical functions, the solution of the root equation, linear equations, interpolation method, numerical integration, field differential equation numerical solution. Li Qingyang's theory is too strong, and the actual application of the combination is not too tight.
Each school will open a discrete mathematics, involving set theory, graph theory, and abstract algebra, mathematical logic. 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. (Our school has begun to do this) 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. Mathematical Logic, the Chinese Academy of Sciences Software Lu Zhongwan professor of "Mathematical Logic for Computer science" is good. Now you can find Professor Lu Zhongwan's lecture video, http://www.cas.ac.cn/html/Dir/2001/11/06/3391.htm yourself to see it. In general, learning to set/logical hands is not difficult, ordinary high school students can read. But the more backward the more unfathomable.
After learning the above books, if you still have the energy to delve further, try the Introduction to axiomatic Set theory in the GTM series and A Course of mathematical Logic. Both of them have the introduction version of the World Book publishing house. 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. The remark is not false. Figure theory of this stuff, the 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. My tutor said that in graph theory, you can write a paper by grabbing a piece of stuff. We can appreciate the breadth of the content inside! 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", the people's 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 "Modern Graph Theory". This book is really classic! It seems that there is one in China that has published a translation version. However, to learn this level, or read the original good. This book, too, marks the entrance of the graph.
In discrete mathematics, we have a world-class expert in the experimental College of Beijing University of Technology, called Shao Caixia, graduated from the probability theory of Fudan University, taught advanced mathematics, linear algebra, probability theory, finally to discrete mathematics, published countless books, the Proceedings of Singapore has a book, is a classic, we want to learn the true meaning of discrete mathematics may look to see. This teacher's Class I have specifically to listen to, extremely classic. But you have to dig the marrow out of his casual words. In the conversation with him I deeply found a problem, although Mr. Shao wrote a number of books, but according to his own statement of each of the similar, I really feel surprised, he said that there are mainly outline restrictions, inconvenient to write more. This is no wonder, rarely heard that foreign write books on the basis of what the outline (even if there is a wide range of content), dare not to cross the step, so it is not to see who is the same. The external version of the book is good here, the latest scientific and technological achievements are discussed, the other first not to say, at least, "keep abreast of the theoretical knowledge of the times."
The combination feeling is not too suitable for homemade books. Or read Graham and Knuth and other people co-author of the classic "Specific mathematics" bar, Xidian University Publishing house has translated version. 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 book not classic, but the most simple
Single, 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 and linear algebra, Very ideal for beginners, our school compared to the cattle have a collection of students.
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 classical (can be world-class) and more difficult "Number Theory guide" (Mr. Hua's masterpiece, Science edition, nine chapters bookstore reprint, traditional may seem more difficult). It is enough for undergraduates to get a rough idea of the basic chapters. But this is only elementary number theory. After graduating from undergraduate studies, you must read English books, such as Bach's "Introduction to algorithmic number theory".
The fundamental of computer science theory lies in the algorithm. It is true that many departments now offer undergraduates algorithms for design and analysis. 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 of Corman , "Introduction to Algorithms" . This one is enough for getting started, and there is no need to refer to other books.
Besides, formal language and automata. I have read the textbook of Bupt, I should say it is clear. 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, no open problems, Beikeda of Dr. Ban Xiaojuan has said, the compilation of technology is quite mature. If this is the case, we have absolutely no need to learn formal language-using YACC or whatever. Bupt of the book in the domestic is still relatively good, but in depth, in the relationship with the computable has a greater limitation, the modern sense is not enough. Therefore, it is suggested that interested students should read the English documents, but they do not seem to have introduced the textbooks in the country. You can take a look at the interactive publishing web. 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"!
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), which is theoretical computer science. Originally in the Eastern University City Library has seen a 70 's translation (book cover is gone, but I love to focus on this kind of books), probably called "Computer mathematics." If that book is at that time is a good book, but now it seems to cover a wide range, depth is much worse, but the recommended freshman students can take a look, at least can make your computational mathematics into the introduction.
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. (This is also reflected in the previous book). 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 function, the real variable function, the universal function 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 has been found that the mathematical objects of these branches differ significantly from the traditional analysis: the problem-solving solution of the analytical study is continuous, thus the differential, the integral becomes the basic operation, and the objects of these branches are discrete, so there is little chance to do such calculations. 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. The core of computer science, especially theoretical computer science, is
Algorithm, and a large number of algorithms are built on the basis of 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 combination of theory and practice--the category of computer science research
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. Want to engage in this aspect of work, recommend to see a series of Books of Chinese Computer Society, at least represent the authority of our country. 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. Such an understanding is too superficial.
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. For example...... The operating system has been studied to lift it yourself!
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 ...
In this regard, I would like to start by saying that we are the computer Foundation which is widely established in various schools. The establishment of "computer Basic Course" in colleges and universities is a compulsory course requirement of the Higher Education Department in China. The main content is to enable students to master the history of computer development, learn to use the simple operating system, word processing, table processing functions and preliminary network application functions. But the goal of teaching this course in the Department of Computer science must not be consistent. In the course of computer science, the goal should be: Let the students understand the development of computer science, clearly grasp the direction of the research of computer science, the forefront of development is the position of each course in the whole discipline system. To understand the learning objectives, learning content, application areas of various disciplines. So that students in the early stages of the study of the whole subject has an overall understanding, in order to achieve in the future study clearly what to learn, how to learn. The position of the basic computer application skills should be placed in the second place or later, because this is the ability for students in this department to explore. This is important. Recommend to everyone a book: The Machine Industry Press "computer culture" (New perspective of Computer science), read this book I only deeply realized that I am still a computer science beginner, only a relatively thorough understanding of what is computer sciences. In addition, many classical theories in the book "Introduction to Computational Science" by Zhao, a teacher at Xiamen University, are difficult to find in similar books. Look at him. Perhaps you will understand one of the most fundamental questions: Why computer science is called computational Science more accurately. This book can also be a masterpiece in the world.
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 specialized course was C language Program design, the person who read the computer from a certain angle said that a lot of people rely on writing programs to eat. There has been such controversy in the computer department of the Experimental College of Beijing University of Technology (CSDN, today), which is the first programming language 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 take one weeks at all, if I have to lay the groundwork first. Don't hesitate, learn to say, wait for you to choose, others already have a few languages.
assembly language and microcomputer principle are two special annoying classes. 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 about the two courses are not difficult to find in the computer bookstore. Get some of the latest, check it out. Composition principle recommended "computer composition and Structure" by Professor Wang Aiying, Tsinghua University, wrote. Assembly language Everyone take 8086/8088 into a door, after must learn 80x86 assembly language. Practical value, not backward, structure and good, write high-efficiency virus, high-level language embedded a little assembly, the development of the bottom, the total can not be separated from him, recommended Tsinghua University Shen Mi-ming "IBM-PC assembly language Programming." Some people say do not want to understand computer architecture, do not want to make computers, so such as computer principles, assembly language, interface and other classes feel no need to learn, so reasonable? Obviously unreasonable, these things have to be mastered sooner or later, definitely have to contact, moreover, this is the computer profession and other professional students compared to a few advantages. When doing projects, it is very important to understand these, it is impossible to say that only for technical and technical, only know the most skilled people to do a coder, and can never fully understand the whole system design, and coding workers is the older the more worthless. On the composition of the principle there is a lecture on the question, in my course when the teacher taught the principle of CPU work of the design of the program of the microprocessor this piece is slightly off, the reason is that our country CPU technology than other countries, engaged so long time finally out of a godson than Intel's still a 108,000 miles, So we are advised not to learn. I think this is not a problem in every school. If it is really as he said, that Chinese computer science in which direction can stop, hardware and software, applications, there are a few to make the United States, do not engage in other people, then we sit here what? The idea of teaching needs to change.
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's "Electronic Technology Foundation" (Higher Education Press) is still good (our school electronic Department in use). If you are interested, you can also refer to Tongshibai's book.
Digital circuits are much better than analog circuits. We recommend that we take a look at the "Digital Logic", written by Professor Liu Yingjing of North Engineering, said the book is of great reference value (mechanical industry press). The reason is very clear, practical value is high, can listen to her lectures on the course is a "enjoy science" feeling. Tsinghua University Shi Book is also a good textbook, it is regrettable that the integrated circuit said less. Really interested, take a look at the large-scale digital system design (the Beihang University used more).
The structure of computer system should be taught, the international debate. The better teaching materials can be found in China for Stallings's "computer Organization and Architectureesigning for performance" (Tsinghua Photocopy
This). The most popular international is "computer architecture:aquantitative approach", by Patterson & Hennessy.
Operating system can be arbitrarily selected "kernel design and implementation of the operating system" and "Modern operating system," one of two books. These two can be counted as classics, the only drawback is that the theory is not strict enough. But this area belongs to the hardcore System, so it is understandable to be sloppy in theory. Want to see the theory of the recommendation of Tsinghua University Press "operating system" bar, the director of higher education Zhang Yao Study, we use the textbook is the book. Also recommended a "Windows operating system Principle" mechanical industry press, this book is our operating system experts in Microsoft 0 Distance study six months, writing lasted more than a year written, teaching operating system experts in addition to Tsinghua University Zhang Yao (now the director of Higher education) almost everyone participated. Bill Gates wrote the order himself. Inside not only combined with WINDOWS2000,XP detailed operating system of the kernel, and later on some of the Windows Programming Foundation, there is the taste of the external version of the book, and some of the above can be said that only the book at home and abroad have a detailed introduction to the Windows kernel,
If the formal linguistics is good, then the compiler principle of the front end I see as long as the four algorithm: 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: Kenneth C.louden wrote "Compiler Construction Principles and practice" is "compiling principle and practice" (translation of mechanical industry Press)
Learning database to remind you that will use VFP,VB, Power Builder does not mean 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 course-science and technology integration, mutual infiltration. It is also recommended that you finish the software engineering and then turn over to look at the database technology, it will be a new feeling. Recommended textbook: Abraham Silberschatz, "Database System Concepts". As the integrity of knowledge, we also recommend that you look at the mechanical industry publishing house "Data Warehouse" translation.
The standard textbook of computer network is still from Tanenbaum's "Computer Networks" (Tsinghua University has a translation). There is the recommended Shehiren "Computer Network Tutorial" (People post and Telecommunications publishing house) to speak more clearly, reference documents are more authoritative. However, the network also belongs to the hardcore System, so reading is not enough. Recommended multi-read rfc,http://www.ietf.org/rfc.htm You can download RFC documents by number. Read from the IP. Until you can master 10 kinds of commonly used agreements, few people dare to underestimate you. I think it is better to do the work on the network design.
The importance of data structure is self-evident, after learning the data structure you will be a revolutionary baptism of your programming ideas, will have a clear understanding of how to establish a reasonable and efficient algorithm. For the establishment of the algorithm I think we should pay attention to the following points:
When encountering an algorithmic problem, first know that you have not dealt with this problem before. If you've seen it, you'll generally do it smoothly; if you haven't, consider the following questions:
1. Is the problem based on a known familiar data structure (for example, a binary tree)? If not, design the data structure yourself.
2. What are the following types of algorithms that are required to be written by the problem? (Build data structures, modify data structures, traverse, find, sort ...)
3. Analyze the mathematical nature of the algorithm that is required to write the problem. Is there a recursive feature? (For recursive programming, if you design a reasonable parameter table and the conditions for the end of recursion, you are basically done.)
4. Continue to analyze the mathematical nature of the problem. Based on your previous programming experience, imagine a possible solution and prove the correctness of the solution. If the problem has space-time requirements for the algorithm, prove that your idea satisfies its requirements. General, Time efficiency and space efficiency are hard to come by. Sometimes you have to save time by establishing a secondary storage method.
5. Through a period of analysis, you have some ideas about how to solve this problem. Or, you can simply describe your algorithm in natural language. Continue to verify its correctness, try to find the error and find a solution. When necessary (found unresolved contradictions), * * Own ideas and start thinking from the beginning.
6. After confirming that your ideas are workable, start writing the program. In the process of writing code, as far as possible to consider the various issues in detail, careful. The program should have a good structure and be annotated in key places.
7. Take an example and then execute your program with a pen on a piece of paper to further verify its correctness. When confronted with a situation that does not match your vision, the reason for analyzing the problem is the programming problem or the problem with the algorithm itself.
8. If the program passes the above correctness verification, it is further optimized or simplified.
9. Writing ideas analysis, comments.
For specific algorithmic thinking, you can only rely on your own knowledge and experience to obtain, there is no specific rules (otherwise all the programmers can be laid off, the machine automatically generate code on it). To have a rich imagination, that is, when a road does not work, do not go into the dead, to dare * * Own ideas. I am just a beginner, and say some of the above experience, only for your reference and discussion.
About artificial Intelligence, I think is also very worthy of careful study, although not just the rise of the subject, but definitely a very promising subject. One of our founders of AI, Beijing University Sheyan, a mentor of my mentor, Dr. Li Xiaojian, defines artificial intelligence as a technological science that mimics, extends, and expands the intelligence of man and nature. AI has been defined on the official AI website of the United States as follows: Artificial Intelligence, or AI for short, was a combination of computer science, physiology, and Philosophy. AI is a broad topic, consisting of the different fields, from machine vision to expert systems. The element, the fields of AI, has the common is the creation of machines that can "think".
The question of this subject's research probably says:
(1) Semiotics: The basis of symbolic computation and programming, knowledge expression methods: knowledge and thinking, production rules, semantic networks, first order predicate logic problem solving methods: Search strategy, heuristic search, search algorithm, problem protocol method, predicate calculus: the principle, Process Expert system: method and tool of establishing expert system
(2) Connection doctrine (neural Network School): 1988, the United States authorities pointed out: the database, network development is straight up, the neural network may be the only way to solve artificial intelligence.
I think for the study of artificial intelligence, we must not like learning mathematics and some ready-made conclusions, to learn to analyze the problem, it is best to use the program design to achieve, here is recommended to everyone ACM Best Doctoral Dissertation Award winner Dr. Tuxiaoyuan's book "Artificial Fish-computer animation Artificial Life Method" (Tsinghua University Press). Artificial life of the classmate will not know the international famous Tu father and daughter bar. The book on Artificial intelligence is of course preferred "Artificial Intelligence A New Synthesis" Nils J.nilsson. The originator!
About network security I also want to say two words here, with the development of computer technology, the information level of the whole society is advancing rapidly, computer network technology is changing rapidly, the network has become an indispensable part of every work field of society immediately, as long as there is network existence, network security problem is a must solve a good problem, Learning Network security is not simple to collect some hack tool black a black people's website, but to learn his mathematical principles, the realization of principles, understand the underlying mechanism, so as to solve most of the existing problems and emerging security issues.
Some fringe science about computer science I want to talk about software engineering technology, for an enterprise, the introduction of software is not just a few programmers sit together, you write a program, I write a program? Obviously not. Software engineering is a typical combination of computer science and mathematics, Management science, psychology, sociology and other disciplines. It has led us into a society of theory and technology. You have to consider not only the merits and demerits of the program, but also the differences between the program and software, software and software products, software software products market prospects, how to better communicate with people. This aspect I still in the study stage, later this aspect again writes the article, first recommended to everybody several books: the best-selling 20 years "The Human Moon Myth" (Tsinghua University Chinese edition, China Electric Power Press photocopy edition), "The Software Engineering-practitioner Research method" (Mechanical industry Press translation), "Person piece" (it is said that every Microsoft company's department manager has read this book, recommend the bosses and want to be the boss of the students to see, to understand what is the people in the Software enterprise) and Microsoft's "Software development of science and art" and "software enterprise management and Culture" (Research software Enterprise's winning way of course to study the success of Microsoft's experience!) ）
The study of computer technology I think so: the school opened any science has its lag, do not always think that they have mastered a certain technology is already the world no adversary, although now java,vb,c,c++ with a lot of, how can guarantee not be eliminated the day, I think. The emergence of net platform and the beginning of x# language can fully explain the problem. In other words, when we master a new technology, but also has the newer technique to produce, as the contemporary university student should have the quality which follows the science development. For example, like some students always say, I do web design like to directly write HTML, do not want to use what frontpage,dreamweaver. It is good to be able to write Web pages in language, but there are efficient ways why don't you make them? Just to show that your level is high, unique? I think the real level is the person who can accept the new things at the fastest speed. The development of high-level programming language is changing rapidly, the future programming is like people talking, I think we should have some experience from XML. Do we really have to write anything to use the assembly to show their own level of high, it is not so much better to write directly in machine language. Conversely, the key to getting the most out of the new technology at the fastest pace is the degree to which you have mastered computer science.
Computer technology involved more extensive content, one of the said I am afraid there is no a year. I just want to remind you or that sentence, technology and science can not be separated, learn science at the same time to engage in technology, this is the best policy. Like English, the original people to communicate with foreigners must have a translator, now the people who are full of roads will speak English. Even the champions of the 21st Century English speech contest are not the students of the English department. Computer is the same, we must face a reality is: computer is really just a tool, if not have other aspects of literacy, computer science students although can not say to find a job, but one day when other professional talent mastered the computer technology will be much better than we. The reason is that computer solutions are mostly practical problems, but the knowledge of practical problems is rare. A single computer technology has no place.
I think it's time to point out that before you learn every course, you need to understand the purpose of this course. The field of application of this subject. According to my own understanding of the classmates and junior students of the study status: Very few of them know the purpose of learning a subject, the end of the final exam does not know what to do with this section. This loses the significance of reading computer science. Of course, this has nothing to do with the existing educational ideas.
On the whole, from the educational point of view, the curriculum arrangement of domestic colleges and universities is not very reasonable, emphasizing the theory, and unwilling to theoretically in-depth education, unable to accept new technology, want to avoid new technology and can not be avoided. I think the key problem is that domestic colleges and universities are difficult to break through the status quo, restrictions on how to develop. Although we recognize the superiority of foreign education, why delay to take action? Even if the refine take a little. We need to change. From our own point of view, most people have not learned the academic level of computer science for 4 years, nor the kind of tenacity that learns computer technology. In my first big time, My Computer science tutor, Huaibei Coal Normal University professor Wang Eping once said to me such a word: "When you choose a computer science, it means that you embark on a road of no return, it means that you have to struggle for life ... Behind you is a cliff, only to go forward, can't go backwards. ”
Some students say that according to this study to learn things too much, some not seen useful, I want to play an image of the analogy: school learned people are a sphere, all aspects of knowledge should have. However, the need for the sphere in society is very small, but the need is brick and tile, that is proficient in a line of talent. But for the same volume of objects, the use of the sphere to transform is the most convenient and easy. Many students in the school, in order to enable more students to adapt to the society, the school will not be able to make all the students into a sphere, and then let the community to re-processing these students, to become a truly useful talent. Even if you know very well what you are going to do, and are very determined to take your own path, you must go, the world is changing, and you cannot anticipate the future. Think clearly and try to do it!
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. Zennai I have limited attainments, I dare not let the connoisseur ridicule. For the profound computer science, I can only say that I am always a beginner. The final statement: These are only for the undergraduate stage of learning. Even if this whole good grasp, the road ahead is long, computer science needs us to fight for it ... Learning computer science requires toughness, more innovation, and passion. Learning theoretical knowledge deeply and accepting the challenge of new technology is the quality that our generation should have. Finally send everyone a word "Wake up every day with a feeling of passion for the difference technology would make in people ' s life!".
Computer Science and technology learning methods