Published on

Clean Coder __ Chương 14 -- Cố vấn, học việc và sự khéo léo

Authors
  • avatar
    Name
    Harvey Bui
    Twitter

Tôi đã từng liên tục thất vọng vì chất lượng của sinh viên tốt nghiệp CS (Computer Science). Không phải vì họ không sáng dạ hay tài năng, mà chỉ là họ không được dạy về lập trình thực sự là gì.

Những cấp độ thất bại

Một lần tôi phỏng vấn một phụ nữ trẻ, đang học bằng thạc sỹ ngành khoa học máy tính ở một trường đại học lớn. Cô muốn ứng tuyển vào vị trí thực tập sinh vào thời gian hè. Tôi yêu cầu cô ấy viết một vài dòng code với tôi, và cô ấy trả lời "Tôi không thực sự viết code".

Làm ơn đọc lại đoạn văn trên 1 lần nữa, và sau đó bỏ qua phần này sang đoạn tiếp theo.

Tôi hỏi cô ấy đã tham gia những khóa học lập trình nào khi học bằng thạc sỹ. Cô ấy nói rằng cô ấy không tham gia bất kỳ khóa học nào.

Có thể bạn sẽ muốn đọc lại chương này từ đầu để chắc chắn rằng bạn chưa rơi vào một vũ trụ song song hoặc vừa thức dậy khỏi một cơn ác mộng

Tới lúc này bạn có thể sẽ tự hỏi bản thân rằng bằng cách nào mà một sinh viên theo học thạc sỹ khoa học máy tính có thể tránh được những khóa học lập trình. Tôi cũng có thắc mắc tương tự tại thời điểm đó. Và tôi vẫn thắc mắc cho đến hôm nay.

Tất nhiên, đó là trường hợp tệ nhất trong một loạt những thất vọng của tôi khi phỏng vấn sinh viên mới tốt nghiệp. Không phải tất cả sinh viên tốt nghiệp khoa học máy tính đều đáng thất vọng - còn xa! Tuy nhiên, tôi nhận thấy rằng họ đều không có một điểm chung: Gần như tất cả đều tự học lập trình trước khi vào đại học và tiếp tục tự học mặc dù đã tốt nghiệp.

Đừng hiểu nhầm ý tôi. Tôi nghĩ có thể có được một nền giáo dục xuất sắc tại một trường đại học. Chỉ là tôi nghĩ rằng bạn có thể lướt qua hệ thống và nhận được bằng tốt nghiệp, và không có thêm gì hết.

Và có một vấn đề khác. Ngay cả những tấm bằng của chương trình khoa học máy tính tốt nhất cũng thường không giới thiệu cho sinh viên mới tốt nghiệp những thứ họ sẽ gặp phải trong ngành này. Đây không phải một cáo trạng về những bằng cấp đó vì nó là thực tế của gần như tất cả các ngành. Những gì bạn học ở trường và những gì bạn tìm thấy trong công việc thường rất khác nhau.

Cố vấn

Cách chúng ta học lập trình như thế nào? Hãy để tôi kể cho bạn nghe câu chuyện của tôi về việc được cố vấn.

Digi-Comp 1, Máy tính đầu tiên

Năm 1964, mẹ tôi tặng tôi một chiếc máy tính nhỏ bằng nhựa vào sinh nhật thứ 12 của tôi. Tôi gọi nó là Digi-Comp 1. Nó có 3 flip-flops bằng nhựa và sáu chân kết nối nhựa. Bạn có thể kết nối đầu ra của flip-flops với đầu vào của chân kết nối. Bạn cũng có thể kết nối đâu ra của chân kết nối với đầu vào của flip-flops. Nói tóm lại, điều này cho phép bạn tạo một máy trạng thái hữu hạn ba bit.

Bộ dụng cụ đi kèm với hướng dẫn cung cấp cho bạn một số chương trình để chạy. Bạn lập trình bằng cách đẩy các ống nhỏ (các đoạn ống hút ngắn) lên cách chốt nhỏ nhô ra từ đầu flip-flops. Hướng dẫn cho bạn biết chính xác vị trí đặt mỗi ống, nhưng không phải những gì chúng làm. Tôi thấy khá là bực bội!

Tôi nhìn chằm chằm vào cỗ máy hàng giờ liên và tìm hiểu chúng làm những việc đơn giản nhất như thế nào; nhưng tôi không làm được, trong cả cuộc đời mình, tìm cách để nó có thể làm được việc tôi muốn nó làm. Trang cuối cùng của hướng dẫn yêu cầu tôi gửi cho họ 1$ và họ sẽ gửi lại một hướng dẫn về cách trình cỗ máy.

Tôi gửi tiền đi và chờ đợi với sự thấp thỏm của tuổi 12. Ngày hướng dẫn được gửi đến tôi đã ngấu nghiến nó. Nó là một lý thuyết đơn giản về đại số nhị phân bao gồm tính toán cơ bản của các phương trình nhị phân, luật liên kết và phân phối, và định lý DeMorgan. Hướng dẫn chỉ ra cách diễn đạt một vấn đề dưới dạng một chuỗi các phương trình nhị phân. Nó cũng mô tả làm thế nào để giảm các phương trình đó để phù hợp với 6 đầu ra.

Tôi đã hoàn thành chương trình đầu tiên của mình. Tôi vẫn còn nhớ tên của nó: Mr. Patternson's Computerized Gate. Tôi viết những phương trình, rút gọn chúng và ghép chúng vào các ống và chốt của máy. Và nó đã hoạt động!

Viết 3 từ vừa rồi (And it worked) khiến tôi ớn lạnh sống lưng. Cảm giác ớn lạnh tương tự khi còn là cậu bé 12 tuổi gần nửa thế kỷ trước. Tôi đã mắc câu. Cuộc sống của tôi đã thay đổi hoàn toàn từ ngày đó.

Bạn có nhớ được khoảnh khắc chương trình đầu tiên của bạn hoạt động? Nó có thay đổi cuộc sống của bạn hoặc đưa bạn vào con đường bạn không thể quay lại?

Tôi không tự khám phá ra khoảnh khắc đó. Tôi đã được cố vấn. Một số người rất tốt bụng và rất lão luyện (người tôi mang một món nợ ân tình lớn) đã dành thời gian để viết lý thuyết về đại số nhị phân cho một đứa trẻ 12 tuổi có thể hiểu được. Họ kết nối lý thuyết toán học với một chiếc máy tính nhỏ bằng nhựa và trao quyền cho tôi để làm cho chiếc máy tính đó làm những gì tôi muốn.

Tôi vừa mở bản sao của cuốn sổ tay định mệnh đó. Tôi giữ nó trong một chiếc túi khóa zip. Tuy năm tháng đã khiến giấy bị ố vàng và trở nên giòn. Nhưng sức mạnh từ lời nói vẫn tỏa ra từ chúng. Sự thanh lịch của những dòng mô tả về đại số nhị phân đã tiêu tốn 3 trang thưa thớt. Việc xem qua từng bước của họ về các phương trình cho mỗi phương trình vẫn còn hấp dẫn như lần đầu tiên. Đó là một công việc bậc thầy. Đó là một tác phẩm đã thay đổi cuộc đời của ít nhất một người đàn ông trẻ tuổi. Tuy nhiên, tôi nghi nhờ rằng tôi sẽ khong bao giờ biết đến tên của tác giả.

Chiếc ECP-18 năm trung học

Năm tôi 15 tuổi, là học sinh năm đầu trung học, tôi thích chơi ở khoa toán. (Ngạc nhiên chưa!) Một ngày nọ, họ nhận được một cỗ máy có kích thước băng một chiếc bàn cưa. Đó là một máy tính giáo dục dành cho các trường trung học, được gọi là ECP-18. Trường tôi nhận được một bản demo trong 2 tuần.

Tôi đứng ở hậu trường khi các giáo viên và kỹ thuật viên nói chuyện. Máy tính có một bộ nhớ 15-bit từ (là gì nhỉ?) và 1024-từ trống. (Lúc đó tôi biết bộ nhớ trống là gì, nhưng chỉ trên khái niệm.)

Khi họ bật nguồn, nó tạo ra âm thanh giống như máy bay phản lực đang cất cánh. Tôi đoán rằng đó là bộ nhớ trống đang xoay. Một khi đạt đến tốc độ nhất định, nó khá là yên tĩnh.

Chiếc máy tính rất đáng yêu. Về cơ bản, nó là một chiếc bàn văn phòng với một bảng điều khiển kỳ diệu nhô ra từ phía trên như cầu của một con tàu chiến. Bảng điều khiển được tô điểm bởi các dãy đèn cũng là nút bấm. Ngồi ở bàn đó giống như ngồi trên ghế của thuyền trường Kirk.

Tôi quan sát kỹ thuật viên ấn những cái nút. Tôi nhận thấy chúng sáng lên khi họ ấn xuống, và họ bấm lần nữa để tắt đi. Tôi cũng nhận thấy rằng một số nút khác họ bấm có tên như nhập vào (deposit)chạy (run).

Các nút được nhóm lại trên từng hàng, mỗi hàng có 5 cụm, mỗi cụm 3 nút. Máy Digi-Comp của tôi cũng có 3 bit, vì vậy tôi có thế đọc dược chứ số bát phân khi biểu thị dưới dạng nhị phân. Không khó khi nhận ra rằng đay chỉ là 5 chữ số bát phân.

Mỗi khi kỹ thuật viên bấm nút tôi có thể nghe thấy họ đang tự lẩm bẩm. Họ sẽ bấm 1,5,2,0,4 trên hàng bộ nhớ đếm khi thầm nói "lưu vào 204". Họ sẽ bấm 1,0,2,1,3 và lẩm bẩm "nạp 213 vào bộ tích lũy". Có một hàng nút có tên bộ tích lũy!

Mười phút quan sát là đủ rõ ràng với trí não 15 tuổi của tôi, biết được 15 là lưu và 10 tức là nạp, bộ tích lũy dùng để lưu hoặc nạp, và những số khác nằm trong 1024 từ trên bộ nhớ trống (Vậy đó là 1 từ!)

Từng chút một, tâm trí háo hức của tôi thu được càng nhiều hướng dẫn code và khái niệm. Đến khi kỹ thuật viên đi khỏi, tôi đã biết những điều cơ bản về cách hoạt động của cỗ máy.

Chiều hôm đó, trong giờ học, tôi lẻn vào trong phòng thực hành toán và bắt đầu tìm hiểu cỗ máy. Tôi đã học được từ lâu rằng xin tha thứ sẽ tốt hơn xin phép! Tôi chuyển đổi một chương trình nhỏ sẽ nhân bộ tích lũy với 2 và cộng thêm 1. Tôi đưa số 5 vào bộ tích lũy, chạy chương trình, và nhìn thấy số 13 (hệ bát phân) trên bộ tích lũy! Nó đã hoạt động!

Tôi thử với một vài chương trình đơn giản khác tương tự và tất cả đều hoạt động theo kế hoạch. Tôi thấy mình như chủ nhân của vũ trụ!

Những ngày sau đó tôi mới nhận ra mình thật ngốc nghếch, và may mắn biết bao. Tôi tìm thấy một tờ hướng dẫn nằm đâu đó trong phòng thực hành toán. Nó chứa tất cả hướng dẫn và mã lựa chọn khác nhau, cùng với rất nhiều hướng dẫn tôi không học được bằng cách quan sát kỹ thuật viên. Tôi đã rất hài lòng khi tôi giải thích được những điều mà tôi đã biết chính xác và xúc động bởi những thứ khác. Tuy nhiên, một trong những hướng dẫn đó viết bằng HLT. Nó chỉ xảy ra với lệnh tạm dừng là một từ với tất cả số 0. Và điều xảy ra là tôi đã đã đặt một từ với tất cả là số 0 và cuối mỗi chương trình của tôi để tôi có thể tải nó vào bộ tích lũy và xóa nó. Khái niệm tạm dừng đơn giản là không xảy ra với tôi. Tôi chỉ nghĩ rằng chương trình sẽ dừng lại khi nó được thực hiện!

Tôi nhớ có lần tôi đang ngồi trong phòng thực hành toán quan sát một trong những giáo viên vật lộn để chương trình hoạt động. Ông cố nhập vào 2 số thập phân và in ra tổng của 2 số đó. Bất kỳ ai đã từng viết một chương trình như vậy bằng ngôn ngữ máy trên một máy tính mini đều biết rằng nó không hề tầm thường. Bạn phải đọc các ký tự, chuyển đổi chúng thành số, sau dó sang hệ nhị phân, tính tổng, chuyển đổi ngược lại thành thập phân và mã hóa lại thành ký tự. Và, tin tôi đi, sẽ tệ hơn rất nhiều khi bạn nhập chương trình ở dạng nhị phân thông qua bảng điều khiển.

Tôi quan sát giáo viên tạm dừng chương trình của mình và sau đó chạy nó cho đến khi nó dừng lại. (Ồ! Đó là một ý tưởng hay) Điểm ngắt ban đầu này cho phép ông kiểm tra nội dung của các số nhập vào xem chương trình đã làm gì. Tôi nhớ ông đã lẩm bẩm, "Chà, nhanh quá!" Chàng trai, tôi có tin mới cho anh đây.

Tôi không biết thuật toán của anh ta là gì. Kiểu lập trình đó vẫn còn là điều kỳ diệu với tôi. Và ông không bao giờ nói chuyện với tôi khi tôi quan sát ông. Thực sự, không ai nói chuyện máy tính với tôi. Tôi nghĩ rằng họ coi tôi là một đứa nhóc phiền toái có thể làm ngơ, loanh quanh trong phòng thực hành toán như con thiêu thân. Cần phải nói rằng cả học sinh và giáo viên đều không phát triển được kỹ năng xã hội ở mức độ cao.

Đến cuối cùng chương trình cũng hoạt động. Thực kinh ngạc khi quan sát. Thầy chậm chạp đánh vào 2 số bởi vì chiếc máy tính đó không được nhanh lắm, mặc dù đã phản đối trước đó (hãy nghĩ đến việc đọc các từ liên tiếp từ một cái trống quay vào năm 1967). Khi thầy nhập xong số thứ 2 và bấm enter, máy tính nhấp nháy dữ dội 1 chút và in ra kết quả sau đó. Nó mất khoảng 1s cho mỗi chữ số. Nó in ra tất cả trừ chữ số cuối cùng, nhấp nháy dữ dội hơn trong 5s, sau đó in chữ số cuối cùng và dừng lại.

Tại sao lại tạm dừng trước chữ số cuối cùng? Tôi không bao giờ biết được. Nhưng nó khiến tôi nhận ra rằng cách tiếp cận một vấn đề có thể ảnh hưởng sâu sắc đến người dùng. Ngay cả khi chương trình đưa ra câu trả lời chính xác, nhưng vẫn có điều gì đó không ổn với nó.

Đó chính là cố vấn. Chắc chắn đó không phải là kiểu cố vấn mà tôi có thể hy vọng. Sẽ thật tuyệt nếu một trong những giáo viên đó đã dẫn dắt tôi và làm việc với tôi. Nhưng điều đó không thành vấn đề, bởi vì tôi đã quan sát họ và học với một tốc độ điên cuồng.

Sự cố vấn độc đáo

Tôi kể cho bạn nghe 2 câu chuyện trên bởi vì chúng diễn tả 2 cách cố vấn rất khác biệt, không phải cách cố vấn các bạn vẫn thường được nghe. Trong trường hợp đầu tiên tôi được học từ một tác giả của một cuốn sách hướng dẫn được viết rất tốt. Trong trường hợp thứ 2 tôi được học qua cách quan sát những người chủ động cố gắng làm lơ tôi. Trong cả 2 trường hợp, khiến thức có được vẫn mang tính nền tảng và sâu sắc.

Tất nhiên, tôi cũng có những cố vấn khác nữa. Đó là người hàng xóm thân thiện làm việc tại Teletype, người đã mang về nhà cho tôi một chiếc hộp gồm 30 chiếu rơ le chiếc điện thoại để chơi cùng. Để tôi cho bạn biết, hãy đưa cho một chàng trai một số rơ le và một máy biến áp, anh ta có thể chinh phục cả thế giới!

Đó là một người hàng xóm tốt bụng, một người vận hành, đã chỉ cho tôi cách sử dụng một chiếc đồng hồ vạn năng (mà tôi đã nhanh chóng bẻ gãy). Đó là một chủ cửa hàng đồ văn phòng cho phép tôi vào và "chơi" với chiếc máy tính lập trình đắt tiền của ông ta. Đó là văn phòng kinh doanh của Digital Equipment Corporation đã cho phép tôi đến và "chơi" với PDP-8 và PDP-10 của họ.

Và đó là người anh Jum Carlin, một lập trình viên BAL, người cứu tôi khỏi sa thải khi đang làm công việc lập trình đầu tiên của mình, bằng cách giúp tôi debug một chương trình Cobol vượt quá khả năng của tôi. Anh dạy tôi cách đọc dữ liệu từ lõi trống, và dạy tôi cách format code với những dòng trống thích hợp, hàng dấu sao và chú thích hợp lý. Anh ấy đã dạy tôi những bước đi thủ công đầu tiên. Tôi xin lỗi vì không thể trả ơn khi ông chủ không hài lòng với anh ta 1 năm sau đó.

Nhưng, thành thật thì, đó là về nó. Không có nhiều lập trình viên cao cấp vào khoảng đầu những năm 70. Tất cả những nơi tôi đã từng làm việc, tôi đều là cấp cao. Không có ai giúp tôi tìm hiểu xem thực sự lập trình viên chuyên nghiệp là gì. Không có hình mẫu nào chỉ dạy cho tôi cách cư xử cũng như giá trị là gì. Những thứ tôi đang có đều thông qua tự học hỏi, và tất cả đều không dễ dàng.

Gõ mạnh

Như tôi đã nói với bạn, trên thực tế, tôi đã bị sa thải khỏi công việc ở nhà máy tự động hóa năm 1976. Mặc dù tôi rất giỏi về mặt kỹ thuật, nhưng tôi không học cách để tâm đến việc kinh doanh và mục tiêu kinh doanh. Ngày tháng và hạn chót không có ý nghĩa gì với tôi. Tôi quên mất buổi demo lớn vào sáng thứ 2, bỏ mặc hệ thống sập vào thứ 6, và đi làm muộn vào thứ 2 với ánh mắt giận dữ của tất cả mọi người.

Giám đốc gửi cho tôi một bức thư cảnh báo tôi rằng tôi phải thay đổi ngay lập tức hoặc sẽ bị sa thải. Đó là một lời cảnh tỉnh quan trọng với tôi. Tôi đánh giá lại cuộc sống và sự nghiệp của mình và bắt đầu có những thay đổi đáng kể trong hành vi của mình - có vài thay đổi bạn đã được đọc trong cuốn sách này. Nhưng tất cả đã quá muộn. Động lực đi sai hướng và những điều không quan trọng trước đây đều trở nên quan trọng. Vì vậy, mặc dù tôi đã cố gắng rất nhiều, cuối cùng họ vẫn tống cổ tôi ra khỏi tòa nhà.

Không cần nói cũng biết, thật không vui chút nào khi mang tin này về nhà cho một người vợ đang mang thai với cô con gái 2 tuổi. Nhưng tôi đã tự vực dậy bản thân mình và chấp nhận một số bài học mạnh mẽ của cuộc sống cho công việc tiếp theo - công việc tôi đã làm trong 15 năm tiếp theo và là nền tảng thực sự của sự nghiệp hiện tại của tôi.

Cuối cùng, tôi đã sống sót và thành công. Nhưng sẽ phải có cách tốt hơn. Sẽ tốt hơn rất nhiều cho tôi nếu tôi có một người cố vấn thực thụ, một người sẽ dạy tôi biết đầu vào và đầu ra. Một người tôi có thể quan sát trong khi giúp anh ta làm những công việc nhỏ, và một người sẽ xem xét, hướng dẫn tôi từ những ngày đầu. Một người nào đó để làm hình mẫu và dạy cho tôi những giá trị và hành động phù hợp. Một sensei, một bậc thầy, một cố vấn.

Học việc

Các bác sỹ làm việc gì? Bạn có nghĩ rằng các bệnh viện thuê sinh viên mới tốt nghiệp y khoa rồi ném họ vào phòng phẫu thuật tim trong ngày đầu tiên đi làm? Tất nhiên là không.

Ngành y đã phát triển một kỹ luật cố vấn căng thẳng tuân theo nghi lễ và bôi trơn bằng truyền thống. Ngành y tế giám sát các trường đại học và đảm bảo sinh viên tốt nghiệp có nền giáo dục tốt nhất. Việc giáo dục liên quan đến khối lượng học tập trên lớp và hoạt động lâm sàng tương đương khi làm việc với các chuyên gia trong các bệnh viện.

Khi tốt nghiệp, và trước khi họ có chứng chỉ, các bác sỹ mới toanh được yêu cầu dành 1 năm trong thực tế có giám sát và đào tạo được gọi là thực tập. Đây là quá trình đào tạo theo công việc căng thẳng. Sinh viên thực tập được bao quanh bởi giáo viên và các hình mẫu.

Sau khi thời gian thực tập sinh kết thúc, mỗi chuyên ngành y tế yêu cầu thêm từ 3 đến 5 năm thực hành và đào tạo có giám sát được gọi là nội trú. Bác sỹ nội trú có được sự tự tin bằng cách đảm nhận những trách nhiệm lớn hơn bao giờ hết trong khi vẫn được bao quanh và giám sát bởi các bác sỹ nhiều kinh nghiệm.

Rất nhiều chuyên ngành yêu cầu thêm 1 đến 3 năm nghiên cứu sinh trong đó sinh viên tiếp tục đào tạo chuyên ngành và thực hành có giám sát.

sau đó họ đủ điều kiện tham gia các kỳ thi của họ và được chứng nhận bởi hội đồng thi.

Mô tả này về nghề y hơi được lý tưởng hóa, và có lẽ không hoàn toàn chính xác. Nhưng thực tế vẫn là khi mức độ rủi ro cao, chúng ta không đưa sinh viên mới tốt nghiệp vào một phòng, thỉnh thoảng ném thịt vào, và mong điều tốt đẹp sẽ xuất hiện. Vậy tại sao chúng ta làm việc này với phần mềm?

Đúng là có tương đối ít trường hợp tử vong do lỗi phần mềm. Nhưng nó gây ra những thiệt hại đáng kể về tiền. Các công ty mất một số tiền lớn do đào tạo không đầy đủ các lập trình viên của họ.

Bằng một cách nào đó, ngành phát triển phần mềm có ý tưởng rằng lập trình viên là lập trình viên, và một khi bạn tốt nghiệp, bạn có thể code. Thực vậy, nó không phải là chuyện hiếm gặp khi các công ty tuyển những đứa nhóc mới rời ghế nhà trường, xây dựng họ thành một "team", và yêu cầu xây dựng những hệ thống quan trọng nhất. Thật điên rồ!

Họa sỹ không làm vậy. Thợ sửa ống nước không làm vậy. Thợ điện không. Chết tiệt, tôi thậm chí không nghĩ rằng những người nấu món ăn nhanh có thể làm vậy. Đối với tôi, các công ty thuê sinh viên tốt nghiệp khoa học máy tính phải đầu tư nhiều hơn vào việc đào tạo của họ hơn là McDonalds đầu tư vào máy chủ của họ.

Đừng tự đùa rằng việc này không quan trọng. Có rất nhiều thứ rủi ro. Nền văn minh của chúng ta dựa vào phần mềm. Đó là phần mềm di chuyển và điều khiển thông tin tràn ngập cuộc sống hàng ngày của chúng ta. Phần mềm điều khiển động cơ, hộp số và phanh của ô tô. Chúng duy trì số dư trong tài khoản ngân hàng, gửi hóa đơn và chấp nhận thanh toán cho chúng ta. Phần mềm giặt quần áo và cho ta biết thời gian. Chúng đưa ảnh vào TV, gửi tin nhắn, thực hiện cuộc gọi, và giải trí khi ta buồn chán. Chúng ở mọi nơi.

Và khi chúng ta đang giao phó cho các lập trình viên phần mềm mọi khía cạnh của cuộc sống của chúng ta, từ những điều vụn vặt đến quan trọng, tôi đề nghị một thời gian đào tạo và thực hành có giám sát hợp lý là không phù hợp.

Học việc trong nghề lập trình viên

Vậy làm thế nào để chỉ dạy cho những sinh viên trẻ mới ra trường về các cấp độ trong ngành lập trình? Họ nên làm theo những bước nào? Họ nên gặp những thách thức nào? Họ nên đạt được mục tiêu gì? Hãy bắt đầu từ cấp độ cao nhất.

Bậc thầy

Đây là những lập trình viên đã chịu trách nhiệm dẫn dất nhiều hơn một dự án quan trọng. Thường thì họ sẽ có hơn 10 năm kinh nghiệp và đã từng làm việc qua nhiều hệ thống, ngôn ngữ, và hệ điều hành khác nhau. Họ biết cách dẫn dẵn và điều phối nhiều team, là những nhà thiết kế và kiến trúc sư thành thạo, đồng thời có thể viết code quay vòng với tất cả mọi người mà không đổ một giọt mồ hôi. Họ đã được đề nghị vị trí quản lý, nhưng đã từ chối, hoặc quay lại sau khi nhận lời, hoặc tích hợp quản lý với vai trò kỹ thuật là chính. Họ duy trì vị trí kỹ thuật bằng cách đọc, nghiên cứu, thực hành, thực hiện và giảng dạy. Đó là người mà công ty sẽ giao trách nhiệm kỹ thuật cho một dự án. Nghĩ đi, "Scotty".

Thạo việc

Đây là những lập trình viên đã được đào tạo, có năng lực và năng động. Trong giai đoạn này của sự nghiệp, họ sẽ học hỏi để làm việc hiệu qua trong team và trở thành trưởng nhóm. Họ am hiểu về công nghệ hiện tại nhưng thường thiếu kinh nghiệm với nhiều hệ thống đa dạng. Họ có xu hướng biết một ngôn ngữ, một hệ thống, một nền tảng; nhưng họ đang học hỏi nhiều hơn. Mức độ kinh nghiệp rất khác nhau giữa các cấp bậc của họ, nhưng mức trung bình khoảng năm năm. Ở phía xa của mức trung bình đó, chúng ta có được những bậc thầy, ở phía gần, chúng ta có những người học việc.

Người thạo việc được giám sát bởi các bậc thầy, hoặc những người thạo việc cao cấp hơn. Những người trẻ tuổi hiếm khi có quyền tự chủ. Công việc của họ được giám sát chặt chẽ. Code của họ được xem xét kỹ lưỡng. Khi họ tích lũy được kinh nghiệm, quyền tự chủ sẽ tăng lên. Ít bị giám sát trực tiếp hơn và nhiều quyền hạn hơn. Cuối cùng, nó chuyển thành đánh giá ngang hàng.

Học việc

Sinh viên mới tốt nghiệp bắt đầu sự nghiệp của mình từ vị trí học việc. Người học việc không có quyền tự chủ. Họ được giám sát chặt chẽ bởi người thạo việc. Bạn đầu họ không nhận được nhiệm vụ gì cả, họ chỉ hỗ trợ những người thạo việc. Đây sẽ là thời điểm căng thẳng của làm việc theo cặp. Đây là lúc các kỷ luật được học hỏi và củng cố. Đây là lúc nền tảng của các giá trị được tạo ra.

Người thạo việc sẽ là những người hướng dẫn. Họ cần chắc chắn rằng người học việc biết được các nguyên tắc thiết kế, khuôn mẫu thiết kế, kỷ luật, và các nghi thức. Người tạo việc sẽ dạy TDD, tái cấu trúc code, ước lượng và những thứ khác. Họ sẽ giao cho người học việc đọc, luyện tập và thực hành, họ là người kiểm tra sự tiến bộ.

Thời gian học việc có thể kéo dài 1 năm. Trong thời gian đó, nếu người thạo việc có thể chấp nhận người học việc vào hàng ngũ của họ, họ sẽ đề nghị với bậc thầy. Các bậc thầy sẽ kiểm tra người học việc bằng phỏng vấn và đánh giá những thành tích. Nếu bậc thầy đồng ý, người học việc sẽ trở thành người thạo việc.

Thực tế

Một lần nữa, mọi thứ ở trên chỉ là lý tưởng và giả định. Tuy nhiên, nếu bạn thay đổi tên và để ý từ ngữ, bạn sẽ nhận ra rằng nó không hoàn toàn khác với cách chúng ta mong đợi mọi thứ hoạt động như hiện tại. Sinh viên mới tốt nghiệp được giám sát bởi các trường nhóm trẻ, những người được giám sát bởi trưởng dự án, v.v. Vấn đề là, trong hầu hết các trường hợp, sự giám sát này không phải về kỹ thuật! Ở hầu hết các công ty, không có sự giám sát kỹ thuật nào cả. Các lập trình viên được tăng lương và cuối cùng thăng chức bởi vì, chà, đó những gì bạn làm với lập trình viên.

Sự khác biệt giữa việc chúng ta làm bây giờ và lý tưởng của tôi về học việc lập trình là sự tập trung vào giảng dạy, rèn luyện, giám sát và đánh giá về kỹ thuật.

Sự khác biệt là quan điểm cho rằng cách giá trị nghề nghiệp và sự nhạy bén về kỹ thuật phải được dạy dỗ, nuôi dưỡng, vun đắp, uốn nắn, rèn luyện và phát triển. Điều còn thiếu trong phương pháp tiếp cận vô trùng hiện tại của chúng ta là trách nhiệm của những người lớn tuổi trong việc dạy dỗ những người trẻ hơn.

Nghề thủ công

Vậy là bây giờ bạn đang ở vị trí để định nghĩa từ này: craftsmanship. Vậy nó là gì? Để tìm hiểu, hãy xem xét từ thợ thủ công (craftsman). Một từ mang lại hình dung về kỹ năng và chất lượng cao. Nó bao gồm kinh nghiệm và năng lực. Một người thợ thủ công là một người làm việc nhanh chóng, nhưng không vội vàng, một người đưa ra những ước lượng hợp lý và đáp ứng được cam kết. Một người thợ thủ công biết khi nào cần nói không, nhưng cố gắng hết sức để nói có. Một người thợ thủ công là một chuyên gia.

Nghề thủ công là một tư duy (mindset) của thợ thủ công. Nghề thủ công là một meme chứa đựng các giá trị, kỷ luật, kỹ thuật, thái độ và kết quả.

Nhưng làm thế nào thợ chủ công áp dựng được meme này? Làm thế nào họ đạt được tư duy này?

Meme nghề thủ công được truyền từ người ngày sang người khác. Được truyền dạy từ người lớn tuổi cho người trẻ. Nó được trao đổi với nhau. Nó là sự quan sát và xác định lại, như nhưng người lớn tuổi quan sát người trẻ hơn. Nghề thủ công là một thứ lây nhiễm, một loại virus tâm trí. Bạn nắm bắt được nó thông qua quan sát những người khác và cho phép meme làm phần còn lại.

Thuyết phục người khác

Bạn không thể thuyết phục người ta trở thành thợ thủ công. Bạn không thể thuyết phục họ chấp nhận meme nghề thủ công. Lập luận không mang lại hiệu quả. Dữ liệu không quan trọng. Case study không có ý nghĩa gì. Việc chấp nhận một meme không phải là một quyết định lý trí như một quyết định cảm tính. Đây là một điều rất con người.

Vậy làm thế nào bạn khiến người khác chấp nhận meme nghề thủ công? Nhớ rằng meme có thể lây nhiễm, nhưng chỉ khi nó được quan sát. Vậy nên bạn phải làm cho meme quan sát được. Bạn trình diễn như một hình mẫu. Bạn trở thành thợ thủ công trước, và để cho nghề thủ công của bạn thể hiện. Sau đó để meme làm nốt phần còn lại.

Kết luận

Trường học có thể dạy lý thuyết về lập trình máy tính. Nhưng trường học không dạy, và không thể dạy về kỷ luật, thực hành và kỹ năng để trở thành một thợ thủ công. Những thứ đó được tích lũy hàng năm trời bởi sự kèm cặp và cố vấn của mỗi cá nhân. Đây là lúc mỗi người trong ngành phần mềm đối mặt với sự thật rằng hướng dẫn thế hệ tiếp theo nằm trong tay chúng ta, không phải ở trong trường đại học. Đây là lúc chúng ta nên áp dụng chương trình học việc, thực tập và hướng dẫn dài hạn.