C# 공부법에 대한 고민

안녕하세요 C# 윈폼, WPF로 개발하고 있는 1년차 개발자입니다.

선배 개발자님들의 조언을 듣고 싶습니다.

요근래 제가 잘 하고 있는건가라는 생각이 들었습니다.

프로젝트는 경험은 1~2번 했지만 구글링과 챗 지피티를 참고하여 개발하고 해결 하다보니

지금와서 습작을 만들려고 하면 다른 개발자분들이 만드셨던 코드를 보고 이해하여 만들수는 있지만

보지않고 저의 힘으로 혼자 만들려고 하면 기본기가 부족하여 코딩을 시작조차 할 수가 없습니다.

프로젝트때 구글링과 챗지피티에서 나온 코드를 보고 이 코드는 이해 했으니까 써야지라고 생각했던게 지금 이렇게 돌아온거같습니다.

그래서 이런 문제를 해결해보고자 이런저런 글이 찾아보다보니

내가 모르는게 있으면 다른 사람의 코드를 보고 이해하고 이해한걸 그대로 복붙하는게 아니라

다른 사람의 코드 내용을 덮어놓고 나의 생각을 코드로 적는다라고 하는 글이 있었습니다.

저는 그게 잘 안되고 어떤식으로 접근해야 하는지 모르겠습니다.

이부분이 어려운거같습니다. 전혀 갈피가 잡히지 않습니다.

예를 들어 C#에서 테트리스 게임을 만드는데 블록 만든다고 했을때 전혀 어떻게 해야할지 감이 안오는 상태입니다.

공식 문서를 보면서 하는방법도 있고, 다른 분들께서 올려주신 코드를 보고 하는 방법도 있는데

공식 문서를 봤을때에는 이해는 하지만 어떻게 활용해야할지 감이 안오고,

다른 분들게서 올려주신 코드를 보고 이해하고 사용하기엔 이걸 그대로 사용했을때에 나중에 기억에 남지 않을거 같다는 생각이 듭니다.

공부법에 대한 고민 많이 들고 있습니다.

선배 개발자님들의 공부법과 여러 조언을 듣고 싶어 부족한 글이지만 이렇게 글을 올립니다

감사합니다.

1개의 좋아요
  1. 모방은 창조의 어머니
  2. 코딩은 지식이 아니라 (운동)능력

바로 안된다고 좌절하지 마시고 틈틈이 코딩하시면 됩니다. 생각하는 힘을 키우셔야 해요. 가령,

테트리스 블럭의 회전은 단순히 회전된 여러개를 준비해서 할 수도 있고 (이것이 틀린것이 아닙니다)
회전전과 후의 위치 변화로 회전의 패턴을 발견할 수 있어요

3개의 좋아요

회전을 시켜야지라고 생각은 하지만
코딩에서 어떤 함수로 회전 시켜야 할 지 몰라서 시작도 못하는 상황이라면
다른 개발자분께서 개발하신 코드를 따라 치면서 코드를 이해하고 습득해야 할까요?

네. 맞아요. 코드를 보고 이해하는 것과 자신의 코드를 짜는 것은 다른 능력이라 되도록 보고 타이핑 하는 것이 좋아요.

자신의 코드를 짤 수 있는 능력치가 아니라면
코드를 보고 이해하고 사용되는 함수들을 한번씩 찾아보고 타이핑 해보고 정리해놓고 해야겠습니다.

프로젝트 했을때 코드를 이해하고 사용했지만 지금 와서 사용해보려고 하면 기억이 안나는게
해당 코드를 일회성으로만 사용하고 그 이후에는 사용도 안하고 정리도 안해서인거 같습니다.

왜 계속 습작을 만들면서 해당 코드를 활용해보라고 하시는지 조금은 이해가 가는거 같습니다.

1개의 좋아요


남의 코드는 필요 없어! 코딩은 스스로 생각하고 탐구할 때가 가장 즐거우니까…

3개의 좋아요

다른 사람이 만든 코드를 따라해보고 이해 한 후
다시 그걸 안보고 만들려고 했을때 막힌다면 계속 보고 이해하고 보고 이해하고 해야하는게 맞을까요? 어떻게 생각하실까요?

네 그럼요. 정도는 없는데 꾸준히 하는것이 더 중요하다고 생각해요. 원 소스를 살피지 않고 스스로 해결하려고 노력하는것이 성장에 필요한 단계라고 생각합니다. 하지만 너무 끙끙할 필요는 없고 도저히 안되면 참고하셔요 ^^; 0과 10사이의 숫자는 많으니까요. 어떤 방법이든지 꾸준히 노력하는 것이 저는 더 중요하다고 생각해요.

감사합니다 (__)

C# 을 잘 하려면, C# 자체나 닷넷의 특정 프레임워크가 아닌, OOP 에 대한 연습을 많이 하시는 게 좋습니다.

그 연습의 시작은 소프트웨어가 해야 할 일에 대해 기술하는 것입니다.

그것을 바탕으로 객체를 선별합니다.
객체는 가급적 작은 책임을 져야 하고, 그 책임을 위해 상태(field)와 행위(method)를 가집니다.

한 방에 끝나는 지름길도, 정형화된 해결책도 없습니다.
테스트 해가며 코드를 리펙토링하고 객체를 리디자인 해가며 소프트웨어를 완성해 나가는 것입니다.

테트리스 보다는 "계산기"가 첫 주제로 제일 좋다고 생각합니다.

해보시면 절차 지향적인 예제들과 사뭇 다른 결과물에 상당히 놀라실 것입니다.

4개의 좋아요

답변 감사합니다 (__)

1개의 좋아요

다른 사람의 코드는 힌트일뿐 그것을 따라해보는 것은 그다지 의미가 없다고 생각하는 편이에요.
다른 사람의 코드를 따라하면서 무엇을 얻으려고 하나요? 그 코드를 외워서 쓸 건가요?
다른 사람의 코드는, “아 이걸 이렇게 했구나” 혹은 “이걸 이렇게도 하는구나” 정도를 경험하는 정도일 뿐이지 그걸 따라할 필요는 없어요.
(따라해서 뭐에 쓸려구?)

중요한 건 내 생각을 정리하고 그것을 얼마나 구현으로 옮길 수 있느냐 예요.
그런데 “시작조차 못한다.” 라면 결국 내가 뭘 할지, 어떻게할 지 결정/정리 하지 못했다는 얘기입니다.

이런 생각이 드는 건 기술적인 고민 이전에
내가 무엇을 해야하는지 정리가 안 되었다는 얘기입니다.

필요한 일이 있다면 그것을 위해 무엇을 해야하는지 먼저 정리하는 게 순서입니다.(목표, 방향, 필요한 내용과 절차 등등)

구체적인 내용과 계획이 만들어진 이후에야 기술적인 것을 생각할 수 있고
그런 정리와 계획이 없다면 그것부터 해야합니다.

크게는 기획적인 내용이 당연히 준비되어 있어야하고
작게는 하다못해 메서드 하나도 어떤 클래스에 어떻게 정의할 것인지 미리 계획하고 결정해야하죠.
(적어도 내가 뭘 할 지 감이 안 온다면 이렇게 해야하겠죠?)


그래서
지금 고민 내용만 봤을 때 제가 든 생각은

내가 뭘 모르는 지조차 모른다.

라는 느낌이에요.

무엇을 알고 무엇을 모르는지 명확하게 할 수 있다면
모르는 것을 공부하고 연습하는 것으로 시작할 수 있어요.

뭔가 공부를 해야하는 상황에서
저는 갠적으루 이게 젤 중요하다고 봅니다.

7개의 좋아요

답변 감사합니다.
만약 제가 테트리스 게임의 블록을 만들때 전혀 어떤 코드로 작성해야 할지 모르는 상태라면
Greg.Lee님 말씀해주신대로 정리를 해야겠네요.
실례가 안된다면 어떤 코드로 작성해야 할지 모르는 상태라고 가정 했을때 Greg.Lee님게서는 어떻게 정리 하시는지 궁금합니다.
간단하게 작성 부탁드려도 될까요?

음… 유튜브에서 보면 초보 개발자한테 일단 따라하기를 해보라고 하는데
개발을 취미로 할거면 그정도로 해도 되는데 업으로 할땐 힘듭니다.

제 경험에서 말씀 드리면
우선 어느 정도 머리속에 있는 생각이 코드로 자연스럽게 이어 져야 합니다.
생각이 말로 이어 지듯이 말이죠.

그러기 위해선 당연하게도 언어적, 논리적으로 훈련이 되어 있어야 합니다.

문법적인 내용은 1년차 쯤 마스터 되야 되는 내용입니다. (대학 1학년 쯤)
하지만 논리적인 내용을 코드로 구현하는건 하루아침에 잘 안됩니다.

그걸 훈련하기 위해서 자료구조와 알고리즘을 공부합니다.

그게 나중에 직접 짜서 쓰기 위함이 아니에요.
스택, 큐, 리스트, 트리, 그래프, 맵을 직접 다 짜서 쓰는 사람은 없죠.
(제가 처음 배울땐 없으면 만들어라가 정석이었지만…)

제가 생각했을땐 그 두가지가 가장 좋은 논리적 훈련입니다.

해야 될 내용이 명확하고 비교해볼수 있는 대상도 많고
정답 코드도 많은.

자료구조 짜보고 정렬 구현해보고 순회 구현해 보고 하다 보면
어느 순간 부터는 머리속에서 대충 방향이 떠오릅니다.

아 이렇게 하면 되겠는데? ( 실제로 해보면 안되는건 비밀. )

1개의 좋아요

답변 감사합니다.
말씀해주신 내용을 읽어보면 제가 기본기(문법)이 부족한거 같습니다. 다시 기초부터 돌아가서 빠르게 공부하도록 하겠습니다.

이럴때는 다른 경우를 빗대어 생각해보면 이해가 잘 되실겁니다.

수학공부를 예로 들어볼게요…

공식? => 몰라요. => C# 문법 모른다.

방정식? => 몰라요. => 식을 세울줄 모른다. => 구해야 하는 x(해)를 모른다 => c#에서 최종적으로 도출해야할 결과물을 정하지 못한다.

문제 유형? => 몰라요. => 패턴, 로직 구성방법을 모른다.

이 상태에서 다른 사람이 정리해놓은 증명을 공부하는 것이 과연 도움이 되는가? 라는 질문을 하신겁니다.

2차 방정식 해를 구하기 위해서는 근의 공식을 외우든지,
근의 공식이 도출된 증명 과정을 이해하고 그 과정 자체를 외우든지

둘 중 하나는 무조건 해야 합니다.

그런 의미에서 다른 사람 코드를 보고 이해를 하고 써먹든,
어떤 기능을 구현하는 공식을 외우든…
싫어도 둘 중 하나는 해야합니다.


실컷 써놓고 보니, 제 답변이 질문하신 내용과는 다소 거리가 있네요…ㅡ.ㅡ;;;;
질문 내용은… 소스코드를 복붙해서 쓰다보니 지금 와서는 잘 모르겠다… 하시는것 같습니다.
책 한권이라도 꾸준히! 지겨울때까지 반복하고 또 다른 책 보고 해보셔요.
그리고 다른 프로그램 보고 그걸 따라서 똑같이 한번 구현해보세요.
GPT한테 물어보는거 최소한으로 해보시구요…

1개의 좋아요

답변 감사합니다. 충분히 도움이 되었습니다!

책도 읽고
모르는 기능이 있으면 검색도 해보고
다른 사람이 한 코드도 봐보고 한번 타이핑도 해보고
습작도 만들어보고 실력이 늘려면 반복 반복 반복인거 같습니다.

지금이라도 다시 마음을 다잡고 열심히 해보려고 합니다! 감사합니다!

1개의 좋아요

저와 정말 비슷한 입장에 처하신 분이시군요.
저같은 경우엔 C# WPF 로 개발하는 중이구요 1년 반정도 되었습니다. 저는 혼자서 프로젝트 맡으면서, 화면 디자인까지 바꾸며 최근 성장함을 느꼈습니다.

하다보면 이전 프로젝트에 있던것들을 복붙하는 일들이 많은데, 형식이나 형태를 조금씩 바꾸면서 해보시는게 어떠신지요.
제 경험을 예로 들면, 기존 프로젝트에서는 메뉴를 선택할 때 리스트박스의 형태로 썼습니다. 양쪽 사이드에 리스트 박스를 이용해서 메뉴를 하나하나 만들고, 각 메뉴를 누르면 selectedindex가 변경될때마다 빈공간을 clear 하고 children.add 해서 화면이 바뀌었죠. 근데 새로 진행하는 프로젝트에서 좌우 공간을 필요로 해서 위로 올려야 했고, 올리는 김에 TabControl 을 쓰면 어떨까 싶어서 TabContrl을 사용했고, 기존에 날개 처럼 보이는 모양을 박스 형태로 바꾸는 등의 수정을 가했습니다. (지멘스 HMI UI가 이뻐보여서 따라해봤습니다.)
그러다가 selectedindex를 사용해야하는 상황이 왔는데, listbox의 selectedindex와는 돌아가는 모양새가 좀 다르더군요. 분명 변경 후에 이벤트가 지나면 문제가 없어야 하는데 클릭을 한번 더 한듯한 전개가 나타났어요. 이런 비슷하게 돌아갈거 같으면서도 다른 포인트들을 겪으면 도움이 많이 되지 않나 라고 생각합니다.

답변 감사합니다!