怪我咯2017-04-17 11:05:39
The Road to Programmer - Advice from an old programmer to juniors who have just entered college
Original address: http://blog.csdn.net/justjavac/article/details/7998856
Learn C language first
I always believe that for a beginner, the technological trends in the IT industry cannot be followed . I often see my DDMMs throwing away their textbooks and buying expensive tomes such as C# and VB.Net, which makes me feel very sad. I find it funny that many BBS users who don't understand what pointers are talking about in C# can do without pointers.
C# is just like ASP back then. "Suddenly, a spring breeze comes overnight, and thousands of pear trees bloom." As a result, the information colleges of many schools have become "Web colleges." Many college students in grades 1996 and 1997 are working on the Web. Of course, I have no intention of discriminating against any particular industry. I just think that if they spend more time catching up with these fashionable technologies and spend more time on basic courses, they should be able to go further.
Beginners’ pursuit of the C# trend is actually just one of several misunderstandings often encountered in the learning process. I will use some practical examples to illustrate these phenomena. You can step by step to see if you belong to one or more of them:
Even if some people don’t have this idea, they still have such an impulse subconsciously. What makes me wonder is that many students in the School of Information also have such thoughts. Students who think that computer science majors are programming majors, and they ignore all courses that have nothing to do with programming or that are not very relevant. Extreme students will not read as long as the word "programming" is not in the book.
In fact, programming is just the lowest-complexity labor in the application of computer technology. This is why The people at the bottom of the IT industry are programmers (CODER) . Computer technology includes multimedia, computer networks, artificial intelligence, pattern recognition, management information systems, etc. Programming work is just the process of expressing algorithms in the process of theoretical research or engineering practice of these specific technologies.
People who program do not necessarily have a high understanding of computer technology. An interesting phenomenon is that many master-level computer technology researchers do not understand programming. Online hype and good job benefits in reality have demystified the labor of programming. In fact, every programmer knows in his heart that learning these things is not more difficult than other majors, so naturally it will not be high-end .
I have seen a girl's "Computer Network Principles" textbook. The girl marked the book like a primary school student with horizontal dashes and full notes. The printed book must be thicker than the textbook. What I don't understand is that taking notes is necessary for a course like Computer Network Principles? Our exam-oriented education has indeed harmed many students. When taking courses such as "Principles", many students recite and memorize them word for word as if they were learning "The Principles of Marxism-Leninism". This is the most stupid behavior I have ever seen. The so-called "principle" means that you need to understand why it does what it does and learn why, not how (how to do it) . Extremely serious students memorize the maximum length of Ethernet cables, the length of data frames, the meaning of each field, the format of the IP header, etc., but they forget the principles of routing and the purpose of the TCP/IP protocol design. In short, many people spend a lot of time memorizing books but learn nothing.
The same is true for these students when they are learning programming. They remember exactly every detail of C syntax. After reading the C tutorial, I read "Thinking in C " (really a good book), "Inside C ", "C reference", this C , that C ..., and then various anecdotes about C syntax on the Internet. , and then found that I had forgotten some syntax of C , and finally went back to make up for it...
A junior fellow student told me: "C is too difficult. After learning this, I forget about that. After learning, I forget about templates."
My answer is: "It would be easy if you don't learn."
I didn’t teach him bad things, I just told him that sticking to the syntax of C is as meaningless as Kong Yiji showing off the several ways to write the word fennel for fennel beans. You don't need to care too much about C syntax, just start programming. If you don't remember anything, just look up MSDN and figure it out immediately. I have concluded that understanding of program syntax is the most insignificant knowledge in the actual development process. This is why when I wrote a small program for my classmates in Basic (I had never learned it before), I only spent half an hour looking at the syntax, and then another half hour to complete the program, and an hour later Again I completely forgot all the keywords for Basic.
Finally clicked on the topic. Most people hope that their things can be turned into money immediately. This idea is reasonable for a programmer or project manager who has entered the professional field, and IT technology is advancing so fast that if you don't follow up, you will be unemployed. But for beginners (especially college students with plenty of time), this idea is puzzling.
The biggest capital of a beginner who has not entered the industry competition is that he has enough time to concentrate on learning basic things and learn why rather than how. Fashionable technologies are often easy to master, and they are getting easier to master. This is driven by commercial interests, in order to minimize the cost of software development. But the reality in the IT field is this. The easier something is to master, the more people will learn it, and the faster it will be eliminated . Every time a new technology comes out, many beginners follow up. These beginners spend a lot of time in the process of following up because they lack the necessary foundation. By the time they learn it, this technology will soon be eliminated. .
Although basic courses, such as data structures, operating system principles, etc., cannot allow you to implement a Linux immediately (this is why many people laugh at the uselessness of theoretical courses), they can significantly reduce your need to learn new technologies. the slope of the learning curve. And it is even indispensable for many key technologies (such as the design of Win32 SDK programs and DDK programming).
A living example is one of my classmates and I. When I was a freshman, I couldn’t find the power button, but he could already write some simple assembly programs. I spent all my sophomore year studying assembly, computer architecture, data structures, operating system principles, etc., while he began to learn HTML and VB, and caught up with the ASP trend. In my junior year, I started to learn the principles of Windows operating system and SDK programming. It took a long time, and then I was able to develop decent applications using VC. I was once annoyed because my classmates' programs were already running while I was still learning how to create dialog boxes. However, it was only after I graduated that I realized how correct my choice was. The company I was negotiating with offered a salary that was more than twice his.
Here is an inappropriate analogy: Assume that it takes 4 months to learn VB programming and 1 year to learn basic courses and VC programming. So if you learn VB first, and then learn the latter, the time will not be reduced, it is still 1 year. On the other hand, if you learn the latter first, and then learn VB, you may become very proficient in just 1 week.
If you are a student, or if you have enough time. I suggest you master the following knowledge carefully. My advice is for beginners who want to achieve something in IT technology. At the same time, I have also listed some books. These books should still be available in bookstores. To be honest, my biggest wish when reading other people's articles is for the author to make a book list.
College English - Don’t find it funny. I highly recommend this course because the ability to read without professional documentation is unimaginable. Chinese translations often come out only in the Year of the Monkey and the Horse, but now many publishing houses simply print the E version directly. The way to learn is to force yourself to read the original textbook. You will not understand it at first, but you will become more proficient after using it more. Being able to endure hardship and be ruthless is definitely a quality needed in any industry.
Computer Architecture and Assembly Language - There are books about architecture everywhere, and they are very similar. However, there is a very good book on assembly called "80x86 Assembly Language Programming Tutorial" (Tsinghua University Press , black cover, written by Yang Jiwen). You need to focus on learning the programming of post-386 protected mode. Otherwise, when you learn some of the underlying things of modern operating systems, you will feel that you are reading a book from heaven.
Principles of computer operating systems - Our development is always carried out on a specific operating system. If not, there is only one possibility: you are implementing an operating system yourself. Regardless, Operating System Principles is a must-read. This is just like when we make peripheral devices for a chip, we must understand the basic working sequence of the chip. There are many books in this category, but I haven't found any that stand out. I just think that after reading these books, if I have time, I should read "Inside Windows 2000" (Microsoft Press, I read the E version, the Chinese title must be "Windows 2000 Technical Insider" or something like that). Regarding the necessity of learning it, another article on ZDNET has already discussed it.
Data Structure and Algorithm - This course can determine the level of a person's programming level and is a core course. My first choice is the Tsinghua version (Zhu Zhanli, Liu Tianshi). Many people like to buy the C version, but I don't think it is necessary. The syntax of C makes the algorithm implementation process much more complicated, and many teachers like to use modules to make the algorithm more complex. It is best to browse the C version of the book after finishing the C version.
Software Engineering - This course became more and more important as I watched it, even though it was as confusing as watching Ma Zhe at the beginning. My suggestion is to read "Practical Software Engineering" (Yellow, Tsinghua University). Don't spend too much time memorizing notes and skipping them if you don't understand them. Every time you complete a software design task (whether it is an exercise or a job), you will review it and you will gain something every time.
Windows Programming - "Peking University Press, by Petzold" I recommend that anyone who wants to design a Windows program study it carefully before learning VC. And the previous book "Inside Windows 2000" is best read at the end of this book. In this book, there is no C , no GUI, and no controls. Some are how to use the original C language to complete Windows programming. After learning it, you will find that VC is actually very easy to learn. Don't learn VC in advance before reading this book. It's best not to touch it at all. Many famous schools I know even use it as a teaching material for teaching. This shows its importance.
I think the above courses are important courses that must be learned (if you want to be a Windows programmer).
For other courses, there is this simple selection method: If you are in the computer science department, please learn all the basic courses of your major . If not, please refer to the CS Department's course schedule. If you find yourself unable to continue reading a book, turn to the end of the book, look at its references, find them, study them, and then come back to the book. If a book has the word "principle" in its title, you must not memorize the details. You should master its essentials at a speed of at least 50 pages a day. Practice a theory or algorithm on a computer as often as possible.
Reading too many books every day can easily make people lose their way. Take a look at the books I compiled before that a qualified programmer should read. If the original text is blocked, you can go to CSDN to read it. You must think about what you have learned every night, what other related things you need to master, what you are most interested in, whether you spend too long on a book or not enough, etc. At the same time, you should also think more about the applications that are most likely to appear in the future, so that you can lead the technology trend instead of chasing it. At the same time, we strive to use the techniques and theories we have now mastered to create something new and innovative. Persisting in doing this will allow you to truly become a software "developer" rather than just a CODER.
This is the final advice for beginners. Compress the time you spend playing CS or CS to the minimum every week, it is best not to play them. At the same time, if your ASP technology can already bring in money, or even a company asks you to work part-time, this proves that your talent can ensure that you will make better profits after studying hard, and you should do more complex things. Take a long-term view, this applies to everyone.
高洛峰2017-04-17 11:05:39
Tell me my opinion, it is just for reference.
When I was studying in school, the first thing I came into contact with was C, which was limited to learning. Later I came into contact with C , which is also a personal interest. Later, when I was in graduate school, I learned C again due to the needs of laboratory projects, and later, for the same purpose, I learned Java. After graduation, I originally planned to find a career in C development, but by mistake, I entered my current company and worked in Java server-side development. After work, following my personal interests, I learned Python, Scala, and JS, but I was limited to doing things that interested me.
I have said so much just to illustrate a point with my own personal experience: when learning a language, don’t worry about whether you should learn A or B. The important thing is to learn with goals, or needs. , Goal-driven is the most effective!
Also, I read your comment that the first language is important. As for whether the first language is important, my opinion is: it is very important, but it does not play a decisive role. What matters is action! And if you want to pursue programming as a career in the future, it is very likely that the programming language you work in is not your first language, and as a coder, you should not be limited to one language!
Finally, if you are still in school, don’t just focus on language. Language is just a carrier. What is important are essential things such as data structures, algorithms, and programming ideas.
大家讲道理2017-04-17 11:05:39
Let’s learn C first. After all, it is a system language and involves more low-level knowledge.
I agree with what @justjavac said
The easier something is to master, the more people will learn it and the faster it will be eliminated
迷茫2017-04-17 11:05:39
Python is good, with low entry barriers and powerful functions. The code indentation makes the program itself very beautiful. Once you get used to it, learning other languages can make your coding style more "elegant", unlike some programmers (including me) myself, sometimes the code is just a mess). LS Everyone has answered very well. To put it bluntly, language is just a tool. Personally, I think what we need to learn is actually "how to learn." PS: Of course, if you want to learn purely from c and java, of course it is still c. . .
大家讲道理2017-04-17 11:05:39
I still think it’s better to learn a more advanced language first. For example python It is relatively advanced, not difficult to learn, but easy to learn, and closer to natural logic. After you have an idea about programming, start in-depth research in special fields when doing research on specific directions.
There are many introductory programming courses on coursera. The language used is basically not C. My feeling about c is too low-level. Many of c's abstractions have the feeling of noting the machine structure. It feels very close to a compilation. Therefore, if you are not starting with learning hardware, I still support learning a language like python first. Understand what programming is all about. Programming = algorithm data structure. This is a statement. The algorithm should be the process of formalizing the problem (I remember the teacher said this). This aspect actually has nothing to do with the bottom layer.
There are too many language details such as c, java, and c for beginners. Especially c . In Java, there are many concepts, but it is actually very simple.
I’ll post two courses I’m watching: python https://class.coursera.org/interactivepython-002/class/index The following one is using racket https://class.coursera.org/programdesign-001/class/index
迷茫2017-04-17 11:05:39
Unfortunately, C language focuses too much on the abstraction of machine models and is not suitable for programmers to get started.
A blog from Yunfeng "The Past and Present Life of C Language" is an article written for "Programmer" magazine.
怪我咯2017-04-17 11:05:39
Programming that abandons practical purposes is nonsense. And it’s best to be guided by interest. What do you most want to use your programming skills for?
Building a website or webapp? You can learn both Ruby and Python. If you like things that focus on front-end interaction, a front-end mvc framework such as Angular and Ember are good choices, otherwise jQuery is the way to go. Java and .NET are not recommended. The advantages of choosing web development are that on the one hand it is a relatively mainstream thing, on the other hand if you are making a mobile app, you can simply use HTML5 technology such as phonegap to simulate it, and there is no harm in mastering html, css, and javascript.
Building a mobile app? Both iOS and Android development are good, but for iOS development you need to buy a mac separately, and the investment cost is relatively high.
I won’t comment on other things, I haven’t done them yet.
Remember what you want to do with your skills, which is more important than the skill itself.
Once you choose a direction, drill it carefully. Don't change your mind halfway when you see something else. No matter what you choose, your investment in technology will turn into valuable experience. Don’t worry about “changing the language and becoming completely unfamiliar” in the future.
巴扎黑2017-04-17 11:05:39
I remember my mentor told me this ----Demand-driven learning, learning without demand is just empty talk
It’s very troublesome if you don’t understand your own needs. It is equivalent to China’s exam-oriented education, which is just exams for exams and education for exams
Doing things that are not necessary will only make people forget that their central idea is to be a "human being"
It is recommended that for web, learn python’s flask or django. Java’s three major frameworks, ruby’s ruby on rails, etc. The rest is left to c/c or assembly
Of course. In fact, once you learn one language, it is natural for you to want to learn a second language. Because I am also a beginner, not a computer major, and have not graduated.
Although I have never learned PHP or Ruby, I don’t find it difficult at all to read PHP and Ruby codes. Because I am new to programming in Python, this is a very easy scripting language to learn
Later I discovered that there was a need for BBS, so I went to look at the source code of discuz (php). I also found that I needed to create a static blog (jekyll) on github, so I slowly started to read ruby code. Just like this, after a year and a half of hard work, you should be able to become a novice
Why do you say you are still a novice? 1. Rookie You have to decide whether you want to continue on this road, sincerely 2. Xiaobai Start literacy on your own, in the form of programming, and persist, every day. As for already becoming a programmer, then what happens next... 3. 4. 5, ...Omit 500,000 words
Finally, here’s a quote from Gesolin’s Android tutorial book: What is needed to implement an idea into an executable application is the experience accumulated from reading and writing code, and the patience to stick to the idea until it is completed