Bạn muốn học Docker, tham khảo LearnDocker.online

Docker là một phần quan trọng trong web development hiện tại và nếu bạn muốn trở thành một senior về web development (hoặc cao hơn nữa) thì đây đúng là một mảnh ghép bạn cần.

Trước tiên, với các bạn chưa biết Docker thực sự là gì, hoặc chưa hiểu tại sao phải dùng nó, bạn có thể tham khảo tại đây.

https://aws.amazon.com/vi/docker/

Bản thân mình cũng từng phải dùng Docker khi mà chưa hiểu nó là gì, cấu tạo như nào, mục đích ra sao, vì đơn giản công việc cần nó. Lúc đó cài xong cũng chỉ hiểu nó giống như XAMPP (lol).

Nhưng càng về sau, kiến thức về nó càng cần nhiều và mình muốn học để làm chủ nó hơn là coi nó chỉ là một công cụ dev.

Và mình biết đến LearnDocker.online của @jufahr. Đây thực sự là một công cụ tuyệt vời để tiếp cận và dần làm chủ Docker. Nó bổ sung một loạt các bài giảng online bằng video rất trực quan, kết hợp với một số quiz nho nhỏ có độ khó từ dễ tới khó. Và tuyệt vời hơn nữa, nó hoàn toàn miễn phí.

Tất nhiên, để có thể theo học, bạn nên có kỹ năng nghe và hiểu tiếng Anh ở mức căn bản. Nhưng Jufahr nói khá chậm và dễ nghe nên mình nghĩ không khó để theo kịp tiến độ bài học.

Have fun!

Ghi chép về SOLID

Một trong những nguyên tắc nền tảng của coder – SOLID.

SOLID – Viết tắt từ các chữ cái đầu tiên của các nguyên tắc nền tảng cho thiết kế hướng đối tượng (OOP), bao gồm:

  • Single Responsibility Principle
  • Open – Closed Principle
  • Liskov Substitution Principle
  • Interface Segregation Principle
  • Dependency Inversion Principle

Áp dụng các nguyên tắc này giúp code dễ đọc hiểu, dễ maintain. Và nếu ai tham gia dự án đều hiểu về SOLID thì sẽ dễ dàng transfer hơn.

Mình sẽ đi sâu vào từng nguyên tắc để giải thích kỹ càng hơn.

1. Single Responsibility Principle

Mỗi một class chỉ nên tập trung vào giữ MỘT nhiệm vụ duy nhất

Nghe có vẻ như một “điều hiển nhiên” đúng không? Mỗi class sẽ tập trung vào một trách nhiệm/nhiệm vụ duy nhất sẽ khiến cho mọi thứ trở nên rõ ràng hơn.

Tuy nhiên đây lại là nguyên tắc mà các developer hay mắc phải nhất. Khi sửa đổi một class, thường thì chúng ta hay viết thêm các method hoặc property thêm để thoả mãn tính năng và thường làm cho class rắc rối thêm.

Trong trường hợp này, nếu các chức năng cần tạo có nhiệm vụ khác thì ta nên tạo class mới. Tuy có nhiều class hơn, nhưng mỗi class sẽ ngắn và tập trung vào 1 nhiệm vụ cụ thể, dẫn tới việc code và debug sẽ dễ dàng hơn, khả năng sinh bug ít hơn.

2. Open – Closed Principle

Có thể thoải mái mở rộng (extend) một class, nhưng không được sửa đổi nội dung của nó.

Nguyên tắc này bổ sung cho nguyên tắc số 1 ở trên.

Việc sửa đổi, thêm mới tính năng vào một chương trình đang chạy là điều rất dễ xảy ra. Nhưng để làm việc đó, chúng ta nên mở rộng class thay vì sửa đổi nội dung của nó. Việc làm này sẽ giúp code nhìn rõ ràng và dễ chỉnh sửa hơn.

3. Liskov Substitution Principle

Trong một chương trình, có thể thay thế class cha bằng class con mà không làm thay đổi tính đúng đắn của chương trình

4. Interface Segregation Principle

Nên tách các interface nhỏ và liên quan với chức năng thay vì viết một interface lớn.

Việc tách nhỏ các interface sẽ giúp sử dụng các interface hiệu quả hơn. Thay vì có 1 interface với 100 method thì ta nên tách thành nhiều interface hơn. Nó sẽ giúp code có khả năng dùng lại các interface được định nghĩa tốt hơn, dễ dàng quản lý và sử dụng.

5. Dependency Inversion Principle

Các module cấp cao không phụ thuộc vào module cấp thấp, cả hai nên phụ thuộc vào interface (abstraction).
Các class giao tiếp với nhau thông qua interface, chứ không thông qua implementation.

Khi các module giao tiếp với nhau thông qua interface, chúng ta có thể dễ dàng thay đổi các implementation mà không bị thay đổi tính đúng đắn của chương trình.

Ví dụ, để kết nối database, hệ thống sẽ phụ thuộc vào interface DatabaseConnection với các method connect/get/save… Khi cần thay đổi database từ mysql sang mongodb hoặc bất kỳ một CSDL nào khác, miễn là implementation kết nối tới CSDL mới được implement từ interface DatabaseConnection thì tính đúng đắn của chương trình sẽ được đảm bảo

Tạo mã Code Signing trên Windows 10

Chạy đoạn mã dưới đây trên Powershell

New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My `
>> -Subject "CN=<App Name>" `
>> -KeyAlgorithm RSA `
>> -KeyLength 2048 `
>> -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
>> -KeyExportPolicy Exportable `
>> -KeyUsage DigitalSignature `
>> -Type CodeSigningCert

10 vấn đề cần làm để mục tiêu Fullstack Web Developer không trở nên quá xa vời

  1. Tổng hợp lại kiến thức, có thể là kinh nghiệm từ trước tới giờ
  2. Học 1 framework frontend mới – Vue.JS
  3. Học 1 framework backend mới – Laravel
  4. Đổi OS sang sử dụng Linux 90% (Ubuntu) (10% Windows để chơi game muahaha…) (Bỏ vì đã cài Ubuntu subsytem trong Windows =)))
  5. Học thêm Javascript
  6. Học thêm NodeJS
  7. Học thêm MongoDB
  8. Học thêm Docker và ứng dụng (70%)
  9. Học thêm về bảo mật ứng dụng, bảo mật web
  10. Làm một ứng dụng có đầy đủ các phần đã học

Cập nhật: Nhiều phần đã thực hiện xong