Primeiro, eu já pesquisei no site e li todos os tópicos anteriores "autodidata x universitário". A maioria das respostas defendia que ir para a faculdade era a melhor escolha, por duas razões principais:
Ir para a faculdade fornece o documento, essencial para conseguir empregos, especialmente em tempos econômicos difíceis.
Ir para a faculdade fornece uma sólida base de programação, ensinando os princípios que serão essenciais, independentemente do idioma / caminho a seguir.
Aqui está minha pergunta: não estou preocupado com o motivo 1, porque já tenho minha própria empresa (construo sites / faço marketing de afiliados) e uma situação financeira estável, por isso tenho certeza de que não precisarei olhar em volta por um trabalho.
Estou preocupado com a razão 2 embora. Ou seja, quero ter certeza de que terei uma base de programação tão sólida quanto qualquer outra pessoa por aí, e estou pensando se isso é possível com o autoaprendizado.
Suponha que eu dedique um tempo para estudar o básico, como matemática discreta, design de algoritmos, lógica de programação, arquitetura de computadores, Assembly, programação C, bancos de dados e estruturas de dados - principalmente usando livros, recursos on-line e muita codificação. Digamos que eu passe de 1 a 2 anos cobrindo esses princípios.
Você acha que minha fundação seria sólida ou ainda falta em comparação com alguém que foi para a faculdade?
Respostas:
Absolutamente definitivamente. Sim é possivel. Como eu sei? Porque eu fiz isso!
É difícil. Não tenha ilusões sobre isso. Sem um tutor para ir quando as coisas não funcionam, você mesmo precisa resolver os problemas. Há muito o que aprender e, se você não estiver motivado ou não for dedicado o suficiente, não poderá fazê-lo. Para mim, acho difícil ser motivado por qualquer coisa, mas gosto tanto de aprender e programar que não preciso lutar contra mim mesmo.
Algumas dicas:
Como você sabe quando termina? Bem, a razão de você se formar é para se tornar proficiente em programação. Quando você tem certeza de que pode escrever qualquer software com uma quantidade razoável de tempo, é um programador, mas isso não significa que você deva parar de aprender.
Aliás, agora estou sofrendo do ponto um. Estar longe de qualquer empresa de desenvolvimento de software também não ajuda.
fonte
Penso que a designação mais importante de faculdade / universidade é ensinar como aprender coisas por conta própria. Não importa se é programação, física, química, matemática, etc. A universidade me ensinou a aprender sem a ajuda de ninguém.
fonte
Algumas pessoas prosperam em ambientes acadêmicos e até exigem que aprendam (geralmente como uma forma de motivação). Outros (como eu) não conseguem e podem até achar isso desanimador.
Eu tive uma longa carreira em software sem me formar. No final dessa carreira, eu estava em um cargo de arquitetura e o arquiteto sênior do meu projeto disse que meu conhecimento de software e ciência da computação (os dois não são a mesma coisa!) Era facilmente equivalente a ter um mestrado na Universidade de Waterloo (um das melhores escolas de CS do Canadá).
Existem algumas deficiências, é claro, no meu conjunto de conhecimentos. Minhas habilidades matemáticas são suficientes para acompanhar o que estou aprendendo hoje. Eu odeio matemática pura e, geralmente, não pode ser usado para manter-me atualizado sobre as melhores e mais recentes. Ocasionalmente, isso prejudicou minha compreensão das coisas (como, por exemplo, Haskell), até que minhas habilidades em matemática atingiram um nível suficiente para entender os conceitos. Mas o fato é que as informações estão disponíveis sem que eu esteja perto de um departamento de ciências ou matemática da universidade. Tudo o que posso dizer é que, às vezes, minha sequência de aprendizado é subótima - às vezes tenho que voltar atrás e preencher algum material fundamental antes de continuar o que estou fazendo.
fonte
Eu acho que sua base será sólida, desde que você tenha a disciplina para realmente se sentar e ensinar a si mesmo todas essas coisas e trabalhar com os exemplos. Sou formado, mas é em Engenharia, não em Ciência da Computação. Eu trabalhei com muitos excelentes programadores profissionais que aprenderam tudo o que precisam saber. O auto-estudo é algo que você precisa ter para ser um bom programador, pois sempre há uma nova tecnologia que você não aprendeu na escola.
fonte
Como na maioria das coisas na vida, minha resposta é sólida , depende da pessoa . Acredito firmemente que você não precisa de um diploma de bacharel para ser programador; no entanto, com base em minha experiência, a faculdade tende a expor as pessoas a questões e idéias que elas podem não encontrar por conta própria através de estudos independentes.
Hoje em dia, uma pessoa motivada pode ficar on-line e, graças a fontes como MIT Open Courseware , montou um curso de estudo independente que lhes proporcionará uma ampla amplitude de conhecimento e é essa amplitude de conhecimento que eu acho que é o que faz um bom desenvolvedor. No entanto, alguém que não é tão motivado pode achar que é capaz de aprender um único idioma e pode ser capaz de seguir carreira.
Como afirmei antes, sinto que é a amplitude de conhecimento que faz um bom desenvolvedor, pois significa que eles foram expostos a mais problemas e desenvolveram suas habilidades de resolução de problemas. Você não precisa ir à escola para obter essa amplitude de conhecimento, mas a escola definitivamente ajuda nesse aspecto, pois um bom programa de graduação o forçará a desenvolver uma amplitude de conhecimento.
fonte
Como programador, acho que estou constantemente brincando com APIs e linguagens não relacionadas ao trabalho (Ruby on Rails, Python, Node.js, etc.). Faço isso mais por interesse do que por trabalho. Tenho 2 graus de associado, mas mesmo após 10 anos de programação em Java / JEE, sinto muita falta da teoria de um diploma de bacharelado (Big O, Algoritmos, Descrete Math, etc).
Estou participando de aulas noturnas de meio período para obter meu diploma de bacharel em sistemas de informação de computadores, mas não há muita teoria de CS oferecida neste programa. Estou recebendo meu diploma principalmente para ter o "trabalho", pois é mais comercial do que técnico, mas é minha única opção para as aulas noturnas.
Confira o MIT Open Coursware . É gratuito e é um ótimo recurso para preencher as lacunas da teoria do CS / Matemática.
fonte
Eu acredito que é uma falácia pensar que faculdade / universidade por definição lhe dará uma boa base de programação. Eles ensinarão muita teoria e muitas maneiras diferentes de pensar sobre um problema. Tudo bem, mas transformar essa teoria em prática é um conjunto de habilidades diferente.
A única maneira eficaz de ensinar a aplicação correta da teoria é mentoreando e fazendo. Em resumo, você precisa tentar aplicar a teoria da melhor maneira possível e contar com alguém com mais experiência para fazer críticas construtivas ou apontá-lo na direção certa. Seu mentor não fará seu trabalho por você, mas o ajudará a ser melhor em seu trabalho.
Eu não seria o desenvolvedor que sou hoje sem a ajuda de alguns bons mentores no início da minha carreira. Trabalhar em projetos de código aberto é uma boa maneira de encontrar alguns mentores que estarão dispostos a gastar algum tempo analisando detalhes. Pelo menos essa foi a minha experiência. Também tive um mentor no meu primeiro trabalho de programação que me ajudou a entender como projetar aplicativos facilmente estendidos.
Então, há benefícios para a faculdade / universidade? Sim. No entanto, eles não estão equipados para ajudá-lo a transformar a teoria em prática, a menos que você a decida. Se você começar a tentar aplicar o que está aprendendo enquanto estiver na universidade, poderá começar a fazer os tipos certos de perguntas que ajudarão a entender verdadeiramente a teoria em um nível mais prático. Se você esperar até estar no trabalho, acaba de adiar esse importante processo de aprendizagem.
fonte
As pessoas tendem a superestimar a importância da fundamentação teórica, matemática e conhecimento algorítmico da IMO. Os motivos pelos quais os programadores incentivam e entrevistam essas coisas são que eles mesmos são "fãs" da matemática.
Agora, é claro, existem algumas programações em que é útil saber o que é uma "máquina de estado" ou como usar uma pesquisa "Booyer-Moore". Existem até alguns problemas em que pode ser útil saber matemática de verdade, como se você estiver trabalhando com cálculos financeiros ou simulações de física.
No entanto, o fato é que 90% da programação geralmente não é uma delas, muitos de nós não estão desenvolvendo um algoritmo incondicional. A maioria das coisas que você precisa aprender pode aprender à medida que avança. Não é necessário construir um enorme edifício de fundação, mas sim manter uma curiosidade constante sobre como resolver problemas diferentes.
Sou 100% autodidata e nunca tive nenhum problema para aprender sobre algoritmos. Eu fiz trabalhos em sistemas financeiros e até isso foi possível sem nenhuma habilidade matemática matemática mais profunda.
Ser bom em programação não é sobre fundamentos, é sobre expandir continuamente sua caixa de ferramentas e o aprendizado que obtém vale muito mais a pena quando você pode colocá-la no contexto de um problema que realmente precisa ser resolvido, em vez de apenas pesquisa teórica.
Você não precisa saber tudo em detalhes, é para isso que o Google, o StackOverflow e a Wikipedia estão disponíveis :) No entanto, você precisa conhecer a existência de diferentes ferramentas e métodos para perceber que eles são usuais e aplicáveis à sua situação. Você também precisa ter a experiência de saber qual ferramenta é melhor aplicar. As fundações geralmente são estragadas para iniciantes, pois não têm experiência sobre por que uma ferramenta específica seria útil. Se você tem muita experiência, algumas coisas simplesmente "clicam" no lugar.
Algumas coisas que eu recomendaria:
Caso contrário, comece a aprender sobre padrões de design, essa é a ferramenta mais prática e universal da sua caixa de ferramentas.
Leia algumas visões gerais de diferentes algoritmos, se você estiver curioso, apenas para saber o que há quando precisar de um.
Aprenda sobre paralelização e multithreading (e alguma programação funcional). Ser capaz de suportar vários núcleos é importante hoje e será indispensável em breve, portanto é um conhecimento crucial.
Faça projetos desafiadores e experimentais de passatempo que aumentem sua habilidade e o forçam a aprender coisas em contexto.
fonte
Uma coisa que a faculdade irá ajudá-lo a encontrar dificuldades é a capacidade de ler e entender os trabalhos de pesquisa acadêmica, especialmente a matemática. No entanto, mesmo isso pode ser alcançado por conta própria, mas ajuda ter instrutores e colegas orientando você no processo de aprendizado para obter o conhecimento mais rápido e fácil.
Como programador geral de sistemas de informação, você provavelmente não lerá documentos de pesquisa para se sair bem. Os sistemas de informação de hoje são bastante simples e a maioria dos algoritmos intensos, como pesquisa, classificação e indexação, é feita pelos sistemas de banco de dados. Contanto que você entenda os conceitos, não deverá ter dificuldade.
Se você decidir se envolver em áreas mais difíceis de programação, como desenvolvimento de sistemas micro-operacionais, desenvolvimento de compiladores, inteligência artificial e outras, ter a capacidade de ler e entender documentos de pesquisa pode ser fundamental para implementar sistemas de maneira rápida e eficiente.
Na medida em que é possível aplicar conhecimento, isso é muito individualista. As pessoas que vão para a faculdade podem não ser capazes de aplicar os princípios, bem como alguém que não vai para a faculdade. Há um velho ditado que diz: "não importa o que entra, mas o que sai".
Em resumo, o conhecimento que você obtém ao ir para a faculdade pode ajudá-lo a entender e se comunicar melhor com o mundo acadêmico. No entanto, o conhecimento pode ser alcançado sem a faculdade. Ter um diploma facilita convencer os outros de que você sabe o que está fazendo e pode entender os trabalhos de pesquisa acadêmica.
fonte
Eu não acho que muitas pessoas tenham uma "base" tão boa por meio do auto-estudo quanto iriam para a universidade, pelo menos não no mesmo período. Dois anos lendo livros aleatórios e brincando com problemas com brinquedos em seu tempo livre não o levará ao mesmo nível que dois anos de estudo focado com um currículo organizado. Será que você vai conseguir o suficiente para sobreviver? Bem possível. Mas se você realmente quer "uma base tão boa quanto qualquer pessoa lá fora", levará mais de dois anos.
Para não desencorajá-lo, certamente não seria uma perda de tempo. Só não estou muito confiante de que muitas pessoas possam reunir o equivalente a dois anos de faculdade em dois anos enquanto administram seus próprios negócios e têm algum tipo de vida pessoal / familiar.
fonte
Estou desenvolvendo profissionalmente há uma década, sem um diploma. Quando entrevisto pessoas, estou interessado em sua capacidade de resolver problemas e codificar. Dizendo isso, existem algumas empresas / funções para as quais não sou elegível apenas porque elas insistem em se formar. Certas consultorias têm essa política porque podem vendê-lo por mais aos clientes.
fonte
Se você jogar o jogo dos números, aqueles com um diploma obtêm melhores empregos e salários.
Nem todo mundo que se formou aprendeu / se lembrou de nada.
A maioria das pessoas não dedica tempo para aprender muito da teoria / antecedentes / conceitos básicos como faria se fosse para a faculdade. Talvez seus pais o ajudem durante 4 anos de estudo individual; todo mundo tem que arrumar um emprego.
A desvantagem seria se você tivesse um diploma de CS e falhasse em um certo nível, você pode ser visto como tendo uma potência baixa. Vamos ser sinceros, se você não conseguir em 4 anos de alimentação com colher, você não descobrirá isso de lado enquanto mantém um emprego em período integral. Exceções, é claro.
fonte
Se você realmente quer ganhar a vida no campo de desenvolvimento de software sem um diploma, sugiro o que você faz é entrar em contato com a universidade local. Obtenha deles uma lista dos cursos que seriam necessários para você obter um diploma. A grande maioria das universidades terá essas informações disponíveis mediante solicitação, além de uma sinopse / plano de estudos / lista de livros para cada um dos cursos. Desça essa lista. Procure os livros em questão. Veja quais tópicos eles cobrem. Se você vir algo coberto que não entende, compre / confira o livro e aprenda-o. No final desse processo, você deve, no mínimo, saber o que sabe e o que não sabe, e ser bastante competitivo com o seu graduado médio (que pode ter dormido / trapaceado em alguns desses cursos).
fonte
Sim e não. Algumas coisas são brutalmente difíceis de entender sem um professor. Geralmente são as coisas mais matemáticas.
Eu acredito - e ainda acredito depois ajudar no início do curso de CS como TA - que qualquer pessoa sem retardo mental pode aprender a codificar no nível PHP / Java / C #. Fundamentalmente, não é difícil.
Além disso, a montagem e as outras áreas tecnológicas mencionadas também não são. Esses são detalhes de implementação que é bom saber.
Estruturas de dados, algoritmos, design digital, arquitetura de computadores e álgebra de banco de dados são bastante difíceis, se o aprendizado for profundo.
fonte
Não tenho dúvidas de que uma pessoa motivada e dedicada possa alcançar uma base sólida, mas se você optar por não se formar, estará perdendo muitos aspectos que melhorarão seu desenvolvimento. Uma dessas coisas e possivelmente a mais importante é a exposição a pessoas que pensam da mesma forma com as quais você pode trocar idéias e conceitos. Também é muito bom poder ouvir as experiências de instrutores que têm sabedoria valiosa para transmitir e que às vezes podem endireitar conceitos incompreendidos em uma ou duas frases. É bom ser capaz de esclarecer conceitos no momento da exposição inicial, em vez de ter as idéias erradas e ter que resolvê-las mais tarde.
fonte