Cathedral and Bazaar

All along, I’ve been curious.

In the eyes of the public, programmers are generally seen as dull and logical, immersed in their own world, silent, high IQ but low EQ, constantly debating which programming language or framework is better than another.

Oh, and there’s another important point: no girls.

This has always confused me, and for a while I sincerely disagreed with this label.

Because when looking at some foreign elites, they not only have exquisite coding skills, but also write blogs, publish books, do marketing, start companies, raise funding, go diving, climb mountains, travel…

And it’s not just a passing interest, it can only be described as extraordinary.

Are they still programmers?

I only understood this after reading this book, these people are called: Hackers.

When I read “Hackers and Painters” last time, I was very excited.

I still remember when I first learned C language, I told my brother that I didn’t want to be a hacker, nor did I want to do anything related to security.

After all, back then, all the books in the old library at school were about “Hacker Practice” and “Hacker Disassembly”.

Years later, I now know that what I didn’t want to become is a cracker.

Regarding crackers, Eric offers some advice in his article:

If you want to become a hacker, keep reading. If you want to become a cracker, go read the alt.2600 news group (news:alt.2600). And if you find that you’re not as smart as you thought, be prepared to spend 5 to 10 times in prison. That’s what I have to say to crackers.

I have doubts about this, I’ll take a look at what they were before 2000.

Java is also a good language to learn programming. It’s harder than Python, but it can generate faster code than Python. I think it can serve as an excellent second language.

If you haven’t looked at Python, take a look at Ruby. It’s a language that will make you happy. Also, this book was published before iOS and Android appeared.

It’s best to learn all five of these languages (Python, Java, C/C++, Perl and LISP). They are not only the most important hacker languages but also represent completely different programming approaches, and each one will benefit you greatly.

Reinventing the wheel.

Creative minds are a valuable but limited resource. They shouldn’t be wasted on reinventing the wheel, especially when there are so many fascinating new problems waiting to be solved.

GUI

The problem lies in the design of human-computer interaction and interface psychology, which hackers have always been weak in. Hackers do a good job of designing interfaces for other hackers, but they are often not good at modeling the thought processes of the other 95% of the population.

The following are excerpts from the book, the appendix is interesting.


2. Cathedral and Bazaar

  1. Great software works often come from the personal needs of developers.
  2. Good programmers know what to write, exceptional programmers know what to rewrite (and reuse).
  3. “Plan to throw one away; you will, anyhow.” (Fred Brooks, “The Mythical Man-Month” Chapter 11)
  4. If you have the right attitude, interesting things will naturally come to you.
  5. When you are no longer interested in a program, your final responsibility is to hand it over to a competent successor.
  6. Treat your users as collaborators in development. If you want to improve code quality quickly and effectively debug, this is the most effortless way.
  7. Release early, release often, and listen to your users’ feedback.
  8. If you have enough beta testers and collaborative developers, almost all problems will be quickly identified and naturally resolved.
  • Linus’s Law states the key difference between the cathedral mode and the bazaar mode: In the eyes of the cathedral builders, bugs are tricky, hard to find, and hidden deep within. It takes the wholehearted effort and careful examination of several people for months to have any confidence that all errors have been removed. And the longer the release interval, the more inevitable people’s disappointment becomes if the long-awaited release version is not perfect.
  • For the bazaar mode, it is completely different. With thousands of collaborative developers eagerly examining each new release version, you can assume that bugs are easy to find, or at least can quickly become apparent. So you release frequently to get more fixes, and the side effect is benign: even if there are some minor issues in the release, you won’t lose much.
  1. Clever data structures paired with dumb code are far preferable to the opposite.
  2. If you treat beta testers as valuable resources, they will become your most valuable resources.
  3. Second only to having a good idea is recognizing good ideas from users, sometimes the latter can be better.
  4. Usually, the most groundbreaking and innovative solutions come when you realize that your basic understanding of the problem was wrong.
  5. “Perfection in design is not when there is nothing more to add, but when there is nothing more to remove.”
  6. Every tool should have the functionality you expect, but a great tool can provide unexpected functionality.
  7. When writing gateway-like software, try not to interfere with the flow of data and never throw away information unless forced to by the recipient.
  8. When your language is far from Turing-complete, syntactic sugar can be very beneficial.
  9. The security of a system depends solely on the secrets it possesses. Beware of false secrets.
  10. To solve an interesting problem, start by finding a problem that interests you.
  11. If the coordinator of development has a communication medium as good as the Internet and knows how to lead without relying on coercion, then collaboration among many people is inevitable and more effective than going solo.
  • If you feel fear and disgust during your work (even if you express it in a self-deprecating manner, such as hanging a Dilbert doll), you should realize that the process has gone wrong. Joy, humor, and fun are the real assets.
  • Play is the most effective mode of work in creative activities.

3. Cultivating the Mind

  • In a gift culture, social status is not determined by what you control, but by what you contribute.
  1. If it doesn’t work as I expected, it’s not good - no matter how smart and original it is.
  2. Expanding the mind layer is better than repetitive work in a specific domain (for existing works).
  3. Works that can enter major distributions are better than those that cannot. Works included in all major distributions are the most respected.
  4. “Usage” is the most sincere praise, category killers are better than competitors in the same category.
  5. People who are dedicated to difficult and boring work (such as debugging and documentation) in the long run are more admirable than those who only do interesting and simple work.
  6. Expanding important functionality is better than low-level fixes.

4. Magic Cauldron

  1. Reliability/stability/scalability are very important.
  2. Apart from independent peer review, there is no convenient way to validate the correctness of design and implementation.
  3. The software is critical to the customer’s business.
  4. The software creates or operates a public computing or communication infrastructure.
  5. Key methods (or methods capable of achieving the same function) belong to common knowledge.

5. Hacker’s Counterattack

  • The lack of theory and language works against us in two ways: first, we cannot systematically think about how to improve our methods, and second, we struggle to explain and sell our methods to others.

Appendix A: How to Become a Hacker

Hackers Build, Crackers Destroy

Hacker Attitude

  1. The world is full of fascinating problems waiting for people to solve.
  2. Don’t solve a problem twice.
  3. Boredom and tedium are harmful.
  4. Freedom is good.
  5. Attitude cannot replace ability.

Basic Hacker Skills

  1. Learn to program.
  • To convert knowledge into skills, it can only be achieved through practice and following the masters. The approach is to read and write code.
  1. Find an open-source UNIX, learn to use and run it.
  2. Learn how to use WWW and write HTML.

Status in Hacker Culture

  1. Write open-source software.
  2. Assist in testing and debugging open-source software.
  3. Publish useful information.
  4. Help with some fundamental work.
  5. Serve the hacker culture itself.

Style Issues

  • Learn to use your native language well in writing. Although there is an outdated view that programmers are not good writers, many hackers (including the best hackers I know) write excellent articles, and the number is surprising.

  • Read science fiction and participate in science fiction conventions (this is a good way to meet hackers and potential hackers).

  • Study Zen meditation and/or martial arts. (Mental training seems to be similar in many important aspects.)

  • Cultivate an appreciation for music. Learn to appreciate some unique types of music. Learn to play a musical instrument or learn how to sing.

  • Cultivate an appreciation for puns and wordplay.

    But these things are related to the combination of left-brain and right-brain skills, which may be the key to the problem (hackers not only need strong logical reasoning abilities but also need to be able to quickly escape from the specific logic of a problem).

Don’t

  • Don’t use stupid or exaggerated usernames or nicknames.
  • Don’t get involved in flame wars on Usenet (or anywhere else on the Internet).
  • Don’t call yourself a “cypherpunk” or waste time socializing with those who call themselves cypherpunks.
  • Don’t let your posts or emails be full of spelling mistakes and poor grammar.

In conclusion:
“You are a hacker when other hackers think you are.”
This expresses values similar to the ideals proclaimed by elite groups in medieval European knighthood (usually impossible to achieve), where these social elites had enough resources to transcend the scarcity economy in which they lived. As expected, an ambitious knight fights for justice, pursues honor instead of wealth, stands on the side of the weak and oppressed, and constantly seeks opportunities to test the limits of their courage and ability. As a result, they will consider themselves (and be considered by others) as exceptional, provided that their abilities and conduct have obtained recognition and formal approval from other knights. In the legendary tales of King Arthur and the heroic songs, we see ideals of idealism, continuous self-challenge, and pursuit of status, which are similar to the motivating factors for hackers today.

Translated by gpt-3.5-turbo