Saturday, August 16, 2014

Ý nghĩa của việc chia Level trong lập trình

Cá Trắm trong "Ao" thì to, nhưng ra "Đại Dương" mới biết cá "TO" thế nào.

Ở các công ty thường sẽ có bản tự đánh giá kỹ năng bản thân, kinh nghiệm rút ra sau mỗi dự án, mỗi quý hoặc mỗi năm.

Thang các kỹ năng thường được lấy từ 1 đến 5, rồi các nhân viên (lập trình viên) tự chấm điểm cho mình, theo dõi bảng đánh giá này để biết được sự tiến bộ của mỗi thành viên, tuy nhiên việc tự đánh giá đúng được sức mạnh của bản thân lại là một vấn đề khác.

Mình thấy tồn tại ở một số công ty, các thành viên do chưa lắm được ý nghĩa của việc chia điểm từ 1 đến 5 có ý nghĩa gì, khi nào là 1 và khi nào thì được coi làm đạt điểm 5 => dẫn đến việc ảo tưởng sức mạnh hoặc tự chấm sai dẫn đến phải gánh chịu mức lương vượt quá sức mình đồng nghĩa với việc được giao những công việc quá sức ^^, nói chung là cái gì "QUÁ" cũng là không tốt, vừa đủ thôi là đẹp @@.

Thang điểm lấy từ 1 đến 5 hay còn gọi là level 1 -> level 5 bắt nguồn từ "Dreyfus model of skill acquisition", mô hình này do Brothers Stuart và Hubert Dreyfus đề xuất năm 1980 tại Đại Học California, gồm có 5 giai đoạn đi từ chưa biết gì cho đến chuyên gia:

                         Novice -> Advanced beginner -> Competent -> Proficient ->Expert

Level 1: Novice

  • Không có hoặc là có một chút ít kinh nghiệm
  • Áp dụng một các cứng nhắc theo các công thức, hay nói cách khác là nhìn người khác code, sau đó code theo
Theo đánh giá của các chuyên gia, thì đa phần chúng ta đang ở mức này, chiếm tỉ lệ rất cao trong giới lập trình ^^


Level 2: Advanced Beginner

  • Tự xử lý được vấn đề, nhưng rất khó, và chậm

Nói chung là tầm level 2 là có thể kiếm ăn được rồi, khua chân, múa tay các kiểu :v

Level 3: Competent

  • Có thể phát triển ứng dụng dưới dạng mô hình hóa
  • Tự đưa giải pháp, tự tìm lỗi
  • Giải quyết những vấn đề lâu dài

Level 4: Proficient

  • Nhìn nhận bài toán một cách toàn diện
  • Có thể hướng dẫn cho người khác

Level 5: Expert

  • Lúc này không còn dựa vào một duy tắc nào cả, code vượt qua cả giới hạn của những quy tắc, hướng dẫn
  • Làm việc chủ yếu bằng phản xạ
  • Việc phân tích bài toán chỉ xuất hiện khi đó là bài toán mới hoặc vấn đề lớn xảy ra
Nếu hiểu theo ngôn ngữ của các nhà Võ học thì khi đạt tới tuyệt đỉnh rồi, thì mọi thứ sẽ là phản xạ, ra đòn chỉ trong chớp mắt, việc coding cũng vậy, khi đã đạt tới tuyệt đỉnh, việc xử lý các bài toán phức tạp một cách tổng thể và tối ưu vượt ra ngoài giới hạn của các quy tắc lập trình.

Nói như vậy không có nghĩa là khi đạt tới Level 5 thì sẽ dừng ở đây, "Văn ôn, võ luyện", việc code cũng như học võ hay những nghề thủ công không, chúng ta phải rèn luyện một cách liên tục thì đôi tay mới trở lên khéo léo và nhuần nhuyễn được, ở Việt Nam rất ít các coder có tuổi đời từ 40 hất ngược, nhưng thực tế ở Châu Âu chúng ta vẫn thấy những coder già tuổi, khoảng chừng 40-50, thậm trí còn hơn thế.

Để đạt được level 5 chúng ta mất khoảng 10.000 giờ, học tập, nghiên cứu, đúc kết và thực hành "liên tục", ý nói tính thường xuyên luyện tập và đúng cách, rơi vào khoảng 10 năm, nhưng thực tế vì nhiều lý do mà sẽ mất khoảng 15 năm để chúng ta trở thành một người lập trình lành nghề :d

Đặc biệt mọi người chú ý khi viết CV nhé, trong CV thường có mục đánh giá các kỹ năng (ngôn ngữ lập trình), tránh đánh giá sai rồi các xếp PV hỏi vặn lại không trả lời được, chúc may mắn ^^


No comments:

Post a Comment