Como você acha que seria bom ensinar às pessoas a montagem (alguma variante) como a primeira linguagem de programação? Seria necessário muito mais esforço do que aprender, por exemplo, Java ou Python, mas teríamos um bom entendimento da máquina mais ou menos desde o "primeiro dia de programação" (em comparação com muitas linguagens de nível superior, pelo menos). O que você acha? É uma ideia realista, pelo menos para aqueles que estão prontos para fazer um esforço extra? Vantagens e desvantagens?
Nota: eu não sou professor, apenas curioso
Respostas:
Seria difícil inspirar um novo programador com código de montagem. Um olá dinâmico, o site do usuário é muito mais bacana com menos esforço. Não estou dizendo que as lições fundamentais são as mesmas, mas um curso introdutório terá um grande conteúdo inspirador, caso contrário não haverá um segundo curso.
Lembro que meus primeiros cursos de programação foram ministrados em Scheme e fiquei frustrado por não conseguir compilar com facilidade um .exe e "executar" meu programa (pensei que o MS Visual Basic fosse o final de toda a programação). Não foi até anos depois que eu realmente entendi que ferramenta poderosa eu estava tocando. Acho que eu teria apreciado mais e retirado essas lições melhor se tivesse tido alguma experiência inicial em algo um pouco mais pragmático no começo.
fonte
Eu acho que é uma péssima idéia para os estudantes de Engenharia de Software e CS, e geralmente para qualquer pessoa mais interessada em programação do que em eletrônica.
Isso pode ser feito, mas não significa que deva ser feito. No passado, a maneira de fazer coisas realmente legais com os computadores domésticos era aprender primeiro a montagem. Isso ocorreu devido às limitações iniciais de hardware - linguagens de nível superior simplesmente não eram poderosas e rápidas o suficiente. Atualmente, você pode fazer coisas muito mais legais, em menos tempo, com um idioma de nível superior.
O que parece mais interessante, escrever um protótipo rápido para um jogo simples e brincar com variações de um algoritmo, ou lutar com registros e coisas de baixo nível?
fonte
Não acho que seja uma péssima ideia, mas quão complexo é o programa que você vai dar a esses alunos? A montagem exige muito mais trabalho. Pode ser bom começar com coisas muito básicas e depois movê-las para algo mais fácil de trabalhar, uma vez que tenham apreciado o trabalho no nível mais baixo. Os alunos iniciantes às vezes têm idéias na cabeça que codificam o próximo Halo, MS Office ou AutoCAD ou algo assim, e quando vêem quanto trabalho entra em uma linguagem assembly simples , podem ficar assustados, então deixe claro que há coisas melhores do que montagem e, em seguida, mova-as para uma vez que tenham visto os conceitos. Você também pode tentar ensinar a montagem simultaneamente com outra coisa como C.
Além disso, qual linguagem assembly? Lembro-me de alguma forma que o MIPS era relativamente fácil de trabalhar, e acho que ele roda em um emulador, portanto não há perigo de causar problemas à máquina real , embora possa haver ferramentas melhores do que agora.
Isso pode funcionar bem, se for feito da maneira certa. Seja cuidadoso...
fonte
Assembléia foi a primeira língua que aprendemos na escola de eletrônica (em 1900) e parecia uma escolha natural. Percorremos nossos cursos, desde componentes discretos até lógica resistor-transistor, portas lógicas, circuitos integrados, processadores e programação em montagem. Muitos dos alunos nessas aulas nunca haviam programado em nenhum idioma antes e eles o pegaram.
Portanto, a montagem pode ser uma boa escolha para o primeiro idioma, se a base certa for estabelecida para o aluno. Para quem tem como objetivo ser um desenvolvedor de aplicativos ou Web, acho que a montagem é provavelmente um ponto de partida de nível muito baixo.
fonte
Uma coisa é certa: se as pessoas, aprendendo primeiro a montagem, conseguirem, serão incríveis programadores.
Isso me lembra quando aprendi a dirigir. Minha mãe insistiu
O raciocínio é que ela não queria que eu me distraísse com mais do que eu precisava, ao mesmo tempo.
Aplique isso a aprender a programar, é necessário jogar tudo no aluno de uma só vez? Eles aprendem o que é uma variável e ao mesmo tempo aprendem quantos dados podem armazenar em que tipo de registro?
Mais da metade da minha turma falhou em nossa turma de montagem, e este era um grupo de pessoas que, na época, se consideravam conhecedor de programação há mais de 2 anos.
Minha preferência pessoal, se eu tivesse que aprender tudo de novo, seria começar com uma linguagem que faça o máximo possível para mim. Então, como eu aprendo, volte para os idiomas de nível inferior.
fonte
Não
Por que isso é vantajoso? Você pode fornecer um exemplo ou uma dica de como isso pode ter algum valor?
Vantagens: Nenhuma.
Desvantagens:
Um monte de curiosidades aleatórias sobre sinalizadores, estados e registros, e esquemas complexos de endereçamento de memória e dispositivos de E / S e DMA, além de interrupções e ciclos de clock e outras coisas. Nada disso ajuda a entender linguagens e computação modernas baseadas em VM.
Uma desconexão da solução real de problemas na qual os computadores são realmente aplicados.
Um divórcio dos usuários finais e os dados práticos e os problemas de processamento que eles precisam resolver.
Uma série desnecessária de explicações sobre máquina e máquina virtual, compilador e intérprete e toda a pilha de tartarugas segurando o mundo.
Muitos detalhes "esta é a implementação física de um 'objeto'" na linguagem de nível superior à qual eles finalmente chegam.
Muitos detalhes "é assim que as funções do método são despachadas" na linguagem de nível superior a que elas finalmente chegam.
Muitas explicações "isso não se aplica ao 80386, mas ao chipset 80586".
Muitas chamadas de API de sistema operacional de baixo nível para fazer um programa ASM fazer qualquer coisa que pareça semelhante a ser útil por alguém.
O objetivo de uma primeira linguagem de programação não é dominar o chipset.
O objetivo de uma primeira linguagem de programação é
Entenda como pensar sobre computação.
Entenda como fazer um processamento de dados útil.
Entenda como fazer algo. Projeto - código - teste.
fonte
Se eu tivesse a tarefa de elaborar um currículo, eu teria dois cursos em execução ao mesmo tempo no primeiro semestre: asm + organização / arquitetura básica de computadores e um curso baseado em SICP, fundado em Scheme. O segundo semestre seria orientado em torno de estruturas de dados e algoritmos elementares no esquema.
O segundo ano seria um projeto de um ano, usando Delphi, C ++ ou C #, focado no design moderno de software (design OO, design funcional, engenharia de software, controle de versão, etc.).
O efeito deve ser o de fornecer uma base intensa tanto no abstrato quanto no prático, levando a cursos aprofundados no terceiro e quarto anos.
fonte
Eu costumava fazer aulas de introdução à ciência da computação, e acho uma péssima ideia.
Dito isto, acho que o hardware de montagem / computador deve ser uma classe muito precoce - idealmente, o primeiro trimestre da maior. Peça aos alunos que obtenham um idioma de alto nível em seus cintos e, em seguida, entrem imediatamente em itens de hardware de baixo nível antes de seguir para estruturas de dados - idealmente em um idioma que exija gerenciamento de memória.
fonte
Assembly era minha segunda língua, logo após o BASIC. No entanto, quando eu estava aprendendo, era um momento diferente. Meu Commodore 64 tinha outros idiomas disponíveis, mas se você queria que algo parecesse rápido, ou queria fazer mais de uma coisa por vez, precisava aprender a linguagem assembly e como trabalhar com interrupções. O sistema operacional de ambiente gráfico (GEOS), que deu ao Commodore um sistema de janelas, também foi montado. Foi em geral a melhor API de montagem que eu já vi. Também foi a única plataforma que usei onde você pode estilizar seu código. É isso mesmo, você pode usar itálico e tamanhos de fonte diferentes - algo que se mostrou útil para a leitura dos comentários.
Eu aprendi muito sobre como o Commodore funcionava, mas o chip Motorolla tinha um conjunto de códigos de operação muito simples. Não é muito difícil manter menos de 255 códigos de operação separados. I foi não capaz de apostar minha experiência na 6510 chip de Motorolla a programação para o Intel 8086. Os chips e arquiteturas de sistemas eram muito diferentes. Eu imagino que eu teria tido o mesmo problema ao passar para o chip Motorolla 68000 da Amiga também.
Em resumo, eu tenho que discordar totalmente de quem diz que a Assembléia deve ser uma boa primeira língua. Aqui está o porquê:
Atualmente, a linguagem assembly é usada para acelerar certas ações finitas, em que o assembly artesanal seria mais rápido que o assembly gerado pelo compilador. A estrutura principal do aplicativo é feita em uma linguagem de nível superior, como C, C ++, etc. É claro que a programação de montagem se tornaria muito importante se você começar a escrever compiladores. Quantos de nós fazem isso?
fonte
Fiz assembléia no último ano do ensino médio. Eu já havia participado de aulas em Java, Pascal, C e C ++, e não era proficiente em nenhuma delas e realmente era péssima na Assembléia - era a única pessoa que participava da aula em um programa de ensino à distância na faculdade comunitária, me levou um um mês ou dois antes que alguém pudesse colocar o compilador trabalhando para mim.
Não acho que seja necessário ou sábio aprender a linguagem assembly primeiro, mas é inteligente aprender o que eles ensinam nas primeiras semanas de montagem, sobre como o processador funciona e alguns truques de depuração. Achei essas coisas muito interessantes e esclarecedoras como neófito.
fonte
Não vejo por que isso não pôde ser feito, embora a idéia de que seja boa dependa totalmente da multidão que você a ensinaria. Alguém cujo objetivo final é ser um desenvolvedor web provavelmente ficaria entediado e poderia desistir, pois isso não lhes daria a satisfação imediata de criar algo que Python, Ruby etc. Se eles quiserem trabalhar em hardware ou em outros projetos de baixo nível, acho que seria um bom começo (desde que você forneça o suficiente da arquitetura de um computador para que faça sentido). Eu acho que isso poderia ajudar as pessoas a escrever um código melhor no futuro, embora eu ache que seria mais difícil do que aprender outros idiomas para começar.
fonte
Eu acho que a linguagem assembly só fará sentido se você se concentrar em coisas como:
Sem um foco nessa área, é apenas uma linguagem simplista que tenderá a ensinar maus hábitos de organização. É bom ter a codificação no nível da máquina no kit de ferramentas para saber como as coisas funcionam, mas não é um bom primeiro idioma.
Gostaria de ter alguém interessado em um idioma de nível superior. Então ensine C ++; em seguida, montagem com foco em como os compiladores C ++ geram código de montagem. O entendimento de tabelas em V e outros recursos de linguagem de nível superior ajudará o desenvolvedor a pensar sobre como as linguagens realmente funcionam do que apenas arquivar as informações em 'magia'.
fonte