긴 글이지만 대상자가 프로그래밍을 하려는 들 사람인 만큼 이정도 긴글에 대한 피로도는 인내로 넘어갈 수 있을 거라 믿습니다.
그런데 목표가 모호한 입문자들도 많습니다. 일단 개발이라는 걸 해보고 싶은사람도 있죠. 그런분들은 대략적인 분야만 정하고 재밌게 공부할 수 있는 거, 배워서 후회없이 여기저기 써먹기 좋은 기술 혹은 자기 일상에 도움이 되는 언어와 프레임워크로 입문하면 좋겠습니다. 그런분들은 C/C++,파이썬으로 콘솔앱제작을위한 프레임워크도 시작하기 좋은 선택입니다.
보통은 유니코드문자쓰면 생기는 문제들땜에 안씁니다만 요샌 코드안에선 써도 됩니다.
근데 폴더명은 한글하지 마세요 vs code에서 git 체크아웃 안됩니다 그리고 맥에서는 폴더/파일이름이 한글이면 철자의 뼈와살이 분리되는 경우도 있습니다
그리고 변수명을 영어로하눈 것도 학습의 일부라고 생각해요 코딩컨벤션을 익히는 것도 중요합니다. 남의코드 볼일이 많으니까요.
기능에따라 자주쓰이는 단어, 일반적으로 많이쓰이는 약자등등요
저는 개인적으로 주석도 한글로 되어 있는 걸 선호하지 않지만 초심자 시절이라면 그러려니 할 수 있는데,
코드는 적절한 변수, 함수, 클래스 등의 이름을 정하는 게 정말 중요하기 때문에
이걸 영어 단어로 얼마나 잘 의미있게 만드는가가 곧 코드 퀄리티랑도 직결될 수 있습니다.
이게 퀄리티의 전부는 아닐지라도 설계가 잘 된 코드는 이름도 깔끔하게 나올 가능성이 높습니다.
무엇보다 웹 상에서 찾아볼 수 있는 코드 99.99%는 영어로 작성되어 있기 때문에
좀만 익숙해지면 한글 코드가 오히려 가독성이 훨씬 안 좋기도 합니다.
그런데 개발 해보시면, 한글 변수명은 진짜 불편합니다.
일반적으로 개발 언어 자체가 비 한글권 문화에서 만들어서 어떤 느낌이냐면...
영어를 코딩이라고 예를 들면
"나는 학생입니다." 를 영어로 코딩하면 i am a student. 인데,
"나 is 학생" 이런 느낌입니다.
한글이라고 전혀 가독성이 높지 않아요.
오픈소스로 외국 사람들까지도 볼 가능성이 있는 코드라면 영문으로 하는것이 맞다고 보구요, 개인 프로젝트나 소스가 오픈되지 않는 한정된 상황의 프로젝트라면 한글변수명을 쓰는 것도 꽤나 나쁘진 않다고 생각합니다.
예전 어느 프로젝트에선가 Oracle DB의 테이블명과 컬럼명이 한글로 되어 있는 것을 본 적이 있었는데, 처음보는 시스템의 처음보는 컬럼, 테이블인데 내부 로직이나 내용이 아무 생각없이 술술 읽히고 쿼리 만들 때에도 뭐랄까나 꽤 편안한 마음으로 만들게 되더군요. 불편한 것이 있다면 한영전환이 좀 짜증나긴 하더라구요 ㅎㅎ
다만 한영 변환이 귀찮다는게 문제지요.
예약어와 라이브러리 메서드들은 죄다 영문인데 내 변수 입력할 때마다 한/영변환하는게
생각보다 귀찮습니다.
결국 영문명으로 읽기 쉽게 하게 되더군요.
다만, 해외 사람들과도 많이 일해보니, 코드 자체에 한글이 들어간다는 생각을 아예 하질 못하고 있네요... 요즘엔 주석과 github pr issue wiki 모두 영문으로만 작성하고 있습니다.
ai를 말씀하셨는데, chatgpt 시대 이후의 코딩은 또 어떻게 바뀔지 모르겠지만, 지금은 본인이 알아야 일 시킬 수 있습니다. 은근히 잘못된 코드, 의도하지 않은 코드도 많기 때문에 이건 프롬프트를 만드는 사람이 해당 분야를 알고 계속 교정시켜 가면서 시켜야 제대로 된 결과물이 나오고, 이건 다른 분야 (법률이나 뭐 기타 등등) 모두 마찬가지 인 상황이죠.
좋은글 감사해요
누군가에게 좋은 안내서가 될 거 같습니다.
웹개발 한정 추가 미립자 팁:
프론트엔드 모르는 백엔드 작업자, 백엔드 모르는 프론트엔드 작업자, 둘 다 답답하므로... 그냥 프론트엔드, 백엔드, db 셋 다 잘하시면 좋습니다.
서버 모르는 클라이언트, 클라이언트 모르는 서버 의 경우도 답답하더군요.
HTTP GET 요청에 Content-Type 헤더를 필수로 지정해놓지않나
HTTP 204 (No Content) 응답을 오류라고 처리하지 않나....
조언 얻고 싶군요.
git 사용법도
저도 현재는 데이터엔지니어를 업으로 하고 있지만 면접관으로 지원자들을 만날때 느끼는 것은 현재 유행하는 부분만 알고 있고 근본(?)이 없다는 것을 많이 느끼게 되더군요.
물론 경력이 없으니 당연할 수도 있지만 본인이 취득한 자격증 참고서에 나온 내용을 물어도 모른다는 것은 직업 조차 대학 들어가듯 단순 평가를 위한 스펙만 쌓았다는 생각이 들어 씁쓸하더군요.(물론 현실이 이런 친구들에게 기회가 많다는 것도 인정은 합니다)
IT를 업으로 하는 사람으로서 좋은글에 감사드립니다!!!
반갑습니다. 전 취업을 전공대로 안했다보니 전자공학도 비루합니다 ㅠㅜ 아두이노 같은거 하고싶어요
또한 학생때 목적을 제대로 정하거나 알지 못하고 하던 많은 것들이 다시 생각나더군요. 프로그램 언어로는 포트란이 생각나고요.
중간중간 프로그램 언어 기초만 깔짝할때 들었던
이걸로 독립된 프로그램(바탕화면에 아이콘으로 실행할수 있는) 은 어떻게 하는거야라는 의문을 갖은 저의 수준에
정말 좋은 포인트를 알려주는 글이네요
감사합니다
개인적으로는 개발을 배우는 경우 단순하더라도 하나의 완성된 앱을 만들어 보는게 매우 중요하다고 생각합니다.
이거 좀 배워보고, 저거 좀 배워보고 해서는 그야말로 죽도 밥도 안 된다는 표현이 적절하다고나 할까요.
프로그래밍을 하는 것만큼 중요한게 디버깅인데 그냥 배우고 깨작거리기만 하는 경우
디버깅에 대한 학습이 거의 되지 않으니까요.
온전한 하나의 앱을 만들어보면서 버그 잡느라 디버깅 툴의 정보를 이해하다보면
차례대로 학습할 때랑은 다른 심도있는 학습이 된다고 생각합니다.
‘프로그래밍 시도하다가 실패한 이들에게’ 로요 ㅎㅎ
백엔드도 마찬가지이고 필수겠지만 좋은 구조와 최적화 쪽으로 많이 신경쓰고 있습니다.
물론, 말씀하신 '대부분' 회사가 프론트엔드를 제대로 사용하고 있지 않지만 프론트엔드 직무가 있는 회사라면 백엔드만큼이나 구조와 효율, 기술에 집중하고 있습니다.
아직 사회적 인식이 아쉽지만 백엔드와 프론트엔드의 구분이 심화되었지만 FM대로 한다면 두 분야는 같은 철학을 공유합니다. 결코 깊이가 다르다고 생각하지 않습니다.
누가 프로그래밍 입문 물어보면 이 글 보여주고 싶어요^^ 감사합니다!
제가 좀 더 첨언하자면 프로그램을 만들어 먹고살면서 이쪽 분야에서 가장 중요한 한가지를 꼽자면 “시행착오” 라고 봅니다
아무리 언어를 빨리 깨우치고, 빨리 알고리즘을 이해하고, 운영체제, 컴퓨터 동작원리를 이해하더라도
결국 자기가 직접 설계하며 코딩해서 하나의 프로그램을 완성하고 부수고 다시 완성하고 부수는 일련의 과정이 없다면 이전의 모든 학습과정이 무의미하게 되더라고요
프로그래밍은 끊임없는 자기 자신과의 싸움이며 결코 끝이 없는 그 어떤 과정
그래서 그런가 많은 사람들이 ‘프로그래밍’ 을 무협 소설의 ‘무공’ 에 빗대어 표현을 하는거 같습니다
남의 것을 가져다 쓰더라도 자기 만의 것으로 체화하여야 하며
끊임없이 정진하여야 하며
다른 사람의 것을 보며 배우고
때로는 오래된 것에서 깨우치고
많은 시행착오를 거쳐 완성하고
완성에서 끝나는 것이 아닌 완성이 곧 또다른 시작이며 그 완성을 부수어 다시 시작하며
언제나 겸손해야하는 것
좋은 글입니다.
얫추억이 새록새록 해서
코볼,베이직,포트란,어셈블러,그리고 c
(파스칼도)
배우는 과정이 당시에는 비싸기도 했고
먹고 사는 문제가 시급해서 그곳을 떠났습니다
...
계속 있었다면 지금은 다른 세상에 있었겠지요
코딩 용지에 코딩 작성후에 음??
키펀처도 생각이 나는군요.
27년전에 포트란과 비주얼베이직 조금 배우다 말았는데..
어플개발 보다는 프로그램과 하드웨어와의 구동방식에 관심이 많습니다.
요새 뭔가 해보고싶어서 라즈베리파이5와 파이썬으로 코딩해서 여러기기들과 주물럭 거리는 책을 샀는데 도움이 많이 됐습니다.
컴공전공자이고 나름 대학졸업 전 프로그래머의꿈을 이뤘다고생각했었습니다. 결론적으로는 언어쪽으로는 꿈을 어느정도이루었지만 그 이후로는 잘못된길을 걸었던거같아요. 명확하게 무었을 해야할지 모르는상태로 리눅스시스템개발과 어쩔땐 pc프로그램, 어쩔땐 남이만든프로그램 수정하면서 결국 더이상 깊은단계로 들어가지못하고 꿈을접었던거 같습니다. 다만 그간의 경험과 컴퓨커의대한 이해, 군시절 전산병경험등으로 현재는 인프라와 보안쪽에서 반반걸쳐 일을하곤있지만 변해가는 환경과 어려워지는 회사, 나이등의 변수들로 인해 또다시 지쳐가고 있습니다.. 다시한번쯤은 제대로된 개발,설계를 하면서 자아실현을 해보고싶긴합니다. 그것이 마음만으로 또 끝날지는 모르겠지만 지난 시간 추억하게되었었고, 도전의 의지가 조금 생기긴합니다! 24년 복많이받으세요!
저는 롬라이터를 못 구해서 납땜해 만들었습니다 ㅠㅜ
비트하나하나 슬라이드 스위치 달아서 101010 하고 ’쓰기‘ 흙흙흙
새해 되자마자 이런 글을 읽은 참에 이 글을 나침반 삼아 다시 한 번 길을 가보고 싶어지네요.
감사합니다.
저도 컴퓨터의 밑바닥부터 하드웨어 원리를 공부해보고 싶어서 라즈베리파이와 리눅스 등을 독학해 보았습니다.
공부할 것들이 너무 많고 어렵더라고요. 그래서 지금은 고생을 덜고 장기적 싸움을 위해 제 업무와 관련있는 분야(통신)로 좁혀 선택과 집중해보려고 하고 있지만,,,
(제 짧은 경험으로 봤을 때) 풍부한 소스와 도움말, 자유로운 오픈소스인 파이썬과 리눅스가 정말 좋은 것 같습니다.
제 자식에게도 프로그래밍언어로 파이썬을 추천하고 싶습니다.
취미로 배워 보고 싶으신 분들도 파이썬으로 시작하면, 빠른 성취감을 느끼고 시행착오를 줄이면서 다양한 분야로 뻗어 나갈 수 있지 않을까 생각해봅니다.
여기부터는 지극히 개인적인 의견이긴 합니다만은....
프레임워크와 플랫폼은 언어로 만든 도구에 가깝고 언어/프로그래밍을 배울때 중요한 것은 아닙니다. 컴퓨터 공학을 공부하셨다면 모든 프레임워크나 플랫폼은 자주 사용하는 패턴을 쉽게 사용하기 위해서 만든 도구일뿐입니다. 결국은 기본적은 컴퓨터 공학의 원리를 모아논 것에 불과합니다. 이 부분에서는 library와 유사합니다만 차이를 논하기에는 댓글이 너무 길어질거같네요.
프로그래밍을 잘하기 위해서는 시스템의 이해(하드웨어/OS), 컴퓨터공학에서 배우는 기본원리들과 논리가 중요합니다. 문법은 내 논리를 표현하기 위한 수단이고 프레임워크는 의견이 많이 반영되어있는 정형화된 패턴을 쉽고 빠르게 구현하는 도구일 뿐입니다. 물론 전공자가 아닌 일반인 입장에서는 이를 배우는거에 더 중점을 두는 것이 맞는 접근일수도 있지만 취미를 벗어나서 무언가를 배운다고 했을때에는 더 근본적인 것을 배우는게 맞습니다. 예를 들면 학교에서 처음 공부할때 수학/과학 같은 기본적인 원리를 알려주지 그걸로 인해 파생된 공학을 알려주지는 않습니다. 대학은 공학을 알려주지만 저런 기본적인 토대가 있다는 가정에서 알려주는 겁니다.
객체지향(OOP)도 하나의 표현수단일뿐이고 왜 그걸 해야하는지를 먼저 알아야지 지금 발전된 형태의 OOP 패턴을 외워서 사용하는 건 단순한 코더 이상의 프로그래머가 되기는 어려워 집니다. 이론을 배우는게 흥미 유발이 힘들고 배우기 어려운게 사실이긴 합니다. 저도 학과때 np completion 요런 것들 이해하고 증명하는데 무지 애 먹었습니다. 재미도 없었던거 같구요 ㅎㅎ
현직에 있을때 보면은 프레임워크 등을 배우는데 급급한 개발자들 많이 봐왔지만 실력에 한계가 생겨버리는게 대부분입니다. 기초가 탄탄한 사람은 뭘 배우던지 어떤 원리로 만든건지 금방 파악되기 때문에 쉽게 배우고 더 잘 쓰는 것을 보아왔습니다. 그냥 취미로 한다면 이 글처럼 배우시면되고, 밥먹고 살려고하시면 원리/이론에 더 중점을 두는 것이 어떤가 권유해봅니다.
개인적으로 자바를 주로써서 이 코드가 어떻게 바이트코드로 바뀌고 또 이게 jvm에서 최적화될때 어떻게되고 os는 어떻게 처리되고 cpu캐쉬에서 어떻게 이동해서 동작하는지 보이기 시작한다면 새로운 세계가 열리는 것 같아서 재미가 있습니다. 새로운 프레임워크나 라이브러리가 나왔을때 아 얘네들이 이걸 이용해서 이렇게 구현했구나 똑똑한데 이런 생각이 들면 재미있고 이해도도 높아져서 더 활용도 잘하게 되구요. 또는 가볍게 자료구조를 제대로 이해해서 적재적소에 linkedlist를 사용할수있을때의 재미는 이루 말할수 없습니다. 사실 99%의 프로그래머는 LinkedList를 제대로 사용 못하고 있는게 현실입니다. linkedlist가 진짜 어려운게 ram특성상 이론보다 패널티를 많이 받아서 일반적으로 대부분의 경우는 느린데 또 잘쓰면 기가 막히게 유용하고 더 효율적인 코드를 짤수 있습니다. 쓰다보니 잡담이 길었네요...
많은분들이 언어에 집중을 하시는데 나중에는 컴퓨터 구조와 원리, 전산학 같은 기초지식이 간절하고 필요로 하는날이 올겁니다.
그래서 언어에 중심을 두시는것도 좋지만 기초 기반지식도 같이 챙기셔야 합니다.
매체 유형 상관 없이 말입니다(책 동영상 등)
언어는 저는 책 추천합니다.
언어문법은 어차피 콘솔출력만으로 익힐 수 있어서 별다른거 필요없어요.
책은 자기속도에 맞출수 있고 포스트잇/A4나 보조노트 같은걸로 추가학습한거 자기가 이해한방식을 페이지 사이에 껴놓을수가 있죠.
나중에 프레임워크단계에서 코드를 보면서도 이게뭐였더라? 하고 공부했던 책 찾아보면 자기가 이해했던 방식 그대로 볼 수 있으니 상기도 잘되요.
다만 개발환경 처음에 뭐 설치하고 뭐눌러서 RUN해보고 이런거라거나, 책이 집필시점과 출판된시점이 달라 개발도구 소프트웨어가 다를수 있는데 유튜브에서 짧게라도 처음 설치해서 개발환경 꾸미고, 첫 코드 실행하는 부분은 봐주면 좋겠네요.
개발환경 꾸미는게 좀 일이예요. 안맞는것도 많고..
iOS 네이티브 같은경우 그냥 Xcode (IDE) 설치해서 시작하는게 대부분일거라 그리 어렵진 않겠지만, 이건 플레이그라운드 라는 것도 있어요.
프레임워크단계는 GUI때문에 눈으로 보고해야할게 많으니 유료인강 추천합니다. 다만 유료인강은 구버전일수 있으니 최신찾던지, 구버전에 맞춰서 개발툴을 설치해서 따라하는게 신상에 좋아요.
유료인강을 추천하는 이유는 커리큘럼인데, 책처럼 기초부터 필요한것들 강사가 가르치려는 커리큘럼 그대로 처음부터 끝까지 체계적으로 정리완료되어있기때문입니다. 유튜브같은데는 너무 파편적이고 업로드하다말고, 어그로도 많고 그래서 초보단계에선 별로 추천을 못하겠더라고요.
유료인강은 국내사이트는 인프런, 영어들을수 있으면 유데미 있습니다.
그 후로는 유튜브에서 좀더 필요하거나 더 실용 적인거 부분부분 보거나 실제 앱개발 따라해보고 나머진 뭐 인터넷이죠.
그정도 되면 이제 프레임워크단계의 책이나 언어 알고리즘 디자인패턴같은 깊이있는 책도 읽을 수 있습니다.
문법이 어떻게 프로그램이 되는지 전혀 모르겠더라고요.
요새 취미로 하는건 챗지피티가 뭘 어떤식으로 써야 니가 하고 싶은 결과가 나올거야. 하는걸 알려줘서 참 좋습니다