6.1 Bậc thang nghề nghiệp
Lập trình viên cũng có các cấp bậc khác nhau tùy theo trình độ. Trước đây có các khái niệm như "coder", "programmer" và "hacker", nhưng bây giờ mọi người đều dùng tên tiếng Anh từ IT của Mỹ.
Dành cho developer, có 6 cấp bậc chính:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
Từ quốc gia này sang quốc gia khác và thậm chí từ công ty này sang công ty khác, một số tiêu chí có thể khác nhau, nhưng thực chất là:
Intern Software Engineer — là thực tập sinh. Họ đang trong quá trình học lập trình, không có kinh nghiệm thương mại, hay tham gia vào dự án lớn. Thường làm việc dưới sự giám sát của đồng nghiệp có kinh nghiệm hơn. Nhiệm vụ chính của họ là tìm hiểu cơ sở mã và các nguyên tắc phát triển phần mềm, thực hiện các nhiệm vụ mã hóa đơn giản và tham gia vào việc kiểm thử.
Junior Software Engineer — là lập trình viên, nhưng chưa có kinh nghiệm thương mại nghiêm túc hoặc kinh nghiệm dưới một năm. Làm việc dưới sự hướng dẫn của developer cấp cao hơn, thực hiện các phần của dự án và tham gia vào quy trình soát lại mã. Giai đoạn này của sự nghiệp tập trung vào mở rộng kỹ năng kỹ thuật và hiểu rõ nhiệm vụ dự án.
Middle Software Engineer (hoặc chỉ là Software Engineer): có nhiều khả năng tự đưa ra quyết định kỹ thuật, chịu trách nhiệm cho một phần quan trọng của dự án, bắt đầu hướng dẫn đồng nghiệp ít kinh nghiệm hơn và tích cực tham gia vào việc thảo luận kiến trúc. Thường có 2–5 năm kinh nghiệm thực tế.
Senior Software Engineer: chịu trách nhiệm thiết kế và thực hiện hệ thống phức tạp, cung cấp hướng dẫn và lãnh đạo trong đội ngũ, tham gia vào quy hoạch chiến lược của dự án và thường xuyên đại diện đội ngũ trong việc giao tiếp với khách hàng và các bên liên quan khác. Thường có 5–10 năm kinh nghiệm.
TechLead: chịu trách nhiệm cho kết quả kỹ thuật cuối cùng của dự án, chỉ đạo phát triển, giải quyết các nhiệm vụ phức tạp nhất, đảm bảo tuân thủ các tiêu chuẩn kỹ thuật và phối hợp hoạt động của các developer.
Principal Software Engineer: làm việc ở mức kỹ thuật cao nhất, thường tham gia vào việc định hình chiến lược kỹ thuật của công ty, phát triển các giải pháp đổi mới và thiết lập các tiêu chuẩn kỹ thuật, phục vụ như người hướng dẫn chính cho các lãnh đạo kỹ thuật và là chuyên gia chính trong các vấn đề kỹ thuật phức tạp.
Điều thú vị. Các công ty lớn có thể có thêm các vai trò và vai trò phụ. Chẳng hạn, trong Google có các vai trò như:
- Staff Software Engineer (L6): có ảnh hưởng đáng kể đến chính sách kỹ thuật của bộ phận mình.
- Senior Staff Software Engineer (L7): làm việc trên các dự án lớn và phức tạp, xác định hướng phát triển chiến lược công nghệ trong công ty.
6.2 Sản phẩm Lego
Khi xưa (năm 1975) Niklaus Wirth, người sáng tạo ra ngôn ngữ Pascal, đã viết cuốn sách "Algorithms + Data Structures = Programs". Từ đó nhiều điều đã thay đổi.
Sản phẩm phần mềm hiện đại khác xa so với 10 năm trước đây, và chắc chắn không giống như cách đây 20 năm. Không cần nói về năm 1975 — từ đó đã trôi qua 50 năm rồi.
Lập trình viên hiện đại không còn viết chương trình bằng tay nữa. Họ thường lắp ráp chúng từ các phần có sẵn (thư viện) và viết mã giúp các phần này tương tác với nhau.
Sản phẩm phần mềm hiện đại có thể bao gồm hàng chục và hàng trăm chương trình. Một số trong số đó chạy trên máy tính của người dùng, thiết bị di động của họ, phần lớn khác chạy trên các máy chủ trong trung tâm dữ liệu.
Nhiều trong số các chương trình này, như web server hoặc database, đã được viết sẵn. Chỉ cần cấu hình chúng đúng cách để chúng hoạt động như ý muốn. Mặc dù trong quá trình, việc cấu hình có thể trở nên khá phức tạp đến mức nó thực sự trở thành phát triển. (*facepalm*)
Lập trình viên liên tục tự đấu tranh với bản thân. Thay vì viết lại mã tương tự trong các chương trình khác nhau, họ viết thư viện có thể cấu hình (tùy chỉnh) để phù hợp với nhu cầu của mình, sau đó chỉ cần gắn kết chúng vào các vị trí cần thiết.
Trong 20 năm qua, lập trình viên đã viết rất nhiều thư viện, framework và kho mã nguồn mở. Chúng thực sự có hàng triệu. Và bây giờ việc viết mã từ đầu bị coi là không tốt. Thay vào đó, cần tạo ra chương trình từ các giải pháp chất lượng và được kiểm tra — thư viện, framework, packages và modules.
Nhưng ngay cả cách tiếp cận đó cũng đã lỗi thời. Xu hướng của 10 năm qua là chuyển sang đám mây, các trung tâm dữ liệu lớn cung cấp cho chương trình của bạn mọi thứ chúng cần. Bạn muốn một database? Chúng tôi có hàng trăm để bạn lựa chọn. Bạn muốn một web server hiếm có và độc đáo — cũng có! Bất kỳ sự ưa thích nào sẽ có nếu bạn trả tiền.
6.3 "Tôi là một kỹ sư" © Elon Musk
Không cần phải viết những thứ phức tạp và nhàm chán nữa. Nếu bạn cần một tính năng phức tạp tuyệt vời nào đó, đã có thư viện cho việc đó. Bạn chỉ cần: a) biết nó tồn tại, b) tìm cái phù hợp (có thể có hàng chục bản tương tự với chất lượng khác nhau), c) tìm hiểu cách tích hợp nó vào dự án của bạn.
Công việc từ cách tiếp cận đó trở nên thú vị hơn rất nhiều. Bây giờ bạn có thể nhanh chóng gấp 10 lần thêm tính năng mới vào sản phẩm. 30 năm trước, nếu bạn cần web server, bạn phải tự viết nó. 20 năm trước — mua, cài đặt và cấu hình. Còn bây giờ — chỉ cần vào bảng điều khiển "đám mây" và kích hoạt thôi.
Đây cũng là một trong những lý do Python phổ biến. Nó rất phù hợp không phải để viết các giải pháp lớn và phức tạp, mà là để "ghép nối" các phần khác nhau lại với nhau. Và, dựa vào độ phổ biến của nó, nó làm rất tốt điều đó.
Và bản thân nghề nghiệp từ lập trình viên Python đã chuyển thành Python Fullstack Software Engineer. Lập trình viên Python hiện đại cần hiểu cách hoạt động của database để làm việc với nó một cách hiệu quả. Hiểu HTML & JavaScript để thiết lập hoạt động của frontend với python-backend. Và Docker cũng cần thiết — giờ đây là tiêu chuẩn ngành.
Phát triển hiện đại không giống chút nào với những gì đã có 20 năm trước đây. Lập trình viên hiện đại viết mã không quá 50% thời gian của họ. Thời gian còn lại họ đọc tài liệu, khám phá công nghệ mới và tham gia các cuộc họp. Lập trình viên đơn độc đã là quá khứ từ lâu.
GO TO FULL VERSION