1만 시간의 법칙이라고 들어보셨나요? 1만 시간을 투자한다면, 전문가가 될 수 있다는 개념입니다.

 

2024년을 맞이해, 새로운 기술로 1만 시간을 채워볼수 있을까란 생각이 들어 계산을 좀 해봤습니다.

SQL로요! (여기서는 MySQL을 사용했습니다.) 먼저 아래와 같이 날짜 테이블을 생성합니다.

(C_BAS_DT는 StartUP Tuning 강의에서 튜닝을 위해 소개되는 테이블입니다.)

CREATE TABLE C_BAS_DT
(
    BAS_DT DATE NOT NULL
    ,BAS_YMD VARCHAR(8) NOT NULL
    ,BAS_YM VARCHAR(6) NOT NULL
    ,BAS_YW VARCHAR(6) NOT NULL
    ,BAS_DT_SEQ INT NOT NULL
    ,PRIMARY KEY(BAS_DT)
);

 

그다음에, MySQL의 RECURSIVE문을 이용해 기본 데이터를 저장합니다. 아래 SQL을 실행하면 2050년 1월 1일까지의 날짜 데이터가 C_BAS_DT에 저장됩니다.

SET @@cte_max_recursion_depth = 30000;

INSERT INTO C_BAS_DT (BAS_DT, BAS_YMD, BAS_YM, BAS_YW, BAS_DT_SEQ)
WITH RECURSIVE WR01 AS (
    SELECT  STR_TO_DATE('20000101','%Y%m%d') AS BAS_DT
    UNION ALL
    SELECT  DATE_ADD(BAS_DT, INTERVAL 1 day) BAS_DT
    FROM    WR01
    WHERE   BAS_DT < STR_TO_DATE('20500101','%Y%m%d')
)
SELECT  BAS_DT BAS_DT
        ,DATE_FORMAT(BAS_DT, '%Y%m%d') AS BAS_YMD
        ,DATE_FORMAT(BAS_DT, '%Y%m') AS BAS_YM
        ,CONCAT(YEAR(BAS_DT), LPAD(WEEK(BAS_DT), 2, '0')) AS BAS_YW
        ,ROW_NUMBER() OVER (ORDER BY BAS_DT) AS BAS_DT_SEQ
FROM    WR01
ORDER BY BAS_DT ASC;

 

1만 시간의 법칙을 계산하기 위해서는 더 많은 날짜 데이터가 필요합니다. 리커시브를 계속 사용하기 보다는 셀프조인을 사용해 추가 날짜 데이터를 생성합니다.

아래의 SQL을 여러번 실행해 2300년 1월 1일까지의 데이터를 생성합니다. 세 번 정도 실행하면 됩니다.(앞에서 생성된 C_BAS_DT를 다시 사용(셀프조인)해 더 많은 연속된 날짜 데이터를 추가로 생성하는 방법입니다.)

-- INSERT 건수가 0건 될때까지 계속 실행(세번 실행하면 됨)
INSERT INTO C_BAS_DT (BAS_DT, BAS_YMD, BAS_YM, BAS_YW, BAS_DT_SEQ)
SELECT  T3.BAS_DT BAS_DT
        ,DATE_FORMAT(T3.BAS_DT, '%Y%m%d') AS BAS_YMD
        ,DATE_FORMAT(T3.BAS_DT, '%Y%m') AS BAS_YM
        ,CONCAT(YEAR(T3.BAS_DT), LPAD(WEEK(BAS_DT), 2, '0')) AS BAS_YW
        ,ROW_NUMBER() OVER (ORDER BY T3.BAS_DT) + T3.MAX_DT_SEQ  AS BAS_DT_SEQ
FROM    (
        SELECT  DATE_ADD(T2.MAX_DT, INTERVAL T1.BAS_DT_SEQ day) BAS_DT
                ,T2.MAX_DT_SEQ 
        FROM    C_BAS_DT T1
                CROSS JOIN (SELECT MAX(X.BAS_DT) MAX_DT , MAX(X.BAS_DT_SEQ) MAX_DT_SEQ FROM C_BAS_DT X) T2
        WHERE   DATE_ADD(T2.MAX_DT, INTERVAL T1.BAS_DT_SEQ day) <= '23000101'
        ) T3
        ;

 

이제 위에서 만들어진 C_BAS_DT 테이블을 사용해, 평일에만 하루에 30분씩 투자해서 1만 시간을 채우려면 얼마나 걸릴지를, SQL로 구해봅니다. 아래와 같이 SQL을 구현해 볼 수 있습니다.

-- 오늘부터 하루에 30분씩 투자해서 평일(월,화,수,목,금)만 했을때 만시간을 채우려면 몇일이 끝일까?
-- SQL로 구해보자.
SELECT  MAX(T2.BAS_DT) 만시간완료일자
        ,SUM(CASE WHEN T2.HOUR_SUM <= 10000 THEN 1 END) 일수
FROM    (
        SELECT  T1.*
                ,DAYNAME(T1.BAS_DT) DNM
                ,0.5 HOUR
                ,SUM(0.5) OVER(ORDER BY T1.BAS_DT ASC) HOUR_SUM
        FROM    C_BAS_DT T1
        WHERE   T1.BAS_DT >= DATE_FORMAT(NOW(),'%Y%m%d')
        AND     DAYNAME(T1.BAS_DT) IN ('Monday','Tuesday','Wednesday','Thursday','Friday')
        ORDER BY T1.BAS_DT ASC
        ) T2
WHERE   T2.HOUR_SUM <= 10000;


만시간완료일자   |일수   
---------------+-----+
2100-08-27     |20000|

 

제가 죽기전에는 하루에 30분씩으로는 1만 시간을 채울수가 없네요!

 

그렇다면, 지금 자신이 하고 있는 직업으로 1만 시간을 채우려면 얼마나걸리까요.

하루에 보통 8시간 일을 하니, 위 SQL에서 0.5 HOUR만 8 로 변경해주면 됩니다. 

SELECT  MAX(T2.BAS_DT) 만시간완료일자
        ,SUM(CASE WHEN T2.HOUR_SUM <= 10000 THEN 1 END) 일수
FROM    (
        SELECT  T1.*
                ,DAYNAME(T1.BAS_DT) DNM
                ,8 HOUR
                ,SUM(8) OVER(ORDER BY T1.BAS_DT ASC) HOUR_SUM
        FROM    C_BAS_DT T1
        WHERE   T1.BAS_DT >= DATE_FORMAT(NOW(),'%Y%m%d')
        AND     DAYNAME(T1.BAS_DT) IN ('Monday','Tuesday','Wednesday','Thursday','Friday')
        ORDER BY T1.BAS_DT ASC
        ) T2
WHERE   T2.HOUR_SUM <= 10000;

만시간완료일자   |일수  |
----------+----+
2028-10-13|1250|

 

자신의 직업을 꾸준히 1250일 정도 한다면 만시간을 채울 수 있네요. 우리가 하고있는 일을 오늘부터 열심히 2028년 10월까지, 하루에 8시간씩만 쏟는다면 1만 시간을 채울 수 있습니다. 

 

이처럼, 1만 시간을 채우기란 매우 어려운 일입니다. 실제 1만 시간을 채우지 않고도 1만 시간을 채운 효과를 보기 위해서는 다른 사람들의 도움을 받고, 다른 사람과 유연하게 협동을 해야 하지 않나란 생각이 듭니다.

2024년에서는 다양한 교육 과정과 협동을 통해 1만 시간을 더욱 단축해보실 수 있기 바랍니다.!

 

 

 

+ Recent posts