Académique Documents
Professionnel Documents
Culture Documents
1
Agenda
■ Porque essa palestra?
Visão de ex-alunos sobre a graduação
Como melhor se preparar para “pós-formatura”
O que é de se esperar na indústria
■ Tópicos:
O que aprendemos na graduação, é o que realmente
deveríamos aprender?
O que estudar para entrevistas?
O que as empresas esperam?
2
O que aprendemos na graduação
■ Graduação:
BCC
➔ 4 anos dentro da faculdade
EnC
➔ 5 anos dentro da faculdade
3
O que aprendemos na graduação
■ Matérias de computação:
Computação básica:
➔ Algoritmos, Estruturas de Dados, ORI, ..
➔ Orientação a objetos, …
Teoria da computação:
➔ Lógica digital, Teoria de Grafos, LFA, ...
Programação:
➔ C, C++, Java, Delphi, ...
➔ Prolog, Lisp, ...
➔ Assembler, VHDL, …
Engenharia de Software:
➔ Introdução a Sistemas de Informação, Engenharia de
Software, Lab. Engenharia de Software, …
➔ Alguns tópicos mais específicos (gerenciamento de projetos,
4
O que aprendemos na graduação
■ Matérias mais específicas:
Bases de dados:
➔ SQL, Normalização, modelagem, transações, …
➔ Oracle, DB2, MySQL, ...
Sistemas operacionais:
➔ Sistemas operacionais, redes de computadores, Lab. SO,
Lab. Redes, …
➔ Arquitetura de computadores, Lab. Arquitetura, …
...
5
O que aprendemos na graduação
Resumindo, o que aprendemos na graduação??
???
6
O que aprendemos na graduação?
■ Curso de graduação:
Noções de principais tópicos.
7
O que aprendemos na graduação?
■ Matérias básicas:
Matemática:
➔ Cálculo, Cálculo numérico, GA:
- Em 90% de casos, após passar em todas as provas, os
conhecimentos adquiridos nunca mais serão utilizados.
- Em outros 10% de casos, esses conhecimentos serão essenciais.
8
O que aprendemos na graduação?
■ Exemplo: matemática na computação
9
O que aprendemos na graduação?
■ Matérias básicas:
Estatística:
➔ Introdução à probabilidade:
- É possível resolver muitos problemas aplicando os conceitos
adquiridos.
- Entretanto, o que aprendemos na graduação serve somente como
base para utilizar na prática...
10
O que aprendemos na graduação?
■ Exemplo: estatística na computação
Modelagem de
comportamento do sistema
Avaliação de desempenho
11
O que aprendemos na graduação?
■ Matérias de computação:
Colocando tudo de forma resumida:
12
O que aprendemos na graduação?
■ Computação básica:
Algoritmos, Estruturas de Dados:
➔ Conceitos introduzidos há algumas décadas...
➔ ...continuam sendo mais de que atuais hoje em dia!
HASH
B-Tree
16
O que aprendemos na graduação?
■ Teoria da computação:
Lógica Digital:
➔ Base para tudo na computação.
17
O que aprendemos na graduação?
■ Teoria da computação:
Teoria de grafos:
➔ Ajuda bastante
Onde se aplica?
➔ Entrevistas de emprego
- Qual é a complexidade deste algoritmo? Como podemos otimizar
ele?
➔ Avaliação e otimização do código
➔ Inteligência artificial
18
O que aprendemos na graduação?
■ Teoria da computação:
Linguagens Formais e Automatas:
➔ Explica como os computadores, compiladores, e sistemas
computacionais funcionam.
Onde se aplica?
➔ Projeto de sistemas (tanto de hardware quanto de software)
➔ Projeto de compiladores
➔ Depuração de aplicações
➔ Avaliação do sistema
➔ Criptografia
➔ ...
19
O que aprendemos na graduação?
■ Exemplo: uso de teoria de computação
Lógica
Complexidade de algoritmos
Modelagem do comportamento
20
O que aprendemos na graduação?
■ Linguagens de Programação:
Porque aprendemos TANTAS linguagens na
graduação??
➔ A resposta correta é: aprendemos muito poucas
linguagens..
21
O que aprendemos na graduação?
■ Linguagens de Programação:
22
O que aprendemos na graduação?
■ Linguagens de Programação:
E ainda tem:
➔ Logo, Ada, Fortran, ABAP, MATLAB, RPG (OS/400),
FoxPro/xBase, Prolog, Transact-SQL, Awk, LabVIEW, PL/I,
DC, Euphoria, Haskell, Smalltalk, Tcl/Tk, REXX, Groovy,
Bourne shell, ML, Forth, Objective-C, Erlang, CL (OS/400),
Alice, Scala, Natural, Caml, APL, …
➔ E MUITOS outros!
➔ Veja você mesmo:
- http://www.tiobe.com/
- http://www.langpop.com/
Na graduação:
➔ São ensinadas os conceitos válidos para todas (ou, pelo
menos, grande maioria das) linguagens:
- Pascal (conceitos de programação e estruturas de dados)
- C (programação eficiente, noções de ponteiros e estruturas de
dados variáveis)
- C++, Java e .NET (orientação a objetos, programação voltada à
reutilização de código, e utilização de frameworks)
. São as três linguagens mais utilizadas para desenvolvimento de
software enterprise.
- Prolog, Lisp, Delphi, PHP: conceitos de diversos estilos de
programação (funcional, iterativa, visual, etc)
Exemplo:
➔ Dois candidatos passaram em todas as entrevistas, mas
teve somente uma vaga. Dois da mesma faculdade, e com
mesma média da graduação, e mesma formação.
- Como eu escolho o mais adequado para a minha empresa?
- Qual é a vantagem competitiva entre os candidatos?
- O que eu tenho a mais a oferecer para empresa de que outro?
Haskell
hamming = 1 : map (2*) hamming `merge` map (3*) hamming `merge` map (5*) hamming
where merge (x:xs) (y:ys)
| x < y = x : xs `merge` (y:ys)
| x > y = y : (x:xs) `merge` ys
| otherwise = x : xs `merge` ys
Ruby
hash = { :water => 'wet', :fire => 'hot' }
puts hash[:fire] # Prints: hot
Objective CAML
let rec quicksort = function
| [] -> []
| pivot :: rest ->
let is_less x = x < pivot in
let left, right = List.partition is_less rest in
quicksort left @ [pivot] @ quicksort right
26
O que aprendemos na graduação?
■ Engenharia de Software:
Afinal, o que é tal de Engenharia de Software?
27
O que aprendemos na graduação?
■ Engenharia de Software:
É o que faz tudo isso funcionar :).
29
O que aprendemos na graduação?
■ Engenharia de Software:
Afinal, o que aprendemos na graduação?
➔ Especificar um projeto de software
- São as coisas “chatas”, como especificação, escopo, metodologia,
prazo, e por aí vai..
➔ Gerenciar a execução do projeto
- Em trabalhos em grupo, quem gerencia o andamento do projeto? E
na empresa?
➔ Testar e validar a aplicação
- Quem já “compilou” e “executou” as coisas no notepad? :)
➔ Documentar
- Porém, quem conhece os padrões de documentação?
➔ Controle do código:
- Porém, quem conhece CVS, SVN, BZR, GIT, Perforce,
Mercurial, ???
➔ Relacionamento com cliente:
- Software vendido = apresentar um trabalho para conseguir 10!
➔ ...
30
O que aprendemos na graduação?
■ Engenharia de Software:
O que mais aprendemos?
➔ UML, CASE, MER, Redes de Petri, …
➔ Como modelar o sistema?
➔ …
A solução?
➔ Ir atrás!
31
O que aprendemos na graduação?
■ Engenharia de Software:
O que podemos concluir?
➔ Mesmo tendo diversas matérias, não é possível aprender
tudo durante a graduação.
32
O que aprendemos na graduação?
■ Engenharia de Software:
...em outras palavras :)
33
O que aprendemos na graduação?
■ Bancos de dados:
Por um lado, faz parte de engenharia de software.
➔ Por outro lado, é uma área completamente diferente!
Definição “informal”:
➔ Engenharia de software:
- Ensina como planejar, gerenciar, documentar, manter, avaliar e
aperfeiçoar um projeto de software.
➔ Bancos de dados:
- Ensinam como planejar, otimizar, armazenar, gerenciar e obter as
informações.
Onde se aplica?
➔ Praticamente em todas as áreas de computação você acaba
trabalhando, diretamente ou indiretamente, com BDs.
34
O que aprendemos na graduação?
■ Bancos de dados:
O que aprendemos na graduação?
➔ Conceitos essenciais:
- Estrutura de bases de dados
- Relacionamentos entre os elementos
- Normalização de dados
- Structured Query Language (SQL)
➔ Exemplos práticos:
- Diversos tipos de BDs
. Oracle, DB2, Ingress, MySQL, Cache, ...
- Planejamento e construção de BDs eficientes
- Bancos de dados com lógica embutida
. Triggers, PL/SQL, ...
- Utilização de BDs para solucionar problemas comuns
. “Rent-a-Car”, “Loja de CDs”, …
35
O que aprendemos na graduação?
■ Bancos de dados:
O que não aprendemos?
➔ Otimização e gerenciamento eficiente de BDs
- Denormalização
- Funcionamento detalhado de BDs
. SQL EXPLAIN, etc
. Sharding
- …
36
O que aprendemos na graduação?
■ Modelagem de bases de dados:
37
O que aprendemos na graduação?
■ Sistemas operacionais:
“Para que vou querer saber disso se eu só uso
Windows??”
➔ Você usa celular? PDA? Caixa eletrónico do banco para
sacar dinheiro? Playstation?
- A maioria destes aparelhos não roda Windows.
➔ Mesmo se você não quiser usar Linux/FreeBSD/QNX nunca
na sua vida:
- Só por não querer nem saber como ele funciona você acaba
descartando uma série de empresas que teriam interesse em te
contratar!
- Só por ser focado 100% no Windows, você acaba se misturando
com a grande maioria dos candidatos àquela vaga
. “Os dois candidatos são bons, mas aquele sabe só windows, e
esse aí também Linux e BSD.”
➔ “O mercado de Linux é minúsculo, comparando com
Windows”
- Comparativamente, sim. Mas, mesmo sendo 5% do mercado de
Windows, isso acaba dando centenas de milhões de
computadores! 38
O que aprendemos na graduação?
■ Sistemas operacionais
SO e Lab. SO:
➔ Conceitos de construção e funcionamento de sistemas
operacionais
➔ Noções de programação de alto desempenho e distribuída
➔ Programação de sistemas
Onde se aplica:
➔ Algumas entrevistas de emprego
➔ Em áreas que trabalham com programação:
Vantagens competitivas:
➔ Muitas empresas preferem candidatos que conhecem
diversos sistemas operacionais e linguagens de
programação:
- Isso demonstra que o candidato tem vontade e capacidade de
aprender
- Paradoxo: muitas das pessoas de Microsoft, que trabalham com
desenvolvimento de Windows, vieram de Linux :). 40
O que aprendemos na graduação?
■ Sistemas operacionais
41
O que aprendemos na graduação?
■ Redes de computadores:
O mundo inteiro utiliza Internet hoje em dia
➔ Computadores interconectados
➔ Google, Gmail, Hotmail, Orkut, …
➔ Counter Strike..
de alto desempenho
➔ Programação para celulares
- “Porque não consigo acessar Internet? Será que preciso ligar este
cabo azul?” :)
➔ etc.
43
O que aprendemos na graduação?
■ Arquitetura de computadores
Os conceitos antigos são utilizados até hoje.
código, …
➔ Desenvolvimento de sistemas operacionais, sistemas de
44
O que aprendemos na graduação?
■ Compiladores
Explicam como o software funciona
Juntam todos os conhecimentos adquiridos na
graduação
➔ Dá para pensar no trabalho de compiladores como em uma
prévia de um projeto grande, desenvolvido na empresa
➔ Depuração
➔ Engenharia reversa
45
O que aprendemos na graduação?
■ Pequena conclusão
A graduação nós dá uma base para tudo o que vamos
utilizar na vida profissional
- Google :)
- Diversos projetos OpenSource
- Aprendizado pela internet
- Milhares de sites de howto, tutoriais, cursos, etc.
46
Entrevistas
Entrevistas de emprego
47
Entrevistas
■ Qual é o procedimento para ser contratado por
uma empresa?
Anúncio de emprego
➔ Descreve o que a empresa espera de você, e o que você
pode esperar da empresa
- PJ, CLT, e outras siglas estranhas.
Dinâmicas de grupo (geralmente para estágios)
➔ Avalia se você se daria bem no ambiente de trabalho
Avaliação do currículo (passo mais importante)
➔ Passo mais importante!
- O seu currículo descreve o que você sabe, o que pode trazer para
empresa, e porque você deve ser O Escolhido para a vaga.
Entrevista (2o passo mais importante)
➔ Verifica se você não mentiu no seu curriculo.
➔ Avalia a sua personalidade, o seu jeito de trabalhar, e suas
52
Entrevistas
■ O seu currículo foi escolhido, e você foi chamado
para entrevista. E agora?
Uma entrevista típica de empresa de computação:
➔ Introdução
- Fale um pouco de você
➔ Uma pergunta sobre atividades recentes
- Onde você trabalhou ultimamente, em qual projeto, o que você
achou da empresa e do trabalho
➔ Uma pergunta impossível
- “Como você faria um algoritmo para resolver o cubo mágico?”
- A ideia é ver o que o candidato faria para tentar resolver o problema.
➔ Uma pergunta básica
- Pergunta de C, ou C++, ou de algoritmos, ou de estrutura de dados
➔ Uma pergunta técnica (depende da vaga)
- Pode ser pergunta de testes, ou de design, ou de redes, ou de HPC..
➔ Desafio
- “O que tem de errado com esse código/essa consulta/esse caso?”
- “Você tem certeza disso?”
➔ Sua vez de perguntar! 53
- “Alguma pergunta?”
Entrevistas
■ Dicas para entrevistas:
Procure saber mais sobre o contexto a pergunta
➔ “Este algoritmo é para ser executado numa máquina local ou
pela rede?”
➔ “Quantos usuários tem no BD para listar nesta página?”
55
O que as empresas esperam?
56
O que as empresas esperam?
■ O que você tem que ter para se virar bem na
empresa?
Capacidade de aprender
➔ Mesmo aprendido tudo na graduação, ao entrar na empresa
você vai ter que aprender novos métodos, aplicações,
ferramentas, procedimentos, …
57
O que as empresas esperam?
■ Quais problemas você vai encontrar?
Horas extra
Relacionamentos informais
Nenhum prazo é adequado
Os planos mudam
As vezes você não tem vida fora-da-empresa
Pressão constante
…
58
O que as empresas esperam?
■ O que é de se esperar?
Empresas pequenas e micro-empresas:
➔ Poucas pessoas para poucos projetos
- Demanda irregular por serviços
➔ Poucas pessoas para muitos projetos
- Geralmente os funcionários acabam em vários cargos ao mesmo
tempo
. Programador é ao mesmo tempo gerente de projeto
. Gerente de marketing também é gerente de vendas
- Demanda irregular por serviços
. Horas-extras se transformam em dias
➔ A empresa tem interesse em você continuar nela
➔ Problemas comuns
➔ Lato-sensu
- Pós-graduação especializada, em tempo parcial
Cursos de especialização
➔ MBA, cursos práticos, certificações, …
- Tudo isso acrescenta valor no seu currículo
…
62
Fim
■ Perguntas?
63