7 mức am hiểu 1 công nghệ, ngôn ngữ (7-understanding-level)

7294

Một trong những điều dễ gây nhầm lẫn hoặc lầm tưởng nhất của lập trình viên là mức độ am hiểu của họ về một công nghệ hay ngôn ngữ. Làm sao để đánh giá được trình độ và mức am hiểu của một lập trình viên hoặc so sánh với các lập trình viên khác? Làm sao để biết được mức độ am hiểu đến đâu là đủ để có thể làm việc hay đủ để có thể đưa ra sự lựa chọn cho một dự án? Các bạn thường nghe các cấp bậc như fresher, junior, middle, senior, master … nhưng các bạn vẫn chưa biết cách để phân biệt fresher và junior hay giữa senior và master thì hãy đến với bài viết của mình.

Trong bài viết này mình sẽ nói về 7 mức am hiểu 1 công nghệ, ngôn ngữ dựa trên kinh nghiệm và định nghĩa cá nhân. Ngoài ra mình sẽ phân nhóm và mapping những cấp bậc thường được xử dụng trong hiện tại vào 7 mức am hiểu này để các bạn có cái nhìn toàn diện hơn.

Note: Mình sẽ dùng một số từ viết tắt: 7UL (7-understanding-level), CNNN (công nghệ, ngôn ngữ) trong những phần bên dưới.

7 mức am hiểu 1 công nghệ, ngôn ngữ

Level 0: Nghe qua tên (level ngoại hạng không phải là level chính thức trong 7UL)

Thật ra mình cũng không tính đưa level này vào danh sách. Nhưng lập trình viên luôn đếm từ 0 mà =]]
Thực tế thì chắc chắn có không ít cái tên CNNN bạn từng nghe qua nhưng lại không hề biết nó là gì và dùng làm gì, thậm chí còn không biết nó là 1 công nghệ hay 1 ngôn ngữ.
Ví dụ: Mình từng nghe qua CoffeeScript và 3 tháng là thời gian từ khi mình nghe tên CoffeeScript cho đến khi biết nó là ngôn ngữ compile thành JavaScript. Trong giai đoạn đó có thể xếp mình vào level 0 tức là cái level mà mức độ am hiểu của mình chẳng khác gì những đứa chưa nghe qua tên của CoffeeScript.

Level 1: Biết tên và biết CNNN dùng làm gì.

Đây có thể coi là level am hiểu chính thức đầu tiên của 7UL (ngoại trừ cái level 0 là ngoại hạng). Ở mức độ này nhìn chung bạn sẽ trả lời được câu hỏi What ở mức cơ bản, tức là ngoài tên bạn sẽ biết được CNNN đó được dùng để làm gì, là ngôn ngữ lập trình hay là 1 công nghệ, 1 thư viện, 1 nền tảng …
Đây có thể xem là level duy nhất trong 7UL mà bạn có thể đạt được 1 cách thụ động và không tốn công sức nghiên cứu, học tập.
Có 2 cách để có thể đạt được level này: 1 là từ việc nghe tên ở level 0, bạn tò mò và google để biết thêm thông tin của CNNN đó. 2 là bạn vô tình đọc được hoặc nghe được.
Ví dụ: Mình đã đạt được level 1 của Xamarin khi vô tình đọc được mẫu quảng cáo khóa học trên facebook “Xamarin – lập trình mobile cross platform dành cho dân .Net”. Đơn giản vậy thôi là bạn đạt được level 1 rồi đấy =]]
Thấy level 1 đơn giản vậy thôi nhưng nó là nền tảng quá trình tự học một CNNN mới đấy.

Level 2: Biết được thông tin tổng quan về CNNN.

Đây là level thể hiện sự hiểu biết tổng quan và tổng quát của lập trình viên về 1 CNNN. Để đạt được level này lập trình viên ít nhất phải trả lời được 2 câu hỏi Why và When, tức là chúng ta phải viết được tại sao phải dùng CNNN này và nên dùng nó khi nào. Biết được các điểm nổi bật, những tính năng cơ bản, những điểm mạnh, điểm yếu của CNNN này.
Đạt được level này thì bạn đã có chút ít kiến thức đủ để pha trò, chém gió trong những buổi trà dư tửu lậu với các anh em lập trình viên khác. Ngoài ra ở level này bạn đã phần nào đủ kiến thức để quyết định có nên lựa chọn CNNN này cho một dự án mới.
Để đạt được level này một lập trình viên thường phải chủ động nghiên cứu và google thông tin trong vài chục phút đến vài tiếng tùy vào số lượng thông tin và khả năng research của lập trình viên. Chúng ta vẫn có thể đạt được level này bằng cách ngồi nghe người khác chém gió hoặc tham gia 1 buổi seminar giới thiệu nho nhỏ về CNNN này, đây là 1 cách tiếp thu kiến thức thụ động và nội dung hầu như đã được tổng hợp sẵn vì vậy tính hiệu quả chủ yếu sẽ dựa vào cách tổng hợp của người nói.
Ví dụ 1: mình mất khoảng 1 tiếng để đạt được level này của Xamarin bằng cách đọc thông tin trên trang chủ của Xamarin và xem một số đánh giá, so sánh của cộng đồng trên Quora và StackOverflow, StackExchange. Khoảng 90% thông tin chúng ta cần để đạt được level này đều có trên trang chủ của CNNN đó và 10% còn lại là thông tin về điểm yếu và nhận xét từ cộng đồng sẽ có ở các trang hỏi đáp nổi tiếng như Quora,StackExchange.
Ví dụ 2: mình mất khoảng 2 tiếng để đạt được level này về Reactjs khi tham dự một bủi chia sẻ kiến thức của 1 sư huynh trong ngành. Những buổi chia sẻ kiến thức thế này rất hay và bổ ích vì ngoài thông tin về CNNN chúng ta còn tiếp thu được những kinh nghiệm bổ ích từ các chuyên gia và đôi khi tạo dựng được các mối quan hệ tốt.

Level 3: Làm được ‘Hello World’ project.

Đúng như những gì bạn đang nghĩ đấy, làm được ‘Hello World’ project là bạn đã đạt được level 3 trong 7UL rồi đấy. Nhưng khoan đã, ý mình là ‘Hello World’ project của chính bạn và nằm trên máy của bạn đấy nhé. Điều này có nghĩa là bạn phải đảm bảo rằng mình đã thực hiện được đầy đủ các bước cài đặt (công cụ, mơi trường …) cần thiết để có thể tạo ra bất kỳ project nào dựa trên CNNN này. Nó không chỉ đơn giản là bạn vào 1 trang fiddle gõ code để in ra “Hello World” là xong đâu.
Thời gian để bạn cài đặt môi trường cũng như công cụ cần thiết còn tùy thuộc vào từng CNNN, có loại bạn chỉ mất vài phút nhưng cũng có loại làm bạn tiêu tốn đến vài tiếng. Đôi khi chính lúc các bạn cài đặt môi trường và công cụ cần thiết các bạn lại phải nghiên cứu và research thêm nhiều thứ khác đi kèm làm tốn thêm không ít thời gian.
Ví dụ 1: mình chỉ mất 43 giây để làm 1 “Hello World” project bằng HTML. Xem nào:mình dùng windows nên mở notepad mất 3s, gõ mấy thẻ html và chữ “hello world” mất 30s, save lại đặt tên mất 5s, mở file bằng IE mất 5s, BINGO chúng ta đã có “Hello World” bằng HTML trogn 43s. (Thật ra thì trước đó mình đã mất ít nhất vài phút để xem hướng dẫn làm Hello World bằng HTML =]])
Ví dụ 2: làm 1 app “Hello Word” trên android. Download và cài môi trường cho java, tiếp tục download và cài android sutdio, sau đó tạo 1 app “hello world”, chạy thử bằng máy ảo, sau đó tìm download và cài driver để debug bằng điện thoại, gắn con điện thoại android vào bằng cáp usb, bật chế độ dev mode, deploy và chạy trên máy thật. Vừa research, vừa làm hết cái đống công đoạn đó chắc cũng tốn của bạn 1-2 tiếng rồi đấy hehe.

Level 4: Làm được các chức năng cơ bản.

Ở level này các bạn đã có thể làm được 1 phần mềm hoàn chỉnh với những chức năng cơ bản mà CNNN chuyên dùng để làm. Lúc này các bạn cũng đã dần nắm và hiểu rõ được nhiều thứ mà ở level 2-3 bạn biết qua nhưng chưa hiểu rõ được. Đây cũng là level đánh dấu mốc rằng bạn đã bắt đầu có thể làm việc được ở một số sự án thực tế (nhưng thường thì những dự án thực tế yêu cầu bạn biết nhiều hơn 1 CNNN cho nên khoan hãy mừng khi bạn đạt level 4 HTML, vì ít nhất người ta còn yêu cầu bạn biết CSS, Javascript, Jquery level 4 nữa kìa). Bạn cũng đã có thể tự tin nhận rằng mình “biết” công nghệ ngôn ngữ này khi nói chuyện với các lập trình viên khác.
Để đạt được Level này thường 1 lập trình viên sẽ mất từ vài ngày đến vài tháng tùy thuộc vào từng CNNN và như mình nói ở trên 1 CNNN thường phải học cùng 1 vài CNNN khác vì thế khoảng thời gian để đạt được 1 level rất khó nói và cũng không đơn gian như lúc đầu chúng ta dự đoán.
Ví dụ: mình đã đạt được trình độ Pascal level 4 và mình nghĩ là với kiến thức căn bản từ Pascal mình sẽ học 1 ngôn ngữ khác nhanh hơn và mình dự đoán mình sẽ đạt được level 4 Java trong thời gian ngắn hơn Pascal. Nhưng mình đã sai lầm, bởi vì khi học Java mình mới vỡ lẽ mình còn phải học thêm OOP nữa. Vậy là cuối cùng để đạt được level 4 Java mình đã mất gấp đôi thời gian mình đạt level 4 Pascal.

Level 5: Sử dụng được CNNN một cách thành thạo.

Đây là level tối thiểu mà hầu hết các lập trình viên muốn đạt được khi quyết định học và làm một CNNN. Đạt được level này tức là bạn đã có khoản thời gian khá dài xử dụng CNNN này, bạn đã làm được ít nhất vài project thực tế hoàn chỉnh dựa trên CNNN này, bạn hầu như đã có thể sử dụng CNNN theo ý muốn và tỷ lệ bạn phải google xử dụng CNNN đã chỉ còn đếm trên đầu ngón tay.
Để đạt được level này, thường 1 lập trình viên phải sử dụng CNNN trong khoảng thời gian từ vài tháng cho đến vài năm, tùy vào từng CNNN và mức độ sử dụng CNNN của lập trình viên.
Ví dụ: mình đã đạt được level này đối với ngôn ngữ C# sau 3 năm kể từ những dòng code đầu tiên mình code bằng C# (2 năm đầu mình sử dụng không thường xuyên vì còn học ở trường).

Level 6: Có thể tối ưu code, cải tiến hoặc xây dựng được một vài thư viện, framework dựa trên CNNN.

Đây là level mơ ước của mọi lập trình viên khi học và làm việc với 1 CNNN dù cuối cùng họ có đạt được hay không. Ở level này các bạn có thể tự tin mình là chuyên gia củ CNNN này, bạn đã kinh qua được hầu hết các vấn đề của CNNN, hầu như bạn không cần phải google cho các vấn đề bạn gặp phải và nếu có thì cũng rất khó để tìm được cách giải quyết trên mạng, lúc này bạn sẽ là người thường giúp đỡ các lập trình viên khác giải quyết vấn đề về CNNN này chứ không còn là người đi nhờ sự giúp đỡ nữa.
Để đạt được level này, 1 lập trình viên thường phải mất từ vài năm đến hơn chục năm sử dụng CNNN tùy vào từng CNNN và khả năng của lập trình viên đó.
Ví dụ: mình đã đạt được level này đối với ngôn ngữ Vietnamese sau 18 năm tiếp xúc, học và sử dụng.

Level 7: Tạo được 1 CNNN tương tự.

Đọc cái title của cái level chắc các bạn cũng đoán được “trình độ” của những người đạt level này rồi hen, mấy thánh này coi như khả năng về CNNN này là vô địch, tạo được 1 CNNN giống vậy thì còn cái gì là không làm được :v
Để đạt được trình độ này các bạn phải mất n năm với n là con số vô định tùy thuộc vào từng loại CNNN và khả năng của lập trình viên.
Ví dụ: mình chưa đạt được cảnh giới này ở bất kỳ CNNN nào nên mình xin ngừng ví dụ tại đây :((, các bạn có thể nhìn vào 1 vài cái tên đình đám trong ngành CNTT như Linus chẳng hạn.
Các cấp bậc của 1 lập trình viên

Đây là 6 cấp bậc thường được dùng nhất trong giới lập trình viên, mình sẽ liệt kê ra bên dưới kèm theo sự quy đổi ra hệ thống 7UL của mình để các bạn dễ hình dung. Các bạn nên chú ý là 6 cấp bậc này thường dùng để đánh tổng hợp kỹ năng và kinh nghiệm của 1 lập trình viên còn 7UL dùng để đánh giá riêng cho 1 CNNN

  • Student
    Đây là cấp bậc thấp nhất mà 1 lập trình viên có thể đạt được, ở mức này các bạn có thể hiểu là kiến thức chỉ ở mức như một sinh viên còn đang đi học, và mức này tất nhiên thường dùng cho sinh viên và những lập trình viên chập chững bước vào nghề bằng cách vừa học vừa làm.
    Student thường biết được một vài CNNN căn bản và hầu hết các CNNN này đều xoay vòng ở level 4 trở lại. Kiến thức và kinh nghiệm khác về ngành phần mềm rất ít hoặc không có.
  • Fresher
    Đây là cấp bậc thường dùng để gọi những sinh viên mới ra trường với lượng kiến thức về CNNN khá tốt nhưng thiếu nhiều kiến thức và kinh nghiệm làm việc thực tế, cũng như thiếu kiến thức về quy trình và hệ thống. Fresher thường được đào tạo tại doanh nghiệp vài tháng trước khi được chính thức làm dự án thực tế, và khi làm việc fresher hầu như cần sự theo sát , hướng dẫn và giúp đỡ từ các đàn anh trong team.
    Fresher thường biết được nhiều CNNN hơn student nhưng hầu hết cũng đều ở mức level 4 trở lại.
  • Junior
    Đây là mức thường dùng để gọi một lập trình viên có kinh nghiệm làm việc trung bình từ 6 tháng đến 2 năm. Junior thường đã làm qua được 1 vài dự án thực tế, đã có được một số những kiến thức và kinh nghiệm thực tế cần thiết, biết 1 số kiến thức về quy trình và hệ thống. Junior trong khi làm việc thường có khả năng làm việc độc lập không cần sự theo sát và hướng dẫn, nhưng vẫn thường xuyên cần sự giúp đỡ từ các đàn anh.
    Junior thường biết nhiều CNNN hơn Student và đa số đều thuộc mức level 4 và có 1 vài CNNN đạt level 5.
  • Middle
    Đây là mức trung gian giữa Junior và Senior, thường thì ở VN các công ty tuyển dụng ít dùng tên gọi này bởi vì trình độ được tính là Senior ở VN thấp hơn so với mặt bằng chung của thế giới. Mức Middle này nhìn chung người lập trình viên đã có ít nhất từ 2-3 năm kinh nghiệm đi làm thực tế. Khả năng làm việc độc lập cao, thỉnh thoảng cần sự giúp đỡ từ đàn anh và thỉnh thoảng giúp đỡ đàn em giải quyết một vài vấn đề. Có kiến thức về kiến trúc phần mềm, quy trình và hệ thống tốt. Biết chút ít về bảo mật.
    Middle thường biết nhiều CNNN hơn Junior và đa số CNNN có level ở mức 4 và 5.
  • Senior
    Mức Senior thường được dùng để gọi những lập trình viên đã có thêm niên từ ít nhất 3 năm kinh nghiệm (một số công ty ở Việt Nam), hoặc ít nhất 5 năm kinh nghiệm (mặt bằng chung của quốc tế). Ở mức này bạn đã có thể làm việc độc lập và ít khi cần sự giúp đỡ, ngoài ra Senior thường phải làm leader cho 1 team bao gồm những Middle, Junior và Fresher, đôi khi có cả Student. Lúc này Senior phải biết thêm kiến thức về quản lý, phân chia công việc, nắm rõ quy trình và hệ thống. Biết khá nhiều về các kiến thức kiến trúc phần mềm, tối ưu hệ thống, bảo mật …
    Senior thường biết nhiều CNNN hơn Middle và đa số CNNN có level 4, 5 trong đó có 1 vài CNNN đạt level 6
  • Master
    Mực Master thường được dùng để gọi những lập trình viên có thâm niên trong khoảng chục năm và cực kỳ am hiểu về một số CNNN. Master thường đóng vai trò là technical leader hoặc cố vấn kỹ thuật cho các dự án.
    Master thường biết CNNN bằng Senior nhưng đa số CNNN có level 5 và 6, có thể có 1 hoặc 1 vài CNNN đạt level 7.
    Mình nghĩ 7UL rất hữu ích trong việc xác định mức độ hiểu biết của 1 CNNN và ngoài ra nó tạo được sự nhất quán khi các lập trình viên chém gió với nhau. 7UL cũng có thể dùng để làm mục tiêu cũng như là kim chỉ nam giúp các bạn học một CNNN mới một cách dễ dàng hơn. Hi vọng sau bài viết này, các bạn có cái nhìn tổng quát hơn và dễ dàng xác định được trình độ của mình nằm ở đâu trong thề giới công nghệ này.

Techtalk Via Hainnt