
Kinh nghiệm tự học lập trình?
tôi đã tốt nghiệp đại học một cách may mắn nhưng khi đi làm thì ko còn được may mắn như vậy nữa. tôi bị rỗng kiến thức hoàn toàn , bây giờ tôi muốn học lập trình thì nên bắt đầu học từ đâu học những môn gì. ví dụ như tôi đọc tài liệu về lập trình php mà tôi cảm thấy rất mơ hồ không hiểu gì cả vì chưa có nền tảng gì đó(tôi cảm thấy thiếu cái gì đó dù đã học tốt ngôn ngữ php) xin tư vấn giúp tôi , xin cảm ơn

Học lập trình không phải là chuyện mà ta có thể làm trong một sớm, một chiều, nhưng nó không phải là quá khó khăn. Có rất nhiều điều bạn có thể làm cho nó dễ dàng hơn khi bạn học lập trình. Bài viết sau đây được tham khảo từ trang web cprogramming.com sẽ có thể giúp ích cho chúng ta khám phá được những bí quyết để học lập trình tốt hơn và nhanh hơn.
Một trong những chủ đề được nói đến rất nhiều về mẹo học lập trình là:
Đừng đi quá nhanh, hãy nắm bắt nó trước khi đi tiếp. (Don’t go too fast, get it right before move on)
Chúng ta thường thắc mắc tại sao trong lớp học của mình, có một số bạn của chúng ta biết trước về một số ngôn ngữ lập trình. Trong những tuần đầu tiên học thường nắm bắt kiến thức rất nhanh, nhưng càng về sau họ lại bị bỏ ở đằng sau bởi những sinh viên khác. Tại sao họ lại bị bỏ xa trong khi nền tảng của họ tốt hơn.???
Đó chính là việc họ đã đi quá nhanh, và lối mòn của họ là tưởng rằng mình biết tất cả nhưng thực sự họ hiếm khi thực hiện công việc lập trình. Có thể họ biết một số cái nâng cao hơn so với những sinh viên khác, nhưng bấy nhiêu đó là không đủ để nắm vững các nguyên tắc cơ bản. Cũng giống như khi chúng ta làm bài kiểm tra môn toán thường có 8 điểm là có một người có học lực khá có thể đạt được, nhưng có một số sinh viên làm được bài 2 điểm khó kia và có một số bài tập cơ bản vẫn chưa hoàn thành, nên kết quả không bằng một sinh viên nắm vững các kiến thức cơ bản có thể làm được.
Do đó, trước tiên chúng ta cần tạo cho mình một nền tản (Foundation) tốt bằng cách thường xuyên luyện tập thực hành cái bài tập lập trình. Trong quá trình luyện tập như vậy bạn sẽ thấy được những vấn đề cơ bản mà các lập trình viên thường mắc phải. Và tạo cho mình một thoái quen tốt để giải quyết vấn đề.
Đồng thời bạn đừng bao giờ ngừng tiến trình luyện tập của mình, cũng không nên đi quá nhanh hay quá chậm. Đừng tránh một chủ đề nào sau khi bạn đã nắm vững tất cả những gì dẫn đến nó. Bằng cách đối mặc với nhiều ý tưởng và thách thức, bạn sẽ có một chất men giúp bạn nhanh chóng nắm bắt được những vấn đề cơ bản. Sau đây là 5 cách để bạn định hướng được việc học lập trình nhanh hơn.
1. Xem các code ví dụ (Look at the Example Code):
- Khi đọc sách chúng ta thường đọc các từ trên trang sách đó, nhưng học lập trình thì đó là code. Khi bạn mới bắt đầu học lập trình, bạn nên xem xét kỹ lưỡng và cố gắng hiểu từng ví dụ. Trước khi đọc các lời giải thích về chương trình trong sách, bạn nên cố gắng đọc và hiểu các đoạn code mà tác giả đã viết dùng để làm gì. Tuy các ví dụ đó không phải khi nào đánh vào máy cũng chạy, nhưng nó tập cho chúng ta một thoái quen xem code cẩn thận và góp phần giúp chúng ta viết code rõ ràng hơn.
- Chúng ta phải viết code làm sao để cho các lập trình viên khác có thể đọc và hiểu nó, và để khi chính mình nhìn lại cũng nắm được. Do đó cần phải tuân thủ những nguyên tắc, và cú pháp khi viết code để đảm bảo kiểm tra lỗi đơn giản hơn, các phần hướng dẫn viết code theo một mẫu chuẩn thường được viết ở đầu các cuốn sách lập trình, nhưng ít người học lập trình để ý đến vấn đề này.
2. Đừng chỉ đọc các code ví dụ - hãy chạy thử nó (Don’t just Read exam code – Run It)
- Khi bạn đọc một chương trình hướng dẫn (hay một cuốn sách), bạn thường xem các code ví dụ của nó và nói “Tôi đã nắm được nó, tôi đã hiểu được nó….”. Tất nhiên là bạn có thể nắm được nó, nhưng bạn thực sự chưa hiểu được nó hoạt động như thế nào, cho kết quả ra sao.
Do đó trước khi đọc một cuốn sách về lập trình, bạn nên cài trình biên dịch của ngôn ngữ mà bạn đang học vào máy (ví dụ học C++ thì bạn cài Dev C++ hay visual c++). Để sẵn sàng chạy thử tất cả các ví dụ trong cuốn sách hay chương trình mà bạn đang đọc.
- Tôi nói chạy thử ở đây không phải là copy rồi paste vào rồi nhấn F5. Tôi khuyên bạn nên tự mình đánh những đoạn code đó vào chương trình biên dịch, vì khi đó bạn thực sự buộc mình phải đi qua tất cả các mã,việc gõ mã lệnh sẽ giúp bạn chú ý đến các chi tiết cú pháp của ngôn ngữ – những sự thiếu soát buồn cười như thiếu đấu chấm phẩy ở cuối mỗi câu lệnh có thể làm bạn hết sức đâu đầu.
- Sau khi gõ mã lệnh vào chương trình, hãy chạy thử nó. Rồi viết thêm một số câu lệnh mới vào chương trình của mình xem nó có hoạt động xem. Điều đó sẽ giúp bạn hiểu nhanh hơn mỗi câu lệnh có ý nghĩa như thế nào.
3. Hãy viết mã riêng của bạn càng sớm càng tốt (Write your own code as soon as possible).
- Khi bắt đầu viết một chương trình bạn không biết phải bắt đầu từ đâu, sử dụng cấu trúc dữ liệu gì? Việc phân bổ viết code như thế nào? Xử lý các phương thức ra sao?… Điều đầu tiên là bạn sử dụng các công cụ tìm kiếm ở google hoặc các công cụ tìm kiếm khác để tìm kiếm đoạn mã mình cần. Đây là một điều có thể làm cho tư duy lập trình của bạn ngày càng giảm đi và ngày càng bị lệ thuộc vào các công cụ tìm kiếm.
- Giải pháp được đưa ra trong trường hợp này là bạn hãy tự nghĩ cho mình một thuật toán riêng. Đầu tiên bạn viết nó bằng mã giả, sau đó dùng ngôn ngữ lập trình để viết lại. Tuy việc này rất khó và tốn nhiều thời gian, nhưng nó sẽ giúp bạn có được những kinh nghiệm thực sự hữu ích, khả năng tư duy lập trình ngày càng phát triển. Thay vì lên mạng tìm code về sửa.
- Trường hợp ý tưởng chương trình của bạn lớn, phải viết một lượng lớn code. Khi đó bạn hãy phân nhỏ từng tính năng chương trình của mình ra, tự tập thiết kế cấu trúc của chương trình nhỏ đó, rồi ghép chúng lại với nhau sẽ được một chương trình lớn hoàn chỉnh hơn. Có thể chương trình đó không hoạt động tốt, nhưng cái mà bạn được ở đây chính là kinh nghiệm và một tư duy tự lập trong lập trình.
4. Tìm hiểu cách sử dụng một công cụ Debug (Learn to use a Debugger)
- Debug là một công cụ rất tốt dùng để gỡ rối chương trình của bạn khi có một lỗi nào đó là chương trình bạn chạy sai. Nó cho bạn theo dõi giá trị của các biến và các thay đổi của chúng qua từng mã lệnh của chương trình. Công cụ debug mạnh nhất có lẽ được tích hợp trong các sản phẩm của Microsoft như Visual Studio (Hiện nay là visual studio 2010). Công cụ debug giúp chúng ta hiểu chương trình của mình hơn, và là thứ chúng ta cần phải biết khi viết chương trình.
- Một chương trình debug có thể giúp bạn nhanh chóng trả lời những gì mà bạn đang làm như ví dụ bên dưới.
int main() { int x; int y; if( x > 4 ) // <— Giá trị của X ở đây là bao nhiêu? { y = 5; // <— Dòng code này thực thi như thế nào? } }
- Và lời khuyên cuối cùng về debug là: khi bạn lần đầu tìm hiểu về debuger, có thể nó sẽ làm bạn mất khá nhiều thời gian khi bạn sửa lỗi chương trình của mình. Nhưng khi bạn nắm được các kiến thức về debug nó sẽ đem lại cho bạn một lợi ích lớn trong việc tiết kiệm thời gian khi sửa lỗi chương trình. Tôi tin rằng mỗi bạn đều có thể tìm ra cho mình một cách debug chương trình hiệu quả, bởi nó sẽ theo suốt sự nghiệp lập trình của bạn.
- Tôi thường thấy các sinh viên khác không muốn sử dụng công cụ debug (có thể là không biết giống như tôi lúc trước). Những sinh viên đã tự làm khó mình trong việc tìm kiếm lỗi sai trong chương trình. Do đó khi bạn đã xác định theo con đường lập trình, hãy học cách sử dụng một công cụ debug, nó sẽ mang lại cho bạn nhiều lợi ích thiết thực hơn bạn nghĩ.
5. Tìm kiếm thêm những nguồn tài tài liệu khác (Seek our more sources)
- Khi bạn không hiểu một điều gì đó, internet là một nơi với lượng thông tin khổng lồ mà bạn tìm đến. Thế nhưng có những bài viết về đề tài mà bạn muốn tìm thì lại được tác giả viết sơ sài, hoặc có thể sai. Do đó bạn phải hết sức thận trọng khi sử dụng các thông tin từ internet vào chương trình của mình.
- Ngoài ra việc tìm kiếm một cuốn sách với những giải thích chi tiết sẽ giúp bạn nhanh chóng nắm được vấn đề hơn.
- Bạn cũng có thể tham gia vào các diễn đàn về lập trình (ví dụ lập trình c, c++, c# thì có diễn đàn Congdongcviet.com), khi không hiểu một vấn đề gì đó bạn có thể post bài để các thành viên trong diễn đàn giúp đỡ cho bạn. Nếu có khả năng về tiến anh thì bạn lên các diễn đàn nước ngoài sẽ có nhiều thành viên xuất sắc ở đó tìm kiếm thông tin và trả lời giúp (codeproject.com, cprogramming.com, cplusplus.com…). Lưu ý khi hỏi trên các diễn đàn bạn phải đặt câu hỏi ngắn gọn, tập trung vào mô tả nội dung vấn đề mà bạn đang gặp vướng mắc thì bạn sẽ nhận được câu trả lời tốt hơn.
- Việc trước mỗi buổi học nên chuẩn bị một danh sách các câu hỏi về những vướng mắc mà bạn gặp phải vào một cuốn sổ tay nhỏ để lên hỏi giáo viên hoặc bạn bè là một việc rất có ích, nó sẽ giúp bạn tiếp thu hơn, và nó cho thấy rằng bạn là một con người cầu tiến, ham học hỏi.
- Cuối cùng là việc hết sức quan trọng, Học Nhóm. Học nhóm sẽ giúp bạn tiến bộ nhanh hơn, tăng cường khả năng giao tiếp với bạn bè và đồng nghiệp sau này. Khi làm việc nhóm bạn sẽ viết ra được những chương trình lớn hơn và có sức thuyết phục người dùng hơn. Tôi khuyên bạn đừng bao giờ ôm hết công việc về mình.
Mong rằng bài viết này có thể giúp chúng ta nắm được những nguyên tắc cơ bản của môt người mới bắt đầu đi vào thế giới lập trình.

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!