이 코드를 딱 봤을 때 "이걸 왜 이렇게 짜지? 내가 이것보다 더 잘할 수 있어"라는 확신이 들지 않는다면 인공지능과의 대결에서 어려울까요?

import React, { useEffect, useRef, useState, useCallback } from 'react';

const WORKER_CODE = `

const hslToRgb = (h, s, l) => {

let r, g, b;

if (s === 0) {

r = g = b = l;

} else {

const hue2rgb = (p, q, t) => {

if (t < 0) t += 1;

if (t > 1) t -= 1;

if (t < 1/6) return p + (q - p) * 6 * t;

if (t < 1/2) return q;

if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;

return p;

};

const q = l < 0.5 ? l * (1 + s) : l + s - l * s;

const p = 2 * l - q;

r = hue2rgb(p, q, h + 1/3);

g = hue2rgb(p, q, h);

b = hue2rgb(p, q, h - 1/3);

}

return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];

};

self.onmessage = function(e) {

const { width, height, maxIter, centerX, centerY, zoom } = e.data;

const buffer = new ArrayBuffer(width * height * 4);

const data = new Uint8ClampedArray(buffer);

for (let x = 0; x < width; x++) {

for (let y = 0; y < height; y++) {

let cRe = (x - width / 2) / zoom + centerX;

let cIm = (y - height / 2) / zoom + centerY;

let zRe = 0, zIm = 0;

let iter = 0;

while (zRe * zRe + zIm * zIm <= 4 && iter < maxIter) {

let zReNew = zRe * zRe - zIm * zIm + cRe;

zIm = 2 * zRe * zIm + cIm;

zRe = zReNew;

iter++;

}

const p = (y * width + x) * 4;

if (iter === maxIter) {

data[p] = 0; data[p+1] = 0; data[p+2] = 0; data[p+3] = 255;

} else {

const [r, g, b] = hslToRgb((iter / maxIter) * 1.5 % 1, 1, 0.5);

data[p] = r;

data[p+1] = g;

data[p+2] = b;

data[p+3] = 255;

}

}

}

self.postMessage({ data }, [buffer]);

};

`;

export default function FractalExplorer() {

const canvasRef = useRef(null);

const workerRef = useRef(null);

const [config, setConfig] = useState({

centerX: -0.5,

centerY: 0,

zoom: 200,

maxIter: 100,

});

const [isDragging, setIsDragging] = useState(false);

const dragStart = useRef({ x: 0, y: 0, cX: 0, cY: 0 });

useEffect(() => {

const blob = new Blob([WORKER_CODE], { type: 'application/javascript' });

workerRef.current = new Worker(URL.createObjectURL(blob));

workerRef.current.onmessage = (e) => {

const canvas = canvasRef.current;

if (!canvas) return;

const ctx = canvas.getContext('2d');

const imageData = new ImageData(e.data.data, canvas.width, canvas.height);

ctx.putImageData(imageData, 0, 0);

};

return () => workerRef.current.terminate();

}, []);

const renderFractal = useCallback(() => {

const canvas = canvasRef.current;

if (!canvas || !workerRef.current) return;

workerRef.current.postMessage({

width: canvas.width,

height: canvas.height,

maxIter: config.maxIter,

centerX: config.centerX,

centerY: config.centerY,

zoom: config.zoom

});

}, [config]);

useEffect(() => {

renderFractal();

}, [renderFractal]);

const handleWheel = (e) => {

e.preventDefault();

const zoomFactor = e.deltaY > 0 ? 0.8 : 1.25;

setConfig(prev => ({ ...prev, zoom: prev.zoom * zoomFactor }));

};

const handleMouseDown = (e) => {

setIsDragging(true);

dragStart.current = { x: e.clientX, y: e.clientY, cX: config.centerX, cY: config.centerY };

};

const handleMouseMove = (e) => {

if (!isDragging) return;

const dx = (e.clientX - dragStart.current.x) / config.zoom;

const dy = (e.clientY - dragStart.current.y) / config.zoom;

setConfig(prev => ({ ...prev, centerX: dragStart.current.cX - dx, centerY: dragStart.current.cY - dy }));

};

const handleMouseUp = () => setIsDragging(false);

return (

<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', background: '#111', color: '#fff', padding: '20px', fontFamily: 'monospace' }}>

<h2>Mandelbrot Set Explorer (WebWorker Accelerated)</h2>

<div style={{ marginBottom: '10px' }}>

<span>Zoom: {Math.round(config.zoom)}x | </span>

<span>Iter: {config.maxIter}</span>

<input

type="range" min="10" max="1000" step="10" value={config.maxIter}

onChange={(e) => setConfig(prev => ({ ...prev, maxIter: Number(e.target.value) }))}

style={{ marginLeft: '10px', verticalAlign: 'middle' }}

/>

</div>

<canvas

ref={canvasRef}

width={800}

height={600}

onWheel={handleWheel}

onMouseDown={handleMouseDown}

onMouseMove={handleMouseMove}

onMouseUp={handleMouseUp}

onMouseLeave={handleMouseUp}

style={{ border: '1px solid #333', cursor: isDragging ? 'grabbing' : 'grab' }}

/>

<p style={{ marginTop: '10px', fontSize: '12px', color: '#888' }}>* Scroll to zoom, drag to pan</p>

</div>

);

}

----------------------------------------

위의 코드는 제미나이가 짜준 코드입니다. 젠슨 황, 구글 개발자 얘기 들어보면 요즘 코딩을 인공지능이 더 잘한다는 얘기가 많은데,

이 코드를 딱 봤을 때 "이걸 왜 이렇게 짜지? 내가 이것보다 더 잘할 수 있어"라는 확신이 들지 않는다면 인공지능과의 대결에서 어려울까요?

경쟁에서 밀릴 가능성이 높나요?

1개의 답변이 있어요!

  • 이걸 머라고 설명을 드려야 하나......!

    지금 당장 AI가 만든 코드를 보고 내가 이것보다 잘 짜겠다 라는

    생각이 안든다고 해서 개발자로 끝난 것은 아니예요

    예를 들어서 AI가 만든 코드는 자동차 공장에서 나온 새 차와 비슷해요

    겉으로 보면 잘 달리고 멋이 있어요. 그런데 실제 운전자는 이 차 엔진 구조가 왜 이렇게 되어 있지?

    연비를 더 좋게 만들려면 어떻게 해야 하지? 고장 나면 어디를 고쳐야 하지?를 알아야 해요

    개발도 똑 같은 걸 같아요

    위 코드도 AI가 만들어서 실행은 됩니다. 하지만 진짜 개발자는 이런 생각을 할거예요

    왜 화면이 느려지지? 사용자가 확대할 때 원하는 위치가 아니라 이상하게 확대되는데?

    100만 명이 쓰면 서버가 버틸까? 이 구조가 유지보수하기 좋은가?

    이런 문제를 해결하는 사람이 개발자예요

    다만 앞으로 AI에게 코드 만들어달라고 하고 그대로 복사만 하는 사람은

    경쟁에서 힘들 가능성이 높아요. AI 가 너무 잘하기 때문이죠

    반대로 AI가 만든 코드를 보고 어느 부분이 부족한지 찾고 고칠 수 있는 사람은

    오히려 AI 덕분에 더 강해질 가능성이 높죠

    지금 기준으로 보면 이 코드 하나를 보고 내가 더 잘 짜겠다 라는 확신보다

    더 중요한 건 코드를 읽고 좋은 점과 나쁜점을 구분할 수 있느냐 예요

    그 능력이 있으면 AI 시대에도 개발자로 살아남을 가능성이 있어요

    채택 보상으로 50베리 받았어요.

    채택된 답변