목록코딩 (11)
'코딩' 태그의 글 목록
정말 잘 해주셨습니다. 드디어 한달간의 대장정을 마쳤네요. 여러분은 카렐 과정을 졸업하셨습니다. 여러분 중에는 프로그래밍과 코딩이 무엇인지도 모르는 상태로 시작한 분들이 많은데, 벌써 주어진 복잡한 과제를 풀기 위해 알고리즘을 구상하고 코딩하는 것까지 자유자재로 해내실 수 있게 되었다는게 놀랍습니다. 오늘은 여러분이 컴퓨터 과학을 계속 추구하신다면 어떤 옵션들이 있는지, 카렐 그 이후의 단계에 대해 얘기하고자 합니다. 카렐은 끝이 났어도 CS106A 과정은 끝이 아닙니다. 지금까지 카렐과 과제를 해결하시면서 여러분은 자기도 모르게 자바 프로그래밍 언어의 구문을 익히고 계셨습니다. 제가 다음에 돌아왔을때는 카렐의 세계에서 카렐의 문제를 해결해주는걸 벗어나 우리의 세계에서 사람들에게 유용한 프로그램들을 만들..
이번 주는 과제로 시작합니다. 이번 과제가 우리가 카렐과 마지막으로 함께 할 프로젝트이니 최선을 다 해주세요! 카렐 중앙 수색 과제는 설명하기 매우 쉬운 과제입니다. 카렐이 아래에서 첫번째 가로줄의 가운데를 찾아서 그 위에 비퍼를 놓으면 됩니다. 다른 규칙들은 아래와 같습니다:카렐은 참고로 왼쪽 아래 코너에서 오른쪽을 보면서 시작합니다. 중간 과정에서 비퍼를 다른 장소에 몇개를 놓아도 상관이 없지만, 마지막 상황에선 가운데에만 비퍼가 있도록 다른 비퍼들을 주워야 합니다. 중앙 수색 과제에서 카렐의 세계에는 세계 가장자리의 외벽 말고는 벽이 없으며, 세로 높이는 언제나 가로 넓이와 같거나 더 깁니다. 가로로 홀수 만큼의 칸이 있는 세계에서는 카렐이 가운데 칸에 비퍼를 놓아야하지만, 짝수 만큼의 칸이 있는 ..
이번 주는 새로운 프로그래밍 기능을 배우는 대신 스타일을 다듬어주는 테크닉과 프로그래밍 역사를 배워 지금 할 줄 아는 만큼을 완벽히 해낼 수 있도록 하는 것이 목적입니다. 그런 의미로 오늘은 현대 프로그래밍의 가장 핵심적인 개념인 객체 지향 프로그래밍 (Object-Oriented Programming)의 개념에 대해 배워보도록 하겠습니다. 1970년대 카렐이 만들어졌을때 프로그래밍 분야는 수행할 기능들의 순서를 중심으로 쓰는 "절차적 프로그래밍" 패러다임이 지배하고 있었습니다. 큰 문제를 풀기 위해 여러가지 "절차"들로 쪼개어 문제를 해결하는 방법이 절차적 프로그래밍입니다. 여러분도 이 접근법으로 기둥 수리 과제를 해결하였죠. 더 최근에 발표된 자바 같은 프로그래밍 언어들은 "객체지향 프로그래밍" 패러..
잘 지내셨나요? 저번 주 꽤 어려운 프로그래밍 테크닉을 많이 다뤄서 기둥 수리 과제에서 스타일보다 기능성에 집중하라고 조언드렸습니다. (기억을 상기시켜드리기 위해 다시 설명드리자면 "코드가 원하는 작동을 하는가"가 기능성, "코드를 남들이 봐도 읽고 이해하기 쉬운가"가 스타일입니다). 하지만 어렵고 복잡한 코드일수록 스타일의 중요성은 높은 법이죠. 이번 글에서는 코드를 읽기 쉽게 도와주는 두가지 테크닉 "인덴팅"과 "코멘팅"에 대해 배워보겠습니다. 위의 두가지 코드는 동일한 기능을 수행합니다. 컴파일 (검은색 달리는 사람 아이콘) 버튼을 눌러도 둘 다 완벽히 작동하죠. 하지만 오른쪽의 코드는 두번째 while 루프와 if문이 첫번째 while 루프 안에 있다는 것을 한 눈에 쉽게 볼 수 있게 해줍니다. ..
다시 한번 카렐과 함께 문제를 풀어볼 준비가 되셨나요? 이번 과제는 신문을 가져오는것 과제보다 훨씬 복잡하지만 그만큼 더 재밌답니다. 같이 바로 시작해봐요! 스탠포드의 중심에 위치한 "메인쿼드"에는 이런 기둥들이 세워져 있답니다. 하지만 1989년, 스탠포드에 지진이 일어나서 이 기둥들이 부분적으로 파손되었습니다. 이대로 놔둔다면 학생들이 안전하지 않겠죠? 여러분이 얼른 카렐을 이용해서 이 기둥들을 수리해주세요! 이클립스를 실행하고 오른쪽 사이드바에서 src 폴더 -> (default package) -> StoneMason.java를 열면 "기둥 수리" 과제를 시작하실 수 있습니다. 카렐 세계에서 스탠포드의 메인쿼드는 이렇게 표현되어 있습니다. 비퍼로 만들어진 기둥들이 천장을 지지하고 있지요. 여러분은..
아무리 먼 길도 한 발짝씩 걸어가면 언젠가는 도달할 수 있습니다. 이걸 프로그래머의 관점에서 해석하자면 "한발짝 걷는다"는 명령을 계속 반복하면 언젠가는 문제를 해결할 수 있다고도 말할 수 있죠. "한 발짝 걷는다", "한 발짝 걷는다", "한 발짝 걷는다"처럼 어색하게 여러번 같은 명령을 내리는 것보다 "한 발짝 걷는다"라는 명령은 한번만 적고 얼만큼 반복할 것인지를 적는 것이 훨씬 간결합니다. 그리고 그게 바로 반복문이 존재하는 이유입니다. 우리는 오늘 두가지 반복문을 배울 예정인데요, 첫번째 반복문은 바로 "for loop (for 루프)"입니다. for loop는 보기에 복잡해 보이지만 사실 한 부분만 수정하면 되기 때문에 걱정하실 필요는 없어요. for 루프는 이렇게 작성합니다: for (int..
카렐은 딱 네가지 기능만 할 줄 알지만, 여러분이 그 네가지 기능을 어떤 순서로 몇번이나 반복하는가에 따라 다양한 기능을 수행할 수 있죠. 마찬가지로 여러분의 컴퓨터에 있는 마법같은 프로그램들도 정말 간단한 기능들을 창의적으로 조합한 것 뿐입니다. 네가지 기능으로도 카렐은 많은걸 할 수 있지만, 카렐이 다른 기능을 배울 수 있다면 신문을 가져오는 과제가 훨씬 더 간단하지 않았을까요? 예를 들어 왼쪽으로 3번 도는 대신, 바로 오른쪽으로 도는 기능을 안다면 말이죠. 이번 강의에선 카렐에게 새로운 기능을 가르치는 방법을 배워보겠습니다. 카렐에게 오른쪽으로 회전하는 기능을 가르쳐봅시다. 왼쪽으로 도는 기능이 "turnLeft();"니까 오른쪽으로 도는 기능은 "turnRight();"라고 부르도록 하죠. 이렇..
첫 프로그램을 작성할 준비가 되셨나요? 프로그래밍은 자기가 직접 쓴 코드가 작동되는걸 보는 재미로 하는 겁니다. 그러니 바로 시작해보죠! 신문 가져오기 과제 아침이 밝아오고 카렐이 집 구석에서 일어났습니다. 오늘은 어떤 소식이 있을까? 신문을 읽고 싶은데 신문은 집 현관 앞에 놓여있네요. 여러분의 과제는 비퍼로 표현된 신문을 카렐이 주어올 수 있도록 프로그램 (명령들)을 적어주는 것입니다. 집 왼쪽 위(북서쪽)에 있는 카렐이 어떻게 집 오른쪽 (동쪽)에 있는 신문을 주어올 수 있을까요? 프로그래머 방식 접근법 프로그래머는 프로그래밍을 사용해 문제를 해결하는 사람입니다. 효과적인 프로그램을 적는 프로그래머는 한번에 문제 전체를 해결하는 것이 아니라, 문제의 각 부분을 해결하는 작은 프로그램들을 하나로 모아..
아직 스탠포드 버전 이클립스를 컴퓨터에 설치하지 않았거나, 카렐을 이클립스에 불러오지 않았다면 이 글을 먼저 따라하고 와주세요. 카렐은 1970년대 스탠포드 대학교의 학생이었던 Rich Pattis가 입문자들에게 프로그래밍을 쉽게 가르치기 위해 개발한 프로그램입니다. 카렐 세계의 구조 카렐을 만나볼까요? 카렐은 2D 세계에 사는 로봇입니다. 카렐이 사는 세계는 세로로 (위에서 아래로) 이어지는 애브뉴, 그리고 가로로 (왼쪽에서 오른쪽으로) 이어지는 스트리트로 이루어져 있습니다. 스트리트와 애브뉴가 만나는 칸은 코너라고 부릅니다. 위에 있는 카렐의 세계에는 몇개의 애브뉴, 스트리트, 그리고 코너가 있는지 한번 세보시겠어요? 정답은 애브뉴 5개, 스트리트 3개, 그리고 코너 15개 입니다. 카렐의 세계에는 ..
"스탠포드식 쉬운 프로그래밍 / 코딩 첫걸음" 시리즈에서는 Eclipse를 사용해 프로그래밍을 할 것입니다. Eclipse는 누구나 사용할 수 있는 무료 개발 환경 (IDE) 에디터지만, 스탠포드 대학교에서 CS106A에서 사용하기 위해 만든 특수한 버전의 Eclipse가 있으니 스탠포드 버전 Eclipse를 설치해주세요. 아래 순서대로 따라하시면 됩니다. (참고로 어느 컴퓨터 운영체제를 사용하고 계신지 모르신다면 윈도우를 사용하고 계실 겁니다.) 1. (윈도우를 사용 중이시라면) 옛 버전 자바를 제거해주세요. 시작 -> 제어판 -> 프로그램과 기능들로 들어가세요. "Java/J2SE Runtime Environment", "Java SDK", 혹은 "Java Update"라고 적힌 것들을 전부 제거해주..