- Giáo dục chính quy hữu ích cho việc truyền đạt kỹ năng thành thạo một cách hiệu quả, nhưng có giới hạn trong việc phát triển trực giác để giải quyết những vấn đề bất ngờ
- Thử và sai lặp đi lặp lại có chủ đích (thuật toán) là yếu tố giúp nâng cao năng lực nhiều nhất thông qua quá trình thất bại và sửa chữa trong thực tế
- Trong các ví dụ thực tế, nhiều nhân vật như Linus Torvalds, Margaret Hamilton đã trải qua thất bại và vượt qua chúng để đạt được năng lực xuất sắc
- Mentoring là chất xúc tác quan trọng, nhưng thử nghiệm tự chủ và trải nghiệm trực tiếp mới là cốt lõi của sự trưởng thành cuối cùng
- Thử nghiệm định hướng mục tiêu bằng cách trực tiếp va chạm, vấp ngã và tự mình giải quyết vấn đề là nền tảng của việc nâng cao năng lực thực sự
Sức mạnh tạo nên những kỹ sư phần mềm giỏi nhất: thử và sai có chủ đích
Huyền thoại lớp học
- Giáo dục chính quy có lợi cho việc truyền đạt kiến thức giá trị, nhưng là một quy trình được tối ưu hóa để phù hợp với quy mô
- Nó đóng gói kinh nghiệm thực tiễn phức tạp vào những quy trình đã được chắt lọc kỹ để có thể truyền đạt dưới dạng hoàn thành trong một học kỳ
- Trong quá trình này, có thể học được năng lực thành thạo cơ bản cần cho công việc thực tế, nhưng vẫn tồn tại giới hạn trong việc xây dựng khả năng trực giác giải quyết vấn đề khi gặp khủng hoảng ngoài dự đoán
- Đặc biệt, khi sự cố dịch vụ thực tế xảy ra lúc 3 giờ sáng, chỉ với công thức học trong lớp thì không đủ để xử lý
Sự trưởng thành thực sự khi tự mình va chạm và học hỏi
Những trường hợp điển hình
- Linus Torvalds đã tạo ra Linux khi viết lại MINIX
- Margaret Hamilton đã trực tiếp sửa các vấn đề mã theo thời gian thực trong dự án Apollo và từ đó khai sinh khái niệm độ tin cậy hiện đại
- Vô số maintainer mã nguồn mở cũng trưởng thành bằng cách tự làm hỏng chiếc laptop của mình rồi tự sửa lại
- Họ không hề nghe bài giảng tuần tự trước, mà có được năng lực sâu sắc nhờ thất bại và tác động thực tế kéo theo từ những thất bại đó
Vì sao thử và sai vượt lên trên công thức
- Vòng phản hồi diễn ra tức thì. Quá trình phân tích crash từ log mang lại khả năng tiếp thu nhanh hơn rất nhiều so với quiz
- Edge case tự nhiên lộ ra trong môi trường thực tế, và ta sẽ gặp những trường hợp sử dụng mà giáo trình không thể tưởng tượng ra
- Những vấn đề được giải quyết một cách khó khăn sẽ in sâu vào trí nhớ. Chúng trở thành trí nhớ cơ bắp
- Khi không có sẵn hướng dẫn, sự sáng tạo sẽ bùng nổ mạnh mẽ
Nhìn lại mentoring: chất bổ sung, không phải chất thay thế
- Một mentor giỏi giúp đưa ra phản hồi nhanh và mở rộng góc nhìn, nhưng rốt cuộc người trực tiếp thử nghiệm và trải nghiệm vẫn là chính bản thân mình
- Code review có giá trị vì chia sẻ kết quả thử nghiệm, nhưng không thay thế được trải nghiệm trực tiếp
Xây dựng thói quen thử nghiệm tự chủ
- Thử làm những side project khiến bản thân hơi thấy bất an
- Đo đạc mọi thứ để khi thất bại có được dữ liệu có thể phân tích
- Đặt ra ràng buộc như giới hạn framework hoặc phải hoàn thành trong 48 giờ để rèn khả năng giải quyết sáng tạo
- Công khai mã nguồn để nhận sự kiểm chứng từ bên ngoài
- Viết tổng kết hồi cứu theo tuần để ghi lại nguyên nhân thất bại và những gì đã học được
Tổng kết
- Mentoring, khóa học, blog... đóng vai trò chất xúc tác, nhưng năng lực thực sự được tích lũy trong quá trình va chạm quyết liệt tại hiện trường
- Những kỹ sư giỏi nhất đạt được tăng trưởng và giải quyết vấn đề thực chất bằng cách lặp lại thử và sai có chủ đích một cách tự do
- Kinh nghiệm thu được trong quá trình này sẽ trở thành tài sản lớn nhất cho chính bản thân trong tương lai
1 bình luận
Ý kiến trên Hacker News
Bản thân tôi là một lập trình viên tự học và đã dành phần lớn sự nghiệp làm việc tại các tập đoàn lớn cùng các đồng nghiệp học CS bài bản
Theo kinh nghiệm của tôi, lập trình viên tự học nếu đủ thông minh thì cuối cùng cũng sẽ giải quyết được bài toán được giao
Người học CS thường có nhiều trường hợp thậm chí không thử khi gặp một lĩnh vực hoàn toàn xa lạ với họ (tất nhiên còn tùy tính cách, nhưng tôi nghĩ rơi vào khoảng 85%)
Trước mức độ bất định cao, họ không thể tiến lên
Cuối cùng, người học CS hợp với môi trường doanh nghiệp lớn hơn, làm việc theo khuôn mẫu như những bánh răng có thể thay thế
Lập trình viên tự học thì luôn đổi mới, làm việc theo hướng giảm các lặp lại kém hiệu quả, và thái độ độc đáo đó khiến những người xung quanh cảm thấy bất an
Nhưng chính những người tự học như vậy lại tạo ra kết quả vượt trội hơn hẳn
Có vẻ đa số lập trình viên coi trọng việc giữ được việc làm và giảm bất an hơn là bản thân mã nguồn xuất sắc
Nhiều kỹ sư được đào tạo chính quy cũng rất chủ động giải quyết vấn đề mới
Đây không hẳn là vấn đề tự học/chính quy mà là vấn đề về tính tò mò, chăm chỉ, sáng tạo, trí thông minh và khí chất cá nhân
Người tự học buộc phải có những đặc điểm đó mới thành công được, nên có thể chúng trông nổi bật hơn trong nhóm này
Khi một kỹ sư được đào tạo chính quy cũng có thêm các phẩm chất đó, họ thường vượt trội hơn cả hai nhóm còn lại
Có lẽ khác biệt lớn nhất là về tính cách
Kiểu lập trình viên tự học như tôi thường lấy sự cần mẫn làm thế mạnh
Tôi không giỏi nhìn bức tranh lớn theo góc độ kỹ thuật, nhưng bù lại luôn cố gắng tạo ra nhiều đầu ra nhất trong nhóm
Tôi làm tới ba bản prototype chỉ trong vài ngày rồi đem đi thử nghiệm thực tế
Các đồng nghiệp học CS thì chỉ thiết kế một lần trên bảng trắng rồi viết code đúng một lần
Hai cách đó chưa từng được áp dụng cho đúng cùng một công việc nên khó nói cách nào cho kết quả tốt hơn
Trong đầu tôi, cách của mình có cảm giác là cách đã được “kiểm chứng ngoài thực tế”
Cách làm kiểu CS đúng là thường được xem như lý tưởng hơn
Nhưng tôi cũng nghĩ mình đã học được rất nhiều nhờ được các kỹ sư học CS kèm cặp
Sau khoảng 10 năm kinh nghiệm trong ngành thì dù xuất phát điểm thế nào, cuối cùng mọi người cũng trở nên khá giống nhau và hình thành trực giác tương tự về “đáp án đúng”
Có thể tôi đã phần nào tô hồng hoặc khái quát hóa quá mức, mong người khác bổ sung trong phần trả lời
Tôi đồng ý
Phần lớn chương trình CS khá xa thực tế công việc nên bằng cấp không phải là thước đo năng lực tức thì
Nhưng tôi hoàn toàn không thể đồng ý với nhận định rằng 85% người tốt nghiệp CS không giải quyết được vấn đề lạ
Nếu có một ưu điểm của bằng CS, thì đó là lộ trình kỹ thuật của nó bao gồm rất nhiều môn cực nặng đòi hỏi năng lực trí tuệ cao
Rất khó tin rằng một người đủ khả năng vượt qua chừng ấy môn học lại không làm nổi công việc phát triển phần mềm thực tế
Khi đi vào những lĩnh vực phát triển thật sự khó, tôi lại thấy phần lớn là những người có bằng CS nâng cao
Có lẽ những đặc tính đó xuất hiện ở những ai có hứng thú sâu sắc với phần mềm, và trong số đó cũng có rất nhiều người học CS
Theo kinh nghiệm của tôi, người tự học được sàng lọc tự nhiên
Tức là người tự học mà không giải quyết nổi vấn đề lạ thì thậm chí còn không được tuyển
Những người xuất thân đào tạo chính quy thường ở mức trung bình hoặc cao hơn, nhưng không hẳn áp đảo
Còn người nào vừa tự mình mày mò ra mọi thứ, vừa được xác thực thêm bằng đào tạo đại học, thì thể hiện sức mạnh thực chiến thật sự đáng gờm
Theo tôi, cốt lõi không phải là cách học mà là “đam mê”
Nếu động lực yếu thì dù học theo cách nào cũng có giới hạn rõ ràng
Chủ đề này cũng có khía cạnh khó bàn bằng con số
Giáo dục chính quy có thể giúp xây nền vững chắc cho các khái niệm cốt lõi như toán, phần cứng, OS, compiler...
Tự học thì thiên về mục tiêu nên có thể bỏ qua nền tảng cơ bản
Khi bạn còn không biết mình không biết gì, có một người hướng dẫn tốt (giáo sư, một cuốn sách hay) sẽ tiết kiệm được rất nhiều thời gian
Rất nhiều kỹ sư, trong đó có tôi, đều trải qua cả học chính quy lẫn không chính quy
Nếu có đam mê, bạn sẽ tự tiếp tục làm ra thứ gì đó và thử nghiệm đủ kiểu ngoài việc học bài bản
Điều phân biệt kỹ sư thực sự xuất sắc không phải là hình thức giáo dục mà là đam mê rõ ràng
Những trường hợp như Linus hay Margaret cuối cùng cũng đều là những người có tinh thần học hỏi phi thường
Là một lập trình viên tự học, tôi cũng hoàn toàn đồng ý
Tôi tự học từ thời máy tính 8-bit những năm 80 và chưa từng học đại học
Khi có công việc lập trình chính thức đầu tiên ở tuổi 19, tôi đã có 9 năm kinh nghiệm lập trình
Khi đa số người khác tốt nghiệp đại học thì tôi đã code gần 15 năm rồi
Tôi nghĩ rất khó để xem nhẹ loại đam mê và động lực đó
Đến giờ, sau gần 40 năm, tôi vẫn tận hưởng phần mềm với tinh thần gần như vậy
Việc tạo ra thứ gì đó vốn đã vui, và tôi vẫn liên tục đọc paper, theo dõi xu hướng ngành, và viết code cực nhiều
Tuy vậy, tôi hơi tiếc cách nhìn mặc định rằng người tự học thiếu nền tảng cơ bản
Thực tế nhiều người tự học cũng đào rất sâu vào phần học thuật—có lẽ còn tùy lĩnh vực
Có thể họ thiếu thời gian để học theo chiều sâu, nhưng khi tích lũy hàng chục năm kinh nghiệm thì đôi khi nền tảng của họ còn dày hơn cả người chỉ đi học trường lớp
Tôi cũng đã tuyển dụng/sa thải khá nhiều người, và nhiều lần người tự học cho kết quả tốt hơn
Suy cho cùng họ đã “làm” nhiều hơn rất nhiều—đam mê cuối cùng thúc đẩy khối lượng học tập
Tôi cực kỳ đồng cảm với ý “khi không biết điều mình không biết, có ai đó dẫn dắt hiệu quả sẽ rất hữu ích”
Tôi là trường hợp nằm đâu đó giữa chính quy và không chính quy
Tôi chưa học toán rời rạc nâng cao hay đại số tuyến tính, nên thiếu khá nhiều kiến thức nền
Tôi thậm chí còn không biết phải tìm từ khóa nào
Có những lĩnh vực thật sự cần ai đó chỉ đường
Đến tận cuối tuổi 30 mà tìm gia sư để kiểm chứng chương trình toán vector vẫn thực sự rất khó
Đam mê thúc người ta tự học, nhưng trong môi trường lớp học thì vì luôn có người giữ bạn trên đường ray nên có thể ít cần nó hơn
Ngoài ra cũng có kiểu tự học “hướng mục tiêu”, nhưng cũng có người tự học với mục tiêu là hiểu nguyên lý vận hành của cả hệ thống
Dù có ai cưỡng ép đưa bạn ra bờ nước, điều đó không có nghĩa bạn chưa từng tự mình đi tới đó
Theo tôi, điểm khác biệt nhất quán là mọi người tự học ít nhất cũng đã tự mình đi ra bờ nước được một lần
Tôi là kiểu kết hợp giữa học chính quy và tự học
Tôi học rất nhiều môn ở đại học nhưng không lấy được bằng nhờ thi cử
Việc tôi có thể tự học nốt phần còn lại là nhờ đã xây nền từ các lớp học trước đó
Tôi nghĩ các lớp đại học thực sự rất tuyệt
Khi còn chưa biết gì, tôi sẽ không bao giờ tự mình đào vào socket API của C, dự án bash, hệ thống phân tán, cấu trúc dữ liệu hay thuật toán
Thực tế tôi đã phỏng vấn nhiều người tự học hoặc tốt nghiệp bootcamp, và họ có xu hướng chỉ đào vào vùng quen thuộc hoặc sụp đổ rất nhanh trước các câu hỏi học thuật
Ngược lại, người học đại học mà không thực sự code nhiều thì năng lực rất yếu, và ngay cả khi đang học đại học họ cũng quên sạch những gì đã học trước đó
Tôi nghĩ tổ hợp tốt nhất là có kinh nghiệm code nhất định trước khi vào đại học
Bạn cần từng tự mình va đập thì mới thật sự biến những lời giải lý thuyết và thanh lịch được giới thiệu trong giảng đường thành của mình
Càng từng khổ sở vì lỗi quản lý bộ nhớ như RAII, bạn càng đồng cảm sâu hơn với những khái niệm như vậy
Nên phân biệt người tốt nghiệp bootcamp với người tự học
Bootcamp cũng có thể có người giỏi, nhưng những người tôi biết đa phần là kiểu không tự học nổi nên định vào đại học hoặc chuyển ngành, rồi chọn bootcamp vì đó là phương án rẻ hơn
Trước đây thậm chí còn chưa có bootcamp, còn tôi thì cũng tránh xa các khóa online/cách học truyền thống
Tôi muốn tạo ra thứ gì đó hay ho, và thấy việc giải quyết vấn đề một cách độc lập thú vị hơn là làm lại theo giáo trình
Lý do tôi tự học C từ nhỏ cũng là vì có những việc không thể làm được chỉ bằng tài liệu hay code sẵn có, và tôi quá muốn có kết quả ngầu đến mức phải lục forum, đọc tài liệu và thử sai để đạt được nó
Tôi cho rằng ham muốn học thật mạnh còn quan trọng hơn cả phương pháp học
Trước khi vào đại học, tôi đã rất thành thạo C, socket API, và còn có cả kinh nghiệm bàn giao phần mềm
Một người bạn của tôi hồi cấp ba còn kiếm tiền bằng cách bán game cho C64
Cả hai chúng tôi đều vượt xa người mới ra trường về kỹ năng code thực chiến
Thứ tôi thiếu là phần lý thuyết như giải tích, đại số tuyến tính, toán rời rạc, và đôi khi cả cấu trúc dữ liệu, thuật toán
Chương trình CS đã lấp được những lỗ hổng đó, nhưng không nâng kỹ năng code của tôi lên
Các môn liên quan đến lập trình chẳng hề khó với tôi, thứ làm tôi vất vả lại là toán và các môn lý thuyết
Chương trình CS khiến tôi trở thành một kỹ sư cân bằng hơn, chứ không khiến tôi thành một lập trình viên giỏi hơn
Hồi tôi học đại học ngày xưa, không khí trong khoa CS hoàn toàn ngược với những gì ngày nay người ta nói là ưu điểm của đại học
Chính vì vậy tôi đã không chọn CS làm chuyên ngành ở đại học (hiện là senior developer tại một công ty công nghệ Mỹ), và thời đó dù CS là ngành danh giá ở trường top chỉ nhận điểm cao nhất, tỷ lệ trượt, thất nghiệp và bầu không khí từ giảng viên đều tệ nhất
Dĩ nhiên có người nhận được nhiều giá trị từ đại học, nhưng thực tế không phải lúc nào cũng vậy
Nhiều người tốt nghiệp CS mà tôi gặp trong công việc lại rất yếu ở giao tiếp, hiểu biết kinh doanh và sắp xếp ưu tiên
Nhiều người chỉ biết viết code (mà ngay cả vậy cũng không giỏi), và hiếm khi chỉ riêng chương trình CS ở đại học đã chuẩn bị hoàn toàn cho công việc thực tế
Tôi thậm chí còn nghĩ chính cách dạy ở đại học mới là ví dụ điển hình của việc ở yên trong “comfort zone”
Cũng cần thừa nhận rằng bản thân việc tiếp cận/chi trả học phí đại học là một vấn đề giai cấp xã hội và kinh tế
Và cũng có những người tự học đã tự mình làm đủ thứ như socket API hay dự án bash
Nhân tiện, người tự học và người xuất thân bootcamp là hai kiểu hoàn toàn khác nhau
Có thể tôi sẽ gục trong những tình huống được dựng sẵn như phỏng vấn kiểu audition, nhưng khi ở một mình tôi lại giải quyết được vấn đề thực tế rất tốt
Có thể nghe hơi kiểu “ông chú”, nhưng tôi cũng thuộc thế hệ từng học đại học rất tốt
Chúng tôi từng làm compiler, toy OS, giao diện GPS...
Vài năm trước tôi được mời sang một trường khác để dạy và đã rất thất vọng
Chương trình học trông như kéo dài bootcamp hiện đại thành vài năm rồi chèn thêm vài môn chẳng mấy liên quan
Hầu như không có nền tảng cơ bản, ngoài môn thuật toán thì toàn React và các framework đang hot ở startup địa phương
(Sửa: xem kỹ curriculum thì đúng là có cả các môn business, quản trị, nhân văn, hóa học, môi trường, khởi nghiệp, e-sports)
Có vẻ mọi người đang bỏ khá nhiều công sức để tự chấp nhận việc mình thiếu nền giáo dục bài bản
Có người tự học rất xuất sắc và cũng có người có bằng cấp mà không hẳn thông minh, nhưng từ trải nghiệm cá nhân tôi vẫn nghĩ nếu có bằng CS thì con đường của tôi đã dễ hơn
CS về bản chất không chỉ là coding, và cũng giống như ME, mỗi nghề có kỳ vọng và vai trò khác nhau
Kỹ sư cơ khí cũng không giỏi bằng thợ máy trong những việc lặt vặt như rò dầu hay vá lốp
Nhưng không vì thế mà người ta xem nhẹ bằng kỹ sư
Lúc đầu tôi cũng từng trực tiếp xắn tay trong xưởng sản xuất và xử lý được cả những thứ kỹ thuật viên không sửa nổi, nhưng đó là do sở thích cá nhân và sự tò mò
Người tự học đạt thành tích tốt hơn là vì họ chính là những người có đủ động lực, đam mê và tính tự chủ để trở thành người tự học
Cuối cùng, nếu có tò mò, tập trung và kỷ luật thì dù chính quy hay không bạn cũng sẽ vượt mức trung bình
Cũng có thiên lệch sống sót ở đây—thực tế ta chỉ nhìn thấy những người tự học đã sống sót được trong nghề
Ngược lại, những người tự học thất bại có thể đã làm tốt hơn nếu được dạy dỗ bài bản
Tôi là trường hợp vừa thích CS/toán trong trường lớp, vừa cảm thấy bản thân hợp với việc tự học hơn về mặt khuôn khổ
Từ “thường” chỉ là một cách diễn đạt để bọc lại sự mơ hồ mà thôi
Tôi là lập trình viên phần mềm đồng thời là giảng viên CS ở đại học
Điểm chung của những kỹ sư thực sự thành công cuối cùng vẫn là “sự quan tâm” và “đam mê”
Người tự học đương nhiên rất quan tâm đến lĩnh vực đó, nên bản thân động lực của họ đã là một dạng kiểm chứng
Người có bằng thì lẫn lộn hơn—có người chỉ nhắm đến tấm bằng, biết từ ngữ lý thuyết nhưng khó phân biệt năng lực thật
Người tự học về bản chất là những người có động lực và hứng thú mạnh đến mức sẵn sàng bước ra khỏi hệ thống có sẵn để tự học
Hãy hình dung tri thức là một vòng tròn trên bảng
https://matt.might.net/articles/phd-school-in-pictures/
Vòng tròn học được ở đại học nhỏ đến kinh ngạc và phần lớn là curriculum giống nhau
Ví dụ, chẳng có thời gian để dạy thuật toán dmc (thứ được dùng trong thuật toán nén mạnh nhất)
Thay vào đó, ai cũng lặp lại một curriculum mang tính phổ thông
Nhưng có những người đã đi ra ngoài vòng tròn đó
Chính họ là những lập trình viên giỏi nhất ngành—họ tự biết cả những thuật toán hiếm chỉ thấy trong paper nên thể hiện năng lực khác biệt
Người tự học cũng vậy; họ có thể có những khoảng trống kiến thức ở phần vòng tròn chung mà ai cũng học, nên thường bắt đầu từ động lực cá nhân và sự khiêm tốn
Nhưng vòng tròn tri thức mà họ có lại được bồi đắp một cách hữu cơ nhờ đam mê
Tôi nghĩ chính đam mê mới là tín hiệu mạnh nhất cho hiệu suất của một kỹ sư
Nói cách khác, “một người đã chứng minh được khả năng tự xác định mình cần học gì một cách độc lập, rồi thực sự học nó, sẽ xuất sắc trong những công việc cũng đòi hỏi đúng năng lực đó”
Torvalds vào thời điểm công bố phiên bản Linux đầu tiên năm 1991 thì thực ra gần như chưa được đào tạo CS một cách bài bản
Tôi cũng đồng cảm
Bậc cử nhân của chúng tôi cũng từng có bài tập tự viết một OS đa tiến trình bằng assembly 68K
Nhờ những trải nghiệm như vậy mà việc tiếp cận cấu trúc và nguyên lý vận hành của Linux kernel dễ hơn nhiều
Nếu còn không biết kernel là gì thì hẳn đã chẳng thể bắt đầu nổi
Gần đây tôi đang thử tự học một bài toán phân tích số mà mình chưa có kinh nghiệm (viết sparse LU solver)
Tài liệu hữu ích nhất không phải là tự triển khai ngay hay mổ xẻ code của solver có sẵn, mà là các lecture notes về chủ đề đó
Khi xem cả khóa học, tôi còn biết thêm những khái niệm liên quan mà trước đó mình không biết
Ở các lĩnh vực khác cũng vậy, tài liệu từ các khóa học đại học thường là loại chất lượng cao nhất
Nếu nói rằng đại học là không cần thiết thì khó giải thích vì sao tài liệu tốt nhất lại thường đến từ đại học
Cũng có lập luận rằng tự tay xây thứ gì đó là tốt nhất cho năng lực, nhưng ngay cả các project đại học cũng luôn đánh giá rất mạnh phần “xây thật”
Hoàn toàn đồng ý
Sách kỹ thuật chuyên sâu cũng rất tuyệt, nhưng giá trị nhận được hoàn toàn khác nhau tùy bạn tiếp cận với thái độ nào
Nếu chỉ học lý thuyết thuần túy mà không có ứng dụng thực tế nào thì sẽ nhanh chán và chóng quên
Nhưng nếu học lý thuyết gắn với nhu cầu thực tế hay công việc liên quan thì nó lập tức biến thành kiến thức thực chiến rất cần thiết
Một người đã tích lũy đủ trải nghiệm bằng tự học từ sớm rồi vào đại học mà vẫn giữ được đam mê thì có thể làm được những thứ cực lớn trong thời gian ngắn
Kết luận là, lý thuyết dĩ nhiên rất quan trọng
Chỉ là nếu bạn làm thử một thứ gì đó trước rồi mới học lý thuyết, bạn sẽ nhìn ra đâu mới là insight thật sự rõ ràng hơn nhiều