Career path as a software engineer - P3

Before publish this post, I would like to say thank to Narita-san. You are my ex-customer but in my mind you are also my teacher and my friend. As your expectation, I want to share your voice to all people, not only to IT engineer, to everyone who want to be an IT engineer in the future also.

Thank you for sharing to me, to us about your experience and your dreams about working with Software.


Bạn có biết điều khác biệt lớn nhất giữa “Application development engineer” và “Core technology engineer”? Trước khi nói về điều đó, tôi cần phải làm rõ cho bạn về những khái niệm trên bởi chúng vốn không phổ thông và cũng không được chính thức. Ý tưởng cho việc này bắt nguồn từ kinh nghiệm cá nhân của tôi. Do đó, tôi nên giải thích đôi chút về chúng. Như tôi đã viết trong số trước, tôi đã làm việc phát triển phần mềm trong lĩnh vực xử lý tín hiệu trong cả 2 lớp ứng dụng và lớp lõi xử lý tín hiệu kỹ thuật số. Trong phát triển của tôi về các chương trình xử lý tín hiệu ảnh tĩnh, tôi sử dụng C++ và C, và cũng không đặt quá nhiều chý ý về phần nền tảng. Thay vào đó, tôi chú trọng vào việc viết nên nền tảng độc lập với code. Mặc dù tôi cần phải xem xét đôi chút về nền tảng, khi viết code để truy cập nguồn, khi tối ưu hóa hiệu suất, và cả về sau, nhưng phần trăm nỗ lực của tôi dành ra cho phần này luôn luôn thấp hơn cho những phát triển phần mềm ứng dụng khác.

Ví dụ, “Làm thế nào để loại bỏ noise?” luôn là một trong những vấn đề lớn nhất trong lĩnh vực xử lý hình ảnh tĩnh, và các logic hay kỹ thuật dần trở nên phổ biến trên mọi nền tảng. Trong một ví dụ khác, để phát triển logic AI, các công cụ trò chơi hay nhận diện giọng nói, nền tảng không phải phần quan trọng. Tôi gọi một người phát triển những “logic” đó là “Core technology engineer”

Tất nhiên, tôi không có ý rằng chỉ có 2 kiểu kỹ sư. Ý tôi là đôi khi tôi là “Application development engineer” và cũng có khi lại trở thành “Core technology engineer”. Bạn cần phải chọn một thứ cho công việc của bạn.

Đến đây, khái niệm “Core technology engineer” trong bài viết của tôi đã khá rõ ràng. Ta có thể bắt đầu bàn luận về sự khác biệt rồi. Đầu tiên, trong kinh nghiệm của tôi, con đường để học core technology rất khác với việc học phát triển ứng dụng. Khi bạn học phát triển ứng dụng trên nền tảng, các nhà cung cấp nền tảng này sẽ phát hành tài liệu hướng dẫn dễ hiểu và chi tiết cho bạn, và họ sẽ có các dịch vụ hỗ trợ khá tốt. Bởi các nhà phát hành có mục tiêu rõ ràng để mở rộng số lượng người sử dụng nền tảng của họ.

Nhưng với lĩnh vực core technology, không ai muốn hỗ trợ bạn, và không ai có lý do gì để hỗ trợ bạn. Đôi khi, đây mới là một vấn đề lớn hơn, không ai biết câu trả lời chính xác. Trong phát triển core technology, bạn sẽ phải đối mặt với tình huống có rất nhiều câu trả lời sai, và chẳng có câu trả lời đúng nào. Thậm chí với một cách giải quyết vô cùng phổ biến và chẳng có ai nghi ngờ gì nó, bạn cũng không nên tin tưởng hoàn toàn mà không có các chứng thực kỹ thuật. Có quá ít “câu trả lời tốt”. Nhưng bất kỳ lúc nào bạn khi bạn tìm thấy một câu trả lời tốt, bạn vẫn cần phải tìm một “câu trả lời tốt hơn”.

Tất nhiên, những nhà phát triển core technology không biết tuốt ngay từ khi mới bắt đầu. Ở điểm xuất phát, họ đã tìm thấy những code để tham khảo, và đi theo những người tiên phong và những người đi trước. Tại thời điểm này, bạn nên chú ý tìm kiếm người mình có thể bước theo.

~Tip tăng kỹ năng 4~
Chọn đúng giáo viên cho mình.

Điều này không có nghĩa rằng chỉ có giáo viên thực tế. Khi bạn chọn một cuốn sách để học, lựa chọn đó rất quan trọng và sẽ ảnh hưởng đến con đường tương lai của bạn. Bạn không thể quá cẩn trọng khi quyết định chọn người hướng dẫn. Nếu bạn cảm thấy có gì đó không đúng ở người đó, đừng ngần ngại với những cơ hội mới và so sánh họ với nhau. Đừng dè dặt với việc chọn giáo viên, và cũng đừng keo kiệt trong việc tự đầu tư cho mình.

Và nếu có thể, học về technology từ ít nhất 2 nguồn. Học từ 2 cuốn sách, học từ giáo viên thực và từ một cuốn text book. Bạn có thể xác nhận lại sự chính xác từ một giáo viên khác hay từ một cuốn sách khác, hoặc đôi khi từ một nguồn khác sử dụng các cụm từ hay cách giải thích khác biệt.

Thêm vào đó, đôi khi những nguồn ấy có những phương pháp tiếp cận khác nhau với cùng một vấn đề. Trong trường hợp này, so sánh và đánh giá chúng là một cách rèn luyện rất tốt để tăng thêm sự hiểu sâu. Trong phát triển core technology, bạn cần phải tư duy linh động. Đừng chỉ bám vào một giải pháp duy nhất. Bạn nên thử tìm những giải pháp “mới” và “khác biệt”.

~Tip tăng kỹ năng 5~
Học từ nhiều nguồn

Bằng cách này, khi bạn đang là chạy ở tuyến đầu của lĩnh vực, bạn cần phải phát minh, sáng tạo và tìm ra những thứ mới mẻ, để có thể chiến đấu với những đối thủ của mình. Đúng vậy, bạn cần phải “riêng biệt”. Tiếp đó, làm thế nào để tăng sự riêng biệt của bản thân? Đó là một việc khó khăn, và tôi không thể nói điều gì chính xác về nó. Nhưng tôi có thể kể cho bạn vài câu chuyện từ kinh nghiệm của tôi.

Đầu tiên, kiến thức miền là điều bắt buộc có. Bạn có nói “đó là vấn đề của khóa học” không? Nhưng bạn sẽ cần biết bao nhiêu?

Trong quá tình phát triển công cụ xử lý hình ảnh tĩnh của mình, tôi thích chụp ảnh và đã chụp ảnh trước cả khi tôi bắt đầu phát triển phần mềm chỉnh sửa ảnh. Vâng, tôi không sử dụng máy ảnh kỹ thuật số, và tôi đã sử dụng máy ảnh film trong khoảng 20 năm rồi. Tôi sử dụng máy quét film để số hóa những bức ảnh. Oh, một vài người trẻ có thể không biết đến “máy ảnh film”, hoặc neeys bạn biết, bạn cũng chưa từng sử dụng “film”. Ngày nay, máy ảnh kỹ thuật số đã tạo ra một thị trường tiêu dùng lớn và một khu vực kỹ thuật lớn, nhưng 15 năm trước đây, chất lượng của nó rất thấp và nó cần phải bắt kịp kỹ thuật của máy ảnh film. Trong những kinh nghiệm lâu năm về chụp ảnh của mình, tôi đã học rất nhiều về việc làm sao để chỉnh sửa ảnh trên PC khi sử dụng máy quét film. Vào thời điểm đó, tôi đã sử dụng điểm ảnh cao của máy quét film hơn cả những người sử dụng máy ảnh kỹ thuật số, và đó là quan điểm từ một người dùng nghiệp dư có chuyên môn cao. Trình tự những hoạt động nào để nâng cao chất lượng ảnh, quy trình nào họ muốn, họ thích gì hay ghét gì? Những kiến thức nền đó đã là một tài sản lớn đối với tôi.

Độc đáo sẽ được tạo nên bởi một bộ não linh hoạt. Và để cho trí óc thoải mái, bạn nên tập trung vào vấn đề đó và đừng chú ý đến những việc khác. Nếu bạn giỏi lái xe máy và bạn cũng biết luật ở Việt Nam, bạn sẽ thấy thoải mái khi trên xe. Nhưng nếu bạn không giỏi lái, hoặc bạn không rõ luật, bạn cần phải chú ý để điều khiển xe, hay để hiểu luật. Hãy tưởng tượng bạn lái xe ở Nhật, bạn không thể lái giống như bạn ở Việt Nam được. Bạn không thể chạy xe ở đối diện của con đường. Đó là điều nghiêm cấm tại Nhật. Bạn không thể rẽ ở ngã tư, nếu đèn đường màu đỏ. Có rất nhiều điều luật khác tại Nhật, bạn có thể cảm thấy thoải mái không? Trí óc sẽ thoải mái khi bạn làm tốt và hiểu các quy tắc. Trong phát triển, cũng giống như vậy. Nếu bạn có kinh nghiệm, bạn biết việc mình có thể làm, nên làm, hay việc mình không thể làm, không nên làm thì bạn sẽ thấy dễ dàng và làm việc tốt hơn.

~Tip tăng kỹ năng 6~
Có những kiến thức mạnh và kinh nghiệm về lĩnh vực đó

Nhưng nếu bạn rất trẻ, và bạn không có đủ thời gian để có được kinh nghiệm và kiến thức. Bạn nên làm gì để có thể tinh thông về lĩnh vực đó? Điều này không hề dễ dàng. Đọc, học, cố gắng, nói và nghĩ. Nghĩ về nó sẽ là điều quan trọng nhất. Khi bạn liên tục nghĩ, chủ đề đó sẽ xuất hiện trong giấc mơ của bạn và hãy nói chuyện với giấc mơ về nó. Nhưng trong những năm tháng của tuổi 20 hay 30, bạn cần phải tập trung. Tôi không nghĩ rằng mình có tài trong việc chụp ảnh, nhưng tôi đã nghĩ rất nhiều về xử lý hình ảnh, suy nghĩ và lại suy nghĩ. Và đến một ngày, bỗng nhiên tôi thấy rằng mình đang nói chuyện với một ảnh nháy chuyên nghiệp về xử lý hình ảnh với một vị thế tương đương.

~Tip tăng kỹ năng 7~
Liên tục nghĩ về vấn đề đó, cho đến khi nó xuất hiện trong giấc mơ cỉa bạn.

Khi bạn kết thúc một dự án, và nếu bạn có cơ hội, đừng do dự, hãy thử những core technology mới. Nếu bạn trở nên thông thạo trong nhiều lĩnh vực, kinh nghiệm của bạn với công nghệ mới sẽ giúp bạn suy nghĩ linh hoạt hơn trong lĩnh vực đầu tiên của bạn. Tương tự như tip số 5 trong bài này, sự khác biệt về quan điểm sẽ khiến suy nghĩ của bạn linh hoạt hơn. Nếu bạn may mắn, bạn sẽ thấy những ý tưởng mới bằng việc lồng ghép những công nghệ mới với công nghệ cũ của bạn.

Thế còn phương hướng để phát triển? Một khả năng để phát triển chính là những lĩnh vực gần với nó.Ví dụ, từ xử lý ảnh đến xử lý video hay xử lý âm thanh, từ khai thác dữ liệu đến AI, từ mô hình kết hợp đến phát hiện virus. Mỗi lĩnh vực chuyên sâu lại có những lĩnh vực gần kề và chúng cũng có vài kiến thức cũng như kỹ năng kỹ thuật tương tự nhau. Đó là cách tương đối dễ dàng để phát triển. Tất nhiên bạn có thể thử những lĩnh vực xa hơn nhưng rất khó để chuyển đổi sang. Tôi không khuyến khích điều này, nhưng nếu bạn có tham vọng lớn, tôi sẽ không ngăn cản bạn.

~Tip tăng kỹ năng 8~
Thử lĩnh vực công nghệ mới sẽ giúp kỹ năng ở lĩnh vực hiện tại sâu sắc hơn.

Kỹ năng core technology không dễ dàng để đạt được. Nhưng một khi bạn đã có được nó, nó sẽ trở thành một kỹ năng và công việc mạnh trong cuộc đời kỹ sư của bạn. Bạn chỉ cần dùng thời gian để trở nên chuyên nghiệp. Vấn đề chỉ là bạn có muốn nó hay không thôi.

Theo Geek and Tech magazine, Hiroshi Narita