이 강의는 단순히 "배달앱"을 만들기 위해 제작된 강의가 아닙니다! 절대 클론 코딩이 아니니 단순히 배달앱을 만드는 방법을 배우고 싶은 분에겐 적합하지 않은 강의일 수 있습니다. 배달앱 컨셉은 제가 전달하려는 프로그래밍 지식의 매개체 역할을 할뿐입니다. 어떤 앱이든 꼭 알아야하고 적용할 수 있는 지식을 담았으니 참고해주세요!
코드팩토리 Flutter 초급 강의에 비해 난이도가 매우 높습니다! 실전에 꼭 필요한 지식들을 담았으니 여러 번 반복해서 완전 내 것으로 만든다는 마인드로 수강해주세요. 100% 흡수하고 나면 당장 실무 투입이 가능한 개발자가 되리라고 자신합니다!
이번 프로젝트는 실제 서버 연동 실전감각을 키우기 위해 제가 직접 제작한 NestJS기반의 REST API 서버를 제공해드립니다. Swagger 서버 다큐멘테이션을 보면서 실전처럼 API 연동을 진행하며 주니어 개발자들이 알아야 할 필수 지식들을 익힙니다.
학습 내용 📚
1) Authentication (인증 로직)
현대에 가장 많이 사용되는 Token Authentication 중에서도 Refresh Token과 Access Token을 사용해서 인증을 진행하는 시스템을 공부합니다. Dio를 이용해서 자동으로 토큰을 갱신하는 방법도 학습합니다.
2) Pagination
Page 기반의 Pagination과 Cursor 기반의 Pagination 이론을 배운 후 Cursor Pagination을 OOP로 효율적으로 풀어볼 수 있는 방법에 대해 깊게 학습합니다.
3) JsonSerializable
JsonSerializable은 모델을 생성할때 JSON을 오브젝트로 Serialize하는 코드를 작성할 필요가 없게 만들어줍니다. JsonSerializable 기본 사용법과 Pagination과 연동한 Inheritance 적용법도 배워봅니다.
4) Retrofit
Retrofit은 Flutter의 Code Generation 중 가장 유용한 툴이고, REST API 매핑을 자동으로 해주며 JsonSerializable과 호흡이 매우 좋은 패키지입니다. Retrofit을 이용해서 모든 API 매핑을 진행합니다.
5) Riverpod 및 Cache 관리
Riverpod에 존재하는 모든 Provider들의 사용법을 배워보고 실전에 적용도 해봅니다. 추가적으로 여러 Provider를 동시에 관리하며 Cache를 최적화해서 관리하는 방법도 배워봅니다.
6) GoRouter
앱/웹에서 사용한 라우팅 라이브러리인 GoRouter는 Dynamic Link, Deep Link, Redirect, Refresh룰등 유용한 기능을 기본으로 제공해줍니다. 이를 통해 인증 시스템을 완벽히 구성해봅니다.
7) Debounce and Throttle
Debounce와 Throttle은 서버의 과부하및 앱의 최적화까지 생각해볼 수 있는 중요한 기술입니다. 이번 강의에서 Debounce및 Throttle의 적절한 사용 상황과 사용법을 배워봅니다.
8) Swagger
서버 개발자가 프론트엔드 개발자와 소통하기위해 가장 많이 사용하는 다큐멘테이션 툴인 Swagger를 사용해서 API 규격을 이해하고 프론트엔드 코드로 소화시키는 방법을 배웁니다.
9) Optimistic Response
Optimistic Response는 긍정적 응답을 예측해서 미리 캐시를 업데이트하는 기술입니다. 어떤 상황에 어떻게 적용하면 좋은지 이 강의에서 배워볼 수 있습니다.
소개합니다, 프로젝트 스크린! 🤸♀️
#1 스플래시 스크린
첫 앱 실행 시 필요한 인증/검증 로직과 라우팅 로직을 세팅합니다.
#2 로그인 페이지
로그인 스크린입니다.
#3 레스토랑 리스트 페이지
레스토랑 정보를 Pagination하는 홈스크린입니다. Pagination과 Throttle에 대해 배워보고 직접 실전에 적용해봅니다.
#4 레스토랑 상세페이지
레스토랑의 상세페이지로 주문할 음식을 선택할 수 있고, 아래로 스크롤하면 레스토랑 리뷰도 조회 가능합니다. Custom Scroll View를 이용해 여러 개의 Sliver List를 실전에 적용해봅니다.
#5 장바구니 페이지
선택한 음식을 확인할 수 있는 장바구니 스크린입니다. Optimistic Response와 Debounce 기능을 배워보고 적용해봅니다.
#6 음식 리스트 탭
음식들을 리스트로 조회할 수 있는 페이지입니다. Pagination 일반화 및 고급 캐시관리 기능을 배워봅니다.
#7 주문 리스트 랩
주문들을 조회할 수 있는 탭으로, Pagination 일반화를 해봅니다.
#8 프로필 탭
로그아웃 기능이 있는 프로필 탭입니다.
강의 한 마디 🎙
Flutter가 출시된 뒤로 수많은 크고 작은 프로젝트를 직접 경험해봤습니다. 그리고 최근에는 채용과 컨설팅의 목적으로 많은 인터뷰를 보면서 많은 프론트엔드 개발자들이 단순히 UI를 그려내는데 포커스를 과하게 맞춘다는 생각이 들었습니다. 물론 보기좋은 UI를 그려내는 것은 프론트엔드 개발자의 가장 중요한 스킬 중 하나입니다. 하지만 정확한 컴퓨터 공학적 이해도와 프로젝트를 갖추고 군더더기 없는 코드를 작성해 나가는 것 또한 그에 못지않게 중요합니다.
이번 강의는 실무 경험이 부족한 Flutter 개발자들이 코드를 작성할 때 원활한 협업과 유지관리의 관점에서 어떤 고민을 해야 하는지 학습할 수 있습니다. Flutter 초보강의와 다르게 이 강의는 하나의 프로젝트를 진행하며 중급 Flutter 개발자로서 꼭 알아야하는 지식과 좋은 코드 작성 방식에 집중합니다. 프로젝트의 중간마다 고의적으로 함정들을 심어두고 이를 극복해나가며 어떻게 더욱 좋은 코드를 작성할 수 있는지 마음으로 직접 느끼는데 집중을 했습니다. 주니어 수준의 Flutter 개발자를 실무에 투입이 가능한 수준까지 실력을 끌어올리는데 초점이 맞춰져있습니다. 실제 프로젝트에서 꼭 알고있어야하는 필수 지식인 Authentication 시스템, Refresh, Access Token 관리, 글로벌 상태관리, Pagination, Debounce와 Throttle 등을 한번에 실제 프로젝트에 적용해보며 공부합니다.
Must Have 코드팩토리의 플러터 프로그래밍 서적은 제가 오랜 기간 투자해서 직접 집필한 책입니다! 초급 강의와 곂치는 내용도 있고 초급강의에는 없는 Firebase 및 광고등에대한 강의도 있습니다! EBook이나 실물 서적을 좋아하시는 분들에게 추천드립니다! 서적은 교보문고, Yes24, 알라딘등 메이저 서점에서 만나 볼 수 있습니다! 아래 이미지를 클릭해서 이동해주세요!
Q&A 💬
Q. 코드팩토리 Flutter 초보강의를 꼭 수강해야하나요?
코드팩토리 Flutter 초보강의에 준하는 지식이 이미 있다면 추가로 수강할 필요는 없습니다. 하지만 코드팩토리 Flutter 초보강의를 수강했다는 가정하에 제작된 강의이기 때문에 이미 설명한 개념은 반복해서 설명하지 않습니다. 최소 코드팩토리 Flutter 초보강의에 준하는 지식이 없다면 따라오기 힘든 강의이니 초보 강의부터 수강해주세요!
Q. 배달앱을 제작하는 강의인가요?
진행하는 프로젝트의 컨셉은 배달앱이 맞습니다. 하지만 배달앱의 UI/UX나 기능의 플로우와 전혀 관련이 없는 강의입니다. "컨셉"만 지식을 전달하는 매개체로 사용할 뿐이고 주니어 Flutter 개발자가 중급 Flutter 개발자가 되기위해 꼭 알아야하는 보편적인 지식들을 습득하는 강의입니다. 단순히 "배달앱 제작법"을 위해서는 이 강의를 수강하지 마세요!
Q. 이 강의를 수강하면 어느정도 수준의 개발자가 될 수 있나요?
한마디로 말하면 당장 실무 투입이 가능한 수준이 된다고 생각합니다. 오랜 기간 동안 여러 프로젝트와 인터뷰를 봐오면서 Flutter 개발자가 꼭 알고왔으면 좋겠다고 생각한 지식들을 담았습니다.
강의에서 제가 제공해드리는 이미지들은 유료로 직접 구매한 이미지들이예요. 저는 창작물을 만들어 배포해드릴 수 있는 권리를 구매했지만 여러분들은 절대로다른 사람 또는 인터넷에 이미지를 배포하시면 안돼요! 저작권 위반으로 법적 문제가 생길 수 있으니 공부하는 용도 외로 이미지들을 사용하지 마세요.
(3) 질문하는 법
프로그래밍을 배우면서 정말 빠르게 실력을 늘릴 수 있는 법은 올바르게 정확한 질문을 하는 법을 깨우치는거예요. 프로그래밍의 특성상 코드의 전체를 다 봐주기 어려워요. 그러니 문제가 되는 위젯의 코드를 통째로 올린 후 "이거 안돼요!" 하시면 제가 답변을 해드리기 어려워요. 질문을 하실 때는, 밑의 3단계로 잘 정리해서 전달해주시면 훨씬 빠르게 소통하고 답변을 드릴 수 있어요!
1️⃣ 내가 생각했을때 어떤 식으로 작동이 되어야 하는지 2️⃣ 현재 어떻게 작동되는지 3️⃣ 정확한 코드의 위치와 어떤 문제가 생기는지 (예제까지 있으면👏)
Flutter, cảm ơn vì bài giảng tuyệt vời~
Có nhiều điều tôi thấy hối tiếc khi nghe bài giảng nên tôi đã viết chúng ra rất dài.
Bản tóm tắt -
Đây là một khóa học tuyệt vời để tạo ứng dụng bằng Flutter, nhưng bạn chưa hiểu rõ về Flutter?
-------------------------------------------------- ----
Tổng đánh giá khóa học
Nhìn vào tốc độ bạn viết mã rung, có vẻ như bạn đã làm rất nhiều công việc liên quan, nhưng so với điều đó, có vẻ như khả năng thiết kế dự án tổng thể, kinh nghiệm và kiến thức CNTT của bạn còn thiếu sót. Tất nhiên, tôi nghĩ người tìm việc và sinh viên nghe là đủ, nhưng đối với các nhà phát triển có một số kinh nghiệm, có những phần khái niệm này được giải thích không chính xác và tại sao dự án lại có cấu trúc như thế này? Tôi đã nghĩ về điều này rất nhiều.
Trong lúc nghe giảng, ban đầu tôi viết câu hỏi bằng cách đặt câu hỏi, nhưng tôi cảm thấy bài giảng sẽ không tiến triển nếu cứ viết thế này nên tôi bỏ qua bài giảng, ghi chép riêng. Trước hết những gì tôi viết ra như sau.
- Thiếu giải thích lý thuyết về mã thông báo hoặc phiên trong quá trình giải thích quá trình xác thực -> Tôi để lại điều này như một câu hỏi
- Thiếu giải thích chi tiết về cấu trúc dự án. Tôi muốn biết về những mẫu nào được sử dụng trong Flutter, nhưng không có bất kỳ lời giải thích nào, tôi đã tạo một kho lưu trữ và tạo một nhà cung cấp.
- Định dạng phản hồi của API máy chủ được cung cấp không khớp. Sẽ dễ dàng phát triển nếu mô hình phản hồi giống nhau bất kể có sử dụng phân trang hay không, nhưng những mô hình có phân trang được gói trong dữ liệu và gửi đi, còn những mô hình không phân trang chỉ được gửi đi đơn giản. Điều này rất bất tiện vì không thể. được quản lý phổ biến trên đám mây.
- Khi tạo thiết bị chặn Dio, lời giải thích là bạn có thể làm theo bằng cách nói 'Đó chỉ là một quy tắc~', nhưng lời giải thích tổng thể về phía mạng là không đầy đủ.
- Có đoạn giải thích bị bỏ qua, nói “Nếu bạn biết oop,,,” và có đoạn lại nói dù đó không phải là khái niệm về oop.
- Việc đặt tên không hoàn toàn chính xác. Trường URL hình ảnh tương tự cũng sử dụng hai trường imgUrl và imageUrl được sử dụng làm lạc đà như userModel, nhưng tôi không biết tại sao tên người dùng không được sử dụng làm tên người dùng.
- Càng về sau, số phần lặp lại các từ giống nhau càng tăng lên. Mình nghĩ là do chỉnh sửa video mà có những đoạn lặp lại những từ giống nhau... Xem rất khó chịu.
- Sau chương gorouter chúng ta đột ngột chuyển sang UerMeRepository. Trong bài giảng trước, UserModel không được tạo ra nhưng nó đã được tạo ra. Tôi nghĩ tôi đã bỏ lỡ bài giảng
...
Vì những nội dung trên, thay vì thực sự nghe giảng nên khi mới bắt đầu bài giảng, tôi đã dừng bài giảng và xem bài giảng bằng cách trực tiếp thực hiện và so sánh, thực tế tôi có cảm giác rằng đoạn mã tham khảo tôi nhìn thấy trên github hoặc stackoverflow là chính xác. gọn gàng hơn nhiều và có cấu trúc tốt hơn.(+ Tôi cũng đã mua và đọc cuốn sách mình viết, nhưng tôi có cảm giác như mình chưa từng trải qua một dự án nào từ một công ty lớn.)
Tôi không có xu hướng để lại nhận xét trong khi nghe bài giảng, nhưng tôi nghe mọi người nói những điều như thế này nhiều lần trong các bài giảng đến nỗi tôi phải viết một bài.
"Điều này khác nhau đối với từng dự án, nhóm và cá nhân, vì vậy nó có thể được viết khác với mã này."
"Chúng ta không thể làm như thế này được sao? Nếu bạn nói vậy thì tôi chẳng còn gì để nói”.
Anh ấy nói rất nhiều điều mang tính phòng thủ về việc tắc bóng, v.v., nhưng từ góc độ nghe bài giảng, nó thực sự nghe có vẻ tiêu cực. Nếu tôi có kinh nghiệm với nhiều dự án khác nhau, tôi có thể giải thích rằng có cách này và cách kia trong khi giải thích nhiều ví dụ khác nhau, nhưng tôi không thể làm điều đó, nên có vẻ như tôi đang nói điều này. Tôi nghĩ sẽ tốt hơn nếu bạn không đề cập đến nó.
Ngoài ra, nhiều người nói: “Tôi sẽ kể cho bạn nghe mọi chuyện vì đây là bài giảng được bán lấy tiền”, nhưng lời giải thích lại rất kém. Có vẻ như việc xem mã nội bộ trong khi nghe bài giảng mất nhiều thời gian hơn. Theo ý kiến của tôi, nếu bạn ở trình độ trung cấp, bạn sẽ được giải thích cách mã hoạt động nội bộ, nhưng đó là một bài giảng mà bạn chỉ sử dụng những gì có ở đó mà không biết nó hoạt động nội bộ như thế nào.
Tôi hy vọng rằng trong các bài giảng tiếp theo, các ví dụ về các dự án khác nhau và giải thích về logic bên trong sẽ được bổ sung.
Xin chào! Chúng tôi xin lỗi vì không thể đáp ứng những lo lắng mà bạn cảm thấy. Tôi cũng phản ánh rất nhiều về những đánh giá chân thành về khóa học của bạn! Chúng tôi sẽ cho bạn thấy sự tiến bộ hơn nữa trong tương lai. Cảm ơn các bạn đã chăm chỉ lắng nghe bài giảng. Cảm ơn!
Tôi cũng đang học (mới 10%) và đọc đánh giá này thấy rất đồng cảm.
Khóa học này có vẻ tốt cho người tìm việc.
Thường thì tôi viết đánh giá khi hoàn tất, nhưng tôi cũng như người này, có lẽ chỉ cho khoảng 3 điểm.
Tôi không muốn làm giảm điểm khóa học, nên coi bình luận này là đánh giá luôn.
Đây thực sự là một bài giảng gần như hoàn hảo. Mặc dù tên khóa học là [Trung cấp] nhưng nội dung của khóa học rất chắc chắn đến mức có thể gọi nó là [Trung cấp-Nâng cao] một cách an toàn. Vì hầu hết nội dung đều có thể áp dụng ngay vào thực tế nên có thể nói đây là một khóa học hoàn hảo dành cho các nhà phát triển Flutter đang làm việc cũng như những người đang chuẩn bị đi làm.
Thành thật mà nói, thật lãng phí tiền bạc khi có thể học một khóa học chất lượng như vậy với mức giá này. Không chỉ tôi, người đã phát triển hơn 15 năm, mà bất cứ ai đã làm việc trong lĩnh vực này ít nhất 1-2 năm chắc cũng hiểu ý tôi. Nếu người cung cấp thông tin chi tiết như vậy đang làm việc cho một công ty nào đó, tôi sẽ chân thành khuyên: “Cho dù bạn có đưa toàn bộ tiền lương của mình cho người đó thì cũng chỉ cần học trong một năm thôi”.
Không có sự phát triển nào nhanh hơn việc học hỏi từ một game bắn súng giỏi. Để thực sự phát triển vững chắc với tư cách là một nhà phát triển, bạn chắc chắn cần có thái độ và niềm đam mê của một người học hỏi, nhưng sẽ còn tốt hơn nếu một cựu chiến binh đã đi trên con đường đó hướng dẫn bạn đến lộ trình tối ưu.
Flutter đã gây ồn ào được vài năm nay nhưng vẫn thiếu rất nhiều nhân tài từ cấp trung đến cấp cao. Tôi nghĩ rằng nếu bạn tham gia khóa học này nhiều lần và tự mình nắm vững mọi thứ, bạn sẽ có thể làm việc vui vẻ với những điều kiện thực sự tốt. Kỹ năng của bạn sẽ được cải thiện đến mức bạn có thể dễ dàng xử lý không chỉ các dự án của công ty mà còn cả các ứng dụng bạn muốn tạo.
Để học Flutter, tôi mua hầu hết sách bán ở hiệu sách và cũng học được rất nhiều về clone code trực tuyến. Tôi cũng đã tham gia một bài giảng về một nền tảng khác giải thích từng bước về Flutter. Nhưng đây là điều hữu ích nhất. Đó là thiết thực nhất và tiết kiệm chi phí nhất. Tôi chân thành khuyên bạn nên tìm hiểu điều này trước và lấp đầy những khoảng trống.
Tiếp theo, tôi xin bày tỏ lòng biết ơn chân thành đến người hướng dẫn và tôi mong chờ một bài giảng [nâng cao] khác trong tương lai.
Tôi bắt đầu học Flutter bằng cách nghe bài giảng Flutter trên một trang web khác. Tôi sẽ không đề cập đến trang web hay người hướng dẫn, nhưng bây giờ khi nghĩ lại, tôi chỉ có thể nói rằng trình độ của người hướng dẫn rất thấp.
Tôi đã có rất nhiều phàn nàn khi nghe bài giảng đó. Có cảm giác như tôi chỉ đang luyện tập kỹ năng đánh bóng của mình và câu trả lời cho các câu hỏi của tôi không hay chút nào. Tôi đã tham dự tất cả các bài giảng nhưng điều tôi thu được là kỹ năng đánh bóng tiếng Anh. Nó không hơn, không kém.
Sau đó, tôi tự mình tìm kiếm trên Google, đăng ký dạy kèm 1:1 tại Sum* và thử thực hiện một dự án cá nhân. Nếu bạn nhìn vào đoạn mã bây giờ, nó cẩu thả đến mức vô nghĩa và khó hiểu đến mức bạn tự hỏi tại sao nó lại được viết như thế này. Cuối cùng, tôi chỉ tiêu tiền mà không học đàng hoàng.
Vì tiến độ dự án cá nhân của tôi quá chậm nên tôi bắt đầu tìm kiếm các lớp khác và thứ tôi tìm thấy là lớp của Code Factory. Vào thời điểm đó, tôi đang tranh luận giữa bài giảng của Code Factory và một bài giảng khác (vì có hai bài giảng của Kopack... Tôi hơi lo lắng...hahahaha), nhưng tôi không thể không nghĩ rằng mình thực sự may mắn khi được đã nghe bài giảng của Kopack vào thời điểm đó.
Ngay cả khi tôi đang tham gia một bài giảng về phi tiêu kéo dài 4 giờ hoặc một bài giảng dành cho người mới bắt đầu, tôi vẫn gặp khó khăn khi sử dụng Windows do tốc độ xây dựng hoặc lỗi cài đặt. Ngoài ra, tôi chưa bao giờ chán nản với một bài giảng và chưa bao giờ cảm thấy lo lắng. Hiện tại tôi đang sử dụng MacBook nên nó rất tuyệt haha.
Tôi đã tham gia một bài giảng dành cho người mới bắt đầu như vậy, và thành thật mà nói, có rất nhiều phần tôi không thực sự hiểu nên tôi đã đặt một số câu hỏi và tìm kiếm rất nhiều trên Google để tìm ra cách tiếp tục. Đồng thời, tôi cũng đang thay đổi dự án cá nhân của mình và thực hiện lại nó.
Ngay sau khi tham gia lớp trung cấp, tôi nhận ra rằng kỹ năng của mình đã thực sự tiến bộ sau khi tham gia lớp sơ cấp.
Khi tôi mới tham gia bài giảng dành cho người mới bắt đầu, tôi đã bận rộn sao chép, so sánh, hiểu và làm theo tất cả các mã, nhưng khi tôi thấy rằng tôi đã có thể theo dõi phần đầu của bài giảng trung cấp, các phần cơ bản của việc tạo giao diện người dùng và phần màn hình, chỉ cần nghe giảng mà không nhìn vào màn hình, tôi đã nhận ra rằng mình không biết phải làm gì! Bài giảng dành cho người mới bắt đầu thực sự hiệu quả! (Bây giờ tôi nghĩ về điều đó, Future/Stream Builder là một khái niệm mà tôi không biết, nhưng bây giờ tôi tình cờ đưa nó vào dự án cá nhân của mình.)
Vẫn còn rất nhiều tài liệu và tôi thậm chí còn chưa bắt đầu học những phần khó, nhưng tôi tin chắc rằng nếu tôi tin tưởng và làm theo người hướng dẫn cho các bài giảng trình độ trung cấp, tôi sẽ lên cấp theo một cách mới mà tôi thậm chí còn không biết tôi đang theo đuổi. Mặc dù đây là phần đầu của bài giảng trình độ trung cấp, nhưng tôi sẽ theo sát và không bỏ cuộc cho đến cuối và tôi sẽ trở thành nhà phát triển sinh viên của Kopack, người có thể tự tạo mã sạch!
Bài giảng mà tôi hằng mong chờ cuối cùng cũng đã xuất hiện. Tôi bắt đầu bài giảng ngay khi nó ra mắt, và nội dung rất nhiều thông tin đáng để chờ đợi.
Tôi là một nhà phát triển Android đang làm việc và kể từ cuối năm nay, tôi phải thực hiện liên tiếp một số dự án nhỏ với Flutter, vì vậy tôi đã tham gia các bài giảng về Dart và các bài giảng dành cho người mới bắt đầu sử dụng Flutter cũng như làm việc trên các dự án cá nhân. Tôi đã tham gia các lớp trung cấp Flutter khác vì có một số thứ tôi không thể tự mình làm được, nhưng có quá nhiều thứ khiến tôi thất vọng về cấu trúc và cấp độ của các lớp.
May mắn thay, bài giảng trình độ trung cấp đã được tải lên ngay trước khi tôi bắt đầu dự án nên tôi nhanh chóng nghe nó. Nội dung được tổ chức rất tốt và sự chuẩn bị cho bài giảng cũng rất hoàn hảo. Tôi đang thắc mắc khi nào các bài giảng trình độ trung cấp sẽ được đăng trên bảng tin, và bạn nói rằng sẽ cần thời gian để chuẩn bị kỹ lưỡng hơn, và tôi nghĩ bạn đã chuẩn bị rất tốt, điều đó cũng có lý.
Tôi viết bài này không chút do dự vì lòng biết ơn, nhưng nếu có ai nhìn thấy điều này và lo lắng trước khi tham gia khóa học, hãy nhớ đăng ký ngay!!
Tôi bắt đầu nghe ở trình độ sơ cấp và hiện đang nghe ở trình độ trung cấp.
Tôi đã bối rối khi đột nhiên bắt đầu sử dụng Flutter.
Tôi rất biết ơn vì bạn đã trình bày mọi thứ từ những điều cơ bản, vì vậy tôi không biết phải nói lời cảm ơn như thế nào.!!
Mình cũng sẽ đợi những bài giảng nâng cao><!