Isenções de responsabilidade (leia antes de saltar para responder):
Já vi várias perguntas semelhantes à que gostaria de fazer, então aqui estão algumas perguntas semelhantes .
IMHO Eles não são completamente o que estou perguntando, nem são tão completos quanto eu espero ser (não pretendo descartar as respostas às perguntas abaixo, nem estou desacreditando os que perguntam, eu só quero ser um um pouco mais completo):
Um diploma de CS pode beneficiar um programador mais velho?
Importância do grau de CS ao se candidatar a empregos em desenvolvimento?
Deixe-me esclarecer, não estou perguntando o seguinte:
- Como me ensinar a programar do zero (sem um diploma em CS)
- Como me vender como um bom desenvolvedor de software (sem um diploma em CS)
- Como conseguir um excelente emprego como desenvolvedor de software (sem um diploma em CS)
Um pouco de contexto:
Agora que tenho isenções de responsabilidade fora do caminho, deixe-me esclarecer minha pergunta, começando com um breve histórico da minha experiência como desenvolvedor de software.
Primeiro, tive muita sorte. Recebi várias oportunidades de trabalho (alguns projetos pesados de PHP / MySQL de back-end e vários aplicativos WP7 em XAML / C #) através dos quais eu realmente aprendi tudo o que sei sobre desenvolvimento de software. Quase todos os trabalhos de desenvolvimento de software que tive foram aqueles que eu não estava devidamente qualificado para ter (e deixei isso claro para meus empregadores antes de me contratarem). Não quero me dar crédito onde não é devido, mas diria que a humildade perfeita dispensa modéstia .
Em quase todos os trabalhos de desenvolvimento que tive, superei as expectativas do meu empregador e provei ser um ativo valioso. Obviamente, há exceções 1 . Mas o que quero dizer é que sou bastante inteligente e fui capaz de me ensinar o que precisava saber para ter sucesso no meu trabalho. Com cada trabalho que eu tinha, eu era cada vez mais esticada.
Frequento o campus de Seattle da Universidade de Washington e atualmente estou no meu quarto ano com dois anos restantes, trabalhando em um diploma de matemática. Durante os vários trabalhos que tive (veja meu currículo, se você quiser essa lista), também frequentei a escola como estudante em período integral.
Como eu acho que a maioria dos desenvolvedores concorda, estudando os cursos de graduação gerais típicos, incluindo cursos introdutórios de programação ABSOLUTAMENTE PALES em comparação com a escrita de código real, a criação de 2 produtos reais , o trabalho com pessoas incríveis e o impacto positivo na vida dos usuários 3 .
Então ... como as coisas acontecem ... gastei muito mais tempo e energia trabalhando, em vez de me concentrar nos meus estudos. Às vezes eu me saí muito horrivelmente , mas na maioria das vezes eu conseguia me manter à tona com minhas notas.
No entanto, o programa de ciência da computação da UW é muito , muito , muito , muito competitivo.
Então, não foi nenhuma surpresa para mim quando fui rejeitado pelo programa. Duas vezes. Ironicamente, na mesma janela de meia hora em que recebi o aviso de rejeição sempre educado, embora desanimador por e-mail, recebi um telefonema da Amazon me oferecendo um estágio de verão 4 como SDE.
Ao olhar em volta para outros jovens da minha idade (21), que compartilham os mesmos objetivos que eu no desenvolvimento de software, sinto-me muito bem sobre onde estou, o que estou aprendendo, quem sou e o que Eu posso fazer. É claro que existem muito, muito, muito mais brilhantes jovens de 21 anos do que eu, não quero dizer que me destaco no meio da multidão, apenas que sinto que não estou abismalmente por trás do progresso de meus colegas comuns .
Sinto-me confiante em minha capacidade de obter sucesso no mundo do software. Mais importante, sinto-me confiante em minha capacidade e desejo de continuar a crescer, aprender e ficar embaraçosamente humilhado quando realmente preciso.
Grau de Matemática
Encontro-me buscando um diploma de matemática com o único objetivo de ter um diploma. Há quem diga que devo desistir e começar a trabalhar agora (como tive oportunidade de fazer), e há quem diga que devo realmente terminar meu curso. Decidi prosseguir com meu diploma por razões inteiramente diferentes das que os dois campos costumam mencionar; portanto, por favor, não me incentive de uma maneira ou de outra sobre esse assunto. Considere o problema "fechado" :)
* RESPIRAÇÃO PROFUNDA * ... desculpe, isso é mais do que eu previa.
Esta é, em essência, a minha pergunta:
- Como eu determino objetivamente quais áreas de estudo, conhecimentos gerais e outras habilidades eu teria adquirido com um diploma de CS que eu posso ou não ter agora?
Como classifico essas habilidades na ordem de maior importância?
Qual é a melhor maneira (nos próximos dois anos) de suplementar minha educação para atingir esses atributos de forma a igualar ou até superar o nível de um estudante de graduação em ciências de uma universidade de ponta?
Aqui estão os passos que eu já estou tomando:
- Pergunte à comunidade de desenvolvimento (este post)
- Prosseguir tutoria com desenvolvedores experientes que compartilham uma carreira semelhante comigo
- Definir metas de "aprendizado" a curto e longo prazo e os programas subsequentes descrevendo os tópicos de estudo
- Continue escrevendo códigos e trabalhando em projetos pelos quais sou apaixonada
Se você chegou até aqui, merece um biscoito :) Agradeço por ter me acompanhado.
Então ... comunidade de desenvolvimento, desenvolvedores experientes, colegas estudantes que estão no mesmo barco que eu, que conselho você daria?
Além disso ... lembre-se de minhas isenções de responsabilidade no início deste post sobre o que NÃO estou pedindo.
Atualizar:
Percebo que não forneci parâmetros muito concretos para o que considero uma "resposta" bem-sucedida às minhas perguntas. Penso que a pergunta é muito vaga e poderia justificar uma série de respostas "corretas".
Depois de um tempo razoável, selecionarei a resposta que se encaixa nos seguintes atributos:
- Explica o porquê da resposta deles
- Pode falar de algum nível de experiência (seja contratando / interagindo ou sendo alguém que tem / está no meu lugar)
- É conciso, mas completo, fornece princípios gerais, de preferência juntamente com exemplos específicos
- Por fim, considerando o tamanho que parece corresponder ao que foi mencionado acima, faça uma boa resposta bem comunicada e agradável de ler. Outros que possam estar interessados nisso no futuro, eu espero, seriam entretidos e também educados pela resposta.
Portanto, existem alguns parâmetros para "correto". Eles são muito altos, eu acho, mas eu os projetei como uma espécie de esboço para o que eu imagino que a "melhor" resposta seria. Obviamente, com tempo suficiente, selecionarei a resposta correspondente mais próxima como a "resposta".
(1) - Eu trabalhei em uma versão anterior deste site e, embora não tenhamos uma explicação explícita conversando sobre isso, senti que não era capaz de me sair muito bem (isso pode ser evidenciado pelo fato de que eles mudaram completamente seu site) (2) - Em primeiro lugar, sim, é um produto real (mesmo que eu esteja escrevendo este post no Chrome ...) e chuta a bunda. Em segundo lugar, eu era um desenvolvedor interno de ensino médio em teste, escreveu uma prova de código conceitual para alguns dos novos recursos do IE8 ... isso foi há um tempo atrás. (3) - No momento desta publicação, eu sou o desenvolvedor que escreveu este aplicativo, não sou mais responsável por sua base de código (4) - Meu estágio começará em junho de 2012 e estarei trabalhando na Web Store equipe.
Respostas:
OK, acho muito tentador não responder à sua pergunta, então aqui estou eu ...
Algumas coisas sobre mim primeiro
Tenho 26 anos e, graças ao meu pai (entre matemático e atualmente trabalhando como professor), tive a chance, desde muito cedo da minha vida, de estar em torno de computadores. (em 1986, quando nasci, embora não fosse a coisa mais comum naqueles dias, sempre tínhamos um ou dois computadores em casa). Dito isto, e - obviamente, devido à minha natureza curiosa e inclinada à matemática / voltada para a solução de problemas - não demorou muito para eu me apaixonar por programação. Primeiro com Pascal, com 7-8 anos de idade e depois praticamente tudo o resto.
Primeiro, deixe-me dizer que, enquanto estava na escola, sempre me destacava em qualquer coisa relacionada à matemática, simplesmente porque eu gostava e, honestamente, podia facilmente seguir o exemplo de meu pai e me tornar um matemático também. Mas isso não aconteceu.
O que aconteceu foi provavelmente o maior erro da minha vida (até agora): como você chamaria isso quando alguém apaixonado por código , que fala mais de 15 idiomas e escreveu milhares de linhas de código (de compiladores a micro-kernels e web) aos 18 anos de idade, de repente (as razões ainda são muito obscuras em minha mente, mas a influência geral, mesmo que sutil, do seu ambiente nunca é muito insignificante) decide seguir uma carreira em Medicina ? Eu acho que um "erro".
O resultado? 5 anos depois (aos 23 anos) e 1 ano antes de terminar o curso de Medicina (ainda trabalhando em projetos pessoais de programação de código aberto como hobby o tempo todo), decidi que já tinha o suficiente e desisti. E não era apenas porque eu odiava tanto esse novo campo (Medicina), mas também que havia algo inquietante em toda essa situação, uma coceira insaciável escondida no fundo ... ( o que teria sido se ...? ) Além disso, eu acabara de perceber que meu hobby , que considerava ótimo, mas que nem imaginava ser um trabalho de verdade, poderia não apenas trazer algum dinheiro, mas também me trazer muito + me manter feliz como indivíduo. Então, eu decidi sair. (= a melhor escolha, mesmo que um pouco tarde, eu já fiz).
Então, aqui estou eu agora, um psiquiatra que está prestes a ser médico (à beira de um colapso nervoso, para ser mais preciso; me idiota!), Cursando a faculdade (no meu terceiro ano, na verdade; e, sinceramente, persegui-lo para não acabar com essas temidas qualificações típicas ...) e um profissional mais do que feliz trabalhando em algo que eu adoro e, definitivamente, o assunto sobre o qual tenho mais a oferecer.
Algumas observações (da minha própria experiência)
A programação é um dos poucos campos em que os realmente bons sempre encontram seu caminho, não importa o quê. E isso definitivamente não é uma questão de qualificações típicas (honestamente, se eu tivesse uma empresa e quisesse recrutar programadores, posso facilmente saber quem é bom em questão de minutos - independentemente de ele ter algum diploma ou não)
O que é preciso para ser um bom programador é: inteligência orientada para a matemática (mas NÃO a própria matemática) e paixão (que tornarão as infinitas horas de estudo um prazer em vez de um fardo; e, mesmo que eu não tenha percebido isso, confie eu estudei toneladas de material sobre o assunto em minha vida, puramente por minha conta) . A educação formal é uma coisa boa, mas é um pouco superestimada. Os principais ingredientes do sucesso são os dois primeiros.
Definitivamente, a matemática nasceu onde CS nasceu. Mas CS não é mais apenas matemática. Eu sempre tive um cérebro forte voltado para a matemática, mas não sou um guru de matemática. E honestamente, na programação diária (a menos que você queira criar um mecanismo gráfico ou algo muito localizado), provavelmente nunca precisará de nada além de aritmética simples (adição, subtração, multiplicação, divisão, módulo) e algumas coisas sobre matrizes. (muitos vão discordar de mim, provavelmente matemáticos ou programadores muito acadêmicos, mas definitivamente dominar o cálculo NÃO é o que é preciso para ser um bom programador). Ter uma boa formação matemática talvez o ajude, mas NÃO por causa da própria matemática; isso o ajudará apenas com base em uma coisa comum que esses dois campos compartilham: habilidades de resolução de problemas.
A matemática é uma ciência (e uma ciência que eu respeito).
Programar é uma arte. (E uma ciência aplicada também, se você insistir) Mas lembre-se disso: uma arte - e é assim que eu sempre a tratei. E, como em todas as artes, não pode ser ensinado. Posso ensinar-lhe a maneira formal de desenhar um rosto e torná-lo melhor que a média, mas isso não fará de você nem um Da Vinci nem um Klimt. Mona Lisas é pintada por Da Vincis, e não por pintores cuidadosamente educados. Um ótimo código é escrito por grandes artistas de código. E habilidade e devoção podem facilmente ultrapassar a educação formal.
Então, o que é preciso para se tornar um * realmente * bom programador?
Nas suas perguntas
No entanto, eu precisaria realmente saber o que está incluído no diploma de matemática, deixe-me resumir o que você provavelmente estará perdendo em um diploma de CS (como cursos / disciplinas / etc - inspirado no programa de estudos da minha universidade ) em nenhuma ordem específica :
Saber o que priorizar em um campo em constante mudança como o CS sempre será uma aposta - um jogo de adivinhação .
Conheça o que você quer fazer e confie no seu instict. Obviamente, é essencial ter um conhecimento básico sólido . Mas o que você vai investigar depende inteiramente de você. Além disso, planeje sua carreira com cuidado: se você quer ser empregado, escolha seu alvo e seja ótimo nisso (por exemplo, querer ser empregado pelo Google e não saber ler um script Python simples é provavelmente uma daquelas situações proibidas ) . Se você está iniciando algo por conta própria (uma empresa), não tem "chefe" para satisfazer; basta escolher o que melhor lhe convier.
Por exemplo, se você quiser fazer algo relacionado à Web, eu definitivamente recomendo que você opte por: PHP / MySQL / HTML / CSS / JavaScript (+ jQuery / AJAX) . Mas sou só eu. Alguém pode gostar (ou ver mais futuro em) Ruby / Rails do que em PHP.
Eu, por exemplo, agora estou codificando principalmente Objective-C / Cocoa . Aconselho você a prosseguir com isso? Definitivamente não. Ou seja: a menos que você goste de Macs ou queira uma carreira vendendo software relacionado ao Mac / iPhone. Se você estiver no desenvolvimento do Windows, optar pelo C # / .NET Framework provavelmente seria sua melhor escolha. (se você quiser ter uma idéia do que eu mais gosto, basta dar uma olhada no meu Perfil do StackOverflow )
Estude muito (livros, internet, código de outras pessoas, qualquer que seja) e escreva o máximo de código possível.
Ah, e tente conseguir um emprego em qualquer coisa relacionada ao código. ( Comecei a trabalhar como freelancer e tem sido uma experiência realmente valiosa, apenas para ver como as coisas realmente funcionam no mundo real).
Apenas meus 0,2 centavos amigáveis ... :-)
Sidenote: Eu sei que alguns dos meus pontos de vista podem parecer controversos, e tenho certeza que haverá muitos que discordarão de mim. Isso é aceitável. Mas isso não muda a maneira como vejo as coisas - e especialmente as coisas que amo.
fonte
Navegue pelo currículo do departamento de CS da UW, peça emprestado e navegue pelas leituras necessárias, veja os exames anteriores e os exercícios de laboratório (tarefas de casa). Se você não tem idéia de como abordaria o problema, tem um buraco no seu conhecimento.
Pense em que tipo de programação você gostaria de fazer no futuro. Se você gosta de criar sites e aplicativos CRUD, parece que já possui todo o conhecimento necessário.
A educação em CS entra em cena se você estiver interessado em entender como bancos de dados [distribuídos], servidores da Web, compiladores e intérpretes, sistemas operacionais, protocolos de rede etc. funcionam sob o capô e estiver interessado em construir esses sistemas você mesmo.
Eu não sei. Para mim, o maior benefício da universidade foi: 1) ampliar meus horizontes (esqueci 90% dos detalhes que aprendi na uni, mas lembro de conceitos e idéias) e 2) manter minha motivação intrínseca para aprender as coisas minguante: é mais fácil manter a motivação quando você está trabalhando em direção a uma meta - exame, outro exame etc. até se formar. (Além disso, estruturar a auto-educação não é uma tarefa fácil.)
[Adicionado: escolha uma universidade cujo programa de CS você gostaria de seguir, escolha cursos nos tópicos de seu interesse e faça você mesmo o currículo: trabalhos de casa, exames etc. A maioria dos cursos publica slides de aulas e trabalhos / exames de anos anteriores .]
Um conselho: não desista do seu diploma de matemática. Qualquer pessoa inteligente pode aprender a programar, mas a matemática lhe dará vantagem competitiva se você desejar trabalhar em aplicativos que não sejam CRUD / front-end, por exemplo, simulações fluidas e mecânicas, computação gráfica, processamento de imagem, reconhecimento e aplicativos de aprendizado de máquina, (até finanças!) etc.
ATUALIZAÇÃO 2 - experiência [longa]: obtive mestrado na faculdade de EE: os dois primeiros anos foram currículos comuns (física, engenharia elétrica, eletrônica analógica e eletrônica digital e muita matemática - álgebra linear; matemática discreta; real, vetorial e análise aplicada complexa.) Isso foi muito valioso, esp. a parte de EE e eletrônica - me permitiu trabalhar em projetos mistos de HW-SW, e a cooperação com os designers de HW foi muito emocionante. Eu não contribuí com nada para o design do HW, mas fui capaz de seguir o designer do HW "depurando" seu diagrama esquemático e fazer perguntas sensatas [não sabíamos se o bug estava no SW ou no HW - e sim no HW: -)]
Então as linhas se ramificaram e eu escolhi a linha CS. Alguns dos "detalhes" contribuíram para enraizar os conceitos (por exemplo, "executando" o algoritmo de Dijkstra manualmente). Também aprendi detalhes sobre como as CPUs funcionam (sinais de barramento, interpretação de diagramas de barramento, execução etc.) no exemplo do Motorola 68000 obsoleto, já na época, mas os conceitos aprendidos através dos detalhes também não são muito diferentes para os CPUs modernos.
Outros detalhes, esp. As implementações de SW (por exemplo, implementando o Dijkstra), foram para mim [desde que me tornei muito bom em codificação no ensino médio] um exercício inútil de depuração e contribuímos com o ZERO na compreensão dos conceitos.
E então me matriculei no programa de doutorado, onde tive que fazer cursos obrigatórios. Fiquei decepcionado com a escolha dos cursos, pois muitos deles pareciam mais estar orientados para as demandas da indústria (por exemplo, usando o Python para análise de dados científicos - obrigado, eu posso programar e sou muito capaz de me ensinar isso - - que novamente envolveu muita codificação inútil) do que no ensino de conceitos fundamentais (felizmente, realizei cursos de otimização discreta, análise estática de programas e análise formal com Promela).
Portanto, alguns detalhes foram úteis para incorporar conceitos e outros foram um fardo desnecessário (outro exemplo: programar a comunicação de porta serial entre dois computadores. Eu já estava acostumado a ler e interpretar especificações de HW e programar HW por meio de registradores, por isso era justo. Talvez eu seja ingênuo ao supor que os engenheiros médios de CS que precisam se tornar não precisam ser instruídos sobre como ler os documentos de HW).
Em conclusão: exponha-se a muitos conceitos diferentes (idéias de alto nível) e entre em detalhes para aqueles que você deseja priorizar e se tornar extremamente bom. [Você NÃO PODE ser extremamente bom em tudo!]
fonte
Eu entrevisto e participo no recrutamento de muitas pessoas juniores recém-saídas da faculdade. Ainda tenho que contratar alguém com base nas habilidades que adquiriu no programa que realizou. A razão para isso é simples: nenhum programa de CS (ou qualquer outro programa) que encontrei ensina habilidades concretas relacionadas à programação ou desenvolvimento de software em nível profissional e comercial . Ser capaz de desenvolver modelos e soluções para equações diferenciais complexas e escrever algoritmos de classificação otimizados para fins especiais pode ter valor acadêmico e / ou científico, mas não tem influência no desenvolvimento geral de software.
O que procuro então? Bem, espero que um graduado tenha aperfeiçoado a arte de aprender. Afinal, isso é o que uma boa faculdade deveria ensinar aos seus alunos. Como analisar e decompor problemas gerais em componentes lógicos e discretos, previsivelmente solucionáveis. Uma abordagem metódica para encontrar, avaliar, organizar e aplicar conhecimentos e informações para uma solução.
Além disso, procuro pessoas que entendam que um grupo de pessoas, trabalhando juntas e se comunicando, vale muito mais do que a soma de seus indivíduos. Isso requer maturidade e humildade e a capacidade de dar e pedir ajuda.
Portanto, voltando ao escopo de sua pergunta: embora um diploma de CS possa melhorar suas chances de conseguir a primeira entrevista fora da faculdade, acho que isso tem pouca ou nenhuma influência no seu sucesso ou proficiência como desenvolvedor. Eu sempre segui a filosofia "contratar por atitude, treinar por habilidade" e é bem recompensada.
Meu conselho: continue com seu diploma de matemática, se isso for algo que lhe interessa. Qualquer educação científica o servirá bem, então escolha a que você mais gosta, pois é a que você mais se destacará. Depois, concentre-se em aprender as coisas importantes: como aprender, como analisar e abordar a solução de problemas em de maneira estruturada, como interagir e cooperar com outras pessoas, como assumir a liderança e a responsabilidade pela entrega dos seus e dos colegas de equipe. O resto é apenas tecnologia e codificação, as ferramentas do comércio. Aqueles, você pode e vai aprender por conta própria. Escolha e estude alguns conhecimentos de uso geral, como padrões de design populares e paradigmas arquitetônicos. Comece a escrever programas para praticar. Escolha uma linguagem e uma base tecnológica bastante atualizadas, mas não cometa o erro de pensar nisso ' é o último que você aprenderá. Ferramentas e idiomas mudam o tempo todo, portanto o desenvolvimento de software é um processo constante de aprendizado.
fonte
resposta 1
Se você aprender algo novo com seu estudo. Então você pode dizer objetivamente que ganhou isso através de um diploma em CS.
A1 O porquê
Um diploma de CS é conceitualmente sobre aprendizado. Se alguém retornar de um diploma de CS sem diferença líquida, seu objetivo principal não será cumprido. Exames e cursos são a medida "oficial" do que foi aprendido. No entanto, a compreensão individual (aprendi algo novo?) Deve ser uma medida objetiva melhor.
A1 A experiência
Eu já estive na academia e agora trabalho profissionalmente. Eu escolhi um Mestrado em Ciência da Computação porque queria expandir minha compreensão e tenho uma paixão por aprender.
Meu mundo se expandiu como resultado da obtenção de um mestrado em computação. Meu mundo também se expandiu de trabalhar profissionalmente.
Resposta 2
A importância é relativa para quem está fazendo a pergunta e para que situação. Se é para crescimento pessoal , então tudo é importante. Se for para a indústria, coisas importantes como algoritmos e boas práticas de OOP / software padrão são importantes.
A2 O porquê
O "escopo" da importância é altamente dependente do "contexto". Sem um contexto, é difícil classificar os méritos das habilidades.
A2 A experiência
Eu descobri que as habilidades obtidas na "universidade" vs "no campo" são diferentes. As "habilidades" na universidade são mais "teoria", da indústria é mais "prática". Por esse motivo, essa diferença significa que as habilidades são realmente classificadas de maneira diferente em termos de importância.
Resposta 3
Empurre-se para além do ponto de ruptura e, quando quebrar, continue se quebrando novamente.
O que eu quero dizer?
Se você chega a um ponto em que não entende, então se quebra. Continue aprendendo até entender. Em seguida, empurre mais até encontrar outra coisa que você não entende (ad infinitum) .
A3 O porquê
Se você apenas aprender e permanecer dentro dos seus limites, estará apenas "ok". Você não quer ficar apenas "ok". Você quer ser o "melhor" que pode ser. Você não pode alcançar seu potencial real, se você não ultrapassar CONSTANTEMENTE seus limites.
A3 A experiência
Eu sempre vou ser um estudante ao longo da vida, não vou enumerar meu conjunto de habilidades atual; se você estiver curioso, pode ver apenas meu perfil.
A única coisa que direi é isso. Eu nunca sou realizado com meu conhecimento atual. Quero voar mais alto, ver mais longe e ir mais fundo.
fonte
Basta olhar para os requisitos de graduação e, em seguida, procurar o currículo de cada classe.
Você realmente não pode fazer isso sozinho sem o benefício da retrospectiva. Eu diria que a coisa mais importante que a maioria dos programadores autodidatas não tem é a análise e o design de algoritmos. O restante pode ser colhido em pedaços.
Mesmo se você não for admitido no programa, poderá frequentar aulas de outros departamentos como eletivas. Uma das minhas aulas favoritas era uma aula de projeto da engenharia aeroespacial, onde trabalhei em eletrônica e firmware para um pequeno satélite.
Você também pode comprar o livro de texto que sua classe desejada está usando. Fiz isso em algumas aulas que não cabia na minha agenda. Outra opção é o curso aberto do MIT .
fonte
Por que você acha que um diploma de CS é tão importante para ser um programador de sucesso ?
O que você precisa para ser um programador de sucesso é:
Normalmente, o grau de CS o levará para dentro da indústria, mas se você não tiver paixão e sede de conhecimento, sofrerá e nunca será um bom programador.
Parece que você já entrou no setor e certamente parece que você tem paixão e sede de conhecimento.
O que você precisa saber é continuar pesquisando, aprendendo e ganhando experiência, e a indústria saberá como apreciá-lo sem o diploma.
Um exemplo de alguém com quem trabalho
um dos desenvolvedores de software que trabalha na minha equipe é formado em direito ... depois de alguns anos, ela entendeu que não gosta de direito e que deseja ser programadora. como ela não conseguiu um emprego como programadora (sem experiência, sem diploma), fez um curso de informática por seis meses, conseguiu um emprego e é uma grande desenvolvedora desde então.
fonte
IMHO não existem trabalhos de programação (ou trabalhos de vendas ou trabalhos de administrador de sistemas, etc.), existem apenas trabalhos de solução de problemas. Contratamos e pagamos pessoas para resolver problemas, escrever código é apenas parte da solução do problema. Sim, mesmo as vendas são uma forma de resolução de problemas. Portanto, um diploma de matemática prova que você pode resolver problemas e também um diploma de CS.
Com a sua publicação, fica claro que você está recebendo muita experiência / estágios. Ótimo! não se preocupe em conseguir um emprego depois da formatura.
Para tentar responder às suas perguntas:
aulas? escolha algumas aulas teóricas de CS em vez de aulas de escrita de código. Encontre algumas aulas que não sejam de CS / matemática, por exemplo. filosofia vai ajudar você a se destacar da multidão
prioridades? aprenda coisas novas (e não apenas aulas fáceis que você já conhece)
próximos dois anos? converse com as pessoas, aprenda, construa relacionamentos, procure atividades externas. (Hobbies / esportes / passatempos fora do trabalho / estudo é uma pista para ver como o candidato está motivado.)
Dicas finais: forme-se o mais rápido possível. Construa uma rede de contatos. E o único trabalho seguro é criar seu próprio trabalho. Procure idéias / oportunidades onde você pode começar seu próprio negócio. Boa sorte.
fonte
Em primeiro lugar, deixe-me dizer que estou muito feliz por você ter feito essa pergunta, porque é uma pergunta que me fiz ao longo dos anos.
Acho que até agora me considero um pouco bem-sucedido nessa área. Tenho alguma experiência na faculdade e gostaria de terminar meus estudos na área de Ciência da Computação, mas ainda não mereço um diploma neste momento da minha vida. No entanto, tive bastante sucesso na engenharia de software, apesar dessa desvantagem (decorridos 10 anos). Eu tenho que ser honesto com você, no entanto, não era necessariamente uma coisa fácil de fazer (é claro, eu apostaria que qualquer coisa que valha a pena fazer, na maioria das vezes NÃO é a mais fácil). Também vou dizer que ainda não é a coisa mais fácil. Existem muitas empresas por aí dispostas a dar uma chance ao candidato certo, mas eu entrei em contato com outras pessoas que ficarão frustradas com a falta desse "selo de aprovação" da educação universitária. Contudo,
Começou no .net em uma empresa muito grande. Como não programador (por pouco tempo) (trabalhei como representante de suporte técnico, na época), aprendi tudo o que pude sobre as linguagens e tecnologias usadas quando aplicadas à empresa em que trabalhava. Além disso, e esta é provavelmente a coisa mais importante que eu criei em rede. Enviei um e-mail para todas as pessoas que encontrei no diretório que tinha Engenheiro de Software no título. Eu era irritante? Provavelmente. Eu sempre fui cortês e respeitoso com o desejo de aprender. Eu agendava almoços ou apenas os encontrava na cafeteria e me sentava para tentar conversar. Às vezes era embaraçoso ou eu era desprezado, mas no final, obtinha os resultados esperados. Consegui obter credenciais de menor tempo para alguns bancos de dados internos e, após algum tempo, adquiri as credenciais necessárias para desenvolver software em sua plataforma proprietária. Logo depois, me encontrei em uma posição dentro da empresa para emprestar algumas habilidades no desenvolvimento de ferramentas internas para a equipe de análise em que eu trabalhava na época. A partir daí, eu sempre me esforcei para ser o cara mais inteligente da sala da maneira mais despretensiosa possível. Eu estava ansioso e me certifiquei de que todos soubessem disso. Sempre tentei fornecer uma solução sempre que possível e descobri que, se você se esforçar o suficiente, existem muito poucos domínios de problemas que são impossíveis de resolver (fora da teoria quântica, talvez). Eu me encontrei em uma posição dentro da empresa para emprestar algumas habilidades no desenvolvimento de ferramentas internas para a equipe de análise em que eu trabalhava na época. A partir daí, eu sempre me esforcei para ser o cara mais inteligente da sala da maneira mais despretensiosa possível. Eu estava ansioso e me certifiquei de que todos soubessem disso. Sempre tentei fornecer uma solução sempre que possível e descobri que, se você se esforçar o suficiente, existem muito poucos domínios de problemas que são impossíveis de resolver (fora da teoria quântica, talvez). Eu me encontrei em uma posição dentro da empresa para emprestar algumas habilidades no desenvolvimento de ferramentas internas para a equipe de análise em que eu trabalhava na época. A partir daí, eu sempre me esforcei para ser o cara mais inteligente da sala da maneira mais despretensiosa possível. Eu estava ansioso e me certifiquei de que todos soubessem disso. Sempre tentei fornecer uma solução sempre que possível e descobri que, se você se esforçar o suficiente, existem muito poucos domínios de problemas que são impossíveis de resolver (fora da teoria quântica, talvez).
Para encerrar o que poderia ser uma longa história (e se você estiver no noroeste do Pacífico, adoraria discutir uma cerveja), tive minha "grande oportunidade" em uma pequena startup que estava disposta a me dar uma chance . Eles trocaram minha falta de experiência por um salário um pouco menor, e eu comecei a correr. Depois, passei de uma pequena loja de desenvolvimento para a próxima nos próximos anos, ganhando amizades e habilidades ao longo do caminho, para onde finalmente estou como desenvolvedor líder e diretor de uma pequena empresa de engenharia.
Um ponto importante aqui, se eu não o tiver comunicado com eficácia suficiente, é que você precisa se conectar. Faça amigos, tome umas cervejas e ria e encontre pessoas que estão no campo em que você deseja trabalhar (de preferência na pilha de tecnologia que você preferir). Certifique-se de que as pessoas saibam sua disposição de fazer o que for preciso e vontade de fazer o trabalho, por mais monumental que seja. Você basicamente tem que "superar" sua falta de educação formal. Entre e divirta-se com isso. Esta indústria é a melhor do mundo, IMHO. Fiz amizades duradouras e contatos que me ajudaram de um lugar para outro e continuarei fazendo o mesmo por eles sempre que a oportunidade se apresentar.
fonte
Primeiro, deixe-me rir na estipulação "concisa mas completa" perto do final de sua grande obra. Direto aos negócios:
Como outros mencionados, você pode começar no catálogo de cursos . Mas eu encorajo você a sair dos limites dessa lista. É realmente bom que você esteja se formando em matemática. Muitos engenheiros com quem trabalhei não se lembram de como realizar uma integração simples e nunca exploraram fora dos muros dos cursos tradicionais de matemática discreta do CS.
Essa resposta parece bastante esparsa em termos de detalhes. Eu não sou formado em ciências da computação e não me encontrei nas áreas necessárias. Eu desejo, no entanto, que passei mais tempo com as outras coisas que me interessavam. História, Linguística e Inglês, por exemplo.
Aprenda o que você ama
O que é importante para você? O que é importante para os empregadores? Minha heurística pessoal sempre foi aprender o que me parece mais interessante - você precisa amar o que faz; caso contrário, você queimará. O software é um campo de atuação tão amplo que sempre parece haver um emprego disponível para um desenvolvedor competente e apaixonado por qualquer uma dessas habilidades.
Aprenda a aprender e se esforce
Eu acho que isso me leva a duas meta-habilidades que eu colocaria acima do resto: aprender as coisas vorazmente e trabalhar duro. Isso pode parecer clichê e dolorosamente óbvio, mas a combinação é rara. Eu estive em todo o mapa em termos de habilidades "necessárias" - front-end HTML / javascript para extensões de linguagem, desenvolvimento móvel, visão computacional para administração de sistemas e, novamente, mais de 7 idiomas. A única verdadeira habilidade essencial em tudo o que está tornando o hábito superar minha própria ignorância.
Eu realmente amo a filosofia de Jack White sobre guitarras e música (sério, vá assistir a isso), e acho que é extremamente aplicável ao mundo da programação. Coloque as coisas um pouco mais fora de alcance. Esforçar-se. Então parecerá fácil quando tudo o que alguém quiser é o seu trabalho.
Classes de CS não principais
Como você, o departamento de CS da UW me rejeitou ... embora eu ache que os deixei fazer isso pela terceira vez antes de voltar aos meus sentidos. Acabei me especializando em informática e minoria em matemática aplicada. Mas eu ainda peguei toda a faixa principal do CS. São CSE 373, 410, 413, 415 e 417. Portanto, acredito que você deve seguir sua paixão primeiro. Os meus me levam a essas aulas. E acho que você recebe uma educação básica bastante abrangente com eles, embora possa ser um pouco de luz sobre o lado teórico das coisas.
Agora, aqui está o mais interessante: com a informática, a maioria delas contava com minhas disciplinas eletivas necessárias. No departamento de matemática, pode ser necessário obter aprovação explícita e pode ser uma extensão para qualquer um, exceto o CSE 417.
Convoque uma consulta DARS (provavelmente um link apenas para UWNetID) e veja onde estão as coisas. Eu costumava fazer isso para vários cursos ad nauseum .
Classes AMATH
Na mesma linha, o departamento de Matemática Aplicada possui algumas classes que podem ser trabalhadas como requisitos eletivos. Você pode até ser menor no AMATH como o seu verdadeiramente.
Por que eu mencionei isso? A computação numérica - por exemplo, AMATH 301/352 - é um grande mistério para a maioria dos programadores. Se você não obtiver mais nada, poderá escrever posts interessantes no blog . Mas eu argumentaria que conhecer os problemas que envolvem os tipos numéricos de um idioma e saber como mensurá-los e melhorá-los é muito importante.
Construa algo!
A coisa mais importante que você pode fazer é criar algo novo. Tome uma idéia do início ao fim. Não deixe que seja algo fácil dentro da sua zona de conforto.
As aulas de programação mais proveitosas que eu tive sempre tiveram um grande componente de programação prática. Para um engenheiro, a teoria é incrivelmente importante - desde que possa ser transformada em algo real. Então, encontre um papel CS com um som legal e tente implementá-lo. A sério.
Arrume um emprego
Agora, você já mencionou que tem um estágio na Amazon. Isso é ótimo. Experiência de trabalho real é realmente a chave! Há uma abundância de pessoas com graus CS que não pode programar a sua maneira fora de um saco de papel molhado. Ter uma boa experiência de trabalho vale muito mais que um diploma.
fonte
Existem mais de algumas histórias de pessoas se tornando milionárias antes de se formarem na faculdade, talvez a que mais ouço seja Bill Gates. As pessoas com habilidades de nicho tendem a se sair melhor sem um diploma do que o graduado em bolachas com caramelo.
Encontre algo em que poucas pessoas se interessam, geralmente algo que é chato, tedioso ou difícil de aprender, e aprenda bem, fique obcecado por isso. Algumas áreas das quais ouvi falar são sobre o back-end do Unix (não o Linux, embora o Linux não esteja muito atrás), Flash (não sei o suficiente sobre o flash para lembrar exatamente o que era, mas conheço um cara que se mudou rápido sabendo disso e ele disse que ainda existe um mercado para isso, principalmente porque as pessoas dizem que está morrendo e não vão aprender). Você pode precisar de algumas aulas para começar, mas se você conhece suas coisas e tem um portfólio impressionante, existem negócios por aí que vão precisar de você!
fonte