Sun Apr 22, 2012 7:40 am
Trong quá trình làm việc và tham gia phỏng vấn, mình có nhận xét chung là lập trình viên hiện nay đang thiếu rất nhiều kiến thức về logic học và giải thuật, kiến thức nền tảng để trở thành lập trình viên. Bài viết này mình sẽ đưa ra một số kinh nghiệm học lập trình và cách hiểu về lập trình sao cho đúng.
Vậy lập trình là gì? Lập trình là đưa ra một phương pháp giải quyết cho một lớp các bài toán. Lập trình không phải là cứ phải có máy tính, phải sử dụng một ngôn ngữ lập trình nào đó. Thực tế trong cuộc sống hàng ngày chúng ta đã lập trình và được lập rất nhiều chương trình. Khi bạn lập ra kế hoạch hàng ngày -> bạn đã lập trình và cũng chính bạn là người thực thi chương trình đó. Có điều đa số chúng ta sẽ không bao giờ thực thi nó một cách chính xác cả .
Để giới hạn lại khái niệm lập trình, trong bài viết này mình sẽ chỉ nói về lập trình trên máy tính, sử dụng ngôn ngữ lập trình nào đó. Bạn có thể hiểu lập trình máy tính là đưa ra một phương pháp giải quyết bài toán dựa trên một tập các lệnh logic sử ngôn ngữ lập trình. Chính vì vậy logic học sẽ là kiến thức nền tảng của lập trình, và bạn hãy nhớ học tốt logic trước khi bạn có ý định học lập trình.
Tiếp đến là giải thuật (hay thuật toán), một yếu tố quan trọng và không thể thiếu trong lập trình. Giải thuật chẳng qua cũng chỉ là một tập các logic được sử dụng để giải quyết bài toán, nó có thể là các logic rất đơn giản hoặc phức tạp, nhưng sẽ được sử dụng rất thường xuyên trong lập trình. Người ta đưa ra khái niệm giải thuật để mô tả một tập các logic, cái mà chưa được gọi là chương trình, từ đó chúng ta có thể cài đặt bằng một ngôn ngữ cụ thể để nó trở thành chương trình. Chúng ta có thể coi bất kì một logic giải quyết bài toán nào đều là thuật toán, đơn giản là các thuật toán giải phương trình, sắp xếp… phức tạp hơn là các thuật toán quy hoạch động, tham lam… Thường thì thuật toán sẽ gắn liền với cấu trúc dữ liệu, chính vì vậy người ta thường gọi là “Cấu trúc dữ liệu và giải thuật”.
Khi bạn đã có một kiến thức logic và giải thuật tốt thì việc học một ngôn ngữ lập trình sẽ trở lên rất đơn giản. Đúng như triết học đã chỉ ra “Ngôn ngữ chỉ là vỏ bọc của tư duy” và trong lập trình cũng vậy, ngôn ngữ lập trình chỉ là vỏ bọc của tư duy logic và giải thuật. Ngôn ngữ là công cụ để bạn thể hiện tư duy logic của mình, và bạn có thể sử dụng bất kì ngôn ngữ nào mà không làm thay đổi logic của bạn. Khi đã hiểu được điều này, bạn sẽ nhận ra rằng mọi ngôn ngữ lập trình đều giống nhau.
Trước tiên mình sẽ nói về các ngôn ngữ thủ tục như Pascal hay C. Các ngôn ngữ này đều cho phép ta khai báo cấu trúc dữ liệu và các thuật toán thông qua các kiểu dữ liệu và lệnh. Các kiểu dữ liệu bao gồm các kiểu cơ bản như số nguyên, số thực, kí tự, text, logic (true/false)…, các kiểu cấu trúc, mảng hay hơn nữa là các kiểu dữ liệu do người dùng tự định nghĩa. Tiếp theo là các lệnh điều kiện (if … else…, switch… case…) và các lệnh lặp (loop, for, while). Đây chính là các lệnh cơ bản và quan trọng mà mọi ngôn ngữ phải có, vì nó chính là cú pháp cho phép ta mô tả logic bài toán. Ngoài ra, các ngôn ngữ này còn cho phép chúng ta định nghĩa các thủ tục (procedure) hay hàm (function). Các khái niệm này có được sử dụng hay không tùy vào ngôn ngữ lập trình nhưng nó cũng chẳng qua là một cách cài đặt giúp chúng ta tổ chức và sử dụng lại các tập lệnh mà thôi.
Tiếp theo là lập trình hướng đối tượng. Sự ra đời của lập trình hướng đối tượng đánh dấu một sự phát triển nhảy vọt trong lập trình máy tính. Về ưu điểm của lập trình hướng đối tượng mình sẽ không viết ra ở đây nhưng có 4 tính chất quản trọng của lập trình hướng đối tượng mà mọi lập trình viên sẽ phải nhớ:
Tính trừu tượng (abstraction)
Tính đóng gói (encapsulation)
Tính đa hình (polymorphism)
Tính kế thừa (inheritance)
Thông tin chi tiết bạn có thể tham khảo bất kì tài liệu lập trình hương đối tượng nào, cái quan trọng là trước khi học ngôn ngữ lập trình hướng đối tượng bạn phải hiểu rõ các khái niệm và tại sao người ta đưa ra các khái niệm đó trong lập trình hướng đối tượng. Như vậy khi học ngôn ngữ bạn sẽ nắm bắt nhanh và thực sự ngôn ngữ sẽ không còn là vấn đề quan trọng nữa.
Chúc các bạn thành công!
Vậy lập trình là gì? Lập trình là đưa ra một phương pháp giải quyết cho một lớp các bài toán. Lập trình không phải là cứ phải có máy tính, phải sử dụng một ngôn ngữ lập trình nào đó. Thực tế trong cuộc sống hàng ngày chúng ta đã lập trình và được lập rất nhiều chương trình. Khi bạn lập ra kế hoạch hàng ngày -> bạn đã lập trình và cũng chính bạn là người thực thi chương trình đó. Có điều đa số chúng ta sẽ không bao giờ thực thi nó một cách chính xác cả .
Để giới hạn lại khái niệm lập trình, trong bài viết này mình sẽ chỉ nói về lập trình trên máy tính, sử dụng ngôn ngữ lập trình nào đó. Bạn có thể hiểu lập trình máy tính là đưa ra một phương pháp giải quyết bài toán dựa trên một tập các lệnh logic sử ngôn ngữ lập trình. Chính vì vậy logic học sẽ là kiến thức nền tảng của lập trình, và bạn hãy nhớ học tốt logic trước khi bạn có ý định học lập trình.
Tiếp đến là giải thuật (hay thuật toán), một yếu tố quan trọng và không thể thiếu trong lập trình. Giải thuật chẳng qua cũng chỉ là một tập các logic được sử dụng để giải quyết bài toán, nó có thể là các logic rất đơn giản hoặc phức tạp, nhưng sẽ được sử dụng rất thường xuyên trong lập trình. Người ta đưa ra khái niệm giải thuật để mô tả một tập các logic, cái mà chưa được gọi là chương trình, từ đó chúng ta có thể cài đặt bằng một ngôn ngữ cụ thể để nó trở thành chương trình. Chúng ta có thể coi bất kì một logic giải quyết bài toán nào đều là thuật toán, đơn giản là các thuật toán giải phương trình, sắp xếp… phức tạp hơn là các thuật toán quy hoạch động, tham lam… Thường thì thuật toán sẽ gắn liền với cấu trúc dữ liệu, chính vì vậy người ta thường gọi là “Cấu trúc dữ liệu và giải thuật”.
Khi bạn đã có một kiến thức logic và giải thuật tốt thì việc học một ngôn ngữ lập trình sẽ trở lên rất đơn giản. Đúng như triết học đã chỉ ra “Ngôn ngữ chỉ là vỏ bọc của tư duy” và trong lập trình cũng vậy, ngôn ngữ lập trình chỉ là vỏ bọc của tư duy logic và giải thuật. Ngôn ngữ là công cụ để bạn thể hiện tư duy logic của mình, và bạn có thể sử dụng bất kì ngôn ngữ nào mà không làm thay đổi logic của bạn. Khi đã hiểu được điều này, bạn sẽ nhận ra rằng mọi ngôn ngữ lập trình đều giống nhau.
Trước tiên mình sẽ nói về các ngôn ngữ thủ tục như Pascal hay C. Các ngôn ngữ này đều cho phép ta khai báo cấu trúc dữ liệu và các thuật toán thông qua các kiểu dữ liệu và lệnh. Các kiểu dữ liệu bao gồm các kiểu cơ bản như số nguyên, số thực, kí tự, text, logic (true/false)…, các kiểu cấu trúc, mảng hay hơn nữa là các kiểu dữ liệu do người dùng tự định nghĩa. Tiếp theo là các lệnh điều kiện (if … else…, switch… case…) và các lệnh lặp (loop, for, while). Đây chính là các lệnh cơ bản và quan trọng mà mọi ngôn ngữ phải có, vì nó chính là cú pháp cho phép ta mô tả logic bài toán. Ngoài ra, các ngôn ngữ này còn cho phép chúng ta định nghĩa các thủ tục (procedure) hay hàm (function). Các khái niệm này có được sử dụng hay không tùy vào ngôn ngữ lập trình nhưng nó cũng chẳng qua là một cách cài đặt giúp chúng ta tổ chức và sử dụng lại các tập lệnh mà thôi.
Tiếp theo là lập trình hướng đối tượng. Sự ra đời của lập trình hướng đối tượng đánh dấu một sự phát triển nhảy vọt trong lập trình máy tính. Về ưu điểm của lập trình hướng đối tượng mình sẽ không viết ra ở đây nhưng có 4 tính chất quản trọng của lập trình hướng đối tượng mà mọi lập trình viên sẽ phải nhớ:
Tính trừu tượng (abstraction)
Tính đóng gói (encapsulation)
Tính đa hình (polymorphism)
Tính kế thừa (inheritance)
Thông tin chi tiết bạn có thể tham khảo bất kì tài liệu lập trình hương đối tượng nào, cái quan trọng là trước khi học ngôn ngữ lập trình hướng đối tượng bạn phải hiểu rõ các khái niệm và tại sao người ta đưa ra các khái niệm đó trong lập trình hướng đối tượng. Như vậy khi học ngôn ngữ bạn sẽ nắm bắt nhanh và thực sự ngôn ngữ sẽ không còn là vấn đề quan trọng nữa.
Chúc các bạn thành công!