Hiển thị các bài đăng có nhãn Kinh nghiệm lập trình. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Kinh nghiệm lập trình. Hiển thị tất cả bài đăng

Thứ Sáu, 3 tháng 4, 2015

SOLID – 5 nguyên tắc cơ bản trong programming

SOLID là 5 nguyên tắc đầu tiên và cơ bản mà bất cứ programmer nào cũng cần phải hiểu rõ:
  1. S – SRP – Single Responsibility Principle
  2. O – OCP – Open/Closed Principle
  3. L – LSP – Liskop Substitution Principle
  4. I – ISP – Interface Segregation Principle
  5. D – DIP – Dependency Inversion Principle
Những nguyên tắc này tuy rất khó nhớ tên nhưng ít nhiều ta đều tiếp xúc trong công việc hàng ngày. Vì vậy nhận ra khi nào ta đang follow nguyên tắc gì sẽ rất có lợi cho công việc.
Ý nghĩa của từng nguyên tắc như sau:
  1. SRP

    – 1 piece of software chỉ nên thực hiện 1 mục đích, 1 trách nhiệm duy nhất. Về cơ bản, các đơn vị cấu trúc của program gồm có:
    • Statement
    • Code block
    • Method/function
    • Class/Interface
    • Module
    • Project/Library
    • Solution
    Đối với mỗi level, chúng ta cần phải rất rõ ràng về công việc mà chúng thực hiện. Điều này giúp cho code dễ đọc, program dễ hiểu và dễ maintain. Sau khi viết code xong, khi đọc lại hoặc khi ng khác đọc sẽ dễ dàng follow đc vấn đề.
    Ví dụ 1

    Dòng code trên làm 2 việc: in ra index hiện tại và tăng nó lên 1. Đối với ng viết, do đã là thói quen nên họ dễ dàng nhận ra giá trị của biến i sau dòng này. Nhưng đối với ng khác, rất dễ xảy ra nhầm lẫn.
    Ví dụ 2

    Đoạn code trên có 2 vấn đề:
    1. Trong using block, thực hiện 2 việc là insert object và gọi messageService. Mặc dù code chạy bình thường nhưng đây vẫn là bad practice, messageService cần phải nằm ngoài using ctx.
    2. Trong function Insert thực hiện 2 nhiệm vụ khác nhau. Nếu trong tương lai phát sinh ra nhu cầu Insert nhưng ko kèm notify cho messageService thì function này sẽ phải sửa lại (cùng với tất cả những nơi đã dùng tới nó)
    Cứ tiếp tục như thế, đôi khi chúng ta cảm thấy sẽ “tiện lợi” ghi gộp nhiều thứ lại với nhau. Nhưng thực tế sẽ tạo ra những vấn đề tiềm ẩn cho sau này (technical debt)
  2. OCP

    open for extension but close for modification? tức là sao?
    Nôm na là ta phải thiết kế software sao cho nó có thể mở rộng dễ dàng mà ko cần phải đập đi làm lại. Còn gì bực bội hơn khi được giao viết thêm functionality cho 1 hệ thống mà phát hiện ra cần phải sửa rất nhiều mới support đc chức năng ABC? Điều này cũng giống như thiết kế 1 chiếc xe hơi với các bộ phận tiêu chuẩn có thể dễ dàng thay thế hoặc nâng cấp mà ko cần phải chế tạo lại cả chiếc xe.
    Nguyên tắc này thường đc triển khai dựa trên tính kế thừa và tính đa hình của OOP như trong sơ đồ sau:
    superhero
    Ở đây tôi đã define Superman và Spiderman, và method Fight của 2 entity này đã fixed và không thay đổi được, tức là Closed. Vậy hệ thống có Open hay không? Làm gì để tùy chỉnh?
    • có thể extend và override method của class cũ, chẳng hạn tạo class AmazingSpiderman -> Spiderman với khả năng Fight more amazing
    • extend từ Abstract class và implement abstract method Fight
    Như vậy hệ thống đảm bảo đc tính OCP.
  3. LSP

    có khi nào bạn thấy ko hài lòng về 1 property nào đó của 1 class và viết 1 class con để modify property đó? chẳng hạn property của base class chỉ trả về integer từ 1..10, bạn subclass để nó trả về 1..100? Như vậy là bạn đang violate nguyên tắc LSP.
    Lý do: khi đoạn code nào đó sử dụng đến property này với understanding là nó sẽ trả về 1..10, sẽ bị surprised khi nó trả về 1..100 và ko thể handle từ 11..100
    Ví dụ sau ko hoàn toàn về LSP nhưng cũng cho thấy sự vi phạm tính đa hình của class

    Đoạn code trên đã phải convert đối tượng về một subtype để thực hiện method cần thiết.
  4. ISP

    khi bạn implement 1 interface mà có những method bạn ko dùng đến, đó là dấu hiệu của problem.

    Có thể thấy Striker sẽ ko implement đc method Catch. Và nếu ta gọi Player.Catch() có thể sẽ dẫn đến runtime expception. Vì vậy việc class Striker ko thể implement đc method Catch cho thấy 1 technical debt.

    Như vậy, rõ ràng mọi method trong class đều có ý nghĩa rất rõ ràng, ko lỗi.
  5. DIP

    – hmm… đây là 1 nguyên tắc về decoupled, thuộc về design nhiều hơn là coding, vì vậy tương đối khó để nắm bắt. Có thể liên tưởng qua ví dụ thực tế như sau:
    Ex: giả sử A làm ăn với B, A mua dịch vụ do B cung cấp. Đôi khi B ko thực hiện đúng trách nhiệm của mình, A mặc dù bực bội về việc đó, nhưng đã ký kết làm ăn nên ko thể đổi được, và cũng ko có đủ khả năng tìm đối tác khác. Như vậy A đã phụ thuộc chặt chẽ vào B.
    Tuy nhiên, nếu ban đầu A ko trực tiếp làm việc với B, mà thông qua trung gian X. A đưa ra yêu cầu dành cho nhà phân phối của mình và X sẽ tìm người đáp ứng được nhu cầu đó, giả sử ban đầu là B. Nếu sau đó B ko thực hiện đúng trách nhiệm, X sẽ thay B bằng nhà cung cấp C. Như vậy việc sử dụng dịch vụ của A sẽ ko bị gián đoạn và A cũng ko cần làm việc trực tiếp với B hay C.
    Điều này minh họa trong code như sau


    Ta có thể thấy Messi phụ thuộc hoàn toàn vào Xavi. Có thể sửa lại như sau
Tóm lại, các principle trên có tác dụng chính là giúp chúng ta nắm được và dự đoán được các vấn đề tiềm ẩn của program thông qua các dấu hiệu vi phạm 5 principle này để giải quyết chúng 1 cách triệt để.

Thứ Năm, 28 tháng 8, 2014

[Chia sẽ kinh nghiệm lập trình]10 mẹo để trau dồi kỹ năng lập trình

0. Bắt đầu

Để trở thành một lập trình viên tốt hơn, bạn cần biết rất là nhiều thứ như: thuật toán, cấu trúc dữ liệu, lập trình hướng đối tượng, testing ... Lập trình bao gồm rất nhiều kỹ năng, có nghĩa là không thể học một cách nhanh chóng được. Nó cần thời gian và kinh nghiệm.
1. Coding, coding, và coding
Code - code - và code . . .

Coding là ưu tiên hàng đầu. Chỉ bằng cách code bạn mới có thể học được cách giải quyết vần đề, nhuần nhuyễn các cú pháp, hiểu được các lỗi.

2. Đọc sách
Read Book. . .
Nói thì thường dễ hơn là làm, có một sự khác biệt rất là lớn giữa 'good code' và 'bad code', nhưng làm sao bạn biết được? Cho đến khi bạn nhìn được 'good code', và hiểu được tại sao đoạn code đó là good. Nời mà bạn thường nhìn thấy những dòng code hay đó là sách. Thường thì các tác giả viết sách về lập trình là những lập trình viên tuyệt vời. Nên bạn có thể học được rất nhiều từ họ.

3. Đóng góp cho những mã nguồn mở
open source

Dành thời gian của bạn để đóng góp cho những mã nguồn mở trên Github, hay Google là một cách hay để cai thiện kỹ năng lập trình. Bằng cách tham gia các cuộc thảo luận của những dự án mở, lắng nghe những người khác và coi cách tiếp cận và giải pháp của họ. Nhưng đừng chỉ thụ động theo dõi. Hãy đặt câu hỏi, và đưa ra quan điểm của mình.

4. Học các thuật toán
Thuật toán tìm kiếm của google

Cấu trúc dữ liệu và thuật toán là cơ sở của lập trình. Với một kiến thức vững chắc, nó sẽ giúp bạn rất nhiều trong quá trình giải quyết vấn đề.

5. Đọc những blog uy tín

Đọc blog giúp bạn trở thành một lập trình viên tốt hơn như thế nào? Thường thì các lập trình viên có những blog riêng của mình, và họ thường đưa ra những quan điểm, ý kiến, và kình nghiệm thực tế của họ. Hơn thế nữa blog giúp bạn cập nhập với nhứng công nghệ mới nhanh hơn.

6. Đọc code
Read code
Đọc blog giúp bạn trở thành một lập trình viên tốt. Nhưng đọc code sẽ đưa bạn đi xa hơn thế nữa. Hãy đọc code của nhưng mã nguồn mở, các dự án trên Github. Bạn sẽ nhận ra các khuân mẫu, cách mà mọi người viết code và quản lý code trong những dự án lớn. Đôi khi điều này sẽ rất nhàm chán. Nhưng khi bạn vượt qua được sự nhàm chán. Thì bạn đã thấy mình khác trước.

7. Viết test

Viết test giúp rất nhiều trong việc tìm ra cái tên hay hơn, thiết kế code hay hơn, giao diên API tốt hơn, trìu tượng hoá code tốt hơn. Viết test là một quá trình khó khăn với rất nhiều lập trình viên. Nhưng hãy nhớ rằng viết test là một cách để phân tích, thiết kế, phát triển, viết test là một cách khác để thực sự hiểu code của toàn dự án.

8. Duyệt code

Duyệt code giúp rất nhiều cho cả tác giả của code lẫn người duyệt. Mọi người cùng đưa ra những lời khuyên để cải thiện code và tìm ra những bug trong code. Nếu bạn may mắn được làm việc cho những công ty lớn, thì cơ hội code của bạn được kiểm định rất cao từ những chuyên gia và bạn sẽ học được rất rất nhiều điều.

9. Nói chuyện với những lập trình viên khác

Đọc là một cách thụ động hơn so với nói chuyện. Nói chuyện hay thảo luận với những lập trình viên khác thường dẫn đến những giải pháp tốt hơn, điểu này rất là tự nhiên vì đầu óc của bạn sẽ phải hoạt động nhiều hơn khi bạn nói và nghe người khác. Trong ngành công nghiệp phần mềm, thường thì các lập trình viên cô lập mình với những chiếc máy tình. Đừng chỉ ngồi đó và yên lặng. Hãy nói, lắng nghe và suy nghĩ cùng những người khác.

10. Tham gia trả lời câu hỏi trên Stack Overflow, và blogs

Đây là một cách để cũng cố kiến thức của bạn. Bằng cách chia sẻ, người đầu tiên có lợi từ điều này chính là bạn. Lập trình rất là lớn và bạn thường quên mọi thứ nếu bạn không sử dụng trong vòng 3 tháng. Bằng cách trả lời các câu hỏi bạn không những củng cố kiến thức mà còn có thể sửa những hiểu sai của bạn về vấn đề.

Mọi lập trình viên đều muốn trở thành một lập trình viên tốt hơn, nhưng không phải ai cũng thành công. Nó đòi hỏi rất nhiều công sức, học hỏi liên tục. Bạn code nhiều hơn, thiết kế giải pháp nhiều hơn, viết test nhiều hơn, duyệt code nhiều hơn, thì bạn càng trở nên tốt hơn. Nào và hãy bắt đầu Coding..!
Nguồn bài viết: http://hackernews.vn

Thứ Ba, 19 tháng 8, 2014

[Cẩm nang cho bạn] Những câu hỏi phỏng vấn "xương" nhất



1. Tại sao chúng tôi nên tuyển dụng bạn? 
Đây thật sự là cơ hội để bạn gây ấn tượng với nhà tuyển dụng (NTD). Bạn cần trình bày ngắn gọn và cô đọng về điểm mạnh, năng lực của bạn và những gì bạn có thể đóng góp cho công ty. Tuy nhiên, bạn không nên trả lời câu hỏi này một cách chung chung, chẳng hạn: “Tôi làm việc rất chăm chỉ và nhiệt tình” Hãy tạo sự khác biệt cho bản thân bằng cách giới thiệu những phẩm chất chỉ bạn mới có và bắt đầu câu trả lời với “Tôi chính là người phù hợp nhất cho vị trí này vì ….”

2. Tại sao bạn muốn làm việc ở công ty chúng tôi?
Đây là một trong những câu hỏi mà NTD hay dùng để kiểm tra xem bạn có chuẩn bị kỹ càng cho buổi phỏng vấn hay chưa. Bạn đừng bao giờ dự một buổi phỏng vấn mà không biết tí gì về công ty, đường hướng phát triển và hoạt động kinh doanh của nó nhé! 

3. Điểm yếu lớn nhất của bạn là gì?
Hãy thành thật khi đề cập đến điểm yếu của bạn, nhưng đừng quên chứng tỏ bạn có thể biến nó thành điểm mạnh. Ví dụ: nếu trước đây bạn từng làm việc với hiệu quả chưa cao thì hãy trình bày những việc bạn đã làm để cải thiện điều này. NTD sẽ nhận ra bạn là người dám thừa nhận những điểm yếu của mình và luôn tìm cách để hoàn thiện bản thân.

4. Tại sao bạn lại rời bỏ công việc cũ?
Ngay cả khi bạn rời bỏ công việc cũ với tâm trạng không vui, bạn cũng không nên trả lời câu hỏi này với thái độ tiêu cực. Hãy khéo léo né tránh đề cập đến những điều bạn không hài lòng về công việc cũ. Còn nếu bạn thật sự muốn đề cập, hãy cố gắng trình bày chúng cùng với một số điểm tích cực để cân bằng. Việc than phiền không dứt về công ty cũ sẽ khiến NTD không đánh giá cao thái độ làm việc của bạn.



5. Hãy mô tả một tình huống khó khăn bạn từng gặp phải và cách bạn đã xử trí
Khi hỏi câu này, NTD muốn biết bạn có khả năng tư duy để tìm ra giải pháp cho tất cả vấn đề bạn gặp phải hay không. Ngay cả khi vấn đề của bạn là không có đủ thời gian để học tập, nghiên cứu, bạn cũng cần cho NTD thấy cách bạn đã điều chỉnh thứ tự ưu tiên trong lịch làm việc của mình để giải quyết nó. Việc này chứng tỏ bạn là người có tinh thần trách nhiệm và có thể tự mình tìm ra giải pháp cho vấn đề gặp phải.

6. Bạn tự hào nhất về thành tích nào của mình?

Khi trả lời câu hỏi này, bạn nên chọn một thành tích liên quan đến nghề nghiệp và phù hợp với vị trí bạn ứng tuyển để giới thiệu. Hãy ngẫm nghĩ về những phẩm chất công ty đang tìm kiếm ở ứng viên và tìm ra một ví dụ phù hợp nhất để chứng tỏ bạn chính là người công ty đang cần. 

7. Bạn đề nghị mức lương ra sao?

Đây là một trong những câu hỏi khó nhất, đặc biệt là đối với những người chưa có nhiều kinh nghiệm. Việc đầu tiên cần làm trước khi dự phỏng vấn là nghiên cứu mức lương phổ biến trong ngành nghề của bạn để ước lượng con số mình nên đề nghị. Hãy trình bày rõ ràng với NTD rằng bạn sẽ chỉ bàn thảo chi tiết về lương bổng khi đã nhận được lời đề nghị tuyển dụng. Nếu NTD thúc ép bạn đưa ra một câu trả lời cụ thể, bạn hãy đưa ra một mức lương kiểu “khoảng” hơn là một con số chính xác.

Nguồn bài viết: http://advice.vietnamworks.com/vi/career/bi-quyet-phong-van/nhung-cau-hoi-phong-van-xuong-nhat.html

Thứ Tư, 23 tháng 7, 2014

Định huớng chuyên ngành công nghệ thông tin cho dân IT năm 1, năm 2 năm 3, . . .

Đầu tiên bạn cần định huớng là mình thích cái gì để sau này làm việc với nó, và bạn chỉ cần học tốt cái đó là đc.
Mình ví dụ:


  • Bạn thích lập trình Web,  Web có nhìu ngôn ngữ: PHP, ASP.NET, JAva,. . .-> cần chọn 1 ngôn ngữ để học . . . .
  • Ứng dụng di dộng: android, iOS, Winphone, . ..
-> chọn 1 để học
(android -> JavaiOS ->Object C, SwiftWinphone -> C#)Di động đầu tư 1 trong 2 mảng: ứng dụng or game
, . . .

P/S: Các bạn cùng chia sẽ

Chủ Nhật, 13 tháng 7, 2014

10 Trang web dạy lập trình trực tuyến mà bạn nên biết

Đã qua rồi cái thời mà các ngôn ngữ lập trình chỉ dành cho những lập trình viên bậc thầy giống như Bill Gates, người mà sau đó đã thống trị toàn thế giới bởi hệ điều hành Windows của mình. Bây giờ thì bất cứ ai cũng có khả năng, cơ hội để học và thành thạo các ngôn ngữ lập trình một cách dễ dàng. Hôm nay, chúng tôi sẽ cung cấp cho bạn danh sách 10 trang web học trực tuyến sẽ giúp bạn làm điều đó.
Những trang web dạy lập trình theo phương pháp tương tác giúp người học tiếp thu kiến thức rất hiệu quả.

Đúng vậy, hãy quên đi những cài đặt phức tạp với dòng nhắc lệnh đen ngòm và lạnh lùng khiến bạn chỉ muốn ngừng học ngay trước khi bắt đầu, và nói xin chào tới 10 trang web với những bài giảng tương tác nhanh sẽ dạy bạn về các ngôn ngữ lập trình như HTML, CSS, PHP, Ruby và thậm chí cả iOS. Bạn sẽ được học từ những giáo trình, video và thậm chí là cả những bài thực hành tốt nhất từ những chuyên gia danh tiếng trong ngành.
Hãy bắt đầu con đường mới của bạn để tiến vào thế giới lập trình ngay hôm nay nhé!

1. Codecademy

Codecademy rõ ràng là trang web nổi tiếng nhất trong việc dạy bạn học lập trình thông qua tương tác, giao diện trang web rất chuyên nghiệp và các khóa học thì được thiết kế rất tốt. Ngay khi bạn ghé thăm trang chủ, bạn đã có thể bắt đầu cảm nhận được cái phong thái lập trình ở đây, bằng một cửa sổ dạng console để thôi thúc bạn. Bạn hãy chọn một khóa học mà Codecademy đưa ra gồm Web cơ bản, PHP, JavaScript, jQuery, Python, Ruby và các API.

Bên trong mỗi bài học thì giao diện sẽ chia làm hai phần, phần bên trái sẽ giải thích những kiến thức cần thiết và có những chỉ dẫn. Phần bên phải sẽ cho phép bạn gõ những dòng code của mình, sau đó cho phép bạn kiểm tra xem liệu đã viết đúng hay chưa. Đừng lo lắng về việc gõ sai, cả hai thanh panel chỉ dẫn và lập trình nói trên sẽ cảnh báo những lỗi dùm bạn, và cung cấp những hướng dẫn để bạn có thể sửa lỗi. Học kiểu này cũng giống như là đang có một giáo viên thực thụ đứng bên cạnh dạy cho bạn vậy.

2. Code Avengers

Code Avengers được thiết kế với mục đích làm cho bạn yêu thích môn lập trình. Mặc dù hiện tại nó chỉ cung cấp các khóa học về HTML5, CSS3 và JavaScript, nhưng mỗi khóa học đều được thiết kế rất cẩn thận và thực sự lôi cuốn, nhằm nâng cao kỹ năng lập trình của bạn một cách nhanh nhất. Sau khi hoàn thành mỗi bài học thì bạn sẽ được chơi một trò game nhỏ nhằm mục đích giải tỏa căng thẳng và giúp bạn có thêm động lực để học được lâu hơn.
Code Avengers có một hướng tiếp cận dần dần tới việc học tương tác. Nó không giảng giải quá nhiều kiến thức mà chưa cần thiết cho người mới bắt đầu, chỉ là một ít code và những chỉ dẫn vui vui, nhằm tạo ra những thứ rất dễ để hiểu. Bạn hãy thử vọc vậy cùng với những dòng code và sau đó nhìn thấy những thành quả ngay tức thì. Các giáo trình ở đây được thiết kế rất chu đáo phù hợp với cách suy nghĩ của người mới học.

3. Code School

Sau khi đã hoàn thành các khóa học tại Codecademy hoặc Code Avengers, thì bạn đã sẵn sàng tiến xa hơn để nâng cao khả năng của mình. Code School là trang web chất lượng tiếp theo mà bạn nên ghé thăm. Không giống như hầu hết các trang web dạy học tương tác khác, Code School đưa ra các khóa học rất có chiều sâu để dạy và biến bạn trở thành một chuyên gia trong ngành với những bài tập thuộc loại tốt nhất.
Toàn bộ các khóa học được chia ra làm 4 mảng chính, đó là:
  • Ruby
  • JavaScript
  • HTML/CSS
  • iOS

Hầu hết tất cả các khóa học đều được chau chuốt bằng giao diện thiết kế ấn tượng và những video chứa nhiều thông tin có giá trị, mặc dù những thử thách phía sau mỗi video có thể hơi khó một chút đối với những người mới học. May mắn thay, tất cả đều có những hướng dẫn và đáp án để bạn tham khảo khi cần. Trong khi phần lớn các khóa học ở đây là miễn phí, nhưng cũng có một số khóa học sẽ yêu cầu bạn trả một khoản phí khoảng $25 đô-la/tháng để có thể truy cập toàn bộ khóa học, bao gồm cả các video, bài tập thực hành và tất cả các khóa học khác tại Code School.

4. Treehouse

Các khóa học của Treehouse thì phần nhiều là định hướng sản phẩm hơn là định hướng ngôn ngữ, vì thế nó rất phù hợp cho một lập trình viên mới vào nghề cùng với một mục đích đã lên kế hoạch từ trước, như là xây dựng một trang web hoặc một ứng dụng. Ví dụ, khóa học về Website thì sẽ hướng dẫn bạn về việc xây dựng một trang web dạng responsive (có thể hiển thị tùy theo từng loại thiết bị là PC hoặc Smartphone), trang web tương tác hoặc thậm chí là thiết kế theme cho WordPress – theo một cách rất thiết thực và hiệu quả để thành thạo các ngôn ngữ lập trình liên quan. Tuy nhiên, ở đây cũng có rất nhiều khóa học cơ bản cùng với cách dạy là hướng dẫn bằng video sau đó là phần hỏi đáp.

Đối với Treehouse, mỗi khóa học sẽ được chia làm bốn giai đoạn hoặc mô-đun khác nhau, và khi bạn học xong giai đoạn đầu tiên thì sẽ được yêu cầu trả một khoản phí thuê bao hàng tháng là $25 đô-la để truy cập toàn bộ khóa học với trên 650 video và bạn sẽ được là thành viên của diễn đàn tại Treehouse. Nếu bạn có ý định nghiêm túc theo đuổi nghề lập trình trong tương lai thì bạn có thể chọn thuê gói thuê bao theo tháng với giá $49 đô-la để xem được những phỏng vấn chuyên sâu với những chuyên gia trong ngành và các giáo trình nâng cao khác.

5. LearnStreet

Nếu bạn là dạng người không thích những thiết kế hào nhoáng mà chỉ thích làm việc với những dòng code, thì LearnStreet được thiết kế ra để dành cho bạn. Nó hiện tại chỉ đưa ra các khóa học về JavaScript, Python và Ruby ở mức độ dành cho người mới học. Với một cú click chuột vào nút “Start Course” thì bạn sẽ bắt đầu bài học ngay cùng với một bài tập, một trình thông dịch code và một thanh hiển thị những thuật ngữ (rất có ích cho những lập trình viên mới vào nghề).

LearnStreet có một bộ thông dịch code theo phong cách dòng nhắc lệnh (command prompt) cùng với những hướng dẫn để giải thích các chức năng và khuyến khích bạn bất cứ lúc nào có thể. Tuy nhiên, bộ thông dịch code có thể hơi khiếm nhã theo chuẩn của nó, và nó luôn yêu cầu bạn phải gõ thường xuyên những dòng code và những nội dung mà nó yêu cầu.
Một điểm nữa đó là nó rất dễ sử dụng và khá thú vị, và quan trọng nhất là hoàn toàn miễn phí:)

6. Udacity

Udacity là một sự kết hợp của những bài học bằng video có chiều sâu và những câu hỏi vấn đáp để có được cảm giác tương tác dành cho học viên, vì thế nó rất lý tưởng dành cho những ai không thích đọc nhiều, thay vì đó họ sẽ nhận được những hướng dẫn qua video từ các chuyên gia trong ngành, như là các nhân viên của Google chẳng hạn.

Bạn sẽ được xem một video từ các chuyên gia bàn luận và hướng dẫn về một chủ đề nào đó, sau đó bạn sẽ trả lời những câu hỏi mang tính logic về lập trình để mở rộng vốn hiểu biết hoặc rèn luyện kỹ năng thực hành. Một điều đáng nói là Udacity cung cấp số lượng video nhiều hơn hẳn các trang web khác, và những người hướng dẫn thường là các giáo sư đại học hoặc là các chuyên gia kỳ cựu ở trong ngành.
Chỉ có một nhược điểm là hầu hết các khóa học ở đây không liên quan đến nhau nhiều cho lắm, vì thế Udacicy thường không phải là nơi để bạn bắt đầu học lập trình, nhưng nó là một trường đại học ảo cung cấp cho bạn rất nhiều kiến thức trong con đường học vấn sau này.

7. CodeHS

Đến thời điểm này thì tất cả các trang web đề cập ở trên chủ yếu tập trung vào phát triển web và khoa học máy tính, nhưng CodeHS là một trang web đem lại cho bạn sự đơn giản và thích thú bởi các bài học lập trình game, hướng dẫn cách giải quyết vấn đề, JavaScript, hiệu ứng động, cấu trúc dữ liệu, thiết kế game và những thử thách khác.

Điểm nổi bật của CodeHS là nó sẽ dạy bạn cách nghĩ và giải quyết một vấn đề giống như một lập trình viên thực thụ ngay trong khóa học đầu tiên. Các bài học ở đây rất vui nhộn kiểu như bạn sẽ học cách sử dụng code để di chuyển một con chó, cho tới việc hoàn thành một tác vụ nhất định và khó hơn như nhặt bóng hoặc xây tháp. Nó cung cấp cho bạn những khái niệm lập trình nền tảng và phương pháp giải quyết vấn đề một cách có hệ thống ở trong đầu.
Bạn phải đăng ký với mức phí $25 đô-la/tháng để tiếp tục khóa học của mình, nhưng nó là một trang web hoàn hảo để học lập trình game cơ bản một cách khá hiệu quả.

8. Khan Academy

Mặc dù các khóa học của Khan Academy không có cấu trúc bằng các khóa học tại CodeHS, nhưng nó phục vụ như là một sân chơi mở dành cho cả lập trình viên mới vào nghề lẫn những người không chuyên mà có sở thích trong việc vẽ, hiệu ứng động và tương tác người dùng cùng với code. Khan Academy không nói về một ngôn ngữ lập trình xác định nào cả, nhưng những code pattern ở đây thì có thể áp dụng ở khắp nơi, và những ngôn ngữ lập trình phổ biến đều chia sẻ chung những pattern đó.

Đầu tiên bạn có thể tham gia vào khóa lập trình cơ bản để xem qua và học các khái niệm căn bản trước, sau đó khám phá những đoạn code được cung cấp phía sau mỗi bài hướng dẫn bằng video để củng cố thêm kiến thức. Cùng với Khan Academy, bạn có thể lưu lại những chỉnh sửa của bạn như là một “sản phẩm” để cho mọi người có thể tham khảo và tùy chỉnh lại. Có đến hàng trăm sản phẩm chỉ từ một bài học trong một khóa học, vì thế bạn hãy tưởng tượng với số lượng lớn học viên trong cộng đồng thì tính hiệu quả của khóa học sẽ lớn đến nhường nào.

9. Scratch 2.0

Nếu bạn nghĩ rằng CodeHS và Khan Academy vẫn còn quá khó cho lũ trẻ nhà bạn có thể học được, bởi vì chúng chưa có những kiến thức căn bản. Thì cũng đừng lo lắng, có một thứ thậm chí còn dễ hơn cho khao khát của bạn về một thế hệ lập trình tài năng kế tiếp, và nó được gọi là Scratch. Trước đây nó là một phần mềm cài đặt trên máy tính cá nhân để cho phép lũ trẻ có thể tạo, tải và chia sẻ những dự án của chúng một cách thích thú, nhưng nay Scratch đã chuyển lên giao diện dạng web 2.0 một cách hoàn toàn.

Tuy nhiên nó không chỉ đơn thuần là về lập trình, mà nó là một sự kết hợp của các khối dòng lệnh để điều khiển hành vi của đối tượng, như là ra lệnh cho đối tượng con mèo di chuyển 10 bước, hoặc kêu ‘meo meo’ khi nó chạm đến chân của ông chủ. Bằng cách sử dụng phương pháp lập trình trực quan sinh động, các em nhỏ sẽ hình thành nên một thói quen chia các vấn đề lớn thành những khối nhỏ hơn và giải quyết chúng từng cái một theo trình tự logic.

10. SQLZOO

Structured Query Language (SQL) chỉ là một ngôn ngữ được thiết kế chuyên về lưu trữ và truy xuất dữ liệu từ cơ sở dữ liệu, vì thế hãy hình dung ra sự nhàm chán mà bạn sẽ phải trải qua khi lập trình với một chương trình quản lý dữ liệu lớn. Vì thế SQLZOO muốn bạn học SQL một cách vui vẻ hơn cùng với nhiều tương tác thú vị.
SQLZOO

Thực ra không có gì nhiều để giải thích về một ngôn ngữ không phức tạp lắm như SQL, trang web này sẽ chỉ yêu cầu bạn thay thế một số biến như tên thành phố hoặc số dân, và tăng dần mức độ khó lên cao dần. Một điểm khá đáng tiếc là trang web này lại không có phần gợi ý, các câu đáp án và diễn đàn hỗ trợ, vì thế có thể bạn sẽ gặp phải một vài khó khăn trong việc giải quyết các câu trắc nghiệm tại đây.

Bảng so sánh giữa các trang web

Sau đây là bảng so sánh giữa các trang web trên về những ưu và nhược điểm của chúng, cũng như là mức phí dành cho mỗi khóa học.
Trang webKhóa họcĐặc trưngHọc phíĐộ khó
CodecademyHTML, CSS, JavaScript, jQuery, PHP, Ruby, Python, APIBộ thông dịch code, Progress Saver, Project, Diễn đànMiễn phíDễ – Trung bình
Code AvengersHTML5, CSS3, JavaScriptBộ thông dịch code, Progress Saver, Project, Ghi chúMiễn phíDễ
Code SchoolHTML5, CSS, CSS3, jQuery, Ruby, Ruby on Rails, iOSBộ thông dịch code, Screencast, Progress Saver, Diễn đànMiễn phí, $25 đô-la/thángTrung bình – Khó
TreehouseHTML, CSS, CSS3, JavaScript, jQuery, Ruby, Ruby on Rails, iOS, Android, UX, DatabaseBộ thông dịch code, Screencast, Progress Saver, Project, Diễn đànMiễn phí, $25 đô-la/tháng, $49 đô-la/thángDễ – Khó
LearnStreetHTML, CSS, JavaScript, Python, RubyBộ thông dịch code, Progress Saver, Project, Diễn đànMiễn phíDễ
UdacityPhát triển Web, HTML5, Python, Java, Khoa học máy tính, Thuật toán, Trí tuệ nhân tạoBộ thông dịch code, Screencast, Progress Saver, Diễn đànMiễn phíTrung bình – Cực khó
CodeHSGiải quyết vấn đề, JavaScript, Hiệu ứng động, Lập trình GameBộ thông dịch code, Screencast, Progress SaverMiễn phí, $25 đô-la/tháng, $75 đô-la/thángDễ – Trung bình
Khan AcademyLập trình căn bản, Canvas Drawing, Hiệu ứng động, Tương tác người dùngBộ thông dịch code, Screencast, Progress Saver, Project, Diễn đànMiễn phíDễ – Trung bình
Scratch 2.0Lập trình trực quanVisual Editor, Project, Diễn đànMiễn phíDễ
SQLZOOSQLBộ thông dịch codeMiễn phíDễ – Khó
Bạn đã từng học tại bất kỳ trang web nào trong số những trang web mà chúng tôi liệt kê ở trên chưa? Bạn thấy như thế nào? Liệu chúng tôi có liệt kê sót một vài trang web dạy lập trình tương tác tuyệt vời nào chăng?
Bài viết được dịch từ Hongkiat.com