"Notes on 'Hackers and Painters'"

"Hackers and Painters" is a collection of essays by Paul Graham, the father of Silicon Valley entrepreneurship. It mainly introduces the hobbies and motivations of hackers, or excellent programmers, discussing topics such as hacker growth, the contributions of hackers to the world, programming languages, and hacker work methods, all of which are of interest to people in the computer age. The content of the book not only helps to understand the essence of computer programming and the rules of the internet industry but also aids readers in understanding our era, compelling them to think independently.

Key Points

The Growth of Hackers and the Hacker Mindset

  • Why Nerds Are Unpopular: Their minds are elsewhere.
  • Hackers and Painters: Hackers are also creators, just like painters, architects, and writers.
  • Unspoken Words: What do you do if your ideas are intolerable to society?
  • Good Bad Habits: Like other Americans, the secret to a hacker's success is breaking the norm. How hackers achieve results and the impact of those results on the world.
  • Another Path: Internet software is the biggest opportunity since the birth of microcomputers.
  • How to Create Wealth: The best way to get rich is to create wealth for society. The best way to create wealth is through entrepreneurship.
  • Focus on Income Inequality: Is the harm of "income distribution inequality" not as severe as we think?
  • A Method to Prevent Spam: Not long ago, many experts believed that spam could not be effectively filtered.
  • Designers' Taste: How to create excellent things? The programming tools (programming languages) and working methods of hackers.
  • Programming Language Analysis: What is a programming language? Why are they so popular now?
  • Programming Languages in a Hundred Years: How will humans program a hundred years from now? Why not start programming that way now?
  • Reject Mediocrity: Don’t forget that your competitors can write internet software in any language they choose.
  • The Revenge of Nerds: In the high-tech industry, only losers adopt "industry best practices."
  • The Dream Programming Language: A good programming language is one that hackers can use freely.
  • Design and Research: Research must be "new," and design must be "good."

Excerpts

When multiple painters collaborate on a piece, each person's section is different. Generally, the master paints the main figures, while assistants handle the secondary characters and background. However, you will never find a section that two people painted together. This is also the correct model for multiple people developing software. Collaboration is necessary, but don't overdo the "collaboration." If a code block is developed by three or four people, no one truly "owns" that piece of code. Ultimately, it will become like a public storage room, unmanaged, messy, and filled with redundant code. The right way to collaborate is to divide the project into strictly defined modules, each clearly assigned to one person. The interfaces between modules should be carefully designed, and if possible, the documentation should be as clear as programming language specifications.

Programs are written for people to read, accompanied by the ability to run on machines.

In the field of science, questioning others' conclusions and accepted assumptions is especially important and provides a significant advantage for scientific creativity. The way scientists (or at least good scientists) work is to look for places where traditional views cannot justify themselves, then try to break them apart to see what’s really going on. New theories arise this way. In other words, a good scientist not only avoids traditional views but also strives to break them. Scientists seek trouble. This should be the research approach of any scholar, but scientists seem particularly willing to explore.

If you want to think clearly, you must distance yourself from the crowd. However, the farther you go, the more difficult your situation will become, and the greater the resistance you will face, because you are not conforming to social customs but are moving further away from them step by step. As a child, everyone encourages you to grow, to become a mentally mature person who no longer throws tantrums. However, few encourage you to continue growing into someone who questions and resists societal wrong trends.

Most people, most of the time, always choose the easiest way. If internet software can defeat desktop software, it must win on the advantage of convenience. This is true from both the user's and the developer's perspective.

One of the biggest changes brought by internet software is the change in the way software is released. For desktop software, releasing a new version is a painful process, requiring the entire company to exert all its efforts, sweating profusely to squeeze out a massive chunk of code. Internet software, on the other hand, is completely different; it is as easy to modify as a program you write for yourself. The software release process can be broken down into a series of incremental modifications, rather than abruptly launching a version with significant changes. Once this new model is adopted, you will realize how significant the impact of the release method is on software development. Many tricky problems in desktop software development stem from its disastrous release method.

Another technical advantage of internet software is that you can reproduce most bugs. User data is on your hard drive. If a user encounters an error while using the software, you don’t have to guess what happened like you would when developing desktop software. Generally, as long as the user describes the issue over the phone, you can reproduce the problem. If your program has automatic error detection code, you might already know where the error occurred without waiting for the user to come to you.

Fixing bugs in new code is easier than fixing bugs in legacy code. Finding bugs in code you just wrote is often quicker. Sometimes, just seeing the error message is enough to know where the problem lies, and you may not even need to look at the source code because you subconsciously worry that area might be problematic. Detecting bugs early prevents the formation of compound bugs, which are two bugs that affect each other.

The decreasing number of programmers needed for software development not only saves more money. As noted in "The Mythical Man-Month," adding people to a project often slows down its progress. As the number of participants increases, the communication required between them grows exponentially. With more people, the time needed to meet and discuss how various parts work together increases, leading to more unforeseen interactions and more bugs. Fortunately, the reverse of this process also holds: as the number of people decreases, the efficiency of software development will increase exponentially.

Characteristics of good design: simplicity, timelessness, solving major problems, being inspirational, having a bit of fun, being hard, seeming easy, symmetry, mimicking nature, redesign, being replicable, being unique, appearing in batches, and being bold.

The features of an excellent programming language should make those who frequently mention "software engineering" very dissatisfied and shake their heads. In stark contrast to hacker languages are languages like Pascal, which is a model of orderliness, very suitable for teaching, but not much use beyond that.

For many years, most end-user programs did not care much about efficiency. Software developers always assumed that the computational power of users' desktop computers would continue to grow, so there was no need to deliberately improve software efficiency. Parkinson's Law has proven to be as unbreakable as Moore's Law. Software continues to expand, consuming all available resources. This will change with the emergence of internet software, as hardware and software are now bundled together. For companies providing internet software, maximizing the number of users supported by each server will have a huge impact on reducing costs.

Creating a prototype and then gradually refining it into a finished product is beneficial for boosting morale because it allows you to see the results of your work at any time. When developing software, I have a rule: at all times, the code must be runnable. If you can see the results of the code you are writing in an hour, it’s like seeing a reward just within reach, which motivates and encourages you. This is true in other artistic fields as well, especially oil painting. Most painters first create a sketch and then gradually refine it. If you adopt this approach, theoretically, you can see the overall effect every day when you finish work, rather than having no sense of the final product at all. There’s even a saying among painters: "A painting is never finished; you just stop working on it." This situation is all too familiar to frontline programmers.

Author Introduction

Paul Graham, the father of Silicon Valley entrepreneurship. Born in 1964 in a middle-class family in the suburbs of Pittsburgh. His father was a physicist designing nuclear reactors, and his mother stayed at home to care for him and his sister. As a teenager, Graham began programming. However, he also liked many things unrelated to computers, which is rare among programming experts. Paul Graham completed his undergraduate studies at Cornell University and then obtained a Ph.D. in computer science from Harvard University. In 1995, he founded Viaweb, which helped individual users set up online stores, the world's first internet application. In the summer of 1998, Yahoo! acquired Viaweb for about $50 million. After that, he set up a personal website where he wrote numerous articles on software and entrepreneurship, known for his profound insights and clear expression, quickly gaining widespread attention. In 2005, he put theory into practice by founding the venture capital firm Y Combinator, which has funded over 80 startups. He is now recognized as an authority on internet entrepreneurship.

Comments

Pleaseto continueComments require admin approval before being visible

No comments yet. Be the first to comment!