What Is The Future Of Software Development Job Market?
1. What is software development? Software development is the process of developing software through successive phases in an orderly way. This process includes not only the actual writing of code but also the preparation of requirements and objectives, the design of what is to be coded, and confirmation that what is developed has met objectives. Before systems development methods came into being, the development of new systems or products was often carried out by using the experienceand intuition of management and technical personnel. However, the complexityof modern systems and computer products long ago made the need clear forsome kind of orderly development process. Typical phases of software development: 1) Identification of required software 2) Analysis of the software requirements 3) Detailed specification of the software requirements 4) Software design 7) Maintenance In general, the development of commercial software is usually a result of demand in the marketplace, while enterprise software developmentgenerally arises from a need or a problem within the enterprise environment. Related Links: Rafeeq Ur Rehman and Christopher Paul's Introduction to software development goes into more detail about the software development process. The software development process is almost invariably guided bysome systematic software development method (SDM). Referred to by a numberof terms, including process models, development guidelines,and The existing system is evaluated and its deficiencies identified, usually through interviewing system users and support personnel. The new system requirements are defined. In particular, the deficiencies in the existing system must be addressed with specific proposals for improvement. The proposed system is designed. Plans are laid out concerning the physical construction, hardware, operating systems, programming, communications, and security issues. The new system is developed. The new components and programs must be obtained and installed. Users of the system must be trained in its use, and all aspects of performance must be tested. If necessary, adjustments must be made at this stage. The system is put into use. This can be done in various ways. The new system can phased in, according to application or location, andthe old system gradually replaced. In some cases, it may be more cost-effective to shut down the old system and implement the new system all at once. Once the new system is up and running for awhile, it should be exhaustively evaluated. Maintenance must be kept up rigorously at all times.Users of the system should be kept up-to-date concerning the latest modificationsand procedures. The systems development life cycle model was developed as a structured approach to information system development that guides all the processesinvolved from an initial feasibility study through to maintenance of thefinished application. SDLC models take a variety of approaches to development. · The waterfall model: This is the classic SDLC model, with a linear and sequential method that has goals for each developmentphase. The waterfall model simplifies task scheduling, because there areno iterative or overlapping steps. One drawback of the waterfall is thatit does not allow for much revision. · Rapid application development (RAD): This modelis based on the concept that better products can be developed more quicklyby: using workshops or focus groups to gather system requirements; prototyping and reiterative testing of designs; rigid adherence to schedule; and less formality of team communications such as reviews. · Joint application development (JAD): This modelinvolves the client or end user in the design and development of an application,through a series of collaborative workshops called · The prototyping model: In this model, a prototype (an early approximation of a final system or product) is built, tested,and then reworked as necessary until an acceptable prototype is finallyachieved from which the complete system or product can now be developed. · Synchronize-and-stabilize: This model involves teams working in parallel on individual application modules, frequently synchronizing their code with that of other teams and stabilizing code frequently throughout the development process. · The spiral model: This model of development combines the features of the prototyping model and the waterfall model. The spiral model is favored for large, expensive, and complicated projects. 3. How has the open source development process influenced software development in general? Open source software is developed collaboratively; source code is freely available for use and modification. The open source movement arose because some developers came to believe that competition amongst vendors leads to inferior products and that the best approach to development isa collaborative one. The OSI (Open Source Initiative) is an industry body that certifies products as open source if they conform to a number of rules: · The source code must be made available (so that the receiving party will be able to improve or modify it) · The license can require improved versions of the software to carry a different name or version from the original software Despite its emphasis on the collaborative process, the biggest influence that open source has had on software development in general may be through competition: by competing with proprietary software products, open source products force vendors to work that much harder to hold their market share in the face of viable open source alternatives. 4. What are some generally accepted best practices common to all or most development models? Here's a collection of some of the top tips from a variety of industry sources: · Make sure that you've chosen a systems development life cycle model that suits your project, because every one of the processesinvolved depends on the model. That said, however, implementing any modelis better than none -- much of the success of a project depends upon howscrupulously the model is adhered to. · Reuse software components when it's appropriate, but don't use code that doesn't work perfectly for its intended purpose just because you have it on hand. · Be very thorough in gathering requirements, ensuring that all parties agree on what they are -- and make sure you document them. · Don't promise the moon, if you can't deliver it. Avoidletting someone who isn't fully informed negotiate with the client. · Make sure that the architecture you've chosen is appropriate for the application you're building. To retain perspective, you might want to look at the smaller picture and plan the architecture incrementally. · Change is part of life, including software development. You have to accept that various things -- requirements, for example -- are likely to change throughout the life of the project. Keep control of them, but not too rigidly. · Ensure accountability: make sure that deadlines are clear and that people have to report on whether they made them, and explain why not if they don't. · Test exhaustively -- there's no point in doing a cursory run through only to have an application fail when you run it for the client. · After the project is completed, conduct a thorough post-mortem, with everyone involved. You'll see what worked well and what should havebeen differently, and your future projects will benefit. Related Links: 6. Given a particular process model, is there a set of tools(a development environment) to support it? In general, a process model usually begins as a philosophy of "who does what development when" rather than a rigid methodology complete with tools. For example, rapid application development (RAD) is an approach that can make use of existing development tools. In general, tools for supporting all or part of a process model tend to arrive later, if at all. Historically, development tools have focused on the code-building, code archive management, documentation, testing, and packaging parts ofthe process, sometimes offered as a suite. Such a suite is generally knownas an integrated development environment (IDE). A set of tools for managing or supporting a development project is generally known as a computer-assisted software environment (CASE). A number of companies offer products that support early stages of development such as requirements gathering, design prototyping, and data modeling. A number of these provide tools that support data modeling with the Unified Modeling Language. Overall, there is a trend toward providing all or most of the tools for a development project in a single product or related set of products. Today, the main code-building development environments or program suites come from Microsoft with its Visual Studio and Visual Studio .NET, providing support for Visual Basic, Visual C#, Visual C++, and Visual J#; Sun Microsystems with its Java 2 Enterprise Environment; and numerous software vendors such as Borland who repackage these environments with some value-added features. Recently, almost all providers of software development environments have added features that enable the software to be used on the Web. Related Links: 7. How do you choose the "right" programming language for your project? For most projects, the right language is easy to choose. Your company may have standardized on a particular development environment and language (and you may have been hired because you were already familiar with the language). Or you may be updating or enhancing an existing program; it's almost always best to use the same language the existing program is written in. In some cases, however, someone will need to select the best (or, since the best may be somewhat arguable, at least an appropriate language). In somecases, you or your team of developers may need to know several languages fordifferent purposes. General truisms about programming languages are that: Perl or a similar script language is most suitable for small tasks and sometimes acting as a program that goes between other, largerprograms. Visual Basic is most suitable for relatively novice programmers and relatively simple programs. Java, C++, or comparable languages like Python and Tcl aremost suitable for larger applications using object orientation as a designmodel. C is most suitable for programs where efficiency and performance are the primary concern. The appropriate assembler language is most suitable where the program is relatively short and high performance is critical. Where constraints permit, some programmers may favor one object-oriented language over another (for example, Java, C++, Python, or Tcl). A programmer with skills in C is likely to prefer C++, which combines the proceduraland other concepts and syntax of C with object-oriented concepts.