전혀 프로그래밍을 접해본적이 없는 사람에게 C 언어를 가르쳐야

dopesoul의 이미지

이번에 05학번 신입생들에게 C 언어와 8051 Assembly 를
가르쳐야 합니다. 기간은 3~4주로 잡고 있습니다.
저는 혼자 독학을 해서 배워서 그런지 남에게 어떻게 가르쳐줄지가
난감합니다. 교육대상자에게 프로그래밍 배경지식은 전혀 없습니다.
저와 같은 경험을 해보신 고수님들의 기막힌 답변을 기다립니다.
따라하는것 이외에는 왕도가 없다는 사실을 알지만...
흑...

ed.netdiver의 이미지

python으로 먼저 입문시키심이 어떠실지^^;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

mirr의 이미지

가르치는것 정도는 문제 없지 않을까요?

얼마나 수준을 만들어 줄지가 문제죠...

가르치는거야 대~~충 샬라샬라 가르치면 까지꺼 머

배울놈은 배우겠지유~ 안그류~? ㅡ,.ㅡ - 개콘 수위아저씨 -

내 마음속의 악마가 자꾸만 나를 부추겨.
늘 해왔던 것에 만족하지 말고 뭔가 불가능해 보이는 것을 하라고 말야.

정태영의 이미지

qed wrote:
python으로 먼저 입문시키심이 어떠실지^^;

8051 이 나온 것 보면.. 소형 cpu 가지고 노는 동아리(or 학회?) 인 듯 한데.. python 보다는.. c 를 가리키고.. 8051 어셈블리보다 avr 에 입문시키는 것이 더 낫지 않을까요? =3=33

(avr-gcc / avr-libc 등을 이용할 수 있도록 말이죠.. 8051 등을 위한 c 컴파일러는 상당히 비싸지만... avr에는 avr-gcc 라는 싸고 훌륭한 컴파일러가 존재하니까요..)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

Darkcircle의 이미지

대충 소스 던져놓고....

printf("바보 -_-\n"); // 이부분이 어떤 역할을 하는지를 기술하시오

라고 하면 -_- 이해하겠쬬?
즉, 니꼴리는대로 해석해봐라 -_-a 이겁니다.

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

ed.netdiver의 이미지

ㅎㅎ, 그럴지도 모르겠네요^^;
다만, 프로그래밍이란것에도 처음 입문하는 이들을 대상으로 한다기에
c보단 python을^^;

덧. 근데, 8051보다 avr이 더 쉽나요?

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

ssif의 이미지

제 주관적인 답변입니다.
따라 올사람만 따라오라고 하시는것이 좋을것 같습니다.

누구나 모든것은 처음부터 하게 됩니다.
태어날때부터 배운 사람은 없습니다.
기본적인 내용만 가르치시고,그 이외는 혼자서 터득해야합니다.
그중 상당수는 적성에 맞지 않는다,재미없다,시간낭비 했다,선배들이 안가르처 주어서 못하겠다 의 이유로 그만두게 됩니다.

그런 사람들은 과감하게 제명하시기 바랍니다.언젠가는 다시 오겠지하면서 기다리다가는 상처만 받습니다.끝까지 남는사람만이 하나라도 더 배우게 됩니다.

봄들판에서다

정태영의 이미지

qed wrote:
덧. 근데, 8051보다 avr이 더 쉽나요?

거기서 거기죠 뭐 :) 다만 isp 등이 제공되니 프로그래머를 따로 안사도 되기도 하고... risc 이며.. 종류가 다양하죠 ;)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

jachin의 이미지

C언어의 처음과 끝을 모두 가르쳐 주기에 3~4 주란 시간은 많이 모자르지 않을까요?

언어의 기초만 가르치고 외우도록만 하시면 앞으로 기회가 되어 조금 어려운 과정을

프로그래밍 하게 되더라도 분명 많은 도움이 될 것입니다.

자료형과 연산 순위, 메모리 주소 지정 방식을 가르쳐 주시고, for 와 if 를 적절하게 넣은 예제,

그리고 1차원 배열과 포인터를 가르쳐 그 개념만 깨우쳐 주신다면 C언어의 기본은 충분히

가르쳐 주신 것이라 할 수 있지 않겠습니까?

(파일 포인터까지 다루신다면 성공하신 것이겠죠.)

IsExist의 이미지

예제, 직접 타입핑, 실행 반복, 연습문제 코딩 숙제 할당
제어구조와 함수를 끝내면 머리로 실행하는 방법 교육
위에까지 1인으로 하게 하시고요

중급 포인터, 배열 교육, 함수 포인터 교육 후에는 코딩 숙제 팀(2인이 적당할 듯)으로.

c 표준 함수 교육후 2천 라인 미만의 팀 프로젝트 과제로 마무리 하면 될듯 합니다.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

yglee의 이미지

정태영 wrote:
qed wrote:
python으로 먼저 입문시키심이 어떠실지^^;

8051 이 나온 것 보면.. 소형 cpu 가지고 노는 동아리(or 학회?) 인 듯 한데.. python 보다는.. c 를 가리키고.. 8051 어셈블리보다 avr 에 입문시키는 것이 더 낫지 않을까요? =3=33

(avr-gcc / avr-libc 등을 이용할 수 있도록 말이죠.. 8051 등을 위한 c 컴파일러는 상당히 비싸지만... avr에는 avr-gcc 라는 싸고 훌륭한 컴파일러가 존재하니까요..)

128 만세~ \(^^)/

avr이 편하고 좋죠. 하지만 너무 간단해서 자칫하면 실제 CPU가 어떻게 덧셈, 뺄셈을 하는지 모르는 사태가 발생하기도 하죠. -_-;

기초교육은 C보다는 ASM 노가다가 좋을듯 싶습니다.

마이크로프로세서 교육에 python를 사용하면..... OTL...

peccavi의 이미지

c 뭐 그까이꺼 뭐 대~충~ 함수 두서너개 맨들고 뭐 지역변수 전역변수 대~충~
선언한번 해준담에 구구단 프로그램 하나 대~충~ 짜게 하면 뭐 그까이꺼
다들 개념은 잡는거 아니것습니까 그까이어~

개콘 경비아저씨 버전이었습니다.

역시 썰렁.. 죄송하구요..:oops:

몇년전에, 프로그래밍을 한번도 안해본 사람들을 대상으로 c를 가르친 경험이 있었는데

테트리스를 만드는걸 목표로 잡았었습니다.

언어를 처음 하는 사람들이라, 목표가 많이 어려웠었지만

문법은 각자 공부하게 하고, 테트리스에 사용되는 로직과 그걸 코드로 구현하는

방법만 도와주면서 이끌어주니깐

3개월동안 테트리스는 뚝딱 해내더군요..

문법도 중요하지만, 그 언어를 이용해서 문제를 해결해 나가는 능력을 키워주는게 가장 중요하다고 봅니다.

----
jai guru deva om...

서지훈의 이미지

가르치고자 하는 것에 자신이 없다면...
역시나 토론 수업이 최고입니다.

강의식 수업은 정말로 타고난 수업이 아니면 별다른 효과도 없고.
나중에 머리에 남는거 없습니다.

토론식 수업으로 이끌어 보세요.
문제를 제기하고 해결하는 방법을 찾아가는 식으로...
정말 이게 아주 많이 도움이 되고...
이보다 좋은 수업 방법은 없을것 같군요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

zeroxy의 이미지

저도 05학번들에게 8051 어셈블 가르칠 계획인데요..
전 2051로 간단한 led점등 보드 만들고 난담에 어셈을 가르칠 꺼거든요..
간단한 점등 프로그램 짜서 보여주고 응용해서 짤사람은 짜라고 할껀데요...
저같은 경우엔 할사람은 하지 말래도 한다 라는 말을 믿기땜시..
소스코드 보여주고 자발적인 참여 유도가 좋지않을까요..
c도 8051 제어를 위해서라면 코드 보여주고 응용하라고 할듯합니다...

dopesoul의 이미지

보시면알겠지만 전 128용 라이브러리 개발 프로젝트를 진행하고있습니다 ㅡ.ㅡ;
8051 은 Memorymap 이라던가 외부디바이스 인터페이싱을 가르치기위해서
하고있구요^^; 보드도 직접 땜질하는터라...
가르치는거에대한 얘기가 별로 없네요 ㅠ.ㅠ

owlet의 이미지

정태영 wrote:

(avr-gcc / avr-libc 등을 이용할 수 있도록 말이죠.. 8051 등을 위한 c 컴파일러는 상당히 비싸지만... avr에는 avr-gcc 라는 싸고 훌륭한 컴파일러가 존재하니까요..)

8051을 위해서 sdcc가 있지요
apt-get install sdcc :)
ssif의 이미지

주제와 관련 없는 내용이긴 하지만 질문 한가지 하겠습니다.
avr에 대해서 독학 하려고 합니다.
어떻게 공부하면 좋을지 갑자기 궁금해졌습니다.
c언어 기본 문법은 알고 있습니다.
atmel128 이 장착된 상용보드가 하나 있는 상황이고
(제가 구입한게 아니라 학교 교육용으로)
전자 회로에 관해서는 무지합니다.
데이타시트조차 못보고 있는 상황이라....

서점에가보니 관련 서적이 한권 보입니다.
옴사에서 출간된 책이었습니다.
그 이외에는 어디서부터 손을 대야 할지 난감합니다.

봄들판에서다

ed.netdiver의 이미지

ssif wrote:
주제와 관련 없는 내용이긴 하지만 질문 한가지 하겠습니다.
avr에 대해서 독학 하려고 합니다.
어떻게 공부하면 좋을지 갑자기 궁금해졌습니다.
c언어 기본 문법은 알고 있습니다.
atmel128 이 장착된 상용보드가 하나 있는 상황이고
(제가 구입한게 아니라 학교 교육용으로)
전자 회로에 관해서는 무지합니다.
데이타시트조차 못보고 있는 상황이라....

서점에가보니 관련 서적이 한권 보입니다.
옴사에서 출간된 책이었습니다.
그 이외에는 어디서부터 손을 대야 할지 난감합니다.

잘 모르지만, 또 주제와 상관없는데 그냥 조금 이야기하면요^^;
startup code부터 공부해보시면 어떨까 싶습니다.
잘 아시겠지만, 마이컴이든 프로세서든 최초 reset vector로의
poweronreset jump시점부터 main function이 호출되는,
보다 정확히는 stack을 잡고, 사용할수 있는 시점까지의 코드가
되겠네요.
이부분까지면 asembler는 땡입니다.
그 다음부터는 걍 c로 짜시면 됩니다.
assembler를 할줄 아는게 큰 일인것처럼 보일수도 있지만,
실은 compiler가 할 일을 사람이 손수하는것밖에는 안됩니다.
(정말 생 노가다에 의미없는 닭질입니다.)
굳이 optimize를 하고 싶을때는 compiler가 내놓는 asm code에서
필요한 부분만 따로 subroutine으로 뽑아내서 쓰면 됩니다.
inline이야기들 많이 하지만, 굳이 쓰겠다면야 그것도 마찬가지입니다.
(cpu의 동작원리를 알고 싶으시다구요? 그것까지 아는데 startup이면
충분합니다.^^;)

avr을 무슨 용도로 study하시려는지는 잘 모르겠지만,
가전제품의 lcd, button, timer, thermister adc같은류수준의
마이컴 프로그래밍밖에 못합니다.
그걸가지고 뭘 할 게 못된다는 거죠.(그쪽일 하는 분 주위에 계심
함 물어보세요. 허무하실겁니다.^^;)

그보다는 차라리 os를 build-up할수 있는 processor쪽을 권하고
싶네요. 이거라면, scheduler, mmu등 훨씬 고난이도이면서
재미도 있겠다 싶습니다.
embedded 이야기들 많이 하지만, 그중 마이컴은 제일 낮은
순위라고 보심 됩니다.
차라리 arm이나 68000 series, 860, dsp... 정 뭐하면 196...
거기에 os(LINUX!!, 그밖의 잡다한 tiny...^^;)
이런쪽을 권해드리고 싶습니다.

이상, 걍 주절주절이였습니당^^;

좋은 하루하루 되세용~~~

덧, 헉, 제대로 알지도 못하면서 까불지 마라같은 악플은 감사히
먹겠습니당^^;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

ssif의 이미지

+_+ 헛, 답변감사합니다.

qed wrote:

잘 모르지만, 또 주제와 상관없는데 그냥 조금 이야기하면요^^;
startup code부터 공부해보시면 어떨까 싶습니다.
잘 아시겠지만, 마이컴이든 프로세서든 최초 reset vector로의
poweronreset jump시점부터 main function이 호출되는,
보다 정확히는 stack을 잡고, 사용할수 있는 시점까지의 코드가
되겠네요.
이부분까지면 asembler는 땡입니다.
그 다음부터는 걍 c로 짜시면 됩니다.
assembler를 할줄 아는게 큰 일인것처럼 보일수도 있지만,
실은 compiler가 할 일을 사람이 손수하는것밖에는 안됩니다.
(정말 생 노가다에 의미없는 닭질입니다.)
굳이 optimize를 하고 싶을때는 compiler가 내놓는 asm code에서
필요한 부분만 따로 subroutine으로 뽑아내서 쓰면 됩니다.
inline이야기들 많이 하지만, 굳이 쓰겠다면야 그것도 마찬가지입니다.
(cpu의 동작원리를 알고 싶으시다구요? 그것까지 아는데 startup이면
충분합니다.^^;)

avr을 무슨 용도로 study하시려는지는 잘 모르겠지만,
가전제품의 lcd, button, timer, thermister adc같은류수준의
마이컴 프로그래밍밖에 못합니다.
그걸가지고 뭘 할 게 못된다는 거죠.(그쪽일 하는 분 주위에 계심
함 물어보세요. 허무하실겁니다.^^;)

그보다는 차라리 os를 build-up할수 있는 processor쪽을 권하고
싶네요. 이거라면, scheduler, mmu등 훨씬 고난이도이면서
재미도 있겠다 싶습니다.
embedded 이야기들 많이 하지만, 그중 마이컴은 제일 낮은
순위라고 보심 됩니다.
차라리 arm이나 68000 series, 860, dsp... 정 뭐하면 196...
거기에 os(LINUX!!, 그밖의 잡다한 tiny...^^;)
이런쪽을 권해드리고 싶습니다.

이상, 걍 주절주절이였습니당^^;

좋은 하루하루 되세용~~~

덧, 헉, 제대로 알지도 못하면서 까불지 마라같은 악플은 감사히
먹겠습니당^^;

avr을 공부하려는 목적은 졸작에 이넘을 사용해서 입니다.
원래 과가 소프트웨어만을 위주로 하는 곳이어서 하드웨어에 관해서는 무지합니다.졸작은 아주 간단(?)한 내용입니다.

avr이 장착된 보드에 모터들을 연결해서 4족 형태의 물건(?..로봇형체)를 만들고 시리얼 통신으로 모터들을 제어하는것입니다.
보드엔 블루투스 모듈을 연결해서 중계기에 장착된 블루투스모듈로 부터 제어 신호를 받습니다.중계기는 다시 원격지의 클라이언트로 부터 데이터를 받아 4족 보행 형태의 물건에 제어신호를 전달해주게 됩니다.클라이언트는 모두 802.11b를 이용한 무선랜을 사용할 예정입니다.^^;;

봄들판에서다

ed.netdiver의 이미지

(본 쓰레드와 상관없는 내용을 자꾸 올려서 죄송합니당^^;)
헉, 별로 안간단한것 같은데요?
avr에야 232, step motor제어용 pwm출력정도가,
(혹은 current sensing용 adc정도)가 붙는다 쳐도,
bluetooth의 L2Cap까지야 open된거 갖다 붙인다 쳐도 profile은
만드셔야 할테고, 무선랜에...^^;
성공하시길 기원합니다^O^//

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

NeutralGray의 이미지

3-4주의 기간동안 가르칠 수 있는 것은 뻔합니다. 차라리, 도구 사용법(컴파일러, IDE, 프로그래머 등등)을 가르치십시오. 아니면 예제를 돌려보는걸 직접 보여주시는 것도 좋습니다. 신입생들에게 이론 문법 설명해봤자 귀신 씨나락 까먹는 소리고, 일단은 뭔가 눈에 보이는걸 보여주는게 급선무입니다.

yglee의 이미지

ssif wrote:
+_+ 헛, 답변감사합니다.

qed wrote:

잘 모르지만, 또 주제와 상관없는데 그냥 조금 이야기하면요^^;
startup code부터 공부해보시면 어떨까 싶습니다.
잘 아시겠지만, 마이컴이든 프로세서든 최초 reset vector로의
poweronreset jump시점부터 main function이 호출되는,
보다 정확히는 stack을 잡고, 사용할수 있는 시점까지의 코드가
되겠네요.
이부분까지면 asembler는 땡입니다.
그 다음부터는 걍 c로 짜시면 됩니다.
assembler를 할줄 아는게 큰 일인것처럼 보일수도 있지만,
실은 compiler가 할 일을 사람이 손수하는것밖에는 안됩니다.
(정말 생 노가다에 의미없는 닭질입니다.)
굳이 optimize를 하고 싶을때는 compiler가 내놓는 asm code에서
필요한 부분만 따로 subroutine으로 뽑아내서 쓰면 됩니다.
inline이야기들 많이 하지만, 굳이 쓰겠다면야 그것도 마찬가지입니다.
(cpu의 동작원리를 알고 싶으시다구요? 그것까지 아는데 startup이면
충분합니다.^^;)

avr을 무슨 용도로 study하시려는지는 잘 모르겠지만,
가전제품의 lcd, button, timer, thermister adc같은류수준의
마이컴 프로그래밍밖에 못합니다.
그걸가지고 뭘 할 게 못된다는 거죠.(그쪽일 하는 분 주위에 계심
함 물어보세요. 허무하실겁니다.^^;)

그보다는 차라리 os를 build-up할수 있는 processor쪽을 권하고
싶네요. 이거라면, scheduler, mmu등 훨씬 고난이도이면서
재미도 있겠다 싶습니다.
embedded 이야기들 많이 하지만, 그중 마이컴은 제일 낮은
순위라고 보심 됩니다.
차라리 arm이나 68000 series, 860, dsp... 정 뭐하면 196...
거기에 os(LINUX!!, 그밖의 잡다한 tiny...^^;)
이런쪽을 권해드리고 싶습니다.

이상, 걍 주절주절이였습니당^^;

좋은 하루하루 되세용~~~

덧, 헉, 제대로 알지도 못하면서 까불지 마라같은 악플은 감사히
먹겠습니당^^;

avr을 공부하려는 목적은 졸작에 이넘을 사용해서 입니다.
원래 과가 소프트웨어만을 위주로 하는 곳이어서 하드웨어에 관해서는 무지합니다.졸작은 아주 간단(?)한 내용입니다.

avr이 장착된 보드에 모터들을 연결해서 4족 형태의 물건(?..로봇형체)를 만들고 시리얼 통신으로 모터들을 제어하는것입니다.
보드엔 블루투스 모듈을 연결해서 중계기에 장착된 블루투스모듈로 부터 제어 신호를 받습니다.중계기는 다시 원격지의 클라이언트로 부터 데이터를 받아 4족 보행 형태의 물건에 제어신호를 전달해주게 됩니다.클라이언트는 모두 802.11b를 이용한 무선랜을 사용할 예정입니다.^^;;

-_-;

쓰레드와 상관없는 이야기지만...

후배가 대학원가면서 저한테 넘겨준 (전 군대갔다와서 후배보다 늦어요... ㅜ_ㅜ) 4족 로봇이랑 똑같은걸 만들려고 하시나 보군요.

후배놈 해놓은거 보니 AVR대신 ARM7(s3c3410x)으로 설계했던데 구조 자체는 엄청 간단하더군요.

다만 모터값이 비싸다는... (디지탈 서보는 역시나... OTL)

초보자 용으로는 AVR이 좋습니다.

ATMega128정도만 되면 트레이서는 물론 간단한 2, 4족 로봇까지도 제작 가능하구요. 제작비용도 별로 부담스럽지도 않구요.

초보자들에게는 Z80도 버거울텐데 ARM을 쓰라고 하는건 자원 낭비인것 같습니다.

sh.의 이미지

c를 처음 공부할때 c 21일 완성 이라는 책을 봤었는데
이 책 구해서 진도 나가시면 3주안에 끝날듯합니다 8)

지금도 c는 제대로 할줄 모르지만 처음 배울때 좋았던 책중 하나가
Solving Engineering Problem with ANSI C(prentis-hall)
라고 원서이기는 한데 책도 얇고 1장 변수 2장 배열 3장 함수 이런식의
구성이 아니라서 도움이 많이 됐습니다.
제가 전자공학과였는데 1학년 1학기때 교재였네요.

creib2000의 이미지

경험상, 학생들에게 수학 문제를 손으로 푸는거하고, 코딩해서 숫자만 입력
받으면 자동으로 풀어주는것을 비교해서 보여주니 효과가 좋더군요.

장비 제어쪽도 프로그래밍이 꼭 필요한 분야지만, 실제 학생들이 접할 수 있는 분야에서 프로그래밍이 유용하게 쓰일 분야를 보여주는것도 좋을거 같습니다.

제가 아는 교수님은 프로그래밍 과목이 아닌데도 수학 문제를 낼때 프로그래밍으로 짜서 내라고 합니다. ㅡㅡ;
뭐, 언어야 알아서 하라고 하시고...

dopesoul의 이미지

뭔가 심각히 잘못아신분도 계시네요...
lcd 뭐 이정도 밖에 못하다니요^^;
video 게임도 만들수있구요
2족로봇 application 이나...
진짜 많이 쓸수있는데^^;

ed.netdiver의 이미지

*^^*; 잘 모르고 말씀드렸군요^^; 죄송함돠~(넙죽)^^;;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

yglee의 이미지

dopesoul wrote:
뭔가 심각히 잘못아신분도 계시네요...
lcd 뭐 이정도 밖에 못하다니요^^;
video 게임도 만들수있구요
2족로봇 application 이나...
진짜 많이 쓸수있는데^^;

불과 20여년전에 쓰던 8bit 컴퓨터 CPU가 바로 Z80이죠.

AVR정도면..... ^^

dopesoul의 이미지

헙?!
Havard 구조에
1클럭 1Instruction fetch
등...ㅠ.ㅠ 좋죠.
이놈으로 못할게없어뵙니다.