JavaRush /Java Blog /Random-KO /처음부터 시작하거나 'Hello, Java World!'
articles
레벨 15

처음부터 시작하거나 'Hello, Java World!'

Random-KO 그룹에 게시되었습니다
나는 언뜻보기에는 특이한 여담으로이 기사를 시작하고 싶습니다. 나중에 그 이유가 정확히 무엇인지 분명해질 것입니다.
처음부터 시작하거나 Hello, Java World!  - 1
그럼 누군가를 상상해 봅시다. 이 누군가는 알파인 스키를 마스터하고 싶어합니다. 그리고 이를 위해 그는 다음과 같은 조치를 취합니다.
  • 강사, 교과서, 매뉴얼 등 -이게 다 악한 자에게서 나온 것입니다. 스키를 직접 배울 수 있습니다. 게다가 학교에서 그는 크로스컨트리 스키를 꽤 잘 배웠습니다. 따라서 지식이 풍부한 사람들의 모든 조언은 무시됩니다.

  • 가장 멋진 장비가 선택됩니다. 전문가 수준 이하가 아닙니다. 발을 아프게하는 딱딱한 부츠. 누군가의 체력 수준을 훨씬 뛰어넘어 구부리기 위해 엄청난 노력이 필요한 하드 스키입니다. 글쎄요.

  • 테스트 트랙은... 음, 예를 들어 월드컵 대회전 무대가 열리는 트랙이라고 가정해 보겠습니다. 공부하기엔 이게 딱이네요.
  • 같은 정신으로 계속하십시오.
그래서 여기에 질문이 있습니다. 이 사람을 뭐라고 부를 건가요? 개인적으로 알파인 스키에 대해 약 20 년 동안 친숙한 사람으로서 나는 그를 부를 것입니다 (아직도 매우 온화합니다!) – 절망적입니다. 이 접근 방식으로는 아무것도 배우는 것이 완전히 불가능합니다. 하지만 상처받는 확실한 방법. 그리고 가장 확실한 것은 스키를 타는 생각을 영원히 버리는 것입니다. 나는 당신이 이 평가에 동의할 것이라고 생각합니다. 어쨌든 나는 이 누군가가 그에게 불쾌한 일이 일어날 것이라고 기대하지 않을 것이라고 거의 확신합니다. 이제 또 다른 누군가를 상상해 봅시다. 예를 들어, 그 사람을 컴퓨터 과학 학생으로 놔두세요. 그는 C++, C#, Pascal에 대한 지식이 있습니다. 그는 자바를 배우고 싶어합니다. 그의 행동:
  • 그의 지식수준(솔직히 말하면 0수준)에 해당하는 문헌은 일소된다. 언급된 C++, C# 및 OOP 이론에 대한 약간의 친숙성을 기반으로 합니다.
  • 가장 강력한 프로그래밍 환경이 사용됩니다. Eclipse 또는 NetBeans를 가정해 보겠습니다. 모든 것을 자체적으로 수행하는 사람은 버튼 하나만 누르십시오.
  • 평가판 응용 프로그램으로 선택합니다... 음, 채팅을 해보자. 클라이언트-서버 애플리케이션, 애플릿 형태의 클라이언트 부분, 서버 부분 - 웹 서비스 또는 최악의 경우 서블릿. 공부하기에 딱 맞습니다.
질문. 이 사람을 뭐라고 부를 건가요? 역설이 무엇인지 아시나요? 사실 이 경우 공정한 평가가 훨씬 적습니다. 상황이 모든 측면에서 동일하다는 사실에도 불구하고. 두 번째 경우의 건강과 생명에 대한 결과가 덜 치명적이지 않는 한. 어쩌면 이것이 문제일까요? 상황이 정말 너무 비슷해요. 나는 그것들을 같은 스타일로 구체적으로 설명했습니다. 그리고 이상한 점은 첫 번째 시나리오의 터무니없음이 명백하다면 두 번째 시나리오 뒤에는 놀랄 만큼 많은 수의 초보 개발자가 뒤따른다는 것입니다. Java 마스터는 MIDlet 작성, 데이터베이스용 클라이언트, 채팅, 서블릿 기반 웹사이트 생성 등으로 시작됩니다. 오랫동안 계속할 수 있습니다. 그러나 그럼에도 불구하고 요점은 분명합니다. 동시에, 초급 수준의 문학은 경멸과 함께 무시됩니다. 이것을 읽어보시겠어요? 나에게? 네, 저는 지금까지 3년 동안 C++로 글을 쓰고 있습니다! (옵션은 Pascal에 있고 Visual Basic에도 있습니다.) 그리고 저는 OOP를 알고 있습니다! 글쎄, 일반적으로. 그럼 다음은 무엇입니까? 그리고 다음은 다음과 같습니다.
  • 8바이트 배열을 긴 배열로 변환하는 방법은 무엇입니까?
  • 왜 이런 일이 발생합니까 NoClassDefFoundError?
  • Eclipse( )에서 애플리케이션을 시작하면 NetBeans/IDEA/JBuilder모든 것이 괜찮은데, Eclipse( )가 없으면 을 입력하면 java HelloWorld.class오류가 발생하는 이유는 무엇입니까?
  • 왜 충돌이 발생합니까 ClassNotFoundException?
  • 도서관은 왜 없나요? 이미classes.zip에 넣어두었는데 다 소용없어요!
  • 왜 객체 배열을 생성해야 하는데, 배열의 요소를 사용하려고 하면 NullPointerException?
  • 그리고 왜 ...?
  • 그리고 왜 ...?
  • 그리고 왜 ...?
왜 왜 왜? 하지만 Java는 C++이나 Pascal이 아니기 때문입니다. 그리고 펄은 아닙니다. 이러한 언어에 대한 지식은 도움이 되지 않을 뿐만 아니라 방해가 되는 경우가 많습니다. 이 언어들은 완전히 다른 이데올로기를 가지고 있기 때문입니다. 그러나 외부 유사성은 오해의 소지가 있습니다. 물론 이 모든 "이유"와 "방법"에 대한 답은 책에 나와 있습니다. 가장 기본적인 수준의 문헌에서. 그러나 그것을 읽는 것은 게으르다(옵션: 수치심, 시간 없음 등). 나는 훌륭한 C++ 전문가에 의해 Java로 전달된 고정관념을 꽤 많이 알고 있습니다. 최근의 한 가지 예: 생성자에서 예외를 발생시켜서는 안 됩니다. 왜? 예, C++에서는 그러한 객체의 상태가 정의되지 않기 때문입니다. 따라서 메모리 누수가 발생합니다. Java에서는 가비지 컬렉터가 있기 때문에 원칙적으로 이러한 문제가 없습니다. 그러나 그러한 상황을 피하려고 노력하는 사람들이 있습니다. 뿌리 깊은 고정 관념에 따르면. 그리고 최악의 점은 이러한 노력의 결과로 코드가 훨씬 더 복잡해진다는 것입니다. 구문은 배우기 쉽습니다. 그리고 완전히 충분하지 않습니다. 언어의 이데올로기는 훨씬 더 중요합니다. 그리고 그것을 가장 효과적으로 익히려면 처음부터 시작해야 합니다. 정확히 왜 그리고 어떻게? 그리고 이것은 또 다른 질문입니다. 그래서. 어디서, 어떻게 시작해야 할까요? 그것은 당신이 달성하려는 것에 달려 있습니다. 숙련된 코딩 원숭이가 되고 싶다면 거의 모든 것부터 시작할 수 있습니다. 전문가가 되고 싶다면 상황이 좀 더 복잡해집니다. 내 경험으로 인해 다음과 같이 말할 이유가 생겼습니다. 전문 개발자와 "코더"의 차이점은 그가 무슨 일이 일어나고 있는지 이해한다는 것입니다. 그는 버튼을 누르는 것 이상의 일을 합니다. 강력한 환경은 매우 좋은 도움이 됩니다. 그것 없이도 할 수 있는 사람들을 위해. 그러나 그것은 종종 그것으로 시작한 사람들의 유일한 도구입니다. 그리고 그것이 없으면 코딩 원숭이의 가치는 0입니다. 누를 버튼이 없기 때문이죠. 일반적으로 버튼 누르기는 정말 괴물 같은 형태를 취할 수 있습니다. 내 동료 중 한 명이 Java로 작성된 제품을 보았습니다. 설치 지침은 "디스크에서 JBuilder 설치..."라는 단어로 시작되었습니다. 이제 이것은 이미 치명적입니다. 개발자가 개발 환경 없이 제품이 작동하도록 만들 수 없다면, 그것이 어떻게 작성되었는지 생각하면 몸서리쳐집니다. 적어도 아마추어가 쓴 것입니다. "무슨 일이 일어나고 있는지 이해한다"는 것은 무엇을 의미합니까? 이는 사람이 다음을 이해해야 함을 의미합니다.
  • 가상 머신이란 무엇이며 왜 필요한가요?
  • 가상 머신의 관점에서 클래스란 무엇입니까?
  • 패키지란 무엇입니까?
  • 도서관이란 무엇입니까?
  • 가상 머신이 클래스를 찾고 로드하는 방법 클래스 로더는 무엇이며 어떻게 작동합니까? 기본적으로 몇 개가 있습니까? 클래스 경로 란 무엇입니까?
등. 등등. 목록은 계속됩니다. 개발자 자체에 특정한 지식은 포함하지 않았음을 참고하시기 바랍니다. 스레드가 무엇인지, OOP 관점에서 클래스가 무엇인지, 객체와 어떻게 다른지, 레이아웃 관리자가 작동하는 방식 등 모든 개발자는 이 모든 것을 알아야 합니다. 내가 나열한 모든 것은 기술적인 측면에 가깝습니다. 그러나 무엇이 잘못되고 있는지 이해하려면 이를 아는 것이 매우 중요하다는 사실이 자주 밝혀졌습니다. 인생의 예. xalan이라는 XML 작업을 위한 라이브러리가 있습니다. 여기에는 여러 javax.xml... 패키지(파서, 변환기 등)가 포함되어 있습니다. 이 도서관은 매우 인기가 있습니다. 문제는 J2SDK 버전 1.4부터 이와 동일한 패키지가 존재한다는 것입니다. 질문. xalan이 클래스 경로(라이브러리 또는 J2SDK)에도 있는 경우 라이브러리에서 javax.xml.transform.stream.StreamSource 클래스에 액세스할 때 어떤 클래스가 로드됩니까? 이 질문에 대답하려면 클래스 로더가 어떻게 작동하는지 알아야 합니다. 나는 한 포럼에서 궁극적으로 이 문제에 대한 4일간의 토론을 본 적이 있습니다. 로더가 예상한 클래스를 사용하지 않았기 때문에 코드가 정확하게 작동하지 않았습니다. 나는 무엇을 얻고 있습니까? 문제는 다음과 같습니다. 개발 환경이 강력할수록 개발자에게 더 많은 이점을 제공하므로 개발자가 생각할 필요가 줄어듭니다. 그리고 이것은 이미 아, 정말 나쁘다. 원숭이에 너무 가깝습니다. 이는 아무리 역설적으로 보일지라도 첫 번째 결론에 도달합니다.

결론 1. 강력한 환경 없이 Java 학습을 시작하는 것이 좋습니다.

나는 메모장 수준의 편집자에서 글쓰기를 옹호하지 않습니다. 그러나 제가 이 작업을 수행하는 유일한 이유는 일반적으로 구문 강조 기능이 없기 때문입니다. 이것은 부정적인 영향을 미치지 않는 매우 편리한 것입니다. Notepad++ 와 같은 것을 사용할 수 있으며 Java 구문을 이해하고 무료입니다. 예를 들어, 시스템에 특별히 등록된 .java 파일 유형이 있습니다. 따라서 구문 강조와 명령줄이 포함된 텍스트 편집기입니다. 2~3일간의 고통 – 그리고 클래스 경로가 무엇인지, 통역사가 어떻게 시작되는지 및 기타 여러 가지 작은 것들에 대한 이해 – 이것을 이해하는 것은 영원히 남을 것입니다. 더 나아가. 내 경험을 통해 미래에 사용할 지식을 얻는 것이 불가능하다고 말할 이유가 생겼습니다. 문학은 대답할 질문이 있을 때만 읽을 가치가 있다는 의미에서요. 질문 없이 책을 읽으면 그 정보는 일주일 안에 사라집니다. 나는 내 경험을 포함하여 이것을 매우 잘 알고 있습니다. 나는 한때 서블릿에 관한 책을 다섯 번 읽기 시작했습니다. 내가 작업에서 그것들을 다루기 시작할 때까지 그 정보는 흡수되지 않았습니다. 그리고 이것은 고립된 사례와는 거리가 멀다. 옛날 옛적, 아주 오래 전, 약 8-10년 전에 저는 다음 글을 읽었습니다. 불행히도 저자는 기억나지 않습니다. 사람에게 새로운 프로그래밍 언어를 가르치는 방법은 무엇입니까? 매우 간단합니다. 언어, 여러 작업 및 최소한의 문서를 제공해야 합니다. 그런 다음 몇 달 후에 그가 적어도 이 언어로 글을 쓰기 시작하면 포괄적인 문서를 제공하십시오. 탐정 소설처럼 2주 안에 읽혀지면 그 사람은 일할 준비가 됩니다. 나는 이 말에 100% 동의한다. 두 달 안에 모든 사소한 문제는 사라질 것입니다. 그들에 대한 답은 독립적으로 얻어질 것이며, 이는 그들의 가치를 크게 증가시킬 것입니다. 반면에 명확한 질문이 이미 형성되어 있으며 이에 대한 답변은 문서에서 제공됩니다. 이는 두 번째 결론으로 ​​이어지며, 이는 첫 번째 결론만큼 역설적입니다.

결론 2. 교과서 없이 Java 학습을 시작하는 것이 좋습니다. Java API 문서 + Java 튜토리얼 - 이것으로 충분합니다.

Java API 문서는 필수입니다. 디스크에 로컬로 보관하는 것이 좋습니다. 그녀에게 한 번 이상, 두 번 또는 열 번 이상 연락해야합니다. 개인적으로 그곳에 가지 않는 날이 단 하루도 없습니다. 또한 Java 튜토리얼을 로컬에 보관하는 것이 좋습니다. 이는 교과서를 완전히 대체하는 초보 수준의 정보입니다. 그러나 거기에는 상당한 양이 있습니다. 직장에서 다루지 않는 영역에서도 여전히 새로운 것을 발견한다고 말하고 싶습니다. 많이 읽는 것은 나쁘다. 요청이 없으면 응답도 없습니다. 조금 읽는 것도 나쁘다. 황금률은 어디에 있습니까? 나는 이 규칙을 고수합니다. 나는 질문에 대한 답을 받은 것처럼 보일 때까지 읽었습니다. 90%의 경우에는 그렇지 않습니다. 하지만 지금은 스스로 멈추고 계속하는 것이 가장 좋습니다. 초기 추진력을 얻었으며 문제를 독립적으로 해결하면 훨씬 더 많은 것을 얻을 수 있습니다. 물론, 얼마 후에는 문학 작품을 읽을 가치가 있습니다. 그러나 다시 한 번 초급 수준의 문학에 대한 것입니다. 이 모든 것이 말도 안되는 것처럼 보이더라도 초기 장을 읽어 볼 가치가 있습니다. 나는 당신이 적어도 새로운 것을 배울 것이라고 거의 보장할 수 있습니다. 그리고 이것은 나중에 매우 중요한 것으로 판명될 수도 있습니다. 좋아요. 우리는 무엇에 대해 써야 할지 알아낸 것 같습니다. 작성 방법 - 너무. 그런데 뭐라고 써야 할까요? 이 글이 어디서 시작되었는지 기억해 보세요. 인스턴트 메시징 시스템을 작성하는 것부터 시작해야 할까요? 선택은 물론 귀하의 것입니다. 제가 보기에는 그럴 가치가 없는 것 같습니다. 작업이 복잡할수록 더 많은 질문이 발생합니다. 경험이 없으면 이러한 많은 질문은 문제를 해결할 수 없다는 느낌을주고 자신의 열등감, 어리 석음 등을 느끼게됩니다. 궁극적으로 이것은 "망할..." 결정과 언어 학습 중단으로 이어질 수 있습니다. 저것들. 필요한 것과 정확히 반대되는 효과가 발생합니다. 이는 Java의 특징이라기보다는 학습 프로세스 자체의 특징입니다. 그러나 어떤 이유에서인지 그들은 프로그래밍을 가르칠 때 이 점을 잊어버립니다. 한편, 끝까지 완수한 작은 작업은 여행 초기에 포기한 거창한 시스템보다 훨씬 더 큰 만족과 훨씬 더 큰 지식을 줄 수 있습니다. 따라서 세 번째 결론은 다음과 같습니다. 결론 3. 현재 Java 지식 수준에 적합한 작업으로 Java 학습을 시작하는 것이 좋습니다. 포뮬러 1 자동차를 타고 운전을 배워서도 안 되고, 월드컵 트랙에서 알파인 스키를 배워서도 안 됩니다. 그리고 마찬가지로, 거대한 것을 작성하여 Java 마스터를 시작해서는 안됩니다. 나는 야망이 요구된다는 것을 이해합니다. 그러나 이 경우에는 근거가 없습니다. 그리고 불합리한 야망을 가질수록 전문가가 될 가능성은 줄어듭니다. 학습 측면에서 주목할만한 현상은 이상하게도 다양한 포럼입니다. 현명하게 사용한다면. 현명하게도 이는 평소와는 달리 그 반대를 수행해야 함을 의미합니다. 즉, 질문하는 것이 아니라 대답하는 것입니다. 도달할 힘이 있는 모든 것. 나 자신이 모든 것을 알고 있다고 생각한다면 당신은 큰 착각입니다. 네, 저는 많이 알고 있어요. 하지만 한 번도 접해보지 못한 분야가 있어요. 아니면 가지고 있지만 거의 없습니다. 내 실습의 전형적인 예는 인증서 작업(코드 서명, 보안 연결 등)입니다. 1998년에 논문을 쓸 때 이렇게 했는데 그 이후로 모든 것이 많이 바뀌었습니다. 수년에 걸쳐 나는 질문이 쌓였습니다. 나는 심지어 몇몇 문헌을 읽기 시작했습니다. 하지만 위에서 말했듯이 나중에 사용할 지식을 얻을 수는 없습니다. 그것은 지렛대와 같습니다. 한쪽 귀로 들어가고 다른 쪽 귀로 나옵니다. 머리에 구멍이 난 것 외에는 결과가 없습니다. 그리고 이것은 최근 포럼에서 Tomcat과의 SSL 연결에 대한 질문이 나올 때까지 계속되었습니다. 몇 가지 문제가 있었습니다. 그리고 이 질문만이 나를 깊이 파고들게 만들었습니다. 그리고 요청이 있으면 응답도 있습니다. 그 사람의 문제가 무엇인지 알아냈을 뿐만 아니라, 다른 유용한 정보도 많이 찾아냈습니다. 마침내 인증서가 어떻게 작동하는지 이해했습니다. 해당 기사는 계획에 있습니다. 그리고 이런 일은 항상 일어납니다. 예를 들어 저는 GUI를 사용하여 꽤 많은 작업을 했습니다. 제가 TextLayout의 일부 기능을 이해하게 된 것은 포럼에서 누군가의 질문을 통해서였습니다. 이 질문 이전에는 나는 그들에 대해 전혀 몰랐습니다. 마찬가지로, 나는 최근에 JButton이 html을 자체 헤더로 해석한다는 사실을 발견했습니다. 이전에는 JLabel만이 이 작업을 수행할 수 있다고 생각했습니다. 그리고 이것은 다시 포럼 덕분입니다. 그래서 우리가 질문에 더 많이 대답할수록 우리 자신을 더 많이 배울 수 있다는 것이 밝혀졌습니다. 그렇기 때문에 나는 사람이 포럼에 앉아 있으면 아무것도하지 않는다는 대중의 의견에 동의하지 않습니다. 이는 명확하지 않으며 주로 그 사람이 포럼에 있는 이유에 따라 달라집니다. 그리고 그는 주로 무엇을 하는지 묻고 대답합니다. 사실 물어볼 수도 있습니다. 그러나 현명하게도. 해결책을 요구하지 마십시오 (특히 제가 지난번에 접했던 "아는 분들은 대답하고 질문하지 마십시오!"라는 포스트 스크립트와 함께!). 그러나 다시 반대로 설정을 요청하십시오. 이동 방향. 초보자가 단순히 경험이 부족하기 때문에 어디를 파야할지 이해하기 어렵다는 것은 완전히 이해할 수 있습니다. 이는 그 사람의 잘못도 아니고 문제도 아닙니다. 이건 괜찮아. 모두가 이런 일을 겪었습니다. 나도 포함됐다. 개인적으로 사람이 무언가를 배우고 싶어하는 것이 훨씬 더 중요합니다. 그리고 단순히 답을 얻는 것이 아니라, 프로그래밍 실습을 마치고 5분 만에 잊어버렸습니다. 항상 이동방향을 알려드리겠습니다. 내가 그를 직접 안다면. 그리고 내가 모른다면 적어도 추측할 수는 있습니다. 그리고 나는 또한 확실히 답을 찾을 것입니다. 그러나 나는 아마도 직접적인 대답을 하지 않을 것입니다. 적어도 기억은 나지 않습니다. 그건 그렇고, 내가 포럼 중 하나를 떠난 것은 바로 이것 때문이었습니다. 내가 유도 질문을 시작했을 때 그들은 단순히 대답하는 것이 관례라고 일제히 설명했습니다. 그리고 내 질문을 통해 더 나아갈 수 있습니다. 포럼의 수준이 많이 부족하다는 점을 고려하면 특히 이 접근 방식 덕분입니다! – 더 이상 시간을 낭비하지 않기로 결정했습니다. 그러니 원하는 대로 포럼을 선택하고 떠나세요. 그건 그렇고, 이 사이트는 포럼 중 하나 덕분에 정확하게 나타났습니다. 그곳에서 한동안 이야기를 나눈 후 가장 자주 제기되는 주제 목록을 축적하고 그러한 사이트에 대한 수요가 있다는 것을 깨달았습니다. 그래서 그런 일이 일어났습니다. 거의 모든 기사는 포럼의 일부 토론을 통해 작성되었습니다. 아니면 내가 정기적으로 수행하는 서신을 따르십시오. 결과는 무엇입니까? 일하고 일하고 또 일하세요. 초기 단계에서 스스로 할 수 있는 일이 많아질수록 얻는 지식은 줄어듭니다. 그리고 전문성을 향한 길이 길어질수록. 하지만 당신만이 원하는 사람을 선택할 수 있습니다. 아무 생각 없이 버튼을 누르는 원숭이나 전문가가 될 수 있습니다. 그리고 오직 당신만이 이것을 달성할 수 있는 길을 선택합니다. 첫 번째 방법은 분명합니다. 두 번째 것을 보여드리려고 했어요. 당신의 움직임, 여러분! 원본 링크: 처음부터 시작하거나 'Hello, Java World!'
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION