There are only two kinds of languages: the ones people complain about and the ones nobody uses.
― Bjarne Stroustrup
질문. 근래에 대중화에 성공한 언어들의 특징은?
답변.
ME:
If debugging is the process of removing software bugs, then programming must be the process of putting them in
— Edsger Dijkstra
The Best Code is No Code At All
― Jeff Atwood
과거의 경험:
한계비용이 높아지는 이유:
ME: 굳이 코드를 짜야 한다면 최대한 간결하게 표현하고 싶다.
Premature
optimizationabstraction is the root of all evil.¬ by Donald Knuth
과거의 경험:
잘못된 범주화의 원인:
섣부른 범주화의 원인:
ME:
(조건을 만족하는 후보는 Lisp 계열밖에 없었습니다)
Lisp
(Almost) No syntax (((((((((( ))))))))))
Macro
REPL
Immutability & Persistency
Laziness
Concurrency constructs
Paradigm shift
위 과정을 반복하며 실력이 향상됨
알고리즘
문제풀이
딥러닝
프로젝트
회사일
게임
만들기
웹서비스
개발
∅
Generative
Art
학습에 효율적이고 재미있지만 쓸모가 없는
MicroImage, Casey REAS (2002)
ILLUMINATIONS B, Marius Watz (2007)
Infinite Rainbows (by Marius Watz)
void drawCircle()
{
float radius = 100;
int centX = 250;
int centY = 150;
float x, y;
float lastx = -999;
float lasty = -999;
for (float ang = 0; ang <= 360; ang += 5) {
float rad = radians(ang);
x = centX + (radius * cos(rad));
y = centY + (radius * sin(rad));
point(x,y);
}
}(defn polar->cart [r theta]
[(* r (cos theta))
(* r (sin theta))])
(defn circular-points [n r]
(let [angle (/ q/TWO-PI n)
rads (map #(* angle %) (range n))]
(map (partial polar->cart r) rads)))
(defn draw-circle [center points]
(q/with-translation center
(doseq [[x y] points]
(q/point x y))))
N개의 좌표
반지름과 N, 중점
좌표계 변환
삼각함수
2차원 이동
점 그리기
선 그리기
피드백이 빠르고 직관적임
첫 구현까지 오랜 시간이 걸리지 않음
주말마다 틈틈히, 4개월간 약 20개
IFS (Fractals)
Tiling
Cellular Automata
Autonomous Agents (boids)
Generative test → Penrose Tiling
Lazy sequence → Dejong Attractors
Reducers → High-res Fractals
Go blocks → Automated Agents
Logic Programming → Maze Solver
Buddhabrot (from Wikipedia)
Burning Ship
Cellular Automata 3D (images by Karsten Schmidt)
Watercolor paint
Images from @thingybot
Learning Clojure is like going from driving a car on the right side of the road, to driving a car on the left side of the road.
ME: 위 소감과 비슷합니다.