Contents
Chào mừng bạn đến với Fx Studio. Chủ đề bài viết này sẽ không liên quan tới các kỹ thuật lập trình, mà tập trung vào kinh nghiệm huấn luyện cá nhân. Đó là Khai vấn (Coaching). Cảm nhận đầu tiên của bạn sẽ là bị thông não, nhưng chúng ta chỉ tìm hiểu cách áp dụng nó vào lập trình thôi nhóe. Còn phần chém gió thì có các anh hùng bàn phím lo rồi.
Còn nếu mọi việc đã ổn rồi, thì …
Bắt đầu thôi!
1. Khai vấn (coaching) là gì?
1.1. Khái niệm
Chúng ta sẽ có một định nghĩa theo sách vở như sau:
Coaching (tạm dịch là “khai vấn, huấn luyện”) là quá trình của sự hợp tác (partnering) giữa chuyên gia (Coach) và khách hàng trong một quá trình làm việc chung với nhau theo một cách sáng tạo và thúc đẩy suy nghĩ, từ đó tạo động lực giúp khách hàng tối đa hóa những tiềm năng cá nhân và làm việc hiệu quả, chuyên nghiệp hơn – Theo định nghĩa từ Liên đoàn Khai vấn quốc tế ICF (International Coach Federation).
Còn về mặt đơn giản hóa, ta sẽ có một cách hiểu theo tiếp cận dựa theo việc thực hiện Khai vấn. Cụ thể Khai vấn nghĩa là thông qua câu hỏi để tự vấn mình, từ đó khai thông và mở ra những nhận thức mới cho bản thân.
Bản thân Khai vấn nó đã phát triển thành một ngành nghề trong xã hội từ lâu rồi. Nó giúp cho các cá nhân tự khám phá được sức mạnh bên trong của mỗi người.
Nhanh chóng + Trực tiếp + Tùy chỉnh
Mỗi người trên thế giới này đều là dị biệt, nên ta không thể áp dụng đại trà một cách đào tạo chung với mục đích khai phá toàn bộ sức mạnh của họ được. Do đó, Khai vấn giúp cho mỗi người tự đạt được những mục tiêu của chính riêng họ.
1.2. Khai vấn trong lập trình
Thoáng qua, giữa 2 chúng nó không có mối quan hệ gì hết. Khi ta bỏ qua đi mấy cái chém gió, thông não, đa cấp … ở trên, thì ta sẽ thấy được Khai vấn rất phù hợp với việc học lập trình.
Bạn đặt ra một mục tiêu & bạn sẽ rút ngắn con đường để đạt được mục tiêu đó.
Tất nhiên, bạn sẽ cần có sự hỗ trợ cho giai đoạn đầu. Họ chính là senior, mentor, leader hay manager của bạn. Mục đích thật sự cần hướng tới là:
Khả năng tự học hỏi
Đây chính là điều quan trọng nhất khi học lập trình mà mỗi cá nhân phải có. Khai vấn không phải là cách duy nhất, hay cách đơn giản nhất … nhưng với kinh nghiệm của mình, thì nó là cách bền vững nhất.
Ngoài khả năng tự học hỏi trong lập trình, giúp cho người học đạt được những thành tựu nhỏ trong quá trình giải quyết các câu hỏi Khai vấn đưa ra.
Ví dụ, bạn muốn thành tạo Clean Architecture trong 2 tháng từ số 0, thì bạn hãy đặt ra những câu hỏi với kết quả là những phần nhỏ hơn. Từ MVC > MV > MVVM > MVVM-C … sẽ giúp bạn thấy được bản chất ưu & nhược điểm của mô hình. Cuối cùng, bạn sẽ đúc kết được là tại sau bạn phải học Clean Architecture & bạn sẽ hiểu nó.
2. Tầm quan trọng của Khai vấn (coaching)
2.1. Phát triển đội ngũ
Trong thế giới của nghề lập trình, việc phát triển đội ngũ rất quan trọng. Tổ chức của bạn luôn phải chống lại rất nhiều thế lực, cộng với sự cạnh tranh khốc liệt giữa các công ty. Nên việc thay máu nhân sự diễn ra thường xuyên và đều đặn.
Bạn cũng không có nhiều lựa chọn tốt cho lứa nhân sự tiếp theo của bạn. Đôi lúc, bạn phải nhắm mắt chọn các ứng viên có nền tảng căn bản khác nhau. Điều này làm cho bạn và đội ngũ của bạn sẽ phải tốn khá nhiều thời gian & công sức trong đào tạo.
Khai vấn không phải áp dụng cho toàn bộ đội ngũ của bạn. Bạn chỉ cần xác định các đối tượng nào và áp dụng Khai vấn chính xác, thì sẽ đem lại hiệu quả lớn.
Đối tượng là các nhân sự đã vượt qua giai đoạn vỡ lòng.
Và Khai vấn lúc này sẽ là bạn giúp đỡ nhân viên của mình hoàn thành các mục tiêu mà họ đặt ra. Sự hỗ trợ của bạn sẽ giảm dần theo thời gian. Khi nhân viên của bạn đạt được khả năng tự học hỏi. Từ đó, bạn sẽ giảm dần việc hỗ trợ và tăng việc ủy thác. Nhân sự của bạn sẽ tiếp tục thực hiện việc luyện tập tự khai vấn để giải quyết các mục tiêu kế tiếp.
2.2. Phát triển cá nhân
Mỗi cá nhân là một câu chuyện. Không ai giống ai, nên việc học lập trình cũng sẽ là không ai giống ai. Cho nên chương trình đào tạo của bạn cũng phải có khả năng tuy chỉnh cao. Để các cá nhân có được:
- Một lộ trình riêng
- Đạt được những thành tự nhỏ
- Khả năng tư duy
Bạn không thể nào áp dụng duy nhất một ví dụ coding cho 1 bài toán cụ thể. Hoặc nếu bạn luyện tập chăm chỉ, thì bạn không thể nào tìm ra được hàng ngàn ví dụ code cho hàng ngàn bài toán thực tế được.
Có thể lấy một ví dụ như sau:
- Nếu lựa chọn 1 phương án đúng, bạn có thể dùng
if
- Giữa 2 lựa chọn đúng & sai, có thể dùng
if ... else
- Nhiều lựa chọn hơn, bạn có thể dùng
if ... else if ... else ...
Đó là câu trả lời khi bạn liên tục đặt ra những câu hỏi về số lượng sự lựa chọn logic trong code của bạn. Độ phức tạp của câu trả lời sẽ tăng dần. Và khi đã tích lũy đủ kiến thức nền tảng, bạn sẽ hiểu được bản chất vấn đề bạn đặt ra lúc ban đầu.
Hoặc khi bạn đã thành thạo lập trình JAVA, thì hầu như bạn sẽ thành tạo được hầu hết các ngôn ngũ khác. Và cách học nhanh nhất là khi bạn đặt ra những câu hỏi mà bên này có thì bên kia liệu có hay không …
Đó là câu chuyện riêng của mỗi người nhóe!
3. Thực hành Khai vấn (coaching) trong lập trình
Phần lý thuyết thông não cũng khá là dài rồi hỉ. Bây giờ, ta sẽ khám phá việc thực hành Khai vấn trong lập trình là như thế nào trước nhóe. Và các phần dưới đây, sẽ là các phương pháp mà mình đúc kết được trong những năm tháng coding & training mòn mỏi.
3.1. Tự học
Với CNTT, việc tự học là một điều bình thường, như cân đường hộp sữa rồi. Vậy áp dụng Khai vấn vào tự học như thế nào mới là vấn đề chính.
Đầu tiên, bạn sẽ dễ dàng tìm được các khái niệm lý thuyết cơ bản.
Ví dụ, Swift là gì?
Sau đó, từ các kinh nghiệm vấp ngã trong quá khứ, bạn sẽ tự đặt ra các câu hỏi mà bạn cần giải quyết với cái mới.
Ví dụ, trong Swift thì là đơn thừa kế hay là đa thừa kế?
Muốn trả lời được câu hỏi đó, bạn sẽ phải bỏ công sức tìm tòi thêm. Lúc này, bạn sẽ thấy được sự giới hạn của cái mới hay của cái cũ. Và cuối cùng, bạn tiếp tục đặt ra các câu hỏi để giải quyết các giới hạn đó.
Ví dụ, muốn đa thừa kế trong Swift thì ta phải làm như thế nào?
Qua trên, bạn sẽ thấy được việc Khai vấn trong tự học cơ bản là ra sao. Việc làm này rất tốn thời gian, nhưng kết quả mà nó đem lại thì khá tốt. Bạn sẽ có được một nền tảng tốt và một kiến thức vững chắc.
3.2. Luyện tập
Cách học thứ 2 trong lập trình, đó là luyện tập. Chính là việc bạn thực hành code nhiều. Theo đúng phương châm
Cần cù bù thông minh.
Nhưng mà, mình đã đề cập ở trên. Chính việc bị giới hạn bởi lượng kiến thức mới, thì bạn khó lòng mà tiến xa được với phương pháp luyện tập. Và việc luyện tập theo khai vấn sẽ giúp bạn có được những mục tiêu nhỏ trước.
Ví dụ, bạn muốn thành thạo việc sử dụng TableView. Bạn có thể chia nhỏ ra các bài tập sau:
- Hiển thị một danh sách đơn giản (TableView)
- Danh sách với nhiều kiểu dữ liệu cho mỗi phần tử (Custom type)
- Nhiều danh sách (Section)
- Bắt sự kiện người dùng trên mỗi dòng của danh sách (Selection)
- Hiển thị nhiều thông tin hơn trên một dòng (Add Subview)
- Thêm các sự kiện khác trên 1 dòng (Delegate)
- Tạo giao diện riêng cho mỗi dòng (Custom Cell)
- ….
Nó khác với lý thuyết, tức là bạn sẽ đi trả lời câu hỏi lý thuyết “TableView là gì?”. Với luyện tập, bạn sẽ đi giải quyết các bài toán thực tế, thay vì các câu hỏi. Khi bạn sử dụng Khai vấn để đặt ra càng nhiều bài toán thực tế nhất, thì bạn sẽ càng thành tạo hơn. Bạn sẽ sử dụng hầu như tối đa sức mạnh của nền tảng hiện tại bạn đang sử dụng.
3.3. Suy luận
Suy luận là một phương pháp cao cấp hơn. Khi bạn đã hội tụ 2 yếu tố trên:
Tự học & luyện tập
Để giải quyết các bài toán mà bạn chưa biết hoặc chưa trải nghiệm qua bao giờ. Khai vấn lúc này là việc bạn đặt ra các câu hỏi ở tương lai nhiều hơn. Nó giống như việc bạn mò mẫm trong đêm tối vậy. Nó sẽ rất tốt trong những nền tảng công nghệ mang tính:
- Tương tự
- Mới
Ví dụ, muốn điều hướng màn hình trong SwiftUI, thì thực hiện như thế nào? Vì SwiftUI quá mới, nhưng nó lại được phát triển từ iOS & Swift. Do đó, ta có thể đặt ra các câu hỏi để xác định bản chất của chúng.
- Nó có sử dụng Navigation Controller để điều hướng hay không?
- Cách truyền dữ liệu giữa các màn hình thì như thế nào?
- State đóng vai trò gì trong việc điều hướng?
- Muốn trở về màn hình trước đó thì như thế nào?
- Nó có phải là View không? Nếu không thì ta đang điều hướng cái gì?
- …
Bạn sẽ thoải mái đặt ra các câu hỏi mà bạn có thể nghĩ ra được. Không giới hạn phải thuộc về cái mới hay cái cũ … dần dần bạn sẽ xác định được bản chất chính xác của nó là gì.
3.4. Huấn luyện
Huấn luyện mới chính xác là Khai vấn thật sự. Với 3 phương pháp trên, bạn có thể tự làm. Nhưng không phải ai lúc ban đầu đều giỏi như bạn lúc hiện tại. Do đó, việc huấn luyện sẽ là việc tương tác giữa 2 người.
- Coach : người huấn luyện
- Coachee : người được huấn luyện
Thay vì cầm tay chỉ việc cho nhân sự, việc huấn luyện sẽ giải đáp và khai mở dần dần khả năng của người được huấn luyện. Ta sẽ có các bước cơ bản như sau:
- Xác lập Mục tiêu – Coachee luyện xác định mục tiêu và những mong muốn đạt được cho quá trình khai vấn.
- Đặt Câu hỏi – Coach đặt câu hỏi để xác định Tầm nhìn, Những Trở ngại bên trong Coachee ngăn trở họ đi tới mục tiêu
- Lập kế hoạch – Coachee xác định được những bước đi cần thiết trong kế hoạch đạt được mục tiêu.
- Theo dõi và Ghi nhận – Coach sẽ tiếp tục giúp Coachee theo dõi hành trình của Coachee, chỉ ra những bước chệch và ghi nhận những thành tựu trên con đường tiến lên của khách hàng.
Nó sẽ áp dụng trên một quy mô lớn hơn & cần nhiều tài nguyên hơn. Như là cả một khóa đào tạo lập trình, thay vì việc hướng dẫn tìm hiểu một chủ đề lập trình nào đó.
4. Mặt tiêu cực
Bất cứ gì cũng tồn tại hai mặt, tích cực & tiêu cực. Việc Khai vấn và thực hiện Khai vấn cũng không tránh được. Ta sẽ nhận diện được 2 mặt tiêu cực cơ bản như sau:
- Ảo tưởng: khi bạn quá tự tin về khả năng đặt câu hỏi của mình. Vì điều kiện tiên quyết là bạn cần phải có được kiến thức cơ bản trước. Sau đó, bạn mới sáng tạo dựa trên cơ bản.
- Không lối thoát: Việc đặt câu hỏi cũng cần có giới hạn và phạm vi nhất định. Nếu không bạn sẽ liên tục đặt câu hỏi và chúng sẽ không dẫn bạn tới chính xác điều bạn muốn. Mà sẽ đưa bạn đi rất xa, tới cả vũ trụ hay tồn tại …
Tôi là ai và đây là đâu?
Vẫn có rất nhiều mặt tiêu cực khác, nhưng chúng sẽ được giải quyết khi bạn luyện tập nhiều. Nên bạn cũng đừng quá lo lắng. Mentor của bạn sẽ là người giúp bạn đi đúng đường và về bờ được.
Tạm kết
Bài viết chỉ là những kinh nghiệm có được trong quá trình luyện tập của mình. Nó không phải là tài liệu tham khảo cho bạn. Hi vọng nó giúp bạn có cái nhìn khác trong việc học lập trình. Thay vì những cú pháp & toán tử & mô hình lập trình khô khan. Hoặc ít nhất bạn có được một phương pháp thú vị hơn một tí. Và mình không phải là một chuyên gia Khai vấn. Mình vẫn thực hiện các phương pháp trên trong quá trình tự học hỏi và đào tạo nhân viên mới của mình.
Okay! Tới đây, mình xin kết thúc bài viết về Khai vấn trong lập trình . Nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gởi email theo trang Contact.
Tham khảo:
- Khai vấn (coaching) là gì?
- Sách PMBOK 6th & khóa học PMA
Cảm ơn bạn đã đọc bài viết này!
Written by chuotfx
Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!
Leave a Reply Cancel reply
Fan page
Tags
Recent Posts
- Charles Proxy – Phần 1 : Giới thiệu, cài đặt và cấu hình
- Complete Concurrency với Swift 6
- 300 Bài code thiếu nhi bằng Python – Ebook
- Builder Pattern trong 10 phút
- Observer Pattern trong 10 phút
- Memento Pattern trong 10 phút
- Strategy Pattern trong 10 phút
- Automatic Reference Counting (ARC) trong 10 phút
- Autoresizing Masks trong 10 phút
- Regular Expression (Regex) trong Swift
Archives
- September 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (4)
- April 2024 (2)
- March 2024 (5)
- January 2024 (4)
- February 2023 (1)
- January 2023 (2)
- November 2022 (2)
- October 2022 (1)
- September 2022 (5)
- August 2022 (6)
- July 2022 (7)
- June 2022 (8)
- May 2022 (5)
- April 2022 (1)
- March 2022 (3)
- February 2022 (5)
- January 2022 (4)
- December 2021 (6)
- November 2021 (8)
- October 2021 (8)
- September 2021 (8)
- August 2021 (8)
- July 2021 (9)
- June 2021 (8)
- May 2021 (7)
- April 2021 (11)
- March 2021 (12)
- February 2021 (3)
- January 2021 (3)
- December 2020 (3)
- November 2020 (9)
- October 2020 (7)
- September 2020 (17)
- August 2020 (1)
- July 2020 (3)
- June 2020 (1)
- May 2020 (2)
- April 2020 (3)
- March 2020 (20)
- February 2020 (5)
- January 2020 (2)
- December 2019 (12)
- November 2019 (12)
- October 2019 (19)
- September 2019 (17)
- August 2019 (10)