무슨 뜻인가요?
디버깅은 오른쪽이 쉽다는 뜻일까요?
말 그대로요 'ㅅ';;;;
마치 수학 초보는 드럼통의 용량을 위해서 면적과 길이를 재고 안의 철판 두께를 재고 하겠지만, 고수는 제조사에 물어보는것과 같은거죠 ㅇㅅㅇ;;;
두개 결과가 많이 다른데요..... ㅋㅋ
제가 프로그래밍 하면 초보 하듯 하겠는데여.... 다른 사람이 따라 하기 힘들게 그리고 프로그램이 무거워지게.... 열심히 한 것 처럼 보이잖아여.... ㅋㅋ
저런 코드는 머리 굴려서 for 문 돌리지 말고 걍 수동으로 프린트 시키는 게 편하다는 거겠쥬...
근데 진지빨자면 양쪽 output이 다르네여
the pattern is 문구도 없고
왼쪽은 " * " 이 반복 출력되므로 space가 사이사이 하나씩이 더 생기겠군요
+1
화분을 뒷뜰에 옮겨심는데요.
초보는 포크레인 빌려오고요.
고수는 그냥 삽질로 하고요.
하지만 응용적인 측면을 보자면 왼쪽처럼 짜는 게 맞습니다.
*를 50개 출력해야 하는 경우가 생기면
왼쪽은 i max 조건문만 바꿔주면 되는데
우측은...
Scalability 생각하면 왼쪽.
오른쪽은 날림공사?
고수는 pseudo function이나 class로 따로 만들어서 print만 main에서 하게 해놓고 ... psedo함수를 develop한다로...
고수는 오른쪽처럼 quick-and-dirty하게 만들고, scalability가 필요하면 초보(라고 하기는 좀 그렇고 쥬니어 개발자)에게 시켜서 왼쪽처럼 만들게 해야죠. 들이는 시간은 1:2 인데, 크레딧은 1:1 (혹은 2:1)로 받고요.
printf 자체의 overhead 때문에 그런거 아닐까요? ㅋㅋ 고수꺼는 printf를 5번 밖에 콜 안하지만 초보꺼는 5 + 4 + 3 + 2 + 1 + 5 번 콜을 해서..
오른쪽으로 시작해서 필요에 의해서 왼쪽으로 변환해가겠죠.
한번 쓰고 말 코드는 오른쪽처럼, 자주 써먹을 것 같으면 왼쪽처럼 짜서 모듈화를 해야 좋겠죠.
오른쪽에서 왼쪽으로 전환을 언제 할 것이냐가 관건이 되겠습니다.
초보 코드는 indentation이 엉망이에요 ㅋㅋ
헙 진짜네여 ㅋ
제 생각엔 메모리 사용 측면과, 시간 복잡도 관점에서 봐야할 것 같습니다.
1. 시간 복잡도 관점
왼쪽의 시간 복잡도는 O(N^2) - 2중 for 문 / 오른쪽은 N
** 즉, 5개의 별을 그리기위해선 왼쪽은 5^2 = 25 / 오른쪽은 5 => clock당 0.01초 걸린다고하면 0.25초와 0.05초
만약 100개의 별을 그린다면 왼쪽은 10000 / 오른쪽은 100 => 100초와 1초
간단한 기능만을 담당하지만 퍼포먼스 차이가 기하급수적으로 차이나게된다는거죠
시간 복잡도 자체는 그렇지만,
string 길이에 따라 printf 실제 computation time이 달라지는 것을 고려하면 말씀하신 정도까진 차이 안 나지 않을까요?
네 맞습니다! 항상 워스트 케이스를 생각하면서 코딩을 하다보니ㅎㅎ
그래도 역시나 남이 한눈에 알아볼 수 있게 짜는게 진정한 고수 아닐까라는 생각합니다~
코드가 복잡해지면 그만큼 짜는 시간과 노력도 많이 들면서 실수할 확률도 높아지고 문제가 생겼을 때에도 디버깅하기도 더욱 힘들어지지요. 말그대로 저렇게 간단히 프린트만 하면 되고 앞으로 바꿀 일이 크게 없을 경우 저도 오른쪽을 선호하는 편입니다. 하루하루 전쟁터에 있는 것처럼 정신없이 수백 수천줄의 코드를 짜야 하는 사람들한테도 마찬가지가 아닐까 싶어요.
둘 다 초보인데요. main() 이렇게 쓰는 걸로 봐서 표준도 지키지 않는 사람인데 고수로 부르면 곤란합니다. Looks not good to me..
하지만 무슨 뜻이냐면 쓸데없이 기교 부리지 말고 목적을 위해 최소한의 코드, 쉬운 유지 보수가 가능한 코드를 만들라는 이야기겠죠.
원래, 컴퓨터가 읽는 코드는 누구나 만들수 있지만 ..고수들은 사람이 읽기 쉽게 만든다는 말이 있듯 ㅋㅋ 다른 사람들이 이 부분을 생각안하고 코드 읽을 수 있게 해주는것 아닐까요 ㅎㅎ
컴퓨터 공학과 출신입니다.
고수와 초보를 바꿔도 밑의 댓글은 크게 다르지 않습니다.
그러니까 오류를 찾아내려는 집요한 공돌이들을 모두 불러모으려는 떡밥일 뿐입니다.
댓글 수를 보면 떡밥의 효과가 아주 좋다는걸 알 수 있죠.
비컴터과 출신입니다.
둘다 똑같습니다. 보기에는요. (외계어)
왼쪽은 O(N^2) 오른쪽은 constant. 위에 나왔듯이 텃밭에 모종 하나 심자고 포크레인 가져온 꼴이 됐죠. 컴시 사람들은 O(N^2) 아주 싫어해요. 적어도 O(N*logN) 은 되어야죠.
컴싸 회원님들이 만선이군요 ㅋㅋㅋ
회사에서는 그냥 아웃소싱 해 버립니다.
ㅋㅋㅋ
N > 100 정도 되지 않으면 오른쪽으로 가는게 정답입니다.
쓸데없는데 brain power 를 낭비할 필요 없습니다 (본인들 brain power 도 문제지만 저걸 보고 리뷰하고 나중에 문제생기면 고쳐야 하는 동료들/선임들의 brain power 도 배려해줘야죠)
사실 이런종류의 결정이 부하직원(머리좋은 초보들)들과 매우 자주 부딛치는 문제 입니다. 제 부하직원들은 뭐든지 거창하고 scalable 한 방법으로 가려고 합니다. (N=5 이고 나중에 더 커질 일 없는 경우에도) 저는 그럴때마다 제일 단순 무식한 방법으로 가자고 바꿔놓는데 논리적으로 따지면 그들이 이깁니다. 그러나 저는 오른쪽이 옳다고 믿기 때문에 자주 고집을 부립니다.
위에 여러분들이 overhead, big O 등등 언급해주셨는데, 이렇게 N=5 인 경우엔 그런거 생각하는 거 자체가 무의미합니다.
N 이 커지면 그떄가서 다시 생각하면 됩니다.
맞는 말씀이긴한데 여기에서 "무의미"를 논할순 없다고 생각합니다. 소프트웨어의 context가 중요하죠. 만약 0.001ms 이라도 더 빨리 만들어야하는, 예를들어 자동차 collision detection같은 소프트웨어를 할때는 N이 주는 영향이 아무리 낮더라도 이런 사소한 부분에서도 most effective한 솔루션을 찾아야 한다 생각합니다. 그리고 이 코드가 수백개 수만개의 쓰레드에서 동시에 실행 된다면 overhead도 무시할수는 없겠죠. 뭐 이런 특수성을 가지지 않는 general한 소프트웨어는 말씀하신데로 brain power, readability, maintainability 가 더 중요하겠죠?
전 초보보다 한 술 더 뜬 왕초보네요 ㅋㅋ
프레임웍 만들던 버릇이 있어서
파라미터로 시작, 끝, 이넘타입 받아서
왼쪽 직각 삼각형인지, 오른쪽 직각 삼각형인지, 이등변 삼각형인지 등등
함수를 만들고 있을 것 같네요
30년전에 Basic 배웠을때 초보방식으로 for 구문 배웠었죠.... 그 때는 엄청 싫었었는데, 이걸로 먹고 살 줄이야.. 쿨럭 쿨럭....
둘다 하드 코딩이라서 재사용성이나 모듈화는 고려 안했네요. 파이썬이었다면 보통 아래처럼 하죠.
print ("\n".join(["*"*i for i in range(1,6)]))
짧은 코드를 원하면 APL: ↑'*'⍴⍨¨⍳5
전 유지보수를 위해 읽기좋게 단순하게 써라 로 이해합니다.
결론은
공돌이의 지적 자존심을 건드린
정혜원님 고수 승!!!
댓글 [41]