반응형
반응형


AI 코딩의 숨겨진 비용

 

 

The Hidden Cost of AI Coding

AI coding tools boost productivity but may sacrifice the flow state and deep satisfaction developers experience when writing code by hand. What are we losing?

terriblesoftware.org

 

 

 

  • AI 코딩 도구 사용이 생산성은 높이지만, 개발자들이 느끼던 몰입과 창조의 기쁨은 줄어드는 현상에 대한 우려를 제기함
  • 과거 ‘몰입(flow)’ 상태에서의 코딩 경험이 개발자들에게 큰 만족감을 주었음
  • 현재는 AI가 코드 생성을 대신하며, 개발자는 설명하고 평가하는 ‘큐레이터’ 역할에 머무는 경우가 많음
  • 이러한 변화로 인해 장기적인 행복감과 직업 만족도 하락 가능성이 제기됨
  • 해결책으로는 의도적으로 ‘직접 코딩’의 공간을 남겨두는 노력 새로운 형태의 만족감 찾기가 필요함

코딩의 즐거움은 어디로 갔을까

  • 작성자는 AI 기술의 발전과 긍정적인 측면을 인정하면서도, 개발자로서의 즐거움이 사라지고 있음을 고백함
  • 과거에는 헤드폰을 끼고 네오빔을 켜고, 시간 가는 줄 모르고 몰입하던 코딩의 순간들이 있었음
  • 단순한 효율이나 보상이 아니라, 문제를 해결하며 무언가를 만들어내는 경험 자체가 본질적인 동기였음

심리학에서 말하는 ‘몰입(flow)’의 가치

  • 심리학자 Mihaly Csikszentmihalyi의 이론에 따르면, 몰입 상태는 도전과 기술이 적절히 균형 잡힌 순간에 발생
  • 개발자에게 이 몰입은 코드와 하나 되는 순간, 문제가 퍼즐처럼 느껴지고, 시간 감각이 사라지는 경험으로 나타남
  • 이런 순간들은 단순한 작업이 아니라, 창조성과 직업적 행복감의 핵심

AI 도구가 바꾼 개발자의 역할

  • 현재는 AI 기반 코딩 도구(Copilot, Cursor 등) 덕분에 직접 작성하지 않아도 많은 코드가 생성 가능
  • 개발자는 이제 프롬프트 작성, AI 결과 검토, 약간의 수정에 집중하게 됨
  • 이로 인해, 과거의 몰입 경험과 창작의 기쁨이 줄어들고 있음
  • AI 사용은 생산성은 향상되지만, 그 과정은 더 수동적이고 감정적으로 거리감 있는 경험이 될 수 있음

진짜 걱정: 몰입이 사라진다면?

  • 생산성은 향상되지만, 기쁨은 감소하는 이중적 현상은 장기적으로 개발자 만족도에 영향을 줄 수 있음
  • 코딩 과정에서의 도전, 창의적 해결, 직접 작성의 성취감이 사라지면, 일 자체의 의미도 흐려질 수 있음
  • "프롬프트 엔지니어링"이 새로운 몰입의 대상이 될 수 있을까? 에 대한 의문도 제기됨

새로운 몰입의 방식 찾기

  • 미래에는 직접 코딩보다 시스템 설계, 제품 아이디어 구상 등에서 만족감을 찾게 될 수도 있음
  • 또는, 의도적으로 비효율적인 ‘손코딩’의 시간을 확보함으로써 몰입 공간을 유지할 수도 있음
  • 중요한 것은, AI 시대에도 개발자로서의 행복과 몰입을 지키기 위한 의식적인 선택이 필요하다는 것

 

https://terriblesoftware.org/2025/04/23/the-hidden-cost-of-ai-coding/


The Hidden Cost of AI Coding

“The best moments in our lives are not the passive, receptive, relaxing times… The best moments usually occur if a person’s body or mind is stretched to its limits in a voluntary effort to accomplish something difficult and worthwhile.” — Mihaly Csikszentmihalyi

I know I’ve posted some upbeat content about AI before, celebrating its potential and encouraging teams to embrace these tools. And honestly, I still believe in that future. But today I want to share something more personal, more nuanced — the one thing that currently worries me most about using AI for software development: lack of joy.

It’s easy to talk about productivity gains, competitive advantages, and how AI will reshape our industry. We’ve had those conversations. What’s harder to discuss is what might be lost along the way – something intangible but vital to many of us who chose this profession not just for the paycheck, but because we genuinely love the craft of programming.


It’s 8:47 AM, fresh coffee steams on the table, and my headphones cocoon me in the perfect playlist. I go to Asana, where I know exactly what I need to do that day. I open Neovim and code starts flowing through me. I’ve lost the sense of time; I’m completely present in the moment.

That, my friends, is what I used to describe as a happy work day. I’m sure that some of you will resonate.

Those days I’d emerge tired but fulfilled. Something about the direct connection between thought and creation — where my fingers were simply the conduit for translating ideas into working software — felt almost transcendent. The struggle to solve problems, the small victories along the way, and the satisfaction of building something from nothing… these weren’t just aspects of the job; they were the reason I fell in love with programming in the first place.

This experience I’m describing is what psychologists call “flow” — a mental state where you’re fully immersed in an activity, energized by deep focus and complete involvement. First described by Mihaly Csikszentmihalyi (the psychologist I quoted at the beginning), flow is that sweet spot where challenge meets skill, where the task at hand is neither too easy (causing boredom) nor too difficult (causing anxiety). It’s a state strongly associated with creativity, productivity, and most importantly — happiness. For software developers, it’s that magical zone where problems become puzzles rather than obstacles, where hours pass like minutes, and where the boundary between you and your code seems to dissolve.

Fast forward to today, and that joy of coding is decreasing rapidly. Well, I’m a manager these days, so there’s that… But even when I do get technical, I usually just open Cursor and prompt my way out of 90% of it. It’s way more productive, but more passive as well.

Instead of that deep immersion where I’d craft each function, I’m now more like a curator? I describe what I want, evaluate what the AI gives me, tweak the prompts, and iterate. It’s efficient, yes. Revolutionary, even. But something essential feels missing — that state of flow where time vanishes and you’re completely absorbed in creation. If this becomes the dominant workflow across teams, do we risk an industry full of highly productive yet strangely detached developers?


So that’s what I’m worried about, and honestly, I have no idea what to think of it. On one hand, it’s clear to me that people using AI tools are more productive. On the other hand, I worry about long-term happiness and joy in their craft when they’re simply hitting tab to generate code rather than writing it themselves.

When we outsource the parts of programming that used to demand our complete focus and creativity, do we also outsource the opportunity for satisfaction? Can we find the same fulfillment in prompt engineering that we once found in problem-solving through code?

Perhaps what we need is a new understanding of where happiness can exist in this AI-augmented world. Maybe the joy doesn’t have to disappear completely — it just shifts. Instead of finding delight in writing the perfect algorithm, perhaps we’ll discover satisfaction in the higher-level thinking about system design, in the creative process of describing exactly what we want to build, or in the human aspects of software development that AI can’t touch.

I don’t have all the answers. But maybe, just maybe, we need to be intentional about preserving (some) spaces in our work where flow can still happen — where we still code by hand sometimes, not because it’s efficient, but because it make us happy.

After all, if we lose the joy in our craft, what exactly are we optimizing for?

반응형
반응형

[백준] 2016번 제곱ㄴㄴ수 - PYTHON

import math

min, max = map(int, input().split())
 
NN = [1] * (max - min + 1) 

tmp_01 = []

for i in range(2, int(math.sqrt(max)) + 1):
    tmp_01.append(i ** 2)


for i in tmp_01:
    j = math.ceil(min / i)
    while i * j <= max:
        NN[i * j - min] = 0
        j += 1

print(sum(NN))
반응형
반응형

""" [백준] 1013번 Contact - PYTHON    
    https://www.acmicpc.net/problem/1013
    문제
        “무한히 넓은 저 우주에 인류만이 홀로 존재한다면, 그건 정말 슬픈 일이 아닐까요”
        푸에르토리코 아레시보에 위치한 아레시보 전파망원경(Arecibo radio telescope)은 수십 년째 존재하지 않을 지도 모르는 외계 문명으로부터의 전파를 수신하기 위해 밤하늘을 바라보고 있다.
        이 망원경이 수집한 전파 속에서 자연적으로 발생하기 힘든 패턴들을 찾아내어, 그것을 증거로 외계 문명의 존재 여부를 가리려는 노력은 줄곧 이어져왔지만 아직까지도 그러한 패턴은 발견되지 않았다. 한국 천문학계의 자존심 김동혁 박사는 국내 기술로 이러한 탐사를 진행하기 위하여 다음의 전파 표기를 표준으로 삼았다.
        전파의 기본 단위는 { 0 , 1 } 두 가지로 구성되어있으며, x+ (  ) 는 임의의 개수(최소 1개) x의 반복으로 이루어진 전파의 집합을 나타낸다.
        (xyx)+ (  ) 는 괄호 내의 xyx의 반복으로 이루어진 전파의 집합을 뜻한다. 아래는 이해를 돕기 위한 예제이다.
        1+ = { 1, 11, 111, 1111, 11111, … }
        10+ = { 10, 100, 1000, 10000, 100000, … }
        (01)+ = { 01, 0101, 010101, 01010101, 0101010101, … }
        (1001)+ = { 1001, 10011001, 100110011001, … }
        10+11 = { 1011, 10011, 100011, 1000011, 10000011, … }
        (10+1)+ = { 101, 1001, 10001, 1011001, 1001101, 100011011000001, … }
        반복을 의미하는 + 외에도 or 를 의미하는 | 기호가 있다. { x | y } 는 x 혹은 y 를 의미하는 것으로, { 0+ | 1+ } 는 { 0 , 1 , 00 , 11 , 000 , 111 , … } 의 집합을 의미한다. 아래는 두 기호를 복합적으로 사용한 예이다.
        (100 | 11)+ = { 100 , 11 , 10011 , 11100 , 1110011100 , 100111111100100, … }
        최근 김동혁 박사는 아레시보 전파망원경에서 star Vega(직녀성) 으로부터 수신한 전파 기록의 일부를 조사하여 그 전파들의 패턴을 분석하여 아래와 같이 기록하였다.
        (100+1+ | 01)+
        김동혁 박사는 다양한 전파 기록 중에서 위의 패턴을 지니는 전파를 가려내는 프로그램을 필요로 한다. 이를 수행할 수 있는 프로그램을 작성하라.
    입력
        입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 전파를 표현하는, { 0, 1 }만으로 이루어진 문자열이 공백 없이 주어진다. 문자열 길이는 (1 ≤ N ≤ 200)의 범위를 갖는다.
    출력
        각 테스트 케이스에 대해 주어진 전파가 문제에서 제시한 패턴이면 “YES”를 그렇지 않은 경우는 “NO”를 출력한다. 출력 문자열은 모두 대문자로 구성되어 있다.
        
    예제 입력  
        3
        10010111
        011000100110001
        0110001011001
    예제 출력  
        NO
        NO
        YES
        
        
>> BOJ\1013_Contact.py
3
10010111
NO
011000100110001
NO
0110001011001
YES
          
re 모듈 : 정규식 엔진에 대한 인터페이스를 제공
compile 메소드: 정규식 패턴 입력
fullmatch 메소드: 입력된 패턴과 문자열이 남는 부분 없이 완벽하게 일치하는지 검사. 일치하지 않으면 None.
"""

import re
import sys
input  = sys.stdin.readline

p = re.compile('(100+1+|01)+')
for i in range(int(input())):
   s = input().strip()
   if p.fullmatch(s):
       print("YES")
   else:
       print("NO")

반응형
반응형

[백준] 1012번 유기농 배추 - PYTHON  

 

 https://www.acmicpc.net/problem/1012

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

T = int(input()) #테스트케이스의 개수

dx = [-1,1,0,0]
dy = [0,0,-1,1]

def BFS(x,y):           
    queue = [(x,y)]
    matrix[x][y] = 0 # 방문처리

    while queue:
        x,y = queue.pop(0)

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            if nx < 0 or nx >= M or ny < 0 or ny >= N:
                continue

            if matrix[nx][ny] == 1 :
                queue.append((nx,ny))
                matrix[nx][ny] = 0

# 행렬만들기
for i in range(T):
    M, N, K = map(int,input().split())
    matrix = [[0]*(N) for _ in range(M)]
    cnt = 0

    for j in range(K):
        x,y = map(int, input().split())
        matrix[x][y] = 1

    for a in range(M):
        for b in range(N):
            if matrix[a][b] == 1:
                BFS(a,b)
                cnt += 1

    print(cnt)

 

>1012_OrganicCabbage.py 
1
5 3 6
0 2
1 2
2 2
3 2
4 2
4 0
2
반응형
반응형

[백준] 1011번 FlymetotheAlphaCentauri - PYTHON


    Fly me to the Alpha Centauri
    https://www.acmicpc.net/problem/1011
 

  
    문제
         우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 
        그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행사가 되어 새로운 세계에 발을 내려 놓는 영광의 순간을 기다리고 있다.
         그가 탑승하게 될 우주선은 Alpha Centauri라는 새로운 인류의 보금자리를 개척하기 위한 대규모 생활 유지 시스템을 탑재하고 있기 때문에, 
        그 크기와 질량이 엄청난 이유로 최신기술력을 총 동원하여 개발한 공간이동 장치를 탑재하였다. 
        하지만 이 공간이동 장치는 이동 거리를 급격하게 늘릴 경우 기계에 심각한 결함이 발생하는 단점이 있어서, 
        이전 작동시기에 k광년을 이동하였을 때는 k-1 , k 혹은 k+1 광년만을 다시 이동할 수 있다. 
        예를 들어, 이 장치를 처음 작동시킬 경우 -1 , 0 , 1 광년을 이론상 이동할 수 있으나 사실상 음수 혹은 0 거리만큼의 이동은 의미가 없으므로
        1 광년을 이동할 수 있으며, 그 다음에는 0 , 1 , 2 광년을 이동할 수 있는 것이다. ( 여기서 다시 2광년을 이동한다면 다음 시기엔 1, 2, 3 광년을 이동할 수 있다. )
         김우현은 공간이동 장치 작동시의 에너지 소모가 크다는 점을 잘 알고 있기 때문에 x지점에서 y지점을 향해 최소한의 작동 횟수로 이동하려 한다. 
        하지만 y지점에 도착해서도 공간 이동장치의 안전성을 위하여 y지점에 도착하기 바로 직전의 이동거리는 반드시 1광년으로 하려 한다.
        김우현을 위해 x지점부터 정확히 y지점으로 이동하는데 필요한 공간 이동 장치 작동 횟수의 최솟값을 구하는 프로그램을 작성하라.
    입력
        입력의 첫 줄에는 테스트케이스의 개수 T가 주어진다. 각각의 테스트 케이스에 대해 현재 위치 x 와 목표 위치 y 가 정수로 주어지며, x는 항상 y보다 작은 값을 갖는다. (0 ≤ x < y < 231)
    출력
        각 테스트 케이스에 대해 x지점으로부터 y지점까지 정확히 도달하는데 필요한 최소한의 공간이동 장치 작동 횟수를 출력한다.


#테스트

t = int(input())

for _ in range(t):
    x, y = map(int,input().split())
    distance = y - x
    count = 0  # 이동 횟수
    move = 1  # count별 이동 가능한 거리
    move_plus = 0  # 이동한 거리의 합
    while move_plus < distance :
        count += 1
        move_plus += move  # count 수에 해당하는 move를 더함
        if count % 2 == 0 :  # count가 2의 배수일 때, 
            move += 1  
    print(count)
반응형
반응형

[백준] 1010번 다리놓기 - PYTHON

""" [백준] 1010번 다리놓기 - PYTHON
    1010번 bridge
    https://www.acmicpc.net/problem/1010
    
    문제
        재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 
        하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 
        강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 
        재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M)

        재원이는 서쪽의 사이트와 동쪽의 사이트를 다리로 연결하려고 한다. (이때 한 사이트에는 최대 한 개의 다리만 연결될 수 있다.) 
        재원이는 다리를 최대한 많이 지으려고 하기 때문에 서쪽의 사이트 개수만큼 (N개) 다리를 지으려고 한다. 
        다리끼리는 서로 겹쳐질 수 없다고 할 때 다리를 지을 수 있는 경우의 수를 구하는 프로그램을 작성하라.
    입력
        입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 
        그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
    출력
        각 테스트 케이스에 대해 주어진 조건하에 다리를 지을 수 있는 경우의 수를 출력한다.
        
        예제 입력 1 
            3
            2 2
            1 5
            13 29
        예제 출력 1 
            1
            5
            67863915        
"""

import math

T = int(input())

for _ in range(T):    
    n, m = map(int, input().split())
    bridge = math.factorial(m) // (math.factorial(n) * math.factorial(m - n))
    print(bridge)

#-----------------------------------------------------------------------------

import sys

t = int(sys.stdin.readline())

# 테스트 케이스만큼 반복
for _ in range(t):
    n, m = map(int, sys.stdin.readline().split())
    a = m
    b = n

    # mCn 구현
    for i in range(1, n):
        a *= m - i # m!
        b *= n - i # n!

    print(a // b) # m! // n!

 

 

 

반응형

+ Recent posts