Lập trình viên không biết lập trình

Bài viết được dịch từ blog Coding Horror

Tôi cũng cảm thấy hơi khó tin, nhưng có rất nhiều nguồn thông tin vẫn gửi về thông qua Twitter và email cho tôi rằng: rất nhiều ứng viên, những người mà đang ứng tuyển để xin các công việc lập trình lại không biết lập trình. Chút nào cả. Bạn hãy đọc một đoạn trích trong email mà Mike Lin đã gửi cho tôi:

Rất nhiều người tự nhận mình là một lập trình viên, nhưng lại không thể viết được chương trình nào dù là nhỏ nhất!Rất nhiều người tự nhận mình là một lập trình viên, nhưng lại không thể viết được chương trình nào dù là nhỏ nhất!

Bài viết “Tại sao nhiều lập trình viên lại không biết… code” đã làm thay đổi cái cách mà tôi tiến hành các cuộc phỏng vấn. Trước đây tôi thường tiến hành bằng cách hẹn gặp mặt trực tiếp ứng viên. Nhưng thực tế đã cho thấy đó là cách tốn quá nhiều thời gian, như anh đã đề cập, phần lớn các ứng viên thì đơn giản không phải là người biết lập trình. Vì vậy tôi đã bắt đầu tiến hành phỏng vấn với những câu hỏi về kỹ thuật trước tiên. Lúc đầu thì tôi đưa ra các câu hỏi từ dễ đến khó. Nhưng sau đó tôi nhận ra rằng mình có thể nhận diện và loại ra những người không phù hợp một cách nhanh hơn nếu tôi tiến hành theo cách ngược lại – đó là tôi đưa ra các câu hỏi khó trước – miễn là các câu hỏi khó đó vẫn nằm trong phạm vi “nếu bạn không biết điều này thì bạn không thể làm việc ở đây”. Hầu hết các cuộc phỏng vấn của tôi thường vẫn mất khoảng 20 phút, bởi vì một số câu hỏi khó thường cần một khoảng thời gian để trả lời và đánh giá lại. Nhưng đó đã là một bước cải tiến rất lớn so với cách hẹn gặp mặt trước đây của tôi; và thậm chí công việc này có thể hoàn thành chỉ thông qua điện thoại.

Sau khi đọc xong bài viết của anh, tôi đã bắt đầu tiến hành thực hiện các buổi phỏng vấn lập trình thông qua điện thoại, và sử dụng việc gặp mặt trên web. Thời gian phỏng vấn của tôi bây giờ đã giảm xuống còn khoảng 15 phút cho mỗi ứng viên để nhận ra những người không biết code — và phần lớn ứng viên lại thuộc dạng này.

Tôi viết bài viết đó vào năm 2007, và tôi cảm thấy sốc, nhưng không hoàn toàn ngạc nhiên khi nghe thấy rằng 3 năm sau đó “phần lớn” của những người được gọi là lập trình viên, người mà ứng tuyển để phỏng vấn cho một công việc lập trình lại không có khả năng viết những chương trình thuộc dạng nhỏ nhất. Xin nói rõ là, những câu hỏi ở đây không khó — chúng tôi không phải đang nói về những buổi phỏng vấn phức tạp, kiểu như các buổi phỏng vấn yêu cầu giải quyết vấn đề theo phong cách của Google dành cho các nhà khoa học máy tính. Mà đây là những câu hỏi vô cùng đơn giản mà chúng tôi đã yêu cầu các ứng viên trả lời. Và họ không thể. Điều này thì cũng tương tự như việc bạn đang cố gắng tuyển dụng một tài xế xe tải và nhận ra rằng 90% trong số các ứng viên không thể nhận biết đâu là chân gas hoặc đâu là cần số vậy.

Tôi đồng ý rằng điều này có vẻ hơi khùng. Nhưng nó xảy ra như cơm bữa, và dường như đang trở thành một bệnh dịch trong vấn đề tuyển dụng trong ngành công nghiệp của chúng ta.

Bạn chỉ cần đưa ra một vài câu hỏi phỏng vấn có nội dung kỹ thuật đơn giản thì ngay lập tức đã loại bỏ được cả một “sư đoàn” những lập trình viên không-biết-lập-trình. Việc tiến hành phỏng vấn thông qua điện thoại là một lựa chọn khôn ngoan, như tôi đã đề cập ở trên. Nhưng việc phỏng vấn qua internet thì thậm chí còn tốt hơn, và được xem là nhiều tự nhiên hơn đối với công việc lập trình.

Tôi đã không được vui vẻ lắm với việc bắt đầu một cuộc hẹn tuyển dụng trên web và yêu cầu những gã đó chia sẻ màn hình của họ với tôi. Tôi đã tìm kiếm một số công cụ phù hợp hơn cho việc thực hiện các cuộc phỏng vấn lập trình theo phong cách “bút(viết)-và-giấy” thông qua web, nhưng tôi không thể tìm thấy bất kỳ công cụ nào. Vì vậy tôi đã phải làm một công việc mà bất kỳ một lập trình viên có lòng tự trọng nào cũng sẽ làm. Đó là tôi đã tự viết ra một công cụ cho mục đích đó.

Công cụ này đã mang lại giá trị thực sự! Tôi đã đặt lịch trình cho việc bắt đầu phỏng vấn kỹ thuật với mỗi ứng viên xin việc trong khoảng 15 phút. Nhưng buồn thay, tôi thường hoàn thành cuộc phỏng vấn trong chỉ từ 5 đến 10 phút. Tôi sẽ chỉ lên lịch cho một cuộc phỏng vấn gặp mặt trực tiếp cùng với họ nếu ít ra là họ có thể viết được một chương trình đơn giản có khoảng 10 dòng code. Mà điều đó cũng không thường xuyên xảy ra, nhưng ít ra thì tôi không phải lãng phí thời gian quá nhiều như trước đây nữa.

Mike cũng nói thêm rằng công cụ dùng để phỏng vấn coding theo kiểu made-in-tự-tui đó thì không có mục đích nhằm để thể hiện năng lực lập trình của anh. Đơn giản là anh ta thấy cần một công cụ, vì vậy anh ta đã viết ra nó — và sẵn lòng chia sẻ nó với chúng ta. Đó có thể là công cụ tốt cho nhiều người ở ngoài kia; thế còn những công cụ trực tuyến nào bạn thường sử dụng để phỏng vấn các lập trình viên?

Hiện nay đã là 3 năm sau bài viết của mình, và tôi vẫn đang tự hỏi: tại sao có những người mà thậm chí không thể viết nổi một chương trình đơn giản lại ấp ủ một ý tưởng là họ có thể kiếm được một công việc với tư cách là lập trình viên? Rõ ràng, một số người trong số họ đã “thành công” trong việc “lọt qua” được vòng phỏng vấn tuyển dụng. Điều này có nghĩa là tiêu chuẩn phỏng vấn dành cho các lập trình viên trong toàn bộ ngành công nghiệp của chúng ta thì vô cùng kém chất lượng, và đó là một điều đáng hổ thẹn. Nó đang làm giảm giá trị của tất cả lập trình viên đang làm công việc này để kiếm sống.

Ít ra thì những lập trình viên tồi cũng còn có thể đào tạo được; còn những lập trình viên loại không-biết-lập-trình này thì không chỉ chẳng còn hy vọng gì mà họ còn làm rẻ rúng cái nghề nghiệp của mọi người xung quanh họ. Họ phải bị loại trừ, bắt đầu bằng việc đưa ra những bài kiểm tra kỹ thuật lập trình đơn giản và đó nên là một phần của mọi cuộc phỏng vấn lập trình viên.

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

Advertisements

29 comments on “Lập trình viên không biết lập trình

  1. Lúc vừa ra trường mình đi phỏng vấn công ty đầu tiên là Big Data, người phỏng vấn hỏi mình những câu hỏi thật sự cơ bản về C/C++, những kiến thức mà mình đã học từ hồi năm 2, nhưng lúc đó, mình chẳng nhớ gì cả, cuối cùng mình fail công ty đó, đó là bài học đắt giá cho mình, trước khi nộp phỏng vấn phải ôn luyện thật kĩ những kiến thức về công việc mình sẽ apply vào, chúc mọi người thành công và cảm ơn bài viết rất nhiều 😀

  2. chào bạn!
    mình thật sự rất thích những bài viết của bạn.
    mình 25 tuổi là nữ mình muốn học lập trình ,vì lúc trước ko có đk học, phần lớn mình tự học ở nhà mình tự đọc sách về C , C# C++, java, php, asp.net,css,photoshop, html, asp.net, testing…mình có kiến thức về mặt sách vở còn viết code thật sự mình rất gà mờ ,mình có thể viết vài module,website,phần mềm theo hướng dẫn của sách nhưng mình tự thấy nó chẳng ra gì cả.
    Mình thật sự chưa định hướng được làm sao trở thành 1 ltv chuyên nghiệp, biết làm việc thực tế.
    Bây giờ mình có đk theo đuổi mơ ước rồi.Nhưng tự học như vầy mình loạn quá.
    Hôm trước mình còn nghe một anh trong nghành LT web nói con gái không nên làm LT, tính mình lại hướng nội, lớn tuổi sẽ ko bắt kịp công nghệ bây giờ.
    Bạn có nhiều kinh nghiệm có thể tư vấn cho mình vài hướng đi được ko?
    Cám ơn nhiều lắm!

    • Chào ilovePL,

      Theo như bạn nói thì mình thấy bạn học như vậy là rất nhiều ngôn ngữ lập trình và thể loại khác nhau. Nhược điểm chung của người mới học là hay ôm đồm quá nhiều công nghệ một lúc, và thường dẫn đến là loạn cả lên, rồi dẫn tới không thấy tiến bộ mà chán nản và bỏ cuộc. Bởi vậy theo mình nghĩ là để khỏi bị phân tán thì bạn nên đặt ra một mục tiêu cụ thể và lên kế hoạch chi tiết để thực hiện theo đó thì sẽ có kết quả tốt hơn.

      Về các bước để trở thành một lập trình viên giỏi thì bạn có thể tham khảo bài viết này:

      Từng bước để trở thành một lập trình viên giỏi

      Ngoài ra bạn cũng có thể tham khảo một số kinh nghiệm của một số lập trình viên giỏi tại Việt Nam như:

      Làm thế nào để trở thành một lập trình viên giỏi?(Lê Hoàng Dũng)
      8 Điều nên làm dành cho người học chuyên ngành IT(Đào Hải Nam)

      Thực ra “có lẽ” phần lớn những người làm nghề lập trình thường là người hướng nội (hoặc cũng có thể do làm nghề này phải ôm máy tính suốt ngày nên tính cách cũng chuyển sang hướng nội luôn? 🙂 ). Bạn hãy theo đuổi sở thích của mình, đừng nghe người khác nói này nói nọ mà nản lòng. Người ta nói rằng, nếu phải làm công việc bạn ko thích thì giống như phải chịu cực hình cả đời vậy, còn nếu được làm công việc bạn thích thì bạn sẽ cảm giác như là đang “chơi” chứ ko phải là “làm việc” nữa!

      Cuối cùng mình xin gửi tặng bạn bài thơ Đề Đền Sầm Nghi Đống của nữ sĩ Hồ Xuân Hương nhé: 😉

      Ghé mắt trông ngang thấy bảng treo,
      Kìa đền Thái Thú đứng cheo leo.
      Ví đây đổi phận làm trai được,
      Thì sự anh hùng há bấy nhiêu.

    • Có vẻ như bạn đang ôm đồm quá nhiều công nghệ trong khi bạn chưa có được kiến thức bài bản từ trường lớp. Bạn phải xác định mình thích ngôn ngữ nào, có thể nhận biết bằng cách bạn thường hay làm việc với nó nhiều hơn so với các ngôn ngữ khác. Khi xác định được rồi thì tập trung chuyên sâu vào nó, và không có gì học tốt hơn bằng cách bắt tay vào làm một project thực tế. Có thể ban đầu có…cùi thật đấy, nhưng không sao, theo thời gian bạn sẽ tối ưu và cải tiến nó, theo đó trình độ và khả năng tư duy của bạn cũng sẽ tăng theo nhanh chóng mà bạn có thể còn chưa kịp nhận ra. Hãy bắt tay vào code chứ đừng xem sách hoặc video hướng dẫn rồi gật đầu, bạn sẽ chẳng nhớ gì khi gập sách lại và tắt video đâu, tin mình đi. Nếu đây thật sự là công việc bạn đam mê thì đừng từ bỏ. Con đường ngắn hơn là bạn có thể theo học một trung tâm nào đó, sẽ giúp bạn có kiến thức nền tảng được tốt hơn.

  3. Mình tự thú mình cũng là cái loại không ra gì. Nhưng mình hoàn toàn tự học, không trường, không lớp nên thực sự hoan mang và không biết phải bắt đầu từ đâu cả. Bất cứ lúc nào mình đặt câu hỏi ‘Where should I start/begin to become a programmer?’ đều bị bỏ lơ. Thực sự mình rất là bối rối…

    • Mình cũng là 1 người tự học lập trình. Mình xác định mình học lập trình để viết game. và mình thấy rằng thiết bị động dc ưa chuộng vì vậy mình bắt tay vào việc học java để viết game cho android. Mới học thật sự khó khăn khi mà mình tập code giống cái ví dụ của người ta. 1 thời gian mình ko làm như vậy nữa mà mình xem qua ví dụ hiểu nó làm gì và tự nghĩ ra yêu cầu để viết ra 1 cái gì đó. ngay khi mình học làm game cũng vậy. mình cũng bắt tay vào việc làm luôn những cái ý tưởng game nhỏ nhỏ. từ sách (toàn tiếng anh mà mình gà tiếng anh nữa chứ) mình biết dc hàm đó làm gì. áp dụng vô game của mình 1 ví dụ khác hoàn toàn so với sách. từ đó mình hiểu hơn về những gì mình làm. cho tới nay mình học Unity3D với C# nhưng mình lại bị vướng vào phần vẽ. vẽ ko dc. mình lại mò mẫn học vẽ và thấy rằng nó ngốn quá nhiều thơi gian của mình. có 1 it tiến bộ trong vẽ nhưng điều mình muốn là lập trình. mình chỉ cố vẽ nhân vật chính và lấy những thứ khác trên mạng. và mình tin răng trong 1 năm nữa mình sẽ là lập trình game chuyên nghiệp. chúc bạn có định hướng rõ ràng.

  4. Bài viết này theo phong cách nước ngoài, Lời văn có vẽ hơi mạnh bạo và khin người. Mình nghỉ rằng chẳng có ai là rẻ rúng cả.
    Để trở thành lập trình viên không có gì cao siêu cả. Quan trọng là lòng đam mê.

    Nếu bất cứ ai đã đi phỏng vấn chắc hẳn bản thân mỗi người cũng trang bị cho mình những kiến thức nhất định. Chỉ có điều kinh nghiệm của họ không đáp ứng được nhu cầu của doanh nghiệp hiện tại do tính đặc thù riêng của công việc.

    Lập trình viên ở môi trường global sẽ được phân chia thành nhiều cấp:
    – Junior (Assistant Software Engineer) : Dành cho các bạn mới ra trường sẽ được training thêm trong quá trình làm việc.
    – Software Engineer: Dành cho các bạn đã có từ 2-3 ba năm kinh nghiệm phát triển dự án,
    – Senior Software Engineer: Dành cho các bạn đã làm từ 4-6 năm có khả năng leader. Và nắm vững về một công nghệ nào đó.
    – Principal Software Engineer: Dành cho các anh chị có từ 6-8 năm kinh nghiệm. Có khả năng làm Team Leader / Project Manager / Technical Architecture.
    – Technical Architecture: Đây là những kỉ sữ lão làng trong nghề. ở vị trí này không còn coding đơn thuần hoạt leader 1 team. Mà bạn phải nắm vững về kiến thức hệ thống, thiết kế framework, bảo mật hệ thống… nói chung là cung cấp solution cho một dự án vừa và khủng.
    – Senior Technical Architect: Đây là những Key Member của công ty. Người phải đứng muỗi chụi sào cho những giải pháp hốc búa. Mà tầng tầng lớp lớp phải bó tay. Nếu vị trí này mà botay.com thì đập đi làm lại :D.

    Ngoài ra trong quá trình phát triển các bạn có thể tẻ nhát sang:
    – Software Quality Control (QC): Kiểm thử chất lượng phần mềm. Đây là kẻ thù của ^^! Các nhóm trên.
    – Senior QC
    – Principal QC

    Ngoài nhóm này: Lại có một nhóm khác

    – Business Analyst: Người sẽ viết requirement cho developer coding, chụi trách nhiệm nhận yêu cầu từ khách hàng. Tư vấn giải pháp, Vẽ wireframe cho đám Developer… Vị trí này dễ bị Software E và QC ^^! Chém nếu làm bậy.

    – Database Administrator: DBA – Người sẽ quản lý hệ thống database trong quá trình các BÁC Developer vọc phá. Để đảm bảo tụi nó không insert bậy bạ và database khách hàng khi bàn giao sản phẩm. Vị trí này thường chỉ xuất hiện trong các dự án lớn. Có nhiều môi trường và server khác nhau phục vụ cho từng giai đoạn triển khai của phần mềm. Ví dụ: Server Dev, Server Test, Server Live (Demo sản phẩm cho client).

    – Project Manager: Anh chị này sẽ chụi trách nhiệm quản lý dự án, về Scope Of Work, Timeline, Hoặc quản thời gian làm của các thành viên khác. Và báo cáo Timesheet dành cho team được khách hàng thuê trả tiền trực tiếp. Họ có nhiệm vụ đảm bảo tiến độ và mọi việc diễn ra trong quá trình phát dự án diễn ra một cách trơn truôn nhất. Cuối cùng là deliver sản phầm thành công đến khách hàng.

    Hơn thế nữa còn có nhiều vai trò đặc thù của dự án: Engineer Manager… tuỳ theo quy mô mà sẽ có nhiều boss involved vào.

    Vậy bài viết ở đây: Đề cập đề Lập Trình Viên là ai. Trong số họ ai sẽ là người rẻ rúng. Mình muốn chia sẽ điều này để các bạn sinh viên khi vào nghề lập trinh có cái nhìn tổng quan hơn. Những role này chỉ xuất hiện đầy đủ trong những công ty Global. Còn ở Việt Nam thì Senior thì đã có thể lên máu mặt rùi ^^!. Chúc các bạn thành công.

    Mình cũng đã từng làm Developer hơn 5 năm nhưng nay đã chuyển sang webmaster và digital marketer.

    • George, cảm ơn bạn về phần bình luận có nội dung rất bổ ích của bạn. Nó có chất lượng như một bài blog nói về các vị trí công việc trong ngành PTPM. Hy vọng rằng bạn sẽ bình luận và chia sẻ nhiều hơn trên blog Vinacode trong tương lai. 🙂

  5. Đến bây giờ 2 năm đã trôi qua, mình vẫn chưa hiểu tại sao có 2 đứa học cùng lớp sau tốt nghiệp vài tháng chúng làm trong cty lập tình mà nhiều người mơ ước. Mình nghĩ là chúng có người quen hoặc quá may thôi.
    Ngoài 2 đứa ở trên thì trong lớp mình chỉ có 2 đứa con theo nghề code, còn lại là trái nghề.
    Mình không căn cứ vào kết quả học tập trên lớp đâu vì điểm, bài tập lớn, đồ án “chạy” mà, sau mấy năm làm sv đứa nào có thể lập trình được, đứa nào không chúng ta có thể biết. Mình cũng tiếc cho một số đứa có tư chất mà chúng không theo nghề code.

      • @Vinacode: chạy đồ án có 2 trường hợp:
        – 1 là làm theo nhóm, nhưng 1 đứa ôm sô hết cứu giúp mấy đứa còn lại qua môn.
        – 2 là cả nhóm hoặc cá nhân không biết làm, đi thuê người ngoài làm trả tiền. Làm xong bên đó làm báo cáo giúp luôn và hướng dẫn để khi lên báo cáo biết đường chém gió.

    • Đôi khi là do cơ hội đến nhưng mình không biết nắm bắt đấy, chẳng hạn trường hợp phổ biến nhất là: Ngại nộp CV, đi phỏng vấn vì nghĩ năng lực mình không đủ để làm trong công ty này đâu. Ngoài ra kỹ năng trả lời phỏng vấn cũng là một yếu tố quyết định, có thể 2 đứa bạn của bạn giỏi kỹ năng mềm.

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s