실제로 어떻게 작동하는지 모를 때 어떻게 코드를 작성합니까? [닫은]


14

나는 최근에 C를 배웠고 나의 지식을 굳히기 위해 프로젝트를 시작하고 싶습니다. vim과 같은 매우 간단한 텍스트 편집기를 만드는 데 정착했습니다. 내가 직면하는 문제는 텍스트 편집기가 어떻게 작동하는지 전혀 알지 못한다는 것입니다. 구글에 대해 배울 내용이 무엇인지 모르겠습니다.

그것에 대한 인터넷 검색은 vim의 GitHub 저장소로 이어졌습니다. 코드베이스가 크고 코드가 혼란 스럽기 때문에 나에게는 쓸모가 없습니다. 또한 vi에서 vim과 같은 기능을하는 C로 텍스트 편집기를 만드는 자습서를 찾았습니다.

튜토리얼을 따르는 것에 대해 생각했지만 속임수처럼 느껴집니다. Vim 개발자는 특정 튜토리얼없이 vim을 코딩하는 방법을 어떻게 알았습니까? 아니면 더 간단한 텍스트 편집기에서 시작 했습니까? 그들은 언어와 문서에 대한 지식에서 어떻게 그것을 알아 냈습니까?

튜토리얼을 직접 따르지 않고이 텍스트 편집기를 작성하려면 정확히 무엇이 필요합니까? 내가 생각하고 싶은 또 다른 예는 Dennis Ritchie와 Ken Thompson이 어떻게 Unix를 코딩 했습니까? OS의 기능에 대한 아이디어가 있지만 코드에 넣는 방법을 모르겠습니다. 내가 놓친 것은 무엇입니까? 이 언어 지식을 실제적이고 실제적인 용도로 어떻게 이전합니까?


14
당신은 오랜 역사와 뛰어난 사람들을 가진 프로젝트와 자신을 비교하고 있습니다. 유닉스는 시스템 레벨 프로그래밍 분야에서 수년간의 경험을 가진 연구 그룹에서 시작되었으며보다 복잡한 Multics OS에서의 경험으로부터 이익을 얻었습니다. Vim은 ed를 기반으로하는 vi를 기반으로했습니다. 이 프로그램은 갑자기 나타나지 않았으며 수백 명의 사람들이 만든 진화였습니다. 따라서 모든 역사를 건너 뛰기가 어려울 때 좌절하지 마십시오. 아무도 할 수 없습니다. 대신 이해의 가장자리에있는 프로젝트를 이해하십시오.
amon

8
실로폰에서 곡을 연주하는 법을 배웠는데 이제는 큰 국제 오케스트라에서 연주하고 싶습니까? 자, 당신은 너무 많이 기대하고 있습니다. 프로그래밍은 악기 연주와 비슷합니다. 작고 간단한 멜로디로 시작하여 몇 년 동안 연습 한 후 교향곡 연주를 배웁니다.
Doc Brown

3
동의했다. 많은 초보자가 어려운 방식으로 배우는 것을 배울 수있는 기회로 생각하십시오. 작은 시작하십시오 . 그리고 vim의 코드도 읽으십시오. 기존 코드를 많이 읽는 법을 배울 수 있습니다.
Laiv

17
당신의 근본적인 문제는 당신의 생각이 명확하지 않다는 것입니다. "vim과 같은 간단한 작은 텍스트 편집기"라고 말한 다음 즉시 코드베이스가 거대하고 혼란 스럽다는 점을 알아 차려야합니다. 이것은 vim과 닮은 것은 단순하지 않다는 강력한 신호가되어야합니다 . 숙련 된 프로그래머조차도 당신이 빠진 정신적 함정에 빠지게됩니다. 아직 이해하지 못하는 것은 간단하지 않습니다 . 그들은 복잡하다 . 컴퓨터 프로그래밍은 정신 논리를 현실로 바꾸고 있습니다. 프로그래밍에 대해 더 명확하게 생각하는 것으로 시작하십시오.
Eric Lippert

4
또한 "속임수"에 대해 걱정하지 마십시오. 이것은 게임이 아닙니다. 목표가 있으며 좋은 목표입니다. 그러한 목표를 달성하기 위해해야 ​​할 일을하십시오 . 전문적인 컴퓨터 프로그래머는 어떻게 작동하는지 배우고 싶을 때 소스를 보지 않는다고 생각합니까? 작성하지 않은 소스에서 배우는 방법을 배우는 것은 가장 중요한 프로그래밍 기술 중 하나이므로 연습을 시작하십시오.
Eric Lippert

답변:


17

이것이 첫 번째 프로그래밍 프로젝트 인 경우 간단한 텍스트 편집기라도 너무 복잡 할 수 있습니다. vim이나 OS와 같은 것은 완전히 문제가 아닙니다.

문제에 접근

일반적으로 시작하는 방법은 대부분의 프로젝트에서 대략 비슷합니다.

  • 당신은 당신의 요구 사항을 수집합니다. 소프트웨어는 정확히 무엇을 합니까?
  • 당신은 시작 매우 몇 가지 요구 사항과 다음 비트에 의해 기능 비트를 추가 할 수 있습니다.
  • 현재 요구 사항으로 인해 발생한 문제를 하위 문제로 분해합니다.
  • 구현 방법을 알고있을 때까지 하위 문제를 계속 분해합니다.

텍스트 편집기 예제를 보자.

  • 텍스트 파일의 일부를 화면에 표시하고 문자를 삽입 및 제거하고 현재 버전을 저장하려고합니다.

  • 파일을 읽고 내용을 표시하는 것으로 시작하십시오.

  • 다음과 같은 하위 문제를 식별 할 수 있습니다.

    • 표시 할 파일 이름을 어떻게 알 수 있습니까?
    • 파일 이름이 주어지면 파일 내용을 어떻게 얻습니까?
    • 파일의 내용이 주어지면 어떻게 표시합니까?

요구 사항 (파일로드 및 표시)이 완료된 시점에 도달하면 화면에 맞는 부분 만 표시하고 파일을 탐색하는 방법 등을 고려할 수 있습니다.

다음 단계

시간이 지남에 따라 점점 더 복잡한 문제를 겪으면서 문제를 분해하는 적절한 방법을 찾는 것이 점점 어려워지고 있음을 알게 될 것입니다. 또한 코드를 변경하면 시간이 지남에 따라 지루해질 수 있습니다.

이제 몇 가지 기본 아키텍처 및 디자인 개념을 배울 차례입니다.


충고 해줘서 고마워! 나는이 접근법을 취할 것이라고 생각합니다. 마음이 바뀌면 완고한 느낌이 들지만 제안한 바에 따르면 파일 뷰어를 만드는 방법을 보려고 노력할 것입니다. 어쩌면 파일 메타 데이터를 표시하는 방법을 추가 할 수도 있습니까? 아마 그 자신을 알아낼 수 있습니다. 고마워요!
Faithlesss

2
이것에 덧붙여서 "어떻게 표시합니까?"는 화면의 특정 위치에 특정 문자를 쓰는 것으로 더 세분화 될 수 있습니다 (명령 행 편집기에 대해 이야기하는 경우). 온라인에 대한 답변을 쉽게 찾을 수 있습니다.
Dukeling 2019

2
"단순한 텍스트 편집기라도 너무 복잡 할 수 있습니다"텍스트 편집기는 놀랍도록 복잡합니다. 20MB 파일을 편집한다고 상상해보십시오. 버퍼링이 필요할만큼 크지 만 최신 컴퓨터에 과세 할만큼 크지는 않습니다. 스크롤, 텍스트 삽입 및 제거, 텍스트 자체를 실시간으로 재 배열해야하며 스크롤 막대 마커는 모델이 변경됨에 따라 실시간으로 업데이트되어야합니다. 어떤 형식의 서식이 있으면 훨씬 복잡해집니다.

15

당신은하지 않습니다.

무언가를하는 방법에 대해 모호한 아이디어가 없다면, 그것은 현재의 기술을 넘어서는 신호입니다. 시작하는 방법을 모르는 경우 앱의 가장 어려운 부분에 대해서는 전혀 알지 못합니다.


그때 시작하기에 좋은 프로젝트는 무엇입니까? 나는 이미 자신의 행맨 게임 (터미널)과 박하 사탕 발가락 게임을 만들었습니다. 나는 단지 계속할 방법을 보지 못해서 텍스트 편집기가 좋은 생각이라고 생각했다.
Faithlesss

3
@faithlesss-파일을 읽고 쓰는 것은 기본적인 중간 단계처럼 보입니다.
Telastyn

9
파일 뷰어는 다음 좋은 프로젝트 등 예 호출기 수 있습니다 less, more또는 view프로그램. 변경 가능한 편집 버퍼의 복잡성없이 편집기의 일부 측면을 공유합니다.
amon

@Telastyn 내가 당신을 얻었다. 그런 다음 파일 뷰어를 만들어 기본 텍스트 형식을 읽을 수있는 간단한 뷰어를 찾은 다음 json 또는 csv 파일과 같은 것을 읽는 방법을 알아 보겠습니다. 그것을 파싱하기가 어렵지 않아야합니다. 실제로 string.h 문서를 봐야합니다. 충고 감사합니다!
Faithlesss

2
@Faithlesss 또한 텍스트 편집기 프로그램의 전신 인 라인 편집기 의 기능을 살펴보십시오
Bergi

2

당신은 어떻게 결정해야 당신이 원하는 당신의 작업에 텍스트 편집기를.

이것은 처음부터 끝까지 자신의 프로젝트를 개발할 때 가장 악화되고 보람있는 경험 중 하나입니다. 아무도 당신에게 빌드 요구 사항을 보내지 않습니다. 자신의 요구 사항을 개발해야합니다.

즉, 첫 번째 코드 줄을 작성하기 전에 수많은 디자인 작업을 수행해야합니다. 인터페이스의 모양을 결정해야합니다. 포함 할 기능을 결정해야합니다. 위의 두 질문은 당신이 할 수 있다고 느끼는 것에 따라 안내 될 것입니다. "이상적인"상황 (인터페이스의 작동 방식)에 대해 생각하지만 코딩 할 수 없다고 생각되면 다른 방법을 찾아야합니다. 어떻게 작동합니까? 이를 통해 더 배우고 싶은 코딩 방식에 집중할 수 있습니다.

다른 사람들이 말했듯이, vim을 복사하는 것은 크고 복잡한 코드 기반이므로 최선의 방법이 아닐 수도 있습니다. 당신은 또한 내 자신의 겸손한 견해로는 개발자로서 당신을 완성시키는 데 도움이되는 디자인 작업을 스스로 거부하고 있습니다.

그렇다고해서 첫 번째 코드 줄을 작성하기 전에 처음부터 끝까지 전체 응용 프로그램을 설계해야한다는 의미는 아닙니다. 자세한 내용은 시간이 지남에 따라 요구 사항이 변경 될 수 있습니다. 자신의 응용 프로그램을 테스트 / 사용할 때까지 생각하지 않는 새로운 기능을 추가해도 괜찮습니다. "만약 좋지 않다면 ..."간단하게 시작해도됩니다.


1

프로그래밍 경험없이 모든 기능을 갖춘 텍스트 편집기를 처음부터 새로 작성하는 것은 어리석은 일입니다. 많은 것을 배우기 전에 낙담하고 버릴 것입니다.

몇 가지 대안이 떠 오릅니다.

  • 익숙한 일부 제품의 코드를 연구하십시오. 에 능숙하다면 vim데이터를 나타내는 방법이나 단일 문자 ( f명령)를 검색하는 것과 같이 작고 고립 된 것을 이해하려고 노력하십시오 .
  • 매우 간단한 프로그램의 코드를 연구하고 거기에서 시작하십시오 : cat명령을 입력 wcgrep다음 sed예를 들어.
  • 편집기의 단일 기능 만 수행하는 프로그램을 작성하십시오. 파일의 모든 줄에서 두 번째 문자를 삭제하거나 (기록하지 않고) 파일의 50 ~ 70 행만 표시 할 수 있습니다.

1
일반적인 패턴에 대해 조금도 알지 못하면 vim과 같은 큰 프로젝트의 작은 부분조차 이해하는 것이 무의미하다고 생각합니다. 그러나 매우 작은 오픈 소스 프로젝트를 보는 것이 좋습니다. 그러한 프로그램을 목표로 변경 하려고 시도 하면 배우는 것이 좋습니다. 장점 : 실제 프로그램에서 사용되는 몇 가지 패턴을 배웁니다. 단점 : 안티 패턴도 배울 수 있습니다.
doubleYou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.