2008. 12. 2. 23:37

모 여대생들과 한학기 동안 프로그래밍을…

한국에 6개월 동안 머물게 되면서 모여대의 (컴퓨터)비전공 학생들에게 자바를 통한 객체지향을 가르치는 좋은 기회를 가졌다.여학생들 앞이라 떨리고 전공학생들에게 프로그램을 가르친다는 부담감을 가지고 시작한 수업은 행운의 번호라고 하는 7명의 학생으로 시작되었다. 10 이하면 폐강이 되기고 나는 실직이 되기 때문에 어찌할까 걱정했는데 마음이라도 알아 준듯 2번째 수업부터는 22명의 학생들이 수강을 하게되어 이렇게 떨리는 나의 여대 강의는 시작이 되었다. 평소에 프로그램 전공이 아닌 학생들에게 프로그램을 가르치는 것에 관심이 많은 나에게는 정말 좋은 기회였다.

처음에는 쉬운 것들만 가르치려고 했는데 학생들이 따라오고 숙제도 성실하게 해주어 생각보다 push (the limits) 했고 그래서 많은 것을 같이 나눌수 있었던것 같다. 마지막 숙제로 한학기 동안 배우면서 이해되지 않는 것을 적어 보라는 과제를 내었는데 여기에서 많이 나온 질문들과 한학기 수업중에 설명하기 어려웠던 부분을 정리해보려고 한다. 이러한 개념들을 사전 지식이 없는 학생들에게 가르치는 효과적인 방법이 있다면 아래 답글에 많이 달아 주시기 부탁드립니다. 다음 수업에 많이 활용할 있을 것입니다.

우선 가장 어려웠던것은 개념을 가르치는 일이었다. 대부분의 학생이 논리 (loop 조건) 매우 강하나 클래스가 나오면서 부터 필드니, method 값을 넘기는 등을 이해하지 못했다. (아마 설명하지 못해서일 것이다.)

예를 들면

class Foo {

   void hello(int a) {

       a …

   }

 

public class main( String args[]) {

    Foo f = new Foo();

     int a=3;

     f.hello(a)

 }

이런 경우 main a hello method 안의 a 매우 혼동해 하는 경우가 많았다.

다른 어려운 것은 return값을 어떻게 정하는가에 대한 어려움이다. 아무래도 순차적인 방식의 논리 전개에 익숙하다 보니 이중의 일부를 함수/Method 화하고 이를 이용하는 부분에 익숙하지 않은 것이라 생각한다. 어떻게 이부분을 이해할 있도록 있을까?

두번째는 Exception 개념이다. if등의 condition으로 처리하는것과 Exception 으로 처리 하는 것이 무엇이 다른가 하는 것이다. 어려운 질문이다. 사실 대부분의 Exception들은 if 구현 있다. 그러나 if 하게 되면 코드가 복잡해지고 error check 코드에 대한 재활용도 어려워질 있다. 어떤 에러가 것을 에러가 발생한 곳이 아니라 상위에서 처리하고 싶을때는 대부분 함수의 리턴값을 가지로 처리 하는데 예를 들어 C함수의 open 같은 경우 정상적으로 파일을 열면 0보다 값을 아니면 -1 리턴하게 된다. 그러나 어떤 method Object 리턴한다면 에러가 있을 경우에 무엇을 리턴해야 하는지 결정하기 어렵다. 이럴때 Exception 사용하면 리턴값과 상관없이 Exception throw 있게 된다. (다른 차이점이 있을까요?)

질문이 많이 들어온 다른 개념은 private, protected, public 대한 것이었는데 이부분은 encapsulation 관계된것으로 private 내부 class에서만 접근 가능하고 외부에서는 지정된 method (getter/setter) 통해서만 접근 가능하게 일종의 access control이라고 생각해주면 좋을것 같다. public 전체에게 open이고 default protected 같은 package(디렉토리) class들은 접근 가능.

다른 질문은 Hashtable에서 나왔는데 values 값을 가져올때 순서들이 계속 바뀌는지 하는 것이다. values() Collection 리턴하는데 자바 API에서 적어 놓은것 처럼  Some are ordered and others unordered.” 순서가 정돈되지 않을수도 있다는 것이다. 시간이 짤아 자바 util 들을 설명하지 못해 이런부분은 이해하기가 어려웠을것 같다.

그리고 끝으로 C에서는 파일을 다룰때 printf 같은거나 fscanf 같은거 하나면 되는데 자바는 File 열어서 FileInputStream만들고 그다음 다시 BufferedReader 같은거 열어야 비로소 readLine 같은 것을 사용할 있는지에 대한 질문이었다.  어떤 교수님들은 이거 어렵다고 자체 라이버르리 만들어서 FileOpen 한다음 바로 readLine이나 prinln 지원하도록 해서 수업에 이걸 사용하던데 이부분을 너무 복잡하게 한것일까요? 너무 general 하게 I/O 처리 하기 위함인가요?

오늘 학생들과 마지막 수업및 간단한 종강파티를 대학근처 식당에서 가졌는데 다음주 부터 멋진 22명의 학생을 없다는 아쉬움을 한학기 동안 열심히 해준 장하고 자랑스러운 그들의 아름다운 모습을 생각해며 달래어 보았다.
Trackback 0 Comment 3
  1. 토비 2008.12.03 17:15 address edit & del reply

    이런 글에는 사진을 함께 올려주는 쎈스가 있어야~

  2. bliss 2008.12.04 11:08 address edit & del reply

    토비님의 쎈스란~ ㅋㅋ 사진 좋네요. 바꾼 머리 스타일이 잘 어울리시더라구요. ^^ 연경님이랑 꼭 놀러 오세요. ^^/

  3. 화사 2008.12.10 12:30 address edit & del reply

    저도 이번에 비주얼베이직을 비전공자들에게 가르쳤는데 비슷한 경험을 했더랍니다. ^^