Thursday, May 7, 2009

Vài điều suy ngẫm khi viết phần mềm và tối ưu hoá code

Trong lập trình, bình thường ta viết code chủ yếu là làm sao đáp ứng được yêu cầu của khách hàng. Từ khâu phân tích những yêu cầu, có cái nhìn tổng quan. Sau đó các manager của dự án sẽ giao việc cho các thành viên viết những phần nào đó của dự án. Các thành viên sẽ nắm bắt bản thiết kế, hiểu ý nghĩa của từng class, module, để xây dựng những hàm đáp ứng yêu cầu.

Quá trình phát triển thành sản phẩm, các tester và khách hàng sẽ "duyệt" qua sản phẩm của chúng ta và đưa ra những bugs (nếu tìm thấy) cũng như họ muốn những yêu cầu khác để sản phẩm tốt hơn (mà trước đây họ chưa hình dung ra được).

Điều này đã làm các thành viên viết phần mềm phải chỉnh sữa lại code của mình để đáp ứng yêu cầu đó. Thời gian này, manager và programers nhiều lúc lo chỉnh sữa để kịp tiến độ mà quên đi theo đúng cấu trúc, ý nghĩa của mô hình đã phân tích. Cũng có thể manager đã ko lường trước hết vấn đề, nhưng thực tế cũng có nhiều thứ mà chúng ta không thể biết hết được.
Đó là một trong những trở ngại mà chúng ta hay gặp khi viết phần mềm. Nhiều lúc đã làm dự án chúng ta thất bại. Cũng có trường hơp chúng ta phải xây dựng lại và có tham khảo đến mô hình đã thất bại.

Một điều nữa là khi viết code, chúng ta không chú trong để cách viết, gây khó khăn cho những thành viên khác cùng tham gia viết một lớp, module với mình. Vì ko có standard code. Đã có nhiều bài viết về quy định chuẩn cho việc viết code rồi (nên không nói ra ở đây).

Và nếu viết những ứng dụng thời gian thực, chúng ta cũng cần để ý cách viết sao cho tối ưu. Code của lệnh if, vòng lặp, đệ quy cần phải chú ý, vì đó sẽ là những phần tốn nhiều thời gian xử lý. Đối với những compiler ngày nay, họ cũng đã chú ý nhiều đến vấn đề này, nhưng cũng có nhiều trường hợp phải có sự hỗ trợ của programmer. Có một thư viện hỗ trợ cho CPU của Intel dựa trên tập lệnh MMX, SSE, SEE2, SEE3. Có một bài nói về vấn đề này tại đây. Và tận dụng tối đa CPU bởi việc lập trình song song (VS2005 hỗ trợ lập trình song song với OpenMP)

Trên đây là vừa điều mà tôi đã gặp phải trong quá trình viết phần mềm.

James

1 comment:

  1. Bạn Duy đề cập đến optimization mà không lưu ý đến giới hạn của việc phát triển phần mềm cho lĩnh vực nào. Tớ chuyên làm Embedded System, đọc xong suýt ngất khi biết cả manager cũng tham gia vào chỉnh sửa phần mềm ^_^.

    Có góp ý nhỏ dựa trên thiển ý của tớ.
    1. Vì sao đến lúc "duyệt" qua sản phẩm khách hàng của bạn vẫn chưa hình dung hết yêu cầu của họ? Tại sao chúng ta không tư vấn đầy đủ cho khách hàng ngay từ đầu? Chúng ta thiếu kinh nghiệm?
    2. Vì sao khi khách hàng thay đổi yêu cầu, coder (tạm gọi các bạn chuyên viết code) lại phải chỉnh sửa code ngay lập tức? Các bạn có bản thiết kế chi tiết của phần mềm không?
    3. Sẽ rất khó để có "standard code", nhưng pattern thì có thể. Hoặc "coding rule" là một ý kiến không tệ.
    4. Lập trình thời gian thực cần lưu ý đến kiến trúc của vi xử lý (instruction set, instruction stage, etc.) để hiểu rõ các quy tắc trong optimization của compiler.

    Lâu không gặp cũng chẳng nhớ bạn là ai nữa ^_^.

    Tuấn TH9800692

    ReplyDelete