Pode-se obter uma base sólida de programação sem ir para a faculdade / universidade? [fechadas]

28

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:

  1. Ir para a faculdade fornece o documento, essencial para conseguir empregos, especialmente em tempos econômicos difíceis.

  2. 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?

Daniel
fonte
2
Provavelmente, pelo menos uma pessoa neste planeta pode. A propósito, a razão 1 ainda é importante. Quando tudo o resto é igual, "eles" ainda preferem alguém com educação mais formal.
Job
1
Posso lhe dizer uma coisa, você não descobrirá o que significa sólido em uma universidade.
Peter Turner
O ponto é que leva dez anos para aprender programação e passar alguns desses anos aprendendo em alguma universidade pode ajudar.
Basile Starynkevitch

Respostas:

17

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:

  • Aprender fazendo! Deseja saber como as árvores binárias funcionam? Faz um.
  • Faça aprendendo. Defina projetos ambiciosos, onde você terá que aprender coisas novas para concluí-las. Cuidado: Se você definir projetos difíceis demais, é fácil ficar desanimado, mas se você definir projetos fáceis demais, não aprenderá muito. Você está procurando uma zona de manteiga.
  • Comece com C. Idiomas de alto nível tornam você preguiçoso. Eu nunca tinha aprendido C se tivesse aprendido python primeiro.
  • A Wikipedia deve ser seu primeiro ponto de chamada para quaisquer conceitos que você precise aprender.
  • Não importa se você nunca termina um único projeto (afinal, o que foi concluído). É muito mais importante que você aprenda coisas novas. Isso não significa dizer que você nunca deve tentar terminar um projeto. Pode ser um grande impulso motivacional ver algo que você fez funcionar. É fácil se desviar, não se preocupe se você o fizer.

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.

dan_waterworth
fonte
O mesmo aqui. Eu consegui um diploma para o jornal. Eu não aprendi muito, principalmente tudo o que eu já sabia. Aprendi que realmente odiava o java mais do que pensava (tinha que usá-lo no meu projeto final) e tinha um ótimo professor que nos ensinou a partir de sua experiência pessoal, onde aprendi muitas coisas.
Echo diz Restabelecer Monica
@ Eco, valeu a pena?
dan_waterworth
@ Dan_waterworth, eu gosto de pensar assim.
Echo diz Restabelecer Monica
Eu acho que faz muito mais sentido começar com uma linguagem de programação de alto nível, especialmente com Python. É claro que depende dos tipos de tarefas que você gostaria de realizar quando terminar de aprender o básico: se você deseja fazer uma programação de sistemas incondicional, siga a rota C, se quiser desenvolver aplicativos de usuário final, não Não se preocupe com C e escolha algo como Python.
Zsolt Török
discordo da parte C. você deseja permanecer em um alto nível de abstração. você pode argumentar que C o torna preguiçoso, aprenda o código da máquina! se você não precisa do tipo C de desempenho, é bom ficar com o python.
precisa saber é o seguinte
12

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.

Sorantis
fonte
1
Bem, eu já sou formado em Economia Internacional, então essa parte é abordada.
Daniel
1
Eu tenho um amigo que é formado em algum <nome> e ele é um programador de Flash / PHP bem-sucedido. Eu acho que tudo depende de você. Por exemplo, sou formado em física, mas sou desenvolvedor de software. Há dois anos, decidi fazer um mestrado em ciências da computação, apenas porque eu queria, não porque precisava.
Sorantis
5
Minha educação universitária me ensinou a aprender uma nova linguagem de computador em 1 a 2 dias nos tutoriais on-line. Se você já pode fazer isso, terá aprendido uma ótima lição.
precisa saber é
1
Sim, mas você precisa ser um autodidata comprometido.
precisa saber é
3
Algumas pessoas não precisam aprender a aprender de forma independente.
dan_waterworth
6

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.

APENAS MINHA OPINIÃO correta
fonte
4

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.

Marcie
fonte
3

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.

rjzii
fonte
2

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.

Heath Lilley
fonte
2

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.

Berin Loritsch
fonte
Aceita. Quase toda a programação de negócios que fiz foi semelhante a trabalhar em uma profissão como um carpinteiro. Eu acho que uma faixa de programação de aprendiz / viajante / mestre seria mais útil do que uma universidade para aprender a programar.
cfeduke
2

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.

konrad
fonte
Sua estimativa de cerca de 90% da programação sem um conteúdo teórico forte provavelmente está certa. Infelizmente, a maioria dos programadores encontra periodicamente os outros 10%, por isso é necessário.
Orbling
2

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.

k rey
fonte
2

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.

TMN
fonte
Eu fiz. De fato, a maior parte do meu estudo ocorreu em menos de 2 anos (cerca de 6 meses), mas eu faço regularmente 60-70 horas por semana.
dan_waterworth
Concorde com a TMN. Em geral, a sua educação formal não tem idéia de onde você vai acabar; ela tem uma certa quantidade de BREADTH (ou seja, tende a cobrir muito território). Meu exemplo em um post anterior: nunca pensei em usar a Construção de Compilador que fazia parte do meu curso. Acontece que, mais de 20 anos depois, esse foi um dos cursos mais importantes que já fiz. Agora, o problema é que, para aqueles que não têm esse conhecimento na parte de trás da cabeça - você não sabe o que não sabe. E esse nível de ignorância torna você menos eficaz, a longo prazo.
quickly_now
1

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.

ian
fonte
Esse é principalmente um problema em que a contratação é feita através de um departamento de Recursos Humanos (RH). A melhor maneira de lidar com isso é criar uma rede social de negócios de gerentes de TI que o conheçam ou pelo menos você, e vamos tentar evitar o processo de "filtro" de RH. Em outras palavras, as pessoas sem diploma tendem a ser melhores no marketing de suas habilidades e serviços, do que em candidatar-se a posições anunciadas. Os gerentes de TI mais competentes contratarão com base em um sólido histórico e reputação (ou seja, referência de alguém em quem confiam). Não espere conseguir um emprego no governo. É raro hoje em dia
mctylr
1

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.

JeffO
fonte
1

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).

GWLlosa
fonte
1

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.

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.

Paul Nathan
fonte
0

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.

Dave B.
fonte