7 Advice from Daniel to Computer Science Students


Introduction: Due to Joel Spolsky's dual identity (the former dean of the computer science department at Yale University, and the CEO of today's Fog Creek Software Company), listening to his advice is a great deal for the countless computer students in Chinese colleges and universities who are troubled by employment pressure today. helpful. You will find that most of the proposals emphasize the value of "soft power".

If you like programming, then you are truly blessed. You are one of the very lucky few who can make a living doing what you love. Most people are not so lucky. The notion that you take for granted "love your job" is actually a very modern concept.


The common perception is that work is such an unpleasant thing that you have to go to work to get paid. The purpose of your job is to save money to do the things you really enjoy doing, but only if you wait until you retire at 65, and there are a lot of conditions.


Condition 1, you must have enough savings; Condition 2, you are not too old to walk, you still have the physical strength to do those things; Condition 3, the things you like don’t require weak knees, dim eyesight, and also You are not required to walk a mile without breathing, etc.



Where did I just say? By the way, I have a suggestion.


1. Practice writing well before graduation


Would the Linux operating system have been successful had it not been for the constant evangelism of Linus Torvalds? Although he is a very smart computer genius, the real reason Linux has attracted a large number of volunteers from all over the world is Linus Torvalds' expressive ability. He spread his ideas in writing via email and mailing lists, eventually getting everyone's attention.

Have you heard of "Extreme Programming" that is all the rage right now? I'm not going to talk about my views on Extreme Programming here, I'm just saying that if you've heard the term, then the reason is that its proponents are some very talented writers and speakers.

Even if we narrow it down to any one software development group, you'll find that the most powerful and influential programmers in that group are the most expressive programmers, whether in writing or doing Oral expression can convey ideas clearly, freely and convincingly. In addition, being tall can help increase your influence, but it's not up to you.



The difference between an ordinary programmer and a good programmer is not whether they know more or less programming languages, nor whether they prefer to use Python or Java, but whether they can communicate ideas with others.


If you can persuade others, your power can be amplified. If you can write clear comments and technical specifications, other programmers can understand your code, so they can use it in their own code without having to rewrite it. If you can't do this, your code has no value to others.


If you can write a clear user manual for the end user, other people can understand what your code is for, that's the only way to let others understand the value of your code. SourceForge[ ] has a lot of beautiful, useful code, but it's all buried and no one uses it, because their authors didn't write the instructions well (or didn't write them at all). Then no one knows their work, and their brilliant code dies.

If a programmer can't write in English and doesn't have good writing skills, I won't hire him. If you can write, no matter which company you work for, you will soon find that the task of writing technical documentation falls to you, which means you are already starting to amplify your influence and management is taking notice you.



Some courses in college are considered "writing intensive," which means that in order to get credit, you have to write a horrific amount of words. Be sure to take a course like this! Regardless of the subject, as long as the class requires you to write every week or even every day, take it.

You can also keep a journal or blog by yourself. The more you write, the easier it becomes to write. The easier it is to write, the more you will write. It's a virtuous circle.


2. Learn C language well before graduation


The second point I want to talk about is the C language. Note that I speak C, not C++. Although the C language has become increasingly rare in actual use, it is still the common language of current programmers. C lets programmers communicate with each other and, more importantly, is closer to a machine than the "modern languages" you learned in college (such as ML, Java, Python, or any other popular junk language being taught).


You need to spend at least a semester to understand machine principles, otherwise you will never be able to write efficient code at the level of a high-level language. And you'll never be able to develop compilers and operating systems, which are among the best jobs available to programmers right now.


Others will never feel comfortable handing over the architecture design of a large project to you. I don't care how much you know about continuations, closures, exception handling, as long as you can't explain why while (*s++ = *t++); this code is copying strings, or you don't think This is something that comes naturally to you in the world, then you are programming in blind ignorance. To me, it's like a doctor who doesn't know the most basic anatomy prescribing a prescription based solely on the baby-faced sales reps of pharmaceutical manufacturers saying the drug works.


3. Study microeconomics well before graduation


If you haven't taken any economics courses, then I'll start with a super-short remark: Economics is one of those disciplines that starts off with a bang and has many useful, plausible theories and Real-world proven facts, etc.;


However, if you continue to study, it will get worse and worse, and there will be not many useful things. The useful part of economics in the first place is microeconomics, which is the foundation of all the important theory in business. What follows behind microeconomics will not work. You're going to study macroeconomics next, and you'll have nothing to lose if you want to.


Macroeconomics begins with interest theory, for example, on the relationship between interest rates and unemployment, but how to put it, it seems that there is more that has not been proven in this section than has been proven. After this part, the rest of the content gets worse and worse, and many economics majors actually turn into physics, so that they can get better jobs on Wall Street.


But you have to study microeconomics anyway, because you have to understand supply and demand, you have to understand competitive advantage, you have to understand what is net present value (NPV), what is discounting, what is marginal utility. Only then will you understand why business is the way it is now.

Why should CS students study economics too? Because, from the perspective of running a company, a programmer who understands basic business rules will be more valuable than a programmer who doesn't. It's that simple. I can't tell you how many times I've been so frustrated because I've seen too many programmers coming up with crazy ideas that might work in code but make no sense in a capitalist world. If you understand the rules of business, you are a more valuable programmer, and you will be rewarded for it, but only if you study microeconomics.


4. Don’t take non-computer courses as an elective just because it’s boring


A good way to improve your GPA is to take more non-computer courses. Please never underestimate the significance of your GPA. Thousands of HR managers and recruiters look at GPA when they get a resume, including me. We do not apologize for this practice. Why? Because GPA does not reflect individual grades, it represents an aggregate assessment of your performance by many professors over a long period of time and under different circumstances. Are SAT scores enough? Ha, that was just a few hours of testing.


The GPA includes your essays, mid-term exams, and class performance over four years of college, hundreds of times in total. Of course, GPA also has its own problems and is not 100% accurate. For example, over the years, teachers have become more and more lenient in scoring students, and academic performance has an inflationary trend. Another example is that GPA does not reflect the difficulty of the course, and no one can tell whether your GPA is from an easy course in home economics at an unnamed community college or a quantum mechanics course for graduate students at Caltech.


Gradually, I developed my own practice, first I would filter out all resumes from community colleges with a GPA below 2.5, then I would ask the rest to send me transcripts and letters of recommendation. I then find people who are consistently good grades, not those who just get high marks in computer science courses.



Why should I care about someone's "European History" course grades, after all I'm looking for programmers as an employer? What's more, history is so boring, it's normal not to get high marks. Oh, so you mean I should hire you without thinking about whether you will work hard once the job gets boring? Don't forget, there is boring stuff in programming too. Every job has its boring moments. I don't want to hire people who just want to do fun things.


5. Take elective courses with a lot of programming practice


I still vividly remember the moment I swore never to go to graduate school. It was in a course called "Dynamic Logic," and the instructor was the dynamic Yale professor Lenore Zuck, one of the brightest of the brightest faculty in the computer science department.

Now, due to my bad memory, I've almost forgotten all about this class, but I'm going to deal with it here anyway. Basically, formal logic means that if the conditions hold, you can prove that the conclusion holds. For example, according to formal logic, it is known that "as long as you have good grades, you can be hired", and then assuming "Johnny's grades are good", you can get a brand new conclusion "Johnny will be hired". This is completely the classic method. But it only takes 10 seconds for a deconstructionist to destroy everything useful in formal logic. That way, you're left with some fun, not practicality.

Now let's talk about dynamic logic. It is the same thing as formal logic, but time must be taken into account. For example, "you can see your shoes when you turn on the light", knowing that "the light was on before", then this means "you see your shoes".

For a theoretician as clever as Professor Zuck, dynamic logic is attractive because it looks promising to allow you to formally prove some theoretical problems related to computer programs. It might be useful to do so. For example, you can use it to formally prove that the flash memory card of the Mars rover will not have an overflow problem, which will not cause it to restart over and over again all day long, delaying its roaming on the red planet. Marvin the Martian.

In the first class, Dr. Zuck filled two blackboards, and even wrote a lot of proof steps on the wall next to the blackboard. The problem that needs to be proved is that there is a switch that controls the light bulb, and now the light bulb is not on, when you turn on the switch, please prove that the light bulb will light up.



The whole proof process is incredibly complex, with pitfalls everywhere, and you have to be very careful. It is too difficult to ensure that this proof is correct. It is better to just believe that the light will come on when the switch is turned on. Indeed, although the proof process fills up many blackboards, there are still many intermediate steps omitted, because it would be indescribably trivial to fully prove all the steps in a formal logic. Many steps are deduced by various classical logical proof methods, including induction, proof by contradiction, etc., and even some parts are proved by the graduate students who are in attendance.

The homework left for us is to prove the inverse proposition: If the light was off and now it is on, then show that the switch must be in the opposite state.

I started to prove it, and I really went to prove it.

I have been in the library for a long time.

I would like to draw a gourd according to Dr. Zuck's original proof. After researching for a few hours, I found a bug in it. Maybe I copied it wrong, but it made me figure out one thing. If it takes 3 hours to write on a blackboard after another, every second may be wrong, and what can be proved in the end is only a very trivial conclusion, then how practical is this method? You'll never get a chance to use it in the live, fun real world.

But the theorists of dynamic logic are not interested in this. They looked at it not because it was useful, but because it could bring them tenure.

I dropped the class and swore I would never go to graduate school in computer science.

This story tells us that computer science and software development are not the same thing. If you're really lucky, your school might have a decent software development course. But another possibility is that your school doesn't teach you how to code in real life at all, because elite schools feel that teaching job skills is best left to vocational and technical schools and reintegration programs for prisoners.


You can learn how to code everywhere. Don't forget, we are Yale University, and our mission is to develop future world leaders. How can you pay $160,000 in tuition and learn how to write loops? Where do you think this is? Could it be an unreliable Java language training class put together in hotels along the airport? hum.

The trouble is that we don't have a kind of specialized school that actually teaches software development. If you want to be a programmer, you may only choose a computer science major. It's a nice profession, but it's not the same thing as software development. Among those 400-level course codes, look for courses with the word "Practicum" in the name (editor's note: refers to courses for people to practice). Don't be intimidated by the Latin word, these are useful lessons, so named just to confuse the slick, posturing, bullshit corporate managers.


6. Don't worry about all jobs being taken by Indians


The first thing I want to say is that if you are already in India, or you are an Indian, then you really don't need to think about it, you don't even have to wonder if all the job opportunities have gone to India. Those are very good jobs, enjoy them and wish you good health.



However, I keep hearing that the number of enrolments in the computer science department has dropped dramatically, to dangerous levels. One of the reasons, from what I've heard, is "students are reluctant to study a major where job opportunities go to India". This fear is wildly misplaced, and there are many reasons to argue against it.


First of all, it is foolish to decide one's career choices based on one-off business trends. Second, even if all programming jobs go to India and China, learning to program itself is a first-class quality training that can lay the foundation for all kinds of super interesting jobs, such as business process engineering. .


Again, whether in the US or in India, there is still a very, very shortage of really good programmers, trust me on that. Yes, there are quite a few unemployed IT practitioners out there, complaining that they can't find work for a long time, but you know what? Even at the risk of angering these people, I'd say that really good programmers don't lose their jobs at all


Finally, can you find a better major? Which profession do you think is good? Majoring in History? In that case, you will graduate with no choice but to go to law school. But I do know one thing: 99% of lawyers hate their job and every minute they spend being a lawyer. However, lawyers work up to 90 hours a week. Like I said before: If you love programming, you are truly blessed. You are one of the very lucky few who can make a living doing what you love.

But to be honest, I don't think students really have the above ideas. The decline in computer science enrolments in recent years has only returned to historically normal levels, as the internet frenzy of previous years created a big bubble in enrolments and raised the base. Because of this bubble, many people who don't really like programming also come to study computer science. What they think in their hearts is that as long as they enter the computer science department, they will find attractive high-paying jobs in the future, and they will be able to get the opportunity to become a CEO at the age of 24 and conduct an IPO. Thank goodness these people are far away from the computer department now.


7. Find a good summer internship


Astute recruiters know that people who like programming entered the dentist’s information into the database when they were in high school, went to three computer summer camps before entering college, built a content management system for the school newspaper, and had summer internship experience in a software company. . Hiring leaders are looking for these things on your resume.

If you like programming, don't accept any job, or you will make the biggest mistake. Whether it's a summer job, a part-time job or any other job, don't take it lightly as long as it's not related to programming.


I know other 19-year-olds wanting to work in the mall and fold shirts there. But unlike them, you have acquired a very valuable skill by the age of 19. It's silly to waste time folding shirts, and by the time you graduate, your resume should be full of programming-related experience. Just let those finance grads go to rental car companies to "help people meet their rental car needs" and you'll be doing something else (except Tom Welling who plays Superman on TV).


most important advice


Don't forget computer science learning and exploration! ! ! Here is a good learning resource for everyone. Follow the official account and reply to "learning" if you want


From: csdn

Address: https://blog.csdn.net/jHstGeWWubw/article/details/79546895


Recommended reading:


Technology: Daniel: Do you really understand reflection?

Technology: You don't even know how to draw design drawings, and you still want to be an "architect"?

Technology: Comics: Cooking Wine on Language

Technology: Google takes another step forward in driving AI adoption - Learn with Google AI

Technology: Do you really understand the questions HR is asking you?

Technique: How to Learn to Use Shiro in 30 Minutes


Tools: How to "kill" annoying advertisements in video apps through technical means?

Tool: "kill" one of the annoying advertisements in the video app through technical means (Tencent Video)


Dry goods sharing:


Share: 1T software development video resource sharing

Sharing: Deep Machine Learning 56G Video Resource Sharing


The blogger has 11 years of java development experience, and is currently engaged in the research and development of intelligent voice work. Pay attention to the WeChat public account for technical exchanges with bloggers!

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325768667&siteId=291194637