Head First Design Patterns

headfirst_pattern
Tôi bắt đầu tự hỏi rằng quyển Head First Design Patterns nên được đặt tên là Ass Backwards Design Patterns. Đây là một đoạn trích từ trang 594-595 của quyển sách 629 trang này:
Đầu tiên, khi bạn thiết kế hãy giải quyết các vấn đề một cách đơn giản nhất. Mục tiêu của bạn nên đơn giản thay vì tự nghĩ “làm cách nào để ứng dụng một pattern vào bài toán.”. Đừng nghĩ bạn không phải là một lập trình viên xịn nếu bạn không sử dụng các pattern để giải quyết các vấn đề. Các lập trình viên khác sẽ rất tôn trọng và đánh giá cao sự đơn giản trong thiết kế của bạn. Thật sự thì, đôi lúc cách tốt nhất để giữ thiết kế của bạn đơn giản và hiệu quả là sử dụng pattern.
Không ai nói lúc nào thì nên bỏ sử dụng pattern, bạn sẽ nghĩ rằng thật là báng bổ! Không, chúng ta đều đã trưởng thành, chúng ta phải chấp nhận nó. Thế thì khi nào bạn nên bỏ đi một pattern? Khi hệ thống của bạn trở nên rắc rối và sự mềm dẻo (scalable) mà bạn tạo nên là không cần thiết. Nói cách khác, một giải pháp đơn giản không cần pattern sẽ tốt hơn.
Design patterns rất mạnh mẽ, và chúng ta có thể dễ dàng thấy cách chúng được sử dụng trong các thiết kế và lập trình viên thường sẽ thích tạo ra các kiến trúc thiết kế mà ở đó sẵn sàng cho các thay đổi trong mọi trường hợp.
Nếu bạn không đồng ý với việc tạm bợ, nếu bạn cần hỗ trợ cho việc thiết kế, hãy sử dụng pattern để giải quyết các thay đổi. Tuy nhiên, nếu nguyên nhân chỉ là muốn giải quyết các giả định, đừng dùng pattern, điều đó chỉ làm hệ thống của bạn thêm rắc rối, và bạn có thể chẳng cần đến nó.
Mẹ cha ơi, suốt 593 trang trước đó thì rao giảng ra rả về các pattern, sau đó thì lược lại bằng một hướng dẫn như vậy ở phần cuối của quyển sách thật là thiếu trách nhiệm. Lời khuyên kiểu này phải để ở những trang đầu tiên với cỡ chứ 72…
Các lập trình viên mới vào nghề sẽ không bao giờ gặp pattern họ không thích, khuyến khích họ sử dụng pattern giống như việc thêm dầu vào lửa, và chưa nói đến việc cuốn sách thật sự làm gì, trang 597 chỉ cách người mới nên lạm dụng các pattern.
Các lập trình viên mới vào nghề nên sử dụng pattern ở mọi nơi, điều đó rất tốt, họ sẽ có rất nhiều kinh nghiệm với việc sử dụng các pattern trong thực tế. Họ cũng phải nghĩ rằng, dùng pattern càng nhiều, design của họ sẽ ngày một tốt. Người mới vào nghề sẽ học được rằng, tất cả các design nên đơn giản nhất có thể, sự phức tạp của pattern chỉ nên sử dụng ở nơi chúng cần ứng dụng để có thể mở rộng được.
Bạn có thật sự muốn một junior dev sử dụng pattern ở mọi nơi? Điều đó thật sự thì an toàn giống như việc khuyến khích họ thử dùng cưa xích vậy. Cách tốt nhất để học viết code đơn giản là viết code đơn giản! Pattern là một dạng lằng nhằng, phức tạp và nên bỏ qua cho đến khi chúng thực sự cần thiết. Đó là điều đầu tiên người mới cần học, không phải là điều cuối cùng.
Quyển sách không chỉ có điều đó là tệ, bạn có biết cô gái ở bìa quyển sách chỉ ra 1 điều khủng khiếp về 2 mặt cuộc sống? Yep, học sinh ban ngày và vũ nữ buổi tối. Hoặc, có thể không phải…
Lời người dịch:
Wow, đọc xong bài báo của bác Jeff, tớ cũng hơi giật mình, bác này đanh đá thật, tuy nhiên cũng có ý đúng trong bài viết :). Thực tế thì tớ đã đọc quyển này 2 lần, lần đầu là khi bắt đầu học lập trình enterprise, để nói thực, thì tớ không hiểu nhiều và do kiểu học có phần “xôi thịt” nên không vào đầu được mấy, chưa kể lúc đó tớ chưa code nhiều, kinh nghiệm thực tế ít nên đọc một số principle của quyển sách không hiểu được bản chất và chỉ khấn như đọc kinh vậy thôi chứ không ngấm. Gần đây tớ có đọc lại một cách chậm chậm thì hoá ra trong quyển sách có nhiều đoạn đã inject các principal như SOLID, DRY,… có chăng người đọc nếu có nền về những thứ đó thì sẽ nhanh hơn.
Vậy bác Jeff viết có đúng không, theo tớ thì cũng đúng, bạn nên có một chút kinh nghiệm rồi thì hẵng nghĩ tới design pattern, design pattern không đơn giản như những gì quyển sách mang đến.
Tuy nhiên, phải nói tới điểm cộng tuyệt vời của chuỗi sách Head First là cách xây dựng, đưa đẩy rất tốt, giúp người đọc hiểu dễ hơn về các vấn đề. Chẳng hạn, người viết đã xây dựng từng bước, từ lúc đầu tiên khi bắt đầu xử lý problem cho tới từng bước brain storming và xây dựng pattern, áp dụng nó vào thực tế bài toán…
Vậy, tớ nghĩ khác với bác Jeff chút, người mới học Java cũng nên đọc quyển này, nhưng đọc để biết về pattern và để quên (đừng vội áp dụng vào bài toán thực tế sớm), sau đó khi có đủ kinh nghiệm lập trình, hãy quay lại đọc và ngẫm nghĩ, kết hợp với việc đọc những quyển khác như:
  • Design Patterns : Elements of Reusable Object-Oriented Software
  • Patterns of Enterprise Application Architecture
  • Design Patterns Explained

Sau đó áp dụng thử với công việc của mình và tiếp tục ngấm dần và ngộ dần :). Đây không phải là chuyện một hai ngày đâu, hãy cứ yên tâm là không vội được.

Vì chặng đường làm 1 software developer không hề đơn giản, và chặng đường để trở thành 1 software architect giỏi thậm chí còn gian nan hơn rất nhiều 🙂

Basic steps of MySQL on OS X

Thực ra mình vẫn hay tự nhận mình là DBA hết thời, cũng có thời gian ngắn ngắn theo cái nghề bạc bẽo đó, mình làm chủ yếu với Oracle, MySQL thì cũng đã dùng nhưng thường chẳng bao giờ nhớ kỹ từ cách config cho tới cú pháp câu lệnh để vận hành.

Mấy hôm nay định làm cái project nhỏ ở nhà, ngồi config cho MySQL chạy như ý quả thực là… mất nhiều thời gian hơn mình nghĩ, mất gần 2 tối (Một phần vì mình còn lạ lẫm với MySQL trên Mac). Thôi thì cẩn tắc vô áy náy, note lại trong blog luôn cho dễ follow nếu lần sau có cài lại.

Bước 1: Download MySQL từ trang chủ của MySQL here

Bước 2: Install Package như các app khác.

Sau bước này, bạn đừng cố gắng tìm MySQL trong màn hình quản lý app. Đơn giản là vì nó sẽ nhảy luôn vào System Preference.

Screen Shot 2015-10-07 at 11.46.00 PM

Bấm vào MySQL sẽ có đoạn quản lý start/stop MySQL server. Ngoài ra mình có thử start bằng lệnh trong ./mysql/bin như bình thường nhưng toàn báo lỗi, nếu các bạn thử được thì giải thích giúp mình nhé :).

Kết thúc giai đoạn install, tiếp theo là làm thế nào để đăng nhập với root. Mình loay hoay mãi chán chê không làm thế nào để đăng nhập bằng root sau khi start MySQL, thường thì nó sẽ báo lỗi như sau

Screen Shot 2015-10-07 at 11.49.54 PM

Sau một hồi hỏi tiến sỹ Google thì giải pháp như sau

Step 1: Stop server mysql sử dụng lệnh sau

sudo /usr/local/mysql/support-files/mysql.server stop

Step 2: Khởi động MySQL trong chế độ safe mode

sudo mysqld_safe –skip-grant-tables

Step 3: Mở một tab khác trong terminal và gõ lệnh

./mysql -u root

Kỳ diệu chưa, giờ bạn đã ở trong user root của MySQL rồi, giờ là set password cho nó thôi

Step 4: Set password cho user root

 UPDATE mysql.user SET Password=PASSWORD(‘password’) WHERE User=’root’;

FLUSH PRIVILEGES;

/q

Step 5: Start MySQL server

sudo /usr/local/mysql/support-files/mysql.server start

Done, giờ bạn có thể đăng nhập vào user root của MySQL sử dụng password mà bạn vừa dùng ở trên.

Hi vọng có thể giúp được những người cùng cảnh ngộ với mình 🙂

 

Updated: Post này viết khi mình mới sử dụng Mac và chưa biết tới homebrew, nếu dùng brew thì chỉ cần gõ 1 lệnh là xong 🙂

brew install mysql 5.1.52

Ai chưa biết về homebrew thì nên đọc, tài liệu rất nhiều trên mạng, dễ sử dụng và tiện lợi vô cùng 🙂