사람들에게 어셈블리 (일부 변형)를 첫 번째 프로그래밍 언어로 가르치는 것이 얼마나 좋은 생각이라고 생각하십니까? 예를 들어 Java 또는 Python을 배우는 것보다 훨씬 많은 노력이 필요하지만 "최소한의 고급 언어와 비교하여"최소한의 고급 언어와 비교하여 기계를 잘 이해해야합니다. 어떻게 생각해? 적어도 추가 노력을 기울일 준비가 된 사람들에게는 현실적인 아이디어입니까? 장점과 단점?
참고 : 저는 선생님이 아니에요
사람들에게 어셈블리 (일부 변형)를 첫 번째 프로그래밍 언어로 가르치는 것이 얼마나 좋은 생각이라고 생각하십니까? 예를 들어 Java 또는 Python을 배우는 것보다 훨씬 많은 노력이 필요하지만 "최소한의 고급 언어와 비교하여"최소한의 고급 언어와 비교하여 기계를 잘 이해해야합니다. 어떻게 생각해? 적어도 추가 노력을 기울일 준비가 된 사람들에게는 현실적인 아이디어입니까? 장점과 단점?
참고 : 저는 선생님이 아니에요
답변:
어셈블리 코드를 사용하여 새로운 프로그래머에게 영감을주는 것은 어려울 것입니다. 역동적 인 안녕하세요, 사용자 웹 사이트는 적은 노력으로 훨씬 시원합니다. 기본 수업이 동일하다는 것은 아니지만 입문 과정에는 많은 영감을주는 내용이 있거나 그렇지 않으면 두 번째 과정이 없을 것입니다.
초기 프로그래밍 과정이 Scheme에서 배운 것을 기억하며 .exe로 쉽게 컴파일하고 프로그램을 "실행"할 수 없다는 것에 대부분 좌절했습니다 (MS Visual Basic이 프로그래밍의 끝이라고 생각했습니다). 몇 년이 지나서야 내가 가지고있는 강력한 도구를 실제로 파악했습니다. 처음에는 좀 더 실용적이었던 것에 대해 초기 경험을 쌓았다면 더 고맙게 여기고 그 교훈을 더 잘 얻었을 것이라고 생각합니다.
저는 소프트웨어 공학과 CS 학생들 모두 에게 끔찍한 아이디어 라고 생각합니다. 일반적으로 전자 공학보다 프로그래밍에 관심이 많은 사람입니다.
그것은 수 있습니다 할 수 있지만, 그것이 의미하지 않는다 해야 할 수. 당시에는 가정용 컴퓨터로 정말 멋진 작업을 수행하는 방법은 어셈블리를 먼저 배우는 것이 었습니다. 초기 하드웨어 제한 때문이었습니다. 고급 언어는 강력하고 빠르지 않았습니다. 요즘에는 고급 언어로 더 짧은 시간에 훨씬 더 멋진 작업을 수행 할 수 있습니다.
더 재미있는 것은, 간단한 게임을위한 빠른 프로토 타입을 작성하고, 알고리즘을 변형하여 놀거나, 레지스터 및 저수준의 물건으로 고생하고있는 것은 무엇입니까?
나는 그것이 끔찍한 생각이라고 생각하지 않지만, 학생들에게 얼마나 복잡한 프로그램을 제공 할 것인가? 조립에는 더 많은 작업이 필요합니다. 아주 기본적인 것들로 시작한 다음 더 낮은 수준에서 일한 것에 대한 감사를 얻은 후에는 일하기 더 쉬운 것으로 옮기는 것이 좋습니다. 처음 학생들은 종종 자신의 머리에 아이디어들이 다음 헤일로, 또는 MS 오피스 또는 AutoCAD 또는 무언가를 코딩거야 얻고, 그들이 들어가는 방법 많은 일을 볼 때 간단한 어셈블리 언어, 그들은 겁 될 수 있으므로 명확하게 조립하는 것보다 더 좋은 것이 있고 개념을 본 후에 그것들로 옮기는 것입니다. C와 같은 다른 것과 동시에 assemlby를 가르 칠 수도 있습니다.
또한 어떤 어셈블리 언어입니까? MIPS는 작업하기가 비교적 쉬웠으며 에뮬레이터에서 실행되므로 실제 시스템에 문제가 발생할 위험은 없지만 지금보다 더 나은 도구가있을 수 있다고 생각합니다.
이 수 는 바로 끝낼 경우, 잘 작동합니다. 조심해...
어셈블리는 우리가 전자 학교에서 배운 첫 번째 언어였으며 (1900 년대로 거슬러 올라가는) 자연스러운 선택 인 것 같습니다. 우리는 이산 소자부터 저항 트랜지스터 로직, 로직 게이트, 집적 회로, 프로세서, 어셈블리 프로그래밍에 이르기까지 과정을 진행했습니다. 이 수업에 참여한 많은 학생들은 이전에 어떤 언어로도 프로그래밍 한 적이 없었고 바로 그것을 선택했습니다.
따라서 학생에게 적합한 기초가 마련되면 모국어에 적합한 어셈블리를 선택할 수 있습니다. 그러나 응용 프로그램이나 웹 개발자가 목표 인 사람에게는 어셈블리가 너무 낮은 수준이라고 생각합니다.
한 가지 확실한 것은 의회를 먼저 배우는 사람들이 그것을 만들면 놀라운 프로그래머가 될 것입니다.
이것은 내가 운전하는 법을 배웠을 때를 생각 나게한다. 엄마는 주장했다
자신감을 얻을 때까지 자동 차를 배우면 수동 차를 운전할 수 있습니다.
그녀는 내가 필요 이상으로 한 번에 산만 해지기를 원하지 않았다.
프로그래밍하는 법을 배우는 데 적용하십시오. 모든 것을 한 번에 학습자에게 던질 필요가 있습니까? 그들은 어떤 종류의 레지스터에 얼마나 많은 데이터를 저장할 수 있는지 동시에 변수가 무엇인지 배웁니다.
내 반의 절반 이상이 우리 집회 수업에 실패했으며, 그 당시에는 2 년 이상 프로그래밍에 대해 잘 알고 있다고 생각했던 사람들 그룹이었습니다.
개인적으로 선호하는 것은 모든 것을 다시 배워야한다면 가능한 한 많이하는 언어로 시작하는 것이 었습니다. 그런 다음 배우면서 하위 언어로 거꾸로 이동하십시오.
적어도 추가 노력을 기울일 준비가 된 사람들에게는 현실적인 아이디어입니까?
아니
하지만 기계를 잘 이해했을 것입니다
왜 유리한가요? 이것이 어떻게 가치가 있는지에 대한 예나 힌트를 제공해 줄 수 있습니까?
장점과 단점?
장점 : 없음
단점 :
플래그 및 상태 및 레지스터, 복잡한 메모리 어드레싱 방식, I / O 장치 및 DMA, 인터럽트 및 클럭 사이클 및 항목에 대한 무작위 퀴즈 현대 VM 기반 언어 및 컴퓨팅에 대한 이해를 돕는 것은 없습니다.
실제로 적용되는 컴퓨터에 대한 실제 문제 해결과의 연결을 끊습니다.
최종 사용자와의 이혼과 그들이 해결해야하는 실제 데이터 및 처리 문제.
머신과 가상 머신, 컴파일러, 인터프리터 및 거북의 세계에 대한 설명이 불필요합니다.
더 높은 수준의 언어로 된 "자체의 물리적 구현"에 대한 자세한 설명은 결국 도달하게됩니다.
더 높은 수준의 언어로 된 "메소드 함수가 전달되는 방법"이라는 많은 세부 정보가 결국 도착합니다.
많은 "이것은 80386에는 적용되지 않지만 80586 칩셋에는 적용됩니다"설명.
ASM 프로그램이 누군가에게 유용한 것처럼 보이는 것을 수행하도록하는 많은 저수준 OS API 호출.
첫 번째 프로그래밍 언어의 요점은 칩셋을 마스터하지 않는 것입니다.
첫 번째 프로그래밍 언어의 요점은
컴퓨팅에 대해 생각하는 방법을 이해하십시오.
유용한 데이터 처리 방법을 이해하십시오.
무언가를하는 방법을 이해하십시오. 디자인-코드-테스트.
커리큘럼을 설계해야한다면 첫 학기에는 asm + 기본 컴퓨터 구성 / 아키텍처와 Scheme에 설립 된 SICP 기반 코스라는 두 가지 코스가 있습니다. 두 번째 학기는 Scheme에서 데이터 구조와 기본 알고리즘을 중심으로 진행됩니다.
두 번째 해는 최신 소프트웨어 설계 (OO 설계, 일부 기능 설계, 소프트웨어 엔지니어링, 버전 제어 등)에 중점을 둔 Delphi, C ++ 또는 C # 중 하나를 사용하는 1 년 동안의 프로젝트입니다.
그 효과는 추상과 실용에 강점을 두어 3 년과 4 년에 심층적 인 과정을 이끌어 내야합니다.
저는 컴퓨터 과학 수업을 처음 접했는데 나쁜 생각이라고 생각합니다.
그러나 어셈블리 / 컴퓨터 하드웨어는 매우 초기 수준이어야한다고 생각합니다. 학생들에게 벨트 아래에서 하나의 고급 언어를 습득 한 다음, 메모리 관리가 필요한 언어로 데이터 구조로 이동하기 전에 저급 하드웨어로 바로 뛰어 들게하십시오.
어셈블리는 베이직 직후의 제 2 언어였습니다. 그러나 내가 배우고있을 때는 다른 시간이었습니다. Commodore 64는 다른 언어를 사용할 수 있었지만, 빠른 속도로 보이고 싶거나 한 번에 여러 가지 작업을 수행하려면 어셈블리 언어와 인터럽트 작업 방법을 배워야했습니다. Commodore에 창 시스템을 제공 한 GEOS (Graphic Environment Operating System)도 모두 조립되었습니다. 내가 본 것 중 최고의 어셈블리 API였습니다. 또한 코드 스타일을 지정할 수있는 유일한 플랫폼이었습니다. 맞습니다. 기울임 꼴과 다른 글꼴 크기를 사용하여 주석을 읽는 데 유용하다는 것을 알 수 있습니다.
Commodore의 작동 방식에 대해 많은 것을 배웠지 만 Motorolla 칩에는 매우 간단한 opcode 세트가 있습니다. 255 개 미만의 opcode를 서로 분리하여 유지하는 것은 그리 어렵지 않습니다. 나는이었다 하지 칩 및 시스템 아키텍처가 너무 달랐다 인텔 8086 프로그래밍에 Motorolla 6510 칩에 내 경험을 걸다 수. Amiga의 Motorolla 68000 칩으로 이동하는 데에도 같은 문제가 있었을 것입니다.
요컨대, 나는 총회가 좋은 모국어가되어야한다고 말하는 사람에게 전적으로 동의하지 않아야한다. 이유는 다음과 같습니다.
오늘날 어셈블리 언어는 손으로 만들어진 어셈블리가 컴파일러에서 생성 한 어셈블리보다 빠른 특정 유한 작업의 속도를 높이는 데 사용됩니다. 응용 프로그램의 기본 구조는 C, C ++ 등과 같은 고급 언어로 수행됩니다. 물론 컴파일러 작성을 시작하면 어셈블리 프로그래밍이 매우 중요해집니다. 우리 중 몇 명입니까?
고등학교 졸업반에 집회를 가졌습니다. 이미 Java, Pascal, C 및 C ++로 수업을 수강했으며 그 중 어느 것도 능숙하지 않았고 실제로 회의에서 빨려 들었습니다. 커뮤니티 칼리지의 원격 교육 프로그램에서 수업을 듣는 유일한 사람은 나를 데려갔습니다. 누군가가 나를 위해 컴파일러를 작동시키기까지 한 달이나 두 달 전에.
어셈블리 언어를 먼저 배우는 것이 필요하거나 현명하다고 생각하지는 않지만, 처음 몇 주 동안 어셈블리에서 가르치는 내용, 프로세서 작동 방식 및 일부 디버그 트릭에 대해 배우는 것이 현명합니다. 내가 네오 파이트로서 매우 흥미롭고 깨달음을 알게 된 것들.
나는 그것이 왜 그렇게 할 수 없는지 알지 못하지만 그것이 얼마나 좋은 아이디어인지는 당신이 그것을 가르치는 군중에 달려 있습니다. 웹 개발자라는 최종 목표를 가진 사람은 아마도 지루 해져서 파이썬, 루비 등 무언가를 만드는 것에 대한 즉각적인 만족을 줄 수 없기 때문에 그만 둘 수도 있습니다. 그들이 결국 하드웨어 나 다른 저수준 프로젝트에서 일하기를 원한다면 그것은 괜찮은 시작이라고 생각합니다. (컴퓨터 아키텍처 배경을 충분히 제공한다면 말이됩니다.) 다른 언어를 배우기 시작하는 것보다 어렵다고 생각하지만 앞으로 사람들이 더 나은 코드를 작성하는 데 도움이 될 수 있다고 생각합니다.
어셈블리 언어는 다음과 같은 것에 집중할 때만 의미가 있다고 생각합니다.
이 분야에 중점을 두지 않으면 나쁜 조직 습관을 가르치는 경향이있는 단순한 언어 일뿐입니다. 기계 수준 코딩은 도구 키트에 포함되어 있으면 작동 방식을 알 수 있지만 모국어는 좋지 않습니다.
더 높은 수준의 언어에 관심이있는 사람이 있습니다. 그런 다음 C ++을 가르치십시오. 그런 다음 C ++ 컴파일러가 어셈블리 코드를 생성하는 방법에 중점을 둔 어셈블리입니다. v-tables 및 기타 고급 언어 기능을 이해하면 '매직'에서 정보를 제출하는 것보다 언어가 실제로 어떻게 작동하는지 생각하는 데 도움이됩니다.