
Paul Graham,
Undergraduation , March 2005
(The sections of this essay began their lives as answers to students who wrote me questions.)Recently, younger e-mails suddenly began to haunt me to younger students: the euphoria from the admission receded a bit, and the question suddenly arose: what is there to do? I may not be the best source of advice on formal IT education, given that my main focus was philosophy; however, I attended so many Computer Science classes that the people there considered me their own. I was definitely a hacker.
')
We continue to publish translations of Paul Graham with Edison (which specializes in the development of crowdsourcing platforms and interactive databases ).Hacking
What should be done in high school to become a
good hacker ? There are two such things: learn how to program well, and learn more about specific interesting problems. It turns out that these processes are equivalent: one forces you to do and the second.
To program well, you need to work a lot on complex tasks. And you can force yourself to work on difficult tasks by starting to work on some exciting project.
Most likely, it will not be homework. My friend Robert learned a lot while he was writing network software as a student. One of his projects was connecting Harvard to Arpanet; it was one of the first hosts, but by 1984 the connection was broken.
[1] Characteristically, it was an extra-curricular project; Moreover, since he spent all his time on him, ignoring education, he was thrown out of the university for a year.
[2] As a result, everything leveled off, and now he is a professor at MIT. But you will probably be better off if this does not happen; then he was very worried about it.
Another way to learn how to program well is to learn from other good programmers. Programmers gather into tribes according to the type of their work and the tools used, and some tribes are
smarter than others. Look around and determine what smart people are working on; most likely, they have reasons to do exactly what they are doing.
One of the smartest people around you are professors. Therefore, you can find an interesting job, working as a researcher. Professors especially need people who are capable of solving boring system administration tasks, so this is the first step. They fear unreliable people and false resumes. It often happens that with the arrival of the m. (Junior Researcher) increases the total amount of work. You also need to show that with your arrival it will be reduced.
Do not worry if they say no. Failures are almost always less personal than those who were refused. Just move on. (This also applies to dating.)
Caution - the fact that professors are smart does not mean that they all work on interesting projects. Professors should provide original research to advance their careers, but in more interesting areas there is more competition. Therefore, less ambitious professors do research that is original because no one is interested. These should be avoided.
I myself have never been a researcher, so it seems to me somewhat unfair to suggest this path. I learned to program by creating my own programs, especially by trying to reverse-engineer SHRDLU from Winograd. This program occupied me like a newborn baby mom.
Despite all the disadvantages of independent work, plus the fact that the project is completely yours. Do not compromise or ask for permission; Immediately after the emergence of a new idea, you can sit down and figure out.
In your own projects do not need to think about originality (as professors have) and profitability (as companies have). Only technical complexity is important, and it is in no way connected with the nature of the application. “Serious” programs, for example, databases, are often trivial and technically boring (if you suffer from insomnia, read the technical literature about databases), and “frivolous” programs, like games, are often very complex. I am sure that there are gaming companies working on projects with most of the intellectual content than in 9/10 of studies at university computer science departments.
If I were at university now, I would work on graphics: for example, on a network game, or a 3D animation program. When I was a student, there was not enough computing power to keep the graphics interesting, but now it's hard to find anything more exciting.
Maths
When I was in high school, many professors believed (or at least hoped) that
computer science is a branch of mathematics. Most of all, this idea was at Harvard, where there was no computer science until the 1980s; before that, he specialized in applied mathematics. At Cornell, everything was almost as bad. When I told the dreadful Professor Conway that I was interested in artificial intelligence (then this topic was very popular), he said that I should specialize in mathematics. I'm still not sure if he thought that AI would require mathematical knowledge, or that AI is nonsense and that participating in something serious would save me from such silly ideas.
In fact, the amount of mathematics needed to become a hacker is much less than that required for admission to most universities. I don't think you need anything more than high school math and some ideas from the theory of computation. (You need to know what quadratic complexity algorithms are to avoid writing them.) Unless, of course, you plan to write mathematical applications. Robotics, for example, consist entirely of mathematics.
But even if you do not need mathematics to write programs in the sense of knowing 1001 tricks for differentiation, mathematics deserves to be studied for its own sake. This is a valuable resource of metaphors for almost any type of work.
[3] Therefore, I am sorry that I did less mathematics at a university, than I could.
Like many people, I was incorrectly taught math in childhood. I was taught to treat mathematics as a collection of formulas that looked more beautiful than they had anything to do with real life (despite trying to translate them into word problems), but which need to be remembered in order to write good controls.
One of the most valuable things you will do at a university is to study what mathematics really is. This will not be easy, as many good mathematicians are bad teachers. And although there are many popular books in mathematics, I can name a few good ones. The best, in my opinion -
V.V. Sawyer . And, of course, Euclid.
[four]Everything
Thomas Huxley said: “Try to learn a little about everything and everything about a little.” This is the task that almost all universities set themselves.
But what is all? As for me, this is what is taught on the course of conscientious work on complex tasks. This type of workflow is usually similar in principle, and therefore ideas and methods from one project can easily migrate to another, even if at first glance these projects have nothing in common. For example, I write
an essay in exactly the same way as the code: I sit at my desk and type the first thoughts that came to my head as quickly as my fingers allow, and then after 2-3 weeks I redo that nonsense that I wrote first.
But it is not enough just to work on the problem. Medieval alchemists also tried to turn iron into gold, but their attempts were so futile that they lost more than they got, well, except they found out about such a line of human character as self-deception.
Unfortunately, the type of AI that I studied at the institute had the same problem: enormous complexity and absolutely inappropriate solution methods. Arrogant? To put it mildly!
Sociology, I must say, is also completely useless, because it is tied to the current social
foundations . When physicists met 100 years ago, they learned something new from each other; when psychologists met, they simply began to argue about values. Of course, they got something from this, but they did, but it's safe to say that this is something many times less than what you get in other areas of science.
I would rely on mathematics, “hard” sciences (experiment-driven, so to speak - opposed, for example, to classical philosophy), history (in particular, economic, society and science), architecture and classics. Superficial knowledge of art may be useful. Modern literature is also important, but it does not need to be taught, it should just be read. And I know about music not enough to judge.
Everything that is written here and will be written is taken from personal experience. For example, I never understood people laughing at Clinton's statement: “It’s because I spent about five classes at the university studying this statement.
Another way to understand which sciences are the least popular, will help us a simple schedule of study of various sciences. For example, it is reliably known that many, studying mathematics, moved to IT because they found it too complicated. But the number of cases where people, on the contrary, from IT went into mathematics, is extremely small. People will not engage in more difficult business, having easy at hand, if it is complicated with buns such as higher salaries, etc. no more attractively proportional to its complexity (at least as log (n)). So math is less popular than IT. With the help of the same actions, you can build graphs for other sciences.
Using this method, you will come to about the same answer that I gave above.
But, as elsewhere, there are phenomena of their own - for example, language courses. As for me, this anomaly can be explained by the fact that for people these courses are not ordinary lessons, but extracurricular activities, such as drawing or cooking. They would be much more useful when paired with a stay in a country that speaks this language. It so happened that in the first year I wanted to teach Arabic. This required a lot of effort from me, and the only long-term usefulness I received from this is the distinctive ability to identify Semitic roots and some insights on how people recognize words.
Drawing and writing is less comprehensible. Usually, such courses do not teach anything: you just sit and work (or do not work) on what you want, and then you sit and “constructively criticize” the masterpieces of others under the unobtrusive supervision of a teacher. But both writing and drawing are very complicated things that (some) people really work seriously, so they are worth the investment - especially if you find a good teacher.
Job
Of course, university students have to think not only about learning. There are two main problems that must be taken into account: the profession and certification.
In theory, a liberal education does not imply professional training, but everyone knows that this is not entirely true. In any university, hackers gain basic skills, and this is no accident.
What you need to get a job depends on what you want. If you like working in a large company, learn to have fun with
Blub on Windows. If in a small company or a science lab, it’s best to learn Ruby on Linux. And if you want to start your own company, which is becoming increasingly popular, conquer all possible and powerful tools that you can find, then in competition with competitors you will find yourself on a horse (on a
horse of your tools , so to speak).
There is no clear link between the skills that you get in high school and used in work. Being at university, you need to aim a little higher.
In training, a football player can squeeze up to 300 pounds, despite the fact that he will never show even a similar result on the game. Similarly, if your teachers are trying to force you to teach something more sophisticated than what you need at work, most likely it is not because they are academicians separated from this world. They are probably trying to help you train your brain.
The programs you write in class are different from those you write in production in three very important aspects: they are small, you start with a sketch, and the tasks are most often pre-thought out. In the real world, programs are more voluminous, they can include already existing code and most often force you to think carefully over problems before solving them.
You do not need to wait for the end (or even the beginning) of an undergraduate degree to gain these skills. If you want to learn how to work with already existing code, then you can help in open-source projects. Your employer will be impressed by this no less than by good grades.
In existing open source projects, you will not learn to understand what problems to solve, but nothing prevents you from starting your own project. At the same time, good employers will be even more impressed.
But what problems should be solved? You might think that you need as a user. For example, I found / invented a good spam filtering algorithm, since I did not want to receive it. I would like me to have an email client that would somehow prevent my inbox from overflowing; I use them as a to-do list. But this is the same as using a screwdriver to open bottles; there is more suitable opener.
Graduate School
What about graduate school? Should I do? And what to do in good?
In principle, graduate school is a training in research, and you should not go there if you do not want to do research professionally. But half of the people who have received doctoral in computer science, do not go to research. After all, I entered the graduate school not to become a professor, but because I wanted to learn more.
Therefore, if you are mainly interested in applied things, and you enter graduate school, you will find many people there who feel uncomfortable as well. And if most of the people around you are not at ease just like you, are you really not at ease?
There is a fundamental problem in Computer Science, which is manifested in such cases. No one knows what counts as "research." Most studies are hacking, stuffed into a scientific article format in order to create another quantum of publication.
Therefore, the question of whether you will be good at graduate school is in itself a bit confusing, since very few people at computer science feel at home. Therefore, the fact that you are more interested in hacking should not stop you from entering graduate school. But I warn you - you have to do a lot of things that you do not like.
And the first of these will be your dissertation. Almost everyone hates their dissertation upon completion. The process always produces an unpleasant result, like a cake made from wheat flour, which was baked for 12 hours. Few dissertations are read with pleasure, especially by their authors.
But thousands of people before you survived her writing. And besides this, graduate school is close to heaven. Many remember her as the happiest time of his life. And almost everyone else, including me, would agree if they were not obliged to write a dissertation.
[five]The danger of graduate school is that the scary part is not visible in advance. Doctoral programs begin in the second part of the university, after a few years of study. Therefore, when the horror of writing a dissertation appears to you, you have already passed several years. And if you leave, you will become a failed graduate school, and you most likely will not like this idea. When Robert was thrown out of graduate school for writing the Internet worm of 1988, I was very jealous of him because he got out without the stigma of defeat.
In general, graduate school is most likely better than most alternatives. You will meet with smart people, and your sullen procrastination will at least strongly bind you. And at the other end, you have a doctorate. I forgot about it. Probably something worth it.
The biggest advantage of the doctoral (except for her action as a trade union ticket to the academy, of course) is that it gives confidence. For example, Honeywell thermostats in my home have a terribly brutal interface. My mother, who has the same model, diligently read the instructions from her, spending the whole day on it. She suggested that the problem is in her. And I would think that if a person with a doctorate in computer science does not understand this thermostat, then he is
definitely poorly designed.
If you still want to become a graduate student after this dubious recommendation, I can give good advices on admission. Many of my friends are computer science professors, so I know how the receipts are made. The process is very different from what is undergraduate. On most undergraduate programs, special people choose who enrolls; for doctoral programs, professors do it. And they try to do it well, because those who enter will work for them.
Obviously, only recommendations work in the best schools. Standardized tests mean nothing, grades are few, and an essay is a chance to disqualify yourself by writing something stupid. , .
[6], , . , : , . , , . , , .
, , , , , , . , . . , , , , ,
.
Notes
[1] , , Arpanet ( ) 1984 .
[2] , , . , . , : « - , ? !» , , .
, . , , , , . , , , , , . , , . 26 .
[3] Eric Raymond , - , , .
Trevor Blackwell , . "' ( 3 )' . -, 'x ' , x in {, , , }."
[4] :
What is Mathematics? , Courant and Robbins;
Geometry and the Imagination , Hilbert and Cohn-Vossen. ,
Euclid Byrne.
[5] , , , , 3 , . , , , .
[6] - , 15-20% « .» , , , , , .
, , -. , , .
, , , : . , , . , ?
Trevor Blackwell, Alex Lewin, Jessica Livingston, Robert Morris, Eric Raymond,
CS , , .
.PS« »