10 lỗi lầm hay gặp với các bạn lập trình viên

Ngày ra trường mình cũng viết code từa lưa xưa bưa ra. Kiểu viết xong chạy là được, không cần biết code đã tối ưu hay chưa. Nhưng với kinh nghiệm và trình độ lúc ra trường thì cũng chả biết được thế nào là tối ưu, thế nào là đẹp, đành nhờ các anh đi trước chỉ dẫn. Nhưng không phải ai cũng may mắn gặp được những người như vậy, nên tự học vẫn là chìa khóa trong ngành phần mềm [mà thật ra ngành nào cũng vậy =)]. Các cuốn sách mà giới chuyên gia hay khuyên mọi người nên đọc, mình gợi ý lại vài cuốn:

Clean Code
The Clean Coder
Effective Java (cho các bạn đang theo Java)
Refactoring: Improving the Design of Existing Code

Các cuốn sách này thật ra rất khó đọc, cầm cuốn sách đọc từ đầu tới cuối thì .. 2 ngày là nản [với mình =)]. Mình khuyên các bạn áp dụng nó vào lúc các bạn đang coding, đọc và ghi nhớ mục lục của cuốn sách, vừa code vừa tham khảo từ sách ra thì các bạn sẽ nhớ lâu hơn. vd: các bạn coding để bắt (catch) exception, các bạn tự hỏi không biết mình code vậy tối ưu chưa thì lấy cuốn Effective Java phần Exception để xem có vấn đề mà mình cần hay không, các bạn sẽ nhớ lâu đó.

Bài dịch mình lấy từ đây: http://www.pprogramming.com/2016/08/10-programming-mistakes-every-beginner-programmer-make.html , bài viết cũng ngắn thôi các bạn nên đọc qua. Bài viết đề cập đến các bạn lập trình viên mới, nhưng theo mình thì các bạn có nhiều kinh nghiệm vẫn gặp như thường 😀

Continue reading →

10 sai lầm ‘huyền ảo’ khi sử dụng Stream API trong Java 8

Bài gốc: http://blog.jooq.org/2014/06/13/java-8-friday-10-subtle-mistakes-when-using-the-streams-api/

Lambda Expression và Java Stream API là tính năng lớn trong Java 8 (Ngoài ra còn New Date Time API và vài thay đổi khác). Bài viết mình dịch là 10 sai lầm khi sử dụng Stream API, vì vậy các bạn nên biết trước Stream API là gì? Nó hoạt động thế nào? Mình thấy có rất nhiều các bài hướng dẫn sử dụng Stream API trên mạng.

http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
http://blog.hartveld.com/2013/03/jdk-8-33-stream-api.html

Nguồn chính mình học Java Stream API là từ cuốn sách Java SE 8 for the Really Impatient. Cuốn sách khá hay, bao quát và chi tiết hầu hết tính năng mới của Java 8. (Lambda Expression, Stream API, New Date Time API …)

Continue reading →

5 tính năng trong Java 9 làm thay đổi cách bạn phát triển phần mềm

Bài gốc: http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/

Các tính năng của Java 8 mình mới chỉ lấy các ví dụ mẫu để thực hành, đọc trên sách là chủ yếu, chưa áp dụng tính năng mới nào của Java 8 vào thực thế vì các dự án thật hiện tại chủ yếu trên Java 7, có cái tận Java 6, vậy mà Java 9 đang trong giai đoạn hoàn thiện, tháng 12 sẽ hoàn thành các tính năng để vào giai đoạn kiểm thử. Đây là lộ trình của Java 9: 

2015-12-10: Feature Complete
2016-02-04: All Tests Run
2016-02-25: Rampdown Start
2016-04-21Zero Bug Bounce
2016-06-16: Rampdown Phase 2
2016-07-21: Final Release Candidate
2016-09-22: General Availability

Công nghệ nó chạy thì mình phải đua theo, không thể khác được :)). Tất cả tính năng mới của Java 9: http://blog.takipi.com/java-9-the-ultimate-feature-list/. Mình dịch bài này vì cái tiêu đề có vẻ … nói hơi quá :v

Rất nhiều thông tin hay trong các đường dẫn có trong bài viết, các bạn nên xem qua.

Continue reading →

Fail-safe và fail-fast

Bài gốc: http://javapapers.com/core-java/fail-fast-vs-fail-safe/

Hệ thống sẽ phản ứng thế nào khi có một thất bại (failure) đặc trưng xảy ra như một hệ thống fail-fast (thất bại nhanh) hay fail-fast (thất bại an toàn). Bài viết này để thảo luận liệu fail-fast hay fail-safe tốt hơn. Nó sẽ phải làm gì với Java.

Fail fast và fail safe – cái nào tốt hơn?

Tuy từ “fail safe” có vẻ tốt hơn, nhưng tôi có cảm giác fail-fast là tốt nhất. Fail-safe không an toàn. Fail safe không có nghĩa là vững mạnh. Chúng ta đang giữ, che giấu những khuyết điểm(defect) trong hệ thống. Sự bền vững của hệ thống fail-safe có thể không được lâu dài. Hệ thống fail-safe cần cho các trường hợp có tính sẵn sàng sử dụng cao. Khi một thất bại (failure) được phát hiện, cách thức làm việc khác sẽ được thay thế và tính sẵn sàng sử dụng của hệ thống vẫn được đảm bảo.

Fail-fast đưa ra các khuyết điểm của hệ thông khi nó bị phát hiện. Lỗi được công khai rộng rãi và hệ thống sẽ tắt. Công việc sẽ bị tắt nghẽn, nhưng chúng ta được cơ hội khắc phục lỗi. Chúng ta sửa lỗi và mang hệ thống trở lại và chạy ngon lành :D. Điều đó làm cho hệ thống thật sự mạnh mẽ, không che giấu tình trạng lỗi của hệ thống. Mặc dù kết quả làm cho tính sẵn sàng của hệ thống bị gián đoạn, qua được khoảng thời gian đó, kết quả là ta sẽ được một hệ thống mạnh mẽ. Fail-fast đảm bảo rằng chúng ta không lái một chiếc xe tào lao và tạo ra những vấn đề không thể phục hồi được. Đừng chờ đợi những thất bại (failures) trong hệ thống một cách tự nhiên, nhưng nó (failure) nên được thiết kế bằng cách mà khi trong trường hợp thật bại không mong muốn thì chương trình nên fail-fast.

Thử tưởng tượng một câu hỏi điên rồ (provoking – kích động), có phải fail-fast tốt hơn cho lò phản ứng hạt nhân? 

Continue reading →

Massive Open Online Class – CS50x

edX ra đời sau khi mình ra trường được 1 năm (05/2012). edX ban đầu là sự kết hợp giữa MIT và Harvard, sau đó là các trường đại học nổi tiếng trên thế giới tham gia edX để giảng dạy các khoá học online miễn phí. Cùng đó là udacity, coursera … với rất nhiều khoá học miễn phí bổ ích (Tuy sau này cũng có thu phí vài khoá học). Mình có tham gia 2 khoá học đầu tiên trên edX, MITx 6.00x và lấy đuợc chứng chỉ (các bạn xem ở đây, khoe tí) và HavardX với CS50 nhưng những bộn bề cuộc sống (luời là chính) mình bỏ ngang lớp CS50. Hôm qua mình có xem buổi trực tiếp giới thiệu CS50 sau hơn 3 năm trên edX với những thay đổi phù hợp hơn, và định hướng mới để đưa tư duy lập trình đến tất cả mọi người. Khoá học rất thích hợp cho các bạn 11,12, năm 1, năm 2 ở tất cả các chuyên ngành (không chỉ có ngành công nghệ thông tin) theo học.

Continue reading →

Google Guice

Trong Java, khi nhắc đến IoC (Inversion of Control) và DI (Dependency Injection) hầu hết mọi người sẽ nghĩ ngay đến Spring Framework, một framework khá nổi tiếng và đang rất được yêu thích trong cộng đồng Java. Ngoài Spring, có 2 framework cũng được mọi người hay nhắc đến là PicoContainer và Google Guice. Hiện tại mình đang làm việc trên Magnolia CMS, một CMS đang phát triển và sử dụng Google Guice trong kiến trúc của nó. Magnolia sử dụng Guice cùng với một số các mẫu thiết kế hướng đối tượng (Design Patterns), tạo nên một kiến trúc module hóa rất hay. Khi nào có thời gian rảnh và lối hành văn tốt hơn ? mình sẽ nói về tầng bên dưới của Magnolia CMS.

Hiện tại Guice đang ở phiên bản 3.0, nhưng mình dịch bài user’s guide của nó là 1.0 vì bài viết khá đơn giản và dễ hiểu giúp các bạn mới tiếp xúc với DI framework nắm bắt dễ dàng hơn. Nếu các bạn muốn tìm hiểu về phiên bản hiện tại của Guice thì theo đường dẫn https://github.com/google/guice/wiki/GettingStarted, Guice đã đưa cả source và user’s guide từ Google Code sang Github.

Một số từ khóa nên biết trước: 

IoC (Inversion of Control)

DI (Dependency Injection)

Singleton Pattern

Factory Pattern

Mock – http://www.mockobjects.com/

Trong bài có khác nhiều từ mình không dịch, các bạn tham khảo giúp mình tại đây

http://toando.coffee/terminology/

Bài gốc: http://google.github.io/guice/user-docs/Guice-1.0-Users-Guide.pdf

Continue reading →

115 câu phỏng vấn Java

Bài gốc: http://www.javacodegeeks.com/2014/04/java-interview-questions-and-answers.html

Phỏng vấn vẫn là vấn đề rất nhiều bạn ra trường khá sợ và thiếu tự tin, sợ và thiếu tự tin một phần chủ yếu do thiếu rất nhiều kiến thức nền tảng, chưa sẵn sàng cho những kiến thức mà mình đang có. Đọc qua những câu phỏng vấn về một vấn đề bạn quan tâm cũng là một cách học khá hay, bạn sẽ biết mình đang thiếu mảng kiến thức nào, cần trao dồi thêm mảng nào, để khi phỏng vấn bạn tự tin hơn với lượng kiến thức mình mang theo. Mong rằng bài dịch sẽ mang một lượng kiến thức nhỏ cho các bạn sinh viên đã hoặc sắp ra trường. Mình thấy những câu trả lời ở dưới khá chung chung và chưa có độ sâu nhất định, khi đã đọc xong cả câu hỏi và câu trả lời mà bạn vẫn còn mơ hồ, hãy tìm hiểu thêm thật rõ về vấn đề đó, đừng để mình bị thiếu hay nghĩ sai về một vấn đề, vì nhiều lúc câu dịch của mình không diễn tả đủ ý tác giả muốn truyền đạt.

Trong bài hướng dẫn này, chúng ta sẽ cùng nhau thảo luận về một vài loại câu hỏi thường hay được sử dụng trong phỏng vấn, nhằm giúp các bạn kiểm tra và củng cố lại kiến thức Java của mình, cùng với lập trình hướng đối tượng.

Xuyên suốt bài viết, chúng ta cùng thảo luận về lập trình hướng đối tượng, những câu hỏi tổng quát liên quan đến Java và những chức năng của nó, tập hợp(collections) trong Java, bộ dọn rác (garbage collectors), ngoại lệ (exception handling), Java applets, Swing, JDBC, Remote Method Invocation (RMI), Servlets and JSP …

Mục lục:

  1. Object Oriented Programming (OOP)
  2. General Questions about Java
  3. Java Threads
  4. Java Collections
  5. Garbage Collectors
  6. Exception Handling

Java Applets, Swing, JDBC, Remote Method Invocation (RMI), Servlets, JSP

Continue reading →

10 nguyên lý trong thiết kế hướng đối tượng

Bài gốc : http://javarevisited.blogspot.sg/2012/03/10-object-oriented-design-principles.html

Chú thích của mình : Trước khi vào bài gốc mọi người lướt sơ qua bài này : What does “S” stands for in OOPS?

Những nguyên lý thiết kế hướng đối tượng (object oriented desing principle) là nền tảng trong lập trình hướng đối tượng, nhưng tôi thấy hầu hết các lập trình viên Java ra sức học các design patterns (Các mẫu thiết kế hướng đối tượng) như Singleton pattern, Decorator pattern hay Observer pattern nhưng không đặt sự chú ý của mình vào nghiên cứu Phân tích và thiết kế hướng đối tượng(Object oriented analysis and design). Điều quan trọng trong việc học nền tảng cơ bản của lập trình hướng đối tượng là Abstraction (Tính trừu tượng), Encapsulation(Tính đóng gói), Polymorphism(Tính đa hình) và Inheritance(Tính kế thừa),  nhưng đồng thời, việc quan trọng không kém là phải biết những nguyên lý của những tính chất cơ bản này, tạo ra một thiết kế trong sáng và có tính module hóa. Tôi thường xuyên gặp các lập trình viên Java ở nhiều cấp độ khác nhau, có những người chưa từng nghe nói về OOPS và nguyên lý thiết kế SOLID, hay đơn giản họ không biết lợi ích của việc đưa ra các nguyên lý thiết kế đối tượng đặc thù, hay làm thế nào sử dụng các nguyên lý thiết kế này vào việc viết mã lệnh.

Continue reading →

Trả về một danh sách rỗng và trả về giá trị null, cách nào tốt hơn?

Bài đầu tiên ngồi dịch mà lại chọn ngay bài khó nhằn lại còn dài thế này, mà lỡ rồi, nó đập vào mắt đầu tiên trên twitter sáng nay, hứng phải làm liền, xệp uổng lắm =)

Bài này được dịch từ nguồn: http://www.codeproject.com/Articles/794448/Is-it-Really-Better-to-Return-an-Empty-List-Instea

Phần 1: Giới thiệu

Phần 2: So sánh 2 cách tiếp cận

Phần I : Giới thiệu

Một lời khuyên phổ biến : Đừng trả về Null

Có một lời khuyên khá phổ biến và được chấp nhận rộng rãi trong giới phát triển phần mềm:

Nên luôn trả về một danh sách rỗng thay vì giá trị null!

Continue reading →

Coffee was so hot, it’s cold outsite

Một ngày rảnh rỗi không có gì làm, y chang mọi ngày của những cái cuối tuần. Ngồi ngẫm nghĩ lại cái sự đời. Chán! Cuộc sống cứ thế mà trôi, buồn có vui cũng có, mà cái nào nó cũng bình bình, chẳng cái nào nó trội lên trồi xuống.

Mà đúng là cái ngành này nó bạc, suốt ngày cứ cắm đầu vào máy tính, hở ra cái là khó chịu ngay. Thật sự phải đam mê lắm mới trụ nổi với nó, không thì bạc đầu vẫn vậy, ‘nhu’ như thường. Ngẫm lại thì mình đã nhu mà cái đam mê thì hên xui, lúc thì ngút trời chứ vui vui thì muốn đập mịa cái máy tính =)).

Nói thế chứ ngành Khoa Học Máy Tính là ngành rất hay, đòi hỏi con người phải thay đổi liên tục, phải ra sức tiếp thu những cái mới, nếu không, ngủ đêm tới sáng là có thằng nhóc trẻ trẻ nó đạp mình xuống liền :D. Đã vừa phải ráng sức học, ra sức đua mà còn phải canh mấy thằng trẻ, khổ vờ lờ =)

Mà học thế nào để tụi nó không vượt mặt bây giờ? Đầu óc càng ngày càng tào lao, ù mà còn lỳ haizz, nghe nói có cách đọc, đọc nhiều vào, viết, viết nhiều vào. Thế mà từ ngày ra trường tới giờ, có viết được cái bài nào ra hồn đâu, lười suy nghĩ, lười đủ thứ, chỉ có chơi là giỏi :D. Đã vậy, từ ngày biết viết tới giờ, chưa có bài văn nào 7 điểm coi thử. 6.5, điểm văn tốt nghiệp của cả 3 cấp :v, cũng may đại học không dạy văn, toàn dạy những môn chém gió, hú hồn =)))

Hè hè, không viết được thì có cũng có cách, đạo văn. Ctrl C – Ctrl V vẫn là những phím kinh điển trong ngành, sao mình không lấy mấy phím kinh điển đó ứng dụng vào thực tiễn. Mà đạo văn trong nước nguy hiểm quá, đưa lên trang cá nhân thế này có người phát hiện thì thôi rồi, chửi có mà … sập máy chủ. Nên thôi, đành chạy ra các nước bạn đạo vậy, mình dịch ra tiếng mình rồi, tụi nó biết khỉ gì mà kiện với tụng, chửi với bới, có chửi cũng chịu, mình có thèm hiểu tiếng nó đâu =)

Nên tất cả những bài viết trong trang cá nhân này đều đạo tứ phương, không có cái nào tự viết (Mà nhu gì tự viết, viết dở bị chửi sao).

P/s : Mà thật ra nữa thì luyện dịch là chính, chả tốt đẹp gì mấy

 

Đi hâm lại cà phê đã, nó lạnh rồi