Thoughts on software development, domain knowledge, career crisis, and UML

Source: Internet
Author: User

When I was bored recently, I often wondered questions related to Domain Modeling. For example, in the field of medical image processing, does the consistent display process count as a field? What about Convolution Back Projection? Can they all be placed in the model? Is this model useful to your final service objects, product definitions, and software designers? The deeper you think about these problems, the farther you leave.

--

In the 21st century, software has penetrated into every field of human life, from finger-sized music players to interconnected networks all over the world. To develop truly useful software, programmers must constantly learn the knowledge of different fields. After working in a field for a long time, programmers gradually become experts in this field. As a result, some people began to define requirements and become product designers. Some people simply entered the industry where their software services were served and became marketing personnel or CIOs with a technical background.

In this era where everyone (both elementary school students and Social Science doctors) can program, what is the core value of software? Is it a springboard for these people's careers? Or a variety of accessories in traditional industries? Software Outsourcing is typical for the latter. Especially in developing countries, the downstream of the software industry chain, whether or not your company name carries the word of outsourcing, as long as you deal with foreigners, you are mostly related to outsourcing.

Even if many people claim to be senior in the software field, they have to gradually become hardware experts proficient in computer principles to either write high-quality system-level code; either to write excellent text and image processing algorithms, or to successfully organize and implement application software development projects, you have to become an expert in the field of statistics or data processing, they have to gradually become industry experts proficient in the operation rules of their products or projects. In the past several industrial revolutions, it was hard to imagine a steam engine developer who was still concerned about how an ice-breaking ship could survive, or how employees collaborate on an intercontinental train.

Some people attribute this phenomenon to something that is too young to form a mature and self-contained system in the software industry. Is it true? To what extent is the software industry mature? The association between this industry and other industries is so deep. Maybe the day when the industry is mature, the software will be completely at a loss and nothing will happen.

I would rather believe that software is an engineering mathematical tool. Just as traditional numeric computing tools (such as calculators) can also be widely used in different industries, most programmers (that is, software engineers in many companies, rather than those of algorithm researchers) are producing a variety of non-numerical computing tools for different industries.

Some non-numerical calculation principles, such as Boolean algebra, set theory, and relational algebra, are encapsulated in a modeled manner to facilitate customization for different fields. This modeling method has been greatly developed in practice, such as object-oriented and design patterns. They are layer-by-layer and layer-by-layer away from basic mathematical principles, A layer is closer to some well-known common sense in the field of service. For example, a document is an entity, but the approver is not an entity but a role, because a person can be either an approver or a submitter.

More and more programmers begin to work at this level close to common sense, and their code has become a clumsy and mechanical flip of these seemingly well-known common sense. Despite this, some codes eventually sell at a high price. As a result, they gradually forgot how they came to this level, and even began to slander their university teachers. Why did they waste time teaching us mathematics instead of skipping mathematics and directly teaching object-oriented and analytical models. The latter is so simple and practical that it is easy to understand whether it is a primary school student or a boss who does not fully understand the computer. The boss often feels that he is easy to do, and he is not willing to spend a lot of money asking people to do it.

As a result, software outsourcing has emerged in large numbers, and many local software industries are also called software "services. But even in outsourcing companies, most programming work is more like producing a "product ". These products help employees and managers improve the efficiency of workflow and information management, or help doctors, graphic designers, or search engine users conveniently use various numerical computing tools and their results (don't forget, programmers are not programmers, but algorithm scientists ). These software has the honor to run on electronic (at least so far based on electromagnetic field Principles) computing devices and sell them along with these devices (although not necessarily the same vendor ), so that they are very different from traditional numerical computing tools (such as calculators or actuaries. Of course, computers can also do and do more powerful numerical calculations, and we do not need to evaluate numerical and non-numerical computation, who is good or bad, or who is more likely to make money, but we must admit that, if the computer can only perform numerical computation, it may not bring about an information revolution in the true sense.

Later, with the development of open-source communities and cloud computing, the Code itself began to become cheaper. As more and more code becomes completely free, the coding work is getting closer and closer to the "service" in the real sense ". In the eyes of some internet companies, source code protection is not worth discussing at all. For example, if you use HTML5 to implement a cool function, one person can right-click to view the source code, crack it step by step, and transplant it to his website. The other person imitates your function, implement it again by yourself: in fact, the time and money spent by the two of them are not much different.

Indeed, if there is nothing that only algorithm Scientists have studied, most people who are called software engineers will face this situation. There may be a long way to go before software development may change from product manufacturing to service provision in other industries outside the Internet, but this has become an indisputable trend.

Whether such a change is a good thing or a bad thing depends entirely on your choice. If you do not know anything about writing code (or writing code by a bunch of people), your situation may become a little difficult. As a result, you can either dig your mind into the "service" of the software, make the product into a platform, go to the high end of the industrial chain, or provide technical consulting and training on software development and management; you can either equip yourself with so-called "domain knowledge" other than numerical computing, such as processing, data mining, Device Control Principles, industry informatization experience, mass consumption, and social habits. Of course, there are many other options, such as giving up technology and joining the business world.

In any case, as long as you are still writing software and don't want to be troubled by dispensable project progress, messy new technologies, and inexplicable career crises, you have to recognize the nature and core value of the software, understand how the software is going today and where it may be going tomorrow.

Back to the previous topic: although the computer was originally used to solve the problem of numerical computing, it is exactly the non-numerical computing that students seem to understand, triggering this technological revolution, and become the original driving force for the development of the software industry. In fact, we don't have to be surprised by the programmers, because they can also assemble a semiconductor radio. Hands-on programming has almost become the only way for ordinary people to understand the many things that are happening in this age.

--

There is a book at the bottom of the bookcase, "micro-modular program design for Embedded Systems", which I bought many years ago and has never had a chance to read. The reason for buying books is simple, because there is a UML state diagram used to depict the transition of hydrogen atoms. By the way, the author of the book is a software architect who once worked in GE Medical.

After quantum mechanics breaks the rule of classical physics, numerical computing tools are becoming increasingly inadequate in all fields of human society. It is discovered that numerical computation can only deal with some simple idealization scenarios that are not small or small. In the face of the complexity of both micro and macro extremes, we can only use calculus and statistics to give a rough description (such as probability and wave function), and cannot accurately analyze the behavior of each individual. In the field where a large number of numerical computing models were used to solve the problem, non-numerical computing models (such as cellular automation) began to play an increasingly important role. Obviously, UML is inherently powerful in describing some non-numerical computing models and is easier to understand than formal logic in academic textbooks.

If we look at the world from a computational perspective, there are actually numerical and non-numerical computing models in each field. They complement each other in some fields, in other areas, one party may have an overwhelming advantage. In the information field, a person proficient in the processing rules and transfer methods of information objects in a certain field may not need to know how the information is defined and calculated, or why do people need to use bits.

Interestingly, the more traditional numeric computing models are difficult to match (for example, to monitor each process in a process), the higher the dependency on software and general programmers. You can imagine how empty and boring an organization is to discuss the values of normal distribution and Sigma before establishing an information system to support the internal fine-grained operation process.

--

Some system problems have led to the accidental deletion of a reply from Comrade hertz,
He mentioned that the core of Software Engineering in the New Era lies in methodology.

Thanks to Comrade Hertz, the core of software engineering is methodology, which is indeed the consensus of the industry.
I once believed in this idea, but it seems a little shaken in the last year or two.

Before that, I have been concerned about a piece of software architecture and design methodology,
The development management methodology, such as CMM and iteration, has been pushed forward.
With the deepening of understanding, I feel that methodology research has encountered some bottlenecks,
Just as Moore's Law may eventually stop at the law of physics.
In fact, since the software crisis in 1970s, the methodology has made great progress,
Breakthroughs in the future can only wait for the progress of cognitive science or management.

In practice, even if your methodology is used well,
After all, it is an external, guiding best practice, or an institutional management process.
The final success or failure of a project depends on people, especially domain knowledge in the human brain,
And how to convert these domain knowledge into programmable computing models.

One of my previous blogs mentioned a case,
It is just to say how a team without domain knowledge can make the wrong software under the guidance of the correct methodology.
Of course, you can shift the responsibility to the perspective of selecting, employing, or managing knowledge,
However, this becomes a management issue, not a software engineering issue.

The domain knowledge mentioned here can be the working principle of a compiler or the informationization experience of a certain industry.
In software development, domain knowledge is often converted into a computing model and then programmed to implement it,
Such conversions sometimes use the OO methodology, but sometimes not necessarily.

For some new fields (such as cloud computing), this transformation process is like traveling on the wasteland,
When there are too many people, the path (that is, the methodology, such as mapreduce and other programming models) will gradually become apparent.
Maybe methodology is an important output that needs attention in software engineering, but it does not seem to be the core driving force.

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.