HomeOur Team
Fullstack - Chuyện trò linh tinh

Fullstack - Chuyện trò linh tinh

By Trịnh Hữu Hoàng
Published in Others
December 11, 2022
7 min read

Tôi viết mục này thuần túy là cho vui, để ae chưa rõ định hướng nghề nghiệp lắm có thể có cái nhìn ở góc độ khác về nghề mình đang làm. Tôi cảm thấy tiếc cho những bạn chỉ đi làm, đến công ty, được giao việc cho cái gì thì làm cái đấy, mà chưa thực sự hiểu rõ mình làm ở mảng nào trong chuỗi giá trị hoặc không có định hướng cụ thể mảng công việc sẽ làm trong tương lai.

Chia các vai trò công việc trong quá trình phát triển phần mềm

Trước khi đi vào chi tiết, các vai trò tôi phân chia sẽ chưa đầy đủ hết. Anh em chấp nhận đại khái thôi nhé. Trong chạy thực tế, các vai trò được chia sau có thể thừa hoặc thiếu, cái đấy tùy hoàn cảnh. Không dự án nào như dự án nào. Okay, đi vào nào.

Untitled.png

Để đi từ một ý tưởng đến một ứng dụng dùng được, tôi chia như ảnh trên

  • User: người dùng trực tiếp ứng dụng, hay là người yêu cầu các chức năng của ứng dụng
  • Computer: máy tính mà ta đặt ứng dụng lên
  • Product manger: người hiểu rõ về nghiệp vụ hệ thống, các tính năng quan trọng của ứng dụng, làm việc trực tiếp với **người dùng(user)** để phân rã ra các yêu cầu có thể thực hiện được, làm việc với designer để biến những ý hiểu đấy thành một bản vẽ thiết kế.
  • Designer: Thiết kế ra bản vẽ ứng dụng. Hiểu được các chức năng của ứng dụng, cách chúng hoạt động, giao diện sử dụng, trải nghiệm người dùng. Đó là những cái họ cân nhắc, rồi đầu ra là một bản thiết kế mà dev có thể hiểu và làm theo được.
  • Frontend dev và Backend dev: những người thực hiện xây dựng ứng dụng, cái này là công việc chính của anh em khi đi làm. Tôi không bàn nhiều nhé
  • Infra: Thuật ngữ của công việc này khác cơ [IT operation, sysadmin… ], nhưng tôi gọi là Infra (viết tắt của infrastructure - cơ sở hạ tầng). Người phụ trách việc đưa source code của chúng ta lên server production. Đầu ra của backend dev, frontend dev chỉ là bộ mã nguồn thôi. Nếu không đưa lên server chạy thì chúng chả khác gì những dòng chữ viết cho vui.
  • Hardware: Tôi chưa đi đến đoạn này nên sẽ nêu công việc của họ. Người phụ trách về phần cứng của server. Bản chất server là một cái máy tính, bạn đặt ở một chỗ, cho nó chạy 24/24h. Một ngày nó chết, toàn bộ ứng dụng của bạn sập. Ông phụ trách hardware sẽ là người chịu trách nhiệm cho hệ thống đấy hoạt động ổn định. Tuy nhiên giờ mọi người dùng cloud server như AWS, GCP, Azure rồi, nên ít động đến đây.

Thực tế thì sao nhỉ?

Đó là một câu hỏi mà tôi muốn chia sẻ câu trả lời của mình. Khi bạn làm một công việc đủ lâu dưới một title công việc nào đó đi nữa, thực ra bạn sẽ còn phải làm nhiều hơn thế. Đi vào ví dụ cụ thể nha.

Designer: Khi bạn được dán một cái nhãn là Designer chẳng hạn, mặc định công việc của bạn sẽ làm là trao đổi với Product manager hiểu yêu cầu, thiết kế ứng dụng, chuyển giao lại thiết kế cho phía frontend và giải thích các chức năng này.

Untitled 1.png

Nhưng cũng có trường hợp, designer lại là người đi nói chuyện trực tiếp với User

Untitled 2.png

Frontend

Ví dụ bạn chỉ làm frontend, và làm cực kì tốt.

Untitled 3.png

Sau một thời gian làm, bạn sẽ gặp những design tốt, design tệ. Kinh nghiệm bạn tích lũy, đến một lúc mà bạn nhìn một giao diện là thấy ngứa mắt luôn. Bạn tự nhảy số ra giao diện theo bạn là “đẹp”. Woa la, bạn tự thiết kế giao diện, tự code =]]

Untitled 4.png

Tuyệt vời hơn nữa, bạn làm việc trực tiếp với khách hàng luôn. Vì sao, vì bạn làm lâu rồi, qua tay các thiết kế, đã hiểu được những yêu cầu nào thì sử dụng thiết kế gì. Bạn đã có “tiêu chuẩn đẹp” của mình. Bạn hiểu được nhu cầu của KH và thực hiện chúng với một thiết kế “vừa lòng khách hàng”

Untitled 5.png

Backend

Vị trí này nó hơi thú vị. Đây là backend dev. Nhiệm vụ đơn thuần là code server, xây dựng cơ sở dữ liệu, thiết kế csdl, tối ưu hóa code, server chạy trơn tru, mượt, không bug, chịu tải hàng triệu người dùng. Tuyệt vời

Untitled 6.png

Và đây cùng là backend dev

Untitled 7.png

Ủa alo, kéo thêm 1 tí chỗ Infra kìa. Vâng, đây vẫn là backend dev, nhưng xịn hơn. Vì đơn giản, “job title” của họ vẫn là backend dev. Nhưng họ làm nhiều hơn.

Và thế là, đây cũng là backend dev

Untitled 8.png

Thuật ngữ chuyên ngành người ta gọi là DevOps cơ =]]

Nhưng sao tôi lại gọi thế. Vì có những người làm hết từ cột backend trở xuống, nhưng họ chỉ tự nhận mình là backend dev. Cuộc sống mà, dev this dev that

Dĩ nhiên, thời thế thay đổi rồi. Giờ mọi người thích dùng serverless. Toàn bộ cái khó khăn, chúng ta để cho các gã khổng lồ xử lý. Vậy nên coi như giờ ta còn 4 vị trí chính nhỉ :D

Untitled 9.png

Chém gió chút, tại sao có serverless rồi, mà ban đầu tôi vẫn cố tình nhét Hardware, Infra vào từ đầu làm gì. Tại, sẽ đến một điểm giới hạn, mà chi phí cho serverless quá tốn kém. Khi đó mà người ta sẽ không còn dùng serverless nữa mà quay về phương pháp truyền thống.

Ví dụ này nhé. Để chạy một dịch vụ serverless cấu hình 4 CPUs, RAM 8GB chạy cả tháng, 1 server dev, 1 server production. Bạn mất đâu đó khoảng 50$ ~ 1tr/tháng. Dùng 2 năm ~24tr. Bằng số tiền đấy, ta build được một chiếc PC 8nhân 16 luồng, ram 32GB ⇒ hệ thống mạnh mẽ mua một lần, dùng 3-4 năm. Đấy là xét riêng chi phí cấu hình. Chứ serverless dùng vẫn sướng mà, các cái khó khăn từ vạch Serverless đổ xuống là bạn không phải nghĩ. Chi phí cũng ít hơn việc thuê riêng ông IT operation. Về phía coder thì đấy là server KH trả tiền, nên mình không xót. Chứ ông nào tự dựng server sẽ thấy xót, rồi lại lọ mọ tìm hiểu cách dùng DDNS trỏ về máy local cho xem. Dựng một thời gian, có khi lại quay về serverless vì máy chạy cả ngày → xót; server bị hacker ddos cho lại nghẻo; … vân vân và mây mây. Những vấn đề sẽ được giải quyết bằng tiền, cụ thể là rất nhiều tiền đóng cho GCP, AWS, Azure =]]]

Fullstack

Lời đầu của chủ đề fullstack là không có cái gọi là fullstack. Cũng hơi mâu thuẫn cho cái tiêu đề nhỉ.

Bốc cái định nghĩa tôi google trên mạng nhé.

A full stack web developer is a person who can develop both client and server software.

Okay vậy tôi sẽ lấy ví dụ về một số kiểu fullstack

Kiểu cơ bản: làm được cả frontend và backend

Untitled 10.png

Bất cứ lập trình viên nào, khi mà làm được cả hai đều được gọi là fullstack hả? Có và không

Có, theo định nghĩa là thế. Tôi làm được cả hai cơ mà, cớ gì mà không công nhận. Ờ thì tôi công nhận cho bạn đó. Vui lên nào.

Không → ông dev nào làm 5 năm kinh nghiệm chả ít hay nhiều biết một chút về phía bên kia. Ví dụ ông chuyên làm Backend, vẫn dựng được html/css/js đơn giản. Hoặc ông code frontend cũng sẽ nghịch chút backend (đặc biệt là giờ code js hay làm cả hai lắm, vì học code 1 ngôn ngữ chứ nhiêu)

Giờ sao, ta gọi tất cả senior là fullstack developer à =]]

Theo số liệu thống kê mới nhất 2022 của ITviec

Untitled 11.png

Link: Báo Cáo Lương IT 2022-2023: Theo vị trí, ngôn ngữ lập trình và … (itviec.com)

Fullstack thậm chí lại thấp hơn làm thuần Backend ⇒ không phải làm được nhiều đã ngon hơn đâu

Tôi không so sánh được với Frontend do bản preview này nó để số năm kinh nghiệm không bằng nhau, mức lương lại còn lệch xa nữa.

Fullstack this fullstack that

Cũng là fullstack nhưng mà nó lạ lắm

Đọc đến chỗ này có vẻ hơi mông lung nhỉ. Thế nên tôi đặt tiêu đề của bài viết là trò chuyện linh tinh. Cũng không theo khuôn mẫu nào cả. “Ai rồi cũng fullstack thôi” → Tôi muốn chia sẻ một số định hướng nghề nghiệp mà các bạn, các em mới vào nghề có thể lựa chọn.

Bắt đầu với cơ bản đi.

Untitled 12.png

Công việc ở mảng này cũng rõ rồi, vừa làm giao diện đúng yêu cầu, vừa thiết kế được server. Mức độ hoàn thiện khi làm mảng này, yêu cầu tôi đặt ra là client làm đẹp, nhanh + server chạy mượt không bug, tối ưu hiệu năng.

Khi làm mảng này, tùy người mà nghiên về backend hoặc frontend nhiều hơn.

Đôi khi đá chút sang design, nếu nghiên về frontend nhiều hơn.

Thậm chí vì làm lâu nên được PM dự án luôn. Cái này cũng thường xảy ra khi làm trong một team nhỏ, có 3 ông dev làm với nhau trong dự án, thế thì bốc 1 ông lên làm PM, ví dụ thế. Kiểu 1 ông chuyên frontend, một ông chuyên backend, một ông fullstack vừa làm vừa duyệt code của 2 ông kia, đồng thời làm quản lý dự án, design hệ thống. Tầm nhìn của ông này sẽ quyết định sản phẩm đầu ra.

Làm nhiều hơn nữa thì ông bên trên làm việc trực tiếp với KH luôn.

Untitled 13.png

Đấy, 2 ông cùng làm fullstack, một ông cung cấp nhiều giá trị hơn, chả lẽ đặt 2 ông cùng 1 job title, cùng hưởng lương như nhau hay sao.

Ở chiều ngược lại

Untitled 14.png

Bạn có thể nghiêng nhiều hơn phía backend. Code bạn tạo ra được cập nhật luôn lên server mà không phải chờ đợi một ai. Server vận hành trơn tru, luôn sẵn sàng. Tuyệt vời.

Untitled 15.png

Untitled 16.png

Untitled 17.png

Tùy sở thích mà có thể lựa chọn điểm dừng của mình. Nghiên cứu sâu hơn phần mình làm việc

Kiểu quái vật nhất mà tôi thấy. Một người kiêm nhiệm hết tất cả

Untitled 18.png

Như trên hơi khó

Untitled 19.png

Đây thì thực tế hơn đấy. Trường hợp phổ biến của những nhà phát triển độc lập. Họ có ý tưởng ban đầu, tự thiết kế, tự làm, sử dụng serverless để dựng server.

Bạn đang có một ý tưởng? Bạn muốn tạo một app lên appstore, play store? Bạn chưa biết bắt đầu từ đâu? Học fullstack đi chứ còn làm gì nữa =]]]

Kết luận

Qua bài này, tôi cũng chẳng phải để giải thích fullstack hay giải quyết sự nhầm lẫn fullstack gì cả. Cái tôi muốn là các bạn, các em mới vào nghề, có cái nhìn tổng quan về công việc mình làm. Qua đó, lên kế hoạch định hướng mảng mình sẽ học. không nhất thiết phải học hết đâu, làm chuyên một thứ giỏi thôi cũng tốt lắm rồi. Khi bạn làm được rồi thì bạn thích gọi bản thân là gì cũng được, fullstack, backend dev, frontend dev… tôi cũng đếch quan tâm. Kết lại là bạn muốn đóng góp gì trong chuỗi giá trị. Hãy làm tốt nó.


Tags

Chuyện-trò-linh-tinh

Share

Trịnh Hữu Hoàng

.NET Developer

Expertise

C#
ReactJs
PHP
Python

Social Media

fb

Related Posts

Others
.NET MAUI - part 1 -Bắt đầu với Hello world
December 11, 2022
1 min
© 2023, All Rights Reserved.
Powered By

Quick Links

HomeOur Team

Social Media