The "discipline" of programmers

Source: Internet
Author: User

In so-called disciplined teams, programmers often don't learn anything. Because the numb heap code is never the core competitiveness of the software industry, the design ability is, ask a few why, must be so and why not, for young people, especially for a young people who have the technical pursuit of good forever.

Before and after the National Day holiday, I and many friends inside and outside the industry began a big discussion about "yards Nong", as an extension of these discussions, an article called "from" the "Code of Agriculture," said the articles from the mind output, the final display in the CSDN official online. In the article, I advocate that the young technology people should not accept the social opinion imposed by the "Code farmers" attribute, do creative things themselves, to believe that pay and wisdom must have a return. This article, got a lot of friends of the criticism, I am quite happy, because there will be interactive brainstorming, and then generate more new ideas.

Looking back at the big discussion at the time, many of the ideas were worth delving into, such as in the discussion, a friend named "@ Not moving like a mountain _" said:

for the software is not labor-intensive industry, you think how reasonable is one thing, how reality is another matter. As an old programmer, Lao SE, I have participated in thousands of team collaboration for several years of development cycle. All creative work must be completed in the pre-research phase. Once into development, there is discipline and no innovation. Of course, the prototype software for individual high-tech products is exceptional.

This was a big hit for me because it touched the memories of my early career in the IT industry.

The team I just joined years ago is developing a communications device. Friends who have developed communication equipment should know that, in fact, the core of embedded software development is event scheduling, because communication equipment is always in a busy state of exchange and command event disposition, a good event scheduling mechanism is the soul of system performance, if each time an event comes with a new thread to deal with the way, system resources are instantly depleted and equipment crashes.

We were using a structure called zebra, an open-source project for Exchange, and even a kernel program running in a user space.

The project manager who managed the project team was a professional copywriter who had not done the software development at that time, so when the main developers put the framework of the event scheduling system finished, the project manager glanced a turn and said:"Now the structure has been completed, the following is the division of labor, The respective functional framework is filled, I looked at, a total of 19 modules, everyone points, a module per person a week time ..."

Then a veteran programmer interrupted him, and the senior programmer asked everyone to do a unit test of what they were doing, claiming that he would give us a good thing next week.

Sure enough, the senior programmer took out a week of script-written tools to fill all the original functional modules directly into the zebra architecture.

Whenever I recall this, the awkward expression of a layman's project manager can be a laughing matter. At that time the project manager, in fact, is also a young and promising people, but the characteristics of software development is indeed a lack of understanding, take it for granted that they grasp the discipline on the line, we step-by-step, UNIDO output. But know that if you really follow his plan, the functional filling process may take 2-3 months, and the millions of-line code hides bugs that require a test cycle to catch worms.

I told the story to my friends, and some of my friends asked, "What if I didn't have this script-written tool?" I would ask, so what if we didn't find the zebra architecture? Why don't we have a few rookie to write the dispatch machine? Software programming, is a shortcut must take a shortcut to work-there are ready-made reusable or can be used to learn something must be reused and for reference, so that the level of work and efficiency can be guaranteed. There is no ready-made thing, must be a last resort, the re-start, there must be a major problem; the programmer, who likes to reinvent the inexperienced, must be a layman who is not in the dark.

I used to liken software work to another evolutionary process of the human species, and each development effort was a logical tool for later stage projects. Since learning to make and use tools is precisely the difference between humans and animals, in the field of software work, to take the shortcut to the doubt, to learn from the ready-made results of resistance, against the rather stop the progress of the first to create tools developers or managers, like the gorilla in the software world.

Superstition "discipline" of managers, usually to "combat effectiveness" as the mantra, unfortunately, the development of products is not war, software programming is not the death of the melee, software work is actually time and time to put their own good ideas, good creative condensation in the programming language process, good code, such as poetry in general, It is concise and efficient to read simply astounding; good software architecture, resource saving, strong robustness, these are the result of repeated thinking and repeated consideration, such a state of work and "discipline", "Unity is power" in fact is completely opposite.

The soul of software is mathematics and logic, the development process itself is a kind of creation, a dialogue with mathematical logic. Discipline of the soul is obedience, is obedient, is the individual will obey the collective will, the collective will obey officialdom. The marriage of these two things is certainly not free love, but pulp.

I think that in teamwork, programming norms are very necessary, with the agreed programming rules to write the program is a developer should co-maintain a good development atmosphere. But this is the boundary of discipline, and the scope of discipline should not go beyond that boundary.

These years of agile development, pair programming and other emerging software development model, from a side to strengthen my understanding, that is: the important way of software work is to create a good idea of the environment, so that good ideas flow out of the generation, the formation of code. Software activity should come back to the source, that is, to inspire creative human nature.

In this way, I often suggest that some embedded software engineers can learn Java in the rest of their work, learn the scripting language, awk is OK, TK is OK, and Perl can. A lot of people will be surprised, feel that they face the hardware, and even drive-oriented, why to learn so many presentation layer of things?

I think that the embedded system software development often because of the device processing power and development environment restrictions can only use process-oriented C, but in the software tools have gradually enriched the current, the underlying code is fully available in scripting language to help deal with, a lot of heavy work and code migration work can be fully scripted execution, Efficient and accurate.

Purely from the efficiency of project development, there is such a software generalist in the team, there are people who can raise such ideas, more than a layman leader for the developer discipline requirements to be meaningful and effective.

This is another project I have been involved in, but also the development of some kind of communication products. This time is to develop a north-to-south interface for the device. The so-called North interface, in fact, is open to the management System management Supervision interface. We used the MIB scheme to SNMPV2 as the interface specification. The same problem again: an office with a large number of slave terminals, its MIB is very complex, because the management data node has been meticulous to each terminal under each port's entrance rate and the details of the VLAN, so the data management is unusually cumbersome.

With previous experience, this time we have to look at the script tool, sure enough, we have directly found an open source project, specifically for the MIB developed a set of Perl script-based processing toolset, a little adjustment to this toolset, can quickly generate to meet the MIB access requirements of the underlying data patterns, And the generated code has good maintainability, and redundancy is also within an acceptable range.

I was very impressed that, in the completion of the project of the celebration Feast, the project team of the technical Daniel, which is said before the senior programmer once had such a feeling: "Really do reliable embedded software development, the future should be the architecture design with code generation tools, the work of the shallow programmer is to do a little small repair, Learning architecture, which is conducive to growth, is also the most beneficial to project progress. This has been heard for nearly 8 years, still ringing.

"@ does not move as the mountain _" the paragraph, although from one person's mouth, but such a view, in the domestic but is not a minority, no programming background of the management staff is open to such views, unsanitary environment. Many domestic companies in the software department are still adhering to the "People's month" state, that is, the number of employees and work time product as the company's productivity, and then the specific work in accordance with the "Person month" or "man-days" and even "people" to measure, and then a task to cut out. See here, read "People's month myth" friends should be a smile.

Writing this article, but also mainly to the first into this industry or have aspirations to enter the industry of young technology people say something in my mind: Heap code is never the core competitiveness of the software industry, design capability is, although many companies also use the number of lines of code as performance to assess To be a obedient child in this industry is also difficult to quickly improve themselves, because creativity is to rely on their own to encourage themselves to continue to show, and arrange a lot of people to do repetitive manual work planning, in fact, because no one to try to create convenient tools, so-called "discipline" of the team you certainly can not learn anything. Ask a few why, be sure to do this and why not, for a young person, especially for a young person with technical pursuits will always be good.

The "discipline" of programmers

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.