Tenho estudado Advanced Placement Computer Science no último ano no ensino médio. Parece que somos ensinados simplesmente a memorizar códigos e funções e não como ser engenhoso e eficiente no uso de documentação e afins.
Na prática, imagino que muitos (se não todos) trabalhos de programação permitiriam que você folheasse a documentação, revisasse o código passado e o código de outras pessoas, essencialmente fazendo o que meu professor consideraria "trapaça".
Embora eu concorde que os conceitos básicos sejam essenciais para memorizar (em qualquer assunto), me parece supérfluo e impraticável fazer um exame com caneta e papel para uma aula de ciências, especialmente quando praticamente você teria um compilador, depurador, referência manuais e toda a Internet a que se refere em qualquer situação de trabalho do mundo real.
Por que o ensino de CS é focado na memorização de código e funções, em vez de ensinar habilidades úteis, incluindo como usar e interpretar documentação, código de exemplo, depurador e outros?
Respostas:
Em uma turma do ensino médio, você está no nível mais básico do seu caminho para o domínio. As coisas abordadas em sua classe são o tipo de coisa que um programador profissional deve saber frio. De várias maneiras, isso é semelhante ao aprendizado de suas "tabelas de tempos". É claro que você sempre poderá pegar uma calculadora em um ambiente "real", mas essa memorização não apenas aumenta sua velocidade em tarefas mais complexas, mas também promove uma compreensão mais completa dos princípios básicos.
Por exemplo, você deve conhecer vários algoritmos de classificação, como eles são implementados, como eles funcionam, quando são mais usados e quando não usá-los. Isso sempre pode ser pesquisado, mas não deveria ser - mais do que um matemático deveria procurar 6 vezes 8.
fonte
Geralmente, é ensinado dessa maneira, porque os professores geralmente não conhecem outra maneira de testar a compreensão. Seus sentimentos são completamente corretos, pois é inútil ser ensinado assim. A maneira como as pessoas são educadas em geral precisa desesperadamente de reformas!
Porém, a vida melhora, pelo menos na UIUC eu descobri que quanto mais alto você passa nas aulas de ciências, menos os exames são orientados conforme a descrição e, na maioria dos meus cursos, temos uma folha de dicas para toda a porcaria que você provavelmente teria pesquisado no Google se estivesse realmente sentado em um computador.
Dito isto, quanto mais alto eu fui em minhas aulas, menos eles realmente ensinaram sobre idiomas ou como implementar algo. Na verdade, eu só tive uma aula em que eles realmente nos ensinaram alguma coisa sobre programação, na maior parte são conceitos matemáticos abstratos e espera-se que apenas descubram a parte da programação por conta própria (desde que eles sempre tenham prazer em ajudar, mas isso foi nunca algo em um exame).
fonte
Não deixe que a escolaridade interfira na sua educação.
- Mark Twain
Sou mexicano e estou lhe dizendo isso, porque no México não é exatamente um bom lugar para a educação (em qualquer nível), pelo menos na educação pública.
Bem, no meio da minha carreira (CS), eu me sinto exatamente da mesma maneira que você está se sentindo, então começo a aprender sozinho e passo um ano aprendendo algoritmos, linux, scripts, como meu computador funciona, um pouco de relacionamento. bancos de dados, html, css, etc (um pouco sobre tudo). E, é claro, tive que pular as aulas *, baixar minhas notas * e me formar um ano depois *, tudo para aprender.
Depois desse ano, volto à minha rotina "normal", voltando às aulas regulares, trabalhos de casa, exames e projetos. As aulas ainda eram chatas, nada de novo para aprender, tudo era o mesmo. Então, decidi entrar para a programação de sites de concursos como o juiz UVA on-line , o chef de código e o euler do projeto , depois assisti a algumas palestras no MIT Open Course Ware e ainda estava aprendendo sozinho, mas de uma maneira diferente.
A lição: não deixe as coisas acontecerem, faça as coisas acontecerem. Se você não estiver satisfeito com a maneira como está aprendendo, mude!
* Não são as decisões mais sábias que tomei.
fonte
Depende do que você está tentando memorizar ...
Para estudar matemática, por exemplo, você deve estar familiarizado com a álgebra e, com frequência, deve ser bastante criativo na maneira de executar manipulações algébricas para simplificar as equações. Mas você deve ter memorizado certos componentes para poder se concentrar nesses bits interessantes. Você deve, por exemplo, conhecer suas tabelas de multiplicação de cor e conhecer algumas identidades para poder reconhecer como manipular as equações para poder usá-las.
Para estudar ciência da computação, você também precisa estar familiarizado com estruturas e algoritmos básicos de dados de blocos de construção, porque precisará aplicá-los a problemas de nível superior. É altamente improvável que você, por exemplo, escreva sua própria implementação de lista vinculada no mundo real, simplesmente use a fornecida por sua biblioteca. Mas, sabendo como uma lista vinculada é implementada e como implementar a sua própria, você poderá raciocinar sobre onde e se deve usar uma lista vinculada quando começar a trabalhar em problemas de nível superior. Da mesma forma, você nunca escreveria sua própria função de pesquisa binária, mas é importante entender como funciona para que você possa raciocinar sobre coisas como onde um banco de dados poderia usar um índice e onde não.
Depois de memorizar alguns componentes básicos, é muito mais fácil fazer coisas como interpretar a documentação. A documentação pode indicar que uma lista está sendo usada e supor que o programador saiba implicitamente que isso significa que inserções são O (1) e pesquisas são O (n). Os blocos de construção também são muito mais estáveis ao longo do tempo - é muito provável que você use novos depuradores a cada poucos anos, provavelmente use a mesma pesquisa binária em toda a sua carreira.
fonte
"Por que o ensino de CS é focado na memorização ... em vez de ensinar habilidades úteis" - Eu acho que você está descartando demais a memorização. Assim como você deve praticar a escrita de código, a interpretação da documentação e o depurador, também deve praticar a memorização.
Você pode se surpreender com o quão mais eficiente pode se tornar se não precisar ir à referência da API com tanta frequência ou procurar tantos comandos de depuração.
Uma das melhores coisas que aprendi no ensino médio foi observar um amigo que nunca fazia anotações nas aulas. Seu argumento era que ele conseguia se lembrar do que era importante. Comecei a fazer a mesma coisa e acho que melhorou minhas habilidades de memorização, que acho muito úteis diariamente, mesmo com todas essas referências de API disponíveis.
fonte
Os exames com caneta e papel realmente fazem sentido se o objetivo é testar uma compreensão completa do assunto em questão. Eu fiz o exame Computer Science AB há quase uma década e concordo com o método de caneta e papel.
Você deve conhecer o suficiente de qualquer algoritmo aprendido nos níveis mais baixos da Ciência da Computação para poder raciocinar como escrever o código de implementação no idioma de destino. Os alunos também devem poder escrever o código manualmente, com a sintaxe mais correta. Às vezes, todos nós perdemos um ponto-e-vírgula ou parênteses :). Além disso, as habilidades de depuração e design podem ser testadas sem inferência de um IDE útil.
Se um aluno não pode fazer isso, ele não possui domínio desse tópico, apenas talvez uma familiaridade passageira.
fonte
Na minha experiência, a memorização vem com uma prática simples e não há absolutamente nenhuma necessidade de ensiná-la. Mais importante, essa abordagem significa apenas memorizar o que você realmente precisa lembrar no que estiver fazendo, e não um monte de lixo aleatório que seu professor espera que você possa precisar e, invariavelmente, você não precisará. O tempo gasto memorizando a implementação de algum algoritmo poderia ser muito melhor dedicado a alguma outra causa.
Afinal, por que você precisaria praticar a escrita de um algoritmo? Depois de escrevê-lo uma vez, você pode reutilizá-lo o tempo todo, mesmo com a chance extremamente remota de que outra pessoa ainda não tenha escrito uma implementação disponível gratuitamente para o idioma de sua escolha e de que seu ambiente ainda não tenha fornecido tais informações. um algoritmo para seu uso, que não é trivialmente verdadeiro para a grande maioria dos algoritmos simples, como classificação e coisas do tipo. Praticando algo em que é altamente improvável que você tenha que fazê-lo em primeiro lugar e, mesmo que você o faça, só precisará fazê-lo uma vez? Não é um uso valioso do tempo.
O importante a saber sobre o Heapsort não é como implementá-lo. É a complexidade operacional nos melhores e piores casos, e coisas semelhantes. Mas, surpresa, há uma tabela prática na Wikipedia que fornecerá instantaneamente essas informações. Então, novamente, não há valor em ter esse conhecimento. Está disponível instantaneamente para você sempre que você quiser, a partir de agora até o final dos tempos, sem nenhum custo. Então, por que você quer memorizá-lo? É inútil.
Na minha experiência, não há absolutamente nenhuma razão para exigir que um aluno memorize qualquer coisa. Se você está fazendo uma pergunta que pode ser respondida de uma fonte de referência, está fazendo uma pergunta em que poder respondê-la não tem valor.
fonte
ORDER BY
e C ++std::sort
.