JavaRush /Blog Java /Random-VI /Hãy bắt đầu lại từ đầu hoặc 'Xin chào, Thế giới Java!'
articles
Mức độ

Hãy bắt đầu lại từ đầu hoặc 'Xin chào, Thế giới Java!'

Xuất bản trong nhóm
Thoạt nhìn, tôi muốn bắt đầu bài viết này bằng một sự lạc đề khác thường. Sau này sẽ rõ tại sao chính xác.
Hãy bắt đầu lại từ đầu hoặc Xin chào, Java World!  - 1
Vì vậy, hãy tưởng tượng Ai đó. Ai đó muốn thành thạo môn trượt tuyết trên núi cao. Và để làm được điều này, anh ấy thực hiện các bước sau:
  • Giáo viên, sách giáo khoa, sách hướng dẫn, v.v. - tất cả đều là từ kẻ ác. Bạn có thể tự học trượt tuyết. Ngoài ra, ở trường, anh ấy học trượt tuyết băng đồng khá tốt. Theo đó, mọi lời khuyên từ những người hiểu biết hơn đều bị bỏ qua.

  • Các thiết bị tuyệt vời nhất được chọn. Không dưới mức chuyên gia. Giày cứng làm đau chân. Ván trượt cứng đòi hỏi rất nhiều nỗ lực để uốn cong, vượt xa mức độ thể lực của Ai đó. Vâng, v.v.

  • Đường thử là... à, giả sử, đường đua tổ chức chặng đua slalom khổng lồ của World Cup. Điều này chỉ phù hợp cho việc học tập.
  • Tiếp tục với tinh thần tương tự.
Vì vậy, đây là câu hỏi. Bạn sẽ gọi ai đó này là gì? Cá nhân tôi, với tư cách là một người đã quen với môn trượt tuyết trên núi khoảng 20 năm, tôi sẽ gọi anh ấy (và điều này vẫn còn rất nhẹ!) - vô vọng. Hoàn toàn không thể học được bất cứ điều gì với phương pháp này. Nhưng chắc chắn sẽ bị tổn thương. Và điều chắc chắn NHẤT là hãy từ bỏ ý định trượt tuyết mãi mãi. Tôi nghĩ bạn sẽ đồng ý với tôi trong đánh giá này. Trong mọi trường hợp, tôi gần như chắc chắn rằng Người này sẽ không mong đợi bất cứ điều gì khó chịu sẽ được gửi đến anh ta. Bây giờ chúng ta hãy tưởng tượng một Ai đó khác. Hãy để anh ta trở thành một sinh viên khoa học máy tính. Anh ấy có một số kiến ​​thức về C++, C#, Pascal. Anh ấy muốn học Java. Hành động của anh:
  • Văn học tương ứng với trình độ kiến ​​​​thức của anh ta (cấp độ 0, nói thẳng ra) bị gạt sang một bên. Dựa trên sự hiểu biết đôi chút về lý thuyết C++, C# và OOP đã đề cập.
  • Môi trường lập trình mạnh mẽ nhất được thực hiện. Giả sử Eclipse hoặc NetBeans. Cái nào tự làm được mọi thứ, chỉ cần nhấn một nút.
  • Là một ứng dụng dùng thử, chúng tôi chọn... à, giả sử là trò chuyện. Một ứng dụng máy khách-máy chủ, phần máy khách ở dạng một applet, phần máy chủ - một dịch vụ web hoặc tệ nhất là các servlet. Vừa đúng cho việc học tập.
Câu hỏi. Bạn sẽ gọi ai đó này là gì? Bạn có biết nghịch lý đó là gì không? Thực tế là trong trường hợp này sẽ có ít đánh giá khách quan hơn đáng kể. Mặc dù thực tế là các tình huống đều giống nhau về mọi mặt. Trừ khi hậu quả về sức khỏe và tính mạng trong trường hợp thứ hai ít gây tử vong hơn. Có lẽ đây là vấn đề? Các tình huống thực sự rất giống nhau. Tôi đặc biệt mô tả chúng theo cùng một phong cách. Và một điều kỳ lạ: nếu sự vô lý của kịch bản đầu tiên là hiển nhiên, thì kịch bản thứ hai sẽ kéo theo một số lượng đáng báo động các nhà phát triển mới vào nghề. Việc thành thạo Java bắt đầu bằng việc viết MIDlet, ứng dụng khách cho cơ sở dữ liệu, trò chuyện, tạo trang web dựa trên servlet... Bạn có thể tiếp tục trong một thời gian dài. Nhưng vấn đề vẫn rõ ràng. Đồng thời, văn chương sơ cấp bị gạt sang một bên với thái độ khinh thường. Đọc này? Với tôi? Có, tôi đã viết bằng C++ được ba năm rồi! (Các tùy chọn có trong Pascal và thậm chí cả bằng hình ảnh cơ bản.) Và tôi biết OOP! Vâng, nói chung. Vậy tiếp theo là gì? Và sau đó là điều này:
  • Làm cách nào để chuyển đổi một mảng 8 byte thành dài?
  • Lý do tại sao điều này xảy ra NoClassDefFoundError?
  • Tại sao tôi khởi chạy ứng dụng trong Eclipse ( NetBeans/IDEA/JBuilder) và mọi thứ đều ổn nhưng không có nó tôi gõ java HelloWorld.class, và lại xảy ra lỗi?
  • Tại sao nó lại bị hỏng ClassNotFoundException?
  • Tại sao không có thư viện? Tôi đã đặt nó vào class.zip, nhưng tất cả đều vô ích!
  • Tại sao tôi tạo một mảng đối tượng nhưng khi tôi thử sử dụng một phần tử của mảng thì tôi nhận được NullPointerException?
  • Và tại sao ...?
  • Và tại sao ...?
  • Và tại sao ...?
Tại sao tại sao tại sao? Nhưng vì Java không phải là C++ hay Pascal. Và không phải Perl. Kiến thức về những ngôn ngữ này không những không giúp ích gì mà còn gây trở ngại. Nếu chỉ vì những ngôn ngữ này có hệ tư tưởng hoàn toàn khác nhau. Nhưng sự giống nhau bên ngoài là sai lầm. Tất nhiên, tất cả những câu hỏi “tại sao” và “như thế nào” đều có câu trả lời trong sách. Trong văn học ở cấp độ cơ bản nhất. Nhưng đọc thì lười (tùy chọn: xấu hổ, không có thời gian, v.v.). Tôi biết khá nhiều khuôn mẫu đã được các chuyên gia C++ giỏi chuyển sang Java. Một ví dụ gần đây: bạn không bao giờ nên ném ngoại lệ vào hàm tạo. Tại sao? Có, vì trong C++ trạng thái của đối tượng đó không được xác định. Theo đó, rò rỉ bộ nhớ xảy ra. Trong Java, về nguyên tắc không có vấn đề như vậy do có trình thu gom rác. Tuy nhiên, có những người cố gắng tránh những tình huống như vậy. Chỉ theo một khuôn mẫu đã ăn sâu. Và điều tồi tệ nhất là kết quả của những nỗ lực này, mã trở nên phức tạp hơn nhiều. Cú pháp rất dễ học. Và hoàn toàn không đủ. Hệ tư tưởng của ngôn ngữ quan trọng hơn nhiều. Và để thành thạo nó một cách hiệu quả nhất, bạn nên bắt đầu lại từ đầu. Tại sao chính xác và như thế nào? Và đây là một câu hỏi khác. Vì thế. Bắt đầu từ đâu và như thế nào. Nó phụ thuộc vào những gì bạn muốn đạt được. Nếu bạn muốn trở thành một con khỉ viết mã lành nghề, bạn có thể bắt đầu với hầu hết mọi thứ. Nếu bạn muốn trở thành một người chuyên nghiệp, mọi thứ phức tạp hơn một chút. Kinh nghiệm của tôi cho tôi lý do để nói như sau. Sự khác biệt giữa một nhà phát triển chuyên nghiệp và một "lập trình viên" là anh ta hiểu chuyện gì đang xảy ra. Anh ấy làm được nhiều việc hơn là nhấn nút. Một môi trường mạnh mẽ là một trợ giúp rất tốt. Đối với những người có thể làm mà không cần nó. Nhưng nó thường là công cụ duy nhất của những người bắt đầu với nó. Và khi vắng mặt nó, giá trị của con khỉ mã hóa bằng không. Vì không có nút bấm. Nói chung, việc nhấn nút có thể có những hình thức thực sự quái dị. Một trong những đồng nghiệp của tôi đã nhìn thấy một sản phẩm được viết bằng Java. Hướng dẫn cài đặt nó bắt đầu bằng dòng chữ: “Cài đặt JBuilder từ đĩa…” Bây giờ ĐIỀU NÀY đã nguy hiểm rồi. Nếu các nhà phát triển không thể làm cho sản phẩm hoạt động nếu không có môi trường phát triển, thì tôi rùng mình khi nghĩ nó được viết như thế nào. Ít nhất thì nó được viết bởi những người nghiệp dư. Ý tôi là gì khi nói "hiểu chuyện gì đang xảy ra?" Điều này có nghĩa là một người phải hiểu những điều sau:
  • Máy ảo là gì và tại sao cần thiết?
  • Một lớp là gì từ quan điểm của một máy ảo.
  • Một gói là gì?
  • Thư viện là gì?
  • Cách máy ảo tìm kiếm và tải các lớp; trình nạp lớp là gì và nó hoạt động như thế nào; theo mặc định có bao nhiêu; đường dẫn lớp là gì.
Vân vân. và như thế. Danh sách cứ kéo dài. Xin lưu ý rằng tôi không đưa vào kiến ​​thức cụ thể của chính nhà phát triển. Chủ đề là gì, lớp là gì theo quan điểm OOP và nó khác với một đối tượng như thế nào, cách trình quản lý bố cục hoạt động - BẤT KỲ nhà phát triển nào cũng nên biết tất cả những điều này. Mọi thứ tôi liệt kê đều mang tính chất kỹ thuật nhiều hơn. Nhưng rất thường xuyên, việc biết chúng là rất quan trọng để hiểu được điều gì đang xảy ra sai sót. Một ví dụ từ cuộc sống. Có một thư viện để làm việc với XML tên là xalan. Nó chứa một số gói javax.xml... - trình phân tích cú pháp, trình chuyển đổi, v.v. Thư viện này rất phổ biến. Vấn đề là các gói tương tự này đã có trong J2SDK kể từ phiên bản 1.4. Câu hỏi. Lớp nào sẽ được tải khi truy cập lớp javax.xml.transform.stream.StreamSource từ thư viện, nếu xalan cũng có trong đường dẫn lớp - thư viện hoặc từ J2SDK? Để trả lời câu hỏi này, bạn cần biết trình nạp lớp hoạt động như thế nào. Có lần tôi thấy một cuộc thảo luận kéo dài bốn ngày trên một trong những diễn đàn cuối cùng đã đi đến vấn đề này. Mã không hoạt động chính xác một cách chính xác vì trình tải không nhận được lớp được mong đợi từ nó. Tôi đang đạt được điều gì? Vấn đề là: môi trường phát triển càng mạnh thì nhà phát triển càng làm được nhiều việc - anh ta càng ít phải suy nghĩ. Và điều này đã ồ, tệ quá. Thật gần gũi với con khỉ. Điều này dẫn đến kết luận đầu tiên, cho dù nó có vẻ nghịch lý đến mức nào:

Kết luận 1. Nên bắt đầu học Java mà KHÔNG CÓ môi trường mạnh mẽ.

Tôi không ủng hộ việc viết bằng trình soạn thảo cấp độ notepad. Nhưng tôi không làm điều này vì lý do duy nhất - theo quy luật, chúng không có tính năng đánh dấu cú pháp. Đây là một điều cực kỳ tiện lợi mà không có tác động tiêu cực. Bạn có thể sử dụng một cái gì đó như Notepad++ , nó hiểu cú pháp Java và nhân tiện, nó hoàn toàn miễn phí. Ví dụ: tôi có loại tệp .java được đăng ký trong hệ thống dành riêng cho nó. Vì vậy, một trình soạn thảo văn bản có tô sáng cú pháp và một dòng lệnh. Hai hoặc ba ngày dằn vặt - và hiểu đường dẫn lớp là gì, cách khởi chạy trình thông dịch và một loạt những điều nhỏ nhặt khác - việc hiểu được điều này sẽ tồn tại mãi mãi. Hơn nữa. Kinh nghiệm của tôi cho tôi lý do để nói rằng không thể thu thập kiến ​​thức để sử dụng trong tương lai. Theo nghĩa là chỉ đáng đọc văn học khi có những câu hỏi mà nó sẽ trả lời. Nếu bạn đọc một cuốn sách mà không thắc mắc về nó, thông tin sẽ biến mất trong vòng một tuần. Tôi biết rất rõ điều này, kể cả từ kinh nghiệm của chính tôi. Tôi đã từng bắt đầu đọc một cuốn sách về servlet năm lần. Cho đến khi tôi bắt đầu giải quyết chúng trong công việc của mình, thông tin vẫn chưa được tiếp thu. Và đây không phải là một trường hợp cá biệt. Ngày xửa ngày xưa, cách đây rất lâu, khoảng 8-10 năm trước, tôi đọc được đoạn sau, rất tiếc là tôi không nhớ tác giả: Làm thế nào để dạy một người một ngôn ngữ lập trình mới? Rất đơn giản. Bạn cần cung cấp cho nó một ngôn ngữ, một số nhiệm vụ và tài liệu tối thiểu. Sau đó, sau một vài tháng, khi anh ấy bắt đầu viết ít nhất bằng ngôn ngữ này, hãy cung cấp tài liệu đầy đủ. Nó sẽ được đọc trong hai tuần như một cuốn tiểu thuyết trinh thám, sau đó người đó sẽ sẵn sàng làm việc. Tôi đồng ý với tuyên bố này 100%. Một mặt, trong hai tháng, mọi vấn đề nhỏ sẽ biến mất. Câu trả lời cho chúng sẽ được thu thập một cách độc lập, điều này sẽ làm tăng đáng kể giá trị của chúng. Mặt khác, các câu hỏi rõ ràng sẽ được hình thành và câu trả lời sẽ được cung cấp trong tài liệu. Điều này dẫn đến kết luận thứ hai, có vẻ nghịch lý không kém kết luận đầu tiên:

Kết luận 2. Nên bắt đầu học Java KHÔNG CÓ sách giáo khoa. Tài liệu Java API + Hướng dẫn Java - thế là quá đủ.

Tài liệu API Java là bắt buộc. Tôi thực sự khuyên bạn nên giữ nó cục bộ, trên đĩa. Bạn sẽ phải liên lạc với cô ấy nhiều hơn một lần, không phải hai lần, thậm chí là mười. Cá nhân tôi, không ngày nào mà tôi không tới đó. Tôi cũng khuyên bạn nên giữ hướng dẫn Java cục bộ. Đây là thông tin cấp đầu vào thay thế hoàn toàn sách giáo khoa. Tuy nhiên, có một số lượng khá lớn ở đó. Tôi phải nói rằng ở những lĩnh vực mà tôi không giải quyết ở nơi làm việc, tôi vẫn tìm thấy điều gì đó mới mẻ cho bản thân. Đọc nhiều không tốt. Chừng nào không có yêu cầu, không có phản hồi. Đọc một chút cũng không tốt. Ý nghĩa vàng ở đâu? Tôi tuân thủ quy tắc này: Tôi đọc cho đến khi tôi bắt đầu cảm thấy rằng mình đã nhận được câu trả lời cho câu hỏi. Trong 90% trường hợp thì không phải như vậy. Nhưng chính lúc này, tốt nhất bạn nên dừng lại và tự mình tiếp tục. Động lực ban đầu đã được nhận và việc giải quyết vấn đề một cách độc lập sẽ mang lại nhiều lợi ích hơn nữa. Tất nhiên, sau một thời gian, việc học văn là điều đáng giá. Nhưng một lần nữa, đối với văn học cấp đầu vào. Ngay cả khi có vẻ như tất cả những điều này là vô nghĩa thì vẫn đáng để đọc những chương đầu tiên. Tôi gần như có thể đảm bảo rằng bạn sẽ học được ít nhất điều gì đó mới mẻ. Và điều này sau này có thể trở nên cực kỳ quan trọng. ĐƯỢC RỒI. Chúng tôi dường như đã tìm ra những gì để viết về. Cách viết - quá. Nhưng tôi nên viết gì đây? Hãy nhớ nơi bài viết này bắt đầu. Tôi có nên bắt đầu bằng việc viết một hệ thống nhắn tin tức thời không? Tất nhiên, sự lựa chọn là của bạn. Đối với tôi, có vẻ như nó không đáng. Nhiệm vụ càng phức tạp thì càng có nhiều câu hỏi được đặt ra. Khi chưa có kinh nghiệm, số lượng câu hỏi như vậy sẽ tạo cảm giác không thể giải được, kéo theo đó là cảm giác tự ti, ngu ngốc của bản thân, v.v. Cuối cùng, điều này có thể dẫn đến quyết định “chết tiệt…” và ngừng học ngôn ngữ. Những thứ kia. để đạt được hiệu quả hoàn toàn ngược lại so với tác dụng cần thiết. Đây không phải là đặc điểm của Java mà là đặc điểm của chính quá trình học tập. Nhưng vì lý do nào đó họ lại quên mất điều này khi dạy lập trình. Trong khi đó, một nhiệm vụ nhỏ được hoàn thành đến cùng có thể mang lại sự hài lòng và kiến ​​thức lớn hơn nhiều so với một hệ thống vĩ đại bị bỏ rơi ngay từ đầu cuộc hành trình. Do đó, kết luận thứ ba: Kết luận 3. Bạn nên bắt đầu học Java với các nhiệm vụ phù hợp với trình độ kiến ​​thức Java hiện tại của bạn. Bạn không nên bắt đầu học lái ô tô trên xe Công thức 1. Bạn không nên bắt đầu học trượt tuyết trên núi trên đường đua World Cup. Và theo cách tương tự, bạn không nên bắt đầu thành thạo Java bằng cách viết một cái gì đó lớn lao. Tôi hiểu rằng tham vọng là đòi hỏi khắt khe. Nhưng trong trường hợp này họ là vô căn cứ. Và bạn càng có nhiều tham vọng vô lý thì bạn càng có ít cơ hội trở thành một người chuyên nghiệp. Một hiện tượng đáng chú ý về mặt học tập, kỳ lạ thay, lại có nhiều diễn đàn khác nhau. Nếu bạn sử dụng chúng một cách khôn ngoan. Một cách khôn ngoan - điều này có nghĩa là bạn cần phải làm ngược lại, không phải như thường lệ. Cụ thể là không phải để đặt câu hỏi mà là để trả lời chúng. Bất cứ điều gì bạn có sức mạnh để đạt được. Nếu bạn nghĩ rằng bản thân tôi biết tất cả mọi thứ thì bạn đã nhầm to rồi. Vâng, tôi biết rất nhiều. Nhưng có những lĩnh vực mà tôi chưa bao giờ gặp phải. Hoặc tôi có, nhưng rất ít. Một ví dụ kinh điển từ thực tiễn của tôi là làm việc với các chứng chỉ: ký mã, kết nối an toàn, v.v. Năm 1998, khi viết luận văn, tôi đã làm điều này nhưng kể từ đó mọi thứ đã thay đổi rất nhiều. Qua nhiều năm, tôi đã tích lũy được nhiều câu hỏi. Tôi thậm chí còn bắt đầu đọc một số tài liệu. Tuy nhiên, như tôi đã nói ở trên, bạn không thể có được kiến ​​thức để sử dụng trong tương lai. Nó giống như một cái xà beng - nó đi vào tai này và chui ra tai kia. Không có kết quả nào ngoại trừ một cái lỗ trên đầu. Và điều này tiếp tục cho đến gần đây, khi một câu hỏi được đặt ra trên diễn đàn về kết nối SSL với Tomcat. Có một số vấn đề. Và chỉ có câu hỏi này thôi thúc tôi đào sâu. Và nếu có yêu cầu thì cũng có phản hồi. Tôi không chỉ tìm ra vấn đề của người đó mà còn tìm được nhiều thông tin hữu ích khác. Cuối cùng tôi đã hiểu chứng chỉ hoạt động như thế nào. Bài viết tương ứng có trong kế hoạch. Và điều này xảy ra mọi lúc. Ví dụ, tôi đã làm việc khá nhiều với GUI. Chỉ nhờ câu hỏi của ai đó trong diễn đàn mà tôi mới hiểu được một số khả năng của TextLayout. Trước câu hỏi này tôi không biết gì về họ. Theo cách tương tự, gần đây tôi phát hiện ra rằng hóa ra JButton cũng hiểu html là tiêu đề của chính nó. Trước đây tôi tưởng chỉ có JLabel mới làm được việc này. Và điều này một lần nữa là nhờ diễn đàn. Vì vậy, hóa ra: chúng ta càng trả lời nhiều câu hỏi, chúng ta càng học được nhiều điều về bản thân. Đó là lý do tại sao tôi không đồng ý với quan điểm phổ biến rằng nếu một người ngồi trên diễn đàn thì anh ta không làm gì cả. Điều này còn chưa rõ ràng và chủ yếu phụ thuộc vào lý do chính xác người đó tham gia diễn đàn. Và việc anh ấy làm chủ yếu là hỏi hoặc trả lời. Trong thực tế, bạn thậm chí có thể hỏi. Nhưng cũng khôn ngoan. Đừng yêu cầu giải pháp (và đặc biệt là với phần tái bút “Xin những người biết hãy trả lời và đừng đặt câu hỏi!”, mà tôi mới gặp hôm nọ!), mà ngược lại, hãy yêu cầu đặt ra Hướng di chuyển. Hoàn toàn dễ hiểu khi người mới bắt đầu khó hiểu được đào ở đâu, vì đơn giản là anh ta thiếu kinh nghiệm. Đây không phải là lỗi của người đó và nó thậm chí không phải là vấn đề. Điều này ổn. Mọi người đều đã trải qua điều này. Bao gồm cả tôi. Đối với cá nhân tôi, điều quan trọng hơn nhiều là một người muốn học điều gì đó. Và không chỉ nhận được câu trả lời, chỉ để quên nó năm phút sau khi tham gia phòng thí nghiệm lập trình. Tôi sẽ luôn cho bạn biết hướng chuyển động. Nếu tôi biết anh ấy. Và nếu tôi không biết thì ít nhất tôi cũng có thể đoán được. Và chắc chắn tôi cũng sẽ đi tìm câu trả lời. Nhưng có lẽ tôi không bao giờ đưa ra câu trả lời trực tiếp—ít nhất là tôi không nhớ. Nhân tiện, chính vì điều này mà tôi đã rời khỏi một trong các diễn đàn. Khi tôi bắt đầu đặt những câu hỏi dẫn dắt, họ đồng thanh giải thích với tôi rằng theo thông lệ, họ chỉ trả lời đơn giản. Và với những câu hỏi của mình, tôi có thể tiến xa hơn. Xem xét rằng mức độ của diễn đàn còn nhiều điều chưa được mong đợi, đặc biệt là nhờ cách tiếp cận này! – Tôi quyết định không lãng phí thời gian nữa. Vì vậy, hãy chọn một diễn đàn theo ý thích của bạn và bắt đầu. Nhân tiện, trang web này xuất hiện chính xác là nhờ một trong các diễn đàn. Sau khi nói chuyện ở đó một thời gian, tôi đã tích lũy được danh sách các chủ đề được nêu ra thường xuyên nhất và nhận ra rằng một trang web như vậy sẽ rất có nhu cầu. Và thế là nó đã xảy ra. Hầu hết tất cả các bài viết đều được viết sau một số cuộc thảo luận trên diễn đàn. Hoặc theo dõi thư từ mà tôi cũng thường xuyên thực hiện. Kết quả là gì? Làm việc, làm việc và làm việc nữa. Bạn càng cho phép mình làm nhiều việc cho bản thân ở giai đoạn đầu, bạn càng thu được ít kiến ​​thức hơn. Và con đường đến với sự chuyên nghiệp càng dài. Nhưng chỉ có bạn mới có thể chọn con người mình muốn trở thành - một con khỉ bấm nút một cách thiếu suy nghĩ hoặc một người chuyên nghiệp. Và chỉ có chính bạn mới chọn con đường mà bạn có thể đạt được điều này hay điều kia. Cách đầu tiên là rõ ràng. Tôi đã cố gắng hiển thị cái thứ hai. Hành động của bạn, các quý ông! Liên kết đến nguồn ban đầu: Hãy bắt đầu lại từ đầu hoặc 'Xin chào, Thế giới Java!'
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION