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 🙂

Advertisements

Khi ta cất tiếng hát

‘Cause when the children sing
Then the new world begins

White Lion – When the children cry

Thực ra là tôi đã viết gần xong 1 bài viết kỹ thuật, cụ thể là về thiết kế phần mềm, nhưng đọc lại thì thấy không thích và thấy chưa đủ sâu, nên tôi xoá đi và chuyển sang một chủ đề khác. Những thứ chưa đủ, chưa đến thì không nên được phổ biến…

Con người khác biệt với các loài khác có lẽ ở chỗ biết cảm nhận được cái đẹp, cái đẹp của hình ảnh tạo nên mỹ thuật, cái đẹp của chuyển động, của khung hình, của lời thoại tạo nên điện ảnh, còn cái đẹp của giai điệu thì tạo nên âm nhạc. Qua âm nhạc, con người thể hiện được tâm hồn mình, bộc lộ được những thứ mà lời nói suông không diễn tả được. Vì thế mà khi vui người ta hát, khi buồn người ta hát, khi chán nản thất vọng người ta hát mà kể cả lúc tuyệt vọng người ta cũng hát, giai điệu lúc đó chính là lời người muốn nói rồi.

Nói vậy, hiện giờ chúng ta – dân tộc Việt Nam đang hát bài hát gì?

Ở trên tôi nói còn thiếu, hồi nhỏ tôi thường hát khi đi vào những ngõ tối, hoặc khi ở một mình vì chị tôi nói rằng ma sợ tiếng hát (hồi nhỏ tôi sợ ma). Đúng, chúng ta hát cả khi chúng ta đang sợ nữa.

Bỏ qua những chương trình ca nhạc tạp kỹ thập cẩm trên truyền hình, bỏ qua những câu hát vất vưởng trên đường để mưu sinh kiếm sống,… chắc cả dân tộc chúng ta đang cùng cất tiếng hát, hát để quên đi nỗi sợ của chính mình, của cả dân tộc.

Đất nước phát triển, mặt bằng xã hội về giáo dục, về kinh tế được nâng cao, cơ hội được tiếp xúc với thông tin tăng lên, khả năng suy luận tốt hơn khiến người dân hiểu ra rất nhiều vấn đề mà cách đây vài chục năm họ thậm chí không có cơ hội hoặc chưa từng nghĩ đến (vì đói, vì mải mê lo toan cuộc sống,…).

Đó là nợ công tăng cao, là vỡ quỹ bảo hiểm, là tham nhũng tràn lan, là đấu đá quyền lực, là mua quan bán chức, là giao thông hỗn loạn, là giáo dục xuống cấp, là văn hoá xập xệ, là ô nhiễm môi trường, là đủ thứ là…

Tất cả có thể là tin đồn, nhưng cũng có thể là thật!

Vậy hãy hát lên đi dân tộc tôi, vì khi chúng ta còn cất tiếng hát thì ngày mai sẽ còn đến và khi ngày mai còn đến thì hi vọng còn đến.

How are you both so happy?

Can I tell him our secret? Because we’re very very stupid!

(IceAge 4)

Có những ngày như thế

Friendship is everything. Friendship is more than talent. It is more than the government. It is almost the equal of family.

Suốt 1 tuần liền tớ mơ về cô bạn gái cũ cấp 3. Quả thực là kỳ lạ vì ngày nào tớ làm hùng hục ở chỗ làm, tối về lại code nốt cái dự án đang đóng, đầu óc mệt mỏi đến tê cứng. Không hiểu còn chỗ nào cho cô bạn gái ngày xưa nữa??? Tớ cứ nghĩ đi nghĩ lại tại sao và chợt nhận thấy rằng có quá nhiều ảo ảnh tưởng chừng đã quên vẫn sẽ còn theo đuổi mình lâu dài như cô bạn kia vậy :).

Kệ, cuộc sống là thế mà – c’est la vie, thế mới vui 😀

Quần quật cả ngày những code, những review, những ticket rồi họp hành đủ cả. Tớ đã bỏ 2 tuần liền chỉ quanh đi quẩn lại với công việc refactor code cho hợp ý anh lead và ticket thì đã trễ hẹn đúng 1 tuần rồi, anh em trong team nhìn mình ngao ngán bảo khổ anh quá. 3 rưỡi chiều anh lead gật đầu cho merge, cảm giác như kiểu bỏ được vài tấn đá khỏi lưng. Sau đấy thì cảm giác các ticket khác được xử lý chỉ trong vài giây và ngày hết nhanh thật là nhanh.

Ừ, thì vì cuộc sống là thế mà :).

Chiều tối, rủ thằng bạn thân làm cốc bia, hai thằng nói đủ thứ chuyện, từ vợ con đến công việc… nói chung đủ thứ chuyện. Đang ngồi tán chuyện nó thốt: “Tao với vợ tao thấy mày trông giống thằng T trong phim SCVMC lắm” làm mình tý sặc ngụm bia tướng =..=!. Nếu có nhân vật nào mình ít muốn bị so sánh nhất, chắc chỉ có anh chàng lởm khởm trong bộ phim đấy. Thôi, chắc nó khen mình đẹp trai : ))). Bia vẫn ngon và buổi chiều gặp bạn thì vẫn vui.

Cuộc sống, nó vẫn luôn là thế mà.

Tối muộn ngồi lơ vơ fix được 1 bug to trong cái project đang nhận, hi vọng sẽ đóng trong tuần này để sớm có Bác Hồ về thăm. Muốn làm freelancer thì không được lười biếng, tự hỏi sau dự án này sẽ deal được cái nào mới nữa đây :).

Vì dòng cuộc sống vẫn trôi…

Viết thay cho note trên facebook đầy thị phi mà tôi đã quá chán ngán 🙂

Nóng đầu hè

A bad manager can take good staff and destroy it, causing the best employee to flee and the remainder to lose all motivation

Hà Nội một ngày đầu tháng 6,

download.jpeg

Thầy giáo tiếng Anh của tớ là người Canada, tên là Rob, Rob mới sang Việt Nam được hơn nửa năm và vẫn còn đang lọ mọ tìm hiểu về Hà Nội (anh già vẫn chưa đi lanh quanh các vùng khác). Hôm nay đi học, tớ hỏi “Mày thấy thời tiết nóng không?”, anh già bảo “Trời đất thiên địa ơi, tao chưa bao giờ nghĩ tao sẽ ở một cái nơi nóng đến thế này. Cái chỗ nóng nhất mà tao đã ở nhiệt độ nó chỉ ở ngưỡng 34 độ, lúc đấy tao tưởng tao chết đến nơi rồi. Thế mà mày thấy không, hôm qua 40 độ, tao vẫn đang nhăn nhở ở đây này”, xong gã nhăn nhở cái mặt.

Hà Nội Nóng!

download (1).jpeg

Nhiệt độ cao nhất của mùa hè miền Bắc, đã có lúc chỉ xấp xỉ 36 độ, và Hà Nội thì vẫn ngập trong màu xanh của cây cối, nhà đa phần là nhà mái ngói, đường thông thoáng với đa phần xe đạp, thỉnh thoảng mới có vài chiếc ô tô, người ta chống nắng bằng những chiếc quạt giấy chạy cơm. Hà Nội đã từng có lúc nóng rất dịu dàng.

cuoc-thi-ha-noi-xanh-sach-dep-2016-04_resize.jpg

Giờ thì hãy quên cái ngày xưa cũ đó đi, Hà Nội là nhà cao tầng nhan nhản, ao hồ tiện đâu lấp đó, cây xanh chặt bớt, người và xe chen nhau trong tất cả các khung giờ, điều hoà ro ro khắp chốn… Bỏ qua mấy vấn đề dễ gây nhầm lẫn và mị dân như kiểu “Global warming”, bỏ qua lý lẽ rằng nóng vì mùa hè nó phải thế. Rõ ràng, Hà Nội đã nóng hơn vì cách quy hoạch kém cỏi của rất nhiều thế hệ lãnh đạo với tư tưởng chụp giật, vụ mùa. Thế hệ thanh niên chúng tôi hoàn toàn có thể đổ lỗi lên đầu những bậc đi trước về khả năng qui hoạch đô thị, phát triển thành phố, mỉa mai thay, tất cả đã hạ cánh an toàn và tôi đoán, không phải chịu cái sự khổ sở vì nóng nực mà họ phần nào đã gián tiếp gây ra.

Hồi bé, xem phim nước ngoài, chỉ mơ đất nước phát triển, nhà cao tầng khắp nơi, ô tô xe máy khắp chốn. Giờ lớn, đơn giản, chỉ mong đâu đâu Hà Nội cũng là cây, nhà thấp thôi, và dân cư giãn bớt, trẻ con có công viên để chơi, người lớn có bóng mát để đàm đạo, nghỉ ngơi nhìn cuộc đời.

Có những ước mơ dẫu biết nó là không thể trở thành sự thật, sao người ta cứ mơ hoài!

Ai trả lại cho tôi cái Hà Nội xưa cũ…

Hà Nội, một ngày đã bớt nóng.

Ảnh minh hoạ được lấy từ english.vov.com, vietnamnet.vn, flickr.com và design.vn

 

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 🙂

Đôi điều về CV cho các bạn sinh viên

Mình mới phải thức đến 4h sáng để giúp đứa em ruột làm CV (đại khái là ngồi đợi nó làm xong comment, cứ thế, cứ thế), em ruột mình đang học năm thứ 4 trường Mỹ thuật và giờ nó mới bắt đầu quan tâm đến việc đi làm.

Vấn đề nằm ở chỗ, hoá ra em mình rất lơ mơ và thiếu quan tâm đến những thứ vô cùng đơn giản, cụ thể là cái CV và application letter. Mình tin là nhiều bạn sinh viên cũng như vậy (bản thân mình trước đây cũng thế), ATSM và quên mất rằng mình đang ở đâu, đi xin việc gửi cho người ta 1 cái CV méo mó, thừa thừa thiếu thiếu cộng với vài chữ đại khái cho có. Mình ghét nhất kiểu đấy, dù giỏi đến mấy mình cũng sẽ tống sớm vào sọt rác.

Vậy tại sao phải quan tâm và đầu tư nghiêm túc cho CV của mình?

1. CV là vòng đầu tiên trong quá trình xin việc của bạn

Bạn rất giỏi chuyên môn, bạn là sinh viên xuất sắc, bạn hiểu sâu về các vấn đề và luôn có những suy nghĩ nhạy bén, bạn luôn tự tin khi phải đối mặt với các vấn đề khó và sẵn sàng cho những buổi phỏng vấn căng thẳng. Hãy tạm quên những điều đó đi, quá trình xin việc được bắt đầu từ vòng xét hồ sơ hay CV của bạn, dù bạn có là một người tuyệt hảo đến mấy đi chăng nữa nhưng CV của bạn nhôm nhoam, không nêu bật được thành tích, khả năng của bạn thì điểm đến tiếp theo của CV sẽ là sọt rác hoặc máy huỷ tài liệu, còn điểm đến tiếp theo của bạn sẽ là một chỗ gửi xe của một công ty khác.

2. CV thể hiện khả năng tư duy, kỹ năng trình bày của bạn

Bạn vẫn nhớ khi đi học, thầy cô thường hướng dẫn chúng ta trình bày bài làm rõ ràng, sạch sẽ??? Thực ra nó không chỉ liên quan đến vấn đề về thị giác, nó thể hiện cách tư duy của bạn. Nếu bạn là một người có tư duy rõ ràng, gần như chắc chắn khả năng trình bày của bạn sẽ tốt hơn rất nhiều những người khác không có kỹ năng này. Một CV với cách trình bày rõ ràng, nêu bật những điểm cần nêu (skills, experiences, awards) sẽ ngay lập tức tạo ấn tượng tốt cho người tuyển dụng. Chưa kể quay lại vấn đề thị giác, với mình, mình thích những CV đơn giản, ngắn gọn và ấn tượng, những CV này khiến mình thật sự tò mò với ứng viên, và dĩ nhiên, đó là một điểm cộng tuyệt vời cho người xin việc :).

3. CV là thứ bạn gây ấn tượng đầu tiên cho nhà tuyển dụng

Như trên đã nói, với các CV gây được ấn tượng tốt cho mình, khiến mình tò mò về người xin việc, bản thân đó là một lợi thế rất lớn trước vòng phỏng vấn. Vì thế trong CV, bạn nên có những điểm nhấn khiến người tuyển dụng thấy thích thú với mình.

Chẳng hạn, nếu bạn là lập trình viên, hãy cho nhà tuyển dụng đường dẫn tới github của mình, nơi họ có thể nhìn thấy những dự án mà bạn đang làm và xem ngay được khả năng code của bạn. Nếu bạn là sinh viên mỹ thuật (như em gái mình), hãy link nhà tuyển dụng tới các trang riêng của các bạn, nơi có các tác phẩm hay project mà bạn đã tham gia…

Nhà tuyển dụng sẽ rất thích những điều này, và mình tin rằng bạn sẽ có rất nhiều lợi thế so với các ứng viên khác.

Để gút lại, chẳng có ai ngay lập tức trở nên thông minh tài giỏi, cái cần nhất mà mình thấy khi chuẩn bị đi làm là các bạn nên thật sự tập trung vào những công việc từ đơn giản nhất như viết CV và application letter, trước khi làm những điều to tát, hãy bắt đầu bằng cách làm thật tốt những việc bé cỏn con đã!!!