07/09/2018, 09:30

Học source code từ open source, Retrofit.

Là lập trình viên, điều thú vị là bạn luôn có những thứ thực sự hay ho để tìm hiểu, những thứ hay ho có thể đến từ ngôn ngữ mà bạn chọn, từ người đồng nghiệp giỏi giang hoặc cũng có thể từ những người đang làm việc giống bạn, những chia sẻ, source code từ các expert, senior thực sự. Quả thật, ...

Là lập trình viên, điều thú vị là bạn luôn có những thứ thực sự hay ho để tìm hiểu, những thứ hay ho có thể đến từ ngôn ngữ mà bạn chọn, từ người đồng nghiệp giỏi giang hoặc cũng có thể từ những người đang làm việc giống bạn, những chia sẻ, source code từ các expert, senior thực sự. Quả thật, trong thế giới IT, bạn có thể không có đủ thời gian, đủ yêu cầu để áp dụng tất thảy những opensource được chia sẻ. Những opensource chính là những công cụ đắt lực nhất cho các bạn trong công việc, bạn có thể phải làm cả tá thứ loằng ngoằng, mất cả tuần, cả tháng đôi khi lại không hiệu quả, nhưng chỉ mất một ngày đọc tutorial, hướng dẫn sử dụng lib, và thử áp dụng vào project. Amazing!

Tuy nhiên, nếu chỉ dừng lại ở mức sử dụng nó, bạn chỉ nắm được bề nổi, chỉ nắm được 1 phần hay ho của nó. Bạn có bao giờ suy nghĩ và tự đặt những câu hỏi như "Tại sao họ lại viết thư viện tuyệt như thế ? Họ đã viết nó như thế nào? Liệu rằng sau này mình có thể viết được như thế?...". Và rồi những câu hỏi như thế sẽ thôi thúc bạn đọc source code của họ, nếu bản thân chưa hiểu, có thể research thêm trên mạng về cách viết code như thế, mình tin rằng, về sau bạn sẽ nắm được bản chất source code của thư viện (hoặc của ai đó) mà bạn đang xài một cách cặn kẽ hơn. Và đó thực sự là điều thú vị.

Lang mang một tý, mong muốn của mình chỉ tóm gọn trong 1 vài câu "Hãy cố gắng hiểu cách thư viện đang xài hoạt động như thế nào ? Nếu thấy bất cứ có điều gì kì dị, thú vị lúc xài thư viện, đó là lúc đục sâu vào code của thư viện và bắt đầu tìm hiểu".

Mình sẽ list ra một vài thư viện hay xài, và những điều thú vị, kì lạ khi mới dùng bạn có thể cảm thấy được ngay:

  • Glide, Picasso,...: Các thư viện về xử lý load ảnh. Điều thú vị ở đây là tại sao chúng lại tối ưu hay như vậy, vì sao khi bạn tự làm load ảnh, GC lại chạy liên tục, còn dùng thư viện, chỉ vài dòng code nhưng performance đã tăng lên đáng kể như vậy ?
  • Dagger 2: Quá vi diệu, chỉ vài config files, toàn bộ các đối tượng của bạn được tự động sinh ra dưới một đống generated files từ Dagger 2 và inject vào class mà bạn mong muốn. Và nếu đã dùng Dagger 2, mình cũng muốn bạn tìm hiểu thêm thêm về Annotation (chính là mấy cái @ ... gì đó trên đầu mỗi function) và cả Java Reflection.
  • Retrofit: Có vài thứ kì dị ở đây, tạo một interface với một vài mô tả đơn giản API, và tất nhiên bạn chẳng thể tạo instance từ interface đó (trong Java), bạn cũng chả tạo một class khác để implement interface này, và cũng chả có class nào được tự generated (giống kiểu Dagger) từ Retrofit source code. Thế nhưng bạn vẫn có thể sử dụng instance của interface này, gọi được các method của interfacemột cách ngon lành. Brillian, right?
  • Android ViewModel, LiveData (Android Jetpack): Khá thú vị, Google đã giúp chúng ta giải quyết hàng tá thứ mệt mỏi về memory leak và giữ data sống sót sau cú rotation một cách nhẹ nhàng nhất từ trước giờ cho android dev.
  • ReactNative: trên cả tuyệt vời, dùng code JavaScript để tạo một native app, và performance cũng tốt gần như là native. ...

Chỉ là một số ít, nhưng hy vọng là nó cũng giống những gì bạn đang thấy, những điều đó có thể kích thích sự tò mò từ bản thân bạn. Hãy dùng nó để có thêm một chút năng lượng tìm hiểu.

OK. Mục đích chính của mình đã hết, chỉ là mong muốn tạo một chút gì đó giúp mọi người tích cực học và tìm hiểu sâu bên trong source code mà bạn đang dùng. Đó cũng là cách học giúp tiến bộ khá nhiều.

Trong bài viết này mình sẽ cùng mọi người lướt qua thư viện Retrofit, ý tưởng và cách mà nó hoạt động (Mình chỉ lướt ở mức flow cơ bản thôi             </div>
            
            <div class=

0