{"id":1347,"date":"2022-11-04T06:33:40","date_gmt":"2022-11-04T06:33:40","guid":{"rendered":"https:\/\/emsdigitalmedia.com.np\/?p=1347"},"modified":"2022-11-04T06:33:40","modified_gmt":"2022-11-04T06:33:40","slug":"what-is-software-development","status":"publish","type":"post","link":"https:\/\/emsdigitalmedia.com.np\/?p=1347","title":{"rendered":"What is Software Development"},"content":{"rendered":"<p>Software development is the process of creating a piece of software designed to perform a particular task. It encompasses the entire\u00a0software development life cycle. This resource is designed to give you an overview understanding of what software development is and the most important components, terms, and trends in software development today.<\/p>\n<p>If you want to delve deeper into any of the software development sub-topics covered here you\u2019ll find links to dedicated blogs so you can explore further. We hope you find this a great starting point for learning more about software development and we\u2019d love to hear from you\u00a0if you think we can improve it further!<\/p>\n<h2><span id=\"What_is_software\" class=\"ez-toc-section\"><\/span>What is software?<\/h2>\n<p>Software is a computer program \u2013 a structured compilation of commands computers and other hardware understand and act on because they are written in computer programming languages consisting of binary code. Software is developed to complete a specific task like automating a previously manual process to make it more efficient, organizing and processing information (data) in a certain way, or providing entertainment, like a video game.<\/p>\n<h2><span id=\"Software_has_a_front_end_and_a_back_end\" class=\"ez-toc-section\"><\/span>The software has a front end and a back end<\/h2>\n<p>Most software has a front end and a back end. The front end is the part users see and interact with. It is considered the \u2018presentation layer. The back end is the plumbing behind the scenes that supports the front end and allows it to work the way it does. It is the \u2018data access layer\u2019 or \u2018infrastructure layer\u2019.<\/p>\n<p>Front-end and back-end development involve different skill sets and technologies and software developers are usually classified as front-end, back end or full-stack developers. Full-stack developers have the skills and experience to work on both the front and back ends of software being developed.<\/p>\n<h2>What\u2019s the difference between software development and software engineering?<\/h2>\n<p>The terms software development and software engineering are often used interchangeably. But is there a difference? Some might argue differently but, technically, there isn\u2019t any officially defined difference.<\/p>\n<p>The Merriam-Webster dictionary defines software engineering as:<\/p>\n<p><em>\u201cA branch of computer science that deals with the design, implementation, and maintenance of complex computer programs.\u201d<\/em><\/p>\n<p>But the dictionary does not define software development, suggesting software engineering instead.<\/p>\n<p>The Cambridge dictionary defines both software development and software engineering in the same way:<\/p>\n<p><em>\u201cthe activity of creating computer programs\u201d<\/em><\/p>\n<h3><span id=\"Is_there_a_difference_between_software_development_and_computer_programming_or_coding\" class=\"ez-toc-section\"><\/span>Is there a difference between software development and computer programming or coding?<\/h3>\n<p>Computer programming and coding are other terms sometimes practically used as similes for software development. The distinction that could be made is software development refers specifically to the end-to-end process of creating a software product. Computer programming and coding is part of that process. A good analogy would be the distinction between \u2018writing\u2019 and \u2018writing a book\u2019.<\/p>\n<h2><span id=\"The_different_types_of_software\" class=\"ez-toc-section\"><\/span>The different types of software<\/h2>\n<p>There are many different types of software and the broad category can be broken down into different groupings, like use cases or technical qualities. At a macro level we can break software down into four main groups:<\/p>\n<ol>\n<li>Application software<\/li>\n<li>Utility software<\/li>\n<li>System software<\/li>\n<li>Embedded software<\/li>\n<\/ol>\n<h3><span id=\"Application_software\" class=\"ez-toc-section\"><\/span>Application software<\/h3>\n<p>Application software is the most familiar category and refers to software that runs on a computer or mobile device. A computer game, Microsoft Office, accountancy software, Slack, Skype, Google Maps, or a web browser like Chrome are all examples of application software.<\/p>\n<p>Application software can be native \u2013 designed to run on either a particular operating system like Windows or macOS (desktop and laptop) and Android or iOS (mobile devices).<\/p>\n<p>Or it can be cross-platform. Cross-platform application software runs on web browsers and the process of creating it is\u00a0web development. Some cross-platform applications, usually mobile apps, are referred to as \u2018hybrid\u2019 because they run on a browser but are deployed in a native container. The approach gives cross-platform apps a \u2018native\u2019 feel and can allow for better integration with the device\u2019s hardware.<\/p>\n<p>Application software is usually designed to help its users complete a particular task, including entertainment. The four main sub-categories of application software are:<\/p>\n<h4><span id=\"Custom_software\" class=\"ez-toc-section\"><\/span>Custom software<\/h4>\n<p>Custom software\u00a0is developed as a tailor-made solution to the needs of a particular user. For example, a solar plant operator might want to develop software that will track and record yields across its installations. It has to be custom developed to the unique requirements of the specific conditions and commercial priorities.<\/p>\n<p>Custom software is usually developed to provide a competitive advantage in a way a one-size-fits-all commercial software can\u2019t.<\/p>\n<h4><span id=\"Commercial_software\" class=\"ez-toc-section\"><\/span>Commercial software<\/h4>\n<p>Commercial software is developed as a solution to a particular market or consumer need and designed to be resold to a theoretically unlimited number of users with the same need. Video games are a good example of commercial software, as are mobile apps and SaaS products like accountancy or booking software designed for restaurants, hotels, or sports facilities.<\/p>\n<p>Sometimes commercial software is also designed to be customizable to specific customer needs. Hybrid customizable commercial software usually offers a standard version of the product designed to fit the most general needs. Customers who want to customize that to their requirements then pay for the additional development work in addition to the usual license fee. Salesforce is one of the best-known examples of commercial software that can be customized.<\/p>\n<h4><span id=\"Open_source_application_software\" class=\"ez-toc-section\"><\/span>Open-source application software<\/h4>\n<p>Open source software is developed and released by the copyright holder under a license that gives users the right to use, analyze, customize, develop on, and distribute it to anyone for any purpose. The source code of open-source software is often developed collaboratively by a public community of developers.<\/p>\n<p>Improvements suggested by the open source community are integrated into the software by consensus decision. WordPress, the Mozilla Firefox browser, and VLC Media are all popular examples of open-source application software. Other kinds of software, like operating systems and programming languages, frameworks, and software development tools can also be open source.<\/p>\n<p>The term open source was introduced by\u00a0The Open Source Initiative\u00a0(OSI) in the late 1990s.<\/p>\n<p>\u2018Free source\u2019 is a term sometimes used for open-source software distributed for free without a license fee.<\/p>\n<h4><span id=\"Cloud_native_software\" class=\"ez-toc-section\"><\/span>Cloud-native software<\/h4>\n<p>Cloud-native software development means building software in a way that is specifically customized to run on a cloud computing infrastructure, including public, private, and hybrid clouds.<\/p>\n<p>Cloud-native apps <a href=\"https:\/\/www.redhat.com\/en\/topics\/cloud-native-apps\" target=\"_blank\" rel=\"noopener\">consist of<\/a>\u00a0<em>\u201ca collection of small, independent, and loosely coupled services\u201d<\/em>, referred to as\u00a0microservices.<\/p>\n<p>Cloud-native software can either be developed as \u2018cloud agnostic\u2019, which means it can run on any kind of cloud, public or private, with minimum reconfiguration or as native to a particular cloud computing platform like AWS, Microsoft Azure or Google Cloud Platform (GCP).<\/p>\n<h3><span id=\"System_software\" class=\"ez-toc-section\"><\/span>System software<\/h3>\n<p>System software is an umbrella term for software designed to start and run computer hardware and allow application software to run on it. It acts as a facilitator for the optimal interaction between hardware and application software running on it.<\/p>\n<p>There are several different categories of system software:<\/p>\n<h4><span id=\"Operating_system_OS\" class=\"ez-toc-section\"><\/span>Operating system (OS)<\/h4>\n<p>A device\u2019s operating system is probably the kind of system software we are most familiar with. It is a kind of software application that sits between a computer\u2019s hardware and the application software that is installed on it. Applications then make use of the hardware by sending requests for particular services, like processing or visual representation, go through the OS, communicating with it by API.<\/p>\n<p>Users of the device an OS is installed use it to communicate with the hardware without having to know a programming language. For example, when you turn off your laptop\u2019s power by selecting \u2018shut down\u2019 via Windows or macOS.<\/p>\n<p>The operating systems we are most familiar with (Windows, macOS, Android, and iOS) as users of mainstream tech like laptops, smartphones, and tablets use a graphical UI (GUI) user interface. Linux, popular with software developers, has a command-line interface (CLI), which means you don\u2019t tap a button with a cursor but type in a command.<\/p>\n<p>The most common operating systems in 2021 (used by almost\u00a0<a href=\"https:\/\/www.statista.com\/statistics\/268237\/global-market-share-held-by-operating-systems-since-2009\/\" target=\"_blank\" rel=\"noopener\">92%<\/a>\u00a0of all devices) are:<\/p>\n<ul>\n<li>Windows<\/li>\n<li>macOS<\/li>\n<li>Linux<\/li>\n<li>Android<\/li>\n<li>iOS<\/li>\n<\/ul>\n<h4><span id=\"Utility_Software\" class=\"ez-toc-section\"><\/span>Utility Software<\/h4>\n<p>Utility software is also designed to perform particular tasks but in the background and related to hardware performance and security. Examples of utility software are antivirus programs, hard disk optimization tools, and device backup.<\/p>\n<h4><span id=\"Drivers\" class=\"ez-toc-section\"><\/span>Drivers<\/h4>\n<p>Device drivers are a kind of software extension, or component, that facilitates communication between an operating system and a device. If an application needs to access data from the device it is running on the driver communicates that request to the hardware, which then returns the requested data to the operating system which, in turn, passes it over to the application.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-19133 lazyloaded\" src=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/Diagram-of-how-driver-software-extensions-site-between-a-device-and-operating-system.jpg\" sizes=\"(max-width: 313px) 100vw, 313px\" srcset=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/Diagram-of-how-driver-software-extensions-site-between-a-device-and-operating-system.jpg 313w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/Diagram-of-how-driver-software-extensions-site-between-a-device-and-operating-system-300x162.jpg 300w\" alt=\"Diagram of how driver software extensions site between a device and operating system\" width=\"313\" height=\"169\" data-src=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/Diagram-of-how-driver-software-extensions-site-between-a-device-and-operating-system.jpg\" data-srcset=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/Diagram-of-how-driver-software-extensions-site-between-a-device-and-operating-system.jpg 313w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/Diagram-of-how-driver-software-extensions-site-between-a-device-and-operating-system-300x162.jpg 300w\" data-sizes=\"(max-width: 313px) 100vw, 313px\" \/><\/p>\n<p><strong>Source:<\/strong>\u00a0<a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-hardware\/drivers\/gettingstarted\/what-is-a-driver-\" target=\"_blank\" rel=\"noopener\"><em>Microsoft<\/em><\/a><\/p>\n<h4><span id=\"Middleware\" class=\"ez-toc-section\"><\/span>Middleware<\/h4>\n<p>Middleware is a category of software that augments the services and capabilities the operating system provides and is often used to handle things like API management, data management, authentication, messaging, and more advanced application services.<\/p>\n<p>RedHat\u00a0<a href=\"https:\/\/www.redhat.com\/en\/topics\/middleware\/what-is-middleware\" target=\"_blank\" rel=\"noopener\">defines<\/a> the role of middleware succinctly:<\/p>\n<p><em>\u201cMiddleware helps developers build applications more efficiently. It acts like the connective tissue between applications, data, and users\u201d.<\/em><\/p>\n<p>Middleware has become increasingly important with the rise of the DevOps software development methodology and cloud-native development because it helps manage the complexity of applications deployed across hybrid and multi-cloud infrastructures.<\/p>\n<p>As part of a DevOps approach to application software development, middleware is used to ensure software developed in one environment works in the same way when run in another.<\/p>\n<p><a href=\"http:\/\/www.linfo.org\/windowing_system.html\" target=\"_blank\" rel=\"noopener\">Windowing systems<\/a>\u00a0and\u00a0<a href=\"https:\/\/www.ibm.com\/docs\/en\/aix\/7.2?topic=administration-operating-system-shells\" target=\"_blank\" rel=\"noopener\">operating system shells<\/a>\u00a0are also examples of narrower system software categories.<\/p>\n<h3><span id=\"Embedded_software\" class=\"ez-toc-section\"><\/span>Embedded software<\/h3>\n<p>Embedded software (also referred to as\u00a0<em>firmware<\/em>) is a kind of software designed to run on hardware that wouldn\u2019t normally be defined as a computer. For example, the software in a car or a robot vacuum cleaner is an example of embedded software. As is a software developed for robotics like those used to automate production lines or IoT (internet of things) devices like smart doorbells or virtual assistants (Alexa, Apple HomePod, Google Assistant, etc.).<\/p>\n<p>Embedded software engineers need\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Embedded_software\" target=\"_blank\" rel=\"noopener\">specific skills and knowledge<\/a> application software specialists often don\u2019t like being able to read schematics and component data sheets, communication protocols between processors and other components, the ability to convert between decimal, hexadecimal and binary, and use bit manipulation.<\/p>\n<p>Developing embedded software involves the use of a cross-compiler that converts code developed on a computer into a format executable on the target device. Debugging is also different and requires the use of an in-circuit emulator and specialist hardware.<\/p>\n<h3><span id=\"Artificial_Intelligence_AI\" class=\"ez-toc-section\"><\/span>Artificial Intelligence (AI)<\/h3>\n<p>Artificial intelligence algorithms are a kind of software that is usually a component of a larger piece of software that could be application software, system software or even embedded software.<\/p>\n<p>AI software is an algorithm, or collection of algorithms, that are sets of rules, or step-by-step procedures for calculations. The algorithm applies the rules it has been given to a data set, which allows it to learn on its own.<\/p>\n<h4><span id=\"Algorithm_example\" class=\"ez-toc-section\"><\/span>Algorithm example<\/h4>\n<p>For example, a simple algorithm to find the largest among three different numbers would look like:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Step 1: Start\r\nStep 2: Declare variables a,b and c.\r\nStep 3: Read variables a,b and c.\r\nStep 4: If a &gt; b\r\n           If a &gt; c\r\n              Display a is the largest number.\r\n           Else\r\n              Display c is the largest number.\r\n        Else\r\n           If b &gt; c\r\n              Display b is the largest number.\r\n           Else\r\n              Display c is the greatest number.  \r\nStep 5: Stop\r\n<\/pre>\n<p>Machine Learning and Deep Learning are the two types of AI most used in software development.<\/p>\n<h4><span id=\"Machine_learning\" class=\"ez-toc-section\"><\/span>Machine learning<\/h4>\n<p>Machine learning algorithms parse data, isolate patterns that exist, \u2018learn\u2019 from these and decide on or make a prediction about something in reality connected to the database learned from or similar data. ML algos are based on decision tree learning, inductive logic programming, clustering, reinforcement learning, Bayesian networks, and other processes that resemble some of the ways we learn as humans.<\/p>\n<h4><span id=\"Deep_learning\" class=\"ez-toc-section\"><\/span>Deep learning<\/h4>\n<p>Deep learning is an approach to AI that is more like how human intelligence works. Neural networks break the decision-making process down into chunks and pass it through a system of checks and balances. If we see a Stop sign partially obscured by a branch, we may not see the whole sign but will be confident it is a stop sign because we can see what shape, size, and color it is and part of the word written.<\/p>\n<p>A deep learning algorithm assigns weightings to the information it does have in the context of the database it has learned from and reaches a \u2018probability vector\u2019, or, in other words, an educated guess.<\/p>\n<h2><span id=\"Software_development_lifecycle\" class=\"ez-toc-section\"><\/span>Software development lifecycle<\/h2>\n<p>Software is created through a development life cycle that typically includes phases of ideation, concept validation, specifying requirements, design, prototyping, coding (programming), documentation, testing, bug fixing, increasingly operations \u2013 deployment into the live environment and making sure the software runs as expected (DevOps), maintenance and the release of new iterations. The number and how the different phases are named vary between development methodologies and frameworks.<\/p>\n<p>&nbsp;<\/p>\n<p><strong><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-19346 lazyloaded\" src=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1.png\" sizes=\"(max-width: 743px) 100vw, 743px\" srcset=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1.png 743w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1-300x98.png 300w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1-650x213.png 650w\" alt=\"Phases of the software development life cycle infographic-1\" width=\"743\" height=\"243\" data-src=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1.png\" data-srcset=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1.png 743w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1-300x98.png 300w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/08\/Phases-of-the-software-development-life-cycle-infographic-1-1-650x213.png 650w\" data-sizes=\"(max-width: 743px) 100vw, 743px\" \/><\/strong><\/p>\n<h2><span id=\"Software_development_methodologies_and_frameworks\" class=\"ez-toc-section\"><\/span>Software development methodologies and frameworks<\/h2>\n<p>While every software development process goes through a similar process or life cycle, there are important variations in the methodologies (sometimes also referred to as\u00a0software development life cycle models) used throughout the process.<\/p>\n<p>Software development methodologies can be switched between depending on the qualities and priorities of a project and their perceived strengths and weaknesses in different scenarios. Agile software development, a flexible, iterative approach to the software development lifecycle, is the dominant methodology in 2021 but far from the only approach taken by software development teams and their managers.<\/p>\n<p>Some of the main methodologies and methodology frameworks for software development are:<\/p>\n<ul>\n<li>Waterfall<\/li>\n<li>Agile<\/li>\n<li>Lean<\/li>\n<li>Scrum<\/li>\n<li>Kanban<\/li>\n<li>DevOps<\/li>\n<li>GitOps<\/li>\n<\/ul>\n<h2><span id=\"What_is_programming\" class=\"ez-toc-section\"><\/span>What is programming?<\/h2>\n<p><iframe loading=\"lazy\" class=\"entered litespeed-loaded\" title=\"What is a programming language?\" src=\"https:\/\/www.youtube.com\/embed\/EGQh5SZctaE?start=1&amp;feature=oembed\" width=\"500\" height=\"281\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" data-lazyloaded=\"1\" data-src=\"https:\/\/www.youtube.com\/embed\/EGQh5SZctaE?start=1&amp;feature=oembed\" data-ll-status=\"loaded\" data-mce-fragment=\"1\"><\/iframe><\/p>\n<p>As already covered, software development refers to the whole lifecycle that culminates in a live piece of software doing its job for users and not just the programming or coding phase. But writing the structured computer code that makes up a piece of software is at the core of software development.<\/p>\n<p>Codeacademy\u00a0<a href=\"https:\/\/www.codecademy.com\/resources\/blog\/programming-languages\/\" target=\"_blank\" rel=\"noopener\">explains programming<\/a>\u00a0with a useful metaphor:<\/p>\n<p><em>\u201cPut simply, programming is giving a set of instructions to a computer to execute. If you\u2019ve ever cooked using a recipe before, you can think of yourself as the computer and the recipe\u2019s author as a programmer. The recipe author provides you with a set of instructions that you read and then follow. The more complex the instructions, the more complex the result!\u201d<\/em><\/p>\n<h2><span id=\"Programming_languages\" class=\"ez-toc-section\"><\/span>Programming languages<\/h2>\n<p>Programming, or code, is written in programming language computers that think in <em>binary\u00a0<\/em>can understand. Humans, however, can\u2019t typically understand these strings of 1s and 0s. Programming languages act like a translator which converts binary strings of 1s and 0s into a formatted human can understand and write.<\/p>\n<p>When software developer learns a programming language they can write the structured sets of instructions software consists of. The computer then converts the programming language into the strings of binary it understands and executes on the instructions given.<\/p>\n<h3><span id=\"Low_level_and_high-level_programming_languages\" class=\"ez-toc-section\"><\/span>Low-level and high-level programming languages<\/h3>\n<p>Programming languages are classified as being either low-level or high-level. Low-level languages are closer to binary. That makes them harder for humans to read and write but easier for computers. A software engineer coding in a low-level language can give a computer more precise instructions understood and actioned on faster than if they were written in a high-level language more abstracted from binary.<\/p>\n<p>High-level languages use more words we also use in human-to-human communication, like object, class, request, run, etc., which makes it easier for humans to learn them.<\/p>\n<p>As computers have become more powerful, the difference in the time needed to convert low and high-level languages into binary has been reduced to milliseconds. That means high-level languages can be used in most modern software products without any meaningful impact on performance.<\/p>\n<h2><span id=\"Programming_paradigms\" class=\"ez-toc-section\"><\/span>Programming paradigms<\/h2>\n<p>Programming paradigms classify programming languages based on their features. The main paradigms are:<\/p>\n<h3><span id=\"Object-oriented_programming\" class=\"ez-toc-section\"><\/span>Object-oriented programming<\/h3>\n<p>Groups coded instructions by the part of the state they operate on.<\/p>\n<h3><span id=\"Functional_programming\" class=\"ez-toc-section\"><\/span>Functional programming<\/h3>\n<p>The intended result is declared as the value of a series of function applications.<\/p>\n<h3><span id=\"Declarative_programming\" class=\"ez-toc-section\"><\/span>Declarative programming<\/h3>\n<p>The coder declares the properties required for the desired result but not how it is computed.<\/p>\n<h3><span id=\"Imperative_programming\" class=\"ez-toc-section\"><\/span>Imperative programming<\/h3>\n<p>The coder tells the machine how to alter its state.<\/p>\n<h3><span id=\"Procedural_programming\" class=\"ez-toc-section\"><\/span>Procedural programming<\/h3>\n<p>Coded instructions are grouped by the procedure they form part of.<\/p>\n<h3><span id=\"Logical_programming\" class=\"ez-toc-section\"><\/span>Logical programming<\/h3>\n<p>Written in a way that is very similar to formal logic, expressing facts and rules. Rules are written as clauses and read declaratively as logical implications eg.<\/p>\n<p><em>H if B<sub>1<\/sub>\u00a0and \u2026 and B<sub>n<\/sub>.<\/em><\/p>\n<h3><span id=\"Mathematical_programming\" class=\"ez-toc-section\"><\/span>Mathematical programming<\/h3>\n<p>The desired result is the optimal element from a range of choices based on given criteria. For example, if the optimization problem was arriving at the number 500 by using the numbers 5, 100, 10, 9, 8, 2, and 2, the desired result would be 5\u00d7100 and not 9\u00d72-8\/2*100.<\/p>\n<h3><span id=\"Reactive_programming\" class=\"ez-toc-section\"><\/span>Reactive programming<\/h3>\n<p>The desired result is declared with data streams and change propagation.<\/p>\n<p>The most commonly used contemporary programming languages usually don\u2019t fall neatly into a single paradigm but combine features from several.<\/p>\n<h2><span id=\"Popular_programming_languages\" class=\"ez-toc-section\"><\/span>Popular programming languages<\/h2>\n<p><iframe loading=\"lazy\" class=\"entered litespeed-loaded\" title=\"The Most Popular Programming Languages - 1965\/2020\" src=\"https:\/\/www.youtube.com\/embed\/UNSoPa-XQN0?feature=oembed\" width=\"500\" height=\"375\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\" data-lazyloaded=\"1\" data-src=\"https:\/\/www.youtube.com\/embed\/UNSoPa-XQN0?feature=oembed\" data-ll-status=\"loaded\" data-mce-fragment=\"1\"><\/iframe><\/p>\n<p>As of July 2021, the three most popular programming languages, based on analysis of Google searches for tutorials are Python, Java, and JavaScript, followed by C#, C\/C++, and PHP.<\/p>\n<h3><span id=\"PYPL_PopularitY_of_Programming_Language_Index\" class=\"ez-toc-section\"><\/span>PYPL Popularity of Programming Language Index<\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-19139 lazyloaded\" src=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/PYPL-PopularitY-of-Programming-Language-Index-2021.jpg\" sizes=\"(max-width: 371px) 100vw, 371px\" srcset=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/PYPL-PopularitY-of-Programming-Language-Index-2021.jpg 371w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/PYPL-PopularitY-of-Programming-Language-Index-2021-252x300.jpg 252w\" alt=\"\" width=\"371\" height=\"441\" data-src=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/PYPL-PopularitY-of-Programming-Language-Index-2021.jpg\" data-srcset=\"https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/PYPL-PopularitY-of-Programming-Language-Index-2021.jpg 371w, https:\/\/kruschecompany.com\/wp-content\/uploads\/2021\/07\/PYPL-PopularitY-of-Programming-Language-Index-2021-252x300.jpg 252w\" data-sizes=\"(max-width: 371px) 100vw, 371px\" \/><\/p>\n<p><strong>Source:\u00a0<\/strong><a href=\"https:\/\/pypl.github.io\/PYPL.html\" target=\"_blank\" rel=\"noopener\"><em>Github<\/em><\/a><\/p>\n<h2><span id=\"Frameworks_and_libraries\" class=\"ez-toc-section\"><\/span>Frameworks and libraries<\/h2>\n<p>Frameworks and libraries are reusable pieces of code written by someone else in a particular programming language, like JavaScript. They are designed to make the software development process more efficient by allowing software to be built from reusable components that don\u2019t need to be built from scratch every time.<\/p>\n<p>The terms framework and library are sometimes used interchangeably but there is a difference with libraries offering greater flexibility. A\u00a0<a href=\"https:\/\/www.freecodecamp.org\/news\/the-difference-between-a-framework-and-a-library-bd133054023f\/\" target=\"_blank\" rel=\"noopener\">good analogy<\/a> for the difference between a library and a framework is that the former is like designing an IKEA kitchen. You can create a kitchen of almost any shape or size with a lot of choice between elements and how they can be combined.<\/p>\n<p>A framework is more like building a modular house. You have choices in the architectural layout and design but they are limited. The kitchen and bathrooms, for example, should be positioned close to where the main water pipes run top to bottom and the kitchen should be on the ground floor. You have a limited amount of space to divide up into rooms etc.<\/p>\n<p>More technically defined, the difference between a library and a framework is something called inversion of control. When a software developer uses a library they control the flow of the application \u2013 when and where the library is called.<\/p>\n<p>When a framework is used, it is in charge of the flow and tells the developer where they can plug in their code to customize it. And it calls the code plugged in as it needs.<\/p>\n<h3><span id=\"Popular_libraries_and_frameworks\" class=\"ez-toc-section\"><\/span>Popular libraries and frameworks<\/h3>\n<p>There are a large number of frameworks and libraries, especially for the most popular programming languages. However, a much smaller number are regularly used commercially. As of 2021, some of the most popular frameworks and libraries in use are:<\/p>\n<h4><span id=\"Popular_JavaScript_libraries\" class=\"ez-toc-section\"><\/span>Popular JavaScript libraries<\/h4>\n<p>React.js and React Native (for mobile applications) are by far the most used JavaScript libraries in general use. Others used regularly in commercial software development include Axios, Lodash, Moment, date-fns,\u00a0RxJS, jQuery, Underscore.js, and Day.js.<\/p>\n<h4><span id=\"Popular_JavaScript_frameworks\" class=\"ez-toc-section\"><\/span>Popular JavaScript frameworks<\/h4>\n<p>Angular is the\u00a0most used frontend JavaScript framework followed by Vue.js. Others include Svelte, Preact, and Ember.<\/p>\n<p>There are also backend JavaScript frameworks with Express the most commonly used by some margin, followed by Next.js and Gatsby.<\/p>\n<p>Node.js\u00a0is a popular back-end run-time environment also sometimes referred to as a framework though it technically isn\u2019t.<\/p>\n<h4><span id=\"Popular_Python_frameworks_and_libraries\" class=\"ez-toc-section\"><\/span>Popular Python frameworks and libraries<\/h4>\n<p>The most used python frameworks are Django, Flask, and Bottle, while the most used libraries are TensorFlow, SciKit Learn, Numpty, Keras, and Pytorch.<\/p>\n<h4><span id=\"Popular_Java_frameworks_and_libraries\" class=\"ez-toc-section\"><\/span>Popular Java frameworks and libraries<\/h4>\n<p>The most used Java frameworks are Spring, Scala, GWT (Google Web ToolKit), JSF, and Struts.<\/p>\n<p>The most used Java libraries are Lombok, Guava, Hibernate, Feign, and Spring Boot.<\/p>\n<div class=\"container\">\n<div class=\"row align-items-center pr-0 mb-4\">\n<div class=\"col-sm-8 pt-5 pb-5 \">\n<p>K&amp;C &#8211; Creating Beautiful Technology Solutions For 20+ Years. Can We Be Your Competitive Edge?<\/p>\n<p>Drop us a line to discuss your needs or next project Contact US<\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span id=\"Software_development_tools\" class=\"ez-toc-section\"><\/span>Software development tools<\/h2>\n<p>As well as frameworks and libraries, software developers make use of a large collection of software development tools designed to make their job easier. Tools are used throughout the software development process to help develop, debug, maintain, or otherwise support software.<\/p>\n<p>Popular examples of software development tools are Integrated Development Environments (IDEs), which are really a collection of tools, Git for version control, Selenium and Cucumber for integrated testing, Stack Overflow an online community of developers where knowledge and resources are shared, the continuous integration server Jenkins, and many more.<\/p>\n<p>Even Docker, the containerization platform, and Kubernetes, the container orchestration platform, used in cloud-native development, could be described as software development tools.<\/p>\n<h3><span id=\"Software_Development_Kit_SDK\" class=\"ez-toc-section\"><\/span>Software Development Kit (SDK)<\/h3>\n<p>A software development kit (SDK) is a toolkit that comes in a single installable package and typically includes a compiler, debugger, often a framework, and other tools. SDKs are usually made to help software development for a particular combination of hardware platforms and OS.<\/p>\n<p>For example, the iOS SDK is designed to help developers create iPhone and iPad applications and <a href=\"https:\/\/aws.amazon.com\/tools\/\" target=\"_blank\" rel=\"noopener\">AWS provides SDKs<\/a>\u00a0that provide language-specific APIs for AWS services.<\/p>\n<h2><span id=\"Software_development_team_roles\" class=\"ez-toc-section\"><\/span>Software development team roles<\/h2>\n<p>A small app can be built in its entirety by a single full-stack developer with both backend and frontend experience. But most commercial software products are built by a software development team\u00a0consisting of several different roles.<\/p>\n<p>Some roles, like Scrum Master, are specific to a particular software development methodology (Agile), while others are more general. Not every development team will consist of the same collection of roles and the number of specialists performing each role will vary with a project\u2019s nature and scale.<\/p>\n<p>Some of the most common roles found in a modern software development team are:<\/p>\n<h3><span id=\"Project_Manager\" class=\"ez-toc-section\"><\/span>Project Manager<\/h3>\n<p>Oversees a software development project from a bird\u2019s eye view with a strategic focus on budget, risk, schedule, and resource management. Project managers often don\u2019t have a software engineering background themselves.<\/p>\n<h3><span id=\"Product_Owner\" class=\"ez-toc-section\"><\/span>Product Owner<\/h3>\n<p>Product owners also an analytical not technical role and is focused on a product\u2019s functionalities and features. Their main responsibility is that a software product is fit for purpose and its business value optimized. In an Agile development model, the product owner also prioritizes the order in which new features and functionalities are developed and released after the launch of the MVP.<\/p>\n<h3><span id=\"Tech_Lead\" class=\"ez-toc-section\"><\/span>Tech Lead<\/h3>\n<p>The tech lead of a software development project is responsible for selecting the best technical solutions to meet business requirements. This role used to often be referred to as the software architect.<\/p>\n<p>In consultation with other stakeholders, the tech lead makes decisions on things like what programming languages or frameworks the software is to be written in, infrastructure choices, perhaps what methodology the team will follow, etc.<\/p>\n<h3><span id=\"Full_stack_developer\" class=\"ez-toc-section\"><\/span>Full stack developer<\/h3>\n<p>Full stack developers are generalist software engineers that have a working knowledge of a wide range of frontend and backend skills and technologies. A full-stack developer can theoretically build a whole software solution alone. But full-stack developers usually aren\u2019t specialists so are often seen as most valuable in teams working on less complex software.<\/p>\n<h3><span id=\"Front_end_developer\" class=\"ez-toc-section\"><\/span>Front end developer<\/h3>\n<p>Front-end developers are specialized in and work exclusively on the front end of a piece of software being created by a development team. They use front-end languages, libraries, and frameworks to create the visual interface users see and interact with.<\/p>\n<h3><span id=\"Back_end_developer\" class=\"ez-toc-section\"><\/span>Back end developer<\/h3>\n<p>Back-end developers are specialized in and work exclusively on the back end of a piece of software being built by a software development team. The back-end team is responsible for a software\u2019s CRM, databases, and <em><strong>server-side<\/strong><\/em>\u00a0web application logic and integration.<\/p>\n<h3><span id=\"QA_Lead\" class=\"ez-toc-section\"><\/span>QA Lead<\/h3>\n<p>The quality assurance (QA) lead is accountable for the overall quality of deployed software. They manage the QA team itself and make sure its findings are acted upon by those responsible for different areas of the software development process.<\/p>\n<h3><span id=\"QA_engineer\" class=\"ez-toc-section\"><\/span>QA engineer<\/h3>\n<p>The QA team is made up of QA engineers who run software testing throughout the development process, identifying potential issues and reporting them back to the responsible teams. Most testing and QA assurance is now automated as part of a DevOps approach, especially for more complex software products, and consists of regression error testing ie. have new features resulted in errors or bugs in already existing parts of the software?<\/p>\n<h3><span id=\"Software_tester\" class=\"ez-toc-section\"><\/span>Software Tester<\/h3>\n<p>Testers are usually responsible for manual verification software works as it is supposed to for end users. Standard user journeys can usually be tested by automated tools but manual testers take an analogical approach to make sure bugs and errors don\u2019t crop up in alternative user paths and exceptions. For example, in airline ticket booking software, can the system handle the exception of a customer booking outgoing and incoming flights on the same day?<\/p>\n<h3><span id=\"UI_designer\" class=\"ez-toc-section\"><\/span>UI designer<\/h3>\n<p>A UI (user interface) designer is responsible for the user-facing appearance of the software. The UI designer designs all the screens a user might see while interacting with software, including all the visual elements, and their interactive qualities, that take a user from one screen to another.<\/p>\n<h3><span id=\"UX_designer\" class=\"ez-toc-section\"><\/span>UX designer<\/h3>\n<p>A user experience (UX) designer is responsible for software being as intuitive as possible for users. Nobody wants a kitchen that looks beautiful but in which elements are inconveniently positioned. The sink should be adjacent to a work surface and not too far from the hobs etc.<\/p>\n<p>A UX designer makes sure software doesn\u2019t just look nice and is convenient to use.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Software development is the process of creating a piece of software designed to perform a particular task. It encompasses the entire\u00a0software development life cycle. This resource is designed to give [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1348,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/posts\/1347"}],"collection":[{"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1347"}],"version-history":[{"count":1,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/posts\/1347\/revisions"}],"predecessor-version":[{"id":1349,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/posts\/1347\/revisions\/1349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=\/wp\/v2\/media\/1348"}],"wp:attachment":[{"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emsdigitalmedia.com.np\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}