All active members of LUG will sooner or later be attracted to the circle of coders.
The origin and truth of this rumor are not considered for the time being. Whether it is the atmosphere of LUG that leads the buddies to the road of coders, or those who are determined to take the road of coders will be active in LUG for a long time, I can’t tell.

Why choose computer science major, in fact, is two propositions:

  1. Why choose computer as a future career?
  2. Why choose computer science major during undergraduate?
    I try to interpret these two propositions with my own experience. In my youth, I once regarded scientist as my dream. In the third year of high school, I thought about doing theoretical computer research. At the juncture of freshman to sophomore, I once hesitated between mathematics and computer science, and even considered studying physics. Because I couldn’t figure it out, I didn’t apply for a change of major in the second semester of my freshman year. A week after the start of the second semester of sophomore year, I felt that I couldn’t continue to be chaotic, so I submitted an application for a change of major. From the second week, I embarked on the road of no return to coders.

The Dream of a Young Scientist

When I was a child, like many people, my dream was to become a scientist. Until high school, my idol has always been Qian Xuesen. I like the poem of the former prime minister: “I look up at the starry sky, it is so sparse and deep; that infinite truth, let me seek and follow bitterly.” There are too many wonderful and worth exploring things in the field of natural science, and the various popular science I saw when I was a child made me feel that I met science too late.

In order to learn more knowledge, I ignored the persuasion of teachers and parents to “focus”, and reported all except the biology competition. The mornings and afternoons of Saturdays and Sundays are all full. Anyway, you don’t have to pay, you don’t listen to it. It’s not time to judge whether the choice was right at that time, but I really enjoy this fulfilling time. Natural science has greatly influenced my worldview. In the first year of high school, I heard about the second law of thermodynamics through the physics competition, heard about the principle of “entropy increase” and “heat death theory”, and began to think about the meaning of life, of course, it is all illusory now. When I graduated from high school, I had no special preference for mathematics, physics, and computer science.

When I first entered the University of Science and Technology, my idea was to lay a solid foundation in mathematics during my undergraduate studies, and then to do theoretical computer research (that is, computability theory, algorithms, etc.), in fact, I don’t understand what theoretical computer is. The USTC recommended students have a plan to take college courses in advance. The “compulsory labor” teacher advised me: lay a solid foundation in mathematics during undergraduate studies, and it will be more convenient to engage in various research in the future. Although theoretical computer science is an interdisciplinary subject of mathematics and computer science, many of its research methods are inherited from mathematics, and there is no need to know too much about computer engineering technology.

So, I entered the Hua Luogeng class to study mathematics. I also joined the physics club for freshmen - the Ge Wu Zhi Zhi Society, because I heard that the physics major of USTC is very good, so I don’t want to give up this advantageous condition. But I didn’t participate in ACM, because I saw some self-mockery of “coders” on the Internet, and I didn’t want to program anymore (I didn’t know there was a big difference between coders and coders); I also heard that the ranking of USTC computer science major is not very high, I feel that studying computer science at USTC is not as good as choosing Shanghai Jiaotong University (this is bound by sunk cost and falls into a thinking trap).

If I had been studying mathematics honestly in the Hua Luogeng class, maybe I would have become a top student and lived a happy life as a PhD student in the United States. Unfortunately, in the Ge Wu Zhi Zhi Society, I met a group of buddies with ideals and pursuits, built a forum for sharing learning materials and discussing physics, and I accidentally fell into the pit of Linux. Looking back at the forum built four years ago, these starry sky pictures and physical images still lead me to think: I abandoned the tempting and deep natural science and fell into the pit of computer, is it accidental, or is there some kind of inevitability in the dark?

UntitledUntitled

The Choice between Mathematics and Computer Science

Because I didn’t brush Jimi Multivich, I never learned integration. In the second semester of my freshman year, mathematical analysis, a lot of content is based on integration, I already feel a bit difficult. In that midterm exam, because I overslept, I was an hour late, but I did an hour of questions, and by the time I handed in the paper, I basically couldn’t do the remaining questions; the teaching assistant took me to his office and gave me an extra hour, but I only did one question in that hour. This sense of loss with a blank mind is something I have never encountered before. (Of course, the feeling of failing the mathematical equation exam in the second year is even worse, so it is quite difficult to fail in college)

In the second semester of freshman year, Mr. Shi Jihuai, the teacher of mathematical analysis, used the last time of the exercise class to answer our questions. I asked: “I want to engage in theoretical computer research, but I am not very interested in continuous mathematics. I think discrete mathematics is more fun, but now the mathematics class is all continuous mathematics, is it not related to theoretical computer? Should I transfer to computer science major?” Mr. Shi said that continuous mathematics is the foundation, many problems in discrete mathematics are not convenient to deal with, and continuous mathematics is used to approximate (I feel more and more about this point now), so continuous mathematics must be learned well. As for studying mathematics or computer science, it depends on your personal interest.

Respected Mr. Shi JihuaiRespected Mr. Shi Jihuai Respected Mr. Shi Jihuai (Internet picture)

The failure of learning continuous mathematics made me start to doubt my ability. At the end of my freshman year, I went to the office of the linear algebra teacher to consult whether I was suitable for the mathematics major. He said that it is not the people with “talent” who can learn mathematics well, no one is suitable or unsuitable for mathematical research, as long as they study hard and work hard, these things can be learned. The teacher is right. Now think about it, it’s still because of the distraction of the club and the website. If I had calmed down and worked hard on the problems at that time, maybe I could have learned continuous mathematics well.

However, after a year of neglect, my advantage in mathematics has turned into a disadvantage, but my interest in computers has been rising - computers always give me a sense of immediate satisfaction, and there are few things that can’t be solved. Whether it’s setting up a LAMP server, making Discuz! forum support LaTeX, or online preview of PDF, Word documents, they can be figured out through Google and various document resources in about a week. But mathematical problems are hard to find answers to, and there are no other people in the dormitory who major in mathematics, so the sense of frustration is strong when encountering difficult problems.

During the summer vacation, I still felt hopeful of keeping up with the pace of the mathematics department. At the beginning of sophomore year, I got textbooks on mathematical analysis and ordinary differential equations. Seeing those terrifying mathematical symbols inside, I felt that I should not stay here for long. In the application for changing majors, I wrote “due to change of interest”, but the real reason was that I couldn’t continue with mathematics… It’s a sad thing. After moving to the computer department, there are still some mathematics and physics courses, but these courses are much simpler compared to the mathematics and physics majors, so they are not so hard to learn.

Computer: Dancing with Shackles

A good friend of mine in the mathematics major told me that mathematics is the study of the essence of the world, natural science is the study of God’s will, and computers are the study of the will of ordinary people. Many designs of computers have no reason, they are just pieced together by some ordinary programmers or cheap labor of graduate students when they are rushing for deadlines. If he had a good meal and drink in the morning, he would design something nice for you; if he didn’t wake up in the morning or had a fight with his girlfriend, he would leave endless pain to his descendants. Thinking of this, I suddenly feel that the programmers’ pretentiousness has decreased a lot, and what we do is dancing with the shackles of path dependence.

From being a scientist exploring nature to being a programmer dancing with shackles, it is actually a recognition of one’s own insignificance and smallness. In June 2011, the “China Computer Society Communications” published an interview with Turing Award winner Yao Qizhi. Although I didn’t see this article when I changed my major, I happened to think the same way at that time, as follows.

Question: You received your Ph.D. in Physics from Harvard University in 1972. But you did not engage in physics research and changed your major to study computer science at the University of Illinois at Urbana-Champaign, and received your Ph.D. in Computer Science in 1975. Why did you change your major at that time? What is the charm of computers?

Yao Qizhi: I was studying theoretical physics at that time. At that time, everyone felt that it was quite pessimistic to understand the basic physical direction of the universe, especially to derive it with mathematics. I felt that physics research was somewhat different from what I had originally imagined. Just at that period, computers were just emerging, and there were many interesting problems waiting to be solved. At that time, computers did not have the distinction of being professional or not. I just happened to encounter this discipline, and I think this choice is correct and smooth.
There is also a rumor about Yao Qizhi, saying that “when I was doing theoretical physics, I felt it was too difficult, but after switching to computer science, I found that there were no difficult problems.” The reason I think is this. Natural science faces the creation of God, while computer science faces the creation of humans. If I feel uncomfortable with a human creation, such as I find that the current relational database has too many restrictions, I can create a non-relational database and create a new wheel. But if I’m not happy with a physical law, I can’t pray to God, “Why is the speed of light so fast, can it be slower, wait for me to see clearly?”

That is to say, although people who work on computers are dancing with shackles, they can make choices between different shackles (such as choosing Windows or Linux, choosing x86 or ARM). The diversity of choices makes the field more refined, and everyone is not pursuing the same goals, solving the same problems, but creating problems and trying to solve them. In computer research, the most important thing is to discover problems. Once the problems are formalized, solving them is generally only a matter of time, because the field of computers does not require a “perfect” answer, as long as it provides a solution that can be accepted in reality, there are various ways to compromise and compromise.

Coders and Scientists

Compared to computer science, I am actually more inclined to computer technology, that is, those mature technologies that can be used to change the world. Compared to research, technology eliminates a big worry: jealousy of mathematicians. The chain of contempt between various research fields has been mentioned at the beginning of the last section. Not only computer scientists, but scientists in various fields often like to express very simple truths in rigorous and obscure mathematical formulas, preferably with some Latin letters, in order to make their work look more “professional”. This “mathematical complex” makes scientists tend to solve problems that are easy to formalize, rather than problems that are really needed. Therefore, many scientists who do basic science research self-deprecatingly say that they are actually not contributing to “humanity”, but satisfying their own curiosity.

Coders (siege lions, programmers) are fundamentally different from scientists. Like architects and designers, they are creating things by using their imagination under the premise of following certain scientific principles and cost control. That is to say, coders no longer need to be jealous of mathematicians. Unlike architects, coders can use their imagination more freely. Building a building requires a lot of money, and an architect, no matter how many ideas he has, cannot see his design implemented without a construction project. But the low entry threshold of the computer industry and the low cost of information replication make the “counterattack of the ordinary people” possible, that is, a person can realize a good idea with his own strength. If the product is popular, it will spread and develop at an exponential speed.

I don’t want my development to be limited by the environment, that is, I don’t want my development trajectory to be limited to a preset conventional route. I hope to freely realize my ideas and promote them. As an ordinary person, only the low-threshold Internet industry can realize this dream. The Internet is the era of “craftsmen”, that is, the main driving force of Internet development is not large companies and powerful decision-makers, but thousands of young entrepreneurs with ideas. Some of them stand out, refreshing human lifestyle and the operation mode of the Internet. By the way, the open source hardware movement and 3D printing technology are quietly changing the manufacturing industry. With the reduction of entry threshold (manufacturing cost) and logistics cost, the manufacturing industry will also usher in the spring of “craftsmen”.

Speaking of freedom, many coders will jump out and say: you’re too young, too simple! That’s because our understanding of “job hunting” is different. From university to company, it seems to be just a change of title, but in fact, the status has changed from master to servant. In university, we paid tuition fees, in a sense, the school is serving students, providing various resources to help students grow. But in the company, the boss pays us, we are serving the company. Therefore, when we say “I want to find a job”, it implies that we are going to sell our knowledge and time in exchange for the company’s remuneration. Therefore, my understanding of “job hunting” is “finding a company to realize my value”, that is, using the company’s platform and resources to do valuable things. This change of mindset can help us get rid of the self-positioning of workers and pursue what we really want.

My switch to computer science is essentially due to a change in mindset. Even if I hadn’t joined the GeWuZhiZhi Society, the students from the junior college would have found me to build a website. That is to say, this is not a coincidence but almost inevitable. I encountered computer science, met USTC LUG (Linux User Group), a series of coincidences, it seems like I hit all the low-probability events, but like biological evolution, there is a kind of “pressure of natural selection” pushing this process behind the scenes.

To sum up how I fell into the pit of coding:

  • The shattering of the dream of a young scientist
  • Didn’t do well in math, switched to computer science
  • Computer research is like dancing in shackles
  • The difference between computer technology and research
  • The computer industry that realizes ideas freely

Why choose computer science for undergraduate

Next, let’s talk about why you should choose computer science at the undergraduate stage if you plan to become a coder. The framework of this part is as follows:

  • Systematically learn computer science courses

    • Don’t repeat low-level project practice
    • Basic knowledge will not be outdated
  • Choose other majors, it’s better to study computer science directly

    • How useful are other major courses
    • Potential problems of extracurricular learning
    • Real factors of graduation major

Is computer science course important

There is a saying that the technology of coders is mainly acquired through practice, not through formal computer courses, learned under “theoretical guidance”. For some application technologies, this is indeed the case. But to get away from the level of Beida Qingniao, repeating low-level project practice is not very helpful. Some people spend a lot of time studying, but their grades never improve. It is likely because they are always repeating what they have learned, and they dare not challenge difficult problems, and they numb themselves in the time trap of solving simple problems. The same is true for coders who do outsourcing projects all day. They either have no interest in challenging more difficult things, or they have no opportunity to challenge more difficult things, so they always stay at that level.

To improve the posture level, you need to systematically learn the basic principles of the field, which is the professional course offered by computer science. Programmers who don’t understand data structures and algorithms, operating systems, computer networks, and computer architecture are like architects who don’t understand mechanics. They can work, but they may not think of some potential problems when designing, which will bring endless trouble in the future. Many bad designs in computer history are mostly because the posture level of programmers is not high enough, and for some commercial reasons, this design has become an industry standard. If we all improve our appreciation ability a little bit, the whole computer world will become more beautiful. Obviously, appreciation ability requires professional knowledge and experience as support.

Of course, when I was an undergraduate, there were many complaints about the curriculum of the School of Computer Science. I posted an article on Hanhai Xingyun BBS that caused a fierce saliva war, “Suggestions on Implementing Flexible Electives for Some Non-Professional Courses in the School of Computer Science“. I suddenly got busy for a few days after I posted the post, so I didn’t participate in this saliva war. However, until now, my view supporting flexible electives has not changed.

[![Hanhai Xingyun Same Topic Reading Suggestions on Implementing Flexible Electives for Some Non-Professional Courses in the School of Computer Science](/images/2014/10/Hanhai Xingyun-Same Topic Reading-Suggestions on Implementing Flexible Electives for Some Non-Professional Courses in the School of Computer Science.png)](/images/2014/10/Hanhai Xingyun-Same Topic Reading-Suggestions on Implementing Flexible Electives for Some Non-Professional Courses in the School of Computer Science.png)

Some people may say that computer development is too fast, and what you learn will soon be outdated. In fact, most of the content of undergraduate computer science courses has not been outdated after at least twenty or thirty years of testing, such as classic data structures, the design of UNIX operating systems, TCP/IP networks, syntax and semantic analysis of compilers, although various problems have arisen under new era conditions, and various improvements have been made, but the basic principles remain the same. What is easy to be outdated is precisely those application technologies that are acquired through practice, such as MFC window programming, Java’s Web framework, Apache server configuration, once the technology is no longer popular, you have to recharge quickly.

The myth of mathematical and physical foundation

Many excellent programmers are not computer science majors, which seems to be a powerful counter-argument. But we should see that more excellent programmers are computer science majors (so-called “science class”).

From the moment we entered USTC, we were instilled with the concept of “valuing mathematical and physical foundations”. Many students, including me in my freshman year, believe that we should focus on studying mathematics and physics during the four years of undergraduate study, so that our future development is “wide caliber” and “potential”. This may be the case in the field of scientific research. But for computer engineering, forgive me for my lack of talent, I really can’t see what applications real analysis and the four major mechanics have, or what inspiration they can bring to our code.

We should not confuse “mathematical and physical foundations” with “choosing a major in mathematics or physics”. Regardless of the major in the first and second year, everyone needs to learn some basic courses in mathematics and physics. However, the subsequent courses of mathematics or physics majors, especially the courses after the major direction is divided, are the entry training for entering the research field of that major. These trainings can indeed bring us an improvement in thinking ability, and can indeed bring some cross-disciplinary inspiration, but people’s time is limited. Compared with the value of directly learning computer-related professional knowledge, which one is higher?

Let’s think in reverse: If a person plans to engage in physics research in the future, how much help does undergraduate study in computer science have? People who study computer science have stronger programming skills, but they need to make up for the basic knowledge of physics in the first few years, and they don’t understand various group meetings; in the future, he will gradually find that, apart from helping the laboratory repair computers and set up homepages, everyone can Wow, the operating systems, compiler principles, and system architectures learned in undergraduate studies seem to be useless. Perhaps the most useful course is algorithms and data structures, because with this, data can be processed efficiently - in fact, mathematics and physics majors also need to learn this course, of course, the difficulty is much lower than that of computer science.

Some students may think, since computer science is relatively “simple”, can I study other majors in undergraduate school and learn computer science in my spare time? After all, there are so many computer learning resources on the Internet now. There are three problems here. First, the problem of time allocation. Second, self-study has no supervision, and procrastination often occurs (MOOC does have course assignments, but the compulsory power of school credits is much greater than MOOC certificates). Third, the role of the university is not just to attend classes, making friends and exchanging ideas are also very important. It is definitely not as good as having a group of computer science buddies around you if you are in the dormitory or library to watch computer courses. Of course, for students who have not decided to work in the computer industry, this is a pretty good compromise.

There is also a very realistic factor: when job hunting, the major of graduation is an important reference condition for many interviewers. Graduating from computer science means that all aspects of the basic principles of computers have at least reached a passing level; if you do not have a degree in computer science, you must prove yourself in other ways, either through projects on your resume, or let the interviewer conduct a comprehensive examination of you. Some students with strong programming skills are despised by interviewers in this professional item, so that their subsequent performance is discounted, and this is a bloody lesson.

When I was thinking about whether to read a PhD, I also considered this aspect: If I have a PhD in the network direction, then I will automatically be considered an expert in this area; if I do not have a PhD, then I have to spend a lot of thoughts to prove my ability in the network direction. Although things like certificates and academic qualifications are often despised by high-level people, since there is the ability to obtain it, why not add a chip to yourself?

In the end

If you want to stand on the top of the wave of the information age, if you want to freely turn ideas into reality, if you harbor the dream of counterattacking and changing the world, choose a major in computer science, you will not be in vain. Friends who are in the Cao camp and have their hearts in Han, don’t hesitate, hesitate, and waste your life on the choice of major, follow your heart.

As I wrote, I had a premonition that this article would definitely be sprayed. Let the storm come more violently!

Comments