18-05-2017, 08:33
#1
Tuyệt đỉnh cảnh giới lập trình
Ai cũng đã từng xem phim kiếm hiệp Trung Quốc hay đã từng nghe thấy cảnh giới niết bàn trong phật giáo đều thể hiện sự uyên thâm trong võ công, khó khăn tu luyện để đạt tới cảnh giới cao nhất. Vậy trong thế giới lập trình các bạn đã đạt tới cảnh giới nào? Cùng nhau chiêm nghiệm xem “võ công lập trình” của các bạn tới đâu qua bài viết dưới đây:
Cảnh giới 1. Nhập môn (beginner)
Mới bước vào ngành CNTT và lập trình thì ai ai cũng phải “nhập môn”, làm quen. Vì vậy mà nhiều khi code rất là trẻ trâu. Code đọc khó hiểu, tệ hơn là thụt dòng loạn xạ không có quy tắc.
Cảnh giới 2. Biết sử dụng hàm, thư viện chuẩn có sẵn
Một trong những bước đệm để bạn giỏi lên là phải học thuộc càng nhiều hàm, càng nhiều thư viện càng tốt, giống như học từ vựng tiếng Anh ấy. Điều này đôi khi nghe có vẻ phi lý, vì sao ta lại học thuộc lòng ?
Đơn giản vì ta đang muốn giải quyết nhanh một vấn đề, sao ta lại tốn công sức viết thủ công các hàm trong khi thư viện đã có sẵn, gọi 1 phát là xong ? Ta sẽ tiết kiệm được thời gian, công sức để tập trung vào vấn đề chính nhiều hơn. Nhiều khi mình lo viết hàm phụ mà hàm phụ bị lỗi, gây rối, mất tập trung, xuống tinh thần.
Cảnh giới 3. Tinh thông hàm, thư viện, nguyên lý
“Tinh thông” hoàn toàn khác với chuyện “biết biết một chút”.
Khi bạn hiểu rõ được cú pháp các hàm xử lý, bạn sẽ dễ dàng ứng dụng nó để xử lý bài toán tốt nhất. Ví dụ “xác định số đối xứng”. Khi bạn chưa hiểu rõ hàm strcmp, strrev, strcpy thì bạn chỉ hiểu đơn giản là nó giúp mình làm cái này, cái kia. Nhưng khi bạn hiểu rõ được cú pháp của hàm đó, nguyên lý xử lý của hàm đó, thì bạn có thể áp dụng để làm cho code mượt mà hay hơn như hình ở trên.
Cảnh giới 4. Cấu trúc dữ liệu và thuật toán
Bạn sẽ ứng dụng những cấu trúc dữ liệu & thuật toán để giải quyết một vấn đề ở mức độ tối ưu (tối ưu về tốc độ là chính).
Có những thứ ở cuộc sống rất là trừu tượng, khi mang nó vào biểu diễn trong lập trình thì phải nói là 1 thảm họa khủng khiếp, vì bình thường ta chỉ khai báo các biến, sử dụng các hàm có sẵn để xài, vậy thôi.
Ví dụ: hệ thống bản đồ. Làm sao mà các lập trình viên có thể mô phỏng lại bản đồ trên máy tính, và có thể giúp ta tìm đường đi ngắn nhất giữa 2 địa điểm nào đó ? Google Maps là 1 ví dụ rất điển hình. Nếu ta chỉ khai báo biến, sử dụng các hàm có sẵn như nhập số, tách chuỗi, ghép chuỗi, v.v thì liệu có thể làm được điều này ?
Nhờ những cấu trúc, dữ liệu cơ bản như số nguyên, số thực, mảng, v.v người ta kết nối chúng, tập hợp lại (trong struct, class) rồi áp dụng một quy tắc hoạt động đặc biệt, vậy là có thể hình thành nên 1 cấu trúc dữ liệu. Từ đó giúp ta giải quyết vấn đề cực kì hay và ngọt, mà lại hiệu quả nữa.
Đi kèm với cấu trúc dữ liệu, đó là thuật toán. Cấu trúc dữ liệu quyết định thuật toán. Thuật toán giúp bạn tư duy tốt hơn. Bạn cần phải luyện tập nhiều với thuật toán.
Cảnh giới 5. Phương pháp lập trình Hướng đối tượng
Cảnh giới được nâng lên tối thượng hay không cũng là nhờ phương pháp lập trình Hướng đối tượng.
Tư duy Hướng đối tượng: đối tượng là trung tâm của việc lập trình, hàm chỉ là phụ
Khi có tư duy lập trình Hướng đối tượng, bạn sẽ nhìn mọi vật, mọi sự việc lên 1 tầm cao mới, khác xa với con mắt của người bình thường (giống như cảnh giới trước đó á).
Phương pháp lập trình Hướng đối tượng (PP LT HĐT) giúp bạn tiết kiệm thời gian, công sức, tái sử dụng code, mở rộng phần mềm. Nếu áp dụng tốt phương pháp lập trình HĐT và cấu trúc dữ liệu/thuật toán thì bạn có thể nói là rất vững cơ bản rồi đó
Cảnh giới 6. Engine, framework, thư viện, đa nền tảng
Khi học, bạn học từ dưới đáy lên cao thì mới có thể đạt được cảnh giới. Khi bạn học ở trên rồi bạn đào sâu xuống dưới thì thường rất khó và gần như không thể.
5 cảnh giới trước là bạn đang ở đáy, và đến cảnh giới này là bạn bắt đầu học lên mức “ứng dụng thực tế”. Bạn sử dụng các engine, framework, thư viện có sẵn để làm nên 1 chương trình hoàn thiện, có giao diện đàng hoàng, tung ra ngoài thị trường. Bạn có thể va chạm nhiều với MVC, MVVM, XML, database, Windows Form, WPF, Java Swing, v.v
Tưởng tượng như 5 cảnh giới trước là bạn luyện nội công vững vàng, thì ở cảnh giới này bạn học ngoại công để thể hiện ra ngoài. Khi có nội công vững, ngoại công tốt thì thiên hạ nhìn vào biết bạn là cao thủ, thiên hạ khiếp sợ.
Còn với những bạn chưa có nội công tốt mà đã lo vội thể hiện thì thật là thảm họa.
Ở cảnh giới này thì đồng thời bạn đã biết sử dụng các thư viện bên ngoài, biết cách link thư viện với project, biết tạo DLL, LIB và sử dụng chúng. Thường bạn sẽ chìm đắm rất lâu trong cảnh giới này vì ham mê thể hiện và học quá nhiều thứ
Cảnh giới 7. Phong cách lập trình
Lên đến cảnh giới này, bạn bắt đầu chăm chú cho code mình được đẹp hơn, ưu việt hơn, dễ đọc hơn. Tưởng tượng: bạn viết 1 đống code cả ngàn dòng rất là cao siêu, sau 1 năm bạn đọc lại code mình bạn còn hiểu không ?
Khoảng trắng giữa các thành phần là quan trọng. Bạn cần tách ra rõ ra phần nào ra phần đó. Ví dụ bạn khai báo biến, sau đó nhập dữ liệu, sau đó xử lý, và xuất ra kết quả. Vậy thì: nên có thêm khoảng trắng giữa 4 thành phần trên.
Đó là chưa kể có cách viết code như sau:
Cách 1: if (x == 0) In_ra_dòng_chữ(“Hello”);
Cách 2: if (0 == x) In_ra_dòng_chữ(“Hello”);
Câu hỏi: liệu có sự khác biệt nào giữa 2 đoạn code trên không ?
Xét về mặt vật lý thì câu trả lời là KHÔNG, đều giống như nhau hoàn toàn. Xét về mặt tư duy: có 1 sự khác biệt rất lớn về đẳng cấp. Vì sao vậy ?
Giả sử ta quên đi 1 dấu ‘=’ trong biểu thức ở lệnh if.
Với cách 1 ta có thể nhầm lẫn if (x = 0) (thiếu đi 1 dấu ‘=’). Và code vẫn hợp lệ với C/C++, vì đó là việc “gán x = 0” nằm bên trong lệnh if, nhưng nó mang 1 ý nghĩa khác hoàn toàn và dẫn đến code sai.
Với cách 2 thì if (0 = x) là câu lệnh vô lý, làm sao mà hằng số gán giá trị được ? IDE sẽ gạch đỏ và báo lỗi ngay cho ta biết ===> “Code tự định nghĩa, tự né tránh lỗi vô lý”.
Cảnh giới 8. Hacking/cracking
Cảnh giới này dành cho những bạn nào thích học sâu về hệ thống bên dưới, có thể sâu đến mức nghiên cứu về hợp ngữ (asm).
Bạn sẽ học với Windows API, shell (Windows). Với Linux bạn có thể tìm hiểu về system calls, kernel, shell, v.v
Ở cảnh giới này, bạn sẽ đi rất sâu về bên dưới, hiểu rõ đươc cơ chế hoạt động của hệ điều hành, ví dụ bạn tiêm DLL, ghi đè dữ liệu lên không gian bộ nhớ của tiến trình để hack, viết ra [virus] keylog, trojan, backdoor; hoặc bạn có thể nghiên cứu về cơ chế hook, message để từ đó mô phỏng lại quá trình test phần mềm tự động (test automation), v.v
Cảnh giới 9. Vô chiêu thắng hữu chiêu
Đến cảnh giới này thì có thể nói bạn đã bước chân đến mức master rồi.
Ở cảnh giới này thì tôi đoán là nhìn code cũng chạy được code trong đầu, khỏi cần chạy trên IDE luôn haha. Bạn có thể tự viết thư viện riêng cho mình mà thậm chí còn hay hơn những thư viện bên ngoài.
Nói vậy thôi, chớ tôi nghĩ rằng khi đạt đến mức độ này thì thường bạn sẽ đi nghiên cứu khoa học và công nghệ, về Big Data, Data Mining, Machine Learning, hay là Virtual Reality, v.v
Và dĩ nhiên còn nhiều cảnh giới cao hơn, tầm mắt của tôi chỉ đạt tới mức này thôi.
Các bạn đang luyện công đạt tới cảnh giới nào rùi???
Ps: Chúc các chiến hữu luyện công âm thầm như Gia Cát Lượng để đạt tới cảnh giới cao nhất sớm nắm trong tay cả thiên hạ!
Xem chi tiết tại: http://itvnn.net/showthread.php?59714-Tuy%E1%BB%87t-%C4%91%E1%BB%89nh-c%E1%BA%A3nh-gi%E1%BB%9Bi-l%E1%BA%ADp-tr%C3%ACnh