Reflections on computer science and technology learning
Computer Science and Technology this science has deeply attracted our students who have been in the computer system for nearly three years and have made some thoughts, I have always believed that the computer science and technology major cannot be divided into computer science and computer technology in the undergraduate stage, because computer science requires a considerable amount of practice, while practice requires technology; everyone (including non-computer majors) can easily master simple computer technologies (including programming), but the advantage of computer science is that, we know many other things that are not "Going deep" in the profession, such as algorithms, architecture, and so on. Non-computer professionals can easily create a chip and write a program, but they cannot create large systems that can be developed by computer professionals. Today I want to talk about computer science and focus on Computing Theory.
A core issue of computer theory -- starting with mathematics:
I remember that when I was in freshman year, I had higher mathematics every Saturday class, and I had to work every day (that was my six-day working system ). Some of us are surprised to go wrong: What exactly are we reading? Yes, you are not wrong. This is the Computer Science and Technology Department. The tradition in China's Computer Science Department is to cultivate people who do academic research, especially theoretical research (the direction is not necessarily correct, but it is not so satisfactory ). After all, the theoretical research on computer, such as network security, graphics and imaging, and video and audio processing, is closely related to mathematics, although it may be a non-mainstream mathematics in the eyes of orthodox mathematicians. Here I also want to clarify my point of view: we all know that mathematics is a theory abstracted from real life. The reason why people need to abstract reality into theory is that, the purpose is to use abstract theories to better guide practice. Some Mathematical researchers prefer to use some existing theoretical knowledge to deduce several inferences: incomplete consideration may be a wrong inference. Second, His inference cannot find a prototype in real life and cannot guide practice. Strictly speaking, I am not an idealist, the theoretical connection with practice in political courses has always been a guide for me to learn scientific and cultural knowledge (at least I think that computer science and technology should be conducted in this direction ).
In fact, it is not enough for us to study mathematical optics and advanced mathematics in computer science (a typical Engineering College generally uses advanced mathematics ), we should take a look at mathematical analysis like a mathematics department (it seems like a mathematical analysis in Tsinghua computer). Mathematical Analysis is a science. People who study computers have very complicated feelings for it. It is a proof-type mathematics course, which is very helpful for us to cultivate good analytical skills. My software engineering mentor, Wang Yihua, from the Institute of mathematics and sciences, taught us that mathematics students mostly work in software design and analysis in software companies, the majority of students in the computer department are programmers, because the mathematics department's students' analytical reasoning ability is far above us from the perspective of training. The strange phenomenon in the past was that the high school mathematics basics of computer students were one of the top two in the school (hoping not to offend other students), and the teaching hours were second only to the mathematics department, however, the effect after learning is not satisfactory. Are they all students who don't work hard? I don't see them, and I can't say the wrong direction. What are the reasons for this? It is thought-provoking.
In my personal opinion, the requirements for mathematics are certainly different from those of mathematics in the computer department, but they are more different from those of physics. The so-called "Advanced Mathematics" in non-mathematics majors is nothing more than deleting the difficult theoretical part in mathematical analysis and emphasizing the application of formula calculation. For computer systems, the most useful part of mathematical analysis is the deleted theoretical part. To put it bluntly, for computer students, the so-called "Engineering Mathematics" pursuing computation has gone into a misunderstanding. Just remember the formula of a bunch of curved points, can you understand mathematics? It would be better to use the current query. Why bother to remember? Otherwise, use it directly.MathematicsOrMatalabOkay.
My favorite task in the Department is to recommend reference books to my schoolmates. Mathematical Analysis books in Chinese are generally consideredNew lecture on Mathematical Analysis by Dr. Zhang zhusheng of Peking University"Is the best. If you have a good math, go and see.Fikhkingoz's "calculus tutorial"Okay-but I don't think it is necessary. After all, you don't want to go to the mathematics department.The mathematical analysis topic set of gimidorvic"It is also basically a computing type. The book is famous, but it is not necessarily suitable for us. In that case, it is important to establish mathematical thoughts. What we want to do in the information society is to be efficient, leave computing to the computer. However, it seems thatMathematical Analysis of Fudan UniversityIt is also a good teaching material.
China's so-called Higher Algebra is equivalent to linear algebra plus a polynomial theory. I think this has a good side, because it can make students feel that algebra is a structure, rather than a pile of matrices. I have to mention it hereLin chengsen from Nanjing University and Sheng songbai's "Higher Algebra"It feels quite comfortable. This book fully covers the basic elementary results of polynomials and linear algebra. It also provides some useful and profound content, such as the Sturm sequence and the shermon-morison formula, generalized inverse matrix. It can be said that as an undergraduate, if you can thoroughly understand this book, you can be a master. The better advanced algebra textbooks in China are also those used by the Tsinghua computer department. They are published by Tsinghua press, and there are many bookstores. From the abstract algebra point of view, the results in higher algebra are just some examples of the properties of the algebra system.Mr. Mo zongjian's substitute mathematics. However, Mr. Mo's book is really deep, and it is difficult for undergraduates to accept it. You may wish to wait for yourself to mature and read it again.
As discussed above, students in the Computer Science Department are studying advanced mathematics: even more, they must know why. The purpose of your study should be: To apply abstract theories to practice, not only to grasp the problem-solving methods, but also to grasp the problem-solving ideas. Learning the theorem is not a simple application, instead, you can master the process of proof, that is, the origin of the theorem, and train your own reasoning ability. Only in this way can we achieve the purpose of learning this science and narrow the gap in thinking between us and our students in the Mathematics Department.
The course of probability theory and mathematical statistics is very important. Unfortunately, most colleges teach less things. There is at least a random process for missing items. I have never heard of the Markov process before graduation. This is a shame for students in the computer science field. Without a random process, how do you analyze networks and distributed systems? How to Design randomization algorithms and protocols? It is said that the computer department of Tsinghua has a "random mathematics", which is a required course. In addition, discrete probability theory is of special importance to computer students. Our National Engineering Mathematics is about continuous probability. Now, some schools in the United States have opened a simple "discrete probability theory" course, simply delete the continuous probability, the discrete probability deeper. We don't have to do this, but there is no doubt that we should emphasize the discrete probability. I think it is better to do this job as soon as possible.
Computational methodology (also known as mathematical analytics in some schools) is the last course given to us by the Institute of Mathematics. Generally, students have limited emphasis on this course and think it is useless. It's not just a set of formulas! In fact, it is essential to create a graphic image, and to deepen cryptography. In addition, in many scientific engineering applications, computing is dominated by numerical values. This course has two extreme lectures: one is classical "Numerical Analysis", which fully describes mathematical principles and algorithms, and the other is the increasingly popular "Science and Engineering Computing ", simply teach students to program using software packages. I personally think that students in the computer department must understand why our students in the computer department want to take this course. I am very inclined to use computers after learning the theory well, it is best to use C language or C ++ programming. There are still a lot of books to work in this direction. We recommend that youComputational Methods published by the Higher Education Press (CHEP) and SpringerWritten by the department of mathematics at Huazhong University of Science and Technology (now Huazhong University of Science and Technology). In this regard, huake is doing a lot of work in China, and I personally think this is the best, at least programming involves the evaluation of any mathematical function, the root of the equation, the solution of the linear equations, the interpolation method, the numerical integral, and the numerical solution of the field differential equation. Li Qingyang's theory is too strong, and it is not tightly integrated with practical applications.
Every school will have a discrete mathematics in this department, involving set theory, graph theory, abstract algebra, and mathematical logic. However, is it too time to squeeze so much content into a discrete mathematics course? In addition, students in computer science do not understand combinations and number theory, which is also a huge defect. To do the theory, it is too big to understand combination or number theory. From the ideal state, it is best to separate six courses: Set, logic, graph theory, combination, algebra, and number theory. This is of course unrealistic, because there are not so many lessons. In the future, we may take three courses: Set and logic, graph theory and combination, algebra and number theory. (In this regard, our school has already started to do it.) No matter how the class starts, students will always learn the same thing. Next we will talk about the above three groups respectively.
Classical set theory,Beijing Normal University published a basic set theory.Good.
Mathematical logic,Professor Lu zhongwan of the Chinese Emy of Sciences Software Institute, "mathematical logic for Computer Science"That's good. Now you can find Professor Lu zhongwan's lecture video at http://www.cas.ac.cn/html/dir/2001/11/06/3391.htm.pdf. In general, it is not difficult to learn collection/logic, which can be understood by ordinary high school students. However, the more you move back, the more you feel unmeasurable.
After learning the above books, if you are still interested in further research, you can give it a try.Introduction to axiomatic set theory and a course of mathematical logic in the GTM Series. Both of them have the imported version of The World Book Publishing House. If you can get these two books done, you can say that you have entered the door in terms of logic, so you don't have to waste any time listening to me.
It is said that only 30 people in China understand Graph Theory at most. This statement is not false. Graph Theory is too technical. Almost every problem has a unique method, which is a headache. But this is also the charm of it: as long as you are creative, it can give you a sense of accomplishment. My mentor said that you can write a thesis by just writing a piece of things in graph theory. You can understand the depth of the content! In the graph theory book in China, Mr. Wang Shuhe's "graph theory and its algorithms" are very successful. On the one hand, its content is comprehensive in Chinese textbooks. On the other hand, its emphasis on algorithms is very suitable for computer systems (originally textbooks of the Computer Science and Technology University ). With this book, let's take a look at a few more translations, as shown inBondy & Murty's Graph Theory and Its Application,Graph Theory and circuit network translated by People's post and telecommunications Publishing HouseAnd so on. It's enough for undergraduates. Furthermore, books from the world will introduce the "Modern Graph Theory" of the GTM series ". This book is really classic! It seems that another Chinese company has published a translation version. However, it is better to read the original version to learn this level. This book also marks the entry of graph theory.
In discrete mathematics, we have a world-class expert from the Experimental School of Beijing University of Technology, called the Senior Scholar. I graduated from probability theory from Fudan University and taught advanced mathematics, linear algebra, and probability theory. Finally, I switched to discrete mathematics, there are countless books published, and there is a collection of essays in Singapore, which is a classic book. You may want to learn the true meaning of discrete mathematics. I have heard of this teacher's class, which is extremely classic. However, you need to extract the essence from his casual words. During my conversations with Mr. Shao, I found a profound problem. Although Mr. Shao wrote countless books, he wrote almost everything according to his own statement. I was surprised, he said that there are restrictions on the outline and it is inconvenient to write more. This is no wonder. I seldom heard about the outline of writing books outside China (even if there is a lot of content). I dare not go further than half a step. This is not the same for anyone. The good news is that the books of the external version are all discussed in the latest scientific and technological achievements. Otherwise, they are at least "keeping up with the theoretical knowledge of the Times ".
The combination does not feel very suitable for Chinese books. Read the classic "Specific mathematics" co-authored by Graham and knuth, which is published by Xi'an University of Electronic Science and Technology Press.
Abstract Algebra: The Chinese Classic is Mr. Mo zongjian's "substitute Mathematics ". This book is a textbook of Peking University mathematics department and is well received. However, this book is too deep for undergraduates. You can first learn some other teaching materials and then look back at "substitute mathematics ". There are a lot of international classics, and there are a lot of GTM series. I recommend a book not to mention the classic, but the simplest, the easiest to learn: http://www.math.miami.edu /~ EC/book"Introduction to linear and abstract algebra"It is very easy to understand and can combine abstract algebra and linear algebra. It is ideal for beginners. Students of our school have a favorite.
In terms of number theory, there are classics in China and known as difficulties"Elementary number theory" (Brother Pan, Peking University Edition). A little more, more classic (world-class) and more difficult"Number theory guidance"(The famous book of Mr. Hua Luogeng, the scientific version, and the re-printing of the 9-Chapter bookstore may seem difficult to use in Traditional Chinese ). It is sufficient for undergraduates to take the basics into consideration. However, this is only elementary number theory. After graduation, you must read English books, suchBach's "Introduction to algorithmic number theory".
The foundation of computer science theory lies in algorithms. It is indeed correct that many departments offer algorithm design and analysis for undergraduates. Looking around the Western world, no third-stream or above computer system does not take algorithms as a required discipline. Algorithm textbooks are currently accepted as Corman-based"Introduction to algorithms"Is optimal. This book is sufficient for beginners and does not need to be referenced in other books.
Let's talk about formal languages and automated machines. I have read beiyou's teaching materials. I should say it is clear. However, it should be emphasized that the role of formal language and automatic machines is mainly used as computing models rather than compilation. In fact, the compilation front-end is already in the dead field, and there is no open problems. Dr. ban xiaojuan of Peking University of Science and Technology once said that the compilation technology is quite mature. For this purpose, we do not need to learn formal language-it would be enough to use YACC or anything. Beiyou's book is still relatively good in China, but in depth, there are great limitations in its relationship with testability, and its modern sense is also insufficient. Therefore, it is recommended that interested students read English documents. However, it does not seem that textbooks have been introduced in China. You can take a look at the interactive publishing online. After getting started, it is interesting to compare the formal language with the model defined in the automatic mechanism and the model defined by recursive functions in mathematical logic. Now I know what it is called "the beauty of the palace room, the wealth of hundreds of officials "!
The relationship between computer science and mathematics is a bit strange. 20 or 30 years ago, computer science was basically a branch of mathematics. Now, computer science has a wide range of research fields and many researchers, in many ways, in turn to Promote the Development of mathematics, in a sense, it can be said that the child grows higher than the mother. But in any case, this child is always in the mother's blood. This blood is the mathematical underpinning of computer science (the mathematical foundation of computer science), that is, theoretical computer science. It turns out that I have read a Chinese version of 1970s in the library of Oriental University City (I love to pay attention to this book), probably called computer mathematics. If I put that book at the time, it was definitely a good book, but now it seems that the scope of the book is still wide, and the depth is much worse. However, we recommend that freshman students take a look, at least you can get started with computing mathematics.
What is the most common word that is put together with theoretical computer science? A: discrete mathematics. The relationship between the two is so close that they become synonyms in many occasions. (This is also reflected in the previous book) Traditionally, mathematics is centered on analysis. Students in the Mathematics Department should study three or four semesters of mathematical analysis, followed by complex variable functions, real variable functions, and generic functions. Real-time variables and functional functions are considered by many to be the entry of modern mathematics. It is mainly used in physics, chemistry, and engineering.
With the emergence of computer science, some mathematical branches that were not previously very valued suddenly become important. It is found that the mathematical objects processed by these branches are significantly different from the traditional analysis: the solution to the problems studied by analysis is continuous, so the differentiation and integration become the basic operation; the research objects of these branches are discrete, so there is little chance to perform such calculations. These branches are called discrete mathematics ". The name of "Discrete Mathematics" is getting louder and louder, and the traditional branch of mathematics centered on analysis is called "continuous mathematics ".
After decades of development, discrete mathematics is basically stable. Discrete Mathematics is generally considered to include the following subjects:
1) set theory, mathematical logic and metamathematics. This is the foundation of mathematics and computer science.
2) graph theory, algorithm graph theory, combined mathematics, and combined algorithms. The core of computer science, especially Theoretical Computer Science, is
Algorithms, while a large number of algorithms are built on Graphs and combinations.
3) abstract algebra. Algebra is ubiquitous and is very important in mathematics. In computer science, we are surprised to find that algebra has so many applications.
However, is it so easy to add the "discrete" hat to the theory of computer science? After about a dozen years ago, a master finally told us: No. D. E. knuth (how great he is, and I don't want to talk nonsense) opened a brand new course concrete mathematics in Stanford. The term concrete has two meanings:
First: abstract. Knuth believes that the objects of traditional mathematical research are too abstract, leading to insufficient concern for specific problems. He complained that the mathematics he needed in his studies often did not exist, so he had to create some mathematics himself. To direct application-oriented needs, he must advocate "specific" mathematics. Here I will give a simple explanation. For example, in the theory of set, mathematicians are concerned with the most fundamental problem, such as the nature of the systems of justice. The nature of some specific sets, various common sets, relations, and mappings are not important to mathematicians. However, what is used in computer science is exactly these specific things. Knuth was the first computer in the world to see this. Second, concrete is continuous (continuous) plus discrete (discrete ). Continuous mathematics and discrete mathematics are useful mathematics!
The combination of theory and practice -- the scope of Computer Science Research
The above is mainly from the mathematical point of view. From the computer point of view, the main research fields of theoretical computer science currently include: Computational Theory, algorithm design and complexity analysis, cryptography and information security, distributed computing theory, parallel computing theory, network theory, biological Information computing, computational geometry, and programming language theory. These fields are intertwined with each other, and new topics are constantly being proposed. Therefore, it is difficult to come up with a clue. To do this, we recommend reading a series of books from the Chinese Computer Society, which at least represents China's authority. Here are some examples.
Due to the application demand, cryptography is now a hot topic in research. Cryptography is based on number theory (especially computational number theory), algebra, information theory, probability theory, and random processes. It is sometimes used in graph theory and combination. Many people think that cryptography is encryption and decryption, while encryption is to use a function to disrupt data. This understanding is too simple.
Modern Cryptography includes at least the following levels:
First, the foundation 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 Topic of cryptography. For example, a better one-way function and signature protocol.
Third, advanced cryptography issues. For example, the length of the zero-knowledge proof is used to share secrets.
Fourth, new applications of cryptography. Such as digital cash and traitor tracking.
There are also many important theoretical issues in distributed systems. For example, Process Synchronization and mutex protocol. A classic result is that, when the communication channel is unreliable, there is no definite algorithm to achieve inter-process collaboration. Therefore, it makes little sense to improve the TCP three-way handshake. For example, timing problems. A commonly used order is a causal order, but it was not long ago that there was a theoretical result... for example, there was no practical way to deal with deadlocks perfectly. For example, if you have studied the operating system, just give it to yourself!
If a computer has only theory, it is just a branch of mathematics, rather than an independent science. In fact, apart from theory, computer science has a broader sky.
I always think that four years is not enough to learn basic computer knowledge, because it is too wide, eight years, it should be around ......
In this regard, I would like to talk about the computer basics that we have set up in various schools. In colleges and universities, the "Basic Computer Courses" is a required course for all majors specified in China's high education department. The main content is to give students a preliminary understanding of the development history of computers and learn how to use the operating system, text processing, table processing and preliminary network application functions. However, the goal of teaching this course in the Computer Science Department cannot be the same. In the computer science curriculum, the goal should be to allow students to fully understand the development of computer science and clearly grasp the research direction of computer science, the frontier of development is the position of each course in the entire discipline system. Find out the learning objectives, content, and application fields of various disciplines. This allows students to have an overall understanding of the entire subject at the early stage of their study, so that they can clearly learn what to learn and how to learn in the future. The basic computer application skills should be placed in the second place or back, because this should be an opportunity for students in the department. This is important. I recommend you a book:Computer Culture (New Perspective of computer science) published by Mechanical Industry Press)After reading this book, I had a profound understanding of computer science.
A top-notch computer science student should never be a programmer, but he must be a programmer first. When I went to college, my first professional course was C language programming. Many people who studied computer science relied on programming to eat. There has been such a debate in the computer department of the experimental College of Beijing Institute of Technology (csdn also exists today) about which programming language should be used. I personally think that what language is used is the final part, and the key is to develop good programming habits. The teacher told us that it only takes one week to learn a new language after laying the foundation. Now, I don't think it will take a week. The premise is to lay a good foundation first. Don't hesitate again. After learning it, wait until you make a good decision. Other people will already have a few languages.
Assembly Language and microcomputer principles are two very annoying lessons. Your mathematical/theoretical foundation is good, and you cannot take advantage of it. The order between the two courses is better than that between the first and first courses. No matter which course you want to learn first, it will involve things in another course. Therefore, we can only calm down and ponder over it. This is a typical engineering class. It does not require too much intelligence and Epiphany, but it needs to be gradually enlightened. Books about these two courses are not hard to find in the computer bookstore. Let's take a look at the latest ones. Recommended composition principlesWritten by Professor Wang aiying of Tsinghua University. Assembly language everyone should take 8086/8088 into the door, and then be sure to learn 80x86 assembly language. High practical value, not lagging behind, good structure, efficient writing and writing viruses, embedded a little assembly in advanced languages, for underlying development, there is always no need for him, recommendedIBM-PC assembly language programming by Shen meiming of Tsinghua University. Some people say they do not want to understand the computer architecture or create computers. So do they think it is not necessary to learn computer principles, assembly languages, interfaces, and so on? Obviously, it is unreasonable. These things will be mastered sooner or later and certainly accessible. Moreover, this is one of the few advantages of computer science compared with other professional students. It is very important to know about the project. It is impossible to say that people who only know the technology can be a coding worker, it is never possible to fully understand the design of the entire system, and coding workers are getting older and less valuable. There is still a question about the composition principle. when I took this course, the teacher omitted the CPU working principle and the microprogram design, the reason is that our country's CPU technology is not as good as other countries. After such a long period of time, it is hard to get a godson 108,000 worse than Intel's, so we recommend that you do not want to learn it. I don't think this is a problem in different schools! As he said, China's computer science can be stopped in any direction, including hardware, software, and applications. There are several items that can survive the United States, what are we doing here? The concept of teaching needs to be changed.
Simulation Circuit, nowadays, not only are computer students confused, but electronics students are also mostly afraid. If you really want to use both hardware and software, we suggest you first look at the "circuit principle" of Qiu Guanyuan. Maybe it will be sufficient to look at the basis of the analog circuit later. Teaching material: Kang Huaguang's "Electronic Technology basics" (Higher Education Press) is still good (our electronic department is in use ). If you are interested, you can refer to the Book of Tong shibai.
Digital Circuits are much better than analog circuits. Let's take a look.The digital logic written by Professor Liu yingyu of beigong UniversityMany people have said that this book is of great reference value (from the Mechanical Industry Press ). The reason is clear, and the practical value is high. It is a kind of feeling of "Enjoying science" to listen to her courses. YAN Shi's book at Tsinghua University is also a good teaching material. Unfortunately, the integrated circuit lecture is missing. If you are really interested, let's take a look at the design of a large-scale digital system (Beijing airlines uses a lot of it ).
How to teach the computer system structure is still under discussion internationally. A good teaching material available in China isStallings's "computer organization and architecture: Designing for performance"
Ben). What is most popular internationally is"Computer Architecture: aquantitative approach", by Patterson & Hennessy.
The operating system can be selected as neededKernel Design and Implementation of the Operating SystemAndModern Operating SystemOne of the two books. Both parts can be regarded as classic, and the only drawback is that they are not strict enough in theory. However, this field belongs to the hardcore system, so in theory it is quite understandable. Recommended for theoretical purposesTsinghua University Press Operating SystemZhang yaoxue, director of the High Education Department, wrote the textbook. Another one is recommended.Windows operating system principle Machinery Industry PressThis book was written by Chinese operating system experts for half a year at Microsoft, and has been written for more than a year. The operating system experts, apart from Zhang yaoxue of Tsinghua University, are currently the Director of the high education department) almost everyone participated. Bill Gates writes the order in person. It not only integrates windows and XP, but also details the kernel of the operating system. It also introduces some windows programming basics and the taste of a foreign edition, in addition, the above content can be said that only the book at home and abroad has a detailed introduction to the Windows Kernel,
If the formal linguistics is better, I only need to learn four algorithms in the front-end of the compilation principle: the easiest way to implement recursive descent; the best top-down algorithm LL (k ); the best bottom-up algorithm LR (k); LR (1) Simplified SLR (maybe another simplified lalr ). The backend belongs to the engineering nature and is naturally an another story.
Recommended materials: the "Compiler Construction Principles and Practice" written by Jian th C. Louden isCompilation Principles and Practices (translated by Mechanical Industry Press)
To learn about databases, we should remind you that VFP, VB, and Power Builder are not used to understand databases. (There are too many people in the world who think they know databases !) Database Design is both scientific and artistic, and database implementation is a typical project. In a sense, databases are the most typical computer course-science and technology integration and mutual penetration. In addition, it is a new feeling to recommend that you go over and look at the database technology after learning software engineering. Recommended materials: Database System concepts, such as Abraham silberschatz. We recommend you take a look at the integrity of your knowledge.Data Warehouse translated by Mechanical Industry Press.
The standard textbooks for computer networks are from Tanenbaum.Computer Networks (translated from Tsinghua University). Also, we recommend Xie xiren.Computer network tutorial (People's post and telecommunications Press)The problem is clearer, and the references are more authoritative. However, the network also belongs to the hardcore system, so reading books is not enough. We recommend that you read the RFC more. You can download the RFC file by number at http://www.ietf.org/rfc.htm. Read from the IP address. When you can master about 10 common protocols, few will dare to underestimate you. I think it is better to design the network.
The importance of the data structure is self-evident. after learning the data structure, you will have a revolutionary baptism of your programming ideas and have a clear understanding of how to establish a reasonable and efficient algorithm. I think you should pay attention to the following points for algorithm creation:
When you encounter an algorithm problem, you must first know whether you have handled this problem before. If you have met this problem, you will generally make it smoothly. If you have not met this problem, consider the following:
1. Is the problem based on a known and familiar data structure (such as a binary tree? If not, you must design your own data structure.
2. Which of the following types of algorithms is required? (Create a data structure, modify the data structure, traverse, search, and sort ...)
3. The mathematical nature of the algorithms required for analysis. Do they have recursive features? (For recursive program design, as long as a reasonable parameter table is designed and the conditions for Recursive termination are met, this is basically done .)
4. continue to analyze the mathematical nature of the problem. based on your previous programming experience, imagine a feasible solution and prove its correctness. if the question requires time and space for the algorithm, it proves that your vision meets its requirements. generally, time efficiency and space efficiency are not both possible. sometimes you must create a secondary storage to save time.
5. after a period of analysis, you have some ideas for solving this problem. or, you can simply describe your algorithm in natural language. continue to verify its correctness and try to find out the errors and solutions. when necessary (conflicts that cannot be solved), overturn your own ideas and start from scratch.
6. after confirming that your ideas are feasible, write the program. in the process of writing code, consider as many issues as possible. the program should have a good structure and be annotated in key areas.
7. for example, run your program on paper with a pen to further verify its correctness. when you encounter a situation that is inconsistent with your ideas, analyze whether the cause of the problem is programming or algorithm thinking.
8. If the program has passed the above verification, it will be further optimized or simplified.
9. Write ideas and comments.
Specific algorithm ideas can only be obtained by yourself through your own knowledge and experience, without any specific rules (otherwise, all programmers can be laid off, use the machine to automatically generate code ). you must have a wealth of imagination. That is to say, when you cannot get through the road, you must not be arrogant and dare to overturn your own ideas. I am just a beginner. I will share some of the above experiences for your reference and discussion.
I think that AI is also worth your careful research. Although it is not just a rising discipline, it is definitely a very promising discipline. Professor Tu xuanyan, one of the founders of artificial intelligence in China, is defined: artificial intelligence is a technical science that imitates, extends, and extends human and natural intelligence. On the official education website of AI, artificial intelligence, or AI for short, is a combination of computer science, physiology, and philosophy. AI is a broad topic, consisting of different fields, from machine vision to expert systems. the element that the fields of AI have in common is the creation of machines that can "think ".
Questions about this subject research include:
(1) symbolic: the basis of symbolic computing and program design, Knowledge Expression Methods: knowledge and thinking, generative rules, semantic networks, solutions to first-order predicates logical problems: search strategies, heuristic Search, search algorithms, problem reduction methods, and predicate calculation: the principle of generalization, And the Process Expert System: Methods and tools for establishing an expert system
(2) connectivity (neural network school): in 1988, the US authority pointed out that the development of the database network is on the rise, and the neural network may be the only way to solve artificial intelligence.
I think that for AI learning, you must not learn some ready-made conclusions like mathematics. To learn how to analyze problems, we 'd better use programming to achieve it, dr. Tu xiaoyuan, the winner of the ACM best doctoral thesis award, is recommended here.Artificial Fish-artificial life methods of computer animation (Tsinghua University Press). If you are engaged in artificial life, you will not know the internationally renowned Tu's father and daughter. Of course, the first choice for AI booksArtificial intelligence a new synthesis Nils J. Nilsson.Originator!
I would also like to say a few words about network security. With the development of computer technology, the informatization level of the whole society is advancing by leaps and bounds, and the computer network technology is changing with each passing day, networks have become an indispensable part of all social work fields. As long as there is a network, network security is a problem that must be solved, learning Network security is not simply about collecting hacker tools, but about blacklisting others' websites. Instead, you need to learn their mathematical principles, how they work, and how they work, in this way, most existing and new security problems can be solved.
I want to talk about some edge science in Computer Science. For an enterprise, is it because several programmers are sitting together? Do you write a program and I write a program? Apparently not. Software Engineering is a typical synthesis of computer science and mathematics, management science, psychology, sociology and other disciplines. It brings our theoretical and technical personnel into a society. You should not only consider the advantages and disadvantages of programs, but also the differences between programs and software, the differences between software and software products, and the market prospects of software products, how to better communicate with people. In this regard, I am still in the learning stage. I will write more articles in this area later. I would like to recommend some books to you: the best selling for 20 yearsMythical man-month(Chinese Version of Tsinghua University, photocopies of China Power Publishing House ),Software Engineering-Methods for practitioner Research (translated by Mechanical Industry Press),Man piece(It is said that every department manager of Microsoft has read this book. I suggest you and those who want to be the boss to check out who is in a software company .)Science and Art of Software DevelopmentAndSoftware enterprise management and culture(Of course, it is necessary to study the successful experience of Microsoft to study how software companies can win !)
I think the learning of computer technology is like this: Any science in the school is lagging behind. Don't always think that one of the technologies you have mastered is already invincible in the world, although many Java, VB, C, and C ++ are currently used, how can we ensure that the day has not been eliminated. the birth of the net platform and the initial appearance of the X # language completely explain the problem. In other words, when we master a new technology, there will be new technologies. As a contemporary college student, we should have the quality to keep up with scientific development. For example, some people say that I like to write HTML directly for webpage design, and I don't want to use FrontPage or Dreamweaver. It is good to write web pages in a language, but there are efficient means. Why not do it? Just to show your own high level, unique? I think the real high level is the ability to accept new things as quickly as possible. The development of advanced programming languages is changing with each passing day. In the future, programming will be like people talking. I think you should have some experience in XML. Is it true that we have to write an assembly for everything to show that our level is high? It is better to simply write it in machine language. Conversely, the key to receiving and using new technologies as quickly as possible lies in your understanding of computer science.
Computer technology involves a wider range of things. I'm afraid I can't tell a lot about it for a year or a half. I just want to remind you that technology and science cannot be separated. If you have learned science and done technology at the same time, this is the best strategy. It is like English. People must have an interpreter to communicate with foreigners. Now all people on the road can speak English. Even the champion of the 21st century English speech contest won't be able to win any English students. The same is true for computers. One reality we must face is that computers are actually just a tool. If they do not possess other qualities, even though computer students cannot find a job, however, one day when other professionals master computer technology, they will be much better than us. The reason is that most computers solve practical problems, but the knowledge of practical problems is rare. A single computer technology has no foothold.
I want to point out that before learning every course, you must first understand the learning purpose of this course. The application field of this discipline. According to the learning status of my peers and lower-grade students, few of them know the purpose of learning a subject, after the final exam is over, I don't know what to do with this subject. This will lose the significance of reading computer science. Of course, this has nothing to do with the existing educational ideas.
In general, from the perspective of education, the Curriculum Arrangement of domestic colleges and universities is not very reasonable, emphasizing theories, and unwilling to go deep into education theoretically, unable to accept new technologies, and avoiding new technologies. I think the key issue is that colleges and universities in China are difficult to break through the status quo, and there are limits on how to develop. Although we know the superiority of foreign education, why can't we take action? Even if it is a little bit refined. We need to change. From our own perspective, most people have not learned the academic level of computer science or the tenacity of computer technology for four years. When I was a freshman, Professor Wang Aiping, my computer science entry-level mentor and professor of Huaibei coal Normal University, once said to me: "When you choose computer science, it means that you have set foot on a road, it means you have to fight for it all your life ...... There is a cliff behind you. You only have to move forward and you cannot move back ."
Some students say that there are too many things to learn in this way, and some of them are not very useful. I want to make an image like this: the people learned from the school are a sphere, and all aspects of knowledge should be possessed. However, there are few places in society where sphere is needed. Instead, bricks and tiles are needed, that is, talents proficient in a certain line. However, it is most convenient and convenient to use a sphere for objects of the same volume. There are many students in the school. To make more students adapt to this society, the school cannot make all the students into a sphere, then let the society reprocess these students and become truly useful talents. Even if you are very clear about what you will do in the future and are very determined to take your own path, you must take this step. The world is constantly changing and you cannot predict the future. Think clearly, please do it!
It is necessary to end this "joke" and I will not be able to laugh at it any more. In fact, there are still many basic courses in computer science. Donnell: I have limited accomplishments. I dare not make anyone laugh again. Final Statement: these are only for undergraduate courses. Even if we get all of these done, the road ahead is still long. Computer science requires us to fight for it... learning computer science requires toughness, innovation, and passion. Profound Study of theoretical knowledge and courage to accept the challenges of new technologies are the qualities that our generation should possess. Finally, let's say,"Wake up every day with a feeling of passion for the difference technology will make in people's life!".
When I was a freshman, I accidentally found the post "Hu Kan (theory) computer learning" by Nanjing University's netizen sir. This post played a crucial role in my university study, many of these ideas are also referenced when writing this document. In addition, I learned a lot from every conversation with Brother situ Yannan, which is also reflected in this document. And every time you send a message on the Apsara stack technical website. This document is one of my original lectures on admission education for new students in the lab school. I have improved some of the theories I think are inappropriate and I have corrected some ideas, in terms of recommended teaching materials, my learning situation has greatly changed. It is worth mentioning that the content of some computer theories has been added. The content of computer technology has been rewritten based on the Teaching Situation in China and the actual situation of our learning. The work I have done here is just to summarize the learning experiences of students and their thoughts and Thoughts on computer science. It is very immature. The goal is to give some suggestions to some students who have just enrolled or who have not yet begun learning computer science. However, it may be helpful for students to learn computer science and technology. I hope everyone will criticize and correct it.