paint-brush
Lập trình viên thông minhtừ tác giả@themachine94
11,269 lượt đọc
11,269 lượt đọc

Lập trình viên thông minh

từ tác giả theMachine9410m2024/10/26
Read on Terminal Reader

dài quá đọc không nổi

Câu chuyện về một sinh viên năm cuối có thành tích xuất sắc đã gia nhập nhóm nhỏ của chúng tôi.
featured image - Lập trình viên thông minh
theMachine94 HackerNoon profile picture

Tôi đã sống và làm việc tại một thành phố nhỏ ở phía tây bắc nước Đức trước khi đại dịch COVID xảy ra. Tôi đã làm việc tại một công ty khởi nghiệp nhỏ. Tôi là một trong 7 kỹ sư tại công ty. Mặc dù chúng tôi là một nhóm rất nhỏ, nhưng các đồng nghiệp của tôi là một số người thông minh nhất mà tôi từng làm việc cùng. Chúng tôi đã xây dựng một ứng dụng máy tính để bàn gốc được các Kỹ sư cơ khí sử dụng để thiết kế các bộ phận. Những bộ phận này là loại được sử dụng trong ô tô và máy bay, v.v. Đó là một chương trình mô hình hóa 3D (CAD) nên tất nhiên, bất cứ khi nào chúng tôi thuê một kỹ sư mới hoặc có một thực tập sinh, chúng tôi đều thích những người giỏi toán, hình học, viết mã hiệu suất cao cấp thấp, v.v. Khi chúng tôi phỏng vấn các ứng viên, tôi được giao trách nhiệm thực hiện cuộc phỏng vấn kỹ thuật. Tôi đã chuẩn bị một số nhiệm vụ lập trình phản ánh các kỹ năng mà chúng tôi muốn ở một ứng viên. Tôi sẽ yêu cầu ứng viên giải quyết vấn đề và nói về quá trình suy nghĩ của họ. Ngay cả khi họ không hoàn thành giải pháp trong 45 phút, thì đó cũng là một cách hữu ích để tìm hiểu những gì họ biết và cách họ suy nghĩ. Các thành viên khác trong nhóm của tôi đã phỏng vấn các ứng viên theo các tiêu chí khác như tính cách, v.v. Điều này thực sự hiệu quả và chúng tôi đã thuê được một số kỹ sư thực sự tài năng và có động lực. Tất cả chúng tôi đều khá giỏi trong công việc của mình và chúng tôi tôn trọng lẫn nhau.


Vào đầu năm 2020, chúng tôi có một sinh viên năm cuối từ trường đại học địa phương liên hệ với chúng tôi để xin thực tập. Tôi đã nghỉ phép rất cần thiết và đến Berlin trong vài tuần. Vì vậy, tôi đã không có mặt để thực hiện cuộc phỏng vấn kỹ thuật. Người quản lý của tôi và những người còn lại trong nhóm đã rất ấn tượng với sinh viên trong cuộc phỏng vấn và sơ yếu lý lịch của anh ấy rất đặc biệt. Chúng tôi chưa bao giờ có thực tập sinh trước đây. Người quản lý của tôi nghĩ rằng một cuộc phỏng vấn kỹ thuật có thể không cần thiết đối với một thực tập sinh. Vì vậy, anh ấy quyết định để anh ấy bắt đầu làm việc với chúng tôi mà không cần phỏng vấn kỹ thuật. Tôi trở về sau kỳ nghỉ và được thông báo về thực tập sinh mới sẽ bắt đầu vào tuần sau. Tôi phải giám sát công việc của thực tập sinh này. Về cơ bản, hãy đảm bảo rằng anh ấy hiểu những gì cần phải làm, trả lời mọi câu hỏi, gỡ bỏ rào cản cho anh ấy bằng mọi cách có thể. Chúng tôi đã nêu ra một loạt các vấn đề mà chúng tôi muốn thực tập sinh giải quyết. Từ bây giờ, tôi sẽ gọi thực tập sinh đó là Stefan. Vào thời điểm đó, có rất nhiều cuộc nói chuyện về vi-rút Corona đang lây lan ở Đức. Nó xuất hiện khắp mọi nơi trên báo chí. Chúng tôi là một nhóm nhỏ và chúng tôi đã quen với việc làm việc trong không gian chật hẹp, hỏi nhau những câu hỏi, động não trên bảng trắng, v.v. Nhưng than ôi, đúng một ngày trước khi Stefan tham gia cùng chúng tôi, nước Đức đã bị phong tỏa hoàn toàn. Tất cả chúng tôi bắt đầu làm việc từ xa tại nhà. Chúng tôi đã vật lộn với công việc từ xa trong vài tuần đầu tiên. Là người giám sát dự án của Stefan, tôi đã nói với anh ấy rằng anh ấy có thể liên hệ với tôi bất cứ điều gì anh ấy cần để bắt đầu. Trong trường hợp tôi đi vắng hoặc bận rộn, các thành viên khác trong nhóm rất vui lòng tham gia và giúp đỡ Stefan.


Cơ sở mã của chúng tôi là sự kết hợp giữa C# và C++. Tất cả người dùng của chúng tôi đều dùng Windows, vì vậy chúng tôi đã viết giao diện người dùng và bất kỳ thứ gì khác không quan trọng về hiệu suất bằng C#. Tất cả các thuật toán số, kết xuất 3D và bất kỳ thứ gì quan trọng về hiệu suất đều được viết bằng C++. Hầu hết các thành viên trong nhóm của chúng tôi đều thành thạo cả hai ngôn ngữ, một số chuyên về một trong hai ngôn ngữ. Stefan tuyên bố rằng anh ấy rất thành thạo cả C# và C++. Vào ngày đầu tiên, tôi đã trực cùng Stefan trong nhiều giờ để giải thích về cơ sở mã của chúng tôi cho anh ấy, thiết lập mọi thứ trên máy cục bộ của anh ấy để anh ấy có thể bắt đầu. Stefan hơi lo lắng và nói rằng đã lâu rồi anh ấy không viết C++ hoặc sử dụng Windows. Stefan hàng ngày lái máy Linux. Anh ấy có vẻ gặp khó khăn khi viết C++. Tôi nghĩ anh ấy hơi bối rối khi phải làm việc trong một môi trường mới, cơ sở mã mới và quyết định giúp anh ấy cho đến khi anh ấy bắt đầu. Vì vậy, chúng tôi đã lập trình theo cặp trong vài giờ tiếp theo. Anh ấy cần tôi giúp anh ấy viết mã từng dòng một. Anh ấy liên tục mắc lỗi ngớ ngẩn trong mã của mình và cần tôi sửa lỗi và chỉ cho anh ấy cách làm đúng. Tôi nghĩ điều này hơi lạ nhưng vẫn quyết định cho anh ấy một cơ hội. Tôi hy vọng rằng đến cuối cuộc gọi, Stefan đã biết đủ để tiếp tục tự mình làm việc.


Tôi rất vui khi ngày hôm sau tôi không nghe thấy tin tức gì từ Stefan. Tôi nhắn tin cho anh ấy và anh ấy nói rằng anh ấy đang tiến triển và không cần tôi giúp gì cả. Tôi rất vui khi nghe điều đó. Tôi có thể tập trung vào công việc của mình. Nhưng ngày hôm sau, Stefan lại liên lạc với tôi để nhờ giúp đỡ. Để đóng góp cho ứng dụng của chúng tôi, Stefan phải viết cả C# và C++. Anh ấy phải viết phần số của thuật toán bằng C++, kết nối nó với giao diện và làm một số việc khác bằng C#. Khi Stefan liên lạc với tôi vào ngày thứ 3, anh ấy vẫn chưa tiến triển gì với mã C++ của mình. Hầu hết vẫn là phần chúng tôi dừng lại vào cuối ngày thứ 1. Nhưng anh ấy đã tiến triển rất nhiều với mã C# của mình. Anh ấy đã giải quyết nhiệm vụ từ cả hai phía cùng một lúc. Stefan tự hào chỉ cho tôi những thứ anh ấy đã viết bằng C# vào ngày thứ 2 mà không cần tôi giúp. Tôi đọc qua mã và vô cùng kinh ngạc. Mã thực sự có chất lượng cao. Nó súc tích, thanh lịch và hiệu quả. Tôi nghĩ Stefan thực sự rất tài năng. Có lẽ anh ấy thực sự hơi kém về cú pháp và chi tiết ngôn ngữ C++, nhưng mã C# của anh ấy cho thấy anh ấy nhìn chung là một lập trình viên giỏi. Tôi nghĩ đây là một dấu hiệu tốt và anh ấy có thể sẽ cải thiện mã C++ của mình rất nhanh. Điều này khuyến khích tôi giúp anh ấy với mã C++. Tôi một lần nữa dành nhiều giờ vào ngày thứ 3 để ghép đôi với Stefan, giúp anh ấy với mã C++. Chu kỳ này lặp lại thêm một lần nữa. Stefan tự mình viết mã C# vào ngày thứ 4 và quay lại nhờ tôi giúp đỡ về mã C++ vào ngày thứ 5. Lúc này, tôi bắt đầu nghi ngờ. Mức độ anh ấy cần trợ giúp với mã C++ của mình không nhất quán với mã C# chất lượng cao mà anh ấy đã viết. Trong C++, anh ấy dường như gặp khó khăn với các khái niệm cơ bản, cách máy tính hoạt động, cách bộ nhớ hoạt động, v.v. Rõ ràng là C# là ngôn ngữ thu gom rác và bạn không cần biết quản lý bộ nhớ, nhưng có điều gì đó không ổn và tôi không thể xác định được.


Cả một tuần đã trôi qua. Là một nhóm đã quen làm việc tại văn phòng, tất cả chúng tôi đều ghét làm việc từ xa. Vào thời điểm này trong thời gian phong tỏa, chúng tôi được phép tụ tập thành nhóm gồm 7 người trở xuống. Một đồng nghiệp, chúng ta hãy gọi anh ấy là David, đã mời tôi và một vài đồng nghiệp khác đến nhà anh ấy để tổ chức tiệc nướng vào cuối tuần. Anh ấy sống không quá xa tôi và chúng tôi đã từng làm những việc như thế này trước đây. Thời tiết đẹp, chúng tôi đang tụ tập ở sân sau nhà David với vợ và cô con gái 3 tuổi của anh ấy. Chúng tôi nướng và ăn thịt và rau, uống một vài cốc bia và tâm trạng rất thoải mái. Cô con gái 3 tuổi của David đang phục vụ chúng tôi đất trong những chiếc cốc nhựa nhỏ giả vờ đó là kem. Không cần phải nói, tôi đã không bị lừa. David đưa ra chủ đề về Stefan và cuộc trò chuyện diễn ra như thế này:


David: Mọi chuyện với Stefan thế nào rồi? Anh ấy đã liên lạc với tôi để nhờ giúp đỡ vài lần trong tuần qua.


Tôi: Ồ, vâng, tôi cũng giúp anh ấy khá nhiều. Anh ấy mới bắt đầu nên tôi không ngại giúp anh ấy. Bạn nghĩ gì về anh ấy?


David: Vâng. Tôi khá ấn tượng với công việc của anh ấy. Anh ấy viết code chất lượng cao và có vẻ biết mình đang làm gì với C++, nhưng lại gặp khó khăn khi viết code C# tốt. Tôi đã giúp anh ấy viết code C#.


Tôi hỏi David: "Khoan đã, ý anh là ngược lại à? Vì tôi nghĩ anh ấy giỏi C# nhưng C++ thì tệ." Ngay khi tôi nói xong câu, cả hai chúng tôi đều hiểu chuyện gì đang xảy ra. Tôi đã đút cho Stefan code C++, và anh ấy cho David xem như code của anh ấy. Và cách ngày, David cũng đút cho Stefan code C#, và anh ấy cho tôi xem như code của anh ấy. Tôi ấn tượng với chất lượng code C# của David, và David ấn tượng với code C++ của tôi. Một mặt, David và tôi có khoảnh khắc tuyệt đẹp khi chúng tôi ngưỡng mộ code của nhau. Nhưng khoảnh khắc đó bị lu mờ bởi thực tế là cả hai chúng tôi đều bị Stefan lừa. Đây là câu chuyện được lấy thẳng từ một câu chuyện, nhưng lại xảy ra trong đời thực. Giống như câu chuyện về một anh chàng không biết chơi cờ vua, nhưng lại hòa được hai đại kiện tướng bằng cách đấu với nhau. Stefan đã làm được điều này trong đời thực. Stefan chẳng biết gì cả. Chúng tôi ghét bản thân mình vì mất một tuần mới nhận ra điều đó. Công bằng mà nói, nếu chúng tôi ở văn phòng thì trò này sẽ không hiệu quả. Chúng tôi đã mắc bẫy vì chúng tôi giao tiếp rất tệ khi làm việc tại nhà.


Khi chúng tôi quay lại làm việc vào thứ Hai tuần sau, tôi bảo Stefan đừng làm phiền David và chỉ nhờ tôi giúp thôi. Chẳng mấy chốc tôi thấy Stefan chẳng biết gì nhiều về lập trình, toán học hay hình học. Rõ ràng là sơ yếu lý lịch của anh ta toàn là dối trá. Anh ta chỉ là một người nói năng rất lưu loát, và có tài ăn nói như thể biết rất nhiều. Kỹ năng đó đã giúp anh ta có được công việc và lừa chúng tôi cả tuần. Càng làm việc với Stefan, tôi càng xem lại mã của anh ta, anh ta càng tỏ ra vô năng. Cuối cùng tôi cũng thấy Stefan thực sự là ai, kỹ năng lập trình thực sự của anh ta. Tôi không chắc vô năng có phải là từ đúng không. Stefan đã viết mã tệ, nhưng tệ theo một cách kỳ lạ. Khi tôi hỏi anh ta về điều đó, anh ta đưa ra những câu trả lời kỳ lạ. Đây là một ví dụ thực sự đã xảy ra. Tôi đã từng nói với Stefan đại loại như thế này: "… Vậy là anh muốn lấy giá trị số nguyên này, và nếu giá trị đó nằm giữa giới hạn dưới và giới hạn trên, anh nên gọi hàm khác này… Anh hiểu chứ?". Stefan đảm bảo với tôi rằng anh ta hiểu những gì cần phải làm. Khi tôi xem PR của anh ấy vào ngày hôm sau, tôi thấy nội dung như thế này:


 int value; // Assigned from somewhere. for (int i = lower_bound; i <= upper_bound; ++i) { if (value == i) { do_stuff(...); } }


Tôi đã bị choáng ngợp. Đây không chỉ là code tệ, mà còn là thứ gì đó khác. Tôi nhớ hồi còn trẻ và tệ trong việc code, nhưng code tệ của tôi không bao giờ như thế này. Đây là một chiều hướng kỳ lạ khác. Ngay cả khi là một lập trình viên mới vào nghề, tôi cũng không bao giờ nghĩ đến việc viết code như thế này. Lựa chọn lặp qua tất cả các số nguyên giữa các giới hạn đã đủ kỳ lạ, nhưng điều thực sự khiến tôi kinh ngạc là ngay cả khi anh ấy tìm thấy một kết quả khớp và gọi hàm, anh ấy không bao giờ thoát khỏi vòng lặp. Anh ấy tiếp tục kiểm tra các giá trị còn lại. Làm thế nào? Tôi hỏi Stefan tại sao anh ấy không đơn giản là làm:


 if (value <= upper_bound && value >= lower_bound) { do_stuff(...); }


Khi nhận được đề xuất của tôi về việc sử dụng bất đẳng thức đơn giản thay vì so sánh với mọi số nguyên trong phạm vi có thể dài hàng chục hoặc thậm chí hàng trăm nghìn, Stefan đã khen ngợi tôi vì đã đưa ra một ý tưởng hay như vậy và thúc đẩy thay đổi mới cho PR. Mỗi khi Stefan gặp khó khăn khi làm một việc gì đó, chúng tôi sẽ giao cho anh ấy một việc dễ hơn. Thật ngạc nhiên là anh ấy cũng thất bại ở việc đó. Đó là một kỳ thực tập ngắn, vì vậy chúng tôi không bận tâm quá nhiều đến Stefan. Sau một thời gian, anh ấy đã làm các nhiệm vụ không phải lập trình, quản lý mọi thứ trong bảng tính và các nhiệm vụ tùy ý khác cần phải làm. Các dự án ban đầu mà anh ấy đặt ra để làm việc đã chứng tỏ là vượt xa khả năng của anh ấy. Bằng cách nào đó, Stefan đã hoàn thành kỳ thực tập bán thời gian có lương kéo dài 3 tháng của mình. Anh ấy muốn tiếp tục làm việc cho chúng tôi trong suốt mùa hè. Anh ấy đã giới thiệu một dự án nghiên cứu mới sẽ hữu ích cho công ty của chúng tôi. Khi người quản lý hỏi tôi có muốn tiếp tục làm việc với Stefan thêm 3 tháng nữa không, tôi đã nói KHÔNG. Tôi nhắc nhở người quản lý của mình về công việc tệ hại của anh ấy trong ba tháng qua. Nhưng người quản lý của tôi là người lạc quan. Ông ấy có niềm tin vào con người. Ông ấy yêu cầu tôi nghĩ về bản thân mình khi tôi bằng tuổi Stefan, đang học đại học và lần đầu tiên học mọi thứ.


Quản lý của tôi yêu cầu tôi suy nghĩ kỹ và cân nhắc cho Stefan thêm một cơ hội. Thành thật mà nói, khi tôi bằng tuổi Stefan, tôi đã viết trò chơi 2D bằng JavaScript bằng cách sử dụng HTML5 canvas mới (vào thời điểm đó). Stefan thực sự bất tài, ngay cả sau khi điều chỉnh theo độ tuổi và kinh nghiệm của mình. Nhưng tệ hơn nhiều so với sự bất tài của anh ấy là sự không trung thực của anh ấy. Trong mọi trường hợp, tôi không muốn đưa ra quyết định này một cách nhẹ nhàng. Một mặt, có thể Stefan có khả năng học hỏi, nhưng mặt khác, anh ấy không trung thực. Tôi đã đọc qua đề xuất mà anh ấy viết cho dự án nghiên cứu mới. Ý tưởng này rất mới lạ và nếu hiệu quả, sẽ rất hữu ích cho công ty của chúng tôi. Nó thực sự ấn tượng. Nhưng sau đó tôi có một khoảnh khắc sáng suốt khi sự hoài nghi của tôi đã chiếm lấy sự lạc quan mà quản lý của tôi cố gắng truyền cho tôi. Tôi trở nên ám ảnh với một từ trong đề xuất nghiên cứu của Stefan: '2-đa tạp'.


Đã từng làm việc với anh ta, tôi biết Stefan thực sự vô năng đến mức nào, và không đời nào anh ta biết 2-manifold có nghĩa là gì. Tôi đã sao chép và dán đề xuất nghiên cứu của Stefan vào một trình kiểm tra đạo văn trực tuyến. Đó là nhiều năm trước và tôi đã quên mất đó là trình nào. Tôi chỉ tìm kiếm trên Google và sử dụng một trong những kết quả hàng đầu. Trình kiểm tra đạo văn đã tìm thấy 97% sự trùng khớp với một bài nghiên cứu và cung cấp liên kết đến bản gốc. Stefan đã sao chép toàn bộ. Sáng hôm sau, tôi đã nói chuyện với Stefan về đề xuất nghiên cứu của anh ta. Ngay khi anh ta bắt đầu nói, rõ ràng là anh ta không hiểu mình đang nói gì và tất cả chỉ là một mớ từ ngữ lộn xộn. Anh ta lại trở thành một kẻ lừa đảo. Tôi đã cho người quản lý của mình biết và điều này cuối cùng đã phá vỡ niềm tin của anh ta vào Stefan. Stefan đã không làm việc cho chúng tôi nữa.


Stefan chỉ giỏi mỗi việc tự bán mình, và tỏ ra mình biết mình đang nói gì. Tôi hiểu rằng có những nghề mà những kỹ năng này có thể giúp bạn tiến xa, ví dụ như Bán hàng. Nhưng tôi nghĩ thật kỳ lạ khi một người cố gắng nói dối để kiếm sống trong sự nghiệp kỹ thuật như phát triển phần mềm.