YOMEDIA
ADSENSE
Các tài nguyên Java cần thiết
64
lượt xem 8
download
lượt xem 8
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Một bản liệt kê toàn diện các cuốn sách, các địa chỉ Web, các blog, các sự kiện phải kể đến và nhiều hơn nữa Ted Neward, Tư vấn, ThoughtWorks Tóm tắt: Chẳng bao lâu nữa nền tảng Java™ sẽ làm lễ kỷ niệm sinh nhật lần thứ 14 của nó và như một tác dụng phụ, khi một ngôn ngữ thành công và có mặt khắp mọi nơi đạt tới mốc lịch sử như thế này, là sự sinh sôi lan rộng của các thư viện, các công cụ và những ý tưởng — phần thưởng thêm này...
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Các tài nguyên Java cần thiết
- Các tài nguyên Java cần thiết Một bản liệt kê toàn diện các cuốn sách, các địa chỉ Web, các blog, các sự kiện phải kể đến và nhiều hơn nữa Ted Neward, Tư vấn, ThoughtWorks Tóm tắt: Chẳng bao lâu nữa nền tảng Java™ sẽ làm lễ kỷ niệm sinh nhật lần thứ 14 của nó và như một tác dụng phụ, khi một ngôn ngữ thành công và có mặt khắp mọi nơi đạt tới mốc lịch sử như thế này, là sự sinh sôi lan rộng của các thư viện, các công cụ và những ý tưởng — phần thưởng thêm này có thể làm cho nhiều người mới đến với ngôn ngữ Java trôi lênh đênh trong một biển tư liệu. Trong bài viết này, tác giả (một người đóng góp không ngừng nghỉ cho cái biển ngập tràn ấy) bẻ lái xuyên qua dòng thủy triều rộng lớn và trình bày một danh sách các nguồn tài nguyên then chốt mà bất kỳ các nhà phát triển Java đầy triển vọng nào nên có. Từ khi giới thiệu nó cho cộng đồng lập trình như một tổng thể trọn vẹn vào năm 1995, các nền tảng Java đã phát triển vượt ra ngoài tầm nhìn "applet mọi nơi" mà ban đầu các nhà bình luận uyên thâm và các nhà tuyên truyền quảng bá Java đã hình dung thế giới Java là như vậy. Thay vào đó, thế giới Java đã vươn dậy thành Swing, đã cố kết xung quanh các servlet, đã lướt trên chúng để thành J2EE, đã trượt ngã với EJB, đã lạc đường sang Spring và Hibernate, đã tổng quát hóa hơn và đã trở nên năng động hơn, thiết thực hơn và tiếp tục trưởng thành theo nhiều hướng rất thú vị, thậm chí ngay cả khi tôi viết những dòng này. Tất cả những thứ ấy làm cho một lập trình viên Java không trưởng thành kịp cùng với ngôn ngữ cảm thấy một chút gì choáng ngợp. Với tư cách là diễn giả, người viết blog (blogger), nhà tư vấn và người cố vấn dày kinh nghiệm, tôi thường xuyên được các lập trình viên non trẻ và trung bình, làm việc trong không gian các tài nguyên Java, yêu cầu giúp đỡ họ làm chủ thế giới rộng lớn, phức tạp, dường như vô tận ấy. Một vài năm trước đây, tôi đã thử cố gắng trả lời câu hỏi bằng cách đăng tải một Danh sách khuyến khích đọc, nhưng mới đây các biên tập viên Java của developerWorks đã yêu cầu tôi tập hợp lại thành một danh sách tài nguyên rộng hơn, không tập trung riêng vào các cuốn sách — một ý tưởng tốt nếu như biết rằng danh sách ấy đã phát triển đến mức mà người dùng tương lai có thể dễ dàng mất cả thập kỷ tới để đọc chúng và vẫn không có một bước tiến về các nội dung. Để tránh thiên vị hoặc chịu ảnh hưởng không cần thiết, tôi quyết định làm một lời kêu gọi đến cộng đồng blog để tìm các nguồn tài nguyên: các địa chỉ Web, các hội
- nghị, các cuốn sách, các blog, các công cụ, bất cứ điều gì đó có vẻ như đáng được quan tâm và sử dụng cho các nhà phát triển Java khi họ tiến lên trong không gian và có thể thấy là có ích cho việc chèo lái trong đống khổng lồ những thứ có sẵn. Sự hưởng ứng thật là to lớn (tôi cảm ơn tất cả những người đã trả lời). Một lưu ý ngắn để giải thích trước khi chúng ta bắt đầu: Các nguồn tài nguyên này không nhất thiết phải là các tài nguyên phổ biến nhất, mạnh nhất hoặc có ảnh hưởng nhất trong hệ sinh thái Java — danh sách như thế có thể sẽ hoàn toàn khác (tuy nhiên tôi ngờ rằng nhiều nguồn tài nguyên sẽ hiển thị trong cả hai danh sách); Thay vào đó, đây là các nguồn tài nguyên mà mọi nhà phát triển Java có triển vọng nên có trong trình duyệt của họ, trên các kệ sách của họ hoặc trên lịch công tác của họ để tham dự. Giống như với bất kỳ loại danh sách sắp xếp kiểu này, luôn luôn có chỗ còn phải tranh luận về những gì cần được đưa vào mà không có hoặc những gì đã được đưa vào nhưng đáng ra không nên. Không nghi lễ thêm nữa, chúng ta hãy tiếp tục. Các địa chỉ Web và các cổng Web của nhà phát triển Thế giới Web rõ ràng đã thay đổi bản chất của các tư liệu và các ấn phẩm được chia sẻ chung (và không khó hiểu với tôi rằng bạn đang đọc điều này ngay bây giờ trên Web), vì vậy, có vẻ là hợp lý để bắt đầu cuộc điều tra về các nguồn tài nguyên Java then chốt với các cổng của nhà phát triển và các trang web chủ chốt mà tất cả các nhà phát triển Java nên luôn để mắt đến. Trong nhiều trường hợp, giá trị của một trang web và/hoặc cổng của nhà phát triển không chỉ ở trong các nguồn tài nguyên được cung cấp hoặc các bài viết được đăng ở đó, mà còn ở chỗ cộng đồng xung quanh cổng hoặc trang web đó. Những ngày của các trang web tĩnh và tệp tin tải xuống đang nhanh chóng lùi dần về phía sau, nhường chỗ cho các mô hình "tích cực" hơn của các diễn đàn, các bài viết theo luồng, và các cuộc thảo luận tương tác giữa không những các nhà phát triển hay lui tới trang web đó và tạo thành cộng đồng của nó mà còn là các thành viên cộng đồng và các chủ sở hữu của cổng. Cũng như công nghệ tiến triển, các nhà phát triển cũng phải tiến triển để theo kịp với nó, một cổng phải tiến triển để theo kịp với sự thay đổi nhu cầu của cộng đồng của nó; có một mối quan hệ mở với cộng đồng của nó là một thành phần trọng yếu để giữ cho một cổng đầy sức sống. Danh sách các trang web (với các URL): java.sun.com Đây là nơi mà từ đó JDK khởi đầu và thường là trang web đầu tiên mà những nhà phát triển Java truy cập để tải về một bản sao của JDK và tài liệu
- hướng dẫn. Nhưng ngoài ra, nó còn là một nguồn thông tin tốt về toàn bộ nền tảng Java, bao gồm một phần rất phong phú về bản thân máy ảo Java - JVM (Hotspot), trong đó mô tả cơ chế bên trong của JVM với mức sâu sắc đáng ngạc nhiên. java.net Trang web Java.NET là một bữa ăn có nhiều món về các dự án mã nguồn mở, tài liệu hướng dẫn, blog, wiki, tin tức và các tài nguyên cộng đồng khác. Đó là một nguồn cung ứng thông tin dồi dào về công nghệ Java, có thể quá nhiều. Mặc dù như vậy, việc duyệt qua danh sách các dự án có thể dẫn đến một số viên ngọc thực sự quý giá như dự án FEST-Swing nhằm mục đích tạo ra một "giao diện hoạt động trôi chảy" để xây dựng các ứng dụng Swing, làm cho chúng đơn giản hơn nhiều để tạo ra các kiểm thử đơn vị. InfoQ Được tạo ra bởi Floyd Marinescu, tổng biên tập sáng lập TheServerSide, InfoQ khác với nhiều tài nguyên khác được liệt kê ở đây ở chỗ rằng nó rõ ràng là trung lập về công nghệ, không chỉ trình bày mã Java mà còn cả .NET và Ruby và cung cấp một bao quát tuyệt vời với cách tiếp cận nhanh nhẹn và cái nhìn thấu đáo. Mặc dù cộng đồng góp ý bình luận cho InfoQ không phải là lớn hay đa dạng được như cộng đồng của TheServerSide, nhưng các cuộc thảo luận này thường thuần hơn và ít thù định hơn. TheServerSide Thường được gọi là "chấm gạch xiên của Java" (the Slashdot of Java), TheServerSide là nơi đầu tiên mà các chủ đề Java doanh nghiệp được hỏi cởi mở, được tranh luận sôi nổi và được theo đuổi ráo riết. Một số ý tưởng sớm nhất xung quanh các thùng chứa nhẹ (như Spring đã làm mẫu) đã nảy sinh ra ở đây và nhiều nhân vật hiện nay được coi là "các nhà lãnh đạo tư tưởng" trong cộng đồng Java đã nổi lên tại đây. Mặc dù các cuộc tranh luận gần đây đôi khi đã có thêm tính cách la hét giành bàn thắng, TSS sẽ luôn luôn là ngôi nhà xuất xứ của phần lớn nhưng gì đã trở thành hệ sinh thái Java mà bây giờ chúng ta đang sống trong đó; như vậy, nó luôn luôn là một nguồn thông tin, là lịch sử nếu không có gì khác. DZone DZone đã bắt đầu cuộc đời như là một tài nguyên cho các nhà phát triển Java, nhưng mới đây đã bắt đầu phân nhánh mở rộng vào các lĩnh vực công nghệ khác, bao gồm cả .NET và Ruby, cũng như một số các vùng chủ đề bao quát khác. Như vậy, trong khi các nhà phát triển Java có thể tập trung hoàn toàn chỉ vào vùng Java, một số sự giao thoa xảy ra và chính nhà phát triển khôn ngoan là người sẽ tận dụng lợi thế đó.
- IBM® developerWorks Nếu bạn đang đọc bài viết này, thì bạn đã tìm thấy dW. Để bộc lộ hết, tôi phải ghi chú rằng tôi đã đóng góp nhiều bài viết khác, ngoài chính bài này cho trang web này, nhưng tôi có thể nói trung thực rằng dW có giá trị như là một nguồn tài nguyên lớn của các bài viết và tài liệu về viết mã Java và JVM. Cụ thể, hãy chắc chắn đọc Lý thuyết và thực hành Java (Java theory and practice), một loạt bài dài kỳ của Brian Goetz, bao gồm bài viết ba phần mô tả bộ dọn rác của JVM, trong đó giới thiệu các khái niệm cốt lõi của bộ dọn rác (GC) theo cách để có thể tiếp cận được rất đáng ngạc nhiên. IBM alphaWorks alphaWorks, trang web chị em của developerWorks, là nơi mà các nhà khoa học và các nghiên cứu sinh của IBM cung cấp các công cụ và các công nghệ mà họ tin tưởng sẽ xác định trào lưu chính cho tương lai. Được tổ chức thành chừng một tá các phạm trù khác nhau, alphaWorks cung cấp cho các nhà phát triển Java một cơ hội để thử nghiệm các công cụ, các ngôn ngữ, các thư viện và các dự án khác mà trong một số trường hợp thậm chí còn đi trước cả các công nghệ mũi nhọn mới mẻ — chúng đang ở trong giai đoạn nghiên cứu. Lưu ý rằng nhiều dự án dùng để chứng minh một luận điểm nghiên cứu cụ thể và sau đó dừng lại, bỏ mặc dự án ở bất cứ hiện trạng nào. Nguyên tắc người mua chịu trách nhiệm về hàng đã nhận. Caveat emptor: Một số dự án không phải là mã nguồn mở và những dự án khác không bao gồm mã nguồn. Nhưng số lượng khá lớn các dự án alphaWorks kết thúc bằng việc phát triển thành một trào lưu chính hoặc như là một sản phẩm được hỗ trợ từ IBM, hoặc là một công cụ có sẵn để tải xuống từ một số các địa chỉ mã nguồn mở của IBM. Trong bất kỳ sự kiện nào, để mắt đến alphaWorks sẽ là một cái nhìn về hướng hệ sinh thái Java đang ở đâu và tiến hóa như thế nào. JavaWorld : Sau một thời gian dài gián đoạn, JavaWorld đã trở lại với vinh quang thủa ban đầu với một ngoại hình được tân trang, nội dung kỹ thuật chất lượng cao và nguyên tắc phân loại theo chủ đề tiện dụng để có thể nhanh chóng tìm ra các loại bài viết mà bạn tìm kiếm. Đừng bỏ lỡ các khả năng lưu trữ (archives) rộng lớn đã có từ thủa ban đầu của nó và bao gồm các bài viết của một số trong các cộng tác viên nổi tiếng nhất của cộng đồng Java. Artima Được Bill Venners tạo ra, Artima đã phát triển thành một bộ sưu tập khổng lồ các bài viết, các blog và các bài phỏng vấn, không phải tất cả đều hoàn toàn xoay quanh việc phát triển Java và đã có một số các tên tuổi lớn nhất trong không gian Java viết bài ở đó. (Hãy xem sự hoài nghi của Bill Joy đối với sự phức tạp của ngôn ngữ Java sau khi Java 5 đã được phát hành và ví
- dụ mà ông sử dụng để biện minh cho nhưng lo lắng của ông — Enum — như là một ví dụ cổ điển.) Thật đáng xem. Lưu ý rằng đối với nhiều địa chỉ Web ở trên, để tận hưởng đầy đủ các lợi thế của trang web/cổng Web sẽ yêu cầu một số hình thức đăng ký. Như khi viết bài này, tất cả chúng chủ yếu là miễn phí và chỉ yêu cầu đăng nhập với một tên người dùng/mật khẩu để chúng có thể nhận dạng khách truy cập và một địa chỉ e-mail để chúng có thể gửi e-mail hoặc các bản tin chủ đề theo định kỳ. (Theo như tôi được biết, tất cả sẽ cho phép bạn chọn không nhận các e-mail, nhưng tôi đã không thử làm thế vì tôi thấy rằng, rất thông thường các bản tin cho tôi biết vài điều tôi thấy là thú vị mà tôi còn chưa biết, và chúng trở thành những thứ có ích thực sự để nhận về trong hộp thư của tôi). Weblogs Blog là một cách dễ dàng cho các nhà phát triển để biết về các tư tưởng, các hồi ức, các khái niệm, các ý kiến, các cuộc tranh luận và các cuộc thảo luận trí tuệ khác xung quanh công nghệ và nhận thức về "các nhà lãnh đạo tư tưởng", những người dường như rất có ảnh hưởng trong các lĩnh vực công nghệ cụ thể. Thậm chí tốt hơn nữa là, có thể tiêu thụ các blog ở máy cá nhân, thông qua trình đọc nguồn tin (feed readers); chúng kéo xuống các bài viết/các mục, tải về máy tại chỗ để có thể đọc ngay cả khi không trực tuyến (offline). Trong thực tế, các blog đ ã trở nên có mặt ở khắp nơi đến mức mà các thiết bị chuyên dụng (như Amazon Kindle) làm cho dễ dàng thu thập được các thông tin mà nhà phát triển muốn. Điều chủ chốt là phải xác định xem cái nào trong hàng triệu blog để đọc. Mỗi nhà phát triển sẽ có sở thích riêng của mình qua việc chọn các blog nào để đọc và cái nào thì không đọc, nhưng có thể xem xét bắt đầu đọc một số blog sau: The Java Posse The Java Specialists' Newsletter Martin Fowler's Bliki Bất kỳ nguồn cung cấp RSS nào cung cấp bởi các trang web liệt kê trong phần "trang web" ở trên. Hãy nhớ rằng (hầu hết) đây là các ý kiến cá nhân; đôi khi có những ý kiến chia sẻ chung ở đây sau này tỏ ra là không đúng sự thật — đừng bao giờ quyết định sản xuất đơn thuần chỉ dựa vào các thông tin trong một mục blog. Nhưng nếu sử dụng nó để kích hoạt quá trình suy nghĩ thoát khỏi lối mòn thì các blog có thể là một nguồn tài nguyên cải thiện các kỹ năng hùng hậu đáng kinh ngạc.
- Các gói phần mềm và/hoặc các thư viện Việc theo dõi tất cả các thư viện và các gói phần mềm trong hệ sinh thái Java là một việc vặt, một việc quá dễ dàng nên các nhà phát triển Java dễ bỏ qua. Kết quả là, các nhà phát triển đôi khi sẽ bỏ sót một thực tế là một thứ gì đó mà họ đang tự viết ra đã tồn tại bên trong một nền tảng (giá như họ đã nán lại để khám phá nó!). Những gì tiếp theo là danh sách của tôi về "Mười gói Java hàng đầu mà mọi nhà phát triển Java ít nhất nên biết chúng có tồn tại (và lý tưởng nhất là biết cách sử dụng như thế nào)": java.lang.reflect Có nhiều thư viện và các công cụ của Java phụ thuộc vào gói Reflection đến nỗi tìm hiểu nó hầu như đã trở thành một yêu cầu bắt buộc (nếu không có lý do nào khác hơn là để hiểu khi nào sử dụng nó sẽ không thành công do chính sách bảo mật hay các loại sai lệch về hạ tầng cơ sở khác). Sóng đôi với Reflection cũng là các chú giải của Java 5 và java.lang.annotation. javax.script Với tầm quan trọng về các ngôn ngữ động lướt qua hệ sinh thái Java, việc biết cách làm thế nào để sử dụng các ngôn ngữ kịch bản lệnh từ bên trong mã Java có thể cho phép các nhà phát triển mở rộng hệ thống của họ mà không phải đi qua chu trình biên dịch-liên kết-chạy-thử nghiệm rất tốn công. javax.management và java.lang.management Các gói phần mềm quản lý, còn được gọi là các Phần mở rộng quản lý Java (JMX-Java Management Extensions), là một công cụ mạnh để giám sát các ứng dụng Java khi chúng chạy, vì vậy các nhà phát triển cần phải biết rõ và thoải mái với JMX để xây dựng phần mềm thực sự có thể được các nhà quản trị hệ thống sử dụng. Đừng quên xem xét công cụ jconsole đi cùng với JDK như là một ví dụ về một bảng đồng hồ hiển thị sức khỏe của ứng dụng, vừa là một ví dụ về những gì có thể được xây dựng, vừa là, tự thân nó như một công cụ có ích. (Hãy chăm chú vào kịch bản lệnh mẫu để xây dựng một trình cắm thêm jconsole cho phép hỗ trợ việc tạo kịch bản lệnh bên trong jconsole, một công cụ mạnh trong tay bất kỳ nhà quản trị hệ thống giỏi nào). java.util.concurrent.* Sự tương tranh là vấn đề lớn nhất mà các nhà phát triển sẽ phải đối mặt trong thập kỷ tới và vũ khí chủ yếu mà các nhà phát triển Java sẽ sử dụng chống lại các lỗi tương tranh sẽ là các lớp trong gói phần mềm này và các gói con của nó (.atomic và .locks).Học để sử dụng nó sẽ là điều trọng yếu
- như, nếu không nói là hơn, học để viết một lớp như thế nào. Hãy tìm hiểu nó, sống với nó và yêu nó. java.util Cũng giống như thế với các lớp trong java.util. Chúng thường xuyên được đưa vào trong mã, đặc biệt là các lớp Collection, đến mức mà nên tranh luận xem java.util.* có cần phải được tự động nhập vào như là java.lang hay không. java.beans Không nghi ngờ gì nữa, JavaBeans là một trong những phần tử cốt lõi được sử dụng trên toàn hệ sinh thái Java, trải qua dưới cái tên ít mang tính tiếp thị là "POJO" (các đối tượng Java thuần túy). Chúng vẫn còn dựa vào các mã JavaBeans, API và đặc tả kỹ thuật, do đó việc dành một ít thời gian cho các lớp trong java.beans chỉ có thể trợ giúp viết các POJO tốt hơn thôi. java.util.logging Các bản ghi chẩn đoán và kiểm toán rất nhanh chóng trở thành công cụ mạnh mẽ để theo vết việc thực hiện các chương trình đang chạy, dù là cho các mục đích gỡ lỗi hay là cho các mục đích quản trị và giám sát. Lời khuyên của tôi: Hãy học để sử dụng gói này và người anh em họ mã nguồn mở của nó là log4j). java.security.* Các API bảo mật của Java, các cơ chế chính sách và các lớp cấp phép là một phần cốt lõi của những gì làm cho môi trường Java thành một nền tảng tính toán an toàn, nhưng chỉ khi các nhà phát triển biết cách làm thế nào để tận dụng nó. Tránh xa các API mật mã hóa — không sử dụng chúng cho đến khi bạn đã tận dụng hết khả năng của mọi tùy chọn khác có sẵn cho bạn. Chúng không khó để sử dụng những việc có được mật mã hóa đúng (có nghĩa là không có sai sót lớn) là một cái gì đó mà cần mất nhiều năm và rất nhiều góp ý sửa chữa của các chuyên gia mã hóa. Trước hết hãy sử dụng các cơ chế khác như SSL/TLS và các lớp GuardedObject/SignedObject/SecureObject. javax.xml.parsers.* , javax.xml.bind và javax.xml.transform.* Bóng dáng XML luôn hiện ra to lớn trong đầu óc của nhà phát triển Java và việc có thể phân tích cú pháp nó (cả trực tiếp cũng như qua một thư viện đối tượng-XML) và chuyển đổi nó (sử dụng XSLT) là một kỹ năng mạnh phải có, nếu không nói là dứt khoát cần thiết. javax.sound.* OK, nó không phải là một kỹ năng phải có, nhưng việc biết cách làm thế
- nào để bật lên các hiệu ứng âm thanh thường có thể giúp làm sống động hơn các mã lệnh trần tục. Bên cạnh đó, đôi khi âm thanh có thể được sử dụng để cung cấp tín hiệu và thông tin phản hồi trên một hệ thống khi không có cách hiển thị nào trong tầm tay. Và ngoài những điều đó ra, sẽ chỉ còn là một trò đùa bệnh hoạn khi máy tính có thể xổ ra màn hình cả một ngăn xếp đầy thông báo lỗi và phát ra tiếng kêu thất thanh từ bộ phim kinh dị yêu thích của bạn để báo cho người sử dụng biết rằng một cái gì tệ hại đã xảy ra. Tất nhiên, còn có rất nhiều gói khác, cả bên trong JDK và cả bên ngoài JDK đáng tìm hiểu, nhưng việc làm chủ những điều này sẽ đặt bạn vào vị thế tốt cho hầu hết các dự án, chứ không phải để kể ra trong hầu hết các cuộc phỏng vấn tìm việc. Các hội nghị Các hội nghị tiếp tục đóng một vai trò chủ yếu trong huấn luyện các nhà phát triển Java, đặc biệt là đối với những chủ đề đó mà chưa tích tụ khối lượng đủ lớn để lọt vào sưu tập các chủ đề của các công ty đào tạo lớn. Các hội nghị cũng là một cơ hội vàng cho các nhà phát triển gặp gỡ với các nhà phát triển khác để nói về tất cả các kỹ năng và trách nhiệm, mang lại cho người tham dự cơ hội để làm một cái gì đó khá mạnh mẽ (và hoàn toàn cần thiết): trút bầu tâm sự về những yếu kém ở nơi mình làm việc. Đến dự hội nghị còn có một tác dụng phụ có ích (và có thể được phát triển thành lớn hơn và tốt hơn nếu tích cực hoạt động): Đó là xây dựng nhóm đồng đẳng các nhà phát triển giữa những người tham dự. Nhờ có sự phổ biến rộng rãi khắp mọi nơi của e-mail, các danh sách thư chung (như Google Groups hoặc Yahoo Groups), và các công cụ giao tiếp làm việc nhóm gọn nhẹ, việc duy trì liên lạc với những người đã gặp gỡ tại hội nghị trở nên dễ dàng hơn bao giờ hết. Những tình bạn bắt đầu trong bữa ăn trưa hoặc trong các buổi tiệc tối ấy có thể kéo dài suốt đời và luôn thành công, đặc biệt là khi đánh giá các công nghệ mới. Hãy để những lời nói của một người kỳ cựu, đã 30 năm là người tham dự, là diễn giả, là nhà tổ chức và là khách không mời của các hội nghị (không phải tôi, mà là một người bạn của tôi) chỉ dẫn cho bạn: "Những người mới vào nghề đi dự hội nghị để dự các phiên họp; những người kỳ cựu đi dự vì các bữa tiệc và bạn bè. Các bữa tiệc giúp bạn gặp gỡ bạn bè và mọi người giúp bạn tiến bộ trong sự nghiệp của bạn". Danh sách các hội nghị bao gồm: No Fluff, Just Stuff Đây là một hội nghị mà tôi nhiệt tâm hết sức tán thành, không chỉ vì tôi là
- một diễn giả thường xuyên ở đây, mà vì bảy diễn giả của của Top Ten JavaOne 2007 là các diễn giả của NoFluffJustStuff (bây giờ hoặc trước đây). Không ở đâu khác các nhà phát triển Java sẽ tìm được sự tập trung cao độ vào các chủ đề kỹ thuật với chi phí tốt hơn hoặc địa điểm thuận tiện hơn: quê hương của bạn. (mỗi năm với hơn 30 cuộc hội nghị xuất hiện trên toàn lục địa Bắc Mỹ — và mở rộng sang Châu Âu và sắp tới sẽ ở Châu Á — là các cơ hội tốt để bạn có thể lái xe đến một buổi trình diễn NFJS hơn là rút ra hàng ngàn đô la để đi tới một số thành phố xa xôi và nghỉ lại khách sạn). Cũng không đáng ngạc nhiên rằng một số các cuốn sách được đề nghị trong bài viết này được viết bởi các tác giả là những người xuất hiện ở các cuộc trình diễn NoFluff: Những người tổ chức NFJS đã làm mọi việc có thể để tìm "nguồn chính" về nhiều chủ đề Java và Phát triển nhanh khác nhau. JavaOne Hội nghị này rất lớn, không của riêng ai, luôn được tổ chức ở San Francisco (điều này hoặc được tán thành, hoặc bị phản đối, tùy thuộc vào ngân sách chi cho đi lại của công ty bạn ra sao), nhưng không có cuộc tụ họp nào khác trên Trái đất mà tập hợp lại nhiều nhân vật đầu mối tổ chức và quản lý Java chủ chốt vào một chỗ như JavaOne đã làm. JAOO Không bỏ lại các đạo hữu Java Châu Âu của chúng tôi ngoài giá lạnh, JAOO được tổ chức mỗi năm một lần tại Aarhus, Đan Mạch và đã đang hoạt động bền vững với gần hai thập kỷ mà không hề có bất kỳ dấu hiệu chậm lại. JAOO không chỉ thu hút được một số diễn giả và tác giả xuất xắc nhất, mà nó còn có sự khác biệt tương đối hiếm vì đây là hội nghị đan chéo nhiều công nghệ, có nghĩa là một người tham dự có thể tham gia một phiên họp Java vào buổi sáng, trò chuyện với một số nhà phát triển C/C + + vào bữa trưa, nắm bắt những sự phát triển mới nhất trên Silverlight của Microsoft® hoặc bất cứ điều gì khác mới lạ) vào buổi chiều và uống bia với các chuyên gia Smalltalk vào buổi tối. Nếu bạn đang xem xét mở rộng tầm nhìn của mình, JAOO hoặc hội nghị chị em của nó, QCon (được tổ chức cùng với những người InfoQ) là một nơi tuyệt vời để bắt đầu. Và đối với các đạo hữu của Java đang sống dưới đường xích đạo, JAOO đến với Brisbane và Sydney vào lần đầu tiên trong năm nay (2008); tất cả các dấu hiệu đều nói lên rằng nó sẽ trở lại một lần nữa trong những năm tới. Devoxx Trước đây là JavaPolis, hội nghị này ở Antwerp, Bỉ, đang phá vỡ các ranh giới với tốc độ tăng trưởng phi thường, là một cách tuyệt vời để gặp gỡ các đối tác Châu Âu của bạn (và thưởng thức một số hương vị tuyệt vời của bia Bỉ, trong khi bạn đang ở đó). Các diễn giả là nhưng người xuất xắc nhất và tập trung vào các chủ đề tối tân. Cũng có sàn triển lãm thương mại quy mô
- thích hợp và nhiều cơ hội để tương tác với các nhà phát triển cùng hội của bạn. Jazoon Một hội nghị tương đối mới cho sân chơi này, hội nghị Jazoon đã được mở ở Zurich (Thụy Sĩ) năm 2007. Với các tên tuổi như Martin Odersky (người tạo ra Scala), Neal Gafter và Simon Phipps (quan chức mã nguồn mở quan trọng nhất của Sun) trong danh sách, Jazoon có vẻ đang tụ họp một nhóm các diễn giả có sức hấp dẫn. Được tập trung hoàn toàn vào các chủ đề Java và họp đúng ở giữa trung tâm của châu Âu, Jazoon có vẻ là một hội nghị tốt cho các đạo hữu Java của châu Âu đánh dấu trong lịch công tác của mình để tham dự Ngoài ra, còn các hội nghị khác, nhằm đến nhiều loại thính giả khác nhau, nhưng những hội nghị ở trên nhằm trực tiếp vào các nhà phát triển Java. Các nhà phát triển muốn mở rộng tầm nhìn của họ về thế giới nên xem xét đến dự một hội nghị công nghệ "thay thế" như các cuộc hội họp về Perl, Python, Ruby hoặc thậm chí .NET, diễn ra trên toàn thế giới; để cho đầu óc mình mở ra với các ý tưởng mới, đôi khi cần xem xét một tập hợp các vấn đề hoàn toàn mới. Các cuốn sách Không có nguồn tài nguyên nào to lớn hơn sẵn có cho nhà phát triển mà dễ dàng có được, như là những cuốn sách truyền thống bình thường. Chỉ cách bạn một khoảng đúng bằng đoạn đường tới hiệu sách địa phương nơi bạn ở (hoặc nếu bạn sống trong các vùng sâu vùng xa, thì đó là trình duyệt Web của bạn và Amazon) là một kho tàng kiến thức kỹ thuật và kinh nghiệm ... chỉ cần bạn có thể lựa chọn trong vô số sách na ná kiểu "me-too", “Java for Dummies”. Các tập sách này giả định rằng người đọc đã có một kiến thức làm việc về ngôn ngữ và bộ công cụ Java; các cuốn sách cho những người mới bắt đầu học Java phổ biến đến mức kinh ngạc và hầu như tất cả chúng trình bày cùng những vấn đề cơ sở giống nhau. Việc chọn một cuốn nào đó chỉ còn là sự lựa chọn cách tiếp cận, phong cách viết của tác giả và thậm chí đôi khi chỉ là có hay không có các bài giải cho các bài tập (nếu có các bài tập trong đó) trong các đĩa CD đi kèm cuốn sách. Sau khi bạn đã qua phần cơ sở, hãy xem xét các cuốn sách sau: Effective Java (2nd Ed) của Joshua Bloch Cuốn sách đầu tiên nên có trên giá sách của mọi nhà phát triển Java, có tính thời đại, dễ hiểu, không có trở ngại nào.
- Java Concurrency in Practice của Brian Goetz Cuốn sách thứ hai là cuốn sách nên có trên giá sách của mọi nhà phát triển Java, vì mọi nhà phát triển Java, dù thích hay không, đều hoạt động bên trong môi trường đa luồng. Better, Faster, Lighter Java của Justin Gehtland và Bruce Tate Cuốn sách mỏng này có vai trò như là "viên thuốc bắc cầu” cho nhiều nhà phát triển Java để áp dụng các môi trường “thùng chứa nhẹ", được Spring phát minh đầu tiên và lấp đầy khoảng trống mà hầu hết các máy chủ EJB hùng mạnh như WebSphere hoặc phần mềm trung gian xử lý giao dịch khác còn để lại. Các tác giả đã làm một công việc tuyệt vời khi từng bước đi qua chu kỳ phát triển dựa vào-POJO, chỉ ra những thế mạnh và điểm yếu của các ý tưởng và làm thế nào để đạt được cách tiếp cận gọn nhẹ (hơn) để xây dựng các ứng dụng doanh nghiệp với các công cụ như Spring và Hibernate mà không đồng nghĩa với giảm bớt chức năng hay tính năng của hệ thống kết quả. Effective Enterprise Java của Ted Neward (là tôi đấy) Bảy mươi lăm cách để đảm bảo chắc chắn rằng các ứng dụng Java doanh nghiệp của bạn (dù chúng được viết bằng Spring, EJB, dịch vụ Web hay không phải những thứ này) không bị hụt hơi. Giống như cuốn Java hiệu quả (Effective Java) không phải dành cho các lập trình viên mới bắt đầu với Java, Java Doanh nghiệp hiệu quả (Effective Enterprise Java) cũng không phải dành cho nhà phát triển mới tìm hiểu những điều cơ sở trong không gian "Java doanh nghiệp". Release It! của Michael Nygard Bất cứ ai tìm cách để viết các phần mềm dành cho các máy phục vụ sản xuất cần đọc cuốn sách này — đó là một cái nhìn thấu hiểu tuyệt vời vào những thứ có thể xảy ra lỗi trong môi trường sản xuất và làm thế nào để đối phó với các hỏng hóc tiềm năng hoặc bằng cách khắc phục chúng hay hoàn toàn tránh chúng. Một trong hai cuốn Inside the Java 2 Virtual Machine của Bill Venners hoặc Component Development for the Java Platform của Stuart Halloway Sau khi nhà phát triển Java đã học được ngôn ngữ này, sẽ đến lúc mà các nền tảng bên dưới — bản thân máy ảo Java, có nghĩa là các chủ đề như bộ thu dọn rác, đối tượng Reference, ClassLoaders, các luồng và các trình giám sát và v.v — trở thành biên giới lớn tiếp theo để khám phá. Một trong hai cuốn sách này (hoặc cả hai) sẽ là một tài liệu hướng dẫn hữu ích để thực hiện chính điều đó. Nhược điểm lớn nhất của mỗi cuốn sách này là đã hơi cũ: cuốn Bên trong (Inside) đã được xuất bản từ thời Java 1.2 và cuốn Phát triển dựa thành phần (Component-Based) được xuất bản ngay sau đó. May
- mắn thay, hầu hết trong máy ảo Java vẫn không thay đổi kể từ đó, do đó mỗi khi người đọc phát hiện ra một chi tiết khác đi từ JDK 1.2, họ sẽ sẵn sàng gác lại cuốn sách và chuyển sang chủ đề tiếp theo. Patterns of Enterprise Application Architecture của Martin Fowler và Enterprise Integration Patterns của Gregor Hohpe và Bobby Woolf Cả hai cuốn sách này là những cuốn sách về mẫu, nói đến các cách tiếp cận thiết kế và các ý tưởng thiết kế và vì thế nó giả định rằng hầu hết các độc giả đã đọc cuốn sách của “Nhóm bốn người” (Gang of Four), cuốn Thiết kế các mẫu (Design Patterns) của Gamma, Helm, Johnson và Vlissides. Các cuốn sách về mẫu thông thường giúp đỡ các nhà phát triển tạo ra các thiết kế mạnh mẽ hơn bằng cách cho họ một số khối xây dựng thiết kế cơ sở để sửa đổi và phát triển đúng chỗ, nhưng có thể dễ dàng mất tác dụng nếu như xem đó tự thân là mục tiêu. Java Power Tools của John Smart Một số người đã đề nghị cuốn sách này, giới thiệu một cách nhẹ nhàng về một loạt các công cụ có sẵn trong hệ sinh thái Java. Smart cũng cung cấp các khoá đào tạo (Java Power Tools Bootcamp) xung quanh cuốn sách, nhưng cách dễ dàng nhất để hầu hết các nhà phát triển nhận được thông tin sẽ là dùng phiên bản in trên giấy. The Pragmatic Programmer của Andy Hunt và Dave Thomas Cuốn sách này phải nằm trên bàn làm việc của mọi lập trình viên, không phụ thuộc vào ngôn ngữ hay nền tảng thật sự đang được sử dụng. Đây là một cuốn sách thời đại, một cuốn sách mà các lập trình viên sẽ còn viện dẫn trong các thập kỷ tới. Hãy xem nó như cùng một lớp với cuốn sách kinh điển Huyền thoại người-tháng (The Mythical Man-Month) của Fred Brook. The Productive Programmer của Neal Ford Bản phát hành mới nhất này trông kinh điển như cuốn sách Nhà lập trình thực dụng (Pragmatic Programmer), tập trung vào các mẹo, các thủ thuật và các kỹ thuật mà lập trình viên có thể sử dụng để cải thiện năng suất của mình, vượt xa những gì mà IDE cung cấp cho họ. The Pragmatic Starter Kit Cuốn sách này bao gồm Các phần thử nghiệm đơn vị thực dụng (với JUnit), Tự động hóa dự án thực dụng và Kiểm soát nguồn thực dụng (với Subversion). Mỗi phần đề cập điều cốt lõi của từng chủ đề thông qua tập trung thảo luận để đi sâu trực tiếp đến cốt lõi của vấn đề mà không làm mất đi sự tập trung. Đặc biệt, Tự động hoá dự án là một một món khai vị tuyệt vời cho cuốn sáchAnt hành động (Ant in Action), nhưng cũng trình bày những cái tại sao và những gì làm cho một quá trình xây dựng tốt.
- Ant in Action (2nd Ed) của Erik Hatcher và Steve Loughran Ant là một tiện ích xây dựng ra mắt lần đầu tiên cho nền tảng Java (xem phần kế tiếp về các công cụ để biết thêm chi tiết) và cuốn sách này là sự giới thiệu tốt nhất về sức mạnh to lớn mà Ant có. Cùng với việc học cách sử dụng Ant, Ant in Action cũng giải thích việc thử nghiệm đơn vị, tích hợp liên tục và các biện pháp thực tiễn triển khai sản xuất, tất cả từ một phối cảnh những thực tiễn hàng ngày của nhà phát triển Java thực hành. Các công cụ Cũng giống như có nhiều thứ để xây dựng một căn nhà hơn là "nắm lấy một cái búa và bắt đầu đóng các tấm ván", có nhiều thứ để phát triển Java h ơn là "nắm lấy IDE của bạn và bắt đầu viết mã". Mặc dù chắc chắn rằng có một IDE tốt là một sự trợ giúp rất lớn để viết mã Java, các công cụ khác có thể mang lại cùng giá trị như — nếu không phải là nhiều hơn — IDE. Không theo thứ tự đặc biệt nào.... The IDE Tất nhiên, việc thảo luận về công cụ bắt đầu với IDE. Cố gắng để tránh xa con đường thương mại hóa, cả Eclipse lẫn NetBeans là mã nguồn mở và miễn phí và do đó cung cấp một tùy chọn hấp dẫn cho "các bước đầu tiên". Thử nghiệm đơn vị (Unit testing) Công cụ mãi mãi yêu thích ở đây là sản phẩm nguồn gốc, bắt đầu cuộc cách mạng trong kiểm thử đơn vị, đó là JUnit, nhưng một số công cụ khác len lỏi vào và được sử dụng phổ biến, gồm có TestNG và không ngạc nhiên, có cả JUnitPerf, trong số đó. Tích hợp liên tục (Continuous Integration) Một máy chủ tích hợp liên tục thường xuyên kiểm tra mã nằm ngoài kiểm soát nguồn, xây dựng nó, chạy các thử nghiệm đơn vị đối với nó và báo cáo về bất kỳ các sự cố xây dựng nào cho các nhà phát triển, thường là qua e- mail. Một số phiên bản mã nguồn mở có sẵn, nhưng một phiên bản đã tập hợp được nhiều sự chú ý là Hudson, một máy chủ tích hợp liên tục với nhiều trình cắm thêm và có khả năng mở rộng cao. Gốc ban đầu là CruiseControl và chỉ nói về các lệnh. Phân tích tĩnh FindBugs FindBugs là một công cụ phân tích tĩnh mã nguồn mở chạy trên mã Java, thực hiện phân tích sâu n-đường để tính toán tất cả các tuyến mã lệnh có khả năng xảy ra và báo lại mọi loại lỗi và cảnh báo mà nó tìm thấy, dựa trên một bộ quy tắc rộng lớn. Được phát triển bởi William Pugh (cũng
- là William Pugh người đã phát hiện một lỗi trong mô hình bộ nhớ của Java ), khẳng định lớn nhất cho sự nổi tiếng của FindBugs là khả năng phân tích mã Java tìm các lỗi tương tranh, một điều mà mọi lập trình viên đều đánh giá cao. Theo vết gói mạng WireShark (mà trước đây thường được gọi là Ethereal) cho các lập trình viên trông thấy những gì đang đi ngang qua mạng, tạo cho họ một cơ hội để kiểm tra rằng những gì đang chạy trên dây đúng là những thứ cần phải chuyển đi trên mạng và những gì không nên có ở trên mạng (như là các thông tin nhạy cảm hoặc các mật khẩu dưới dạng chưa mật mã) thì không có ở đó. Ảo hóa (Virtualization) Một công cụ ảo hóa (hoặc có lẽ chính xác hơn nên gọi nó là một nền tảng) như VMWare, Xen, VirtualBox hoặc VirtualPC cung cấp cho các lập trình viên khả năng để tạo ra một môi trường giống hệt với môi trường mà máy tính sản xuất sẽ chạy mà không bị mất năng suất môi trường của máy PC chứa nó. Nó cũng cung cấp một biện pháp thuận tiện để có một chỗ chạy thử các phần mềm "thí nghiệm" mà không gây ra nguy hiểm cho máy tính phải dùng để sản xuất. Hầu hết chúng đều có một tùy chọn miễn phí nào đó, nếu như không phải là các dự án hoàn toàn mã nguồn mở. Thực tế là một vài trong số này là các công cụ thương mại, bạn không nên sợ; nếu một công cụ tiết kiệm cho bạn thậm chí chỉ một giờ một tuần thì trong bao lâu nó sẽ bù lại cho bạn tiền mua chính nó? Và nếu ban quản lý không đồng ý với lý luận đó, việc tính toán cẩn thận số thời gian mà một công cụ có thể tiết kiệm được (dù đó là thời gian của nhà phát triển hoặc dự đoán sản xuất hoặc thời gian thực hiện) nói chung sẽ tiến một bước dài theo hướng thuyết phục được họ về hành động dại dột theo cách suy nghĩ keo kiệt, khôn trong chuyện nhỏ/ngốc trong chuyện lớn. Cám ơn các công tác viên Xin cám ơn tất cả những người đọc blog của tôi (blogs.tedneward.com), đã dành thời gian từ lịch công tác riêng của mình để gợi ý các nguồn tài nguyên cần có trong danh sách này; một số (nhưng chắc chắn không phải tất cả) bao gồm Ostrovich Greg, Ryan Slobojan, Hamlet D'Arcy (người đã yêu cầu được nêu tên là "Một kẻ lưu vong khác giữa thiên hà, kiếm tiền trong CNTT để mua các phụ tùng và vá víu lại tên lửa đẩy của mình, tại đó anh ta sẽ sửa chữa con tầu không gian của mình và quay lại hành tinh quê nhà"), Pierre-Marc Larocque, Prashant Rane, Marc Stock, Eric Kerwin, Morten Anderson, Alex và Yvonne Miller, Rahul Raj, Brian Sletten và Neal Ford.
- Xu hướng trong tương lai cần theo dõi Dĩ nhiên, thật là chẳng tốt đẹp gì đối với các nhà phát triển Java khi dành thời gian để nghiên cứu công nghệ hôm nay, nếu khi học xong, các công nghệ của ngày mai đã tiến lên và tất cả mọi thứ đã học bỗng nhiên lỗi thời. Để mắt đến những gì đang lay động xung quanh như là "những làn sóng của tương lai" có thể ít nhất cũng quan trọng, nếu chỉ có mục đích là khi CTO của công ty tình cờ đứng bên cạnh bạn trong thang máy và hỏi "Rốt cuộc, những thứ mà tôi nghe nói về ngôn ngữ chức năng là cái gì thế? Chúng ta có nên xem xét kỹ điều đó không?", bạn có thể có một câu trả lời rõ ràng. Một số hướng "tương lai" xung quanh nền tảng Java, không xếp theo một thứ tự đặc biệt nào, bao gồm: Ngôn ngữ động Các ngôn ngữ như Groovy và JRuby đã sinh ra các dự án khác đáng để xem xét như Clojure và Fan; chúng thí nghiệm ý tưởng rằng một môi trường định kiểu yếu hơn (less-strongly-typed) có thể mang lại năng suất cao hơn và đưa ra nhiều tùy chọn hơn. Tuy nhiên, đây không phải là một lời kêu gọi từ bỏ ngôn ngữ Java: hiệu quả tốt nhất sẽ đến với việc kết hợp của cả hai. Các ngôn ngữ lập trình chức năng (Functional languages) Được Scala đi tiên phong, các ngôn ngữ lập trình chức năng có đặc tính ưu việt là ngầm thân thiện tương tranh do xu hướng chung của các ngôn ngữ này là khuyến khích dùng các chức năng có khả năng kết hợp lại với nhau và không dùng trạng thái chia sẻ chung (mặc dù chắc chắn là đôi khi chúng có thể có một cú pháp mà chỉ có người mẹ đẻ ra mới có thể yêu thích được). Jaskell là một bản thực thi Haskell-trên-JVM và (lại là) Clojure cũng thuộc họ này, cung cấp một tầm nhìn về bộ nhớ giao dịch phần mềm trông như thế nào khi chạy ứng dụng thực sự. Chấm dứt trong Java Việc thêm hỗ trợ bao đóng (còn được gọi là các phương thức lam đa hoặc ẩn danh) sẽ làm đơn giản hóa một số phần nhất định trong viết mã Java và đang được tranh luận sôi nổi để đưa vào trong phiên bản Java 7. Vì cuộc tranh luận này đang chia rẽ sâu sắc cộng đồng, các lập trình viên Java có nhiệm vụ tiến hành một nghiên cứu nhỏ và xem tất cả những ồn ào ấy là gì. Các máy DaVinci Một phiên bản mới của JVM được thiết kế để thân thiện hơn với các ngôn ngữ khác (như ngôn ngữ động và ngôn ngữ chức năng được đề cập ở trên), có thể, hoặc có hoặc không, kết thúc bằng việc trở thành một luồng chủ đạo của JVM. Để mắt đến vấn đề này sẽ giúp hiểu được những lý lẽ tán thành
- và phản đối việc chạy ngôn ngữ động/ngôn ngữ kịch bản lệnh trên JVM hiện tại. Phát triển giao diện người dùng Giữa Flash/Flex, Silverlight và JavaFX, các trình duyệt Web gần như có sự thay đổi trang trí bề ngoài của những phần gây sửng sốt (và cũng có thể làm kinh sợ nữa). Đấy là thậm chí còn chưa xét đến các khung công tác Web phía máy chủ mới trong không gian Java hoặc những thứ khác nh ư bộ dụng cụ Web của Google (Google Web Toolkit-GWT). Giao diện người dùng luôn luôn là và tiếp tục là (và sẽ còn là, trong một tương lai dự đoán được) ham muốn đích thực. Việc hiểu biết một hoặc hai, chưa nói đến một thư viện "phía khách phong phú" như Swing hay SWT, sẽ có lợi ích to lớn khi cố gắng xây dựng một cái gì đó tương tác nhiều hơn cái mà các trang HTML có thể cung cấp. Giống như với bất cứ điều gì có liên quan đến "tương lai", hãy chú ý rằng những gì đang được thảo luận ngày hôm nay có thể trở thành một hướng sai, một chuyện đầu voi đuôi chuột, một sự sao lãng tạm thời, một sự chịu ảnh hưởng từ ngành công nghiệp, hoặc trở thành Một Điều Vĩ Đại Tiếp Theo; hãy có đầu óc cởi mở và tinh thần hoài nghi lành mạnh với liều lượng như nhau. Tóm tắt Xin cứ tự nhiên đóng góp vào danh sách này — nó sẽ chỉ dẫn đến một danh sách các nguồn tài nguyên tốt hơn mà thôi. Thời gian trôi đi cũng sẽ làm thay đổi nội dung của nó vì hệ sinh thái tiếp tục tiến hóa và thay đổi và lớn mạnh. Đây là một điều tốt; nếu chúng ta phải sử dụng cùng một môi trường Java mà chúng ta được cung cấp vào năm 1995, chúng ta đã đi đến cái gì đó khác mất rồi. Tích cực hoạt động trong hệ sinh thái: đóng góp các bản vá lỗi, đề nghị cải tiến và nếu tất cả đều thất bại, hãy thoát ra và xây dựng tác phẩm tốt hơn của chính bạn. Biết đâu năm năm sau dự án của bạn sẽ vào trong danh sách này, ai biết được?
- Mục lục Các địa chỉ Web và các cổng Web của nhà phát triển Weblogs Các gói phần mềm và/hoặc các thư viện Các hội nghị Các cuốn sách Các công cụ Xu hướng trong tương lai cần theo dõi Tóm tắt
ADSENSE
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn