Những thắc mắc về nghề lập trình kinh điển thường gặp của lập trình viên

Không chỉ là “thùng rác” để các bạn lập trình viên “xả” những cảm xúc và ức chế của mình, Lập trình viên confession còn là một cầu nối giúp các bạn coder giải đáp những thắc mắc hóc búa xoay quanh công việc và học tập. Dưới đây là những thắc mắc về nghề lập trình kinh điển thường gặp của cộng đồng.

  Vì miếng ăn mà phá cả nồi cơm – Thực tại đáng lo của nghề lập trình

#C67

Mình là du học sinh vừa tốt nghiệp hè vừa rồi, vừa về nước đi làm mấy tháng lương 8 củ/tháng (mình đã có công ty ở nước ngoài tuyển cơ mà hè sang năm mới xuất ngoại đi làm). Có thể nói là mình về VN làm lấy kn vì ngồi không chả được gì. Qua việc tiếp xúc thì mình thấy mấy devs mình tiếp xúc họ rất thông thạo 1 ngôn ngữ lập trình nhưng họ thiếu những cái cơ bản như: thuật toán, cơ sở dữ liệu (chuẩn hóa,…). Mình không công nhận mình giỏi giang gì nhưng trong quá trình học mình vẫn tập trung các môn cơ sở. Ngày trước mình có phỏng vấn qua các cty bên nước ngoài, trc khi pv mình có chuẩn bị kĩ kiến thức về iava (công ty tuyển java), và ngạc nhiên là 80 – 90% họ hỏi thuật toán, chuẩn hóa csdl,… còn về ngôn ngữ lt chỉ có 10% còn lại là hỏi về kn làm việc. Mình chỉ muốn khuyên các bạn đang còn học về ngành này là hãy thông thạo các kiến thức cơ sở, ngôn ngữ lt nó cũng như ngôn ngữ bt ta nói hàng ngày. Bạn có thể giỏi tiếng Anh nhưng toán chưa chắc đã giỏi, ngôn ngữ chỉ là cái cầu để ta truyền đạt và tiếp thu. Khi bạn đã chắc chắn về kiến thức cơ sở, bạn có thể tự tin chọn ngôn ngữ bạn thích và apply cty bạn muốn.

#C116

⚠️ Bài ngắn lắm, cố gắng đọc hết nhé !

Disclaimer: Tôi cũng từng là du học sinh, cũng làm về java, và cũng từng trúng tuyển vào vị trí lập trình viên hệ thống thông tin tại một tập đoàn lớn có giá trị vốn hóa hơn 30 tỷ euro (xin phép cho tôi nổ con số này vì nó khè được khối người) nên có đôi điều muốn chia sẻ thêm về những điều bạn tác giả #C67 đã viết.

KĨ THUẬT KHÔNG PHẢI TẤT CẢ

Đầu tiên tôi muốn nói thêm về vấn đề tuyển dụng. Trong các công ty, đặc biệt là các công ty lớn, quy trình tuyển dụng thường rất lằng nhằng và phức tạp. Thông thường các bạn sẽ phải trải qua vòng hồ sơ (CV và thư), vòng này được thực hiện [chủ yếu] bởi bộ phận nhân sự và đôi khi có tham khảo ý kiến của bộ phận chuyên môn nơi ứng viên trúng tuyển sẽ làm việc. Qua được vòng này bạn sẽ bắt đầu đến với các bài test và các cuộc phỏng vấn.

Đầu tiên là phỏng vấn với nhân sự: bạn có thể được yêu cầu làm các bài kiểm tra về trình độ logic (giải đố) và ngôn ngữ (nếu vị trí yêu cầu ngoại ngữ không phải tiếng mẹ đẻ của bạn). Tiếp theo đó là một cuộc phỏng vấn khoảng 1 giờ đồng hồ, tất cả xoay quanh những gì bạn đã trình bày trong CV và Thư, chủ yếu là để nhân sự kiểm tra các thông tin về bằng cấp của bạn, vạch nên một hồ sơ khái quát về con người và tính cách của bạn và kiểm chứng các *kĩ năng mềm* và xem bạn có thật sự KHAO KHÁT công việc này hay không. Nếu trước mặt những người này bạn tỏ ra mình thờ ơ hoặc có những biểu hiện bất thường về nhân cách thì hãy coi chừng! Nghe toát mồ hôi nhỉ :’))

Sau đó mới đến các bài test và phỏng vấn về chuyên môn. Ở đây có thể có nhiều hơn 1 bài test và 1 cuộc phỏng vấn, tùy theo vị trí mà bạn ứng tuyển. Những người mà bạn sẽ gặp có thể là Lead dev, PM, Architect, thậm chí là CTO nếu bạn may mắn (hay là không may nhỉ ;D). Vì thế nên các câu hỏi đưa ra có độ khó không giống nhau và trải khá rộng trên lĩnh vực mà bạn ứng tuyển, từ những vấn đề lý thuyết cổ điển như thuật toán, độ phức tạp của thuật toán, bài toán NP-complete… cho đến các xu hướng mới [nổi] trong lập trình như functional programming, reactive programming… Kinh nghiệm của tôi cho thấy các công ty càng nhỏ thì càng có xu hướng hỏi những câu “hẹp”, tập trung vào loại kĩ thuật và công cụ mà họ đang tìm kiếm, còn ở các công ty lớn thì chủ yếu xem cách bạn giải quyết vấn đề và khả năng học kĩ năng mới để đối phó với vấn đề mới. Qua được vòng này mà nhận được những cái gật gù từ người hỏi thì 80% là bạn sẽ có được vị trí mong muốn, còn lại phụ thuộc vào kết quả test và do ..ăn ở :’))

LÝ THUYẾT HAY THỰC TẾ ? CẢ HAI!

Ở đây xin trở lại với chia sẻ #C67. Bạn OP nói rất đúng về mức độ quan trọng của các kiến thức lý thuyết đối với một kĩ sư máy tính vì nó là một tiêu chuẩn để phân biệt một kĩ sư và một lập trình viên thông thường (mặc dù tôi có chút thắc mắc, vì sao một ứng viên lập trình viên Java, là fresher, lại bị hỏi về tối ưu hóa csdl ? Vị trí bạn ứng tuyển xem ra không đơn giản). Tuy nhiên đừng vì thế mà xem nhẹ việc thành thạo một loại công nghệ hay ngôn ngữ nào đó. Lý thuyết và thực hành, nói theo kiểu Maxism (khốt ta bít), là hai thứ có quan hệ *biện chứng*, hỗ trợ qua lại với nhau. Lí do các công ty không đặt nặng phần thực tiễn khi đánh giá khả năng của bạn OP là vì (theo tôi võ đoán) bạn ứng tuyển vào vị trí lập trình viên Java nói chung, không có mission cụ thể, ngoài ra bạn không có kinh nghiệm làm việc trước đó nên họ chuyển sang đánh giá tiềm năng của bạn trước khi nhận bạn vào và tiếp tục đào tạo bạn trong quá trình làm việc.

Tôi đọc các cfs trên page này hàng ngày và có tham gia một số group lập trình trên facebook, câu hỏi (hay lời ta thán) thường gặp nhất của các bạn sinh viên là “đi học để làm gì khi mà không cần bằng vẫn có thể đi làm lương chục củ”, “tại sao ở trường chỉ toàn dạy các môn đại cương, các môn lý thuyết mà không _dạy code_”, “em đang tự học làm web, chỉ cần tốt nghiệp nữa thôi là đi làm được rồi mà sao khó [tốt nghiệp] quá”… Tôi nghĩ rằng các bạn đang nhầm lẫn về môi trường học và định hướng nghề nghiệp của mình sau này. Các chương trình đại học ở Việt Nam theo tôi biết (trừ ĐH FPT) đều là hướng nghiên cứu chứ không phải hướng chuyên nghiệp. Điều này có nghĩa là các bạn chủ yếu học lý thuyết, thiếu hoàn toàn mảng doanh nghiệp và quan trọng nhất là không biến các bạn thành các “lập trình viên web”, “lập trình viên javascript”… Bạn muốn phát triển theo hướng nào thì phải TỰ HỌC, tự trau dồi, tự tìm hiểu bằng cách sử dụng một phần những kiến thức ở trường, đó là điều bắt buộc khi bạn học về khoa học máy tính trong các chương trình hàn lâm. Còn nếu chỉ đơn giản muốn thành thục một framework, một ngôn ngữ nào đó để làm nghề thì hãy tìm đến các chương trình dạy nghề hay các khóa đào tạo ngắn hạn rồi sau đó đi làm luôn và ngay, việc học của bạn nên được thực hiện ở trường đời chứ không phải ở trường đại học.

VÀ CHUYỆN CỦA TÔI

Khi còn là sinh viên tôi cũng giống như một số bạn, trễ nải các môn lý thuyết cổ điển và các môn nghiên cứu máy tính ở bậc thấp (Unix API, OS…), và tôi đặt biệt thù ghét việc lập trình ở đây vì ngôn ngữ chính họ dạy tôi là C, sau này lên năm cuối còn “được” dạy thêm Common Lisp nữa (đừng thắc mắc về ngôn ngữ đồ đá này, nó còn nhiều tuổi hơn cả tôi với bạn mà chả thấy ai dùng). Khi đó tôi chỉ có một ước mơ duy nhất là cố gắng qua môn, tốt nghiệp để trở thành “java developer”, còn cụ thể là làm gì thì tôi mù tịt :* . Mọi chuyện chỉ thay đổi khi tôi quyết định thi OCPJP (chủ yếu là để khè HR thôi chứ sau này đi làm mới thấy các tiền bối expert có khi còn chả biết nó là cái giống gì 😀). Những kiến thức sơ sài về Data Structure đã giúp tôi qua phần Collections, những đêm ôn thi nước đến chân mới nhảy bộ môn OS thì giúp tôi qua rất nhiều phần, từ I/O, File I/O đến Threads và Concurrency. Đó là lúc tôi hiểu mình mới chỉ chạm đến bề mặt của ngôn ngữ Java, còn phần nền tảng của nó thì đã bị tôi bỏ rơi đâu đó trong suốt mấy năm sinh viên ăn chơi. Bạn thấy đấy, tất cả mọi thứ, kể cả những thứ chúng ta thù ghét nhất, đều tồn tại vì một lí do nào đó và sẽ đến lúc chúng trở nên có ích, chỉ là chúng ta có nắm bắt được hay không mà thôi.

Tôi vẫn nhớ bài test tuyển dụng đầu tiên tôi làm khi mới ra trường là phản biện một UML diagram, chỉ ra các điểm mà tôi cảm thấy bất hợp lí và đề xuất các thay đổi cho nó, sau đó generate code bằng java và viết một thuật toán *đơn giản* và *tối ưu* (giải thích lí do) để đọc/thêm/bớt dữ liệu từ cấu trúc dữ liệu đề xuất trước đó.

Chỉ bằng một bài test này thôi, họ đã đồng thời đánh giá được khả năng của tôi về OOP, Algorithm, Data structure và một chút về ngôn ngữ. Sau bài test thì tôi phải qua một lần phỏng vấn nữa, chủ yếu là về những hiểu biết của tôi về Agile, git workflow và CI/CD rồi đi về. Kết quả là tôi tạch các bạn ạ). Phải 7 – 8 lần như thế tôi mới có một lần tỏa sáng mà phần nhiều là nhờ kinh nghiệm từ các lần tạch trước đó.

Vì thế nên các bạn sinh viên hãy yên tâm, sinh viên mới ra trường ở bất kì đâu trên thế giới này cũng đều phần nào ngơ ngác như các bạn cả thôi và các nhà tuyển dụng RẤT HIỂU điều này. Tuy nhiên cần xác định rõ mong muốn cũng như khả năng của bản thân để có thể ứng tuyển một cách hợp lí. Hãy ghi nhớ, mỗi cuộc phỏng vấn là một cuộc thi và bạn thật sự cần phải ÔN THI một cách nghiêm túc.

Điểm khác biệt duy nhất ở đây chỉ là bạn có quyền và được khuyến khích học tủ. Tủ ở đây chính là thông báo tuyển dụng, nơi bạn sẽ tìm thấy tất cả các thông tin cần thiết về công ty, về vị trí tuyển dụng, về các yêu cầu (bắt buộc cũng như khuyến khích) đối với ứng viên cho vị trí đó. Hãy tìm hiểu tất cả các thông tin liên quan, mở rộng hết cỡ những vấn đề có thể được nhắc đến theo cả chiều dọc lẫn chiều ngang. Và cuối cùng, tuyệt đối không nói dối về khả năng của bản thân, vì các chuyên gia HR cũng như chuyên môn rất giỏi trong khoản bóc phốt này. Đừng dại dột!!!

Chuyên mục bốc phét đêm khuya đến đây đã dài, xin được dừng lại. Tôi hi vọng những tâm sự trên đây của tôi có thể giúp được một số các bạn trẻ đang và sắp bước vào những trận chiến đầu đời để giành lấy một công việc. Chúc tất cả các bạn may mắn và nếu có tin vui thì xin chia sẻ với tôi cũng như các bạn khác, vì một cộng đồng IT lương khởi điểm $2000

#C112

Thấy có bạn nữ lên hỏi kiểu nên theo hướng nào thì phù hợp với con gái. Và mình thấy mấy anh chị đi trước thường khuyên là nên làm tester hay đại loại là những thứ không liên quan đến code. Và mình xin kể câu chuyện của mình cho các bạn nữ còn đang đi học biết.
Mình là nữ, mình tốt nghiệp được khoảng gần 1 năm, hiện tại đang làm dev.

Hồi đó mình đỗ cả 2 trường đại học, nếu không đi theo con đường này thì năm sau có thể mình sẽ trở thành một bác sĩ. Và đương nhiên cả nhà chẳng ai muốn mình đi theo con đường trở thành một lập trình viên (mình thì thích dùng từ dev hơn). Mình đã đấu tranh rất nhiều để được học cái ngành này. Một đứa con gái trong một cái lớp có tới vài chục thậm chí cả trăm đứa con trai, dĩ nhiên mấy bạn nam rất giỏi, nhiều lúc mình cũng bị chùn chí.

Nhưng nghĩ tới cảnh ra trường không có việc làm hoặc làm một công việc không liên quan đến những thứ mình học ba mẹ sẽ thất vọng, hàng xóm dưới quê sẽ nói ra nói vào, với lại mình đã chọn con đường này mình phải có trách nhiệm với nó vì không có cơ hội để chọn lại, mình lại tiếp tục cố gắng. Lúc sắp tốt nghiệp mình đi thực tập với mức lương đủ sống. Hiện tại mức lương của mình đã gấp vài lần con số đó. Mình thấy hạnh phúc vô cùng khi được code và có thể kiếm ra tiền để lo cho gia đình bằng chính ước mơ từ hồi đi học của mình.
Mình muốn gởi tới mấy bạn nữ lời nhắn là hãy cố gắng lên, nếu đã lựa chọn con đường này thì phải đi cho tới cùng. Đừng có tư tưởng trở thành một tester nếu không thích nó. Con gái học lập trình đâu phải để làm tester, con gái cũng sẽ trở thành dev như bao đứa con trai khác, chỉ cần có ước mơ. Cố lên!

Có thể bạn quan tâm:

Xem thêm việc làm Software Developers trên TopDev

TopDev via Lập trình viên Confession

  Cơ hội nghề nghiệp về CNTT của các doanh nghiệp Nhật
  21 nghề nghiệp "đắt giá" trong tương lai, triển vọng và khó bị thay thế bởi trí tuệ nhân tạo