여전히 프로그래밍 방법을 알 수 없습니까?


122

Java, Python, C 등 다양한 프로그래밍 언어에 대한 책을 많이 읽었습니다. 언어의 모든 기본 사항을 이해하고 알고리즘과 데이터 구조를 이해합니다. (2 년간의 컴퓨터 과학 수업에 해당)

그러나 여전히 유용한 프로그램을 작성하는 방법을 알 수는 없습니다.

모든 프로그래밍 책은 언어를 작성하는 방법을 보여 주지만 사용하는 방법은 아닙니다! 프로그래밍 예제는 라이브러리 또는 간단한 게임용 카드 카탈로그 작성 또는 알고리즘 사용 등과 같이 매우 기본적입니다. 실제로 유용한 작업을 수행하는 복잡한 프로그램을 개발하는 방법은 보여주지 않습니다!

SourceForge 에서 오픈 소스 프로그램을 살펴 보았지만 나에게는별로 이해가되지 않습니다. 각 프로그램에는 수백 개의 파일과 수천 줄의 코드가 있습니다. 하지만 어떻게해야합니까? 아마존에서 구입할 수있는 책에는이 프로그램을 작성할 수있는 도구가 없습니다.

Java 소개, 파이썬 프로그래밍 또는 C 프로그래밍 언어 등을 읽는 것부터 실제로 말할 수있게 만드는 방법은 무엇입니까? X 프로그램에 대한 아이디어가 있습니까? 이것이 내가 개발하는 방법입니까?

책이나 수업에서 배울 수있는 것보다 프로그램 작성에 훨씬 더 관여하는 것 같습니다. 뭔가 있다고 생각합니다.

올바른 길로 가려면 어떻게해야합니까?


52
어떤 사람들은 단지 프로그래밍을하지 않습니다. 대체 경로가 당신을 분류 할 것인지 아니면 다른 것을 시도 할 때인 지 대답 할 수 있습니다. 여기서 유용한 답변을 얻을 수 없을 것입니다.
duffymo

3
"유용한"무엇을 고려 하시겠습니까?

7
@Michael-저는 비공식 투표로 P.SE로 옮겼습니다. 나는 직업과 기술로서의 프로그래밍에 대한 토론에 더 적합한 곳이라고 생각했다.

12
@ duffymo : 그리고 어떤 사람들은 질문에 대해 언급하지 않습니다.
davidk01

4
너무 오래 걸렸을 것 같아 책 예제에서 본격적인 Sourceforge 프로젝트로 전환하는 것은 엄청나고 어려운 일입니다. 대신 이미 구축 한 것을 확장 해보십시오. 기능 추가, GUI 추가, 네트워크 기능 추가; 그리고 머지 않아 Sourceforge에 대한 당신 만의 프로젝트가있을 것입니다.
gablin

답변:


93

보다 복잡한 프로그램을 구축하는 데 경험이 있습니다. 처음 프로그래밍 할 때 길이가 25 줄 이상이면 잘 작동한다고 생각했습니다 (스크롤 막대를 사용해야 함). 이제 동일한 프로젝트 응용 프로그램에서 수백 줄을 하루에 몇 년 동안 씁니다.

이 페이지에서 "10 년 만에 자신의 프로그래밍을 가르치십시오" http://norvig.com/21-days.html

BTW : 프로그램을 시작하기가 매우 어렵습니다. 작가는 "작가 블록"이라고 부를 수 있습니다. 대신 코드 작성을 시작하고 개선하는 것이 좋습니다. 필요하지 않은 큰 섹션을 삭제하는 것을 두려워하지 마십시오. 다시 시작하십시오. 이번에는 자신이하는 일에 대한 더 나은 아이디어로 글을 쓸 것입니다. 다시 시작하면 지난 번에 쓴 내용의 절반이 필요하지 않습니다. 작가가 이야기를 쓸 때 오랜 시간이 걸리고, 많은 글을 쓰고 다시 쓰는 등 많은 리뷰와 피드백이 있으며 출판되어야 할 때만 완성됩니다.


13
+1 Bill이 말한 내용과 "작가의 블록"에 대해 토론했습니다.
David Weiser

어렴풋이, 나는 이것을 몇 년 동안 (10 + -2) 해왔으며 여전히 많은 코드를 작성하여 삭제합니다. 나는 며칠 동안 일한 몇 가지 "리 팩터"를 가지고 있었고, 나는 (지체 적으로) 지체했기 때문에 (소스 제어를 통해) undid했습니다.
Ken Henderson

5
이야기를 쓰는 것과 유사하게 +1. 내 프로그램은 여전히 ​​"한 번에 ..."단계에 있습니다.
Andy

4
프로그래밍에서 가장 무서운 것 중 하나는 빈 문서입니다. 당신이 그 장애물을 넘어 서면, 당신은 좋은 진전을 이루었습니다.
gablin

1
작가의 블록. 당신은 거기에 못을 박았다!
abel

70

나는 항상 SourceForge 또는 GitHub에서 발견되는 것과 같은 매우 큰 프로젝트에 압도되었습니다. 수천 명의 코드로 10 대 또는 100 대 파일에서 발생한 일을 누군가 또는 팀이 어떻게 이해할 수 있을지 궁금했습니다.

아무도 없습니다. 적어도 처음에는.

프로젝트는 유기적 인 것입니다. 정말 간단한 아이디어로 시작하는 것은 빠르게 대규모 작업으로 확장 될 수 있습니다. 이것이 고전적인 폭포 접근법 대신 반복 개발의 주된 이유라고 생각합니다.

차를 세우는 것을 생각하십시오. 외부에서는 상당히 단순 해 보이지만 작은 방법으로도 처리해야 할 고려 사항, 트레이드 오프 및 무고한 사례가 많이 있습니다.

예:

반 대형 프로젝트의 경우 종종 소규모로 시작됩니다. "캐시 서버를 만들고 싶습니다". 따라서 며칠 동안 해킹을 시도하고 작동하는 무언가에 도달하지만 크게 향상 될 수 있습니다. 따라서 스레딩 개념을 추가하십시오.

그런 다음 해당 스레딩으로 인해 동시성 문제가 발생합니다. 따라서 동시 데이터 구조로 변경하여 수정하십시오.

이제 프로세스 속도가 느려졌습니다. 따라서 동시 데이터 구조를 일반 구조로 변경하지만 동기화를위한 잠금 메커니즘을 제공합니다.

사용자가 작업이 원자 적이 지 않고 데이터가 손상되었다고 불평하기 시작한 것을 제외하고는 모든 것이 잘 작동하는 것 같습니다.

따라서 증가 및 저장과 같은 고전적인 원자 연산을 추가합니다. 이것은 작동하고 사용자는 행복합니다. 그러나 누군가 목록 작업을 수행 할 수 있는지 묻는 티켓을 엽니 다.

그래서 당신은 그 특징을 짓는 데 일주일 또는 두 시간을 보냅니다. 함께 작업하고 완료 한 후 릴리스하십시오.

두 장의 티켓이 열려 있습니다. 목록 처리에 버그가 있으며 교착 상태에있는 드문 경우가 있습니다.

교착 상태를 해결하는 동안 친구가 목록 처리 버그를 해결합니다. 원자 연산에 상당히 상당한 재기록이 필요하다는 것을 알고 있습니다.

... 그리고 간다.

이것은 프로젝트가 어떻게 성장하는지 상당히 전형적인 것으로 보입니다. 10 주 정도의 파일이 몇 주 안에 20 개로 늘어났습니다. 원래 계획과 다른 새로운 기능이 추가되었습니다. 코드가 자연스럽게 커지는 복잡한 버그 수정이 추가되었습니다.

내 조언:

압도되지 마십시오. 아이디어가 있다면 기능을 구현하십시오. 그 후에 추구 할 가치가 있다면 조금씩 추가하십시오. 프로젝트를 자연스럽게 성장 시키십시오.


예, 그것은 개인적인 경험에서 비롯된 것과 거의 같습니다 ...
NickAldwin

@Nick, 우리는 "Y"와 "Z"기능을 가진 "X"프로젝트에 대해 비슷한 경험을하지 않았습니까? 작년에 두 개의 유사한 프로젝트가있었습니다. 그 중 어느 것도 레디 스 = P이었다
조쉬 스미

이것은 내가 작성한 거의 모든 프로그램을 설명합니다.
Tim Post

그렇습니다. Kurt Vonnegut, 컴퓨터 프로그래밍을 만나다
Zoot

1
훌륭한 예이지만 조금 더 작게 시작할 수 있다면 더 좋을 것입니다. 예를 들어, 몇 가지 데이터 구조를 구축 한 다음 이러한 데이터 구조를위한 API를 제공하는 코드와이 API를 사용하여 캐시 기능을 구현하는 코드 및 마지막으로 GUI를 구현하는 코드가 있습니다. Voilá, 캐시 서버를 작성했습니다!
gablin

28

가장 큰 프로그램조차도 아이디어로 시작하여 한 번에 한 줄씩 작성됩니다.

실제 프로그램을 작성하는 방법을 배우는 가장 좋은 방법은 아마도 시작하는 것입니다. 문제가 발생하면 웹을 검색하거나 여기에서 해당 문제에 대한 해결책을 요청하십시오. 결국, 당신은 경험을 얻고 덜 자주 물어볼 것입니다.

그러나 처음부터 알아야 할 사항이 있습니다.

  • 요즘 큰 응용 프로그램은 처음부터 완전히 작성되지는 않습니다. 기존의 고품질 라이브러리 및 프레임 워크를 사용하면 훨씬 짧은 시간에 더 많은 작업을 수행 할 수 있습니다. 이것들을 시작하는 것은 종종 자신을하는 것보다 상당히 실망스럽고 더 많은 일을 느끼지만, 실제로는 결코 사실이 아닙니다.
  • 프로그램이 커지면 프로그램 구성 방법 (디자인 방법)에 대해 신중하게 생각하는 것이 매우 중요합니다. 시간을 보내면서 디자인 (특히 "클린 코드"를 권합니다) 및 소프트웨어 엔지니어링 및 기술 기본 사항에 대한 책을 읽어보십시오.

6
"실제 프로그램을 작성하는 방법을 배우는 가장 좋은 방법은 아마도 시작하는 것입니다." 내가 말하려는대로 당신은 "기본을 이해하고"그렇게 많이 읽을 수 있습니다. 고무는 어딘가에서 길을 쳐야합니다.
WernerCD

1
"시작하기"행에 +1 책에서 경험을 배울 수 없습니다.
riwalk

"Clean Code"책을 언급 한 +1 항상 코드를 읽을 수 있도록 만들어야합니다. 읽기 쉬운 == 이해하기 쉬운 == 수정하기 쉬운
Igor Popov

15

당신이 말하는 것은 프로그래밍보다 더 많은 소프트웨어 엔지니어링입니다. 약간의 아키텍처, 약간의 "모범 사례"및 "디자인 패턴"이며 다른 사람들과 약간의 작업을합니다. 도움을 줄 수있는 책이 있지만 대부분은 경험에서 비롯됩니다. 아무도 Microsoft Word를 쓰기 시작 하지 않습니다 .

작성하고 싶은 큰 "실제"프로그램에 대해 생각해보십시오. 이제 원하는 방식으로 작동하도록 제작해야하는 다양한 요소에 대해 생각해보십시오. 예를 들어, 현대 1 인칭 게임에서는 3D 그래픽 엔진, 비 플레이어 캐릭터 AI, 음악 / 사운드 모듈, 물리 엔진 및 게임 규칙을 적용하는 최상위 모듈이 필요합니다 (알고 있음) "지도", 다양한 캐릭터의 상호 작용 방법 등). 그리고 작품과 캐릭터 디자인, 음악이 있는데, 그 중 어느 것도 코드는 아니지만 게임을 완성하는 데 필요합니다.

지금 :이 중 어떤 것을 스스로 만들고 다른 곳으로 갈 것입니까? 대부분의 대규모 소프트웨어 프로젝트는 처음부터 프로그래밍되지 않습니다. 아마도 상용 3D 엔진과 음악 / 사운드 모듈을 사용하고 게임을 독특하게 만드는 것들만 프로그래밍 할 것입니다. 자, 어떤 써드 파티 모듈을 사용할 것인지, 비용, 작동하는 언어, 가지고있는 기능, API 설계 방법 (즉, 완성도 등)을 고려해야합니다. 개인 프로그래밍 스타일에 얼마나 잘 맞는지 등). 다양한 타사 모듈에 대해 하나 또는 두 개의 후보를 사용하여 "개념 증명"을 작성하거나 테스트 프로그램을 사용하여 필요한 모든 작업을 수행하고 사용하기 쉽게 할 수 있습니다.

또한 자신이 작성하려는 코드조차도 생각한 시간 내에 혼자 완료하기에는 너무 큰 작업 일 수 있습니다. 프로젝트를 진행하는 다른 프로그래머는 몇 명입니까? 직업을 어떻게 나눌 것인가? 다양한 사람들이 다른 사람들이 작성한 경우에도 다양한 모듈이 어떻게 서로 맞도록 설계됩니까? 서로의 변경 사항을 지우지 않고 모두 동일한 소스 코드로 작업하는 방법 (답변 : 버전 제어는 혼자 작업 할 때 매우 유용하지만 다른 사람과 작업 할 때 반드시 필요합니다).

사내에서 작성할 모듈을 파악한 후에도 동일한 프로세스를 수행합니다. 각 모듈의 조각들, 그것들이 어떻게 맞아야하는지, 그리고 당신이 직접 쓸 수있는 것과 다른 곳에서 얻을 수있는 것을 알아 내십시오. "네, 나는 그것을 쓸 수 있습니다!" 그리고 그렇게하십시오. 그렇게하면서, 프로그램의 다양한 부분들이 어떻게 조화를 이루는가에 예상치 못한 장애가 발생합니다. 이것들은 실망 스러울 것이지만, 당신이 당신의 기술에 대해 더 많이 배울 수있는 기회이며, 그런 식으로보아야합니다.

처음에는 개별 기능과 같은 아주 작은 부분의 프로그램 만 생각할 수 있으므로 코딩을 시작하기 전에 많은 부분을 분해해야합니다. 경험을 쌓으 면서 기능 에 대해 생각 하고 객체 에 대한 생각을 시작 하기보다는 기능 에 대해 생각하게 됩니다. 그리고 당신은 생각하고있을거야 에서 객체와 생각 에 대해 더 큰 모듈. 마지막으로, 당신은 생각됩니다 모듈과 생각 에 대해 전체, 큰, 실제 프로그램.

그리고 아직도 배울 것이 많다는 것을 알게 될 것입니다. 프로그래머로서 학습을 중단하면 쓸모없고 새로운 모델로 대체 될 것입니다.

어쨌든, 두려워하지 말고, 이것이 끔찍하거나 불가능하다고 들리더라도 걱정하지 마십시오. 결국 프로그래머가되고 싶지 않습니다. 모두를위한 것은 아닙니다. 나는 음악과 디저트를 좋아하고, 키를 약간 연주하고 요리를 요리 할 수 ​​있지만, 훌륭한 음악 가나 마스터 셰프가되기 위해 시간을 투자하지는 않습니다.

대형 실제 데스크톱 응용 프로그램을 작성하는 프로그래머가되고 싶지 않다면 다른 유형의 프로그래밍 작업이 있습니다. 예를 들어 임베디드 프로그래머가 될 수 있습니다. 임베디드 프로그램 작성과 관련하여 분명하고 흥미로운 과제가 있으며 유용한 작업을 수행하고 있지만 일반적으로 프로그램은 데스크탑 응용 프로그램보다 다소 작습니다. 또는 웹 응용 프로그램을 작성할 수 있습니다. 웹에서는 약간의 기능을 쉽게 붙일 수 있으므로 웹 주석 시스템 (예 : 웹 주석 시스템)을 작성할 수 있으며 전체 웹 응용 프로그램이 아닌 경우에도 유용합니다. 웹에서 자료를 점진적으로 향상시키는 것도 쉬우므로 기본 웹 메일 클라이언트로 시작하여 시간이 지남에 따라 Gmail과 같은 것으로 진화시킬 수 있습니다. (하지만 Gmail과 경쟁하게되므로 그렇게하지 마십시오.)

프로그래머가되고 싶지 않지만 여전히 컴퓨터로 작업하고 싶다면 IT 또는 다른 기술 분야로 갈 수 있습니다. 이 경우 이미 많은 프로그래밍을 아는 것이 동료에게 그다지 많지 않기 때문에 매우 유용합니다. 또는 오늘날 대부분의 분야와 마찬가지로 오늘날 컴퓨터와 관련이 있기 때문에 음악가가되는 경우도 있습니다. 다양한 영리한 방식으로 오디오 또는 MIDI 파일을 조작하는 작은 프로그램을 작성하여 더 나은 음악가를 만드십시오. 당신은 당신의 직업에 더 나은 만들기 위해 당신이 가진 프로그래밍 기술을 많은 분야에 적용 할 수 있습니다 찾을 수 있습니다.


임베디드 프로그램이 일반적으로 데스크톱 앱보다 작다는 데 동의하지 않습니다. 과거에는 그렇게되었을 지 모르지만 100 년 이상 개발에 성공한 몇 가지 임베디드 제품에 대해 연구 한 결과 특히 큰 것으로 여겨지지 않았습니다.
Bart van Ingen Schenau

1
"임베디드 (embedded)"의 의미에 따라 달라집니다. 스마트 폰이나 통합 자동차 시스템과 같은 것을 의미한다면 100 년이라는 사람을 믿을 수 있습니다. 그래도 그 공간에는 여전히 작은 시스템이 많이 있습니다.
kindall

생각과 함께 시작하는 일 에 대한 작은 것들, 다음 생각에 이동 동일한 사물 에 대해 더 큰 것들.
gablin

1
Gmail과 경쟁 할 때 어떤 피해가 있습니까? 직접 작성한 내용이 실제로 Google이 출시 한 내용과 경쟁 할 수있는 경우 자신이 꽤 훌륭한 프로그래머라고 생각할 수 있습니다.
gablin

주된 이유는 GMail이 웹 메일을 해결했다고 생각하기 때문입니다. 대부분의 프로그래머는 다른 사람들이 이미 해결하고 잘 해결 한 문제에 대해 그다지 흥미롭지 않다고 생각합니다. 아직 해결되지 않은 문제를 발견하고 더 재미있게 즐길 수 있으며 800 파운드 고릴라와 경쟁하지 않고도 시장에 출시 할 수 있습니다.
kindall

9

실제 작업에 직면하지 않으면 프로그래밍 방법을 알 수 없습니다. 이론은 단순한 실제 작업을 대체하지 않습니다. rw 시나리오 작업을 시작하기 전에 모든 예제와 함께 많은 책을 순진하게 읽었지만 실제 문제에 직면했을 때 작업을 완료하기 위해 모든 이론적 지식을 모을 수 없었습니다. 초보자라면 가능한 한 어디에서나 작업을 수행하는 것이 좋습니다. 당신이 그들을 해결하지 않으면 그들이 쓸모 없다고 생각하지 마십시오. 첫 번째 단계는 링크 된 목록 정렬, DFS, 트리, BFS에서 그래프, 그래프 등의 데이터 구조 문제를 해결하는 것입니다. 코딩 기술을 향상시킬뿐만 아니라 더 중요한 것은 분석 및 알고리즘 기술을 향상시킵니다. 나를 신뢰하는 것은 귀중한 지식입니다. 그런 다음 포인터, 재귀로 흔들 수 있음을 알면

결론. 연습에 관한 것입니다. 계속 파고 코드, 코드, 코드를 유지하십시오.


7

다른 사람들처럼 컴퓨터 게임부터 시작하십시오. 좋은 게임은 프로그래밍과 디자인 문제이며 내부 구조에 대한 신중한 생각이 필요하며 많은 것을 가르치는 방식으로 시스템 라이브러리를 사용하지만 물건을 깰 경향이 없으며 "좋은 결과를 가진 좋은 이유"를 요구하지 않습니다 실제 "유용한"소프트웨어처럼.

일반적으로 충분한 물건을 쓴 후에는 불가피하게 어떤 깨달음이 일어날 것입니다.

시작하기에 좋은 점은 (C와 같다면) http://gamedev.net/ , 특히 http://nehe.gamedev.net/ 입니다. 시작해야 할 다른 좋은 점들도 많이 있습니다. : D


4
(. 아, 그리고 난 그냥 모든 사람들이 게임을 시작하는 이유를 실현 빛나는 예쁜 물건 동기입니다.)

10
여러분 ? 대담한 주장.

4
나는 게임으로 시작하지 않았다. 나는 찾을 것 그 복잡한 넘어 = P
조쉬 스미

4
요즘 대부분의 사람들은 웹앱으로 시작하는데, 진입 장벽이 훨씬 낮습니다 (단지 텍스트 일뿐입니다).
slebetman

4
- 첫 번째 주석 당신의 대답보다는 아마 더 나은했다 반짝 예쁜 물건 동기를 부여한다 . 그게 중요합니다.
Scorchio

6

당신은 거대한 프로그램 전체를보고 있는데 불가능 해 보입니다. 그러나 모든 것은 당신이 말하는 "유용한 일을하지 말라"는 말과 같은 멍청한 프로그램들로 구성되어 있습니다.

필요한 것은 복잡한 복잡한 작업을 작은 간단한 작업으로 나누는 경험입니다. 이것이 모든 프로그래밍의 근원입니다. 나머지는 의미 론적입니다.


6

운전이나 요리와 마찬가지로 프로그래밍은 수행함으로써 배우는 것입니다. 연습은 대체 할 수 없습니다.

교과서 예제가 이미 너무 기본적이라면 훌륭합니다! 좀 더 복잡한 일을 할 시간입니다. 이미 도전적인 운동을 알아낼 수 있습니다.

또는 특정 아이디어를 염두에두면 조금씩 나누십시오. 먼저 문제의 작은 부분을 해결하십시오. 그런 다음 확장하십시오. 새 코드를 기존 코드에 통합하기가 어려워지면 모든 것을 다시 디자인하십시오.


5

200 줄 스크립트를 작성하십시오. 그런 다음 개선을 시작하십시오.

Featuritis는 100 개의 소스 파일과 수백 개의 KLOC를 즉시 제공합니다. :)


5

"실제로 유용한 것을 수행하는 복잡한 프로그램을 개발하는 방법을 보여주지 않습니다!"

"유용한"에 대한 정의가 없으면 "올바른"트랙에 도달하기 위해 실제로 할 수있는 일은 많지 않습니다.

우리는 당신이 어떻게 실패하고 있는지, 그리고 무엇이 잘못되고 있는지 모릅니다. 현재 진행중인 트랙을 알 수 없습니다.

어쨌든, 당신은 당신의 머리에 당신이 의사 소통하지 않는다는 개념을 가지고 있습니다.

소프트웨어-프로그래밍-은 모두 어떤 언어 (Python, Java, 영어 등)로 머리에서 벗어나는 개념입니다.

프로그래밍 (및 질문)에서 중요한 단계 중 하나는 용어를 정의하는 것입니다. "유용한 것"이란 무엇을 의미합니까? 매우 명확하고 완전하며 정확해야합니다.


투표로, 나는이 주제에 대한 OP의 답변에 정말로 관심이 있습니다.
Scorchio

5

예를 들어 시작하는 방법과 같이 항상이 질문을받습니다. 정말 간단합니다. 단계별로 여기 있습니다.

  1. 아이디어를 생각해 내십시오. 이미 가지고있는 것 같습니다.
  2. 아이디어를 기본 핵심으로 단순화하십시오-당신이 해결할 수 있다고 생각하는 것
  3. 종이나 냅킨에 UI를 배치하십시오.
  4. 개발 환경에서 UI를 배치하고 배치하십시오.
  5. google, google, google과 같은 문제가 발생하면 stackoverflow에 대한 질문을하고, 인터넷 리소스를 이용하여 도움을 받으십시오. 특정 상황에 도움이되도록 프로그래머 인 친구 및 동료에게 문의하십시오. 4 단계로 돌아가십시오.
  6. 응용 프로그램의 논리를 작성하십시오. 문제가 발생하면 이전 단계로 이동하여 다시 시도하십시오.
  7. 곧, 당신은 곧 뭔가를 할 것입니다.

워크 플로 +1-어떻게 든 작동해야합니다. 두 번째 단계가 얼마나 중요한지 말할 수 없습니다. 어쩌면 그것이 작업을 처리 할 수 ​​있는지 여부를 결정하는 단계 일 수 있습니다.
Scorchio

"당신은 이미 그런 소리가 있습니다." 나는 이의를 제기 할 것이다. 아이디어가 있다면 질문의 일부일 것입니다.
S.Lott

실제로 imho, 앱의 논리를 작성하여 시작한 다음 UI를 추가해야합니다. 더 간단합니다.
CaffGeek

도구 / 응용 프로그램을 생각할 수 있다면 사용하는 것이 훨씬 좋습니다. 프로젝트를 버리면 동기가 떨어질 수 있습니다. 그것이 무엇이든간에 작게 시작하여 거기에서 빌드하십시오. 커맨드 라인 도구를 제안합니다.
Carlosfocker

1
@ 나는 당신과 동의하지 않았다. 멍청한 놈에게는 논리가 추상적이지만 UI를 이해하기 쉽습니다. 그 반대의 경험이 있습니다.
AngryHacker

4

작은 물건을 만드십시오. 걱정하지 마십시오. 프로그램이 1000 번째로 진행될 것입니다.

몇 가지 아이디어 :

  • 시계 (디지털 우선, 아날로그 모양)
  • 자동 미로 창조자,
  • 디렉토리 구조 표시기
  • mp3 앨범 리스터,
  • 기타

플랫폼을 선택하면 도구가 작업의 일부입니다.


나는 원칙적으로 당신에게 동의합니다. OP는 유용한 소프트웨어에 대해 묻고 있습니다. mp3 앨범 목록은 좋은 선택입니다. 기본 mp3 플레이어는 프로젝트가 직면 한 어려움을 경험할 때 더 좋습니다. LOC를 포함합니다.
Josh Smeaton

@Josh, mp3 디코딩은 초보 프로그래머에게 적합하지 않습니다.

@Thor, 그것은 결코 사소하지 않습니다. 그러나 유용 할 것이며 프로그램이 어떻게 커질 수 있는지 매우 빠르게 가르 칠 것입니다. 모든 뉘앙스, 버그 수정, 엣지 케이스. 이 특정한 경우에는 적절하지 않을 수 있지만 일반적으로는 적절할 수 있습니다. 자신이 작성한 소프트웨어를 스스로 사용할 수 있다는 것은 좋은 일입니다.
Josh Smeaton

@ 조쉬, 나는 여전히 MP3 디코더가 작고이 목적에 적합하다고 생각하지 않습니다.

3

자, 유용한 무언가를하는 프로그램 X에 대한 아이디어부터 시작해 봅시다.

  • 종이, 마인드 맵 또는 다이어그램 작성 소프트웨어를 사용하여 프로그램의 논리적 흐름 / 흐름을 레이아웃하십시오.

  • 시작하기 때문에 해당 항목 중 하나 (바람직하게는 시작 부분 근처)를 선택하고 더 세분화하십시오.

  • 먼저 코드를 작성하고 그것을 사용하여 빌드하십시오.

프로그램 X가 파일을 열고 조작하고 출력 파일을 작성해야합니까? 첫 단계로 파일을 열고 반향 할 수 있는지 확인하십시오. 좋은 사용자 인터페이스를 원하십니까? 파일 에코 프로그램 등을 실행할 수있는 코드를 작성하십시오. 복잡한 프로그램에서 단계별로 사용할 수있는 코드를 작성하는 것뿐만 아니라 정보를 검색하고 조회해야 할 때 언어 지식도 작성하게됩니다.

말 그대로-그놈은 하루에 지어지지 않았습니다 :-)


3

(위의 의견에서 이미 답변했습니다. 질문을 다시 연 후에 답변으로 제출하는 것이 좋습니다.)

아무리 복잡하다고 생각하더라도 해결하고자하는 문제로 시작합니다. 그런 다음이 문제를 해결하고 작은 문제로 나누기 시작합니다. 그런 다음, 해결 방법을 이미 알고 있거나 약간의 노력으로 해결할 수있는 기본이 될 때까지 작은 문제 등을 분류하십시오. 이러한 각 조각을 코딩하기 시작하고 다른 기능이나 다른 클래스 등으로 구성합니다.

그런 다음 다음 하위 문제를 해결하십시오. 각 문제를 해결하면서 작은 테스트 사례를 작성하고 실제로 성과가 실현되는 것을 볼 수 있습니다. 그 길에는 항상 도전이있을 것이지만, 지금은 접근하기에는 너무 거대하다고 볼 수 없습니다 (현재 다루고있는 것). 이것은 프로그래밍과 인생의 많은 도전에 해당됩니다. 그것들의 열쇠는 그것을 깨는 것입니다.

무엇을 해야할지에 대한 아이디어. 새로운 것을 발명하려고 노력할 수도 있지만, 열정을 갖고 이미 존재하는 것을 취할 수도 있지만 더 나아지거나 다르게 만들 수도 있습니다. 현재 여가 시간에 Android 용 기타 튜너 앱을 작성 중입니다. 다른 기타 튜너 앱이 이미 많이 있다는 것을 알고 있지만 이것이 재미 있고 도전적인 프로젝트라고 생각했기 때문에 사용했습니다. 처음에는 거의 불가능 해 보였지만 문제를 더 작은 단계로 나눈 후에 실제로 잘 어울립니다. 나누고 정복하고 목표를 유지하십시오.


3

초보자 일 때해야 할 가장 어려운 일 중 하나는 "어떻게 개선 할 수 있습니까?"

주어진 스펙에 따라 프로그램을 완성하는 능력은 생계를 위해 프로그램하는 모든 사람에게 매우 귀중한 것이기 때문에 작고 주어진 운동을 해결하는 연습을 선택하도록 제안합니다.

http://projecteuler.net/ 을 자세히 살펴보면 많은 연습과 자동화 된 "체크 응답"시스템이있어 자신의 속도에 맞게 작업 할 수 있습니다. 운동은 잘 표현되어 있지만 생각해야 할 수도 있습니다. 어떤 사람들은 당신이 많은 생각을 요구할 수도 있지만, 그것들을 해결하지 못하면 유용한 것을 가르쳐 줄 것입니다.

문제 1의 전체 문구는 다음과 같습니다.

3 또는 5의 배수 인 10 미만의 모든 자연수를 나열하면 3, 5, 6 및 9가됩니다.이 배수의 합은 23입니다.

1000 이하의 3 또는 5의 모든 배수의 합을 찾으십시오.

이 문제를 해결할 수 있다고 생각하십니까? 그럼 해!


3

당신은 실제 경험 이 필요 합니다! . 어떤 책도 당신을 가르 칠 수 없습니다!

당신은 다른 사람의 코드를 읽는 방법을 배울 수있다, 그것을 유지하는 방법, 그들을 증오하는 방법 (코드와 코더 모두)을 개선하는 방법, 어떻게 더 잘 할 수 있다고 생각하고 몇 달 후에 큰 소리로 소리 나는 ' 이 코드를 쓴 사람을 죽일거야 !!! 소스 버전 관리에서만 찾을 수 있습니다!

소프트웨어 개발 방법을 이미 알고있는 사람들에게는 책이 매우 구체적이고 때로는 이해해야합니다.

그래서 나는 당신에게 프로그래밍 직업을 찾도록 제안 할 것입니다. 필요한 경우 가장 기본적인 엔트리 레벨을 신청하십시오. 아마도 당신은 당신이 생각하는만큼 많은 돈을 벌지 못할 것이지만, 몇 달을 사용하여 소프트웨어가 실제 세계에서 어떻게 개발되는지를 배우십시오. , 여러 번 작업하는 위치에 따라 코드 품질이 매우 낮지 만 경험의 일부입니다.)

책을 계속 읽으면 매년 동일한 주제를 조금 더 이해하거나 다르게 이해할 수 있습니다. 경험의 유리를 통해 알 수 있기 때문입니다.

재능있는 개발자와 함께 일할 수 있다면 훨씬 좋습니다. 그들로부터 배우고 실수하는 것을 두려워하지 마십시오.

첫 라이브 프로덕션 긴급 버그를 수정해야 할 때까지 어떤 소프트웨어 버그인지 알 수 없습니다!

:)


2

오픈 소스 프로젝트를 시도하고 참여할 수 있는지 확인하십시오. 소스를 다운로드하여 시작하고 티켓을 수령 할 수 있는지 확인하십시오.


15
초보자 프로그래머는 오픈 소스 프로젝트에 참여해서는 안됩니다. 당신 단순히 방해가 될 것입니다. 초보자를 대상으로하는 오픈 소스 프로젝트는 없습니다.

직접 참여하는 것의 대안은 프로젝트의 소스를 포크하고 자신의 지점에서 티켓을 수정하고 시도하는 것입니다. 여러 사람이 작성하고 검토 한 코드 읽기의 가치, 체계적으로 구성되어 있고 자신이 만든 템플릿으로 사용할 수있는 프로젝트 구조, 협업 프로세스의 작동 방식에 대한 이해. 공개 부분을 관찰하고 코드를 개인적으로 사용하십시오.
jellyfishtree

3
@jellyfishtree, 조금 애매 모호한 프로그래밍을 할 수 없다면.

@Thorbjorn은 확실하지만 처음 시작할 때 더 많은 일을했으면 좋겠다. 무엇보다도 삼투와 다이빙만으로 많은 것을 배울 수 있다고 생각합니다. 최소한 당신은 당신이 모르거나 이해하지 못하는 것들에 대한 더 나은 척도를 얻게 될 것입니다. 처음 시작할 때 목표를 세울 곳과 앞으로 나아가 야 할 것을 알고 싶어 할 때 훨씬 더 가치있는 것입니다.
jellyfishtree

@jellyfish, 물론, 나는 이것이 좋은 단계이지만 아직이 경우는 아니라고 확신합니다.

2

새로운 언어를 배우고 싶을 때는 대개 프랙탈 그래프를 구현하려고합니다. 그렇게하면 효과가 있고 매우 보람이있는 경우 즉시 피드백을받을 수 있습니다. 그리고 프랙탈을 향상시킬 수있는 방법이 많이 있습니다. mandelbrot의 순진한 구현은 지옥만큼 느립니다.

그다지 유용하지는 않지만 많은 것을 배우고 보는 것이 아름답습니다.


나는 이것을 좋아합니다-새로운 언어를 배우는 데 매우 시적인 방법입니다. 그러나 나는 우리가 초보자에게 이것을 추천해야하는지 모르겠다 : D
Scorchio

2

프로그래밍은 많은 코드를 작성하지 않고 문제 해결 및 통신에 관한 것입니다. 코드는 꼭 필요한 것이므로 일반적으로 더 적은 코드를 작성하려고 노력해야합니다.

어디서부터 시작해야할지 모른다면 아무 문제가 없을 것입니다.

리눅스와 다른 유닉스 계열 시스템을 보자. 그것들은 모두 하나의 일을하지만 많은 일을 하는 많은 작은 애플리케이션으로 구성되어있다 .

컴퓨터의 폴더에서 10 개의 가장 큰 파일을 찾기위한 스크립트가 필요할 때 책을 읽지 않았습니다. 방금 Google에서 기존 솔루션 중 하나를 사용했습니다. 코드를 작성 했습니까? -아니요. 문제가 해결 되었습니까? - 예. 이 단선 프로그램이 유용한가요? -그래

수천 줄의 코드가있는 프로그램은 대개 두 명 이상의 프로그래머가 작성합니다. 전체 운영 체제를 단독으로 작성할 수 없으므로 필요하지 않습니다. 또한 종종 버전 관리단위 테스트 와 같은 치트를 사용 합니다.


버전 관리 및 단위 테스트를 "치트"라고 언급하지 마십시오. 작업을 백업하고 그 작업을 수행해야합니다. 버전 관리는 제자리를 유지하는 데 도움이됩니다. 단위 테스트와 동일 : 한 줄의 코드를 작성한 모든 사람은 일부 테스트를 수행해야한다는 것을 알고 있습니다.
Scorchio

@Scorchio 저는 방금 버전 제어 및 단위 테스트를 사용하면이를 사용하지 않는 사람들보다 유리하다는 것을 의미했습니다. 특히 대규모 프로젝트를 다룰 때.
kolobos

2

나누고 정복하십시오.

그것은 간단하거나 어렵습니다.


2

프로그래밍을 시작할 때 컴퓨터 게임을 좋아했습니다. 그래서 도구를 준비하자마자 나만의 게임을 만들기 시작했습니다.

당연히 내 첫 게임은 텍스트 모험이었습니다. 마찬가지로 퀴즈 나 무언가 또는 일종의 추측 게임으로 시작할 수 있습니다.

또한 슬롯 머신과 같은 것으로 시작할 수 있습니다 (실제로는 애니메이션이나 그림이 필요하지 않습니다. A = 사과, L = 레몬, S = 시작, P = 자두 등을 사용하십시오).

이것은 일부 사용자 입력 처리, 게임 상태 유지 및 출력 생성에 대한 기본 사항을 알려줍니다.

나는이 길을 아주 멀리 향했다. 키보드 상태 또는 마우스를 읽는 방법, 그래픽 코드를 사용하는 방법을 점진적으로 배웠습니다. 언어 자체에 대해 더 많이 배웠고 (PASCAL로 시작) 기존 게임을 향상 시키거나 새로운 것을 시작하기 위해 이것을 사용했습니다.

게임은 프로그래밍을 배우기에 정말 좋다고 생각합니다. 약간의 경험이 있어도 작은 일을 만들어 작은 자부심을 줄 수 있습니다. 무언가를 창조하기 때문에 재미 있습니다. 실제 응용 프로그램을 빌드하는 것은 무언가를 만드는 데 많은 작업이 필요하기 때문에 실제로는 유용하지만 놀랍도록 간단하고 작은 게임을 만드는 것은 중독성이 있습니다.

실제로 교육 언어를 사용하고 싶을 수도 있습니다 (제 경우에는 이것이 PASCAL 이었으므로 회고하면 상당히 좋은 선택이라고 생각합니다). 그들 중 다수는 구체적으로 게임 등을 만드는 것을 목표로합니다.

응용 프로그램 작성은 단순한 알고리즘 작성 그 이상입니다. 기능을 디자인해야하며 코드를 다른 레이어와 모듈로 구성하고 구조화해야합니다. 대학에서 제공하는 "원자"문제와 달리 응용 프로그램은 증분 방식으로 개발되는 것이 가장 좋습니다. 당신은 무언가로 시작해서 그 위에 무언가를 추가합니다. 따라서 (wikipedia 기사에 나열된 일부 언어에서와 같이) 이미 시작할 무언가가 있으므로 많은 좌절을 피하고 즉시 무언가를 만들기 시작합니다. (내 동료가 지진 2 모드를 작성하여 프로그래밍을 시작했습니다). 언젠가는 사용하기 쉬운 도구의 한계를 발견하게되지만 그때까지는 훨씬 더 많은 통찰력과 이해를 얻게 될 것입니다. 아마 충분히


2

대학에는 기본적으로이 램프를 가르친 프로그래밍 실습이라는 수업이있었습니다. 초기에 기본 쇼핑 응용 프로그램을위한 UI가 제공되었고 백엔드를 코딩해야했습니다. 지난 달에는 테트리스가 처음부터 시작되었습니다. 소규모에서 대규모로 진학하는 것은 엄청나게 어렵 기 때문에 (수업을 중단하지 않은) 신입생의 약 50 %가 실패했다고 생각합니다.

다음 중 하나 이상을 제안합니다.

  • 오픈 소스 프로젝트를 다운로드하고 무언가를 추가하십시오. 유용하거나 좋을 필요는 없지만 구조를 살펴 봐야합니다.이 구조는 얼마나 큰 프로젝트가 구축되었는지 느낌을 줄 것입니다.

  • 의존성에 대한 화살표와 함께 종이에 최종 프로젝트를 설계하십시오. 뱀을 만드는 경우 뱀 머리, 뱀 꼬리, 음식, 빈 공간, 벽, 보드, 현재 방향 등이있을 수 있습니다. 프로젝트가 생각보다 훨씬 큰지 알면 도움이 될 수 있습니다.

  • 기본 프로젝트를 수행하여 더 크게 만드십시오. 아마도 리팩토링을 많이 할 것이므로 쉽게 추가 할 수있는 작은 프로젝트를 만드는 방법을 배우기를 바랍니다.

  • 누군가 경험이있는 사람을 알고 있다면, 그들에게 프로젝트에 대한 아이디어를 말하고, 수업에 몇 가지 중요한 방법을 쓰도록하십시오. 아마도 한 시간 정도 걸릴 것입니다. 그렇게하면 메소드를 작성하고 다음에 무엇을해야하는지 항상 알 수 있습니다.

마지막으로, 무엇을 하든지 기본 MVC (Model, View, Controller) 디자인 패턴을 사용해야합니다. 자세히 설명하지 않고 뷰 (UI)를 1 + 클래스로, 컨트롤러 (입력, 출력 등)를 1 + 클래스로, 모델 (논리, ​​데이터, 기본적으로 다른 모든 것)을 여러 클래스로 넣습니다. 기본 조직을 얻는 쉬운 방법입니다.

이 단계는 어렵다는 것을 기억하십시오. 일부 사람들은 단순히 프로그래밍을 할 수 없지만이 단계에 갇혀있을 수 있습니다. 행운을 빕니다!


2

먼저, 수업을 수강하고, 참고 자료를 읽고, 오픈 소스 프로젝트를보고, 궁금한 점이 있으면 사전 요구 사항을 이미 수행하고 있습니다. 나는 사람이 자신의 입장에서 다리 작업을하기 전에 개인적으로 비슷한 질문에 직면했기 때문에 이것을 강조한다 (특히, 수업을 우회하고 지름길을 원하는 개인). 이제 튜링 머신에 대한 랩이 있었을 때와 실제 프로그래밍이 아니라고 느꼈던 시점으로 돌아갑니다. 바로 가기를하는 사람은 건너 뛰는 경험입니다.

  • 학생 프로젝트에 가입하십시오. 나는 비슷한 생각을 가진 학생들로 구성된 시니어 연도에 카니발 부스를위한 게임을 만들기 위해 (CSUA)에 참여했습니다. 계속 즐기면서 참여를 늘리고 싶다면 리소스를 활용하십시오. 프로젝트에 대해 알아보고 반 친구들, 교수들과 이야기하고 인턴쉽을하십시오.

  • 숙련 된 프로그래머와 함께 앉으십시오. 역사상 세 번이나 영감을받은 다른 사람 프로그램을 보았습니다. 그들에게 그들은 단지 코드를 작성하고 크게 생각하고있었습니다. 과장하지 않고, 나는 몇 년 동안 혼자서 듣는 것보다 더 많이들을 수 있다고 느꼈습니다. 더 많이 만나면 훨씬 더 부자입니다. 비디오를보고, 전체 소스 리포지토리를 검사하고, 방대한 온라인 지식 저장소를 즉시 검색 할 수있는 시대에 운이 좋았습니다. 실제 경험을 대신 할 수는 없지만 멘토가 없으면 전통적인 자료에 비해 크게 개선됩니다. 그러나 다른 사람이 원시 코드를 보는 것만으로는 아무런 효과가 없습니다. 논리에 들어가기 위해 무언가를 염두에두고 좋은 디버거를 원할 것입니다. 내가 가장 좋아하는 순간 중 하나는 퀘이크 모드를 만드는 것이었고 기억에 남는 것은 그 자체가 아닙니다. Carmack의 게임 내 논리를보고있었습니다. 모드는 내가 다이빙 한 이유 일뿐입니다.

  • 랩 파트너가 제기 한 질문에 대한 설명 및 답변 연습. 가르치는 데 도움이되는 자원 봉사자. 스터디 그룹을 구성하고 각 구성원이 수업 주제에 대한 전문가가되도록 요구할 수 있습니다. 그런 다음 그 사람을 구워서 그릴 수있게하십시오. 질문에 답해야 할 때 답을 스스로 배워야 할 의무가 있습니다. 다른 사람들에게 개념을 명확하게 설명 할 수있을 때, 당신은 책과 생각 밖에서 그것을 전달할 수있을 정도로 자신의 이해를 풍부하게했습니다.

  • 마지막으로 어려운 방법 을 배우는 것을 두려워하지 마십시오손을 더럽 히고 실수를 저 지르십시오. 이것을 경험이라고도합니다. 다루기 어려운 코드 기반 및 많은 파일 수를 가진 프로젝트에 대한 질문과 관련하여보다 실제적인 예로,이 연습을 수행하십시오. 작업에 단일 파일을 사용하십시오. 정말 농담이 아니에요 이 질문은 실제로 현재 회사와 이전 회사에서 나타났습니다. 여기서 다른 개발자는 각 클래스마다 하나의 파일을 유지하는 것을 선호한다는 것을 알았습니다. 이것은 그에게 이질적인 것처럼 보였고 관련 문제에서 그는 부분 수업을 좋아하지 않았습니다. 따라서 논리를 별도의 파일로 분할하는 것이 적절한시기 또는 위치를 파악할 수있는 한 가지 방법은 단일 파일로 시작하는 것입니다. 복잡성을 높이기 위해 여러 프로젝트에서 하나의 파일 규칙을 연습 한 후, 하나의 파일에 너무 많은 클래스가있어 읽기가 어렵거나 버전 제어로 인해 공동 작업이 어려워지는 프로젝트가 발생할 수 있습니다. 이제 다른 클래스를 그룹화하기 위해 별도의 파일을 작성하려고합니다. 선호도를 감안할 때 하나의 파일에있는 모든 데이터 클래스를 좋아한다고 미리 결정할 수 있습니다. 그런 다음 나중에 다시 데이터 클래스간에 그룹으로 분리 된 파일을 좋아한다고 결정할 수도 있습니다.


+1 좋은 답변. 경험이 풍부한 프로그래머와 함께 앉아 있으면 새로운 사람들을 시작할 때 협박 할 수 있다고합니다. 상당한 시간이 걸리는 물건을 통해 과속. 그러나 사람의 종류에 따라 동기 부여 요소가 될 수 있으며 배에서 불을 피울 수 있습니다. 엉덩이를 걷어차 고 싶어요.
Terrance

1

프로그래밍을 시작하기 위해 좋은 아이디어가 필요하지 않습니다. 쉬운 부분부터 시작하겠습니다. 이미 사용하고있는 프로그램처럼. 작동 방식을 이미 알고있는 것을 만들어보십시오. 문제에 직면하여 더 빨리 배울 수 있습니다. 더 많은 경험이 있으면 프로그래밍하는 동안 인생을 더 편하게 해주는 프로그램에 대한 좋은 아이디어를 얻거나 전에는 전혀 생각하지 않은 것을 할 수있는 좋은 프로그램을 갖게됩니다. 나는 거의 1 년 동안 Java를 프로그래밍하고 몇 년 동안 다른 언어를 프로그래밍했습니다. 내가 정말로하고 싶은 일을 시작하는 데 시간이 걸렸습니다. 방금 내 일을 시작했습니다. StackOverflow 덕분입니다. 전에는 몰랐습니다.


1

그래서 많은 답변이 있으므로 이미 말한 것을 많이 반복한다면 용서하십시오. 그러나 여기에는 2 센트가 있습니다.

먼저 아이디어를 선택하십시오. 어떤 아이디어라도 좋을 것입니다. 단순한 것이 더 클 것입니다. 프로젝트는 범위 내에서 매우 빠르게 성장하는 경향이 있습니다 (일부는 크리프 기능이라고 함).

다음으로 프로젝트의 골격을 만듭니다. 여기에는 약간의 아키텍처 및 디자인 지식이 필요하며 처음 10 번 시도했을 때 틀릴 수 있습니다. 적절한 파일 구조와 시스템의 중요한 부분을 보여주는 작은 코드 스켈레톤 만 배치하면됩니다.

VCS에 해골을 저장하십시오 (독으로 독을 골라 거룩한 전쟁으로 이어질 때 붙잡 으십시오). VCS 사용을 시작한 후에는 작은 변경에 지속적으로 VCS를 사용하는 것이 제 2의 성격이되지만 시작하십시오.

이제 시스템에 작지만 중요한 기능을 선택하여 만드십시오. 모든 것을 완벽하게 캡슐화하고 "최고의"디자인 (시스템과 함께 발전 할 것)을 갖도록하는 것에 대해 걱정하지 마십시오. 작동하는 것을 얻으십시오. 또한 일부 단위 테스트를 받으면 정기적으로 테스트를 실행하는 경우 문제가 발생했을 때 발생한 상황을 파악하는 데 도움이됩니다.

시스템을 구축하십시오. 또한 자동화 된 빌드 시스템과 지속적인 통합을 얻기에 좋은시기입니다. 그들이 무엇인지 모른다면 배우고 시도하거나 자신의 위험을 계속 감수하십시오. 어느 쪽이든 계속 작동합니다.

이제 다른 기능을 선택하고 반복하고 반복하고 반복하십시오.

잘 작동한다고 생각되면 친구에게 보여주십시오. 친구는 프로그래밍 방법이나 프로그램의 기능을 알 필요가 없습니다. 하나는 누군가에게 보여줄 때 기분이 좋을 것이고, 두 개는 시스템이하는 일을 정확히 아는 데 도움이됩니다.

자신이 만든 것에 대해 확신이있는 시점에 도달하면 온라인으로 릴리스하고 피드백을 얻으십시오. 리포지토리 허브 또는 프로그래머 하위 레딧은 건설적인 비판을 제공 할 수 있습니다. CS / SE 교수를 찾아서 살펴 보도록하십시오. 전문 프로그래머에게 문의하십시오. 다른 프로그래머 의견을 얻으십시오.

일단 (또는 아마도 이전에) 완료하면 처음에 작성한 코드가 최근에 작성한 코드보다 훨씬 나쁘다는 것을 알 수 있습니다. 그것은 자연스럽고 우리 모두에게 발생합니다. 이제 새로운 프로젝트를 찾고 새로운 무언가를 배워야합니다. 새로운 테스트 전략이나 서비스 지향 아키텍처를 사용하는 방법 일 것입니다.


1

도움이 될 수있는 것은 연필과 종이로 할 수있는 일이 프로그램으로 대체 될 수있는 일상적인 간단한 문제를 생각하는 것입니다.

이를 통해 자동화 수준이 필요한 상당히 알려진 솔루션으로 비교적 간단한 문제를 해결할 수 있습니다. 다음 MS Word / WordPad / NotePad 일 필요는 없습니다. (간단한) 문제를 해결하는 것입니다.

예를 들어, 새로운 언어로 작업 할 때 계속해서 다시 구현하는 문제는 간단한 시계 앱입니다. 이 앱은 하루 동안 다른 프로젝트의 청구 가능 시간을 추적하는 데 사용됩니다. 하루 중 재부팅을 처리하는 방법이나 목록에서 항목을 추가 / 제거하는 방법과 같이 많은 문제가있는 상당히 간단한 프로그램입니다.


1

문제의 일부는 프로그래밍 서적을 읽을 때 언어를 가르치는 것입니다. 그들은 거의 모든 것을 프로그래밍하려면 프로그래밍 라이브러리 및 SDK 등에 액세스해야한다고 언급하지 않습니다. 불행히도 언어를 아는 것만으로는 충분하지 않습니다.


1

나는 당신의 문제가 다음과 같다고 생각한다 : 1. 이론과 실습 사이에 존재하는 확신, 그리고 또한 ... 3. 무엇을 만들 수 있는지 전혀 모른다면 코드를 작성할 수 없습니다. 4. 당신은 어려움의 절반을 알고

  1. 이론에 따라 언어를 아는 것이 "말하다"는 것은 아닙니다. 영어를 읽고 말하는 것의 차이점입니다. 또한 소스 코드를 컴파일, 링크, 편집하는 데 사용할 수있는 다양한 도구가 있습니다.

  2. 프로그래밍 방법을 학습 할 때, 프로그래밍을 다루는 가장 간단한 방법이기 때문에 터미널이 텍스트를 입력 / 출력하는 데 사용되는 시간이 대부분입니다. 실제로 프로그래머는 Qt와 같은 라이브러리, 프레임 워크 (장고 추측) 및 기타 단축 코드를 사용하여 생산적입니다. 물론 자신의 휠을 작성할 수 있다고 생각한다면, 다시 설계하지 말고 컴파일러 디자인 및 커널 디자인에 관한 책을 읽으십시오. 이들에 대해 배울 점이 많을 것입니다. 기술의.

  3. 무언가를 발명하십시오! 물론 당신은 텍스트 편집기, 게임 등을 할 수 있습니다. 문제는, 당신이 어떤 이유를 보지 않으면 그것을하지 않을 것입니다 : 당신이 생각하는 모든 것이 이미 만들어 졌다면이 프로그램은 당신에게 쓸모가 없습니다. . 개인적으로 나는 여전히 채팅, 오프라인 메시지 등으로 페이스 북과 같은 분산 형 p2p 프로토콜을 코딩하여 무선 임베디드 장치와 함께 사용할 수 있기를 꿈꿉니다. 인터넷은 많은 가능성을 제공하며, 그것에 대해 생각하는 것을 잊지 마십시오.

  4. 실제로 이론은 실습에 필요하지만 그게 전부는 아닙니다. 알고리즘과 기술은 프로그래밍 이론의 일부가 아니며 코드를 수행하는 패러다임과 기타 "표준"방법이 많이 있습니다. 디자인 패턴, 링크 된 목록, 등


1

시작하는 스크립트 언어를 선택할 수 있습니다. C 언어로 프로그래밍을 시작했습니다. 제 생각에 C 언어는 시작하기 쉽지만 알고리즘과 운영 체제에 대해 알아야 할 시간이 훨씬 더 필요합니다. 그리고 내가 운동 할 때마다 단순히 DOS GUI를 사용하기 때문에 우울해집니다.

나중에 ActionScript라는 스크립트 언어를 선택하여 시작했습니다. 스크립팅 언어는 객체 지향 언어이며 Flash 무비의 동작을 제어 할 수 있습니다. 스크립팅 언어는trace("HelloWorld") ActionScript에서 와 같이 문자열을 출력하는 것처럼 문제 영역에 가까운 일부 작업을 수행하기가 쉽습니다 . 또한 프로그램이 잘 진행되고 있는지 확인할 수있는 강력한 IDE가 있습니다.

한마디로, 빠른 방법으로 프로그래밍을 시작하려면 스크립팅 언어를 선택하는 것이 좋습니다 :-)


1

사양을 작성하십시오. 프로그램이 무엇을하기를 원하십니까? 화면 (UI 기반 프로그램 인 경우) 논리, 입력 / 출력 등 범위를 합리적인 시간 (1 주일 ~ 1 개월)으로 수행 할 수있는 범위로 제한하십시오.

그런 다음 빌드하십시오. 사양을 고수하고 사양에 필요한대로 작동 시키십시오. 당신은 혼란스러워 할 것입니다. 이전에는 특정한 문제에 직면 한 적이 없기 때문에 약간의 연구를해야하지만, 당신이 만들고 싶은 것을 만들 것입니다. 이것은 단지 '만들기'가능한 것을 만드는 것과는 다릅니다.

완료되면 코드를 리팩토링하고 더 효율적으로 만드십시오. 그런 다음 프로그램이 아직 완료되지 않았다고 생각되면 다시 시작하여 사양을 개선하고 코드를 개선하여 계속 수행하십시오.

대부분의 상용 소프트웨어는 요구 사항을 해결한다는 점을 기억하십시오. 실제로 문제점을 해결하기 전에 요구 사항과 그 요구 사항을 충족시키는 솔루션을 정의하는 것이 매우 중요합니다. 그리고 요구가 점점 커짐에 따라 시간이 지남에 따라 소프트웨어도 커질 것입니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.