
Once upon a time the book “Perfect Code” by Steve McConnell impressed me a lot. I personally think that this book must be read by everyone who makes a living by writing code. I especially strongly recommend this book to beginners.
Real thinking about programming is dedicated to chapter 33, “Personality,” and those who decide to link their lives to software development.
Long ago, in a distant galaxy
Once we made sites with friends. There were three of us: the designer, the manager and me. I was a clever fellow, and a capable programmer, so I did not limit myself and was at the same time a typesetter, client-side and server-side programmer, system administrator and tester in one person.
Each of our products went through the same life cycle:
')
- Discussion . Everything is clear, there are 5 types of pages, including feedback, our backend is ready for symfony, the timing is clear, we are cutting.
- The initial stage of development . The site is simple, so I do not worry and do everything at the same time. I make up the main page, I program a cool exit on jquery, I introduce a version control system, I am parallel to the project for entertainment, I wind up the admin area. Oh yes, you need to finish the feedback page from the last project. I drink feedback.
- Actually, the development . We have updated requirements and we need to tweak something, but it does not matter. I rearrange the main one, at the same time I refactor the layout, at the same time I saw the project for entertainment, at the same time I make minor edits from the designer. I program and test the admin panel, fix bugs, make up, run, and fix bugs again. Some pages deliberately leave for later.
- Stage “ready for 90%” . Often, the longest. At its beginning, it turns out that 90% readiness is not enough even for a preliminary demonstration. The period of the night bugfix, the postponement, the struggle with the effect of the triangular blanket.
- Delivery of the project . At the final demonstration, I understand that I forgot feedback.
Each project left an aftertaste of a sense of shame, frustration and moral fatigue. I left this job, confident that programming was too hard for me.
Several years have passed
Since then, I have made a number of much more complex projects than these sites, made them clearly and on time. I have increased my knowledge and skills by an order of magnitude. I have achieved a lot and am proud of it. I even remember my shoals with pleasure, because I learned a lot from them too.
Now I know for sure:
programming is really too difficult for me.My brain refuses to simultaneously recognize and remember all the dependencies and data flows in my projects. My mind cannot switch between developing, testing, and answering questions without losing performance. I can not focus on the task when in the file structure of the project a mess. I, after all, cannot work without a schedule and without an atmosphere of concentration and silence. So that no one laughs on the ear.
I realized that I no longer want to pretend to be a genius programmer, one left-handed Facebook killer. I want to achieve results. Then I stopped struggling with my own limitations and started using them. I stopped trying to keep everything in my head and began to structure - code, project information, time. I began to look differently at development tools and task accounting. I began to read books for which there was not enough time before.
A little bit of hardware
The physical limit of the human brain, according to various estimates, 5-7 objects in the field of attention at the same time, someone more, someone less. It is quite a bit to cover a complex system. Considering that simple software products are comparable in complexity to the building design. And software products of the operating system level are not comparable in complexity with any other human creation. With such complexity it is impossible to work with bare hands, we need means of protection.
By and large, to such remedies can be attributed everything that is used in the development, except for your head: from a text editor to time management techniques. In this article I would like to dwell separately on, so to speak, the psychological component of programming.
How do we think
Many programming recommendations are based on common sense. Learn, the industry is updated by 50% every 3 years. Use conventions, do not waste time thinking about how to make a code. Be modest, your options are limited. Of course, find and use the best development tools in your work: editor, version control system, task tracker.
In my opinion, a very correct and fairly complete discussion of what a programmer should be (and should not) is contained in Steve McConnell’s “Perfect Code”. Here are some quotes from there.
The best programmers are those who understand how limited their capabilities are. They are modest. The worst programmers refuse to admit that their abilities do not match the task. Character does not allow them to become excellent programmers. The harder you work to compensate for the limited capacity of your mind, the better you will program. The speed of your development depends on your modesty.
If standards and conventions are not used in a large project, it becomes impossible to complete it. Do not waste your creative energy on something that does not play any role. Set up conventions for secondary areas and focus on the really important aspects.
Being a beginner or intermediate programmer is not a sin. Being a competent programmer, not a leader, is also not a sin. But if you know what you need to do for your own development, and do nothing, otherwise it can’t be called a sin.
What we will be
Programming is the hardest kind of human activity. Being a programmer is honorable and awesome. Therefore, do not waste your time, do not fight with windmills, it is better to read good books, learn and use new techniques, learn and grow. May the source be with you.
additional literature
Steve McConnell - Perfect Code
V. Turchin - The Phenomenon of ScienceAttention Volume - Wikipedia