1) Software is complex
Even small programs consist of tens of thousands of lines.Large software, such as operating systems, consists of millions of lines.The only thing that determines the complexity of a software is not the number of instructions. Interaction between commands also increases the complexity of the software.A 100,000 line program has 10 times the code of a 10,000 line program.Since 10 times more codes are activated with 10 times more codes, the complexity is close to 100 times.
To reduce the complexity, the codes can be divided into independent pieces.
These code snippets hide their complexity from other code snippets and provide simple interfaces to them. This technique is one of the most important advantages of object-oriented programming.Despite this, your software grows faster than the size of the complexity.
2-)Software is Abstract
We can not touch software physically.The software will have to revive what we are doing in our mind.It is not easy to envisage all the possible inputs, their different combinations and the operations that the application will perform on these inputs.In this respect the software is similar in chess.In simple terms, chess is about moving 32 stones on certain squares according to certain rules. It’s very easy to learn to play just one stone (independent of the others). But it is much more difficult to play with other stones, considering 4-5 moves afterwards.
The software is written to meet the needs of users. Software developers often do not know the needs of users. Users and developers work together to determine the requirements of the software.When a part of the software is finished, the product becomes less abstract for users, and users enter new expectations.So the requirements are changed. Users can not be sure what they want before the system is finished. Therefore, it is not possible to determine precisely the requirements before the writing begins.
4-)Technology fast develop
Technologies used for software development change faster than other technologies.. Operating systems, hardware, frameworks used (Java, .NET) may change while the software is being developed.
5-)Best practices do not …
The majority of software development technologies are not mature enough to have been tested for a long time, with precise accuracy, reduced errors and improved product quality when applied.
: In case of event based programming, all the programmer has to do is write a code for event manager. If you do not pay particular attention, a program written in this way becomes a huge code block, which is difficult to manage / change over time. This problem is called “Magic Pushbutton”. It has taken a long time for programmers to recognize this problem and develop better methods.
Object-oriented programming has begun to be used in the 1980s. But the “Design Patterns” book, which proposes solutions to problems such as “Magic Pushbutton”, came out fifteen years later in 1995. Fifteen years is a long time for IT.
6.-)Software Technology is a very wide field
The software can not exist on its own. If you write everything from scratch, it is preferable to use Java, .NET, or other technologies developed by others. When these technologies are thought to change constantly, it is not possible to specialize in all the technologies that a programmer can use.
7.-)Having experience in the technology used is difficult
Software technology changes very quickly. Whenever you want to use the latest technology continuously, the knowledge learned 3-4 years ago and gained experience will not work today. Usually the required information is learned during the development of the software.
Information such as software development methods that change more slowly over time is more important.
8.-)Software development is “research”
Customers are not usually software experts. They do not know what is possible, what is not possible. That is why program developers need to work with customers to determine their needs.While software is being developed, it is necessary to learn new technologies, new software tools when they are used. Since new technologies are not adequately tested, it is necessary to conduct research in order to arrive from the top of them when errors are found.These problems usually occur in beta releases or early releases. (Consider Windows 3.1 or earlier versions of Internet Explorer 3.0 IN)
9-)Automated repetitive operations
With software development, repetitive operations are much more automated than other technologies. Duplicate operations are usually done by IDE or other tools. Someone else’s solutions can be easily used through libraries or components.
10.-)Development is actually design
It can not be separated into independent sections such as software development, design and code writing. The design can be changed while the code is being written. Design continues until the project is finished.
11.-)Change is considered easy
Requirements can not be changed during construction, in the middle of work, or after construction is finished. If it is changed, it is usually necessary to demolish the construction and rebuild it. Changing a second floor is usually not expected after a ten-story building is over.This is not the case with the software. The parts of the software can easily be modified to fix errors or meet changing requirements. If the software is not designed to facilitate these changes, changing the software may be more difficult than rewriting.
12-)The change is inevitable
The first design is not perfect. Requirements may change after the software has been developed, or after development has been completed. In 8000 large projects examined in 1995, it was seen that 40% of the requirements came after project coding.