O software em si é o conjunto de instruções ou programas que dizem a um computador o que fazer. Ele é independente do hardware e torna os computadores programáveis. Há três tipos básicos:
Software de sistema, para fornecer funções essenciais, como sistemas operacionais, gerenciamento de discos, utilitários, gerenciamento de hardware e outras necessidades operacionais.
Software de programação, para fornecer aos programadores ferramentas como editores de texto, compiladores, vinculadores, depuradores e outras ferramentas para criar código.
Software de aplicações (aplicações ou aplicativos), para ajudar os usuários a realizar tarefas. Pacotes de produtividade do Office, software de gerenciamento de dados, players de mídia e programas de segurança são exemplos. Aplicações também se referem a aplicativos móveis e da web, como os usados para fazer compras na Amazon.com, socializar no Facebook ou postar fotos no Instagram.1
Um quarto tipo possível é o software incorporado. O software de sistemas incorporados é usado para controlar máquinas e dispositivos que normalmente não são considerados computadores: redes de telecomunicações, carros, robôs industriais e muito mais. Esses dispositivos e seus softwares podem ser conectados como parte da internet das coisas (IoT).
Como funciona o desenvolvimento de software?
O desenvolvimento de software é conduzido principalmente por programadores, engenheiros de software e desenvolvedores de software. Essas funções interagem e se sobrepõem, e a dinâmica entre elas varia muito entre os departamentos de desenvolvimento e as comunidades.
Os programadores, ou codificadores, escrevem código fonte para programar computadores para tarefas específicas, como mesclar bancos de dados, processar pedidos online, rotear comunicações, realizar pesquisas ou exibir textos e gráficos. Normalmente, os programadores interpretam instruções de desenvolvedores e engenheiros de software e usam linguagens de programação, como C++ ou Java, para executá-las.
Os engenheiros de software aplicam princípios de engenharia para criar software e sistemas para resolver problemas. Eles usam a linguagem de modelagem e outras ferramentas para criar soluções que podem ser aplicadas a problemas de forma geral, em vez de apenas resolver para um caso ou cliente específico.
As soluções de engenharia de software seguem o método científico e devem funcionar no mundo real, como no caso de pontes ou elevadores. A responsabilidade deles aumentou à medida que os produtos se tornaram cada vez mais inteligentes com a adição de microprocessadores, sensores e software.
Além de mais produtos dependerem de software para diferenciação no mercado, o desenvolvimento de software deve ser coordenado com o trabalho de desenvolvimento mecânico e elétrico do produto.
Os desenvolvedores de software têm uma função menos formal do que os engenheiros e podem estar intimamente envolvidos em áreas específicas do projeto, incluindo a criação de códigos. Ao mesmo tempo, eles conduzem o ciclo de vida geral de desenvolvimento de software, incluindo o trabalho com equipes funcionais para transformar requisitos em recursos, gerenciar equipes e processos de desenvolvimento e realizar testes e manutenção de software.2
O trabalho de desenvolvimento de software não se limita aos codificadores ou às equipes de desenvolvimento. Profissionais como cientistas, fabricantes de dispositivos e criadores de hardware também desenvolvem códigos de software, mesmo que não sejam primariamente desenvolvedores de software.
Também não se limitam aos setores tradicionais de tecnologia da informação, como empresas de software ou semicondutores. Na verdade, de acordo com o Brookings Institute (link fora de ibm.com), essas empresas representam menos da metade das empresas que realizam desenvolvimento de software.
Desenvolvimento de software personalizado
Uma distinção importante é o desenvolvimento de software personalizado, ao contrário do desenvolvimento de software comercial.
O desenvolvimento de software personalizado é o processo de projetar, criar, implementar e manter o software para um conjunto específico de usuários, funções ou organizações.
Por outro lado, o software comercial pronto para uso (COTS) é projetado para um amplo conjunto de requisitos, o que permite que seja empacotado, comercializado e distribuído.