This article is roughly my last reply. Today, I will organize it, I hope to benefit more people.
First of all, what I want to say is that people have a message, not every computer is born, will go to "programming", before and my classmates with my bedroom, now there are only two people programmed, and there are two other six. Going to the civil servant, some go to a similar bank, the court is to do computer maintenance, there is a change, now do "credit". So you have some other choices, if you are not interested in programming, I suggest you still go to do something else, because you can't hold it, even if you are hard to learn, you can only follow others. It is very painful. In addition, the postgraduate is actually a good choice, but it is unfortunate to test "politics" and "English", otherwise I will also take it. :)
If you are an undergraduate study, the following article is written for you; if you have just started working, I hope the following will help you. . . . . .
One. About various compulsory courses of the computer undergraduate University
What I first want to say is that it is not useful for each must be careful, and it is true.
1. "Obviously useless" is: "University Physics", this class, you only have 60 points to do it. "University Physics" We are learning, because I have learned very seriously, but now I'm looking back, it is the most used class, and I haven't used it. Of course, maybe a certain Will say this is a "quality" problem, of course, if you think about it, I think if you are not interested in it, don't spend too much time, time is precious.
2. "More apparently useless", "XX revolutionary history", "XX morality" I will not be nonsense.
3. "Very useful", they are: "program design", "data structure", "operating system principle". These three courses, I think it is the most useful three courses for the entire university, and it is useful. "Programming", in our class, "C program design" is called "C programming", in fact, it is to teach you to use a high-level language, and the importance is self-evident; and learn later, such as learning "Compilation Principles". When it comes to various lexical analysis, it will write some examples with C (I am using C ), and then, that is, "program design" is also used to learn many times. Course tools. "Data Structure" can be said to be one of the core technologies to be used by "programming the whole thing", must be well understood, fully mastering this course. "Operating System Principles" include a lot of things, such as the basics of "process and thread", if you have a good, then you will have a lot of trouble when you have a "multi-thread" program. And, only the operating system is understood, it is possible to make an application software. It is very simple. The applications used must be running on the operating system, and it must call its function.
For these three courses, it is best not to watch the textbooks written by the Chinese. "Operating System Principle" suggests "operating system: design and implementation" (second edition), author Anderw S.TaNbaum, etc. This book is divided into two volumes. The following is the principle, the book is the source code of the Minix operating system, and the book must see that the book is selected according to the situation of each person. It is also good. "Data Structure" suggests "Data Structure - C Language Description", author William Ford, etc., but the "data structure - C and object-oriented ways" is also OK, if you use it to do textbooks , Then you are barely look at it. As for "program design", too many books, "The C Programming Language", "C Prime", "Thinking In C ", "Thinking in Java" is a good book. In addition, it is said that there is a problem that some people argue in the past, (now a C # now, now a C #) Which language is good? Which one should we learn? This is actually a boring argument, because their 80% is the same, so you can use the "Time used to argue" can have done another two kinds of "one of them". After you are proficient in these three languages, it will not be deliberated, the language itself is only a means of expressing ideas, what is easy to learn!
4. "Useful" class. These classes cannot be "direct useful", that is, many of them have been almost a few years, and they will not affect your current job. However, they are paving, and they are cornerstone. For these classes, our attitude should be, pay attention to basic concepts, do "understand the rough framework", but you can ignore unnecessary details (but you will take some details when you examine, then you will see yourself. Do it). . These classes are: "Microcomputer System and Assembly Language", "Computer Composition Principles", "Computer Network", "Software Engineering", "Database Principles", "Computer Interface Principles", "Compilation Principles", "Computing Method", " discrete mathematics". "Compilation" is still useful, it is the key you understand and learn the "Computer Composition Principle" and "Computer Interface Principle". "Computer Composition Principles" and "Computer Interface Principles" are actually telling you the hardware structure of a computer. For example, what is going on inside the CPU, how is it calculated and cached, how is the DMA transmission method, etc. (Or I have figured out, after all, many things you will slowly have later forgot this later, I will feel compared. "Computer Network" feels that and the actual network programming is not large, but also explains some principles, and seeing the psychological comparison :). In addition to some principles, the "database principle" generally teach you SQL syntax, the most difficult thing is a variety of "query" syntax, but you will find it when you use it, these are unnecessary, general "Complex query statements" have tools to be automatically generated, don't write it yourself, so you don't have to worry about it. "Software Engineering" is actually impossible to understand it as an undergraduate student. It must have many of the practical experiences to experience some of the truths, and the domestic "software engineering" teaching materials are generally comparable "teaching barism. ", It is recommended to browse it, you know, know what is the development process of large software, you can (and also need), as many of the concepts, the weight is understood, how much can understand how much Don't go to "back", useless. "Calculation Method" This class can now be said to be a practical value dramatic, because all algorithms have a ready-made library that can be called, so it is probably to understand it, I really want to develop algorithms, no matter what you want to develop algorithms. At that time, I learned again, and I have to go back to see these books, because you have never used them at all, I have forgotten it. As for "Compilation Principles", some people think it is very important. I think it is aware, and I know what is going on. Because you are unlikely to develop a compiler, but in actual opportunities are also available. For example, I need to use the "Compilation Principle" to do a "lexical analysis program" to handle the function expressions entered by the user, then call several library functions to make points, but total For "Compilation Principles" only play a practical role in writing a limited part of the program, so let's take a look at it, wait until you use it. "Discrete Mathematics" is the theoretical basis of the "data structure" mentioned earlier. If "discrete mathematics" is well learned, understanding "data structure" will be easier, so it is still speaking.
Recommended a book: "Compilation Principle and Practice", the author Kenneth C.Louden, this book Appendix has a source code of the Tiny language compiler, and it will not be like the "Compilation Principle" of the Tsinghua Edition in the previous theory. Such a cloud (we used to use this textbook at the time, and later I bought "Compilation Principles and Practices" in Kenneth C. Louden. Many problems are suddenly turned out. In addition, what I want to say is that "Software Engineering" is actually in a primary development stage, the theory of cmm, XP, etc. cannot be opened, and each said, almost reached the extent to each other. . As a beginner, especially the "lack of practice experience", I suggest you know more about various theories, note that I refer to "understanding", not to "back" the strip box, when you understand most After the mainstream software engineering thinking, you will form your own more objective thoughts. Of course, you need to combine some experiences, this is the future. As for what books, too much too much, go to find it. 5. "Not useful". In fact, these classes are already polite, some of them are actually "useless." These classes are: "Automatic Control Principles", "Communication Principles", "Digital Circuit Principles", "Simulation Circuit Principles", "Rehabilitation Functions and Integration Transformation", "Linear Algebra", "Probability Theory Mathematical Statistics, "Higher Mathematics". Among them, "Automatic Control Principles" and "Communication Principles" I feel too far from the actual programming, I have learned them, but I have forgotten now, and I don't affect anything I am now. "Circuit Principles", "Digital Circuit Principles", "Simulation Circuit Principles" These three courses are also the basic class of computer disciplines. I only feel that "digital circuit principle" is for understanding, such as "computer composition principle" and "computer interface principle". There are also some help, but there are two courses, I can't find that they are useful. For example, "The Simulation Circuit Principle" is mainly to teach you something such as "internal structure of the triode". If you think this is also If you are "something you must master", then I have nothing to say. In addition, "retrieval function and integration transformation" is the foundation of "digital image processing" (this is a graduate course). If you think of Adobe to work, you should study them early, but in addition to this, it seems to be Don't use it. "Linear Algebra", "Probability Theory and Mathematical Statistics" and "Higher Mathematics" I feel that it is a so-called "quality". These things don't understand, but I can't understand it, but I have to understand what extent, everyone looks at themselves. . In addition, "Higher Mathematics" is also the basis of "rehabilitation function and integration transformation".
6. English language. This class is very special, very useful, in summary, now I will never regret it. :)
two. About extracurricular learning
First of all, what I want to say is that if you become a "excellent programmer", you should start your own "extracurricular self-study" from the university, it is necessary, otherwise you will fall behind others. In addition, don't think that "all the basic courses have been very good", "can" learn more practical programming technology than others "."
(Also, I want to explain, I only know Windows programming, Linux I don't understand. So if you are determined to Linux field, my article will not help you?)
1. Main line.
As a "main line learning". I suggest this: first look at these two books: "Windows program design" (fifth edition), author charles petzold; "Windows Core Programming" (Fourth Edition), author Jeffrey Richter; no doubt, two books Must see! Otherwise you will never be a professional, advanced programmer (I refer to Windows programmer). In addition, watching "Windows Core Programming" has previously needed to have the foundation of "operating system principle". At the same time, if you learn C (at the moment, C is still using the broadest programming language in China), only to see your textbook is definite enough, except for the "THE C Programming Language" such as "THE C Programming Language" (pick one It's enough to see it), you should also take a look at "Effective C Chinese version", author Scott Meyers. Next, I suggest you don't go to learn MFC, it is outdated, and it is really not very easy to use. I recall the scene of learning MFC that year, I always feel that I don't have a proportion. At this time, you can learn ".NET" programmed, learn the C # grammar (Tom Archer "C # Technical insider" is not bad), you will find it very easy, you can get fast, because you already have Very good C foundation. Then find a comparative full introduction ".NET" book looks, now, I think ".NET program design technology insider" is a good choice, author Jeff Prosise. I am not talking about learning ".Net", I will see these two books, but as a "student", I can see it here. (Of course, you can see Jeffrey Richter "Applied" if you think it is not enough. Microsoft.Net Framework programming "). Also, in learning a variety of programming techniques, it is essential, otherwise, what do you forget? Finally, if there is time, learn "design mode" (it is actually very important, and slowly, you will feel more and more important), the book is very, "design model" is recommended (author Erich Gramma et al. ), It is a master of "design model" book, very good book, "design model" is also to practice some practical experience, so you may not fully understand it. 2. Branch line.
As a branch, that is, I think they are relatively important. And learn that they can be in order, but I still recommend reading the top three books mentioned above ("Windows Programming", "Windows Core Programming", "Effective C Chinese") will then learn the following things. .
"Java". . The "Java" will definitely cause a lot of people, or indignation, of course, you can also use it as the main line to replace ".NET" above. However, according to my own experience, ". Net" has more advantages, if you don't agree with my point of view, of course you can learn "Java", no problem. But as a "beginner", I still suggest that you have learned, so you can have a comparison, you can choose a "technology route" for your future. In addition, the time is still more (six books in the main line), and "learn Java" that I said here only suggest you to see a book: "Thinking in Java", this book can be said to be entry Good choice, as for how to continue learning "Java" in the future, you can take a look at the column articles of Cai Xuebi in 9cs, and it is very detailed. "network programming". . I think many people are still more than this thing. I suggest that if you want to "more proficient" to the network, you should take a look at "Windows Network Programming Technology" (Second Edition), author Anthony Jones. This book and the "Windows program design" belong to the same technical level, which is directly programmed with "Windows API". The benefits of learning this type of things can make you not only "know" and "know what it is" . However, if you learn "Java", you can also skip this book, look directly at "Java NetWork Programming", is O'Reilly book, the author I forgot. Aspect aspect as ".Net", I haven't found a special book that specialize in online programming, I will find it. (In fact, there is already a lot of content on network programming in the ".NET" book) "COM". . "The previous learning method" is first to see "Depth Exploration C Object Model", author standy b.lippman; then look at "COM Nature" (Author Don Box), then look at "COM principle and app" (author Pan Aimin), go back to the back of "COM Nature". The two chapters of "COM Nature" have excellent, it uses the "What is COM" with the most understandable way, but the back part of this book is more embarrassing, if there is no actual "COM program write Experience, it is difficult to understand, so I mentioned here to insert a look at Pan Aimin's "COM principle and application". However, there is a problem, the application part of "COM principle and application" is MFC and ATL (sorry, I mentioned these outdated things, I just be too familiar with them), I have suggested that you should not go in front of you. Learn MFC, so I have had contradictions, please do I ignorant, in the current situation, I am not very unable to learn "COM" is the most effective, here I really can't "update the method". But now with ".NET" advances, "COM" survival seems to be getting smaller and smaller, so "what is going to learn from COM" is also almost become "seeing the situation again" problem. . However, I feel that in any case, "the basic ideas of COM" can still bring great benefits, it's too classic! That is, the first two chapters of "COM nature" said.
"DDK". . The so-called "DDK" is "device driver", which belongs to a relatively unfamiliar aspect, but the truth is "because of it is uncommon, so the income of the technicians in this area", "DDK" knowledge is to you There is a lot of things (such as ".NET", "java") will not bring any help, it is more independent. So my suggestion is "Don't go to learn it when you have no ability to determine your own special attack," because it is really university. I just know a little one or two, so I can only say it here. But you can recommend a book: "Programming Microsoft Windows Driver Model, (Author Walter One). Ok, let's definitely beyond the "beginners". In fact, learning here, plus you have accumulated a certain actual experience, then learn something, how to go, you will have your own independence. I will no longer talk nonsense.
three. Several beginners should pay attention to problems
1. Whether you are studying the basic class, it is also a serious understanding when learning the actual programming, don't die hard. For example, "Software Engineering" said above is the best example. Once, I met two people who were discussing MFC, "A" said: "I think MFC is really complicated, so many classes and methods, I don't know how to learn." At this time, "B" said that he also has the same feeling, but I have found the way learning, so "B" is sincere to "A": "In fact, sometimes I want to back some things, you can buy a Chinese version of the MFC class manual, every day, every day , Just slowly. ". I walked next to it, I called a chilly. . For MFC this kind of thing, in addition to understanding more, many things naturally remember, of course, so many classes and functions can still remember their exact names and usage, but don't worry, you already know what kinds of And the method is probably existing, so I am looking for it to "MSDN" when I use it. I am afraid.
2. I will mention the two books of "Windows Programming" and "Windows Core Programming". They are all introduced based on "Win32 SDK" platform (or interface) programming, that is, "Windows API" "Direct programming, this is a very bottom-up Windows programming method. For today, the meaning of learning "Win32 SDK" program is greater "to make you more thorough understanding based on the above, more convenient, more easy to use and efficiently, so that Can use them better ", such as" MFC "," Net ", etc. If you must use the "Windows API" to be programmed directly in the actual development, it is undoubtedly self-discipline. Therefore, we must encourage tools with higher development efficiency, of course, understand the programming of the "Win32 SDK" platform can bring you huge benefits when you use these advanced tools. "Network Programming" is also the same. The "Windows Network Programming Technology" mentioned above is also WINSOCK (which is part of Win32 SDK), when you actually program, you may not use it directly.
3. Practice is very important. This truth is obvious, such as C syntax, if you don't use it, even if you can take the whole book, you will definitely forget it. The process of use is actually a familiar process. When you use it, you may find yourself how you can't think of it, it doesn't matter, normal, then come back to see it, so repeated a few times, remember it. . 4. Perseverance. There is a premise here that "you are really interested in programming", if you are so, don't say that you will continue to learn. But if this is not the case, it is very bad, just like the person mentioned when I started, he is "I am not interested in programming", so I have been working hard, I feel my body and mind, but always fall Behind others, now I will finally do the credit ".
5. About the "Advanced Programmer" exam. This exam is actually a unassum, he is divided into the afternoon and afternoon, in the morning, some basic concepts, that is, the more important courses mentioned above, the difficulty and form of the exam and the end of your final exam, In a afternoon, it is actually similar to your "program design" final examinations. In a word, the test is a very theoretical thing, and people who die books can generally pass :). If you know that the company you want to apply will be more important to this certificate, take some time to review the previous course, take a certificate, and two students who go to civil servants are actually I passed this exam. But if this certificate is not the premise of your employment, I suggest you spend time on this, because it is too simple, it is not helpful to improve your actual level. Of course, this is just my personal point of view, there is no despise the meaning of this exam.
6. Maybe your ambition is when a "technical director", or "XX Director", that is, the so-called "non-written code", of course, many people think so. However, remember that these people have a good actual programming experience. If there is no such experience and accumulation, they can't get the realm of the present, and they can't serve. Therefore, some "technology" is necessary to learn more.
7. Finally, I want to remind you, although you may already feel that you can "learn your belly", but don't think that you can understand, you will start thinking about it. I have been fortunate to Issue the class of "Money" teacher. He gave me the most impressed saying: "You should think that you should be ignorant, how so many things don't understand? So you have to modest To be modest, I can't learn a little bit, I am not thinking about it. "(This is his original words in the class ...)
*** I wish you a happy study, happy programming! ***