Quem pode aprender a programar? [fechadas]

17

Sempre hesito em conversar com os professores sobre como tentar melhorar a porcentagem de pessoas que se formam com um diploma do tipo CS, em comparação com o número que começa pensando que é isso que eles querem. Por um lado, eu realmente acho que é importante que os profissionais se envolvam e dêem esse feedback; por outro lado, seria melhor se menos alunos com baixa escolaridade terminassem o curso de ciências da computação.

Eu não acho que todas as mentes são construídas para esse campo e você precisa ser um estudante de boa vida. Você precisa ter um alto grau de paciência e habilidades para resolver problemas apenas para olhar. Se você tem o tipo "certo" de cérebro, são esses problemas difíceis que o levam a continuar. Se você apenas obtém uma longa lista de problemas fáceis, fica entediado, para que essas pessoas não sejam boas em trabalhos mais repetitivos. Eu não preciso entrar em todos os detalhes ... se você está lendo isso, provavelmente sabe o que estou falando.

Portanto, a pergunta é: como você encontra o equilíbrio de um programa de graduação que é acessível a pessoas suficientes para serem financiadas e consideradas bem-sucedidas, mas também não gera pessoas que realmente não são indicadas para o trabalho? Talvez uma pergunta melhor seja: qual métrica você usa para saber se as alterações que você está fazendo em um programa de graduação estão melhorando? Não sei se uma taxa de graduação mais alta é uma boa métrica. E parece que o feedback que você poderia tentar capturar muitos anos depois sobre os empregos que os graduados têm seria muito atrasado.

Eu luto com essa pergunta há muito tempo, principalmente porque acho que não há uma resposta. Mas pensei em pedir para saber se alguém sabe de alguma pesquisa que tenha sido realmente realizada.

Além disso: recentemente, um professor muito sábio me lembrou que nem todo mundo que se forma com um diploma em ciências da computação quer mesmo ser um programador em tempo integral depois de descobrir o que isso significa. Mas, com a educação que eles receberam, poderiam ser ótimos gerentes de projeto, gerentes, administradores de sistemas etc. Acho que esse foi um ponto muito bom que não pensei em considerar aqui. Há uma porcentagem muito alta de pessoas que não acabam trabalhando no campo em que se formaram, o CS não é uma exceção a isso. Ter o pessoal extra ajuda não apenas no orçamento para o curso, mas também a expandir a porcentagem de não programadores que ainda sabem o suficiente sobre o assunto para trabalhar com programadores.

Beth Whitezel
fonte
@ Job- Obrigado, esse é um ótimo ponto e me faz sentir muito melhor.
Beth Whitezel
2
@job: falando como especialista em psicologia, agora programando máquinas de RMN, posso atestar isso.
Matt Ellen

Respostas:

33

Ok, pela demanda popular ... Deixe o mercado livre descobrir. Você sabe, 95% dos cursos de psicologia acabam fazendo outra coisa. Nem todo mundo com um diploma de nível superior ou secundário acaba programando, mas eles são melhores gerentes, analistas, gerentes de projeto do que aqueles sem. Não carregue o peso do mundo em seus ombros. O grau de CS é apenas um pedaço de papel. Aqueles com diplomas de matemática, física, química e biologia passam a se tornar programadores, e nem todos os que possuem o diploma de CS se tornam programadores. Sem milhões de crianças aspirando a ser o melhor jogador de beisebol, não teríamos grandes estrelas. O sistema é auto-regulável.

Trabalho
fonte
Eu concordo até certo ponto, mas também tive que dar suporte a códigos escritos por pessoas com formação em física, matemática e engenharia mecânica que pensavam que eram programadores. Só porque alguém faz algo para o seu trabalho não significa que eles fazê-lo bem ...
Joel C
7
Eu já vi muitos códigos ruins escritos por estudantes de CS. Eu vi códigos incríveis escritos por pessoas de matemática ou física ou o que quer. Não há praticamente nenhuma correlação entre o que exatamente você estudou e a qualidade do seu código.
Jhocking
1
Além disso, vá biologia!
Jhocking
11

Embora eu ache importante ter em mente a resposta de Jó, a mesma resposta pode ser aplicada a um moinho de graus. "Paguei meus US $ 199,95, agora me forme em CS".

Conhecer o corpo discente de acordo com um padrão do que são "verdadeiros programadores" não é realmente o seu trabalho. Ensinar os alunos a programar / projetar é (presumivelmente?). Se você não mudou sua maneira de pensar na faculdade, perdeu seu tempo lá. Seu objetivo é mostrar a qualquer aluno que demonstrar interesse que se tornar um programador muda sua maneira de pensar para melhor. Você faz isso indiretamente, mostrando-lhes ...

  1. o que realmente é a programação e ...
  2. que eles podem fazer isso.

Fazemos errado

Existe uma extensa pesquisa por aí que mostra que o modo como 95% dos nossos programas universitários ensinam programação / CS é terrível. O programa médio de CS começa com

  • Um semestre de programação básica em C ++ / Java / C #, que passa 16 semanas ensinando poucas coisas mais avançadas do que "este é um loop for". Uma analogia poderia ser se o departamento de Física passasse um semestre estudando o alfabeto grego antes de iniciar a cinemática.
  • O segundo semestre do primeiro ano entra em estruturas básicas de dados e geralmente deixa completamente de 1/3 a metade dos alunos.
  • No segundo ano, é gasto em alguma combinação de montagem, estruturas de dados, análise algorítmica, um curso de ética e talvez seu primeiro curso tópico. Você tende a perder mais metade dos seus alunos durante este ano.
  • Juniors e Seniors entram em aulas com nomes como "Gráficos", "Networking I e II", "Sistemas Operacionais", e é o primeiro material realmente interessante que os alunos veem.

Quase qualquer outra coisa é melhor

Quase todo experimento melhora a situação, medido em termos de compreensão do aluno sobre os tópicos E taxas de matrícula e graduação no programa. Algumas das experiências que vi nos diários da ACM CSE são ...

  • Construindo de máquinas de estado teórico muito simples para montagem e para C, terminando com C # / Java no último ano. O foco é subir lentamente as camadas de abstração.
  • Escolhendo uma linguagem muito "simples" para focar os alunos nas estruturas de dados e na abstração. Vi bons resultados com os alunos que escrevem aplicativos da Web bastante complexos em uma variante de esquema até o final do primeiro ano. (Era um wiki modificado que executava o texto da página através do esquema antes de exibir ... divertido)
  • Concentrar os alunos iniciantes em uma área específica (rede) e ensinar todas as estruturas / declarações Java como um "aparte". Na segunda semana, os alunos fazem ping no servidor de correio para ver uma lista de e-mails. O projeto final é um cliente de mensagens instantâneas simples. O foco está em mostrar aos alunos como os programadores fazem uma parte do mundo funcionar.
  • Alguns programas se concentram na robótica. Os calouros brincam com as tempestades de Lego ... no segundo ano usam a API do tipo C, Juniors e Seniors trabalham com os ME e EE em uma colaboração entre campus para criar sistemas bastante complexos.
  • Um programa concentra os alunos no código de LEITURA durante o primeiro semestre. Eles analisam o código no sistema X11 para ensinar controle de fluxo e sintaxe básica por 8 semanas ou mais, antes mesmo de começar a escrever o código. Seus primeiros programas são pequenos patches para modificar um pouco de comportamento.

Cada um desses experimentos viu melhorias maciças no interesse inicial dos alunos, transferência de conhecimento e retenção até a graduação. Alguns são mais apropriados para determinados ambientes da faculdade do que outros, mas se você estiver seguindo a estrutura descrita no parágrafo acima, pergunte-se: "Eu ficaria nos primeiros dois anos deste programa?"

jkerian
fonte
Eu concordo com você no sentido de que devemos nos concentrar em mostrar a eles o que é a programação e como isso pode mudar seu processo de pensamento, independentemente do que você fizer depois. Bons pensamentos.
Beth Whitezel
2

Programar é instruir de maneira lógica, a fim de alcançar a saída desejada. Em outras palavras, está dizendo ao computador para executar alguma tarefa. A única maneira de avançar é praticando.

Assim como aprender inglês ou qualquer outro idioma, você precisa começar aprendendo a sintaxe (alfabeto) e depois passar para a gramática e outras construções. A quantidade de tempo necessária varia de acordo com a complexidade do idioma. Codificando em linguagens de nível superior, como SQL, Python é quase como escrever em inglês.

nayan
fonte
2

Alguns aspectos ajudariam, eu acho -

  • Profs que estão cientes do mundo real moderno . Se eles são capazes de falar sobre a tecnologia atual e como ela se encaixa nos quadros teóricos, isso é muito mais relevante para os graduandos que desconhecem a história do que as dissecções do VAXen sem referência à tecnologia atual.

  • Estágios apoiados pelo departamento. Se o departamento puder garantir pelo menos 2 verões de trabalho remunerado com empresas de tecnologia, haverá um grande incentivo para permanecer.

Francamente, os estudantes modernos de ciência da computação são muito mais abençoados do que aqueles que vivem até 5 a 10 anos atrás. A capacidade de comprar um sistema low-end e, em seguida, instalar uma VM e aprender vários idiomas, sistemas operacionais etc. gratuitamente é um facilitador, é difícil superestimá-lo.

Obviamente, as pessoas seminais como Hopper e Knuth se ensinaram sem os brilhos. Gênio vai sair.

Paul Nathan
fonte
Embora a idéia seja ótima ... dois verões de trabalho garantido de estágio remunerado não são, infelizmente, realistas. Sim, há estágios remunerados, mas a maioria dos graduados tem sorte em receber um agora e muitas vezes precisam se contentar com os não remunerados. Isso pode ser diferente em outros estados. Eu acho que você está certo sobre eles terem mais oportunidades. Eles podem contribuir para muitos outros projetos de código aberto, e também há alguns anos atrás.
22411 Beth Bethel
@ BitOff: Eu nunca ouvi falar de um estágio não remunerado de CS.
Paul Nathan
Sem brincadeiras? Deve ser uma coisa localizada então.
18117 Beth Whitezel
1

Crie uma área de preparação para alunos bem-sucedidos em potencial fora do seu programa de graduação para reduzir os riscos. Isso pode incluir o patrocínio de aulas do AP CompSci nas escolas secundárias locais para separar preventivamente o joio do trigo. Se isso for muito difícil, tente se infiltrar nos capítulos locais do DECA (ou crie um novo) com um programa orientado para o CS nas divisões do ensino médio ou superior. Por outro lado, você mostrará aos alunos empreendedores que buscam habilidades de gerenciamento, possivelmente com potencial não realizado de CS, um novo caminho para atender às aspirações de negócios por meio de seu meio acadêmico.

Travis J
fonte
Sim, concordo plenamente que precisamos fazer mais para introduzir o CS em idades mais precoces do que na faculdade. Eu sei que a maioria das escolas de ensino médio oferece uma ou duas aulas avançadas de computador que podem entrar em uma linguagem de programação, mas não acho que isso seja suficiente. Eu sempre pensei que, se você pudesse ensinar um idioma simples e adequado para crianças aos alunos do 4º ao 6º anos, estaria capturando o interesse deles na idade certa. Eu aprendi básico quando tinha 8 ou 9 anos e, apesar de ter levado mais 10 anos para realmente entrar nele, isso me deixou com uma ótima memória de "programação".
21117 Beth Whitezel
1

Eu diria que a chave está no entendimento de diferentes níveis de tais programas:

Universidades - Isso costuma ser onde se pode estudar apenas para estudar. Nesse caso, pode existir um padrão muito diferente em termos de criação e ajuste de programas, pois isso pode ser bastante teórico, ou pelo menos é o que me lembro de estudar Ciência da Computação nos meus cursos do último ano.

Faculdades - Essas tendem a ser mais orientadas para a carreira, e é aí que o feedback do setor e a conexão de empresas com faculdades são um ponto-chave. Observar os estágios de 6 a 12 meses após a graduação pode ser uma métrica usada para ver o desempenho das pessoas após a graduação, pois a questão principal é se alguém viu ou não seu tempo e dinheiro recebendo essa educação como útil. A atualização do programa provavelmente será mais frequente, pois os programas aqui podem ser um pouco mais curtos, por exemplo, os programas universitários de bacharelado em honra tendem a ser de 4 anos, enquanto um programa de diploma universitário pode ser de 18 a 24 meses. Portanto, o desafio é mais conseguir que essa parte tenha conexões com as empresas para que as pessoas possam se expor ao trabalho e ver o que funciona ou não para elas.

JB King
fonte