Tag Archives: programming

Series SOLID cho thanh niên code CỨNG: Single Responsibility Principle

Cách đây khá lâu, mình đã có một bài viết tổng quát về SOLID Principle, những nguyên lý thiết kế OOP. Nhắc lại một chút cho các bạn đã quên.

Đây là những nguyên lý được đúc kết bởi máu xương vô số developer, rút ra từ hàng ngàn dự án thành công và thất bại. Một project áp dụng những nguyên lý này sẽ có code dễ đọc, dễ test, rõ ràng hơn. Và việc quan trọng nhất là việc maintainace code sẽ dễ hơn rất nhiều.

Nắm vững những nguyên lý này, đồng thời áp dụng chúng trong việc thiết kế + viết code sẽ giúp bạn tiến thêm 1 bước trên con đường thành senior nhé (1 ông senior bên FPT Software từng bảo mình thế).

SOLID bao gồm 5 nguyên lý dưới đây:

  1. Single Responsibility Principle
  2. Open/Closed Principle
  3. Liskov Substitution Principle
  4. Interface Segregation Principle
  5. Dependency Inversion Principle

keepcalm

Continue reading Series SOLID cho thanh niên code CỨNG: Single Responsibility Principle

Code trên “chín tầng mây” cùng Cloud 9 IDE

Tại sao phải dùng IDE trên mây???

Đã bao giờ các bạn gặp trường hợp muốn code mà… không code được chưa? Để có thể code đàng hoàng, ta cần một máy tính bàn (hoặc laptop) code cài đầy đủ tool và có code. Bạn nghĩ rằng để code được cần cài gì? Xin thưa, máy của một developer thường có các đủ thứ hầm bà lằng sau: IDE (Eclipse, Visual Studio), SVN, Notepad++, Git, Node.js, Database (SQL, MongoDB), ….

Đấy mới chỉ là IDE, chưa nói đến code! Code để trong máy thì đi đâu cũng phải cầm máy theo. Bạn nào cẩn thận thì code xong commit lên github rồi mượn máy khác code. Tuy nhiên, khi có máy mới, ta cũng phải ráng cài đặt đầy đủ mấy thứ hầm bà lằng phía trên, rồi mới lấy code về code tiếp được.

Continue reading Code trên “chín tầng mây” cùng Cloud 9 IDE

Series Phản Phác Quy Chân – Chuyện về những “ổ gà” trên con đường lập trình

Hôm nay, trước khi nói về ngành lập trình, ta hãy nói về ngành cầu đường.

Trên đời này làm gì có đường, người ta đi mãi cũng thành đường thôi. – Lỗ Tấn

Từ chuyện xây đường…

Thưở xưa, để đến nơi, người ta phải đi chân trần, trèo đèo lội suối, đập đá băng rừng.

Dần dần người ta chặt cây, nhổ cỏ, làm đường đất để mà đi. Đường đất vừa bẩn vừa nhiều bụi, người ta lại lát đá, lát gạch cho đường sạch đẹp, dễ đi hơn.

Thế rồi khoa học tiến bộ, người ta không lát đá nữa mà ủi phẳng, trải nhựa, trải bê tông. Trên đường nhựa, người ta xây cầu vượt, xây vòng xoay, xe cộ băng băng qua lại, nhanh chóng và tiện lợi hơn nhiều so với ngày xưa.

go-your-own-road-by-erik-johansson

Continue reading Series Phản Phác Quy Chân – Chuyện về những “ổ gà” trên con đường lập trình

Review sách: Dreaming in Code – Nửa đêm mơ code

Dạo này vì lo viết bài technicalchém gió về nghề nghiệp dữ quá nên lâu rồi cũng chưa viết bài nào review sách. Từ đầu tháng 1 tới giờ mình cũng đọc được khoảng 5,6 cuốn nhưng không phải sách lập trình nên không review chém gió được. Cuốn sách này mình đọc xong hồi tháng 12 năm ngoái, kể về một dự án thất bại nổi đình nổi đám. Thôi thì đầu năm đầu tháng lôi tháng lôi thất bại của người khác ra review để rút kinh nghiệm vậy….

cover

Giới thiệu – Tóm tắt

Tên đầy đủ của cuốn sách là: Dreaming in Code – Two dozen programmers, three years, 4732 bugs, and one quest for transcendent software (Tạm dịch: Nửa đêm mơ code – 2 tá lập trình viên, 3 năm, 4 nghìn 7 trăm 32 con bug, và 1 hành trình truy cầu phần mềm siêu việt). Mình tình cờ đọc được review của cuốn này trên blog Joel on Software (Ai theo dõi blog mình chắc cũng biết lão này là cựu nhân viên Microsoft, người sáng lập StackOverflow). Tuy chưa tới mức thuộc dạng sách gối đầu giường như Code Complete, The Mythical Man-Month, Peopleware,… nhưng nó cũng được nhiều người khuyên đọc.

Continue reading Review sách: Dreaming in Code – Nửa đêm mơ code

Sự thật đắng lòng: Đôi khi cắm đầu ngồi CODE là cách … ngu nhất để giải quyết vấn đề 

Qua bài viết về button trị giá 300 triệu đô, mình thấy các bạn có vẻ hào hứng với những bài viết theo phong cách kể chuyện. Vì vậy, ở bài viết này, mình sẽ bắt đầu bằng cách kể một câu chuyện nho nhỏ về 1 chàng coder nghèo tên K (Gọi là Khoa Khoe Khoang hay Khải gì đó tuỳ bạn).

Tiếp xúc với máy tính từ năm 10 tuổi,  K vô cùng ngạc nhiên trước sức mạnh của cỗ máy vô tri vô giác ấy, và nuôi mơ ước trở thành một lập trình viên. Lên cấp 3, nhờ giỏi Toán, K được vào lớp chuyên Toán của trường. Với niềm đam mê lập trình, K nhanh chóng tiếp cận và thành thạo Pascal, C, giật được vài giải Olympic tin học.

Nhờ điểm cao, K đậu vào một trường đại học công khá danh tiếng. Vào trường, được học thêm Ngôn ngữ lập trình, về Cấu trúc dữ liệu và thuật toán, K càng ngày càng thích code hơn. K code ngày code đêm, cắm đầu vào luyện thuật toán cho thành guru, lúc rảnh rỗi K lại kiếm sách bài tập làm… cho đã thèm. K luôn nộp bài sớm hơn các bạn để thể hiện sự hơn người của mình. Do suốt ngày chỉ biết cắm mặt vào máy tính, K trải qua 4 năm đại học mà vẫn FA…

FSOFT-GST

Continue reading Sự thật đắng lòng: Đôi khi cắm đầu ngồi CODE là cách … ngu nhất để giải quyết vấn đề 

Dependency Injection và Inversion of Control – Phần 3: DI Container. Áp dụng DI vào ASP.NET MVC

Series bài viết Dependency Injection và Inversion of Control gồm 3 phần:

  1. Định nghĩa
  2. Áp dụng DI vào code
  3. Viết DI Container. Áp dụng DI vào ASP.NET MVC

Sau 2 phần đầu, chắc các bạn đã có cái nhìn tổng quan về DI và cách áp dụng chúng vào code. Đa phần chúng ta không tự viết sử dụng các DI Container nổi tiếng như: Unity, NInject, StructureMap.

Để hiểu nguyên lý hoạt động của chúng, mình sẽ cùng các bạn cách viết một DI Container đơn giản (chúng cũng không quá “ghê gớm” hay phức tạp như bạn nghĩ đâu). Sau đó mình sẽ hướng dẫn cách sử dụng cái DI Container có sẵn, cũng như áp dụng IoC và project MVC.

1. Tự viết 1 DI Container đơn giản

Các bạn có thể dùng git để clone project về máy và bắt đầu làm theo mình: https://github.com/ToiDiCodeDaoSampleCode/SimpleIoC. Các class và interface vẫn như trong phần 2, có điều mình đã bổ sung thêm 1 số class mock – module giả. Trong thực tế, ta sử dụng các class mock này để viết Unit Test.

Continue reading Dependency Injection và Inversion of Control – Phần 3: DI Container. Áp dụng DI vào ASP.NET MVC

Dependency Injection và Inversion of Control – Phần 2: Áp dụng DI vào code

Series bài viết Dependency Injection và Inversion of Control gồm 3 phần:

  1. Định nghĩa
  2. Áp dụng DI vào code
  3. Viết DI Container. Áp dụng DI vào ASP.NET MVC

Bạn đã đọc phần 1 nhưng vẫn chưa hiểu rõ lắm về DI, IoC, chưa biết cách áp dụng chúng vào code? Đừng lo, ở phần 2 này sẽ cung cấp những đoạn code mẫu, giải thích rõ hơn về những điều mình đã nói ở phần 1. Sau khi đọc xong phần này, các bạn quay lại phần 1 thì sẽ thấy “thông” ra được nhiều thứ nhé.

Dependency là gì?

Dependency là những module cấp thấp, hoặc cái service gọi từ bên ngoài. Với cách code thông thường, các module cấp cao sẽ gọi các module cấp thấp. Module cấp cao sẽ phụ thuộc và module cấp thấp, điều đó tạo ra các dependency.

ioc-and-mapper-in-c-4-638

Continue reading Dependency Injection và Inversion of Control – Phần 2: Áp dụng DI vào code

Dependency Injection và Inversion of Control – Phần 1: Định nghĩa

Series bài viết Dependency Injection và Inversion of Control gồm 3 phần:

  1. Định nghĩa
  2. Áp dụng DI vào code
  3. Viết DI Container. Áp dụng DI vào ASP.NET MVC

Hôm trước, có vài bạn nhờ mình giải thích các khái niệm Dependency Injection, Inversion of Control. Vốn lười, mình định google một bài viết bằng tiếng Việt để quăng cho các bạn ấy. Ngặc một nỗi là mình chả tìm được bài nào cụ thể rõ ràng về Dependency Injection, chỉ có hướng dẫn sử dụng Unity, StructureMap. Một số bài viết hay thì lại toàn bằng tiếng Anh.

Mình cũng thấy vài bạn đã đi làm 1, 2 năm mà vẫn còn “ngáo ngơ” về DI, IoC, chỉ biết sử dụng nhưng không hiểu rõ bản chất của nó. Do đó, mình viết bài này nhằm giải thích một cách đơn giản dễ hiểu về Dependency Injection. Các bạn junior nên đọc thử, vì DI được áp dụng rất nhiều trong các ứng dụng doanh nghiệp, rất hay gặp khi đi làm/đi phỏng vấn. Pattern này được dùng trong cả C#, Java và các ngôn ngữ khác nên các bạn cứ đọc thoải mái nhé.

ioc-and-mapper-in-c-1-638

Continue reading Dependency Injection và Inversion of Control – Phần 1: Định nghĩa

Series C# hay ho: C# 6 có gì hay ho nào

Gần đây, mình tập trung viết một số bài về định hướng nghề nghiệp và phát triển bản thân mà ít viết về công nghệ. Vì vậy hôm nay mình quyết định tiếp tục viết series C# hay ho. Ở bài này, mình sẽ giới thiệu những cải tiến được Microsoft tích hợp vào C# 6. Bạn nào muốn biết thêm về sự phát triển của C# từ bản 1.0 lên 5.0 hãy đọc bài cũ của mình ở đây nhé.

Ở phiên bản này, C# không có nhiều cải tiến to lớn như Linq, hay async/await. Những thay đổi của bản 6 giúp việc viết code dễ hơn, code ngắn gọn và đẹp hơn.

Continue reading Series C# hay ho: C# 6 có gì hay ho nào

Ngồi xuống và viết blog đi nào

Đây không phải là điều mình tự nói với mình đâu, mà là điều mình muốn nói với bạn đấy. Mình nhắc lại một lần nữa nhé: Hãy ngồi xuống và viết blog đi nào.

Trước khi lắc đầu nguầy nguậy, đưa ra vô vàn lý do để chống chế: mình không có thời gian, biết gì mà viết, viết có được gì đâu … Hãy chịu khó bỏ chút thời gian quý giá của bạn, đọc hết bài viết này rồi bắt tay vào viết nhé.

Time-to-Share

Continue reading Ngồi xuống và viết blog đi nào