Software development meta skills

    Learning from books, about the correctness and recognition of templates

    A couple of thoughts about how to create software well.

    A friend recently asked about specific skills that software developers have.

    What are the unique skills that practitioners practice?

    Based on my experience, I formed the following opinion. The idea that I realized over time is that I like meta programming. Learning meta-skills, or how to do what we do best, involves reading many well-known books in context.
    I took specific examples of what I have read over the years, applied them to my own observations in this area, and answered in the most pragmatic way.

    In my opinion, if one thinks universally, then I would say that this is the practice of correctness and pattern recognition *. Here are some of the skills that are unique to software developers.


    Correctness is very much connected with how and why we do things that way and not otherwise. In companies, this is most closely connected with the correctness of the task that a business should solve for its clients. Software that is well written adheres to the same thinking.

    Correctness is considered in the development of how correct this is “how” , so that a business solution can continue to solve tasks with a high level of reliability and efficiency. This process is a balance between strategy (design) and tactics (execution).

    The study of what this “how” in vacuum is best represented in the fourth part of the first chapter of the book.Programming Pearls - Writing Correct Programs ( Programming Pearls - Writing Correct Programs ).

    ... keeping a simple code is usually the key to correctness.
    - John Bentley

    Pattern Recognition

    Pattern recognition is strongly linked to the organization of this correctness by creating the necessary abstractions and boundaries of components.

    Pattern recognition leads to the concept of reuse for modularization and isolation of code. We track duplication, find areas that can be reused, and redesign the complex parts of the code. This is what software developers do well. We follow the details very carefully. We recognize knowledge as it is created over and over. And then we simplify.

    Pattern recognition is discussed in the community and there are many sources where you can read about pattern recognition methods. I learned this in the second chapter of The Pragmatic Programmer. - The Evils Of Duplication (Pragmatic Programmer - Evil duplication).

    Make it easy to reuse. Do not repeat.
    - Andrew Hunt and Dave Thomas

    Interesting observation

    As soon as I gave this answer, my friend asked another question.

    If correctness and pattern recognition are these skills, how do they learn?

    Of course, my answer was quite simple:

    Find these books, set up your environment and work through examples. Establish learning expectations and apply these meta-skills, providing business value. Why? Complexity. This is the best investment in skill training that I know about. This also leads developers to become more confident with time.

    My growth was centered around these books and around these specific skills. But it made me realize that there are several skills that make a significant contribution to the meta-skills, in addition to directly doing the work. I became interested in the meta terms. My work on the decomposition of problems (correctness) and organization (pattern recognition) did not find application at the time of their publication. And at about the same time I was thinking about writing this meta-skills note.

    A Stanford University professor taught a course on meta-skills and this led to the writing of a book in which he included some of the results of his course. I was shocked when I learned that he had the same attitude to a question as I did. So I bought a book and read it avidly. Chapter Thirteen, A Philosophy Of System Design (The philosophy of system design).

    Developers are usually very detail oriented. We love the details and we like to manage their set; This is important in order to be a good specialist engineer. However, good software developers can also digress a bit from details and think about the system at a higher level.
    - John Ousterhout **


    In my opinion, correctness and pattern recognition are *** skills that software developers need to learn and develop in themselves. As a result, the quality of the software is improved. All other unique skills may well rely on the above. I invite others to share examples of the meta skills they have developed over time.

    By and large, correctness and pattern recognition are tied to outcomes of complexity (also known as cognitive load). There must be a way to balance both factors correctly to reduce complexity. That is why I consider these skills to be the essence of everything we do.

    * What is interesting is correctness and pattern recognition are strongly connected by practitioners around machine learning.
    ** If you want to know more about what John is doing, take a look at his video .
    *** Engineers must also practice a high level of training and communication. These concepts are not unique to software, but are strongly associated with the sciences.

    Original article

    Also popular now: