6.1 Thang sự nghiệp
Lập trình viên cũng có các cấp độ khác nhau tùy theo trình độ. Khi xưa có những khái niệm như "coder", "programmer" và "hacker", nhưng giờ tất cả đã chuyển sang các tên gọi từ ngành IT của Mỹ.
Đối với developer có 6 cấp độ chính:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- Tech Lead
- Principal Software Engineer
Tùy theo quốc gia mà một số yếu tố có thể khác nhau, nhưng đại khái là như sau:
Intern Software Engineer — đây 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 cũng như chưa tham gia vào các dự án lớn. Thường làm việc dưới sự giám sát của các đồng nghiệp có kinh nghiệm hơn. Nhiệm vụ chính của họ là học cơ sở mã và những kiến thức cơ bản về phát triển phần mềm, thực hiện các nhiệm vụ cơ bản về mã hóa và tham gia 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 thực sự hoặc có kinh nghiệm dưới 1 năm. Làm việc dưới sự hướng dẫn của lập trình viên có kinh nghiệm hơn, thực hiện các phần của dự án và tham gia vào các vòng xem xét mã. Giai đoạn này tập trung vào việc nâng cao kỹ năng kỹ thuật và hiểu rõ những nhiệm vụ của dự án.
Middle Software Engineer (hay chỉ đơn giản là Software Engineer): có nhiều tự do hơn trong việc ra quyết định kỹ thuật, chịu trách nhiệm cho các phần quan trọng của dự án, bắt đầu hướng dẫn các đồng nghiệp có ít kinh nghiệm hơn và tham gia tích cực vào cá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à triển khai các hệ thống phức tạp, cung cấp hướng dẫn và lãnh đạo trong nhóm, tham gia vào kế hoạch chiến lược của dự án và thường đại diện cho nhóm trong 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: như là một lãnh đạo kỹ thuật, chịu trách nhiệm cho kết quả kỹ thuật cuối cùng của dự án, lãnh đạo phát triển, giải quyết các vấn đề phức tạp nhất, đảm bảo tuân thủ các tiêu chuẩn kỹ thuật và điều phối hoạt động của các lập trình viên.
Principal Software Engineer: làm việc ở cấp độ 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 đột phá và thiết lập tiêu chuẩn kỹ thuật, là người hướng dẫn chính cho các lãnh đạo kỹ thuật và là chuyên gia hàng đầu trong các vấn đề kỹ thuật phức tạp.
Các công ty lớn có thể có các vai trò và vai trò phụ bổ sung. Ví dụ, ở 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 những dự án lớn và phức tạp, định hướng chiến lược phát triển công nghệ trong công ty.
6.2 Sản phẩm Lego
Ngày xưa (năm 1975) Niklaus Wirth, người tạo ra ngôn ngữ Pascal, đã viết một cuốn sách "Algorithms + Data Structures = Programs". Kể từ đó rất nhiều điều đã thay đổi.
Sản phẩm phần mềm hiện đại không còn như những gì nó từng là cách đây 10 năm và chắc chắn không phải như 20 năm trước. Chẳng cần phải nói về năm 1975: đã 50 năm trôi qua kể từ đó.
Lập trình viên hiện đại không còn viết chương trình bằng tay nữa. Thay vào đó, họ lắp ráp nó từ các phần sẵn có (thư viện) và viết mã giúp các phần đó 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ố chạy trên máy tính của người dùng, thiết bị di động, trong khi phần lớn chạy trên các máy chủ trong trung tâm dữ liệu.
Nhiều trong số những chương trình này, chẳng hạn như web server hoặc cơ sở dữ liệu, đã được viết sẵn. Chúng cần được cấu hình đúng cách, để họ hoạt động theo yêu cầu. Dù rằng quá trình cấu hình này theo thời gian có thể trở nên phức tạp đến mức gần như trở thành phát triển. 🤦♂️
Lập trình viên luôn chiến đấu với chính họ. 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 và chỉ cần kết nối chúng vào mọi nơi 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à repo mở. Quả thực là hàng triệu. Và giờ viết toàn bộ mã từ đầu được coi là xấu. Thay vào đó, hãy lắp ráp chương trình từ các giải pháp chất lượng và đã được kiểm chứng — thư viện, framework, gói và module.
Nhưng cách tiếp cận này cũng đã lỗi thời. Xu hướng của 10 năm qua là di chuyển lên 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ứ bạn cần. Muốn cơ sở dữ liệu? Chúng tôi có hàng trăm để lựa chọn. Muốn web server hiếm có độc đáo — chúng tôi có. Bất kỳ yêu cầu nào cũng có.
6.3 "Tôi là kỹ sư" (c) Elon Musk
Không cần phải viết những thứ phức tạp và nhàm chán nữa. Giờ, nếu bạn cần một chức năng phức tạp đáng kinh ngạc, luôn có thư viện cho trường hợp đó. Bạn chỉ cần: a) biết rằng nó có, b) tìm cái cần thiết (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 theo cách tiếp cận này đã trở nên thú vị hơn rất nhiều. Bây giờ bạn có thể nhanh hơn 10 lần trong việc thêm chức năng mới vào sản phẩm. 30 năm trước, nếu bạn cần một web server, bạn cần phải 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 "cloud" và bật lên.
Đây cũng là một trong những lý do khiến Frontend trở nên phổ biến. Phần backend phức tạp giờ có thể viết bằng JavaScript với Node.js, hoặc chỉ đơn giản là "bật" các dịch vụ khác nhau trong các trung tâm dữ liệu đám mây. Frontend đã không còn phụ thuộc nhiều vào các hạn chế của backend và đã phát triển mạnh mẽ. Và nhìn vào sự phổ biến của nó, nó thực hiện vai trò của mình rất tốt.
Bây giờ nghề nghiệp từ một Frontend developer đã chuyển thành Frontend Fullstack Software Engineer. Frontend developer hiện đại cần hiểu cách hoạt động của cơ sở dữ liệu để làm việc hợp lý với nó. Hiểu HTML & JavaScript, NginX để cấu hình hoạt động của frontend với backend. Cả Docker cũng cần — đó là tiêu chuẩn ngành giờ đây.
Phát triển hiện đại khôn
GO TO FULL VERSION