Estou me formando em Ciência da Computação, mas não sei como programar


1050

Estou me formando em Ciência da Computação, mas vejo sites como o Stack Overflow e mecanismos de pesquisa como o Google e não sei onde eu começaria a escrever algo assim. Durante um verão, tive a oportunidade de trabalhar como desenvolvedor de iPhone, mas senti como se estivesse colando bibliotecas que outras pessoas haviam escrito com pouca compreensão da mecânica que acontecia sob o capô.

Estou tentando melhorar meu conhecimento estudando algoritmos, mas é um processo longo e doloroso. Acho os algoritmos difíceis e, na velocidade em que estou aprendendo, uma década se passará antes que eu domine o material do livro. Dada a minha situação atual, passei um mês procurando trabalho, mas minhas habilidades (C, Python, Objective-C) são relativamente rasas e não são tão desejáveis ​​no mercado local, onde C #, Java e desenvolvimento web são muito mais altos em demanda. Isso não quer dizer que as oportunidades C e Python não existam, mas tendem a exigir mais de 3 anos de experiência que eu não tenho. Meu GPA está bom (3.0), mas não é alto o suficiente para ser aplicado a grandes empresas como a IBM ou retornar para estudos de pós-graduação.

Basicamente, estou me graduando em Ciência da Computação, mas não sinto que aprendi a programar. Eu pensei que ingressar em uma empresa e programar em tempo integral me daria a chance de desenvolver minhas habilidades e aprender com os mais experientes que eu, mas estou lutando para encontrar trabalho e estou começando a ficar realmente frustrado.

Vou ampliar minha rede e olhar além da cidade em que cresci, mas o que outras pessoas em situação semelhante tentaram fazer? Eu trabalhei duro, mas não tenho confiança para sair por conta própria e escrever meu próprio aplicativo. (Ou seja, torne-se um desenvolvedor independente no mercado de aplicativos para iPhone.) Se nada acontecer, terei que considerar a atualização e o aprendizado de habilidades mais populares ou experimentar algo marginalmente relacionado, como a TI, mas, considerando todo o esforço que pus como fugir.

Respostas:


533

A melhor maneira de aprender a programar é escrever programas.

Duas sugestões:

  • desenvolver um jogo
  • desenvolver um site

Os algoritmos, embora úteis, e devem ser entendidos, na verdade são o segundo problema no design de software. TDD / Padrões de design / Arquitetura / Refatoração / Teste de unidade / O processo de criação de código / etc tende a ser habilidades muito mais importantes.

Além disso, é muito melhor fazer isso no seu próprio tempo. Não espere para resolver essas coisas no trabalho. Acho que as pessoas que tendem a se sair melhor são as que no início de suas carreiras se esforçam para desenvolver suas habilidades em seu próprio tempo. Geralmente porque eles são genuinamente apaixonados pelo desenvolvimento de software

  • Mais uma coisa é " Ler livros e amostras " e não tenha vergonha de perguntar. Se você quer aprender, você deve perguntar :)

70
+1 Concordado. E se você NÃO QUER fazer essas coisas no seu tempo livre, talvez essa não seja a melhor carreira para você. Se você montar as coisas agora, poderá criar um portfólio que possa complementar seu GPA.
Chris

68
@ Chris, -1. É como dizer que um advogado que não trabalha de graça para o indigente em seu próprio tempo está na carreira errada. Muitos programadores que conheço estariam melhor gastando menos tempo programando e mais tempo fazendo quase qualquer outra coisa.

21
na verdade, muitos advogados cortam os dentes, são mal pagos e gastam muitas horas extras apenas para avançar.

22
Você realmente não pode comparar um trabalho de advogado com um trabalho de programador. Com a programação, você pode adquirir habilidades por conta própria; você não precisa de nenhum empregador ou cliente para melhorar essa parte.

31
Realmente, você precisa parar de pensar que a programação é especial. Os advogados podem trabalhar / aprender por conta própria, assim como nós. Eles podem começar com empregos mal remunerados e trabalhar muitas horas, mas o mesmo acontece com muitos programadores ... a linha "se você não programa como hobby, não deve ser programador" é realmente muito subjetiva.

388

Eu senti como se estivesse colando bibliotecas que outras pessoas tinham escrito

Embora eu entenda por que você acha que isso não era "programação real", a verdade é que o trabalho de integração representa uma porcentagem significativa da carga de trabalho típica de um programador corporativo. Sua experiência pode ser um pouco mais valiosa do que você pensa :)


126
+1 para cola. Ninguém contrataria um grupo de profissionais para construir uma nova casa e esperaria que eles inventassem novas técnicas de construção de casas no processo. De fato, qualquer pessoa interessada em gerenciar riscos e orçamento provavelmente preferiria não fazer isso.
Dan Bryant

14
Eu concordo que existem alguns casos extremos por aí, mas eu diria que 75-80% dos trabalhos de programação por aí são do tipo em que você está apenas colando bibliotecas.

15
E não há nada errado em apenas colar bibliotecas. É isso que o torna produtivo!

10
Definitivamente, 90% do meu trabalho é conectar o código de outras pessoas (bibliotecas ou código legado) ou manter o código mais antigo. Mas passo meu tempo extra aprendendo partes e partes à medida que passo, para que agora eu saiba como muitas dessas bibliotecas funcionam e tenha uma compreensão muito mais profunda do que acontece em geral. Seja um aprendiz para toda a vida e, eventualmente, você aprenderá tudo.
CodexArcanum

53
Quando não estou colando bibliotecas, geralmente faço bibliotecas que posteriormente serão coladas.

238

Primeiro, obrigado por uma pergunta imensamente honesta. Existem várias maneiras de resolver os problemas em questão. Aqui estão algumas dicas que eu considerava muito úteis para mim no passado e ainda continuo a usá-las para ampliar meu conhecimento.

  1. Aprenda, Aprenda e Aprenda um pouco mais. Esta é provavelmente a dica mais importante que posso lhe dar. Nunca pare de aprender . Conhecer um idioma é bom, conhecer vários é ainda melhor. O conhecimento de outros idiomas o tornará um programador melhor e facilitará o processamento de determinadas tarefas e o ajudará a obter um melhor conhecimento das estruturas de dados comuns.

  2. Comece pequeno .

  3. Inicie um projeto de hobby no seu tempo livre. Não faça algo que possa realizar com bastante facilidade. Assumir um projeto em que você não tem idéia por onde começar. Jogue-se no fundo do poço. Os benefícios disso é que você aprenderá coisas que nunca soube que existiam e, quando concluir, sentirá um imenso orgulho e satisfação. É isso que me faz continuar.

  4. Tenha uma verdadeira paixão pelo que faz. Embora as pessoas discordem de mim neste caso. Não acredito que você possa se destacar nesse campo se simplesmente considerar um trabalho entre 9 e 5 anos. Tem que haver uma paixão para fazê-lo.

  5. Ajude outras pessoas no SO! A melhor maneira de entender é tentar ensiná-lo a outras pessoas.

  6. Estude os programas de outras pessoas e tente descobrir como eles funcionam, depois implemente técnicas semelhantes em seus próprios programas. Tente lê-lo e entendê-lo, e faça você mesmo com base nesse entendimento, em vez de copiar e colar.

  7. Continue nisso . Às vezes, as coisas podem ficar muito frustrantes, mas muito gratificantes quando terminadas. Se você não entender alguma coisa, faça uma pausa, limpe seus pensamentos e tente novamente. Pergunte-nos no SO! Somos um bando disposto :)

  8. Nunca pare de aprender novas tecnologias.

  9. Leia alguns livros. Eu entendo que, sendo estudante, você teria feito uma tonelada de leitura. Aqui estão alguns livros práticos que você pode achar úteis ... esperançosamente - O programador pragmático: do viajante ao mestre - Código completo: um manual prático de construção de software


13
Adicione o Código Limpo às suas listas de leitura, é muito bom.

7
"Conhecer um idioma é bom" -> errado. Conhecer um idioma não é suficiente. Conhecer vários idiomas é bom, aprender ainda mais idiomas é ainda melhor.
Denilson Sá Maia

10
"Iniciar pequeno" refere-se não apenas à seleção de projetos acessíveis, mas também ao início da implementação de partes viáveis ​​em um projeto. Um projeto meu começou com um pequeno experimento em paralaxe, e eu pensando "que parece um campo estelar bem legal para o fundo de um jogo". Adicione um navio ... adicione um alienígena ... adicione alguns mísseis, controle de teclado e detecção de colisão (cada um dos problemas simples, por si só) um de cada vez e logo, eu tinha um jogo comercial pelo qual eu vendia (o que eu pensava em o tempo) um bom dinheiro. Por outro lado, "escrever um jogo" é uma tarefa vaga e inacessível. Um pouco de cada vez.
mmc

2
@Denilson OP declarou que não sente que sabe programar. Conhecer um idioma para alguém que não tem certeza sobre programação é bom. Minha lista é aplicável apenas a este contexto.

7
@ Denilson, você poderia ter aprendido vários idiomas sem aprender primeiro um idioma?
Péter Török 15/05

141

Inicie um projeto pessoal. O problema com a escola é que a coisa mais complicada que você fez foi um projeto que levou 15 semanas a um ano e envolveu algumas outras pessoas. O domínio do problema foi bem compreendido (seu professor não deu nenhuma tarefa que não se encaixasse perfeitamente no seu semestre.) Esse não é um luxo que o mundo real oferece.

Se você precisa fazer algo importante, do início ao fim, pelo qual possa se apaixonar, seu cérebro começará a envolver o processo. Contanto que seja apenas uma carreira e você não a ame, ainda assim sentirá que ainda não conseguiu.


Estive dividindo meus dias entre 1) enviando currículos 2) lendo livros, mas parece que 2) poderia ser melhor gasto escrevendo código. Eu acho que muitos empregadores não querem correr o risco de contratar alguém com muito pouca experiência no setor, para que o estágio que eu não fiz pareça realmente atraente no momento.

5
+1. Eu concordo completamente. Inicie um aplicativo pequeno e adicione funcionalidade como desejar. Como o edifício continua, e você começa a perceber o que mais pode ser feito, você pode adicioná-lo no.

11
"O domínio do problema foi bem compreendido (seu professor não deu nenhuma tarefa que não se encaixasse perfeitamente no seu semestre.)" Esse é um dos maiores problemas da educação em ciência da computação. Existem alguns programas de engenharia de software ou de software que abordam esse problema, mas a maioria não faz você pensar fora da caixa. Você realmente precisa assumir seus próprios projetos. Se você não sabe como o Stackoverflow foi construído, tente criar um clone. Você aprenderá muito mais do que qualquer classe pode ensinar.
Matt Olenik

excelente ideia. Mas comece com algo pequeno com funções principais e adicione-o lentamente. Dessa forma, será mais motivador do que tentar obter um aplicativo gigante perfeito. Eu também acho que você nunca vai encontrar o máximo de informações e tutoriais como a riqueza de informações em livros
Xster

@ Xster, é isso que eu quero dizer. A tarefa de escrever um aplicativo de "perguntas e respostas" com funcionalidades muito básicas é um bom ponto de partida.
Matt Olenik 16/05

106
  1. Comece em um desses idiomas sob demanda, usando um projeto como diz K. Nicholas.
  2. Não se avalie pelo StackOverflow. Isso irá desencorajá-lo desnecessariamente.

81
+1 para o número 2 - não se compare com o conhecimento de uma multidão.
gf

8
O StakOverflow em si é um produto virtuoso. Sem mencionar, há pessoas contribuindo com muitas décadas de experiência em uma enorme variedade de produtos.

6
Eu não consideraria uma coisa ruim se comparar ao StackOverflow, há muitas pessoas inteligentes aqui. Alguns são mais espertos do que você jamais será. No entanto, essas são as pessoas que fazem você querer continuar aprendendo.

15
Ei, eu sei por que sou viciado em SO! É fantástico por uma dúzia de razões. Mas é humilhante estar continuamente exposto a todas as coisas que você não sabe. É preciso ter um pouco de cuidado para não se sentir assustado, só isso.

@Georg - Bom jogo de go-gravitar. KGS Smandoli

72

Não posso ajudar com sua situação profissional, mas espero poder ajudá-lo a desenvolver suas habilidades e também colocar em perspectiva seus sentimentos sobre suas próprias habilidades.

Estou me graduando em Ciência da Computação, mas não sei como programar.

É possível que seus instrutores tenham algo para se envergonhar. Também é possível que o seu sentimento de não saber programar seja natural e apropriado para esse estágio de sua vida e educação. Aqui estão algumas idéias que podem ajudar:

  • Muitos empregadores não se importam com os cursos da sua transcrição ou com o GPA. Em vez disso, eles querem saber o que você pode fazer, e especialmente o que você construiu. Para um bom trabalho, o que você construiu é mais importante que a tecnologia (C, C #, o que você tem) em seu currículo.

  • Se você não teve a chance de construir uma série de projetos interessantes durante a sua educação, tenha vergonha de seus instrutores. Mas você pode criar esses projetos agora. Vasculhe os sites em busca de problemas interessantes. Nossos alunos do segundo semestre estão terminando a "Pesquisa de músicas" - selecionamos uma quantidade enorme de letras para um site, elas criam um índice invertido, você as alimenta com palavras-chave e mostra as letras que contêm essas palavras no contexto. Não é o Google, mas é feito com os mesmos princípios com estruturas de dados semelhantes, e você pode começar a construí-lo agora.

Eu trabalhei duro, mas não tenho confiança para sair por conta própria e escrever meu aplicativo.

Talvez você não tenha trabalhado duro nos tipos certos de problemas? É bom encontrar problemas que

  • São abertas
  • Tenha mais de uma boa solução
  • Tenha muitas soluções ruins

Se você enfrentar esse tipo de problema, aprende a fazer escolhas, a conviver com as consequências e, se as coisas não derem certo, a voltar e revisar suas escolhas. Você aprenderá mais com seus fracassos do que com seus sucessos, mas ganhará mais confiança com seus sucessos do que com seus fracassos.

Bons problemas - com propriedades como as listadas acima - são como ouro, exceto que se você receber um bom problema de outra pessoa, eles não perdem nada. Vasculhe a web em busca de bons problemas e pratique, pratique, pratique. Se os problemas de Euler são onde você deve começar, eles são adequados para iniciantes. Mas em breve você desejará criar projetos pequenos ou médios que você ache muito legais . Se você está animado com algo que construiu, isso impressionará potenciais empregadores. Se você não está animado, é difícil contratá-lo.

Peter Norvig relata que são necessários dez anos para se tornar um especialista . Claro que você não se sente um especialista logo após se formar. Vou lhe contar um pequeno segredo: a maioria dos membros da faculdade de Harvard (eu fazia parte de oito anos) sente que realmente não pertence a Harvard, não sabe o suficiente e deve ter sido algum erro que eles foram contratados. Esse tipo de sentimento é muito, muito comum para as pessoas que fazem a transição da escola para o local de trabalho ou de um tipo de trabalho para outro. Tão comum que existe um nome para isso: "a síndrome do impostor".

Mesmo que você seja formado, sua universidade ainda conversará com você. Se você teve realmente bons professores, eles provavelmente ainda se preocupam com você. Eles certamente se importam com o fato de uma de suas alunas ter se formado com uma média B e ainda assim sentir que não domina as habilidades básicas de seu ofício. Portanto, procure um ou dois dos professores mais enérgicos e compreensivos do seu programa e obtenha ajuda para encontrar bons problemas. Em seguida, coloque- se no comando de suas habilidades, conhecimentos e sentimentos sobre elas. Crie um pouco de coisa todos os dias e não perca tempo precioso com nada que não seja muito legal. Eventualmente, prometo, você recuperará uma sensação de empolgação com a programação e, depois disso, poderá também criar confiança em si mesmo.


Eu tenho que concordar. Vá lá e prove aos seus empregadores em potencial que você conhece C, Python, Objective-C e constrói um aplicativo independente que faz alguma coisa. As pessoas costumam escolher jogos porque, dependendo do jogo, elas podem envolver um design e implementação desafiadores, e muitas bibliotecas são gratuitas. Se você fazer um jogo para Windows, GDI / + ou DirectX são todos libs grátis para você usar, etc.
DeadMG

A parte "A maioria dos membros do corpo docente de Harvard (eu fazia parte de oito anos) parece que eles realmente não pertencem a Harvard, eles não sabem o suficiente, e deve ter sido algum erro o fato de terem sido contratados". do efeito Dunning – Kruger =)

2
+1 para criar algo: o diferencia da multidão, especialmente se for algo útil.

5
@ Alex, nunca passe por RH. Se você tiver sorte, alguém que você conhece conhece alguém onde deseja trabalhar.
Norman Ramsey

1
Agora que você mencionou, é dessa maneira que normalmente encontro empregos. Acho que talvez no futuro eu deva me concentrar mais nos trabalhos dentro (ou à margem da) da minha rede e me poupar da indignidade dos scanners de palavras-chave.

59

Houve uma cena em uma antiga Lei e Ordem na qual um promotor de justiça reclama que ela não aprendeu nada sobre como fazer seu trabalho na faculdade de direito, que não aprendeu nada sobre o mundo real. A professora a quem ela está reclamando responde: "É uma faculdade de direito, não uma faculdade de advogados".

O mesmo se aplica à ciência da computação. Talvez você não tenha aprendido a contribuir imediatamente para algum projeto que vê online, mas provavelmente desenvolveu a base de que precisa para ter sucesso a longo prazo.

Primeiro, arrume um emprego, qualquer emprego. Torne-se auto-suficiente. Particularmente na economia atual, eu nunca culparia nenhum candidato por trabalhar em uma livraria ou o que quer que seja enquanto procura emprego mais apropriado. Eu tenho perguntas para pessoas que ficam sentadas sem fazer nada.

Encontre um projeto, qualquer projeto. Existem muitos projetos aplicáveis ​​no github.com, por exemplo.

A boa notícia é que, muito antes do que você pensa, ninguém vai se importar onde você foi para a escola, qual era seu GPA ou algo assim.

Mantenha-se firme! Pode ser difícil, mas você ficará feliz com a experiência um dia.


8
Recentemente, discutimos sobre isso no trabalho. Você realmente acha que conseguir um emprego não relacionado à sua carreira ajudará seu currículo? Se você precisar pegar frutas por razões financeiras, tudo bem, mas não acho que isso tenha um lugar no seu currículo se você estiver tentando construir uma carreira como programador. Se você não tiver restrições financeiras melhores para participar de um projeto sem compensação econômica ou tentando montar seu próprio negócio. Participar de projetos de código aberto ou algo relacionado ao campo, mesmo como técnico de campo, é muito melhor na minha opinião.

1
@piotr - Você mesmo disse: "Se você não tem restrições financeiras." Qualquer recém-formado terá esse problema, a menos que morem com mamãe e papai. Concordo com David M - se você não conseguir encontrar um emprego diretamente em seu campo, arrume um emprego. Mostre que você não fica apenas sentado. Então, quando você não estiver trabalhando no seu dia de trabalho, continue aprendendo à noite e compreendendo seu campo por meio de projetos etc. Claro, também ligue e envie currículos.

Qualquer trabalho parece melhor em um currículo do que uma lacuna.
Jim C

No início de sua carreira, um trabalho não relacionado é melhor que nenhum trabalho, na minha opinião. No entanto, não concordo que qualquer trabalho seja melhor em um currículo do que nenhum trabalho. Se houver um bom motivo para "sem emprego", pode ser melhor que "qualquer emprego". Eu sofri voluntariamente longos períodos de desemprego, mas eu tinha boas razões para explicar de maneira coerente.

5
piotr: "Você realmente acha que conseguir um emprego não relacionado à sua carreira vai ajudar seu currículo?" Sim absolutamente. Eu pensaria muito mais em um programador trabalhando na construção durante o tempo de inatividade do que em um programador sentado em casa o dia todo. Mostra uma ética de trabalho. Eu nunca acabei querendo contratar um gênio solitário que fica em casa escrevendo código sozinho. Eles não tendem a saber como trabalhar bem com os outros, ou fazem a parte suja dos trabalhos.

59

Você já olhou para o ProjectEuler ? Eu me ensinei Python fazendo os problemas nesse site. :] Se você está aprendendo Java ou C #, pode tentar isso. Além disso, eu recomendo tentar suas mãos na programação da GUI também.

Editar:

Aqui está um ótimo tópico sobre SO para muitos links que você pode procurar na prática de codificação:

https://stackoverflow.com/questions/662283/websites-like-projecteuler-net


4
Ouvi muito sobre o site, mas nunca tive tempo para tentar os problemas, mas hoje em dia parece que a única coisa que tenho é tempo livre, para que eu possa me manter ocupado.

44
O Project Euler é de pouca utilidade para um programador iniciante que deseja construir conhecimento de programação. Ele é orientado a descobrir como resolver problemas de matemática, codificando algoritmos. Você pode fazer um milhão deles sem se tornar um bom programador (você provavelmente se tornará um ótimo matemático). Escrever ótimos algoritmos não é uma alta prioridade para a maioria dos trabalhos de programação.

1
Eu discordo de Charles - Euler fornecerá motivação para entender certos conceitos e executá-los.
Broam

Usá-lo como Xavier Ho parece interessante e útil. Ou seja, tornando-se mestre no básico de um novo idioma. Suspeito que o PE o ajude na programação (em pequena escala) OU na matemática; para que você possa mergulhar de qualquer maneira. Estes pontos à parte, eu concordo com Charles.

6
pythonchallenge.com é a chave! Enquanto Euler são problemas de matemática a serem resolvidos pela programação, pythonchallenge são problemas de programação puras
Xster

48

Pelo seu nome de usuário, acho que você é uma mulher ... Se não, fique à vontade para ignorar isso ou adaptá-lo ao seu próprio ponto de vista.

Na minha experiência, as mulheres que se formam na faculdade em ciência da computação se consideram muito menos competentes do que suas colegas do sexo masculino com habilidades semelhantes. Pode-se dizer que as mulheres são (ou, para ser exato, mulheres que eu conheço) simplesmente mais honestas em relação às suas próprias deficiências, mas, no final, elas têm mais problemas para vender a si mesmas aos empregadores.

(Passei a maior parte do ensino médio me sentindo um fracasso total em comparação com meus colegas e acabei me formando no topo da minha turma.)

Portanto, meu conselho seria permanecer honesto consigo mesmo e continuar trabalhando duro no desenvolvimento de suas habilidades. Mas não subestime o que você sabe ao procurar um emprego e não se importe em se candidatar a empregos de "alcance".

  • Encontre um mentor que possa lhe dar uma avaliação real do seu valor.
  • Realize entrevistas falsas e aprenda a projetar confiança, energia e paixão.
  • Quando você conseguir uma entrevista, fale sobre seus projetos pessoais e faça perguntas técnicas. Seu desejo de aprender e sua energia são seu melhor patrimônio.

Adicionado como uma reflexão posterior:

  • Quando você conseguir seu primeiro emprego, não tenha medo de negociar seu salário. Muitas mulheres simplesmente aceitam a primeira oferta com gratidão e nunca conseguem o que merecem.

Isto está relacionado ...
Paul Nathan

+1, todos os bons pontos. Encontrei sentimentos semelhantes com colegas do sexo feminino quando estava na escola.
Heather M

6
Não é apenas uma coisa feminina; As pessoas que já são competentes ou são capazes de perceber que precisam crescer (sim!) Tendem a questionar sua própria competência mais do que aquelas que não começam a suspeitar de sua própria incompetência. Existe um nome para esse fenômeno. O efeito Dunning – Kruger. Sua experiência na escola tem sido um sucesso fenomenal se você deixar a escola capaz de continuar seu caminho de aprendizado ao longo da vida, em qualquer carreira que você acabe. Desejo-lhe boa sorte !!!
Warren P

1
Warren: Absolutamente verdadeiro; muitos dos meus colegas menos sinceros tiveram o mesmo problema. Em muitas culturas ao redor do mundo, inclusive na América do Norte, as meninas não são incentivadas a competir agressivamente e a mostrar suas habilidades tanto quanto os meninos, então eu vi essa característica com mais frequência nas mulheres. Mas definitivamente não é apenas uma coisa feminina.

Resposta incrível, eu concordo totalmente. Além disso, notei na minha turma de formandos que as mulheres que se destacavam eram frequentemente as melhores alunas. (O que significa, infelizmente, um monte de mulheres que desistiram poderia ter feito programadores perfeitamente competentes ...)

39

Muitas pessoas disseram que você deveria iniciar um projeto pessoal. Na minha opinião, este é o melhor conselho aqui. Eu acrescentaria algumas coisas que não vi quando li as outras respostas ...

  • Escolha algo em uma área que você é apaixonado sobre . O melhor lugar para descobrir isso talvez seja do seu interesse, fora da ciência da computação. Pode ser uma organização sem fins lucrativos em que você está envolvido, um hobby pelo qual se apaixona, um esporte que pratica.

  • Encontre um colaborador . A codificação sozinha é difícil, então outra coisa que ajudaria enormemente seria se você encontrasse um amigo para colaborar com você nesse projeto. Isso torna muito mais divertido e mantém você motivado. Em seu recente post no blog, Jeff Attwood fala sobre isso exatamente em sua experiência em criar SO. http://www.codinghorror.com/blog/2010/05/on-working-remotely.html

  • Escolha algo modesto (inicialmente) . O projeto ideal começaria com algo pequeno. Se o objetivo fora do portão for muito ambicioso, será muito assustador. Tendo desenvolvido o desenvolvimento para PCs, telefones, sistemas embarcados e a web, eu diria que a web é o melhor lugar para procurar algo realizável que outras pessoas possam começar a usar imediatamente.

  • Se possível, escolha algo que outras pessoas usem . Mesmo se você tiver apenas dez "clientes", a sensação de ter outras pessoas usando o que você construiu é como uma droga. Incrivelmente gratificante. Aprender com os clientes e responder a eles também é uma experiência de aprendizado valiosa.

Se esse projeto é um trabalho de amor no qual você trabalha feliz durante a noite e depois sai da cama na manhã seguinte para voltar a fazê-lo, coisas boas se seguirão. Você aprenderá, a confiança aumentará. E uma vez que você tem algo por aí que as pessoas podem ver, torna-se o começo do seu portfólio. Nada impressiona os programadores e os gerentes de contratação (decentes) do que algo real.


Se possível, escolher algo que outras pessoas vão usar ... isso é a melhor maneira de obter feedback
balalakshmi

34

Alguns comentários, da perspectiva de alguém que é desenvolvedor há mais de 20 anos:

Eu vejo sites como o Stackoverflow e mecanismos de pesquisa como o Google e não sei onde eu começaria a escrever algo assim.

Eles são o produto de equipes, principalmente baseadas em bibliotecas e infraestrutura (.net, java, asp.net etc.) produzidas por outras equipes e apoiadas em experiência e recursos. Que você, individualmente, não saiba por onde começar a fazer algo semelhante, é completamente compreensível. Não se preocupe com isso.

Durante um verão, tive a oportunidade de trabalhar como desenvolvedor de iPhone, mas senti como se estivesse colando bibliotecas que outras pessoas haviam escrito com pouca compreensão da mecânica que acontecia sob o capô.

Muito trabalho de desenvolvimento é agora assim, receio. Mas há muito espaço para se fazer um trabalho interessante 'em cima' dessas bibliotecas. E não se preocupe em achar algoritmos difíceis - você quase nunca precisará implementar uma lista rápida, lista vinculada ou qualquer outra coisa durante sua carreira. É para isso que servem as bibliotecas.

Basicamente, estou me graduando em Ciência da Computação, mas não sinto que aprendi a programar.

Saber programar e saber como funcionar como desenvolvedor profissional são duas coisas muito diferentes. Você só precisa de alguma experiência, de preferência trabalhando com outros desenvolvedores em sistemas do mundo real. Tente adicionar C # ou Java ao seu conjunto de habilidades - não há muita diferença entre eles, portanto o conhecimento é transferível. Cuidado para se tornar muito especializado cedo demais. Você pode ter que aceitar que não ganhará muito dinheiro imediatamente. Portanto, mantenha seus custos pessoais baixos por um tempo, se puder.

Comece a trabalhar no projeto que você mencionou, mas, além de aumentar seu conhecimento de programação, tente usá-lo para obter experiência em habilidades relacionadas, como controle de versão, teste de unidade e integração e até escrever documentação simples. Esse tipo de habilidade é o que distingue um desenvolvedor de um programador e é uma boa vitrine para um possível empregador. Existem muitas ferramentas gratuitas disponíveis (as edições expressas do Visual Studio, github, nunit, aplicativos do Google) que podem ajudar.

Pelo que você escreveu, parece que seu diploma de CS o ensinou a pensar em problemas técnicos. Você também parece ter um bom nível de autoconhecimento, inclusive sobre seus limites e experiência técnicos atuais. Use-os como vantagens. Agora não é um bom momento para entrar no mercado de trabalho, mas se você trabalhar duro, ficará bem. Não se preocupe, aprenda, obtenha experiência, mantenha-se atualizado, tente fazer o que gosta.

Boa sorte!


"você quase certamente nunca precisará implementar uma lista rápida, lista vinculada ou qualquer outra coisa durante sua carreira" Na minha posição atual, tive que implementar uma lista rápida para uma lista vinculada personalizada por escrito. Não tive que implementar a lista. Há um valor definitivo em saber como as coisas básicas funcionam.

Concordo que um bom desenvolvedor deve saber como essas estruturas de dados e algoritmos básicos funcionam e ser capaz de implementá-los. Eu tive que rolar minhas próprias listas vinculadas algumas vezes, mas nunca (felizmente para mim) tive que escrever um resumo rápido. Meu argumento era que o OP não deveria se preocupar muito com os algoritmos que ela pode ter estudado durante sua graduação, porque muitas linguagens / plataformas (.net, Java, C ++ etc.) provavelmente incluirão implementações pré-escritas.

31

Programar não é tudo sobre sua compreensão de algoritmos ou seu GPA durante a faculdade. Programar é ter a capacidade de pensar fora da caixa, desejo e vontade de aprender e, acima de tudo, criatividade.

Em uma nota pessoal, eu tinha acabado de me formar na faculdade em maio passado e tinha um GPA terrível. Eu me concentrei mais na minha vida social do que na academia e paguei o preço.

No entanto, durante minha recente entrevista de emprego fora da faculdade ( que me levou menos de um ano para chegar à terra ), mostrei minha criatividade, paixão pelo aprendizado e habilidades analíticas, que me ajudaram a conseguir o emprego.


27

Nota: Espero que este post seja votado com voto negativo. Esta não é uma resposta ao pôster original, mas uma observação sobre a maioria dos comentários que li acima.

As respostas que estou lendo acima estão realmente me assustando. Parece haver um sentimento quase universal de que os diplomas de graduação são inúteis ou não são relevantes ou não ensinam nada. Os graus comp.sci realmente se tornaram tão ruins ou tudo isso é apenas ar quente de desenvolvedores sem graus tentando justificar sua falta?

Sério gente, o que eles estão ensinando hoje na universidade? Quando você se forma no ensino médio (pelo menos quando eu era estudante) quando se formava, você tinha uma boa noção do design do compilador, comp. complexidade, métodos e lógica formais, um zoológico inteiro de estruturas e algoritmos de dados, pesquisa básica de operações (LP etc.), bancos de dados, criptografia e segurança, algoritmos de agendamento, protocolos de rede, desenvolvimento da Internet, design de SO e kernel, algoritmos paralelos e estruturas de dados, algoritmos numéricos e muito mais. O lote todo é normalmente complementado por um grande projeto de programação que faz parte da dissertação final. Não me diga que os graduados em comp.sci não recebem programação prática suficiente.

Também aprecio o fato de que alguns dos graus mais tradicionais de comp.sci omitem alguns aspectos do ciclo de desenvolvimento de software; provavelmente você não ouvirá muita conversa sobre TDD, teste de unidade. Mas sejamos brutalmente honestos: não é realmente ciência do foguete, é? Você também não ouvirá sobre o SCRUM ou a análise de pontos de função. O ensino de cursos detalhados sobre questões básicas seria bastante redundante, embora muitos diplomas hoje em dia tenham um curso sobre design de sistemas, onde eles dão aos alunos uma idéia de como essas coisas funcionam.

É verdade que você pode não ser um especialista em .NET, PHP ou outros padrões atuais do setor, mas isso deve ser irrelevante. Dentro de 5 a 10 anos, os idiomas escolhidos terão mudado de qualquer maneira. Só porque você aprende a dirigir em um Peugeot não significa que você não deve dirigir um Fiat, e o mesmo se aplica às linguagens de programação. Deve levar alguns meses para praticar, com alguns bons livros, a competência para trabalhar em qualquer idioma.

Certamente, se alguma coisa é uma perda de tempo, são essas "certificações" caras, que basicamente envolvem a realização de um exame eletrônico de múltipla escolha e perguntam sobre minúcias (geralmente sem sentido) de uma arquitetura ou idioma específico. Eles tendem a medir a competência de um programador por seu conhecimento de certos casos de programação patológica.

Trabalhei no setor de TI em várias empresas e também participei do processo de entrevista para outros desenvolvedores de software. Fizemos algumas das perguntas usuais do fizzbuzz, mas elas eram direcionadas principalmente a pessoas sem treinamento formal ou estagiários. Eu nunca conheci um graduado em comp.sci que não é capaz de responder a perguntas básicas e não tão básicas sobre programação.

Nota: Eu moro na Europa e sei apenas sobre diplomas universitários europeus. No entanto, tenho certeza de que o padrão universitário nos EUA é muito superior ao da UE.


4
É da mesma maneira que todos se sentem em todos os graus quando os recebem. A escola em geral o prepara para uma ampla variedade de situações. Quando você começa a trabalhar, pode se especializar e talvez sinta que gastou toda essa energia na escola, mas como sabia o que ia acabar fazendo? É mais seguro aprender muito sobre o que você pode aproveitar do que nunca ter aprendido nada sobre isso.

1
Eu vejo os dois lados da discussão. Eu conheci alguns diplomas realmente inteligentes do CompSci, mas também conheci alguns caras com diplomas do CompSci que agora estão trabalhando em um call center porque não se importavam muito com o CompSci. Aprendi muito nos meus cursos do CompSci, mas tenho que admitir a maioria das habilidades técnicas que me deram empregos que aprendi fora da escola no meu tempo livre. Quando entrevisto para trabalhos de engenharia de software, eles geralmente testam seu conhecimento para tecnologias específicas, estratégias de solução de problemas e habilidades interpessoais. Nenhum dos quais é explicitamente ensinado na faculdade.
Cerin

1
Eu conheci dezenas de graduados em CS - enquanto os entrevistava - que não conseguiam explicar nenhum algoritmo de classificação, mesmo que deixassem de pensar por cinco minutos. Talvez o padrão universitário aqui nos estados não seja aplicado inteiramente de maneira geral. Como o @Chris S salienta, é fácil o suficiente passar por um diploma sem aprender muito.
Dean J

Você está misturando duas coisas aqui. Achei um diploma incrivelmente útil - sei que me tornou um codificador muito melhor, mas nunca consigo descobrir exatamente por que (presumivelmente uma combinação de pouco conhecimento e uma melhor abordagem para a solução de problemas). Dito isto, existem muitos graduados por aí (de uma universidade bastante prestigiada) que nem conseguem descobrir como implementar (9,5) o ECC com uma tabela de consulta de 512 bytes. Os bons codificadores são aqueles que vão além de “eu não entendo isso, mas posso fazer as perguntas do exame”.

1
problema interessante, mas por que você faria normalmente um teste ECC;), exceto o hardware, é claro? Mas é um bom exemplo de material de auto-aprendizagem que você não pode / não pode? aprenda em compSci

24

Sua humildade irá atendê-lo bem. A Mente do Iniciante é útil para todos os tipos de aprendizado, não importa quanta educação e experiência tenhamos.

Faça exercícios, como outros sugeriram - no Projeto Euler e em outros lugares.

Crie soluções para ajudar outras pessoas aqui no SO. O exercício de entender a pergunta, determinar o que você sabe que pode ser aplicado e finalmente articular uma resposta ajudará a aumentar sua confiança, à medida que os exercícios aumentam suas habilidades.

Fique com ele; Você vai ficar bem.


9
A humildade irá atendê-lo bem, exceto quando isso não acontecer - para entrar na porta ( inclusive em um projeto pessoal), você precisa de uma certa quantidade de chutzpa, pode até precisar estar irracionalmente confiante.

@Ian, aceito humildemente sua correção. ;-) Sério - é um bom argumento e um bom artigo. Não gosto da conclusão de que as mulheres devem ser idiotas como os homens, mas é difícil argumentar com a praticidade disso.
Carl Manaster

@Carl - conclusão muito rápida :-) A contratação de gerentes / gerentes consome essa arrogância / autopromoção. Especialmente ao avaliar candidatos para posições técnicas das quais eles não começam a entender os requisitos. Eu já vi muitos homens muito qualificados no mesmo barco que essas mulheres pobres, quando uma pessoa super confiante e auto-promotora aparece e rouba o show. Acho que não podemos considerar uma vitória encorajar mais mulheres a serem super-confiantes. O lugar onde podemos fazer o melhor, IMHO, é treinando o pessoal de RH para tomar melhores decisões ou reformulando o processo.

23

Formar-se com um diploma de mestrado em ciências da computação não o torna um ótimo programador do que se formar em um programa de música o torna um ótimo músico.

Não há substituto para a prática, prática, prática e experiência. Programe 8 horas por dia e em 5 anos você pode ter o entendimento que lhe falta no momento.


6
Esse é um problema, não é? Programe em tempo integral para conseguir o emprego que deseja.
Jim Schubert

16
Não, em 5 anos você vai perceber que você não sabe nada :)
Earlz

1
@Earlz, e o nada que você finalmente sabe já está obsoleto.
Dan Bryant

4
De fato - com todas as "escolas Java" (que podem ou não ter sido o caso aqui), é fácil esquecer que a ciência da computação não está programando. Conheço pessoas que se formaram em ciências da computação e estudaram medicina e biólogos que acabaram como programadores. No entanto, ninguém nunca pergunta por que um diploma de biologia não os transformou em cirurgião: todo mundo sabe que estudar biologia não está praticando medicina.

1
@Earlz how Zen ()
Tullo_x86

23

Uma pergunta tão sincera, ótimas respostas - vou gritar brevemente :)

As respostas até agora me fizeram rir um pouco - elas potencialmente comemoram nossa própria grandeza um pouco ironicamente. Eu venho para o SO por causa da documentação e erros ruins nas estruturas. Obviamente, há outro ouro aqui, mas vale a pena manter sua humildade, mesmo que você se torne um grande desenvolvedor - e digo isso da perspectiva da arrogância histórica (?) Pessoal.

Lembre-se de que você não pode (provavelmente não está) ser contratado por um técnico, embora pessoas e gerentes de RH melhores usem um técnico para avaliar você.

Os empregadores têm um plano para seus funcionários, tentam perceber o plano o tempo todo e se prendem a ele com respeito, talvez dando a ele um toque pessoal e aprimoramento. Dificuldade e oportunidade podem surgir quando um empregador realmente não tem um plano específico - fazer boas perguntas e ajudá-lo a especificar o plano pode realmente fazer você se destacar nessas situações.

Os empresários podem (com razão) ficar paranóicos com os desenvolvedores que os apadrinham, já que muitas vezes precisamos gerenciar um pouco suas percepções para ajudá-los com decisões que eles não entendem - e eu digo isso, de boca aberta, para mostrar a perspectiva de NÃO ter ou desenvolva seus colegas de trabalho não técnicos. Humildemente, acho importante entender que essa é a essência das relações entre técnicos e não técnicos - e é difícil evitar o que fazemos é obtuso.

Ser profissional, de mente aberta e respeitoso consegue empregos - se você é confuso com o que é profissional, tenho certeza de que há lugares para resolver isso na web - eu gostaria que alguém tivesse apontado isso para mim quando comecei. :)

A última coisa que eu diria é que, à medida que você melhora o desenvolvimento e a arquitetura e já parece que entrou nesse caminho, pode descobrir que seu código profissional pode se tornar intensamente insatisfatório, mesmo que seja o solução apropriada.

Não sei ao certo qual é a solução, mas tente encontrar uma saída e se envolva menos emocionalmente em seu trabalho. Isso ajudará você a se acelerar e viver uma vida melhor - tenha cuidado especial ao tentar fazer um esforço extra para fazer algo "certo" - na maioria das vezes você criará complicações para seus colegas de trabalho e quase nunca poderá dedicar o tempo necessário para realizá-lo dentro do prazo de seu projeto. Um sintoma disso é "escurecer" - quando você não quer explicar o que quer fazer com ninguém. Muitos dos melhores desenvolvedores podem explicar a essência do que estão fazendo com uma pessoa leiga - essa é uma grande habilidade para aprender e eu achei intelectualmente libertador para a prática.

Heh, e ao estimar, para começar, divida sua tarefa em bits, totalize o tempo e depois dobre (é chamado, divida, conquiste, marque em casa;)

Boa sorte! Saí da escola esperando ser instrutor de esqui e acabei como desenvolvedor líder. Tenho certeza de que você também se sairá bem no que quer que seja.


10
Sua primeira sentença disse que você gritaria brevemente ... mas você tem uma das respostas mais longas aqui. ;)

+1 em "divida sua tarefa em bits, totalize o tempo e, em seguida, duplique-a (é chamada, divida, conquiste, marque em casa;)" ... ... mesmo que em muitos trabalhos, você deve quadruplicá-la, pois os gerentes esperam que isso seja feito. metade do tempo e adicione outro projeto que deve ser realizado no mesmo período, sem permitir a extensão de sua estimativa. Eu até ouvi falar em "multiplicar por dois e aumentar a unidade (1 hora => 2 dias, 1 dia => 2 semanas, 1 semana => 2 meses, 1 mês => 2 trimestres, 1 trimestre => 2 anos, .. .) e depois de alguma experiência de trabalho real não é tão engraçado quanto eu sempre pensei

apenas imprimi isso e colei na parede
Qual é a pergunta

22

Sim, é razoavelmente normal - a maioria das escolas, mesmo as de prestígio, faz um ótimo trabalho no ensino de ciências da computação e um péssimo trabalho no ensino de desenvolvimento de software. Isso está melhorando lentamente, mas ainda há um longo caminho a percorrer.

De qualquer forma, parece que você está fazendo a maioria das coisas certas:

  • Programa fora do trabalho
  • Leia livros sobre desenvolvimento de software (código completo, padrões de design, mítico homem-mês, etc.).
  • Continue aprendendo novas tecnologias - a escola deveria ter ensinado a aprender idiomas, não os próprios idiomas. Aprenda novas estruturas, IDE, APIs, bibliotecas, ferramentas de construção, etc.
  • Ande por aí em sites como o SO e aqui. Interagir com pessoas experientes regularmente é um dos poucos semi-atalhos para a sabedoria.

1
Honestamente, Mythical Man-Month é um pouco superestimado, não é? (Mas eu realmente gosto dos livros "* in a Nutshell").
Camilo Martin

2
@Camilo discorda. O Mythical Man Month é sobre engenharia de software, enquanto os livros de resumo são apenas sobre uma única tecnologia. Eventualmente, você precisará entender os problemas das pessoas com o desenvolvimento de software. O MMM é uma daquelas leituras que abordam o tópico.
Brian Wigginton

21

Realmente ótima pergunta. Tenho certeza de que muitas pessoas estão passando exatamente pelo que você descreveu em todas as esferas da vida e no mercado de trabalho.

Primeiro - não precisa mais se preocupar com coisas que estão fora de seu controle. Você não tem permissão para se estressar ou sequer pensar na escola, no que aprendeu ou não, ou no desempenho acadêmico.

Segundo - especialize-se. Sempre haverá demanda por pessoas realmente boas no que fazem, mesmo que o que fazem seja obscuro. Você precisa escolher sua linguagem de programação favorita e resolver dominar completamente essa linguagem e "criar sua própria linguagem". Você já tem muitos bons conselhos sobre como melhorar as habilidades de programação, mas no final do dia nada se compara a encontrar um livro oficial sobre o assunto e trancar-se em seu quarto por alguns dias, enquanto você não faz nada além de ler todas as páginas e escrever todos os exemplos que o livro fornece.

Terceiro - anuncie a si mesmo. Nesta história da ciência da computação, essa etapa nunca foi tão fácil quanto é hoje. As respostas que você dá e as perguntas que você faz no SO são o seu currículo. Assuma a responsabilidade de se tornar a principal autoridade em SO para o idioma que você decidiu dominar. Assuma a responsabilidade por qualquer pergunta que venha através deste servidor com sua etiqueta, mesmo que isso signifique horas de extensa pesquisa e respostas tardias. Pesquise nos arquivos e leia todas as perguntas já feitas no SO sobre seu tópico. Corrija desinformação, forneça suas próprias respostas e variações de respostas e combine algumas respostas existentes em uma melhor resposta. Inundar SO com um fluxo interminável de comentários, respostas e edições deve ser sua razão de ser (mais sua diversão, porque você ganha pontos de reputação).

Quarto - trabalhe com sua imagem pública. A autoconfiança é essencial para conseguir o melhor emprego. As empresas querem pessoas que sejam excelentes colegas de trabalho, colaboradores e comunicadores. Se você acha que isso pode ser um problema, diga a seus amigos que você precisa deles para impulsionar seu ego e encher você de infinitos complementos; em seguida, vá à sua biblioteca local e escolha um deles .


2
+1 por mencionar a importância das habilidades de colaboração / comunicação. A maioria dos graduados não os possui.
Denis Otkidach

1
Eu não concordo com a especialização, toda tecnologia morrerá um dia, por isso, se você se especializar demais, acaba sem trabalho ... ok, algumas tecnologias (=> COBOL) morrem muito lentamente, permitindo tempo suficiente para se especializar em uma nova tecnologia mas ainda é arriscado.

1
A especialização tem seu lugar, mas não tenho certeza de que sair da faculdade é a hora certa. Eu também argumentaria por oferta e demanda - parte do truque da especialização é encontrar o nicho que precisa ser preenchido, e não o que já está cheio. (e na frente da COBOL - há alguns anos, minha companheira de avião em um avião parecia ter 20 e poucos anos, mas estava lidando com um projeto portando um sistema legado ... e como eu entendi -lo, eles ainda estavam furando com COBOL, apenas teve que se mudar para um novo hardware - por isso há potencialmente uma nova geração de programadores COBOL lá fora)

21

Ok, então vi essas notícias sobre hackers e eu fiquei tipo "CRAP SANTA QUE SOU EU !!"

Então, me formei em dezembro passado com um diploma em CS e senti que, de alguma forma, eu havia conseguido passar nas aulas e obter um diploma sem realmente obtê-lo. Parecia que todos os meus colegas de classe tinham habilidades de codificação incríveis e tudo que eu podia fazer era criar programas Java básicos. Aprender a codificar e se tornar um bom codificador leva muito tempo. Há muitíssimas coisas por aí para aprender e meu conselho é apenas levar um pouco de tempo. Você aprenderá as coisas à medida que avança. Como todo mundo está triste, a melhor maneira de aprender é fazendo especialmente com a codificação. Sem mencionar que há muito sobre a criação de aplicativos que eles nem sequer se incomodam em contar na escola. Não se sinta mal, apenas saiba que há muito por aí para você aprender e perceba que levará tempo para aprender.

Eu acho que você definitivamente deveria olhar além da cidade onde cresceu. Há uma tonelada de empresas contratando graduados em CS e nem todas exigem ou esperam que você seja um grande programador logo após a escola. Houve muitas entrevistas em que não recebi nenhuma pergunta sobre codificação (também houve muitas que me pediram para resolver algoritmos e codificar). Inscreva-se em empresas que se preocupam mais com a sua capacidade de aprender do que com o que você já conhece (na minha experiência, empresas maiores se importam mais com isso, porque isso não afetará tanto elas se você não conseguir criar o código imediatamente).

Não sei se a codificação é algo que você deseja fazer e buscar, mas também há muitos trabalhos não técnicos que exigem uma formação técnica. Você pode olhar para essas opções.

Eu não focaria em aprender os meandros de uma linguagem como C # ou Java e focaria nos princípios de programação. Você deve ser capaz de transferir boas habilidades de codificação e aplicá-las em qualquer idioma (isso é importante para a longevidade de sua carreira .. Java não ficará quente para sempre). Por outro lado, conhecer as "habilidades quentes" pode ajudar a conseguir um emprego. As habilidades de entrevista são REALMENTE importantes. Faça todas as entrevistas que conseguir, mesmo que seja apenas para praticar.

De qualquer forma, não pense que grandes empresas como a IBM estão fora de seu alcance. Senti o mesmo que você há alguns meses atrás e trabalho na IBM agora. Meu GPA também não foi tão bom. Ainda sou péssimo em programação, mas sei que vou melhorar com o tempo. Basta ter confiança na sua capacidade de aprender!


1
Eu diria que grandes empresas como a IBM estão mais acessíveis do que muitos outros lugares - elas têm pessoas suficientes para treinar seu pool de talentos, ao contrário de lugares menores onde se espera que você atinja o chão. E sempre há estágios - pode ser um pouco tarde já formado, mas muitas agências governamentais trazem estagiários de verão ... para que você possa obter essa 'NASA' ou similar em seu currículo.

20

Uau, que muita resposta antes desta.

Que tal uma resposta completamente diferente ...

Vamos reformular o seu problema em termos de ser humano.

"Eu me formei na aula de concepção e estou prestes a nascer. Minha mãe está coroando e devo ser entregue amanhã de manhã. Mas quando olho para atletas como Usain Bolt , penso" como posso correr isso? velozes?".

Mas aqui está você, você é um ser humano de pleno direito, passou pela escola, pode andar, conversar e, se fez um curso de computação, é bastante inteligente em iniciar. Nada do que se envergonhar.

Agora, Usain Bolt nasceu e, de repente, começou a colocar tempos insanos na pista, ou foi uma grande quantidade de vida, descobrir o que ele estava interessado, seguido por uma quantidade incrível de aplicações e de repente " Bam! " ele estava lá.

Provavelmente o último. Portanto, não se preocupe por não saber o que deveria estar fazendo. Leva tempo para descobrir o que é certo para você. Isso é para você , não o que seus pais pensam, não o que seus colegas pensam. O que é certo para você . O que acende o seu fogo . O que faz você pensar * sim, isso é legal ", mesmo quando todo mundo pensa que é calça.

Não é incomum começar (e / ou) deixar seu diploma sem ter idéia do que você quer fazer.

Para mim, eu era bom na escola nos níveis O (uma qualificação no Reino Unido), mas não dava a mínima para os níveis A (necessários para ingressar na Universidade para fazer um diploma). Então, fui para um lugar menor para fazer meu diploma (e, como resultado, não o diploma que eu preferiria). Mas eu o destaquei (ainda sem ter idéia do que eu queria como carreira) e aprendi muito sobre eletrônicos e outras coisas que a maioria dos caras de software nunca aprende. Durante esse período, trabalhei como freelancer em jogos de computador.

O resultado final? Depois de me formar (com elogios), entrei em um emprego com uma entrevista de emprego com um salário mais alto do que aqueles que usavam eletrônicos retos e não tinha trocado de cabelo ou usava terno. O que? Bem, aos 23 anos, essas coisas são importantes (olhando para trás agora, aos 44 anos, eu meio que ri disso, mas isso é a vapidez da juventude para você).

Essa empresa faliu e então comecei a ficar mais sério. Mas provavelmente não foi por mais alguns anos até que de repente eu encontrei (por acidente) o que realmente me interessava. Acabou sendo ferramentas de software de baixo nível. Deveria ter sido óbvio - todos os jogos de computador que escrevi foram escritos em montagem, eu sempre gostei das coisas de baixo nível que ninguém mais conseguia entender. Mas, para ver isso como um futuro, é preciso mais maturidade e nenhuma surpresa de que ele não tenha se manifestado até os 20 anos.

Muitas vezes fico impressionado (e espantado) que os jovens, muitas vezes ainda na adolescência, pareçam saber o que querem fazer. Mas a verdadeira questão é: eles ainda estão fazendo isso aos 27 anos? Ou eles mudaram de curso porque suas idéias iniciais não eram corretas para eles?

Em termos de como faço algo tão impressionante quanto ISSO (seja o que for, Google, SO)? Bem, você faz isso em partes, assim como faz software e tudo mais na vida. Você começa com o básico, obtém experiência nele. Se você é bom o suficiente, continua e obtém mais experiência, etc., ou o abandona porque percebe que não é bom o suficiente ou que é tão chato como o inferno (é por isso que eu não faço comunicações, mesmo que seja sempre foi uma mina de ouro. Para mim, é chato!).

Por todos os meios, olhe para seus colegas, olhe para os mais velhos, examine suas escolhas e interesses. Mas examine o seu também. Muitas vezes, o que à primeira vista parece louco / maluco é realmente o verdadeiro negócio. Fazer algo que você achar interessante (em vez de apenas pagar as contas) é MUITO mais gratificante.

Sim, eu sei que, aos 23 anos, você está focado no Audi TT e no flat legal e, portanto, tentado por dinheiro, em vez de escolhas de carreira sensatas, mas sério, em algum momento, você perceberá que o carro legal não está totalmente quebrado ser - essa garota deve gostar de você por quem você é, não pelo que você dirige.

Sério, pense sobre isso. A solução não tão legal pode ser apenas a resposta certa.


-1: Você poderia reforçar isso um pouco e se concentrar mais na pergunta e menos em você?
Jim G.

2
Não é sobre 'eu', é sobre como cheguei daqui até aqui sem saber inicialmente onde 'aqui' é. Estou apenas usando minha própria experiência como exemplo, porque conheço minha experiência melhor do que a experiência de outra pessoa. Se você lê como sobre mim, você lê da perspectiva errada. Freqüentemente, se você "endurece" as coisas como você diz, não fornece um pano de fundo para o ponto de vista que está sendo expresso e deixa o leitor confuso. Eu poderia ter escrito "Eu não tinha ideia do que queria fazer quando me formei, mas agora faço blá blá". Isso não inspiraria ninguém a continuar - nenhuma "verdadeira razão para acreditar" (TM).

Boa resposta, Stephen. Apenas a partir de um ponto de vista diferente das outras respostas aqui.

+1, Gostaria de poder adicionar 1000 votos para tornar isso a resposta principal. Me tocou!

18

Além dos ótimos conselhos dados por outras pessoas, eu acrescentaria a participação em eventos de desenvolvedores em sua área. Procure reuniões, grupos de usuários, campos de barra, campos de código, etc. Isso ajudará você a interagir com outros desenvolvedores, obter oportunidades de emprego, acompanhar as novas tecnologias e fornecer uma visão realista dos níveis de habilidade de outros desenvolvedores.


Eu quero falar sobre isso. Fazem isto. Eu saí de uma escola de tecnologia trabalhando em registros médicos em um hospital. Comecei a ir às reuniões locais do .NET. Levou algum tempo, mas finalmente conseguiu uma posição em uma empresa de desenvolvimento que oferece suporte a servidores e aplicativos. Embora não seja meu objetivo final na vida, ele supera a digitalização de arquivos médicos.

17

Siga a regra das 10.000 horas.

Para se tornar um mestre em algo, você precisa praticar por pelo menos 10.000 horas. Portanto, gaste 10.000 horas de programação e você se tornará um mestre nisso. Se você não passou 10.000 horas programando e não se sente um mestre da arte, não fique desanimado, gaste mais tempo codificando.

Observe também que você provavelmente levará cerca de 3 anos e meio para fazer isso se programar 8 horas por dia. Se você programar apenas durante o horário comercial, provavelmente levará cerca de 4 anos. Se você não gastou tanto tempo durante sua graduação de 3/4 anos, provavelmente não se sentirá um mestre.


1
e você precisa se certificar de que não está fazendo a mesma hora uma e outra vez! Esforce-se para continuar aprendendo.
Froome 13/01

+1 para regra de 10k. Ouvi falar pela primeira vez, mas soa muito bem em termos de marketing e é muito real.

14

Apenas alguns pensamentos, se eu puder.

Wendy diz que alguém pode se formar com um diploma em ciências da computação, mas tem pouca idéia da prática da programação. Isso não é extremamente preocupante, nem mesmo horripilante? É tão perturbador quanto a fraude que submergiu os departamentos de inglês nos anos 70: a literatura não é uma coleção de idéias que se pode entender e integrar, mas um monte de 'textos' que o aluno deve abstrair e 'desconstruir' ( http: / /www.answers.com/topic/deconstruction ). Felizmente, essa maré fétida está diminuindo, talvez porque os instrutores que acabaram com seu surto de ervas daninhas estejam se aposentando agora.

Anos atrás - décadas atrás - meu primeiro curso em CS me ensinou a linguagem assembly (antes de C ser inventada) usando problemas reais como classificação, hash e pesquisa (e, sim, recursão). Meu segundo curso ensinou o design e a realização de um compilador de trabalho real. Eu era estudante de meio período no MIT e esses dois cursos eram tudo o que eu precisava para começar a ser pago como programador; e se tornar um pouco produtivo dois ou três meses depois.

Então, nesta manhã, ouvindo o grito de Wendy, acho que certamente o MIT, de todos os lugares, não pode ter diluído suas ofertas e iludido seus alunos com (no contexto da prática de programação) porcaria praticamente inútil. Mas quando olho para o currículo de EE / CS do MIT, vejo que foi exatamente o que aconteceu:

http://student.mit.edu/catalog/m6a.html

Percebo particularmente que o departamento usa Python como / a linguagem de ensino! Quero dizer, sério! Parece que um diploma de CS no MIT significa qualificar um aluno para se tornar um professor de CS no MIT. Fale sobre recursão!

Então me deparei com essa contribuição para o Coding Horror ( http://www.codinghorror.com/blog/2006/07/separating-programming-sheep-from-non-programming-goats.html ) e pensei muito bem ao ponto desta conversa:

"Sou um retardatário dessa discussão [sobre prever o sucesso de candidatos a programadores], mas, em minha experiência como graduado em ciências da computação de 30 anos, descobri que as aulas de programação são inúteis e menos ensinadas como Eu só estive em uma faculdade comunitária e depois na Universidade de Illinois em Chicago, mas as aulas de programação introdutórias eram:

"1. Orientada a objetos, que deixou os alunos com pouco ou nenhum entendimento dos métodos processuais, e

"2. Aulas de eliminação de ervas daninhas. As aulas consistiam principalmente de descrições de diferentes tipos de problemas e da matemática por trás deles, em vez de ayntax e estrutura, para as quais as pessoas deveriam ler o livro.

"O código mal foi reconhecido diretamente até o núcleo das estruturas de dados e, em seguida, ainda dependia de qual instrutor você tinha, alguns sendo muito leves e alguns pesados ​​demais. Você poderia dizer que era uma grande tentação para os professores serem leves" neste ponto, porque se eles se concentrassem no código, também teriam que se concentrar em ensinar aos alunos que estavam em um curso de ciência da computação por dois anos como programar.

"Como a codificação é um hobby para muitos jovens, acho que as instituições de ensino se basearam nisso para estabelecer suas curvas de aprendizado esperadas, deixando as pessoas que tinham pouca ou nenhuma experiência em programação quando ingressavam na escola sem escolha a não ser trapacear como loucas, gastar tudo do seu tempo livre estudando código ou trocando de curso, e isso não é necessariamente um déficit no pensamento abstrato em minha experiência, porque todos que eu conheço que abandonaram o ensino médio acabaram na Engenharia Elétrica, o que não é nada para mudar. na frente abstrata.Eles ainda não sabem programar, enquanto fazem matemática que eu não consigo entender. Memórias mais absurdas:

"1. Java como a linguagem de programação necessária. Não vou basear o Java aqui, mas não seria bom que os alunos aprendessem sua própria coleta de lixo? E os ponteiros não seriam uma boa coisa para aprender, mesmo se nunca decidirmos programar um idioma com eles novamente?

"2. Tomando uma aula básica de teoria de sistemas operacionais, depois de ter sido inundado com Java, e descobrindo que estava em C (é claro) sem sequer uma aula em C no campus?

"É claro que tenho trinta anos e também sou uma daquelas pessoas que sempre programava, então não tive problemas, mas vi muitas pessoas que eu sabia que eram melhores em abstração do que eu (das aulas de Cálculo, DiffEQ e física antes). ) e sua total agonia ao tentar concluir um programa que havia sido empilhado contra eles ".

Apenas alguns pontos de dados, mas, como outros já disseram, assustador.

- Pete


Estou tão cansado desse ponto de vista cansado.
Andres Jaan Tack

Python é uma das melhores linguagens de ensino na existência
Casebash

@Icplben, Pete ou Jamaal de codinghorror.com?
Zaki

14

Em primeiro lugar, aguente firme!

Em segundo lugar, aqui estão algumas coisas que me ajudaram:

  1. Mantenha sua busca de trabalho além da sua região de interesse. Definitivamente, não há problema em re-localizar. Ótima chance de sair e conhecer um novo lugar!
  2. Como a experiência é baixa, acho que os entrevistadores querem ter certeza de que você é alguém que ficará empolgado e cheio de energia para trabalhar e resolver problemas. Por isso, verifiquei que estava interessado em codificar para a empresa. Qual eu era;)
  3. Faça perguntas ao entrevistador. Pesquise a empresa e tenha algum material pronto durante a entrevista. Quais padrões de design você usa? Por que a tecnologia X em vez da tecnologia Y? Eu sinto que isso o envolve como pessoa durante a entrevista e lhe dá uma chance de fazer uma pausa.
  4. Código para se divertir em casa! Não precisa ser bem-sucedido, mas basta escrever um código que talvez utilize uma técnica sobre a qual você leu ou uma tecnologia como um banco de dados.

Em terceiro lugar, eu estava em um barco semelhante ao seu quando me formei novamente, aguente firme e continue procurando. Seu primeiro emprego está lá fora.


14

Muito poucas pessoas se formam em qualquer disciplina, sendo especialista em algo que apenas estudaram. A ciência da computação não é de forma alguma especial a esse respeito. Nada supera a experiência empírica e você apenas obtém isso ao desenvolver software completo para clientes reais, com todas as demandas, restrições de tempo, mudanças e trabalho em equipe que isso envolve.


1
Infelizmente isso é verdade. Um bacharelado é inútil, exceto como um crachá que você conseguiu passar. Dito isto, o currículo de ciência da computação é horrível no nível de graduação. O currículo do CM exige 5 aulas de matemática, mas combina linguagem formal, autômatos e computabilidade em um curso e isso é um eletivo.
MIA

4
Concordo 100%. Por que você seria um especialista em algo para o qual acabou de se qualificar ?
21710 Alex Feinman

13

Eu encontrei este site ruim no outro dia http://99designs.com/ Sob o design do site ou outro design, você provavelmente pode encontrar alguns projetos relacionados a software.

Essa seria uma ótima maneira de obter código, desenvolver novas habilidades, conhecer novas pessoas que podem ser empregadores em potencial e você pode até ganhar algum dinheiro.

Descobri que os empregadores têm um grande valor em mostrar que, apesar de você não ter um emprego, não estava sentado na sua bunda. Mostre que você chegou lá e fez alguns projetos, de preferência os que você pode mostrar em uma entrevista.


Dividi meu dia entre 1) envio de currículos 2) revisão de livros, mas não trabalho em nenhum projeto. A propósito, esse é um site muito interessante. Parece mais voltado para artistas e designers do que para desenvolvedores de software, mas terei que investigar mais.

Eu não me preocuparia tanto com os livros. Como mencionado em outro lugar, a única maneira de aprender é fazendo. Não desanime por demorar um pouco para encontrar um emprego. É lamentável, mas às vezes encontrar o caminho certo leva muitos meses. Continue tentando :) Eu concordo com você, o site é mais voltado para arte / design, embora se você estiver interessado em sites, existem alguns deles. A vantagem é que você pode fazer um projeto sem ter a idéia de si mesmo, e você pode receber o pagamento, caso contrário, você pode olhar para sourceforge.net para outras idéias de projetos

13

Não se preocupe. Roma não foi construída em um dia.

For each P in PeopleYouKnow
Try
  ask/call P for a Job apply for job;
Catch Denial As Exception
  don be worry;
  //you'll get a job later
End Try

Finally
 If you haven't found a job yet
  For each programmingJobAd in internet

 Try
    apply for job;
    Follow up;
  Catch Denial As Exception
   don be worry;
  //you'll get a job later
 End Try
end
//Keep trying.
//find a bug from this code.

EDITAR: #! diff A B

3c3
<   ask/call P for a Job apply for job;
---
>   ask/call P for a Job job; if job is available apply for job;
9a10
>  //(sic)
14c15
<     apply for job;
---
>     apply for programmingJobAd;
20c21
< end
---
> End

12

Primeiro, não se preocupe, pois você não pode codificar o google. O Google foi criado ao longo de vários anos por muitos programadores muito experientes. É como terminar um diploma de artes visuais e imaginar como você poderia fazer A Última Ceia.

Para procurar emprego, não se preocupe. Basta ligar para eles e dizer que você não tem anos, mas ainda gostaria de se inscrever. Se eles realmente querem a experiência, pergunte se há mais vagas juniores disponíveis - elas poderão criar uma nova posição apenas para você. A maioria dos empregos é criada para uma pessoa específica. Certifique-se de entrar em contato com o gerente do projeto, não com o departamento de RH. O RH geralmente não cria novos empregos, geralmente apenas seleciona os candidatos a empregos existentes. Google é seu amigo neste caso;)

Não tente codificar um aplicativo da Web (como o Google ou o estouro de pilha), a menos que você queira investir cerca de 6 meses. É uma enorme curva de aprendizado. Você precisa aprender a gerenciar um VCS, executar um servidor da web, codificação HTML JS e CSS, um sistema de banco de dados e a linguagem do aplicativo da web. É brutal. A maioria dessas tecnologias não é transferível, a menos que você queira fazer um trabalho na web.

Se você deseja fazer aplicativos da web, pode instalar um aplicativo da web simples (como este aplicativo de pesquisa de IP para país baseado em django - http://www.coulix.net/blog/2006/aug/17/ip- country-flags-django-comments / ). Você pode comprar um código de desconto de US $ 90 para o Dreamhost (para trabalhar em um servidor Web real) e tentar configurar as coisas. Não se preocupe muito com a segurança ou o desempenho (mas fazer uso ssh) - é apenas um projeto de aprendizagem.

Se você quiser fazer coisas na área de trabalho, pode dar uma olhada no pygame.


Eu pensei que a primeira versão do google foi feita em pouco tempo? Como ao longo de um verão ou algo parecido
Earlz

O Apache rodando com Linux no seu desktop é um "servidor web real", sem necessidade de gastar dinheiro. O que você acha que as empresas de hospedagem estão executando?
TMN

@TMN, por servidor da web, eu quis dizer uma pilha de hardware e software de produção. Eu sei que o DH usa Apache e MySQL, mas o desenvolvimento em um servidor de produção tem vantagens (tudo está configurado, incluindo coisas complicadas, como correio, e eles fazem o registro de domínio para você) e desvantagens (como sem raiz, e você precisa obter usado para desenvolvimento remoto). Usar um servidor de produção faz com que você mergulhe no trabalho na web.

11

Você pode ler tudo sobre programação, mas não aprenderá realmente a programar até que esteja bem .. comece a programar!

Eu recomendaria que você iniciasse um projeto pessoal. O que você deseja criar? um jogo? Um blog? Não importa. Apenas faça alguma coisa!

Depois de fazer algumas codificações reais por um tempo (algumas semanas ou meses), recomendo tentar contribuir com projetos de código aberto. O projeto pessoal ajuda você a descobrir como programar quando o objetivo ainda não foi definido (saber como realmente projetar algo não costuma ser ensinado na escola). Contribuir para projetos existentes ensina você a trabalhar em equipe e a seguir os padrões de código.

Eu não perderia meu tempo lendo muito mais. Eu diria que, no máximo, você provavelmente deveria ler cerca de 20% das vezes e escrever os outros 80%. (é claro, com o tempo, quero dizer o seu tempo reservado para programar coisas relacionadas)


9

Bem, aqui estão os meus dois centavos ... juntamente com citações de algumas outras fontes.

Uma fração surpreendentemente grande de candidatos, mesmo aqueles com mestrado e doutorado em ciência da computação, falham durante as entrevistas quando solicitados a realizar tarefas básicas de programação.

- Dan Kegel via Jeff Atwood

http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html

Esse é um problema que eu já vi bastante, até o ponto em que pessoas com anos de "experiência" em seu currículo não conseguem executar tarefas simples. Pessoalmente, acho que os institutos de ensino são os principais responsáveis ​​por isso, desde o corpo docente que não conhece o assunto ou não pode ensiná-lo aos conselheiros que deveriam orientar os estudantes que querem apenas se interessar por um determinado dinheiro sem um interesse razoável no próprio campo.

Pelo som da sua pergunta, você está saindo da faculdade sentindo que acabou de ser ferrado em alguns anos de sua vida para pegar um pedaço de papel. É assim que muitas agências de contratação veem um diploma atualmente para programadores. Eles querem pessoas que provaram que podem programar, não apenas alguém que tenha um pedaço de papel. Mas o fato de você estar fazendo essa pergunta em primeiro lugar me mostra um desejo de realmente aprender a programar.

Uma das melhores coisas que você pode fazer para aprender já foi apontada várias vezes, o que é programação. Infelizmente, embora isso absolutamente aumente seu conhecimento e entendimento da tecnologia, não é incrivelmente provável que o ajude a encontrar trabalho, a menos que seja algo que você possa colocar em seu currículo.

Sugiro que você comece desenvolvendo alguns aplicativos com um objetivo específico, descubra o que pode fazer e o que o desafiará a seguir em frente e, em seguida, vá a alguns lugares onde poderá trabalhar como freelancer. Não espere receber uma quantia enorme pelo trabalho freelance que você adquire na web, você deseja adicioná-lo ao seu currículo, não à sua carteira. Depois de obter de 3 a 5 itens para os quais você pode apontar e dizer "Eu criei isso" ou "Eu projetei essa funcionalidade para eles", liste tudo isso e encontre uma agência de contratação (em TODA PARTE. (caçadores de talentos) e trabalhe com algumas pessoas para simplificar seu currículo, para que ele destaque sua educação e recursos para encontrar trabalho a ser feito e minimize o aspecto de sua falta de experiência.

A maior coisa a lembrar quando você está conversando com potenciais empregadores (que eu vejo pessoas estragar o tempo todo), e algo que QUALQUER UM EM QUALQUER CAMPO DEVERIA prestar atenção é que, embora você absolutamente não queira vender a si próprio ou minimizar o que você PODE fazer, não se venda demais e faça-os acreditar que você pode fazer coisas que você não tem idéia de como. Os empregadores sempre têm um talento especial para pedir que você faça coisas que não sabe fazer, e é seu trabalho nesse momento descobrir isso, mas se você lhes disser que já pode, inevitavelmente vai comer suas palavras mais tarde .

Boa sorte para você!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.