Kỹ năng lập trình

Những kỹ năng cần có của một lập trình viên

Tôi không muốn khẳng định lập trình là một công việc dễ dàng, nhưng tôi sẽ nói rằng nó không khó như người ta vẫn nghĩ. Lập trình không phải là một vấn đề thiên về lý thuyết như Hóa học hay Vật lý, bạn không cần phải đạt đến một cấp bậc thật cao để có thể làm việc tốt với nó. Có nhiều nguyên lý quan trọng trong Khoa học Máy tính, nhưng điều đáng ngạc nhiên là chúng ta vẫn có thể đạt được một bằng cấp nào đó sau khi học về chúng mà chỉ hiểu chúng một cách mơ hồ. Ngược lại, chúng ta sẽ có thêm rất nhiều bài học kinh nghiệm quan trọng về Khoa học Máy tính chỉ bằng cách “mài đũng quần”, mà không cần tự làm mình bối rối với một mớ những lý thuyết rối rắm; có rất nhiều lập trình viên xuất sắc nhưng không có bằng cấp nào về Khoa học Máy tính.

So với một số lĩnh vực khác, lập trình không đòi hỏi phải có năng khiếu bẩm sinh, giống như vẽ hay ca hát. Bạn không cần phải có hoa tay hay khả năng cảm nhận âm nhạc cực tốt. Tuy nhiên, lập trình đòi hỏi sự cẩn thận và khéo léo. Trong một lớp học, có những sinh viên có thể làm các đề án khó một cách dễ dàng trong khi số khác lại bối rối và thậm chí mắc ngay những sai lầm mà giảng viên bảo họ nên tránh. Điểm phân biệt giữa những sinh viên thành công và không thành công không phải do họ tốt hơn hay thông minh hơn mà do họ chú tâm đến những gì đang diễn ra và cân nhắc cẩn thận những gì họ đang làm. Có lẽ cẩn thận và chú tâm cũng là một năng khiếu bẩm sinh, tôi không chắc lắm. Có một số kỹ năng bạn cần là:

1. Chú ý đến các chi tiết:

Trong lập trình, chi tiết là chính yếu. Máy tính thật sự “ngu ngốc” đến không thể ngờ. Bạn không thể mơ hồ, bạn không thể mô tả chương trình của bạn một cách nửa vời và hỏi nó rằng “Có hiểu tôi muốn nói gì không ?” rồi để cho trình biên dịch làm nốt phần c̣n lại. Nếu ngôn ngữ bảo bạn phải khai báo biến trước khi dùng thì bạn phải làm như thế. Nếu ngôn ngữ bảo bạn phải đánh dấu ngoặc đơn chỗ này, hay ngoặc vuông chỗ kia,… bạn cũng phải làm như thế.

2. Nghĩ theo lối ngu ngốc:

Máy tính thật sự là ngu ngốc. Chúng thực hiện chính xác những gì bạn bảo chúng làm, không hơn không kém. Nếu bạn đưa cho máy tính một chai dầu gội rồi bảo nó đọc hướng dẫn và gội đầu thì tốt nhất là bạn phải chắc chắn đă đưa cho nó một chai dầu gội đầu thật lớn. Bởi vì nó sẽ làm ướt tóc, cào cho có bọt, xả bằng nước, lặp lại, rồi lại làm ướt tóc, cào cho có bọt, xả bằng nước, lặp lại và cứ như thế mai… đơn giản là vì trên phần hướng dẫn không nói cho nó biết khi nào thì dừng lại.

Khi bạn lập trình, bạn nên nghĩ một cách “ngu ngốc” giống như máy tính. Khi đó bạn ở một cách nhìn đúng để có thể xác định mọi thứ đến từng chi tiết nhỏ nhất và đừng giả định rằng kết quả đúng sẽ xảy ra trừ khi bạn bảo nó.

Điều này cũng không có nghĩa là bạn phải xác định tất cả mọi thứ, nhiệm vụ chính của những ngôn ngữ lập trình cấp cao là giảm bớt gánh nặng cho lập trình viên. Một trình biên dịch C có thể xử lý theo “trực giác”, chẳng hạn khi bạn gán một biến số nguyên sang một biến số thực, nó sẽ tự động thực hiện việc chuyển đổi trước khi gán. Nhưng điều quan trọng là bạn phải hiểu rơ cái gì là ngầm định và cái gì là tường minh.

3. Trí nhớ tốt Có rất nhiều thứ cần phải nhớ khi lập trình:

cú pháp của ngôn ngữ, tập các hàm đă viết sẵn mà bạn có thể gọi cùng với các thông số của chúng, những biến và hàm bạn đă định nghĩa, những kỹ thuật bạn đă từng dùng hay thấy trong quá khứ có thể ứng dụng vào vấn đề mới, những lỗi bạn đă từng mắc, … Càng nhiều chi tiết bạn có thể nhớ, bạn càng thành công trong lập trình.

4. Khả năng trừu tượng hóa, nghĩ ở nhiều cấp độ

Đây có lẽ là kỹ năng quan trọng nhất trong lập trình. Máy tính là một trong những hệ thống phức tạp nhất mà con người đă tạo ra, và trong khi lập trình nếu bạn phải giữ trong đầu mọi khía cạnh của máy tính ở mọi cấp độ thì hẳn bạn phải dùng sức mạnh như Hercule chỉ để viết một chương trình đơn giản.

Một trong những kỹ thuật mạnh mẽ để giải quyết sự phức tạp của những hệ thống phần mềm (hay bất kỳ hệ thống phức tạp nào khác) là chia nó ra thành những “hộp đen” nhỏ thực thi các tác vụ để giải quyết vấn đề và giấu đi một số chi tiết, do đó bạn không cần phải nghĩ đến mọi thứ cùng một lúc.

Chúng ta luôn phân chia các công việc mọi lúc có thể, một cách vô thức. Nếu tôi bảo bạn đi đến cửa hàng và mua một ít sữa, tôi sẽ không cần phải bảo bạn đi ra cửa mở cửa, đi ra ngoài, mở cửa xe hơi, vào trong xe, lái đến cửa hàng, ra khỏi xe, vào cửa hàng, … Tôi không cần phải nói rơ như thế và bạn thậm chí cũng không cần nghĩ đến những điều vừa kể.

Chúng ta lấy một ví dụ khác tương tự, nếu tôi bảo bạn làm một ít kem, bạn sẽ nhận ra rằng sữa đă hết và tự bạn sẽ đi mua mà không cần tôi phải nhắc. Nếu tôi bảo bạn chuẩn bị một bữa tiệc, bạn có thể sẽ quyết định phải làm món kem như là một phần của bữa tiệc. Và cứ như thế …

Phân chia công việc, hay trừu tượng hóa, là một kỹ năng sống c̣n trong lập trình, hay trong việc quản lý một hệ thống phức tạp. Bất chấp những điều tôi vừa nói ở mục 3, bạn có thể chỉ cần giữ một vài thứ trong đầu trong một lúc. Một chương trình lớn có thể có 100.000, 1.000.000 thậm chí 10.000.000 ḍng mă. Nếu như cứ nhất thiết phải hiểu tất cả các ḍng lệnh và ngay lập tức hiểu được chương trình thì cuối cùng chương trình sẽ không thể viết hay hiểu được. Chỉ khi có thể hiểu từng phần nhỏ một cách riêng lẻ thì mới có thể làm việc với các chương trình lớn.

Việc chia nhỏ chương trình, mặc dù là một công cụ tốt, nhưng không phải là một phương thuốc tức thì cho tất cả các vấn đề về tổ chức. Chúng ta có rất nhiều giả định về cách mà những thứ khác nhau làm việc, và mọi thứ chỉ làm việc khi những giả định đó thỏa măn. Trở lại ví dụ vừa rồi, nếu tôi bảo bạn đi mua kem, tức là tôi đang giả định bạn đă biết mua sữa loại nào, cửa hàng ở đâu, làm thế nào đi đến đó, cách lái xe nếu cần thiết phải dùng xe máy. Nếu có một vài giả định không hợp lệ, hay nếu có quá nhiều lựa chọn, chúng ta sẽ phải sửa đổi cách ra chỉ thị. Tôi có thể sẽ bảo bạn lái xe đến cửa hàng ở đường Phạm Đôn và mua sữa loại 7000đ/lon.

Do đó, chúng ta không thể chỉ đơn giản chia nhỏ tất cả các vấn đề mà quên đi sự phức tạp của nó. Chúng ta phải nhớ ít nhất là một số giả định trong số các giả định quanh sơ đồ phân chia vấn đề. Chúng ta phải nhớ điều gì chúng ta có thể mong đợi hay không mong đợi từ các tiến trình mà chúng ta gọi để thực hiện công việc.

Hăy nghĩ đến cơ cấu thiết kế phân cấp, dùng cấu trúc phân cấp để chỉ phải nghĩ về những thứ ở cùng cấp độ. Đó là điều tôi muốn nói về “nghĩ ở nhiều cấp độ”. Đó là một công việc hết sức tinh tế, nhưng đó cũng là cách duy nhất để giải quyết các vấn đề lớn và phức tạp.

Cái khó của lập trình (bên cạnh việc gặp vấn đề với bốn kỹ năng nêu trên) là phải t́m kiếm những chi tiết nhỏ các vấn đề về tổ chức, về con người. Một chương trình lớn là một hệ thống phức tạp đến kinh khủng; một đề án lớn đòi hỏi nhiều người làm việc thật chăm chỉ từ những công việc lẻ tẻ cho đến việc giao tiếp để tránh khỏi cơn lũ lỗi và các chi tiết lặt vặt.
Nguồn : http://kithuatlaptrinh.tk

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s