
Even though it has not been a year or two since I declared that Windows and its graphical interfaces will be the undisputed feature of the future, many university students do not hesitate to write to me frequently in search of career advice and desired areas of specialization. Since the issue of employment is not related to a specific time, I thought it would be better to write down some typical advice that does not apply at all times or situations, but through which students can consider it as a reference for them and read it to benefit from it, or mock it or even ignore it completely, and all of that is up to you in the first and last place.
Fortunately, most college students (especially computer science majors) do not bother to spend time asking their elders for advice. This is a good thing for computer science majors because older people tend to say a lot of trivial and old-fashioned things, such as that the market demand for “punches” will exceed 100,000,000 times by 2010 and that Lisp programmers will be the most in-demand jobs in this and the coming period.
I also have no idea what to say when college students ask me for advice. I’m so technically backward that I can’t use AIM and I still use that old-fashioned technology called “email” that was common in the days when music and albums came on flat discs called “CDs.”
So you’d be better off ignoring everything I’m saying here and instead building some kind of web-based software that lets other students find a date.
And yet…
If you have a programming instinct, thank God for that blessing. You are one of the very lucky few who can make a living doing work they love to do. Most people are not that lucky, and the idea that you can “love your job” is a new concept. The conventional wisdom is that “work” is about doing things you don’t want to do for money, which you can then spend on things you love doing. But the real question is when will you be able to do that? When you are 65 and can finally get your pension. If you can afford it, are you old enough to do it? If not, do you have good knees, good eyes, and the ability to walk 20 feet without gasping for air, etc?
But what were we talking about in the first place?? Oh yeah, I remembered. Advising college students..
Without further ado, here are Joel’s 7 free tips for computer science students:
-
Master the art of writing before you graduate.
-
Learn C programming before graduation
-
Learn microeconomics before you graduate.
-
Don’t ignore non-major subjects because they are boring.
-
Make sure you take intensive programming courses.
-
Stop worrying about most tech jobs moving to India.
-
No matter what you do, try to get into a good summer program.
Now, as for what I will write in the following lines – unless you are naive enough to give a lot of advice just because I told you to – in this case, you should add to everything I mentioned previously the following advice:
-
Try to get professional help for this thing called “self-esteem.”
Master the art of writing before graduation
First of all, ask yourself, would Linux have reached this level of success if Linus Torvalds did not have the talent and ability to market it? Of course not. In addition to his ability as a brilliant programmer, Linus had a unique talent for expressing and communicating his ideas to others in a creative way and in an easy language, whether through e-mail or through many mailing lists, which later made Linux surrounded by many supporters and volunteers from all over the world.
But have you heard recently about the latest trend in the world of programming? It is “Extreme Programming”? Well, without going into my opinion on XP, perhaps the only reason you hear this term is the writing and speaking talent of the promoters of such things.
Even if we look at a narrow scope, when we look closely at any organization that deals with programming, you will notice that most of the programmers who have power and influence within that organization are the ones who have the talent to write and speak eloquently, persuasively, comfortably and smoothly. In addition, it would be a positive thing if you were tall, but I do not think you can do anything about it.
The difference between a decent programmer and a creative programmer is often not how many languages they know or whether they prefer Python or Java, for example. It is primarily about their ability to communicate their ideas to users and other programmers. They will gain the influence they need by convincing others to accept their ideas. By writing clear comments and good technical specifications, they will make it easier for other programmers to use and work with the code instead of rewriting it. Without that, the code they write will be worthless. So by writing clear technical documentation for end users that allows them to understand what the code they are using does, this is the only way that the end user or programmer can truly appreciate the value of the code they have in their hands. There are also a lot of useful codes somewhere on Sourceforge that, despite the actual value of many of them, do not receive that popularity and spread because they were simply written by programmers who did not succeed in explaining their code in the right way or did not explain it at all, which hinders the communication of the idea of how their code works and its importance until the real value of what they did diminishes and ends up being forgotten.
So, for example, I will not hire any programmer until I see that he can write and write well in a clear and understandable language. If you are one of those who have the ability to write and explain your code in a clear language, you will soon be asked to write the specifications of an application – regardless of the organization you will work with – and this means that you have already benefited from your talent and at the same time your boss has noticed your unique talents in this field.
Many colleges specialize in courses that focus on developing students’ writing skills, such as “Intensive Writing,” which means that you have to write a lot on many topics to get the required grade to pass the course. You can search for similar courses and register for them, or you can also search for some courses that require writing on a daily or weekly basis.
You can also start writing your diary in a notebook or on a blog. The more you write, the easier the task will become and writing will become a routine for you.
Learn C programming before graduation
Part Two: C Language. Notice that I didn’t tell you C++, and although the use of this language has noticeably diminished recently, it is still the common language among creative programmers, as it is the language they use to communicate with each other, and most importantly, it is much closer to machine language than to modern programming languages that are taught today in universities, such as Java, Python, and many other modern (trivial) languages. You need to spend at least one semester close to the machine, otherwise, you will not be able to write code using any of the high-level programming languages well. You will also not be able to work on compilers and operating systems, which are considered among the best job opportunities in this field. Also, you cannot be relied upon completely to create structural designs for large projects. I do not care much about what you know about how to deal with each of the issues of continuation or closure or dealing with exceptions, for example, you cannot explain something like: (*s++ = *y++) is a copy of a variable, or that this method is not the conventional way to do it. Well, you are translating based on superstitious things. For example, a doctor can succeed in his mission even though he knows nothing about the basics of anatomy and he wrote the prescriptions based on the pharmacist’s recommendations.
Learn microeconomics before graduation.
It is advisable in your university studies to register for an Introduction to Economics course to get a quick overview in case you have not studied any economics courses, as such courses (ECON) are among the courses that start the study with a huge buzz about many useful theories and facts that can be proven true in the reality we live in and so on. So you can start from here (register for an Introduction to Economics course or a similar course) and specialize in a part later. It is preferable to have Microeconomics at the beginning of the path, which represents all the important theories in the field of economics and business. After things start to gradually get worse, you will encounter what is called Macroeconomics and many exciting theories such as the relationship between interest rates and unemployment, which have been proven false more than true (Note: You can ignore this part if you wish). After that, things start to get worse and many students then move to other specializations such as Physics, for example, through which they can get better jobs on Wall Street anyway. But with all this, make sure you study microeconomics because you need to know what supply and demand, competitive advantage, NPVs, discounts, and marginal benefit are before you can begin to understand why the economy works the way it does.

But why should computer science students study economics? Quite simply, a programmer who understands the basics of business and economics will be a more valuable programmer to the economy and the organization than one who does not have such qualifications. That’s all there is to it. I will not hide from you the number of times I have been frustrated by programmers who promote many crazy ideas that, although they are reasonable from a programming perspective, are meaningless in our capitalist reality. So if you understand these ideas and what is related to economics and how it works, you will undoubtedly be a more valuable programmer than your peers and you will get generous rewards for reasons that you will also study economics.
Don’t ignore non-major subjects because they are boring.
Ignoring non-major-related subjects is an easy way to get a lower GPA. My advice to you is never to underestimate the importance of your GPA in college, as many HR managers – myself included – take the first look at the GPA when they read the CV of applicants. We will not apologize for this behavior because the GPA reflects your level and the view of many professors on your work over a not-so-short period and on many different jobs more than anything else. But what about the SAT level? Well, this is a test that measures your level in just a few hours, while your GPA reflects your level in hundreds of research papers, tests, and class participation over 4 years or more. Yes, there are some downsides to this, such as there has been an inflation in GPA in recent years, and there is no indicator in your GPA that indicates whether you got a high GPA because you took easy courses in Home Economics at a local college in an isolated village, or whether you got that GPA by taking Masters courses in Quantum Mechanics at Caltech, for example. Ultimately, when I see that your GPA is, say, 2.5 and from a local college, I will ask you for a copy of the courses you took and letters of recommendation from the professors who taught you during that period. Only then will I look at the high GPA in all courses, not just the major courses.
But why should I, as a business owner, when I am looking for programmers and software developers, care so much about the grade I got in “European History” for example? History is just a boring subject after all. Okay. But notice that all you are telling me now is that I should hire you because you don’t work hard enough when the work is boring. Okay but don’t forget that there are some boring things in the world of programming too, as every job has its boring aspects and I don’t want to hire people who just want to do what they like.
For example, in my university days, I studied a subject called “Cultural Anthropology” because I thought I needed to study something about human science,s and at the time it seemed to me a general and interesting subject.
Interesting subject? I don’t think so. I had to read these incredibly boring books about the Indians of the Brazilian rainforest and the Rainforest Islanders who (with all due respect) were of no interest to me. At one point in my studies, I was so overwhelmed with the subject that I longed for something more exciting like watching grass grow. I had completely lost interest in the subjects we were discussing. My eyes were tired from reading so much and participating in endless class discussions about climbing plants. I don’t know why the Pacific Islanders spent so much time growing such trees. I don’t remember much about it, it was incredibly boring but it was going to be on the midterm exam so I decided to immerse myself in the subject and try to understand it. I eventually decided that Cultural Anthropology was my challenge and my obstacle to success from boredom. If I can get an A in a class where the tests require me to know all about potlatch blankets, then I can be pretty sure I can handle anything, no matter how boring it is. And the next time I accidentally stumble across Lincoln Center watching Wagner’s “The Ring Cycle” for 18 hours, I’ll be thankful that my Kwakiutl studies made that task a breeze by comparison.
I got an “A” in the subject and if I can get that grade then you can too.
Make sure you take intensive programming courses.
I remember now the moment I swore I would never complete my graduate studies.
It was while I was taking a course in biologics with Professor Lenore Zuck at Yale University, who was one of the most brilliant professors in the computer science department at the time.
But my vague memories on this subject won’t do much for you here, but let me lay it out for you anyway. The idea of formal logic is to prove that some axioms are true because some other things are also true (get it?). For example (thanks for this logic) “Everyone who gets good grades will get a job.” So the fact that “Alexander got good grades” allows you to deduce the fact that “Alexander will get a job.” The whole thing is a bit quirky and it only takes about ten seconds to figure out such things in a way that is both fun and useful.
Dynamic or vital logic is the same thing with the addition of a temporal dimension. Consider this example: “After turning on the light, you can see your shoes.” Since “the light was on before” indicates “you can see your shoes now.”
Dynamic logic is exciting for brilliant theorists like Professor Zack because it holds out the possibility of being able to formally prove some things about computer programs that could be useful if you could formally prove that a Mars rover, when it gets too hot, will reboot its system over and over again all day long while it is supposed to be roaming around the red planet.
So on the first day of the study, the doctor filled two full boxes and a side wall to prove to us that if you have a light switch and the room is dark and you turn the switch on, the room will be lit up.
The proof was insanely complicated and highly error-prone. Proving that the proof itself was correct was a much harder task than proving that turning a light switch would light up a room. Yet many steps in the proof were ignored on the blackboards because they were too tedious to include formally in the explanation. Many steps in the explanation were arrived at by the method of “induction” and others by “deduction” and other methods that are still used by graduate students.
As for the homework that day, we had to prove the opposite: If the room was dark and now the room is lit, prove that you turned on the light.
I tried, I tried. Trust me.
I spent hours and hours in the library trying to do this.
After several hours of trying, I found a bug in Dr. Zack’s original proof, which I was trying to replicate. Perhaps it was because I had copied it from the board incorrectly, but it helped me realize something: if I had to spend nearly three hours filling up boards to prove something trivial and prone to error in many situations, this mechanism would not be able to prove interesting things.
This does not mean that this matter is of concern to those who work in vital logic: they do not do it because it is useful, but they do it to prove their ability and their right to work and to remain in their positions.
I finally dropped out of the course and swore a solemn oath that I would not pursue graduate studies in computer science.
The moral of the story is that computer science and software development are two very different things. If you are really lucky, you will find a good software development curriculum at your college. However, many elite schools lack such programs because they believe that teaching practical skills is better left to technical and vocational colleges and prison rehabilitation programs. The condescending attitude of such universities is what left them with shaky programming programs because you can learn programming almost anywhere. We at Yale University, however, graduate “world leaders.” Do you think the tuition fees ($160,000) qualify you to study conditional statements (while, if)? What do you see at our university? Is this to you one of those untrustworthy Java seminars held in a cheap hotel? Etc.
The real problem is that we don’t really have vocational schools that specialize in software development, so if you want to be a programmer you might have to go to computer science, which is a good major to go into but it’s a completely different subject than software development.
If you are lucky enough, you will find many intensive programming courses in the computer science department at the university, just as many courses in the history department force you to write enough to get used to writing. These are the best courses I would recommend you take. If you are a programming enthusiast, don’t feel bad about studying some courses that you don’t understand the point of studying, such as calculus and algebra, which you won’t touch a computer during. Try to look for courses at the 400 level that have a practical and applied component.
Stop worrying about most tech jobs moving to India
Well, first of all if you are already in India then you don’t have to worry about this at all, so don’t even think about moving most of the jobs to India. They are great jobs and enjoy them as long as you are healthy.
But I keep getting news that computer science enrollment in universities is seriously declining and one of the common reasons people are saying is “students are afraid to join a field where most of the jobs have moved to India…”. But this is a false assumption for several reasons. First, trying to pick a job based on the current economic situation is sheer folly. Second, programming is an incredibly good training for many interesting jobs like engineering, even though every programming job has already moved to countries like China and India. Third, and trust me on this, there is still a severe shortage of good programmers here and even in India itself. Yes, there are a lot of unemployed computer science graduates who never stop complaining about spending so much time without work after graduation. But you know why? Real programmers (perhaps they will be annoyed by this) get jobs quite easily. Fourth, do you have any better ideas? What are you going to do? Major in history? Then you have no choice but to join law school. One thing I know for sure is that about 99% of lawyers working today hate their jobs. They hate every day they wake up and find themselves in the same job and yet they work 90 hours a week. Can you imagine that? And like I said before, if you love programming then you should thank God for that blessing. You are in the lucky minority of people who can make a good living doing work they enjoy doing.
However, I don’t think students are thinking about this and the decline in the level of students enrolled in computer science departments is just a return to normal levels after the big bubble in enrolling in such specializations that appeared several years ago after the craze that followed them after the emergence of Internet technology. Many of those who enrolled in technical specializations at that time did not really like programming but thought that their dreams would come true by joining the computer science department to later get exciting jobs with high salaries and the opportunity to get a job in prestigious companies before the age of 24 would come true but these people have disappeared a long time ago and thank God for that.
No matter what you do, try to get into a good summer program.
Smart employers know that a student who truly loves programming wrote a database for his dental visits in the eighth grade. He also studied computers at a summer camp for at least three semesters before going to college, built a content management system for the college newspaper, and did a summer internship at a software company. That’s what they’re looking for when they’re scanning your resume.
If you are really into programming, one of the biggest mistakes you can make is to take any kind of job before graduation, whether it is a summer internship, a part-time job, or anything else that has nothing to do with programming. I know that every 19-year-old wants to work in a mall as an accountant or wrapping gifts, but you have a skill that is unimaginably valuable even as a teenager, and it would be foolish to waste it working in a mall or washing dishes at a restaurant. By the time you graduate, all you need to do is have a resume that lists the amazing array of programming jobs you have held and taken on during your college years. A&F graduates will eventually work at a car rental office helping people with their rental needs (except for Tom Welling, who will play Superman in the movies).
To make your life easier and to make sure this article is useful to me as well, my company, Fog Creek Software, has several summer internships that will look great on your resume. “You will learn more about app development, programming, and business with Fog Creek Software than any other internship program,” says Ben, one of our summer interns, and not because I sent him a letter to his dorm room asking for that statement. Well, just a heads up, applications for these programs close on February 1st.
If you follow my advice, you too may end up selling Microsoft stock, turning down a job at Google because you want to work in an office with a door, and other stupid decisions about your personal life, but it won’t be my fault. I told you not to listen to me from the beginning.