[Translation] programming is different from the software engineering

※ This article "Mr. Buna Samer Software Engineering is different from Programming is what the translation of the". We got the permission of the translation from Twitter. Thank you very much.

Programming is different from the software engineering

All of the software engineers can program, but you can not engineer the software all of the programmer.

As a metaphor of engineering, some people do not like the term software engineer. This article does not mention the term. If you do not like, Software Author, please replace the Software Craftsperson or Software Artist,.

Software engineers, it means the person to write the high quality of the software as a profession. They are using the statistics and science, and is the person who is not considered the work to earn a mere money, even if you know the programming of the way, not a software engineer.

Anyone can learn the program. It's easy. Anyone can create a program that runs on your own machine, but does not guarantee that they will work with other people's machines.

As my favorite similar to this, no one but you can amuse yourself singing in the shower, when it comes to party time, you do not play a recording of his own song. You will enjoy the professional music.

What was more similar? of course.

  • We have studied mathematics and writing at school, but I did it by not become a mathematician and author.
  • Most of us can learn to be easy to cook, but when it came time to feed a lot of people, we hired a chef.
  • You do not call the neighborhood handyman in order to build a house from scratch.

The main message that I want to share in this article, a simple program is that differ greatly from the program that has been designed.

The act of programming, in its simplest definition, is to give an instruction to the computer for some input in order to produce some output.

Software engineering, design of computer programs for the purpose of solving the problem for many users, creating, is the test, and maintenance. It is to create a robust and secure solution, they last longer, there is around the fundamental problem some unknown problem to resolve.

Software engineers, they have a problem to solve, solutions they offer, the limit of their solutions, the impact on their privacy, and I understand all about the security implications.

If someone does not understand the problem itself, they do not try to program a solution to it.

The concept of resolution

Software engineer, does not believe that to write a simple program their career. They meet your needs, I think from the point of view of solving the problem. This is important, because because all the problems are not require a program. Some of the problems can be solved by existing programs and summarized a plurality of programs. Some of the problems can be completely prevented by acting at an early stage. A good program design are included may be planning to prevent future problems.

"Intellectuals is to solve the problem, genius is so as not to occur the problem."

Albert Einstein

Normally, a complex issue, you must write a multiple of the program. Some of the problem requires a program to be executed in parallel, other issues will need to be sequentially executing the program. Some of the problems can be solved by educating the user.

Before you write a program, software engineers will be the question.

  • What kind of trying to solve the problem?
  • What you can do other than to write the code in order to solve them?
  • What you can do to make it easier to solve these problems in the code?

Quality of code

Easy is excellent program to read in a clear, easily can be extended, and work well with other programs. Not a nightmare able to maintain them. The quality of the code is not something applied to the balance. It will never be accepted to use the sloppy shortcut for deadline and feelings.

One of the most important aspects of engineering software is to design from scratch with extensibility in mind. It is virtually inevitable to change the software. The user will request a more simple way to use more features and software.

Software is usually not very useful by itself. Useful software features, begins when a plurality of software to communicate with each other, exchange data, and to work together with respect to the task of presenting the data and the interface to the user.

With that in mind you will have to design the program. Whether they will accept any message? What kind of events do you have being monitored? What kind of message do you issued? How do you method of authentication and authorization for communication?

Another important aspect of the excellent program is the clarity of the code. Not the number of the number and test coverage report of the test. And the simple question of whether this code is read to other people. Alternatively, I, the author of the code today, but if you can understand this code in the next few weeks.

"In computer science, there is only that the two difficult that disabling and naming of cache."

Phil Carlton

Readability of the code is more important than you think. Unfortunately, there is no appropriate measure of order to clarify the code. It may be helped to store the good software patterns and practices, but not often enough. Excellent software engineers attention to clarity of the code with the intuition and experience. Metaphor for the next writing is perfect. Just know a lot of the list of words, it does not help to write a concise and clear content.

"I did not have time to write a short letter, wrote a long letter instead."

Mark Twain

The program will not work. That you can easily modify them when to correct them is an important nature of good software. Error that occurred in the program has a clear message, it should be intensively recorded somewhere for monitoring. When a new error is reported, the person you need to fix it should be able to debug the error. They should be able to read to hook into the system, at any time information about the execution context. They are, should the expectations about every part of the system can be easily confirmed.

Environment and test

When the software engineers to write programs, they are in their program are a number of different environments, to ensure that it works in a different resource machine, and in a different time zone. Software, you need to operate in a variety of screen size and orientation. In addition, you will need to deal with that you are forced to use of the limited memory and CPU.

For example, when creating the software for the Web browser, you need to work with all the various major browsers. When you create a desktop software, it should work for Mac and Windows users in most cases. When you create an application that depends on the data, or slow connection to retrieve the data, and in case you need to or become a while completely off, the software you need to function.

In order to write a part of the software, software engineers will try to consider all possible scenarios in which they can imagine, and they will plan to test these scenarios. This is, but starts from those that unexpected call a happy path that does not happen, more importantly, to document all likely to occur of the problem, is to plan the test for that. Some of the software engineer, you start by calling the code to simulate these scenarios and test cases. Then, to create the purpose of the code to pass all of these test cases.

Software engineers, we understand the usually ambiguous and incomplete software requirements. Unique skills of talented software engineers, not the writing of the solution, is to identify what to put in the solution.

Cost and efficiency

In most cases, software engineers to quickly solve the problem. If you think you can hire a wealth of programmers experience means a higher cost, please think again. As the programmer of experience that you hire is if the rich, they are faster, robust and accurate, reliable, and can provide a maintenance possible solutions. This means that there is low overall cost in the long term.

The cost of running the program must also be considered. All programs using the computer resources, the resources are limited. Software engineers, will write an efficient program that does not use the computer resources unnecessarily. For example, the data frequently used cache is one of the strategies to be applied here, but can be made more quickly and efficiently the program is just one of thousands of tools and variations .

Novice programmers might give you a cheap solution, to perform the solution much your client with you than if the rich programmer you experience created the first place efficient solution we put a great deal of expense to.

ease of use

Excellent program has been designed with the user experience the (UX) in mind. Human-computer interaction is a big topic with the research and discovery of countless. As these findings are widely accepted, the software will be excellent.

In order to know the taste of this large area, Let me give you a few examples here.

  • When the user to design the input form, which is expected to enter the data, such as your e-mail address, excellent program ignores the uppercase and lowercase letters to be used in the e-mail address. It also will remove the extra space around it. Since the CAPSLOCK key is turned on, please do not trouble to the user. E-mail is unique in lower case. If the program is accepting new E-mail address, to verify as soon as possible that the, probably tells a clear message that was using the wrong address to the user. To do this, @ will contain the problem of obvious verification of such without a symbol, a misspelled "Gmail. Ocm " non-obvious, such as the use of the verification problem must also be included. "
  • When you redirect to do something to the user, a good program will remember their original position, will redirect them to its position when they were finished. The excellent program, must be associated with future steps required in the user remembers all interact with predefined data. For example, Expedia: I have been searching for flight as a guest (Yakuchu that booking site hotels and air tickets, etc.). After that, we decided to create an account. The previous searches are all saved to the new account, you can access them from a completely different machine.
  • Good program has been designed with the user of scenario in mind. Please put yourself in the user's position. Please do not add functionality. The other day, I frequent flyer number: I booked a United flight forgot to include the (Yakuchu such thing as a VIP member number). After obtaining the confirmation, I went to the United web site in order to be added to the flight membership number FF #, and it took ten minutes to understand it. Since there was no clear way to the site, there was a need to investigate all the links that could lead to its function. Where this function has access to the available page, because it was filled with great form, it could not be seen for the first time. Edit the traveler information, to scroll through about 20 input elements on the form, is possible to select the type of FF # you want to use, there is a need to further enter the phone number you need to send the entire form understood.

Reliability, security and safety,

These is probably the most important point to separate the software experts from the amateurs. They know that there is a responsibility to write a safe and secure solution.

The software, bad input, there must be resilient to bad state, and bad interaction. This is very difficult to achieve, and it is the main reason we hear stories about people who disappear in the mistakes of the software.

The user is trying to use the software in a bad or wrong input. Intentionally break the software, but some people trying to enter the resource represented by the software. Recent Equifax: a person is to have been the cause of the catastrophe (Yakuchu US credit information companies), has been accused of not to work. Of its work, it is intended for in all of the software that are generally published more resilient to malicious input.

Security of the story is not only malicious malicious input, same is true for normal input. If a user forgets their password, or you can allow what trials? Do you lock out them later? What happens if someone else is trying to lock them out? Do you want to allow the user to send his or her password in the connection that is not encrypted? What happens if a login attempt to your account has been made from unusual location? What if the login appears to be automated?

Cross-site scripting and forgery request, What do you do in order to protect the man-in-the-middle attacks, from simple social phishing user? If you received a DDoS attack on the server, Do you have a backup strategy? These questions are only intended to name a few of the many concern should be planned.

Safe program, rather than the confidential information as plain text, the split will be stored as a one-way encryption of data by a very difficult algorithm. This is a backup strategy in the case of the program and the data has been compromised. Hackers will find the encrypted data, but it is not the most useful.

Software becomes a bad state, you need to fix. Unexpected problem occurs because of the program. You are not aware of it, if you do not have to plan that the, you is not a software expert, is the author of just a dangerous program.

Defects in the software will not be visible. Our intellectual ability to prevent and predict the known defects is limited. Software engineers, are we understand the value of excellent tools to help you create the correct secure software is for this.

Accept the tool

Better tools is necessary because there is no doubt. Tool begat a big difference, are often underestimated.

Please try to imagine that there is a need to deploy a file with FTP. Please try to imagine that you are debugging a network and performance issues without using the Chrome DevTools. Please to write JavaScript without ESLint and Prettier Imagine if it were a how inefficient today.

If you are a JavaScript developers, and is forced to choose only one of the plug-in for your code editor for any reason, you should choose a ESLint.

Tool that you continue to turn the short feedback while writing code, we should welcome the fact that you want to add. Discussion of Bret Victor about what to invent an immediate visual representation to what we create was that wake up for me. To adopt the tool improvement is one way to guide us to the bright future. If you have never seen up to now, please look at the story of now Bret.

When I found a wonderful new tool, my only regret is that you did not use that tool previously. Better tools will help you to become a better programmer. They find, use, please to improve them if evaluated, and possible.

The choice of language is important. It is also important type is safe. The best that happened to JavaScript is TypeScript (and Flow). Static analysis of the code is greater than you think. So if you do not do it, you're fragile against basically the future of the unknown. Please do not code without the static typing system. If there is no static typing to the selected language, change the language, or please find the transformer compiler for it. Today's transformer compiler is smart enough to operate only to read the comments in the code. I think that type checking of language that is not supported in native is carried out in the future.

Evolution of software engineering

2 months, 6 months, can not be to anyone to learn the software engineering in one year. Please do not learn in boot camp to become a software engineer. Although I have learned over the past 20 years, also still learning today. I, the design of the application that is used by the Learning and thousands of users of about 10 years, construction, and for the first time after the maintenance, now have confidence enough to be called an experienced programmer yourself.

Software engineering is not intended for everyone, but everyone should learn to solve problems with their computers. It should do so if learn that you write a simple program. If you can learn to use a common software services should do so. If you can learn how to use open source software, you will be wearing a lot of power.

Problem evolved, software engineering also will evolve. The future of this profession, it is not necessary to study the general computer user for five years is to be able to use their own computer. With easy-to-use tool, users will be able to solve simple problems on their own. After that, software engineers, to create a better tool to solve the larger known problem, will do our best in order to prevent an unknown problem.

thank you for reading.