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 ...
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.
#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ì