By Joel Spolsky
[Editor's note] As Joel Spolsky's dual identity (former computer director of Yale University, CEO of today's Fog Creek Software Company), he listened to his suggestion, it is of great benefit to countless computer students in Chinese universities that are plagued by employment pressure. You will find that most suggestions emphasize the value of "soft power.
If you like programming, you are truly favored by the sky. You are one of the lucky ones who can make a living based on what they like. Most people are not so lucky. The concept that you take for granted "Love your work" is actually a very modern concept. The general idea is that work is a very unpleasant thing. You have to go to work to get a salary. The purpose of your work is to save money to do what you really like, but only if you have to wait for 65 years old to retire, there are still many conditions. Condition 1: Your savings must be sufficient. Condition 2: You are not old enough to walk, and you still have the energy to do those things. Condition 3, you do not need to use fragile knees or blurred eyesight for your favorite things. You do not need to breathe in the air.
Where did I talk about? By the way, I would like to provide suggestions.
Practice writing before graduation
If it wasn't for Linus Torvalds to continually spread the gospel, will the Linux operating system succeed? Although he is a very intelligent computer genius, the reason why Linux attracts a large number of volunteers from around the world is the ability of Linus Torvalds to express itself. He disseminated his thoughts in writing via email and email list, which eventually attracted everyone's attention.
Have you heard of extreme programming? I will not talk about my views on extreme programming here. I only say that if you have heard of this word, it is because its advocates are very talented writers and speakers.
Even if we narrow down our scope and focus on any software development group, you will find that the most powerful and influential programmers in the group are those with strong expressiveness, both written and verbal expressions can clearly, freely, and confidently convey ideas. In addition, high growth also helps increase influence, but it does not depend on you.
The difference between a common programmer and a good programmer lies not in who knows many programming languages, nor in whether they like to use Python or Java, but whether they can communicate with others. If you can convince others, your power will be magnified. If you can write clear comments and technical specification documents, other programmers can understand your code, so they can use it in their own code without rewriting. If you can't do this, your code has no value for others. If you can write CLEAR user manuals for end users, others can understand what your code is for. This is the only way to let others understand the value of your code. SourceForge [] has a lot of beautiful and useful code, but they are all buried, and no one can use them, the reason is that their authors did not write the instructions (or did not write them at all ). In this way, no one knows about their results, and their outstanding Code declines.
If a programmer does not write in English and has no good writing skills, I will not hire him. If you can write, no matter which company you work for, you will soon find that the task of writing Technical Documents falls into your head, which means that you are already expanding your influence, the management is paying attention to you.
Some of the University's courses are recognized as writing intensive, which means you have to write terrible texts to get credits. Be sure to attend this course! Don't care about the subject. You only need to write for this course every week or even every day.
You can also write a diary or blog. The more you write, the easier it will be to write. The easier it is to write, the more you will write. This is a virtuous circle.
C language learning before graduation
The second point I want to talk about is the C language. Note that I am talking about C, not c ++. Although the C language has become increasingly rare in actual use, it is still the common language of current programmers. C language allows programmers to communicate with each other. More importantly, it is closer to machines than the "Modern Language" (such as ml, Java, Python, or other popular spam languages) you have learned in college. It takes at least one semester for you to understand machine principles. Otherwise, you will never be able to write efficient code at the level of advanced languages. You will never be able to develop compilers and operating systems, and they are among the best jobs that programmers can get. No one else can trust you to design the architecture of a large project. No matter how much you know about continuation, closure, and exception handling, as long as you cannot explain why while (* s ++ = * t ++ ); the purpose of this Code is to copy strings, or do not think that this is a natural thing for you in the world, so you are programming blindly and ignorant. In my opinion, it seems like a doctor is prescribe the most basic anatomy he doesn't know, because the sales representatives of baby-face medical manufacturers say this medicine is useful.
Learn micro-economics before graduation
If you have not taken any economics courses, I will first make a very short comment: economics is one of these disciplines, and it was very vigorous at the beginning, there are many useful and justified theories and facts that can be proved in the real world, and so on. However, if you continue to learn more, there will be no more useful things. The useful part of economics at the beginning is micro-economics, which is the basis of all important theories in the business field. The things behind micro-economics will not work. What you are going to learn next is macro economics. If you are willing to skip over, there will be no loss. The part at the beginning of macroeconomic economics is the interest theory, which describes the relationship between interest rates and unemployment. However, it seems that this Part has not been proven to be more than confirmed. After learning this part, the content is getting worse and worse. Many economics students are actually engaged in physics, because they can find better jobs on Wall Street. But in any case, you must learn micro-economics, because you must understand supply and demand, you must understand the competitive advantage, you must understand what is net present value (NPV), and what is discount, what is marginal utility. Only in this way can you understand why business is the current practice.
Why should computer students also learn economics? Because, from the perspective of running a company, a programmer who understands basic business rules will be more valuable than those who do not understand it. That's simple. I cannot tell you how many times I feel so frustrated, because I have seen too many programmers who come up with crazy ideas that may be feasible in code, but it is meaningless in the capitalist world. If you understand business rules, you are a more valuable programmer, and you will get a return, but only if you want to learn micro-economics.
Do not take non-computer courses because it is boring.
A good way to improve GPA performance is to choose more non-computer courses. Never underestimate the significance of your GPA. When thousands of personnel managers and recruiters get a resume, they will see the GPA at first glance, including me. We will not apologize for this practice. Why? Because GPA does not reflect a single score, it represents a general evaluation of your performance for many professors over a long period of time under different circumstances. Isn't the SAT score enough? Ha, it's just a few hours of testing. The GPA includes your essays, mid-term exams, and classroom performances during four years of college. The total number is several hundred. Of course, GPA also has its own problems, which are not accurate. For example, over the years, teachers have become increasingly loose in scoring students, and their academic performance has been inflation. For another example, GPA does not reflect the difficulty of the course. No one can tell whether your GPA is an easy course from the Department of Home Economics at an unknown community university or a quantum mechanics course from Caltech for graduate students. Gradually, I developed my own practice. First, I would filter out all my resumes from Community universities with a GPA of less than 2.5, and then I would ask the rest to send me a transcript and a letter of recommendation. I will find out the people who have consistently scored well, not those who just got high scores in computer courses.
Why do I need to care about someone's "European history" course scores? After all, as an employer, I should be looking for programmers? What's more, history is so boring that it is normal to have a high score. Well, what you mean is that I should hire you, instead of considering whether you will work hard once your work gets boring? Don't forget, there are also boring things in programming. Every job has a hard time. I don't want to hire people who just want to do interesting things. Electives with a large number of programming practices
I still remember the moment I vowed not to go to graduate school. It was in a course called "dynamic logic". The teacher is a dynamic Yale University professor Lenore Zuck, and she is one of the smartest teachers in the computer department.
For example, due to poor memory, I have almost forgotten the content of this course, but in any case, I still want to talk about it here. In general, formal logic means that if conditions are true, you can prove that the conclusion is true. For example, according to the formal logic, it is known that "as long as the score is good, it can be hired", and then assume that "Johnny's score is good ", you can come to a new conclusion: "Johnny will be hired ". This is a classic method. However, a deconstructionist can destroy all the useful things in the formal logic in just 10 seconds. In this way, it is only interesting, not practical.
Now let's talk about the dynamic logic. It is the same as formal logic, but time must be considered more. For example, "when you turn on the light, you can see your own shoes." It is known that "the light used to be bright" means "you saw your own shoes ".
The dynamic logic is attractive to the smart theory like Professor Zuck, because it looks very promising to prove some theoretical problems related to computer programs in form. This may be useful. For example, you can use it to prove in the form that the flash card of a Mars Rover does not have an overflow problem, so it will not be restarted over and over the whole day, the delay in roaming the redly planet to find Marvin the Martian ).
In the first class, Dr. Zuck filled both sides of the blackboard, and even the wall next to the blackboard was filled with many evidentiary steps. The problem to be proved is that there is a switch to control the light bulb. Now the light bulb is not on, and you turn on the switch. Please prove that the light bulb will be on.
The entire process of proof is incredible. It is a trap everywhere and you must be very careful. It is too difficult to ensure that this proof is correct. It is better to directly believe that the light will be on. True: although the verification process is full of many blackboards, many intermediate steps are omitted, because to prove all steps in formal logic, that is too trivial to describe. Many of the steps are derived using a variety of classical logical proof methods, including induction and reverse verification methods, and some are even proved by the students.
The homework left for us is to prove the inverse proposition: if the light is turned off but is now on, please prove that the switch status must be the opposite.
I started to prove it. I did prove it.
I stayed in the library for a long time.
I want to draw a gourd based on the original proof of Zuck. After studying for a few hours, I found an error. Maybe I copied a wrong copy, but I figured out one thing. If it takes three hours to write a blackboard that is full of one or more blocks, an error may occur every second. The last proof is a very trivial conclusion, how practical is this approach? In a living and interesting real world, you will never have the chance to use it.
However, dynamic logic geeks are not interested in this. They look at it not because it is useful, but because it can bring them tenure.
I gave up this course and vowed that I would never go to graduate students in computer science.
This story tells us that computer science and software development are not the same thing. If you are lucky, your school may offer decent software development courses. But another possibility is that your school does not teach you how to program in reality, because elite schools all think that, it is best to leave teaching work skills to training programs for vocational and technical schools and returning prisoners to society. You can learn how to write code everywhere. Don't forget that we are Yale University and our mission is to cultivate future world leaders. You paid $0.16 million in tuition but learned how to write loop statements. How can this problem be solved? Where do you think this is, is it a temporary and unreliable Java language training course in a hotel along the airport? Hum.
The trouble is that we do not have a specialized school that really teaches software development. If you want to become a programmer, you may only have to choose computer science. This is a good professional, but it is not the same as software development. In those 400-level course codes, find the course with the word "practicum" in the name (Editor's note: refers to the course for internships ). Don't be intimidated by this Latin word. These are all useful courses. The reason for such a name is to make the managers of companies who are full of words and nonsense feel uncertain.
Don't worry that all jobs are stolen by Indians
First of all, if you are already in India or you are an Indian, you really have no need to think about it, you don't have to worry about whether all the job opportunities are in India. Those are all very good jobs. Enjoy them well and wish you good health.
However, I keep hearing that the number of students in the computer department has dropped sharply, and it is already dangerous. One of the reasons I 've heard is that "students don't want to learn a job that's going to be a professional in India ". There are many reasons to refute this worry. First, it is silly to decide your career choices based on the temporary business trend. Second, even if programming jobs have moved to India and China, learning programming is still a first-class quality training, which can lay the foundation for a variety of super interesting jobs, for example, business process engineering ). Again, no matter in the United States or India, really good programmers are still very short, please believe me. Yes, there are indeed quite a few unemployed IT practitioners who complain that they cannot find a job for a long time, but do you know? Even at the risk of getting angry with these people, I 'd like to say that really good programmers will not be unemployed at all. Finally, can you find a better professional? What do you think is a good professional? Major in history? In that case, when you graduate, you will find that there is no other choice at all. You can only go to law school. But I know one thing: 99% of lawyers hate their jobs and hate every minute they work as lawyers. However, lawyers work 90 hours a week. As I said before: If you like programming, you are truly favored. You are one of the lucky ones who can make a living based on what they like.
But to be honest, I don't think the students really have the above ideas. In recent years, the decline in the number of students enrolled in the computer system has only returned to a normal level in history, because the Internet craze in the past few years has caused a big bubble in the number of students, raising the base. Due to this bubble, many people who do not really like programming come to read computer systems. What they are thinking is that as long as they enter the computer system, they will be able to find attractive and high-paying jobs in the future, and they will be able to get a 24-Year-Old CEO and IPO opportunity. Thank God, these people are far away from computer systems.
Find a good summer internship
Well-known recruiters know that programmers like to input dental information into the database when they are in high school. They have been to three computer summer camps before entering the university, and have done a content management system for the school newspaper, I have a summer internship experience in a software company. The recruiting director is looking for these items on your resume.
If you like programming, don't promise anything, or you will make the biggest mistake. Whether it's a summer job or a part-time job or another job, don't accept it as long as it's not related to programming. I know that other 19-year-olds want to work in shopping centers and fold their shirts there. But unlike them, you have mastered a very valuable skill at the age of 19. It is silly to waste time on the folding shirt. When you graduate, your resume will be full of programming-related experiences. Let those financial graduates go to the car rental company to "help people meet their car rental needs, what you want to do is something else (except Tom Welling, who plays Superman on TV ).
To make your life easier, and to emphasize that this entire article is for my personal purpose, I want to tell you, my company, Fog Creek Software, offers summer internships in software development. We value resumes very much. "You are most likely to learn more about coding, software development, and business operations in Fog Creek than you have practice at other companies ." This is what Ben, an intern of ours, said last summer. He would say this not entirely because I sent someone to his dormitory and asked him to do so. The deadline for us to accept our internship application is January 1, February 1. Come on.
If you follow my advice, you may still have a miserable ending, such as selling Microsoft's shares very early, or rejecting Google's job opportunities, the reason is that you want an independent office that can close the door or make other stupid decisions in your life. But it's not my fault. I told you not to listen to me at the beginning.
(Note 1: t o m w e l I n g is an American actress playing Superman in the TV series Smallville. The TV series tells the story of Clarke Kent's teenage age that has not yet grown into Superman .)