thắc mắc Làm outsource có bị khinh rẻ không

Bạn đọc lại sẽ thấy mình không nói là outsource không giỏi.
Mình nói là outsource chuyển project liên tục là không nên. Bạn phải đủ thời gian để làm, để hiểu để nắm một tech stack đã. Chuyển liên tục qua các dự án, bạn phải học liên tục nhưng lại không học sâu được. Nên sẽ dẫn đến việc không nắm dc các best practice, không biết edge case.
Những cái bạn nói cũng không thể tích lũy được nếu bạn chuyển project liên tục.

Thêm nữa tại sao vim style lại đc cộng điểm. Tại sao dùng vim thì lại được điểm cao hơn người dùng vs code.


Sent from Samsung Note 20 Ultra via nextVOZ

Quan trọng là bạn làm cái gì trong project chứ ko phải là bạn làm bao nhiêu project, bạn làm 5 năm 1 project mà chỉ maintain/config thôi thì ko bằng ngta làm 6 tháng 1 project xịn xò A -> Z.

Vim syntax là tôi quan sát thấy đa phần vim-er đều code nhanh hơn rất nhiều so với người ko biết. Tôi code bằng Vim plugin trên VSCode thôi ko hardcore bằng VIM.
 
Ví dụ:
Một vài điểm tôi sẽ muốn trao đổi để có thể hiểu thêm seniority của 1 engineer:

Working style
  • Anh có tự tin nếu làm việc với techstack ko thân thuộc ko? Vd như chuyển từ Flask/Python/Postgres sang Spring/Java/Oracle?
  • Trường hợp phải handle 2-3 projects/repos cùng lúc thì anh có gặp khó khăn gì khi vừa code Nodejs, vừa code .Net hay vừa maintain Restful vừa impl GraphQL ko?
  • Mức độ ảnh hưởng đến người xung quanh như mentor, knowledge sharing, tech-talk, guide/document, recommendation... Tóm gọn lại là người xung quanh học hỏi từ anh cái gì.

Software in General
  • Về Interprocess communication, kinh nghiệm và cách lựa chọn (MessageQueue, shared db, file, RPC, Direct http, socket...)
  • Về Synchronization, khi nào dùng Mutex, khi nào dùng RwLock, Mem Cell... Hiểu biết về data race, threading, async/event-loop...
  • Indexing, optimize query, connection pool, sharding, replicate...
  • Cơ bản và kinh nghiệm giữa NoSQL và SQL.

Coding style:
  • Cách cấu trúc project, chia folder, format code, dependencies
  • Phong cách open/review PR
  • Logic trong code như quá dài, quá phức tạp, quá khó sử dụng, ko mở rộng....
  • Cách sử dụng data structure: Khi nào dùng hashset, khi nào dùng Queue/Deque...
  • Chỗ nào cần đọc file, chỗ nào cần dùng Mem, chỗ nào cần lưu db, quản lý pool ra sao...
  • .... quá nhiều thứ khác...
  • VIM style +1 điểm

Problem solving
Thường một người có kinh nghiệm sẽ tìm root cause và phân tích sự kiện rất nhanh.

Ví dụ khi server bị lag, chậm, hay sập hẳn, thì sẽ narrow down vấn đề từ host/doman -> high load -> resource usage -> bottleneck point -> root cause chẳng hạn.
Hoặc vd bị dính lỗi ko thể cập nhật dữ liệu cho user profile được, thì sẽ f12 -> api inspect -> cat log file -> jump to the block of code nhanh hơn junior vì họ biết chỗ nào cần log cái gì.

Software Design
Khi mà có yêu cầu làm service abc gì đó, senior sẽ có rất nhiều kinh nghiệm để chọn giải pháp tốt/ phù hợp.

  • Nhiều service cần read 1 lượng data khá giống nhau -> message publish/subcribe.
  • Service ko cần real-time, ko critical và có thể làm dần -> queue.
  • Service cần call endpoint liên tục -> Batch processing, batch call, bulk update...
  • Data cần rất nhiều filter -> Search Index.
  • Data đơn giản nhưng số lượng record lớn, đọc nhiều -> NoSQL, In-mem db.
  • Yêu cầu ổn định, càng ít runtime bug càng tốt, high reliable, high availabity -> Nên bắt đầu bằng một ngôn ngữ đã đc battle-tested, strong typed, ngược lại nếu cần fast delivery, productivity -> NodeJs.
.... Còn nhiều nữa...


Bonus:
  • Một số kn về git: merge/rebase, cherry pick, stash, branch, PR...
  • Scripting như Shell, bash, docker, linux cmd, operation...

Viết đại vậy thôi (ko đầy đủ) để anh thấy là tất cả những thứ trên đều thu lượm được từ kinh nghiệm, chứ chẳng phải do làm lâu năm 1 ngôn ngữ / framework nào đó. Anh đã mạnh thì đi đâu cũng mạnh, outsource product startup ko thành vấn đề.

Thật sự không hiểu cái kinh nghiệm bạn đưa ra là gì luôn. Học tạp nham như thế được gọi là senior à? Nếu bạn muốn viết thêm các plugin hoặc viết 1 lib chung cho project mà không có hiểu biết đủ mạnh và thân thuộc với 1 ngôn ngữ thì bạn viết kiểu gì ?
 
Quan trọng là bạn làm cái gì trong project chứ ko phải là bạn làm bao nhiêu project, bạn làm 5 năm 1 project mà chỉ maintain/config thôi thì ko bằng ngta làm 6 tháng 1 project xịn xò A -> Z.

Vim syntax là tôi quan sát thấy đa phần vim-er đều code nhanh hơn rất nhiều so với người ko biết. Tôi code bằng Vim plugin trên VSCode thôi ko hardcore bằng VIM.
Ở đây không nói là càng làm lâu càng giỏi, ở đây đang nói là bạn cần làm thời gian đủ dài để hiểu, để master một cái tech stack.

Phải trong cùng 1 điều kiện so sánh, kiểu 2 bạn cùng tư chất, cùng vào một công ty outsource, 1 bạn làm dự án ODC theo sản phẩm 2 năm. 1 bạn làm 3 dự án 6 tháng, 1 năm 6 tháng 3 ngôn ngữ. Các điều kiện ví dụ như đồng nghiệp như nhau, chứ không đưa ra kiểu 6 tháng mà đồng nghiệp xịn xò, còn 2 năm không cho làm gì chỉ chỉnh css với config.

Khác biệt sẽ càng rõ ràng nếu 2 bạn đó là fresher.




Sent from Samsung Note 20 Ultra via nextVOZ
 
Ở đây không nói là càng làm lâu càng giỏi, ở đây đang nói là bạn cần làm thời gian đủ dài để hiểu, để master một cái tech stack.

Phải trong cùng 1 điều kiện so sánh, kiểu 2 bạn cùng tư chất, cùng vào một công ty outsource, 1 bạn làm dự án ODC theo sản phẩm 2 năm. 1 bạn làm 3 dự án 6 tháng, 1 năm 6 tháng 3 ngôn ngữ. Các điều kiện ví dụ như đồng nghiệp như nhau, chứ không đưa ra kiểu 6 tháng mà đồng nghiệp xịn xò, còn 2 năm không cho làm gì chỉ chỉnh css với config.

Khác biệt sẽ càng rõ ràng nếu 2 bạn đó là fresher.




Sent from Samsung Note 20 Ultra via nextVOZ

Rồi một ngày chủ bạn bảo, refactor build lại toàn bộ bằng xyz thì bạn làm thế nào ? Rời CTY ? Bởi vì bạn là master abc và ko biết xyz ?
 
Thật sự không hiểu cái kinh nghiệm bạn đưa ra là gì luôn. Học tạp nham như thế được gọi là senior à? Nếu bạn muốn viết thêm các plugin hoặc viết 1 lib chung cho project mà không có hiểu biết đủ mạnh và thân thuộc với 1 ngôn ngữ thì bạn viết kiểu gì ?

Càng rõ những thứ trên thì càng có khả năng cao viết ra đc lib xịn, take care đầy đủ edge, structure đẹp, ít issue, re-use hay optimize cao.

Ở đây không nói là càng làm lâu càng giỏi, ở đây đang nói là bạn cần làm thời gian đủ dài để hiểu, để master một cái tech stack.

Phải trong cùng 1 điều kiện so sánh, kiểu 2 bạn cùng tư chất, cùng vào một công ty outsource, 1 bạn làm dự án ODC theo sản phẩm 2 năm. 1 bạn làm 3 dự án 6 tháng, 1 năm 6 tháng 3 ngôn ngữ. Các điều kiện ví dụ như đồng nghiệp như nhau, chứ không đưa ra kiểu 6 tháng mà đồng nghiệp xịn xò, còn 2 năm không cho làm gì chỉ chỉnh css với config.

Khác biệt sẽ càng rõ ràng nếu 2 bạn đó là fresher.

Vẫn quay lại câu quote là quan trọng 2 bạn đó đã làm những gì, 1 năm 6 tháng 3 ngôn ngữ mà contribute đủ lớn thì thua gì người bạn kia?

Túm cái váy là muốn mạnh, muốn senior thì phải vừa biết rộng, vừa hiểu sâu. Chứ ko phải kiểu senior tự phong bằng số năm trên techstack.
 
Thật sự không hiểu cái kinh nghiệm bạn đưa ra là gì luôn. Học tạp nham như thế được gọi là senior à? Nếu bạn muốn viết thêm các plugin hoặc viết 1 lib chung cho project mà không có hiểu biết đủ mạnh và thân thuộc với 1 ngôn ngữ thì bạn viết kiểu gì ?
Bạn đang định nghĩ senior coder trong 1 công ty os thì phải? Senior trong cty product người ta thường hiểu biết rộng, thiết kế hệ thống sao cho dễ scale, maintain,... kết hợp những công nghệ nào chứ chẳng ai quan tâm bạn có hiểu biết những cái sâu bên trong 1 cái ngôn ngữ làm gì khi mà hiếm khi dùng, vừa đủ là được
 
Bạn đang định nghĩ senior coder trong 1 công ty os thì phải? Senior trong cty product người ta thường hiểu biết rộng, thiết kế hệ thống sao cho dễ scale, maintain,... kết hợp những công nghệ nào chứ chẳng ai quan tâm bạn có hiểu biết những cái sâu bên trong 1 cái ngôn ngữ làm gì khi mà hiếm khi dùng, vừa đủ là được
Cái này bạn có nhầm lẫn không ? Khi bạn cần phải tối ưu performance thì bạn phải hiểu sâu về tất cả techstack bạn đang dùng chứ. Bạn vừa có nodejs vừa có C# vừa có java vừa có php thì bạn định tối ưu cả hệ thống kiểu gì? Hay bạn cần chờ 5 năm trải nghiệm hết các ngôn ngữ kia rồi mới làm ?
 
Cái này bạn có nhầm lẫn không ? Khi bạn cần phải tối ưu performance thì bạn phải hiểu sâu về tất cả techstack bạn đang dùng chứ. Bạn vừa có nodejs vừa có C# vừa có java vừa có php thì bạn định tối ưu cả hệ thống kiểu gì? Hay bạn cần chờ 5 năm trải nghiệm hết các ngôn ngữ kia rồi mới làm ?
Tối ưu 1 hệ thống lớn thường là tối ưu từ trên xuống, thiết kế các components kiểu sao cho hiệu quả, bước cuối cùng mới là đi tối ưu những thứ đặc trưng của ngôn ngữ, bởi vì code ngu lắm, ko có kiến thức cơ bản về datastructure,.. mới đủ làm chậm đi cả hệ thống
 
Rồi một ngày chủ bạn bảo, refactor build lại toàn bộ bằng xyz thì bạn làm thế nào ? Rời CTY ? Bởi vì bạn là master abc và ko biết xyz ?
Thái độ là không muốn tiếp chuyện rồi

1) Khi bạn đủ giỏi, bạn có thể rời công ty nếu không thấy hợp nữa, chả việc gì phải xoắn cả. Ngoài kia không thiếu công ty nếu bạn đủ giỏi và chuyên nghiệp. Còn mang tư tưởng chủ tớ thì còn bị sếp chửi và bóc lột dài dài.
2) tại sao phải refactor, build lại toàn bộ? Ví dụ không logic và rất con nít.
Khi muốn refactor và build lại, thì phải mang ra giải thích tại sao nó chậm, hệ thống mới có gì có thể khắc phục được, rồi sau đó mình tìm hiểu. Và thường người ta sẽ thay thế dần dần.

Từ đầu câu chuyện là đừng nhảy project quá nhanh, phải nắm vững đã chứ không phải là stick vào một cái và không làm những cái khác.

Nhiều bạn đọc hiểu không tốt mà vẫn làm developer được nhỉ?

Sent from Samsung Note 20 Ultra via nextVOZ
 
Cái này bạn có nhầm lẫn không ? Khi bạn cần phải tối ưu performance thì bạn phải hiểu sâu về tất cả techstack bạn đang dùng chứ. Bạn vừa có nodejs vừa có C# vừa có java vừa có php thì bạn định tối ưu cả hệ thống kiểu gì? Hay bạn cần chờ 5 năm trải nghiệm hết các ngôn ngữ kia rồi mới làm ?

Performance nào đến từ ngôn ngữ cho tôi cái ví dụ?
 
Tối ưu 1 hệ thống lớn thường là tối ưu từ trên xuống, thiết kế các components kiểu sao cho hiệu quả, bước cuối cùng mới là đi tối ưu những thứ đặc trưng của ngôn ngữ, bởi vì code ngu lắm, ko có kiến thức cơ bản về datastructure,.. mới đủ làm chậm đi cả hệ thống
Quan điểm của mình khác. Kiến trúc hệ thống là từ tất cả các component lẫn cấu trúc code của project lẫn tối ưu xử lý của code. Chúng ta không cùng view không tranh luận được. Trong 1 hệ thống mà dùng quá nhiều ngôn ngữ hoặc techstack thì mình không cho là tốt vì kiến thức quá phân mảnh và mọi người không thể giúp nhau tiến bộ được.
 
Mình cũng không tranh luận thêm mệt, lời khuyên của mình cho các bạn fresher/junior là không nên làm ở các cty outsource mà bắt bạn nhảy project với các ngôn ngữ/vai trò liên tục.

Kiểu lúc bắt làm frontend với react, qua dự án khác thì bắt làm .net rồi lại bắt làm mobile, thậm chí không theo dc dự án đến lúc go live vì nó bị khách hàng drop. ( đã gặp một bạn bị kiểu này ở cty D..)


Sent from Samsung Note 20 Ultra via nextVOZ
 
Thái độ là không muốn tiếp chuyện rồi

1) Khi bạn đủ giỏi, bạn có thể rời công ty nếu không thấy hợp nữa, chả việc gì phải xoắn cả. Ngoài kia không thiếu công ty nếu bạn đủ giỏi và chuyên nghiệp. Còn mang tư tưởng chủ tớ thì còn bị sếp chửi và bóc lột dài dài.
2) tại sao phải refactor, build lại toàn bộ? Ví dụ không logic và rất con nít.
Khi muốn refactor và build lại, thì phải mang ra giải thích tại sao nó chậm, hệ thống mới có gì có thể khắc phục được, rồi sau đó mình tìm hiểu. Và thường người ta sẽ thay thế dần dần.

Từ đầu câu chuyện là đừng nhảy project quá nhanh, phải nắm vững đã chứ không phải là stick vào một cái và không làm những cái khác.

Nhiều bạn đọc hiểu không tốt mà vẫn làm developer được nhỉ?

Sent from Samsung Note 20 Ultra via nextVOZ
Vậy thì chắc cứ học PHP sợ éo gì. Có ai đi refactor mấy cái sever dùng PHP đâu. Vừa dễ vừa có tiền. Cũng khỏi cần học SPA làm con mẹ gì hết, cứ làm từng page rồi cho user chuyển trang.

Lấy ví dụ như việc tối ưu truy vấn dữ liệu bằng C# và Java và PHP. Cái này nó có giống nhau không ?
Vậy tại sao tất cả hệ thống không viết bằng c++ ? Vì sao lại đẻ ra nhiều ngôn ngữ trong khi ngôn ngữ thế hệ sau chậm hơn thế hệ trước ?
 
Query performance lq tới ngôn ngữ? chà chà, thú zị, tiếp đi bạn ơi. Nói sâu thêm tí đi nào :)
Bạn định dùng raw SQL trong code hết sao. Mình không thích thế. Mình hay dùng LINQ và Force Order để tối ưu việc truy vấn, quá phức tạp thì tách ra. Bên PHP thì bạn sẽ làm thế nào ?
1 ví dụ khác là mình thích dùng Parallel để xử lý file excel lớn. Nhưng hệ thống của bạn đang chạy PHP hoặc Java 6 thì bạn định dùng kiểu gì ? Bạn cần bao nhiêu thời gian nữa để tìm ra cách viết hợp lý nhất cho việc này? Công ty trả tiền cho bạn chỉ để bạn suốt ngày nghiên cứu và tìm kiếm thôi à ?
 
Vậy thì chắc cứ học PHP sợ éo gì. Có ai đi refactor mấy cái sever dùng PHP đâu. Vừa dễ vừa có tiền. Cũng khỏi cần học SPA làm con mẹ gì hết, cứ làm từng page rồi cho user chuyển trang.


Vậy tại sao tất cả hệ thống không viết bằng c++ ? Vì sao lại đẻ ra nhiều ngôn ngữ trong khi ngôn ngữ thế hệ sau chậm hơn thế hệ trước ?
Mình cho rằng đánh đổi 1 phần hiệu năng để đạt được việc quản lý code tốt hơn và giảm bug. Nhưng như mấy bạn trên bảo phải học các thể loại ngôn ngữ, các thể loại db, các thể loại thư viện thì việc maintain 1 hệ thống lộn xộn như thế thì tốt hơn là chỉ dùng C++ à.
 
Bạn định dùng raw SQL trong code hết sao. Mình không thích thế. Mình hay dùng LINQ và Force Order để tối ưu việc truy vấn, quá phức tạp thì tách ra. Bên PHP thì bạn sẽ làm thế nào ?
1 ví dụ khác là mình thích dùng Parallel để xử lý file excel lớn. Nhưng hệ thống của bạn đang chạy PHP hoặc Java 6 thì bạn định dùng kiểu gì ? Bạn cần bao nhiêu thời gian nữa để tìm ra cách viết hợp lý nhất cho việc này? Công ty trả tiền cho bạn chỉ để bạn suốt ngày nghiên cứu và tìm kiếm thôi à ?

Lại còn bảo dùng ORM để tối ưu query nữa cơ.
1. Php ko có ORM hay gì?
2. Khi system bị bottleneck ở db do query performance thì bạn debug bằng cái gì, bạn có biết vấn đề hay gặp của Query performance ở đâu và giải quyết bằng cái gì ko? Hay lại "do ko dùng Linq"
 
Lại còn bảo dùng ORM để tối ưu query nữa cơ.
1. Php ko có ORM hay gì?
2. Khi system bị bottleneck ở db do query performance thì bạn debug bằng cái gì, bạn có biết vấn đề hay gặp của Query performance ở đâu và giải quyết bằng cái gì ko? Hay lại "do ko dùng Linq"
1. Php có ORM nhưng bạn sẽ phải tìm cách intercept để can thiệp vào SQL nó sinh ra. Việc này bạn có cần thời gian tìm hiểu không ?
2. bottleneck ở DB thì vẫn phải xác định câu SQL được sinh ra để xem excution plan rồi. Nhưng mình đã nói bên trên rồi. Mình dùng force order là chính để tối ưu thứ tự join của các bảng. Nhưng với PHP thì mình phải bỏ thêm rất nhiều thời gian nữa để đọc hiểu ORM của nó và thực hiện intercept phù hợp. Mỗi ngôn ngữ thêm vào hệ thống mình đều phải làm thế? Tại sao mình cứ phải đi thực hiện 1 việc như thế chỉ để dọn rác vì thằng leader nó cho phép mỗi service lại dùng 1 ngôn ngữ khác nhau ?
 
Mình cho rằng đánh đổi 1 phần hiệu năng để đạt được việc quản lý code tốt hơn và giảm bug. Nhưng như mấy bạn trên bảo phải học các thể loại ngôn ngữ, các thể loại db, các thể loại thư viện thì việc maintain 1 hệ thống lộn xộn như thế thì tốt hơn là chỉ dùng C++ à.
Bài toán về hiệu năng đã có định luật Moore lo. Bạn hiểu chứ ? Ngôn ngữ sinh ra là để giao tiếp, sau này sẽ có loại ngôn ngữ lập trình còn dễ hơn như Python nữa, những việc bạn cần làm có khí chỉ cần nói cho máy tính hiểu và nó sẽ biên dịch ra binary chính xác như ý bạn muốn. Nên chả lạ gì nếu đùng 1 cái ông master xyz gì đấy mất việc.

Còn vụ chỉ dùng C++ ? Mời bạn viết Web bằng C++.
 
Back
Top