Tuesday, 14 April 2020

Kỹ năng phỏng vấn

Phỏng vấn là hai từ mang yếu tố quyết định, nhưng ít khi được nhắc đến. Nó thường bị xem như sự may mắn, hay do "giỏi", hay quan hệ tốt ... Bài viết này giải đáp các thắc mắc thầm kín khi đi phỏng vấn xin việc, đặc biệt dành cho những người kiếm công việc lập trình đầu tiên.

Phỏng vấn là gì?

Khi muốn đi làm, một lập trình viên sẽ liên hệ với một công ty để "xin việc" nhằm có một công việc, được trả lương tại công ty đó, ở đây ví dụ là PAMA corp.
PAMA corp sẽ cử một hoặc một nhóm người thực hiện việc "kiểm tra đầu vào". Sau quá trình kiểm tra, nếu phía PAMA corp đồng ý, phía lập trình viên đồng ý, sẽ ký một hợp đồng lao động, rồi lập trình viên đi làm, và được trả lương.


Nộp "đơn xin việc" thế nào?

Thông thường, tức không phải các trường hợp ngoại lệ như bị "săn" đón đi làm, hay có quan hệ được "giới thiệu" vào làm, thì:
  • lập trình viên sẽ lên các trang tuyển dụng/tìm việc (như PyJobs)/trang chủ của công ty cụ thể để tìm công việc mong muốn,
  • hoặc các "head hunter" chuyên đi săn ứng viên hay HR (human resource - nhân sự) của các công ty chủ động liên hệ, mời (or gạ) nộp hồ sơ phỏng vấn. Chú ý đây là một nghề hái ra tiền, nên đừng shock nếu được mời chào đon đả.

Quy trình phỏng vấn ra sao?

Thông thường sẽ có:

  • HH/HR gọi điện, thống nhất về Job description (JD - yêu cầu công việc), có thể có cả mức lương thưởng/chính sách. Nếu không có, hãy hỏi kỹ, cụ thể để khỏi mất thời gian. Bạn sẽ không muốn tốn thời gian 4 tuần đi qua 8 vòng phỏng vấn để biết mức thu nhập tối đa công ty sẽ trả cho vị trí đó là 1.500 USD, trong khi thu nhập hiện tại của bạn đang là 3000 USD. HR sẽ chốt quy trình phỏng vấn (mấy vòng), thời gian phỏng vấn vòng 1.
  • Vòng 0: các công ty có thể có bài test online, thường là code 2-3 bài thuật toán trong vòng 1 tiếng trên 1 trang code online như hackerank.com. Hoặc cũng có thể cho 1 bài "test" về nhà làm 1 sản phẩm gì đó rồi nộp sau 1 tuần.
  • Nếu có vòng 0, và nếu đạt yêu cầu, HR sẽ email/ gọi điện hẹn phỏng vấn vòng 1.
  • Vòng 1, có thể là cả vòng 2, hay thậm chí vòng N, là việc gặp và trả lời các câu hỏi do đại diện phía công ty đưa ra.
  • Nếu N vòng này thành công, sẽ tới vòng cuối cùng: "deal" lương. Dựa vào kết quả N vòng trước mà công ty quyết định có tuyển lập trinh viên không, và trả thù lao bao nhiêu.
  • Hai bên nếu đồng ý sẽ ký giấy tờ, và hẹn ngày đi làm. Với người đang đi làm ở công ty khác, sẽ thỏa thuận sau thời gian X ngày (thường là 30-45 ngày) sẽ đi làm do đó là thời gian cần thiết để xin nghỉ, chấm dứt hợp đồng với công ty cũ.

Đơn xin việc - Resume - CV

Thường là 1 file PDF (để đọc được trên mọi hệ điều hành), bằng tiếng Anh (để tỏ ra chuyên nghiệp), có link GitHub đến các project cá nhân thay vì đính kèm file RAR.
Xem mẫu CV học viên mới tốt nghiệp pymivn tại đây.
Tránh các mẫu CV có "thanh năng lượng" đánh giá 3 sao 5 sao. Really? bạn có chắc mình đạt 3 sao? so với ai? So với Guido van Rossum? Để 4 5 sao nhiều khi phản tác dụng khiến cho phía bên kia tìm cách mà dìm bạn xuống, khiêm tốn là một (đức) tính được yêu thích (trước) khi đi làm.

Các vấn đề bất cập của quy trình phỏng vấn

  • Không có chuẩn, không có khuôn mẫu, mỗi chỗ một kiểu. Có khi lý do không ai viết bài về chuyện phỏng vấn bởi nó chả bao giờ giống nhau cả.
  • Vậy nên những thứ viết trong bài này, hãy xem là tương đối, bởi tác giả không muốn thêm chữ "một cách tương đối" cuối mỗi câu, hay "đôi khi"/"hầu hết" ở mỗi đầu câu.

Những bí quyết phỏng vấn

  • HIỂU rằng ký hợp đồng lao động và đi làm cho một công ty, đó là một thỏa thuận kinh tế giữa 2 bên, thuận mua - vừa bán, như đi mua thịt mua rau. Phía công ty dùng tiền để mua - phía lập trình viên bán sức lao động. Không phải chuyện xin cho, ơn huệ, nợ nần gì ai cả. Không có công ty làm việc không vì lợi nhuận, nhận vào làm vì thương bạn như thương cây bàng non. Cũng không có chuyện "anh em như thể người nhà, bạn bè đồng nghiệp như là người thân". No, please. Bạn sẽ bị thay thế bất cứ lúc nào nếu không còn có lợi cho công ty.
  • Không để lộ mức lương hiện tại, bằng mọi giá. Vì lý do gì công ty PAMA corp cần biết mức lương cũ của bạn? lý do duy nhất là để ép nó xuống. Nếu bạn nói lương hiện tại 10 triệu, công ty hoàn toàn tự tin trả bạn 11 triệu. Nhưng nếu không biết, họ chỉ có thể trả thấp hơn 1 chút mức bạn yêu cầu. Ở Mỹ, có hẳn luật cấm các công ty hỏi lịch sử lương ứng viên. Ở Việt Nam không có luật này, nhưng nếu bị hỏi, hãy nói đã kỹ thỏa thuận không tiết lộ NDA của công ty cũ / hiện tại. HR sẽ hỏi vòng rằng "mức mong đợi của anh là bao nhiêu?", lúc đó cứ thoải mái nói mức bạn mong muốn, hay cộng 7-10 triệu vào mức hiện tại, không mấy ai nhảy việc để nhận thêm 1 triệu mỗi tháng cả.
  • Hỏi rõ mức thu nhập cụ thể, kể cả khoảng (range - từ X đến Y). Rất nhiều công ty để lương theo kiểu "thỏa thuận", hay "có thể thương lượng", hay HR cương quyết không nói mà đòi phải qua vòng phỏng vấn. Cũng nên chú ý rằng, nếu công ty nói là max 2000 USD hay upto 2000 USD, thường nghĩa là họ chỉ trả max 1 nghìn mốt.
  • Hỏi rõ lương làm Gross hay Net, search internet để hiểu rõ sự khác nhau này.
  • Nhận 80% lương thử việc là điều thường thấy, nhưng không phải bắt buộc. Ít khi thấy ở các vị trí câp cao vài nghìn USD.
  • Không phải "giỏi" kỹ thuật hơn thì lương cao hơn. Có chăng lý do lương A cao hơn B dù trình độ "ngang nhau" là bởi A giỏi thương lượng/đàm phán/thỏa thuận hơn B.
  • Các câu hỏi mang tính chất dìm hàng như bằng cấp (đặc biệt khi bạn không tốt nghiệp đại học ngành công nghệ thông tin) nhằm làm căn cứ để giảm lương của bạn. Chỉ một số các công ty nhà nước/ngân hàng mới thực sự đòi hỏi bằng cấp. Hay khi phải cân nhấc 2 ứng viên ngang ngửa, bằng mới được lôi ra.
  • Mức lương tối thiểu cho một lập trình viên Python biết làm web Flask hay dùng pandas hay viết crawler (hay tốt nghiệp Pymi.vn) là 8-10 triệu VND tại năm 2019. Sau 1 năm kinh nghiệm, con số này có thể gấp đôi, hoặc hơn.
  • Các yêu cầu ghi trong JD là yêu cầu lý tưởng, chứ không phải điều kiện tiên quyết. Như 2 năm kinh nghiệm hay bằng đại học, hay 10 dòng yêu cầu khác.
  • Trượt phỏng vấn 10 công ty: chúc mừng, bạn đã đánh 10 con quái và lên level 2. Thất bại là một phần tất yếu của thành công. Quan trọng là về biết rút kinh nghiệm, học những câu trả lời sai để lần sau còn làm đúng. Rồi bạn sẽ ngạc nhiên khi nhiều công ty/nhiều vòng phỏng vấn có "kho" câu hỏi trùng nhau.

Kỹ thuật

Bên trên toàn nói chuyện thoả thuận, tiền, thế còn các câu hỏi kỹ thuật thì sao? các thuật toán cao siêu thì thế nào???
Thực ra những vấn đề kỹ thuật không mang nhiều tính chất quyết định. Đúng như táo quân nói, những thứ khác quan trọng hơn:
  • quan hệ: rất nhiều người đi làm nhờ quan hệ, quan hệ ở đây không có nghĩa xấu như trong táo quân. Một lập trình viên giỏi chưa chắc có việc nhanh bằng một thanh niên biết code có nhiều môi quen biết, biết chỗ nào đang cần người. Nhiều mối ngon cũng đến do ông A chỉ biết thằng B làm Python, chả biết thằng nào khác cả. Lên mạng đi tuyển lại phải đau đầu với chuyện tuyển dụng/ cạnh tranh với hàng trăm công ty khác khi dev Python giờ hot như cồn và khẩu trang.
  • may mắn: ôn đúng bài, bị hỏi toàn cái biết, hay đẹp trai cũng là một dạng may mắn.

Những điều không phải là thất bại

  • Các công ty phỏng vấn Python nhưng lại toàn hỏi C, Java, PHP... Nếu là một lập trình viên Python / backend, thì khi phỏng vấn tôi cần trả lời các vấn đề về Python, hay SQL, hay thậm chí tool làm việc như git, docker. Nhưng chẳng có lý do gì lại hỏi C array so sánh với Python list, hay Java/C# design pattern cho Python cả. Khi gặp những công ty hỏi kiểu này, bạn không trả lời được thì đừng trách mình "dốt". Nếu có được hỏi lại, hãy hỏi họ giá trị gì mang lại khi họ hỏi những câu đó với 1 lập trình viên Python. Hoặc bạn sẽ biết phía bên kia không biết gì về Python (không hiếm với các công ty outsource), hoặc sẽ học được điều gì đó.
  • Trượt các câu hỏi thuật toán/IQ: các câu hỏi này rất đa dạng, trừ khi bạn dành đủ 6 tháng 2 năm cày luyện Cracking Coding Interview để thi vào Google, cày leetcode... thì đừng mong trả lời được mọi câu hỏi thuật toán lắt léo. Và nên nhớ, công ty bạn đang nộp vào, không phải là Google. Quy trình phỏng vấn dùng các câu hỏi thuật toán hiện được xem như một quy trình nhiều lỗ hổng, bởi nó không phải 1 cách tốt để dánh giá ứng viên.
  • Trượt các câu hỏi lý thuyết trong trường đại học: bên tuyển dụng thường hay hỏi kể tên các thuật toán sort bạn biết: bubble sort, quick sort, merge sort, heapsort, insert sort, hay cả sleep sort thế nhưng chưa chắc họ đã biết tên thuật toán sort trong Python (list.sort) tên là gì? (it's Tim sort) và khả năng cao khác, là họ không giải thích được khi nào bạn phải dùng các thuật toán trường học trên thay vì Tim sort có sẵn trong Python.

Fun fact

  • Có những công ty thực hiện đến hơn 10 cuộc phỏng vấn (phỏng vấn lần lượt từng người trong team), kéo dài vài tháng.
  • Có nhiều công ty "top", "hot", "đỉnh", "chỉ tuyển người giỏi nhất", nhưng trả mức thù lao mà chỗ nào cũng trả được.

Dặn dò

Nhớ làm thành thạo bài tập của pymi và đọc PYMI interview FAQs.

Kết luận

Phỏng vấn là một kỹ năng, giống như code, để giỏi, cần phải rèn luyện nhiều. Phỏng vấn là một cuộc đấu trí, thậm chí chẳng có câu hỏi kỹ thuật chi tiết nào được đưa ra mà ứng viên vẫn hoàn thành xuất sắc cuộc phỏng vấn.
Nếu lần đầu đi nộp CV, hãy rải thảm tất cả các công ty, hãy đi phỏng vấn thật nhiều, trượt thật nhiều, rút kinh nghiệm, rồi sau 10 lần phỏng vấn, kiểu gì chả trúng 1. Còn nếu đã đi làm, trừ khi ấm chỗ leader/trưởng phòng/giám đốc/CTO/ CBE thì mỗi mùa xuân hạ thu đông cũng nên đi phỏng vấn 1 lần để biết trình độ mình ở đâu, và đáng giá được bao nhiêu nào.

Theo https://pp.pymi.vn/article/phongvan/
trang blog của lớp học lập trình Python https://pymi.vn

No comments:

Post a comment