Oxymoron

oxymoron /ˌɑːk.sɪˈmɔːr.ɑːn/ n. Two words or phrases used together that have, or seem to have, opposite meanings
Oxymoron là một nghịch lý, nghịch lý tới mức ngay chính bản thân nó cũng là một nghịch lý khi được ghép thành hai từ Hy Lạp cổ: Oxys thì thông minh, sắc bén còn Moros là ngu ngốc, dại khờ. Trong chữ Hán cũng có từ mâu thuẫn (矛盾), chuyện kể rằng một thương nhân bán vũ khí, rao mâu (矛) của tôi là thứ vũ khí "đâm đâu cũng thủng", còn thuẫn (盾) của tôi là thứ "khiên không gì đâm thủng", khách hàng hỏi vậy mâu của ông đâm vào thuẫn của ông thì sao? thủng hay không?
Ngay đời thực ta cũng có nhiều nghịch lý. Anh ta yêu cô ta nhưng không dám nói. Cô ta giận anh ta nhưng im lặng. Hay dẫu biết con người có giới hạn, nhưng tin tuyển dụng yêu cầu một đống những thứ ngôn ngữ, những thứ công nghệ mà ta gọi là "tech stack". Vậy tech stack là gì? Vì sao tin tuyển dụng nào cũng liệt kê rất nhiều?
Khoan
Đầu tiên, tôi không bài xích những thông tin tuyển dụng trên thị trường là lố bịch, là vẽ vời. Mỗi doanh nghiệp có nhu cầu tuyển dụng riêng, có đội ngũ tuyển dụng vẫn đang làm việc của họ, vậy nên tôi sẽ không nói những cái job description (JD) đó là phi lý.
Thứ hai, tôi viết bài này dưới góc nhìn hoàn toàn chủ quan của một engineer gia nhập thị trường lao động hơn hai năm.
Cuối cùng, bài viết này sẽ hướng đến lĩnh vực công nghệ thông tin nói chung nên sẽ có nhiều từ khoá chuyên ngành mà tôi sẽ cố gắng giải thích súc tích nhất, đơn giản nhất cho người non-tech, những người "ngoại đạo" có thể hiểu được tôi đang lải nhải về cái gì.
Ngôn ngữ, lập trình
Khi lên lớp sáu, tôi chập chững tiếp xúc với thứ ma thuật mà mọi người gọi tên là tiếng Anh. Bài kiểm tra mười lăm phút đầu tiên tôi được hai điểm vì không hiểu thứ bùa chú ở trên bài thi là gì mà bắt tôi phải điền vào. Sáu năm sau, khi mà tôi bước chân vào trường Khoa học Tự nhiên, tôi mới trải nghiệm lại cái cảm giác lúc vừa học tiếng Anh, một ngôn ngữ mới - ngôn ngữ lập trình.
Ngôn ngữ lập trình không yêu kiều như tiếng Việt, không lãng tử như tiếng Pháp, không quý phái như tiếng Ý. Nó là những ký tự nhìn thì giống tiếng Anh, lâu lâu đặt bừa vài dấu câu, thụt đầu dòng tuỳ hứng, màu mè hoa lá hẹ cũng tuỳ lúc như đoạn dưới đây.
#include <iostream> // (1)
int main() { // (2)
std::cout << "Hello, World!" << std::endl;
return 0; // (3)
}
Nghiền ngẫm kỹ thì nó lại có cấu trúc như tiếng Anh. Tiếng Anh có từ vựng, có tenses, có idiom thì lập trình cũng có từ vựng (keyword), ngữ pháp (syntax) hay thành ngữ (pattern).
Ngôn ngữ lập trình là một cái vỏ, vì nó chỉ là bề nổi, là phương tiện để biểu diễn ý thức của con người cho máy để hiểu. Nên để hiểu được nó, dùng được nó đơn giản hơn nhiều so với học tiếng, vì nó là ngôn ngữ của máy, còn tiếng là ngôn ngữ con người.
Thứ giá trị thật sự của một kỹ sư khi dùng ngôn ngữ lập trình chính là tư duy lập trình. Nếu ngôn ngữ lập trình là một cái vỏ thì tư duy lập trình là cái nhân. Đó là lối suy nghĩ, cách giải quyết những vấn đề doanh nghiệp bằng chương trình máy tính, là cách kỹ sư chuyển đổi logic nghiệp vụ thành ngôn ngữ máy tính.
Để miêu tả cùng một công việc in ra màn hình một đoạn chữ thì với hai ngôn ngữ lập trình khác nhau lại có những keyword, có cú pháp khác nhau.
Với ngôn ngữ lập trình Python mình có thể viết
print('Hello, World!')
Còn với Java lại là
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Coi cú pháp Java viết có điên tiết không :D Tuy nhiên, xét về tư duy ở đây chẳng có gì khác biệt lắm khi mà mình đưa cho đối tượng một đoạn chữ để nó in ra màn hình, cả hai đều có print('Hello, World!').
Hình 1: Tư duy lập trình
Tư duy lập trình cũng giống như khả năng lái xe, còn chiếc xe thì là ngôn ngữ. Tôi biết lái xe thì tôi lái chiếc nào cũng được, tôi có tư duy lập trình thì ngôn ngữ chỉ là muỗi. Cũng như tấm ảnh trên, nó là kiến thức bao quát, bất di bất dịch, là thứ sẽ giúp chúng ta trụ vững trước sự xâm lấn của AI.
Vậy có sai không khi nói ngôn ngữ lập trình là vỏ bọc cho cái lõi tư duy? JD họ viết nhiều ngôn ngữ vì họ quan trọng tư duy lập trình hơn cả thảy, vì lẽ đó mà họ thường viết "Have experience with at least one of the following languages ...", vì lẽ đó mà có kinh nghiệm nhiều với một ngôn ngữ thường nằm ở mục "Nice to have".
Một cái JD với hàng chục cái tên ngôn ngữ, tên công nghệ hào nhoáng cũng không khác gì mấy câu chuyện Oxys và Moros. Cái sắc của ngư dân là dùng lưới, dựa vào con thuỷ triều, vào thời tiết, vào con nước, vào kỹ thuật mà đánh để tìm được con cá quý. Cái dại của con cá với một cơ thể nhỏ bé mải mê khoác lên mình những tấm vảy đại dương, một con cá nhưng nghĩ mình là cả biển khơi muốn nằm cả trong lưới như vậy mới có giá. Suy cho cùng thì tư duy lập trình mới là thứ giúp con cá sống sót, còn ngôn ngữ, chỉ là vùng nước mà nó đang bơi.