The document summarizes key points from the 1971 book "The Psychology of Computer Programming" by Gerald M. Weinberg. It discusses how egoless programming increases productivity by not allowing programmers to "own" programs. It also advocates for an agile approach, noting requirements often change during development. Finally, it outlines traits of successful programmers, like adaptability and humility, and emphasizes the importance of being willing to learn from mistakes.
1 of 7
Downloaded 24 times
More Related Content
The Psychology of Computer Programming
1. The Psychology of Computer
Programming
What a programmer of the 00s can
learn from the 70s
By Dan Stewart
www.StewShack.com
2. The Psychology of Computer
Programming
By Gerald M Weinberg, 1971
ISBN: 0-932633-42-0
Still relevant today?
3. Practice Egoless Programming
There is a myth that the best programming
is the product of genius
Productivity is increased when programmers
dont own programs
Personality is more important than
intelligence in programming
Admit weakness
4. Be Agile
Programming is a cyclic, or iterative process
Who has not experienced a problem
definition that changes as discoveries are
made
At the required date, all the definitions are in
the hands of the project manger but that
does not mean that the project is defined.
All it means is that the definitions are in the
hands of the project manger
5. Traits of a Successful Programmer
Ability to tolerate stressful situations
Adaptable to rapid change
Neatness
Humility
Assertiveness
6. Learn how to Learn
Be motivated
Learn concepts then details
Computer education is irrelevant without
computer training
Be willing to make mistakes
Try different methods of learning (books,
audio, video, in-person), and see what works
#2: Hello, my name is Dan Stewart. My Web address is Stew Shack dot com.
#3: Theres a fantastic book titled, The Psychology of Computer Programming by Gerald M Weinberg. I read the silver anniversary edition which has comments by the author.This book was on several peoples must read list and now I know why. Not only does it cover the human side of programming, it also has timeless concepts that we can use today. Is this book relevant? Definitely!
#4: Lets start with the human side. Reading about egoless programming gave me a lot of confidence. The best programming is done by teams and not by a single genius. The teams strengths make up for individuals weaknesses. When a programmers ego is wrapped up in the program, they own it. What happens when the team finds a bug in it? The owning programmer feels embarrassed. Maybe the team picks on them, because they buy into this owner fallacy. We are not our code! If we refuse to own a program, we welcome the team into the process. Once the team realizes that they own it too, bugs are no big deal. We find them, we crush them, together! If a programmers individual intelligence is not important, then their temperament or personality is. They have to work well with the team. This means admitting weakness. Admitting that you do need help, that you dont know everything, and that can be a humbling experience.
#5: The cycles and iterations that were mentioned in the book are the typical Waterfall sections. These include design, code, test, and release.I think we can agree that the Waterfall approach only works with software that has a set criteria. Ive heard it said, Walking on water and designing software to spec is easy if both are frozen.Even in the 1970s the business was constantly changing. New discoveries are made, turning in requirements to a project manager was pointless. The Agile approach embraces change by working in short iterations. The team designs, codes, tests, and releases sometimes in as little as two week cycles. Realize that change is inevitable and work towards showing your customer something that they can change as quickly as possible.
#6: What traits does a successful programmer possess? First, the ability to tolerate stressful situations. The author is not just talking about the bug that has your manager breathing down your neck to fix. Hes talking about long-term stress. Multiple days, weeks, and even months of grinding out a project. As programmers we have to be able to handle stress through diet, exercise, meditation, and even the occasional vacation.The code you write is like sand of a Buddhist Mandala. Each little colored grain is carefully placed to create a beautiful design. Then, when it is done and admired, the monk will sweep it all up into a jar. Nothing lasts forever. We have to relax and realize that change will come only after we are done placing the last grain of sand.Neatness, a clean desk is the sign of a clean mind, or is it a crazy mind? What is the structure of your program? Are things put where they belong? Are you using a patterns like MVC with clear places for models, controllers, and views?Humility with our own ability has shown to reduce bugs. If we humble ourselves and realize we probably made a mistake, we will look for it. If we humble ourselves to allow the team to review our code, they will find it. We should be happy the bug was found before it made its way into production. Without humbleness we would have false confidence in the code.Assertiveness sounds like the opposite of humbleness. It is, and we should not be humble about our ideas. We should not be humble about our morals. Dont get stuck in analysis paralysis. Just do it! You know it will change later, so why worry about it?
#7: Doctors, lawyers, and programmers have to constantly learn. They have to study to provide the best service to their clients. Each person has their own unique way of learning. The way might even be depend on what they are trying to learn. The author gave an example on learning a programming language. Maybe to learn it, the programmer has to do it. Contrast that with learning a high level concept like Object Oriented Programming. Learning OOP might be best done in a classroom, or watching a video.The first step is to get motivated to learn. Ask yourself why? If you dont get a good answer, then find a reward for learning. I will treat myself to a dinner if I finish this book on the Psychology of Computer Programming. Learn about the concept before you get bogged down in the details. A great example of that is Test Driven Development. You cant learn TDD by writing unit tests. You have to start with how TDD helps, what makes up a good test, what should be tested, and end with writing a test.Try explaining how a computer mouse works to someone who has never used one. Its pointless, because it is irrelevant to them. Now sit them down at a computer and ask them to click on an icon using the mouse. Now they have a reason to learn and the training to start.Its ok to make mistakes. Learning cant begin until you are willing to fail and fail often.Try to tackle a subject using different approaches. Read books, or blogs, download a podcast on the subject, watch a video, even attend a conference. What worked for you? You can tailor your learning to suit the way you learn.
#8: I would like to thank Ugly House Photos dot com for the wonderful 70s home photos. After reading this book, I gained a lot of confidence in my abilities. I discovered my strengths and some areas that Im working on. I realized that programming isnt just about 1s and 0s, it about people and personalities.