📜 ⬆️ ⬇️

Do not confuse software development and programming.

Every software developer can program, but not every programmer can develop software.



Most can easily learn to cook, but when you need to feed a large number of people, we hire a cook.

Perhaps someone likes to say more than a “developer”, but a software engineer , because an engineer sounds proudly! Or not? Fortunately, this article is not about terms. If you don’t like my term, substitute your: “software author”, “software master” ... and even “application creator”!

Speaking of " software developer ", I mean the person for whom writing quality software is a profession . A person who uses scientific approaches and statistics in his work and considers his occupation to be more than just making money.

To become a developer, knowing how to program is not enough.
')
You can teach anyone to program - it's easy. Almost anyone can write simple programs that work for specific people on specific machines , but no one guarantees that the same programs will work in other conditions.

I like this analogy: for the sake of their own entertainment, everyone can sing in the shower, but you don’t put tracks with recordings of this singing at a party - you turn to works of professional musicians.

Want more analogies? You are welcome:


The main task of this text is to inform that the creation of simple programs is very different from software development .

Transferred to Alconost

Programming in the simplest representation is the transmission of instructions to a computer to perform certain actions with some input data for obtaining some output .

Software development is the design, writing, testing and support of computer programs to solve problems for many users; it is the creation of robust, secure solutions that will stand the test of time and cope with some previously unknown tasks in an area close to the obvious initial problems.

Software developers thoroughly study the tasks being solved, fully understand how their proposed solutions work, how these solutions are limited and how they are characterized in terms of data confidentiality and security.

And if someone does not understand the problem, he should not be allowed to develop a solution for it.

Solution-oriented approach


Software developers do not consider their work simply to write programs - they argue in terms of meeting needs and solving problems . And this is important, because it is not necessary to write a program for any task: in some cases it is enough to use an existing program or combine several programs. And acting on preemption, it is sometimes possible to completely get rid of the need to solve this problem: the development of good programs often involves planning, which allows you to prevent the appearance of some problems and related problems in the future.
"Clever solve problems - geniuses prevent them."
- Albert Einstein

For complex tasks, you have to write several programs. In some cases, programs that work in parallel are needed, in others, they are launched in series. Sometimes to solve a problem it is enough to train users.

Before writing code, the developer will ask the following questions:


Quality code


In quality programs, the code is clear and easy to read, they can be easily expanded, they interact perfectly with other software, and their support does not turn into a nightmare. The quality of the code should not fall victim to compromises; the use of quick, but careless decisions due to a deadline, excessive excitement, agitation, irritability, etc., is unacceptable.

One of the most important aspects of software development is designing from scratch a product that is ready for expansion. Modification of applications after their release - a fact that you need to accept. Users will need more and more functionality, they will want to use the application was even easier.

The application component is usually not very useful in itself. The benefit of the software begins to bring in when several components interact with each other, exchange data and work together on the task of presenting data and interfaces to users.
And with this in mind, you need to develop programs. What messages does the software take? What events are tracking? What messages does it give? How is authentication and authorization during data transfer?

Another important aspect of writing good programs is understandable code, and not at all the number of tests or the number in the code coverage report. Everything is simple here. Think: can others read the code? Or - which is even better - can you, having written the code today, understand it after a few weeks?
"In computer technology, there are only two complex tasks: invalidating the cache and inventing names."
- Phil Carlton

Code readability is much more important than it might seem. Unfortunately, there are no convenient indicators for evaluating this characteristic. It will be useful to remember the proven programming techniques and patterns, but often this is not enough. A good developer with experience just develops intuition, which tells how readable the code is. Here is a good comparison: to write concise text, it is not enough to have a large vocabulary.
"I did not have time to write a letter shorter."
- Blaise Pascal

With any program at some point, something will definitely go wrong. The main feature of good software is the ability to easily fix a program that has already been released. If the program generates an error during operation, there must be a clear message about it, which will be somewhere centrally recorded - so that errors can be tracked. When reporting a new error, the person responsible for fixing it should be able to debug, connect to the system at any time and get information about the execution context, and also check the expected behavior of any component of the system.



Work environment and testing


When a developer writes a program, he checks that it works in many different environments, on machines with different resources and in different time zones. The software should work on screens of various sizes and orientations, in conditions of limited memory and low computational power.

For example, if the software is written for a web browser, it should work on all major browsers. When creating classic software, it should in most cases work on Mac and Windows platforms. If the application being created depends on receiving data, it should continue to work even if the data connection is slow or even for some time completely absent.

To write a software component, developers are trying to think through all possible scenarios that you can imagine, and plan to check them. They start with what is called the default script (or “happy road” - from the English “happy path”), in which nothing unexpected happens, and all possible problems along this path — what is important — are documented and a test is planned for each. Some developers start by writing “test cases” that mimic such scenarios. Then they write the functional code that passes these test cases.

Developers need to understand the requirements for software, but they are often ambiguous and incomplete. The developer’s skill is not shown in how he writes a solution, but rather in what solution he deems necessary.

Cost and effectiveness


In most cases, the developer can solve the problem quickly. If it seems to you that it is expensive to hire experienced programmers, think about it: the more experience a programmer has, the faster he will create a functional, accurate, reliable solution that will be easy to maintain. And this is a lower cost in the long term.

In addition, the “cost of work” of the program should also be taken into account: any software consumes computer resources, but they are not free. The developer will write an effective program that will not use PC resources unnecessarily. To do this, it can apply, for example, caching frequently used data - and this is just one of probably thousands of tools and methods that help improve the efficiency and speed of the program.

Perhaps a novice programmer will give a cheap solution, but working with this solution can cost you and your customers a lot more than if you immediately hired an experienced developer who primarily seeks to find an effective solution.

The convenience of use


Good software is developed taking into account the interaction of a computer with a user (UX), and this is a rather extensive topic on which a lot of research has been done and a lot of results have been obtained. The more conclusions from these studies are taken into account, the better the software will be in use.

Let me give you a couple of examples so that you can feel why this is important:


Reliability, safety and security


Perhaps the most important aspect that distinguishes professional developers from amateur programmers is that professionals know that they are responsible for creating secure, secure solutions.

The software component must be resistant to “bad” data, incorrect states and incorrect interaction. To achieve such sustainability is VERY difficult - that is why we constantly read about how someone died due to a software error.

Users will enter "bad" and incorrect data in the software. Someone will do it intentionally - in order to hack the software and get to the resources that this software represents. The employee, allegedly responsible for the security breach of the American credit bureau Equifax, which was used by the attackers, was accused of not having done his job: he had to ensure resistance to “bad” and malicious data in all software openly published on behalf of the company .

The task of ensuring security is associated not only with “bad” and malicious data, but also with normal ones. For example, if a user forgot a password, how many times can he try to enter it? Will it be blocked after the input attempts have been exhausted? What if someone deliberately tries to block a user? Should users be able to send a password over an unencrypted connection? What if someone tries to log in from an unusual place? What to do if there is a suspicion that the login is automatic?

How to protect your users from cross-site scripts and cross-site request forgery, middleware attackers and simple social phishing? How to develop a backup operation strategy in case of a DDoS attack on servers? These issues are only a small fraction of the many questions that need to be considered when designing.

Protected programs store confidential information not in the form of plain text, but as one-sidedly encrypted data with hard-to-break algorithms. This is backup protection in case of hacking software and unauthorized access to data: hackers will get encrypted data, which in most cases will be useless.

An application can go into an error state, and it will need to be fixed: even in the best programs, unexpected problems arise. If you do not take this into account when planning, you are not a professional developer, but simply an encoder with unsafe programs.

Software defects are difficult to identify. Our mind is limited in its ability to predict and prevent known defects. Therefore, software developers appreciate good tools that help write the correct code and create secure software.

Tools used


Obviously, we need more tools and we need better tools. In software development, tools are important, but they are often underestimated.

Imagine for a moment that we would still need to use FTP for deployment! Imagine network debugging and performance issues without browser development tools! Imagine how the effectiveness of writing JavaScript code will fall if you do not use ESLint and Prettier!
If for some reason you are forced to leave only one plugin for the code editor in JavaScript development, choose ESLint.

A great addition would be any tool that shortens the feedback loop when writing code. The thought of Bret Victor about inventing instant visual representations of what we create opened my eyes. Using and improving tools is one way to get closer to this bright future. If you have not seen Bret's performance, be sure to watch it.

When I find a great tool, I only regret not using it before. The better the tool, the better programs are written with its help. Search, use and appreciate them, and if you can - and improve.

The choice of language is important. Type safety is important. The best thing that happened with JavaScript is TypeScript (and Flow). Static code analysis is more important than you think. If you do not use it, you are, in essence, vulnerable to possible unknown problems in the future. Do not write code without a static type control system. If there is no static type control in the selected language, you need to either change the language or find a transcompiler for it: today they are already smart enough to work on comments in the code, and it seems to me that for languages ​​that do not support static type checking, transcompilers will soon become standard tool.

Becoming a software developer


It’s impossible to learn how to develop software in a couple of months, half a year or even a year. The programming courses of you will not make a developer. I started to study 20 years ago - and I continue to study today. With enough confidence, I was able to call myself an experienced programmer only after ten years of training, during which I had to design, build and provide support for applications used by thousands of users.

Software development is not for everyone, but everyone must learn to solve their own problems with the help of computers. If you can learn how to write simple programs, do it. If you can learn how to use uncomplicated software services, do it. If you can learn how to use open source software, powerful tools will be in your hands.

Tasks change over time, so software development is also changing. The task of this profession in the future is to enable ordinary people to use computers without spending half a dozen years studying. It is necessary to give users simple and understandable tools with the help of which they will independently solve simple tasks. And then the developers will move on to creating better tools, solving larger-scale known tasks, and will do everything possible to prevent the appearance of unknown problems.


About the translator

The article is translated in Alconost.

Alconost is engaged in the localization of games , applications and sites in 68 languages. Language translators, linguistic testing, cloud platform with API, continuous localization, 24/7 project managers, any formats of string resources.

We also make advertising and training videos - for websites selling, image, advertising, training, teasers, expliners, trailers for Google Play and the App Store.

Read more: https://alconost.com

Source: https://habr.com/ru/post/341304/


All Articles