| (37 revisões intermediárias por 4 usuários não estão sendo mostradas) | |||
| Linha 1: | Linha 1: | ||
= Profissão = | |||
Engenheiro de Software<br> | |||
= Descrição da atividade = | |||
* O engenheiro de software é capaz de trabalhar no projeto, desenvolvimento e teste de variados programas computacionais, dentre eles estão: aplicativos, jogos, plataformas digitais para atividades educacionais, sistemas embarcados e sistemas específcos, como médicos e bancários, de forma a garantir maior desempenho e produtividade. | |||
* Dependendo da empresa o Engenheiro de Software pode assumir a missão de avaliar o Estado da Arte da Tecnologia da Informação e ser resposável por definir, implantar e acompanhar a implantação de novas tecnologias com linguagens, frameworks e plataformas. | |||
* O mercado de trabalho para o engenheiro é vasto, existe carência na área em todo o Brasil e mundo, podendo atuar, por exemplo, em empresas do setor privado, em órgãos públicos ou em instituições de pesquisa e desenvolvimento de softwares. Porém o principal mercado para este profissional são os polos de tecnologia. | |||
* Responsabilidades básicas: | |||
** Desenvolver softwares e aplicativos. | |||
** Elaborar documentação e relatórios técnicos. | |||
** Estar sempre atualizado com a evolução tecnológica | |||
= Requisitos mínimos = | |||
* Desenvolvimento de software mobile (Android, iOS). | |||
* Experiência com versionamento e revisão de código. | |||
* Programação, depuração e testes. | |||
* Habilidades em desenvolvimento de sistemas embarcados (hardware e software). | |||
* Manutenção de software | |||
* Gerência de configuração de software | |||
* Gerência de engenharia de software | |||
* Processos de Engenharia de Software | |||
* Ferramentas e Métodos de Engenharia de Software | |||
* Qualidade de software<br> | |||
= Ferramentas usadas = | |||
Dentre as diversas ferramentas utilizadas, são de maior destaque as IDEs (ambientes de desenvolvimento integrado), que suportam outras ferramentas,como: | |||
* Editor | |||
* Debug | |||
* Geração de código | |||
* Modelagem | |||
* Deploy | |||
* Testes não automatizados | |||
* Testes automatizados | |||
* Refatoração (''Refactoring'') | |||
* Gestão de Riscos nos projectos de Software | |||
* Uso da Prototipagem na Eng. de Requisitos | |||
<br> | |||
= Tecnologias envolvidas = | |||
Na área do Engenharia de Software são abordadas diversas tecnologias, porém existem aquelas que são de maior importância e que são mais utilizadas, por exemplo, a linguagem de programação, banco de dados e paradigmas de programação, que trabalham com outros padrões, como: | |||
* Programação estruturada | |||
* Programação funcional | |||
* Programação orientada a objetos | |||
* Componentes de Software | |||
* Programação orientada a aspecto | |||
<br> | |||
= Exemplo de resultado tangível = | |||
* O Engenheiro de Software é um profissional de suma importância dentro de uma empresa, devido as qualidades que possui, que muitas das vezes, um simples programador não tem, como por exemplo, a capacidade de organizar, produzir o resultado esperado, com uma qualidade maior. | |||
* Muita das vezes, para desenvolvimento de software "pequenos", não é necessário, entretanto, para um software complexo que exige várias funções, interface gráfica, vários pacotes e até mesmo vários programadores, exige planejamento e toda uma ilustração do software, sendo assim, o responsável por estas ações será o Engenheiro de Software. | |||
* Efetivamente o resultado tangível é composto de: | |||
** Código versionado e disponível. GItHub, por exemplo | |||
** Resultados dos testes unitários e de sistema | |||
** Documentação completa com escopo, requisitos funcionais e requisitos não-funcionais | |||
<br> | |||
= Apresentação = | |||
* Apresentação de um vídeo criado pelo Engenheiro Marco Silva, abordando vários fatos sobre a profissão, além de algumas dicas para quem deseja trabalhar fora do Brasil. | |||
* Link para download do vídeo -> [https://mega.nz/#!1UtgxITT!iX7QZMYy_vvJV62EB3yfkHLOppE8Xr5AWc18_6LcZRE Clique aqui] | |||
* Facebook do Marco Silva -> [https://www.facebook.com/maarcosilva?fref=ts Clique aqui]<br> | |||
<br> | |||
= Tecnologia a ser pesquisada = | |||
<br> | |||
* Git e GitHub | |||
** Para que servem? | |||
*** Para que no processo de desenvolvimento de um sistema, se possa fazer o Deploy. Entenda por Deploy a fase de entrada em produção de um sistema. É fundamental termos um ferramenta que ajude no processo, obrigatório quando temos pessoas equipes codificando cada requisito em paralelo | |||
** Diferença entre os dois | |||
*** Git é a ferramenta que permite o versionamento e GihHub é o local que mantém os códigos versionados | |||
** Outras soluções no mercado | |||
*** CVS e Subversion | |||
** Como funciona? | |||
*** Ao terminar a edição de um código (gradativamente), devemos fazer o Commit, ou seja, atualizar a versão do código. Neste momento, o Git cria um snapshot que registra o momento de cada Commit. A partir daí podemos ter acesso a todas as versões e eventualmente, cloná-las, criar um branch, merge ou outras funções interessantes. Dessa forma, temos um total controle sobre o código mesmo que esteja sendo atualizado por inúmeras pessoas. | |||
** Exemplos de uso: | |||
*** Link | |||
<br> | |||
= Dúvidas = | |||
<br> | |||
* 01. O que vem a ser a sigla B2B e B2C? | |||
** Significa Business-To-Business e Business-To-Consumer. No contexto de TIC, denota que as soluções poderão ser criadas e entregues para dois públicos distintos: B - empresas e portanto com um porte e requisitos adequados ou C - consumer, para pessoas individuais. | |||
** Exemplo: Facebook | |||
*** Versão tradicional, onde o usuário individual se cadastra e tem acesso com seu usuário ou email | |||
*** Versão corporativa: A empresa paga para ter uma versão parecida com o Face normal mas para usar na sua intranet. | |||
<br> | |||
* 02. Como é a sequência normal na carreira de um profissional na sua linha de trabalho? | |||
** Normalmente começa como Trainée, se demonstrar vontade e tiver boa performance, pode ser contratado como Analista ou Engenheiro Jr. Depois que começa a participar de projetos se demonstrar competência pode ser promovido para Pleno. A partir dai, mostrando resultados expressivos deve evoluir naturalmente para Senior, tanto pela experiência adquirida quanto pela importância dentro de um equipe e ou de um projeto. | |||
<br> | |||
* 03. Em toda a empresa, existe essa segmentação clara nas responsabilidade de cada um? | |||
** Não, nem sempre! Em algumas empresas o programador faz o papel do Analista e de Engenheiro de Software. Em outras, o Analista não faz nem o que deveria fazer, ou seja, muitas vezes, um profissional assume responsabilidades de outras funções e alguns não conseguem entregar (produzir) o que deveriam. | |||
<br> | |||
* 04. É interessante atuar como free-lancer? Cite uma forma de ser descoberto? | |||
** Em alguns casos sim, o free-lancer permita que você compare suas habilidades frente a desafios de qualquer lugar do mundo e ainda complemente sua renda financeira. Importante sempre cumprir os compromissos assumidos em questões de tempo e qualidade. | |||
** Atualizando sempre o GitHub. | |||
<br> | |||
* 05. O que é uma aceleradora? Qual a diferença de uma incubadora? | |||
** Incubadora apoiam micro e pequenas empresas de acordo com alguma diretiva governamental ou regional. Para isso, a empresa deve apresentar um Plano de Negócios que será avaliado pela Incubadora que tem uma série de critérios formais para incubar um projeto. | |||
** Aceleradora é focada não em uma necessidade prévia, mas sim em empresas que tenham o potencial para crescerem muito rápido e seu modelo de trabalho é buscar startups escaláveis (e não somente uma pequena empresa promissora). Interessante que a empresa tenha um Plano de Negócio mas a Aceleradora busca principalmente uma boa ideia. | |||
<br> | |||
* 06. O que significa Viablidade de projeto? | |||
** Significa que o profissional pode assumir o desafio de avaliar técnica, econômica e operacionalmente um detereminado desenvolvimento. | |||
** Para isso tem que fazer uma análise dos riscos do projeto, exigir um pré-projeto delimitando tempo e custo. Neste contexto, tem que conhecer muito bem as habiliidades da equipe. No final, decidir se uma projeto vai ou não em frente. Imaginar a frustração da empresa ou das pessoas envolvidas se ele chegar a conclusão que não e a responsabilidade dele se disser que sim. | |||
<br> | |||
* 07. É importante avaliar as Boas Práticas de uma determinada atividade? Cite uma consequência drástica que pode acontevcer? | |||
** É essencial! Entender as Boas Práticas mostra que estaremos avaliando a experiência de outros profissionais para tentarmos fazer o melhor projeto possível. Entendam que se errarmos na escolha de uma plataforma, de uma linguagem, de um banco ou de um sistema qualquer talvez não tenhamos como voltar atrás e se tivermos que "remendar", o custo, prazo e qualidade certamente serão afetados. | |||
** Escalabilidade,ou seja, quando o sistema crescer, aumentar nro de usuários, de transações, etc poderá degradar a performance, gerar bugs ou até ficar inviável seu uso. Por isso, esse requisito não-funcional deve ser bem avaliado, na fase de projeto | |||
** Retrabalho: Outro fator crítico que pode onerar um sistema, pelo simples fato de ter que refazer algo que poderia ter sido feito de uma maneira melhor. Como comparação, imaginem o esforço e custo para trocar toda a fiação de um prédio depois de ter moradores pelo fato de que a bitola dos fios não suportam a carga elétrica atual. | |||
<br> | |||
* 08. O que é Scrum e porque usá-lo? | |||
** Scrum é uma metodologia usada em desenvolvimento ágil que permite gestionar e planejar projetos de software. No Scrum. Para isso, o desenvolvimento é segmentado em Sprints (ciclos de desenvolvimento) onde um conjunto de atividades é executado. | |||
** Porque permite algumas condições, como: | |||
*** Transparência: Todos podem estar cientes da evolução. Para isso existe um quadro de tarefas (Kanban) e um gráfico Burndown que compartilham informações | |||
*** Feedback contínuo: a frequência com que se obtém informações sobre o projeto faz muita diferença. Reuniões diárias e revisões dos Sprints ajudam muito a saber se as ações estã dando resultado | |||
*** Melhoria contínua: A cada etapa entregue existem ações para refinar o Backlog do produto (lista de requisitos a serem desenvolvidos) | |||
*** Entrega contínua de valor: Disponibilizar para o "cliente", gradativamente partes do desenvolvimento. É como se numa casa, eu construísse primeiro o quarto e mostrasse ao cliente, depois a sala e mais uma entrega, depois a cozinha e assim por diante. | |||
*** Alta velocidade: O Scrum permite que times multifuncionais atinjam o seu pleno potencial e alta velocidade conseguindo reduzir o tempo de desenvolvimento e aumentando a eficiência. | |||
<br> | |||
= Avaliação Vídeo = | |||
<br> | |||
* Disponibilidade: | |||
**- Preocupação em ajudar | |||
**- Não conhece nenhum de vocês e gastou muito tempo para gravar este vídeo | |||
<br> | |||
* Formação: | |||
**- 5a. turma de SI | |||
**- PET | |||
**- IC | |||
* Atribuições: | |||
**- Engenheiro de SW | |||
**- Empresa StationFy | |||
**- Fundada por brasileiros da UFU (Paulo Martins e Rodrigo Reis) | |||
**- Empreendedor no Vale do Silício | |||
**- Engenheiro de SW em Chicago | |||
**- Envolvido com projetos e produtos | |||
<br> | |||
* Evolução: | |||
**- Suporte internet na Algar Tech | |||
**- Graduação | |||
**- Estágio numa Startup em Android | |||
**- Bolsas de IC para se manter | |||
**- Cedro Technologies como desenvolvedor | |||
**- Pegando projetos por fora como freelancer | |||
**- Começou na StationFy part-time (4 hs) | |||
**- Resultados interessantes EUA e Canadá | |||
**- Vaga em aceleradora | |||
**- Sai da Cedro e full-time na StationFy | |||
**- Não curtiu web mas serviu de base | |||
**- Passou de analista para Eng Sw | |||
<br> | |||
* Requisitos: | |||
**- Web, Java, JSF, primefaces | |||
**- Dev Mobile: Trainee, Jr, Pl e Sr | |||
<br> | |||
* Atribuições: | |||
**- Conceito varia muito as responsabilidades | |||
**- Programador faz tudo que um analista | |||
**- Analista não faz nem o que faz um programador | |||
<br> | |||
* Tecnologias: | |||
**- Tablet, IoS, Web, Java, JSF, Primefaces | |||
**- Android, Ipads, Iphones | |||
**- Arquitetura de SW - não importa mais o device | |||
**- Engenharia de SW: Boas práticas e Padrão de Projeto | |||
**- Análise de Requisitos: Interação direta | |||
<br> | |||
* Requisitos: | |||
**- Trabalho em equipe: Grande sincronismo com a equipe | |||
**- Capacidade de liderança técnica | |||
**- Melhores talentos para cada finalidade | |||
**- Pensar no futuro: garantir Escalabilidade | |||
**- Ser eficiente: evitar Retrabalho | |||
**- Interatividade com pessoas: contato com cliente e com equipe de requisitos | |||
**- Padronização: De 10, 8 trabalham com frameworks básicos | |||
**- Inovação e novos desafios: Ex: BD relacional => BD não relacional | |||
<br> | |||
* Ferramentas | |||
**- Linguagens de programação | |||
**- GitHub | |||
**- Dispositivos: Iphone, Ipad | |||
**- ObjectVC: poderosa | |||
**- Swift: Apple Developer | |||
**- Android: Java com Android SDK | |||
**- IDEs: xCode, Eclipse e Android Studio | |||
**- Gerenciamento de projetos: Microsoft Project: Cronogramas | |||
**- Gerenciamento de tarefas: Trello e Assana :Tarefas | |||
<br> | |||
* Atividade atual | |||
**- Desenvolve usando ferramentas e tecnologias do estado da arte | |||
**- Não é só desenvolvedor: entra diretamento em projetos | |||
**- Avalia viabilidade de projetos: se compensa implementar | |||
**- Analisa riscos | |||
**- Faz pré-projetos | |||
<br> | |||
* Oportunidades: | |||
**- Fora do Brasil: possibilidades de estudar e/ou trabalhar | |||
**- Preocupação: pense na sua própria carreira | |||
**- O mundo clama por profissionais qualificados (especialistas) | |||
**- Exige foco, dedicação e especialização | |||
**- Interessante sites de freelancer | |||
**- Acumule pontos no (GitHub): vale muito a reputação | |||
**- Crie sua Rede de Contatos é muito importante | |||
<br> | |||
* Orientações: | |||
**- Não gosta de programar? Não desanime. Até final do curso eu também não gostava | |||
**- Gaste tempo tentando descobrir o que mais gosta | |||
**- Não tire a conclusão à primeira vista | |||
<br> | |||
* Resultado tangível: | |||
**- Sationfy: https://arena.im/ | |||
<br> | |||
* Atualmente: | |||
** https://www.linkedin.com/in/maarcosilva/detail/recent-activity/posts/ | |||
= Questões = | |||
<br> | |||
* 1. O que é UML? | |||
** Unified Modelling Language | |||
* 2. Cite dois diagramas usados por Engenheiros de Software? | |||
** Casos de Uso e Classes | |||
** DER e DFD | |||
* 3. O que é projeto físico? | |||
** Codificação do programa | |||
* 4. O que é um requisito funcional? | |||
** Funcionalidades do sistema | |||
* 5. O que é um linguagem de baixo nível? Exemplos? | |||
** Mais próxima do nível da máquina: Assembly, código de máquina. | |||
<br> | |||
= Profissão = | = Profissão = | ||
| Linha 47: | Linha 293: | ||
= Metodologias usadas na Engenharia de Software = | |||
Metodologia Estruturada - SSADM | =Metodologias usadas na Engenharia de Software = | ||
Metodologia Orientada a Objetos - OOA/OOD | <br> | ||
Metodologias de Desenvolvimento Ágil - Scrum,FDD,DSDM | - Metodologia Estruturada - SSADM<br> | ||
Desenvolvimento Pessoal de Software- PSP | - Metodologia Orientada a Objetos - OOA/OOD<br> | ||
Rational Unified Process - RUP | - Metodologias de Desenvolvimento Ágil - Scrum,FDD,DSDM<br> | ||
- Desenvolvimento Pessoal de Software- PSP<br> | |||
- Rational Unified Process - RUP<br> | |||
<br> | <br> | ||
| Linha 93: | Linha 341: | ||
= Tecnologias envolvidas = | = Tecnologias envolvidas = | ||
<br> | <br> | ||
O engenheiro de software deve ser capaz de projetar e desenvolver e software e compiladores, desenvolvimento e integração de protocolos industriais, projetar e desenvolver Drivers para plataformas Windows7/8/10(x86), WinCE/WinC7, Linux Debian, QNX, VxWorks e Nucleus para Arquiteturas ARM, elaborar softwares em | O engenheiro de software deve ser capaz de projetar e desenvolver e software e compiladores, desenvolvimento e integração de protocolos industriais, projetar e desenvolver Drivers para plataformas Windows7/8/10(x86), WinCE/WinC7, Linux Debian, QNX, VxWorks e Nucleus para Arquiteturas ARM, elaborar softwares em "Kernel Mode" para processamento de algoritmos em matemáticos em tempo real; | ||
Design e desenvolvimento de sistema operacional baseado em Windows Embedded;Projetar e aplicar métodos numéricos aplicados em algoritmos de controle. | Design e desenvolvimento de sistema operacional baseado em Windows Embedded;Projetar e aplicar métodos numéricos aplicados em algoritmos de controle. | ||
| Linha 102: | Linha 350: | ||
= Oportunidades = | = Oportunidades = | ||
<br> | |||
- As oportunidades variam de Estado para Estado e mediante a demanda em determinada época do ano, e também levando em conta as linguagens usadas na engenharia de software, sendo as principais ocupações. | |||
<br> | <br> | ||
-Especialista segmentado | |||
<br> | |||
-Analista de negócios | |||
<br> | <br> | ||
-Analista de informações | |||
<br> | |||
-Engenheiro de software | |||
<br> | |||
-CIO(Chief Information Officer) | |||
<br> | |||
-ITM(Information Technology Manager) | |||
<br> | |||
-E-CEO(Chief e-Commerce Officer) | |||
<br> | |||
-CRO(Chief Resource Officer) | |||
<br> | |||
-CKO(Chief Knowledge Officer) | |||
<br> | |||
= Media salarial = | = Media salarial = | ||
| Linha 118: | Linha 385: | ||
Estudos mostraram que em média o desenvolvedor brasileiro ganha em média 34000 reais anuais, enquanto um americano ganho o dobro. | Estudos mostraram que em média o desenvolvedor brasileiro ganha em média 34000 reais anuais, enquanto um americano ganho o dobro. | ||
<br> | <br> | ||
= Subáreas do conhecimento= | = Subáreas do conhecimento= | ||
| Linha 129: | Linha 395: | ||
3. Processos de Engenharia de Software | 3. Processos de Engenharia de Software | ||
4. Gestão de | 4. Gestão de Projetos de Software | ||
5. Gestão de Configurações de Software | 5. Gestão de Configurações de Software | ||
Edição atual tal como às 11h38min de 24 de outubro de 2019
Profissão
Engenheiro de Software
Descrição da atividade
- O engenheiro de software é capaz de trabalhar no projeto, desenvolvimento e teste de variados programas computacionais, dentre eles estão: aplicativos, jogos, plataformas digitais para atividades educacionais, sistemas embarcados e sistemas específcos, como médicos e bancários, de forma a garantir maior desempenho e produtividade.
- Dependendo da empresa o Engenheiro de Software pode assumir a missão de avaliar o Estado da Arte da Tecnologia da Informação e ser resposável por definir, implantar e acompanhar a implantação de novas tecnologias com linguagens, frameworks e plataformas.
- O mercado de trabalho para o engenheiro é vasto, existe carência na área em todo o Brasil e mundo, podendo atuar, por exemplo, em empresas do setor privado, em órgãos públicos ou em instituições de pesquisa e desenvolvimento de softwares. Porém o principal mercado para este profissional são os polos de tecnologia.
- Responsabilidades básicas:
- Desenvolver softwares e aplicativos.
- Elaborar documentação e relatórios técnicos.
- Estar sempre atualizado com a evolução tecnológica
Requisitos mínimos
- Desenvolvimento de software mobile (Android, iOS).
- Experiência com versionamento e revisão de código.
- Programação, depuração e testes.
- Habilidades em desenvolvimento de sistemas embarcados (hardware e software).
- Manutenção de software
- Gerência de configuração de software
- Gerência de engenharia de software
- Processos de Engenharia de Software
- Ferramentas e Métodos de Engenharia de Software
- Qualidade de software
Ferramentas usadas
Dentre as diversas ferramentas utilizadas, são de maior destaque as IDEs (ambientes de desenvolvimento integrado), que suportam outras ferramentas,como:
- Editor
- Debug
- Geração de código
- Modelagem
- Deploy
- Testes não automatizados
- Testes automatizados
- Refatoração (Refactoring)
- Gestão de Riscos nos projectos de Software
- Uso da Prototipagem na Eng. de Requisitos
Tecnologias envolvidas
Na área do Engenharia de Software são abordadas diversas tecnologias, porém existem aquelas que são de maior importância e que são mais utilizadas, por exemplo, a linguagem de programação, banco de dados e paradigmas de programação, que trabalham com outros padrões, como:
- Programação estruturada
- Programação funcional
- Programação orientada a objetos
- Componentes de Software
- Programação orientada a aspecto
Exemplo de resultado tangível
- O Engenheiro de Software é um profissional de suma importância dentro de uma empresa, devido as qualidades que possui, que muitas das vezes, um simples programador não tem, como por exemplo, a capacidade de organizar, produzir o resultado esperado, com uma qualidade maior.
- Muita das vezes, para desenvolvimento de software "pequenos", não é necessário, entretanto, para um software complexo que exige várias funções, interface gráfica, vários pacotes e até mesmo vários programadores, exige planejamento e toda uma ilustração do software, sendo assim, o responsável por estas ações será o Engenheiro de Software.
- Efetivamente o resultado tangível é composto de:
- Código versionado e disponível. GItHub, por exemplo
- Resultados dos testes unitários e de sistema
- Documentação completa com escopo, requisitos funcionais e requisitos não-funcionais
Apresentação
- Apresentação de um vídeo criado pelo Engenheiro Marco Silva, abordando vários fatos sobre a profissão, além de algumas dicas para quem deseja trabalhar fora do Brasil.
- Link para download do vídeo -> Clique aqui
- Facebook do Marco Silva -> Clique aqui
Tecnologia a ser pesquisada
- Git e GitHub
- Para que servem?
- Para que no processo de desenvolvimento de um sistema, se possa fazer o Deploy. Entenda por Deploy a fase de entrada em produção de um sistema. É fundamental termos um ferramenta que ajude no processo, obrigatório quando temos pessoas equipes codificando cada requisito em paralelo
- Diferença entre os dois
- Git é a ferramenta que permite o versionamento e GihHub é o local que mantém os códigos versionados
- Outras soluções no mercado
- CVS e Subversion
- Como funciona?
- Ao terminar a edição de um código (gradativamente), devemos fazer o Commit, ou seja, atualizar a versão do código. Neste momento, o Git cria um snapshot que registra o momento de cada Commit. A partir daí podemos ter acesso a todas as versões e eventualmente, cloná-las, criar um branch, merge ou outras funções interessantes. Dessa forma, temos um total controle sobre o código mesmo que esteja sendo atualizado por inúmeras pessoas.
- Exemplos de uso:
- Link
- Para que servem?
Dúvidas
- 01. O que vem a ser a sigla B2B e B2C?
- Significa Business-To-Business e Business-To-Consumer. No contexto de TIC, denota que as soluções poderão ser criadas e entregues para dois públicos distintos: B - empresas e portanto com um porte e requisitos adequados ou C - consumer, para pessoas individuais.
- Exemplo: Facebook
- Versão tradicional, onde o usuário individual se cadastra e tem acesso com seu usuário ou email
- Versão corporativa: A empresa paga para ter uma versão parecida com o Face normal mas para usar na sua intranet.
- 02. Como é a sequência normal na carreira de um profissional na sua linha de trabalho?
- Normalmente começa como Trainée, se demonstrar vontade e tiver boa performance, pode ser contratado como Analista ou Engenheiro Jr. Depois que começa a participar de projetos se demonstrar competência pode ser promovido para Pleno. A partir dai, mostrando resultados expressivos deve evoluir naturalmente para Senior, tanto pela experiência adquirida quanto pela importância dentro de um equipe e ou de um projeto.
- 03. Em toda a empresa, existe essa segmentação clara nas responsabilidade de cada um?
- Não, nem sempre! Em algumas empresas o programador faz o papel do Analista e de Engenheiro de Software. Em outras, o Analista não faz nem o que deveria fazer, ou seja, muitas vezes, um profissional assume responsabilidades de outras funções e alguns não conseguem entregar (produzir) o que deveriam.
- 04. É interessante atuar como free-lancer? Cite uma forma de ser descoberto?
- Em alguns casos sim, o free-lancer permita que você compare suas habilidades frente a desafios de qualquer lugar do mundo e ainda complemente sua renda financeira. Importante sempre cumprir os compromissos assumidos em questões de tempo e qualidade.
- Atualizando sempre o GitHub.
- 05. O que é uma aceleradora? Qual a diferença de uma incubadora?
- Incubadora apoiam micro e pequenas empresas de acordo com alguma diretiva governamental ou regional. Para isso, a empresa deve apresentar um Plano de Negócios que será avaliado pela Incubadora que tem uma série de critérios formais para incubar um projeto.
- Aceleradora é focada não em uma necessidade prévia, mas sim em empresas que tenham o potencial para crescerem muito rápido e seu modelo de trabalho é buscar startups escaláveis (e não somente uma pequena empresa promissora). Interessante que a empresa tenha um Plano de Negócio mas a Aceleradora busca principalmente uma boa ideia.
- 06. O que significa Viablidade de projeto?
- Significa que o profissional pode assumir o desafio de avaliar técnica, econômica e operacionalmente um detereminado desenvolvimento.
- Para isso tem que fazer uma análise dos riscos do projeto, exigir um pré-projeto delimitando tempo e custo. Neste contexto, tem que conhecer muito bem as habiliidades da equipe. No final, decidir se uma projeto vai ou não em frente. Imaginar a frustração da empresa ou das pessoas envolvidas se ele chegar a conclusão que não e a responsabilidade dele se disser que sim.
- 07. É importante avaliar as Boas Práticas de uma determinada atividade? Cite uma consequência drástica que pode acontevcer?
- É essencial! Entender as Boas Práticas mostra que estaremos avaliando a experiência de outros profissionais para tentarmos fazer o melhor projeto possível. Entendam que se errarmos na escolha de uma plataforma, de uma linguagem, de um banco ou de um sistema qualquer talvez não tenhamos como voltar atrás e se tivermos que "remendar", o custo, prazo e qualidade certamente serão afetados.
- Escalabilidade,ou seja, quando o sistema crescer, aumentar nro de usuários, de transações, etc poderá degradar a performance, gerar bugs ou até ficar inviável seu uso. Por isso, esse requisito não-funcional deve ser bem avaliado, na fase de projeto
- Retrabalho: Outro fator crítico que pode onerar um sistema, pelo simples fato de ter que refazer algo que poderia ter sido feito de uma maneira melhor. Como comparação, imaginem o esforço e custo para trocar toda a fiação de um prédio depois de ter moradores pelo fato de que a bitola dos fios não suportam a carga elétrica atual.
- 08. O que é Scrum e porque usá-lo?
- Scrum é uma metodologia usada em desenvolvimento ágil que permite gestionar e planejar projetos de software. No Scrum. Para isso, o desenvolvimento é segmentado em Sprints (ciclos de desenvolvimento) onde um conjunto de atividades é executado.
- Porque permite algumas condições, como:
- Transparência: Todos podem estar cientes da evolução. Para isso existe um quadro de tarefas (Kanban) e um gráfico Burndown que compartilham informações
- Feedback contínuo: a frequência com que se obtém informações sobre o projeto faz muita diferença. Reuniões diárias e revisões dos Sprints ajudam muito a saber se as ações estã dando resultado
- Melhoria contínua: A cada etapa entregue existem ações para refinar o Backlog do produto (lista de requisitos a serem desenvolvidos)
- Entrega contínua de valor: Disponibilizar para o "cliente", gradativamente partes do desenvolvimento. É como se numa casa, eu construísse primeiro o quarto e mostrasse ao cliente, depois a sala e mais uma entrega, depois a cozinha e assim por diante.
- Alta velocidade: O Scrum permite que times multifuncionais atinjam o seu pleno potencial e alta velocidade conseguindo reduzir o tempo de desenvolvimento e aumentando a eficiência.
Avaliação Vídeo
- Disponibilidade:
- - Preocupação em ajudar
- - Não conhece nenhum de vocês e gastou muito tempo para gravar este vídeo
- Formação:
- - 5a. turma de SI
- - PET
- - IC
- Atribuições:
- - Engenheiro de SW
- - Empresa StationFy
- - Fundada por brasileiros da UFU (Paulo Martins e Rodrigo Reis)
- - Empreendedor no Vale do Silício
- - Engenheiro de SW em Chicago
- - Envolvido com projetos e produtos
- Evolução:
- - Suporte internet na Algar Tech
- - Graduação
- - Estágio numa Startup em Android
- - Bolsas de IC para se manter
- - Cedro Technologies como desenvolvedor
- - Pegando projetos por fora como freelancer
- - Começou na StationFy part-time (4 hs)
- - Resultados interessantes EUA e Canadá
- - Vaga em aceleradora
- - Sai da Cedro e full-time na StationFy
- - Não curtiu web mas serviu de base
- - Passou de analista para Eng Sw
- Requisitos:
- - Web, Java, JSF, primefaces
- - Dev Mobile: Trainee, Jr, Pl e Sr
- Atribuições:
- - Conceito varia muito as responsabilidades
- - Programador faz tudo que um analista
- - Analista não faz nem o que faz um programador
- Tecnologias:
- - Tablet, IoS, Web, Java, JSF, Primefaces
- - Android, Ipads, Iphones
- - Arquitetura de SW - não importa mais o device
- - Engenharia de SW: Boas práticas e Padrão de Projeto
- - Análise de Requisitos: Interação direta
- Requisitos:
- - Trabalho em equipe: Grande sincronismo com a equipe
- - Capacidade de liderança técnica
- - Melhores talentos para cada finalidade
- - Pensar no futuro: garantir Escalabilidade
- - Ser eficiente: evitar Retrabalho
- - Interatividade com pessoas: contato com cliente e com equipe de requisitos
- - Padronização: De 10, 8 trabalham com frameworks básicos
- - Inovação e novos desafios: Ex: BD relacional => BD não relacional
- Ferramentas
- - Linguagens de programação
- - GitHub
- - Dispositivos: Iphone, Ipad
- - ObjectVC: poderosa
- - Swift: Apple Developer
- - Android: Java com Android SDK
- - IDEs: xCode, Eclipse e Android Studio
- - Gerenciamento de projetos: Microsoft Project: Cronogramas
- - Gerenciamento de tarefas: Trello e Assana :Tarefas
- Atividade atual
- - Desenvolve usando ferramentas e tecnologias do estado da arte
- - Não é só desenvolvedor: entra diretamento em projetos
- - Avalia viabilidade de projetos: se compensa implementar
- - Analisa riscos
- - Faz pré-projetos
- Oportunidades:
- - Fora do Brasil: possibilidades de estudar e/ou trabalhar
- - Preocupação: pense na sua própria carreira
- - O mundo clama por profissionais qualificados (especialistas)
- - Exige foco, dedicação e especialização
- - Interessante sites de freelancer
- - Acumule pontos no (GitHub): vale muito a reputação
- - Crie sua Rede de Contatos é muito importante
- Orientações:
- - Não gosta de programar? Não desanime. Até final do curso eu também não gostava
- - Gaste tempo tentando descobrir o que mais gosta
- - Não tire a conclusão à primeira vista
- Resultado tangível:
- - Sationfy: https://arena.im/
Questões
- 1. O que é UML?
- Unified Modelling Language
- 2. Cite dois diagramas usados por Engenheiros de Software?
- Casos de Uso e Classes
- DER e DFD
- 3. O que é projeto físico?
- Codificação do programa
- 4. O que é um requisito funcional?
- Funcionalidades do sistema
- 5. O que é um linguagem de baixo nível? Exemplos?
- Mais próxima do nível da máquina: Assembly, código de máquina.
Profissão
O engenheiro de software e responsável por todas as etapas do processo de confecção de um software que são: especificação, projeto, codificação, testes, manutenção, atualização, entre outros.
O profissional desenvolve softwares e aplicativos, realiza a análise de requisitos, define arquitetura de produtos, testes unitários e funcionais. Elabora documentação e relatórios técnicos.
Requisitos para a atividade
O engenheiro de software deve ser formado em ciência da computação, sistemas da informação ou em engenharia de software, mas mais importante que isso é o profissional ser capaz de usar fundamentos matemáticos e lógicos aliados as tecnologias existentes para produzir software de qualidade.
Atividades do profissional
1- Assumir a responsabilidade pelo software produzido;
2- Identificar seu cliente e suas necessidades pensando nelas em termos de entradas e saídas;
3- Especificar, desenvolver e manter um sistema de software;
4- Planejar o projeto;
5- Revisar o planejamento estratégico-organizacional;
6- Planejar informações e conhecimentos;
7- Avaliar e planejar sistemas de informação e conhecimentos;
8- Avaliar e planejar tecnologia da informação;
9- Avaliar e planejar recursos humanos;
10- Priorizar e custear o projeto;
11- Executar o planejamento do projeto;
12- Gerir o projeto.
Metodologias usadas na Engenharia de Software
- Metodologia Estruturada - SSADM
- Metodologia Orientada a Objetos - OOA/OOD
- Metodologias de Desenvolvimento Ágil - Scrum,FDD,DSDM
- Desenvolvimento Pessoal de Software- PSP
- Rational Unified Process - RUP
Tecnicas usadas na Engenharia de Software
1- Análise estruturada
2- Análise orientada a objetos
3- UML
4- Modelagem de projetos
Responsabilidades do profissional
O Engenheiro de software é responsável pelo(s):
- Planejamento estratégico-organizacional
- Planejamento estratégico de informações
- Relacionamento com clientes
- Planos de ação
- Planos de trabalho
- Cronogramas
Tecnologias envolvidas
O engenheiro de software deve ser capaz de projetar e desenvolver e software e compiladores, desenvolvimento e integração de protocolos industriais, projetar e desenvolver Drivers para plataformas Windows7/8/10(x86), WinCE/WinC7, Linux Debian, QNX, VxWorks e Nucleus para Arquiteturas ARM, elaborar softwares em "Kernel Mode" para processamento de algoritmos em matemáticos em tempo real;
Design e desenvolvimento de sistema operacional baseado em Windows Embedded;Projetar e aplicar métodos numéricos aplicados em algoritmos de controle.
E o desenvolvimento de todas essas coisas deve ser desenvolvido com sistemas de alta performance.
Oportunidades
- As oportunidades variam de Estado para Estado e mediante a demanda em determinada época do ano, e também levando em conta as linguagens usadas na engenharia de software, sendo as principais ocupações.
-Especialista segmentado
-Analista de negócios
-Analista de informações
-Engenheiro de software
-CIO(Chief Information Officer)
-ITM(Information Technology Manager)
-E-CEO(Chief e-Commerce Officer)
-CRO(Chief Resource Officer)
-CKO(Chief Knowledge Officer)
Media salarial
Um desenvolvedor de software é um profissional que desenvolve e gerencia softwares, ou seja, programas para uso em eletrônicos em geral. Podem trabalhar para empresas privadas, órgãos governamentais, ou trabalhar sozinho.
O desenvolvedor pode ganhar de acordo com sua experiência na área e mediante a quantidade de linguagens de programação e plataformas que ele domina.
O salário varia muito, para linguagens mais aquecidas no mercado, como um desenvolvedor em Java ganham em média 4000 reais, e em linguagens menos aquecidas como o PHP o salário já pode cair para 2300 reais.
A área de desenvolvimento depende muito de lugar onde ela se encontra também, a média salarial pode subir ou decrescer muito dependendo do estado do país e principalmente se olharmos em um âmbito internacional. Grandes centros comerciais como São Paulo, Rio de Janeiro, Brasília oferecem grandes salários nessas áreas.
Estudos mostraram que em média o desenvolvedor brasileiro ganha em média 34000 reais anuais, enquanto um americano ganho o dobro.
Subáreas do conhecimento
1. Qualidade de Software
2. Ferramentas e Métodos de Engª de Software
3. Processos de Engenharia de Software
4. Gestão de Projetos de Software
5. Gestão de Configurações de Software
6. Manutenção de Software
7. Teste de Software
8. Construção de Software
9. Design de Software
10. Engenharia de Requisitos de Software
11. Gerenciamento da integração
12. Gerenciamento de escopo
13. Gerenciamento de tempo
14. Gerenciamento de custos
15. Gerenciamento de qualidade
16. Gerenciamento de recursos humanos
17. Gerenciamento das comunicações
18. Gerenciamento de suprimentos
Referencias
Catho, Cargo de Engenheiro de software. Disponível em: <http://www.catho.com.br/profissoes/engenheiro-de-software/>. Acesso em: 13/04/2016.
Explica tudo, O que faz um engenheiro de software. Disponível em: <https://explicatudo.com/o-que-faz-um-engenheiro-de-software>. Acesso em: 13/04/2016.
Michel Stal, Engenheiros de Software precisam de um diploma em Ciências da Computação?. Disponivel em: <http://www.infoq.com/br/news/2013/01/engenheiro-de-software-diploma>. Acesso em: 13/04/2016.
Engenharia de software, Engenharia de Software - Responsabilidade profissional e ética. Disponível em: <http://adsbaixarengenhariadesoftware.blogspot.com.br/2013/05/engenharia-de-software-responsabilidade.html>. Acesso em: 14/04/2016.
Profissões, Engenharia de Software. Disponível em: <http://www.dsc.ufcg.edu.br/~pet/jornal/maio2012/materias/profissoes.html>. Acesso em: 14/04/2016
SILVA, Thiago P. Da. Processo de Software. Disponível em: <http://araguaia2.ufmt.br/professor/disciplina_arquivo/100/20130529403.pdf>. Acesso em: 14/04/2016.
AGUIAR, Ademar. Software Engineering Research Themes. Disponível em: <https://web.fe.up.pt/~eol/PRODEI/pi0708_files/AdemarAguiar.pdf> Acesso em: 14/04/2016.