Categories
Dev's Corner

Các mẹo hữu ích để debug Java nhanh hơn

Bên cạnh việc viết code hiệu quả, thành thạo các kỹ thuật debug java là một trong những điều hữu ích khiến cuộc sống của lập trình viên Java dễ thở hơn, đồng thời đây là kỹ năng giúp phân biệt được một developer xuất sắc.

Điều này còn đặc biệt quan trọng trong môi trường lập trình ngày nay, nơi thế giới phần mềm đang ngày càng chuyển sang các kiến ​​trúc phân tán và bất đồng bộ.

Lỗi phần mềm là không thể tránh khỏi cho nên việc phát hiện và sửa lỗi trong các bản build phức tạp ngày càng trở nên khó nhằn.

Quá trình debug java thậm chí là một thử thách cam go khi ta chuyển sang môi trường production.

Làm thế nào lập trình viên Java có thể tìm ra nguyên nhân gốc của bugs và nhanh chóng giải quyết chúng
Làm thế nào lập trình viên Java có thể tìm ra nguyên nhân gốc của bugs và nhanh chóng giải quyết chúng? Ảnh: Kevin Ku – Pexels

Gambaru giới thiệu cùng bạn bài viết trên Medium tập hợp một số mẹo hiệu quả nhất để debug các ứng dụng Java trong môi trường development và production.

Các mẹo Debug Java nhanh hơn

Sử dụng Breakpoints

Breakpoints là một tính năng đơn giản nhưng quan trọng, tạo nền tảng cho quá trình debug.

Breakpoints cho phép tạm dừng thực thi ứng dụng tại vị trí nghi ngờ bị lỗi để ta có thể phân tích trạng thái chương trình, biến đầu vào, logic và tìm hiểu lý do tại sao code lại lỗi.

Mỗi trình debug cung cấp một số loại breakpoints, bao gồm conditional breakpoints, exception breakpoints, watch points, và trace points.

Tìm hiểu cách thức và thời điểm áp dụng các loại breakpoints khác nhau có thể làm cho quá trình debug dễ dàng hơn.

Một số công cụ hiện đại còn hỗ trợ các breakpoints không gián đoạn (non-breaking breakpoints).

Điều này cho phép ta đặt các breakpoints trên code và thu thập dữ liệu debug mà không phải tạm dừng giai đoạn lập trình.

Dưới đây là ví dụ breakpoint trên Rookout web IDE, được đặt trên dòng 41.

Ví dụ breakpoint trên Rookout web IDE
Ví dụ breakpoint trên Rookout web IDE. Ảnh: Medium

Hiển thị cấu trúc logic

Tính năng này thường có sẵn trong chế độ xem variables và khá hữu ích khi theo dõi nội dung trong các lớp Java.

Khi bật tính năng này, danh sách biến hiển thị một array.

Điều này rất tiện dụng, đặc biệt trong trong trường hợp không có phương thức toString() – cho các đối tượng.

Hình dưới đây cho thấy tính năng này trên khung “hiển thị biến” (variable view) trên Eclipse IDE khi debug.

“Hiển thị biến” (variable view) trên Eclipse IDE khi debug
“Hiển thị biến” (variable view) trên Eclipse IDE khi debug. Ảnh: Medium

“Variable view” cũng cho phép sửa đổi trực tiếp các giá trị của biến trong quá trình debug.

Điều này giúp tiết kiệm thời gian đáng kể vì ta không phải khởi động lại phiên debug với dữ liệu đầu vào đã thay đổi.

Điều hướng thông qua Codebase

Mỗi trình debug Java cung cấp một số tính năng như run to line, step over, step into, step return, cho phép developers điều hướng qua các phần khác nhau của code khi debug.

Ngoài ra, hãy thử kết hợp những tính năng khác sau:

  • Drop to frame – Tính năng này được sử dụng để quay lại một điểm trong stack frame. Khi bỏ lỡ một điểm nào đó và cần quay ngược lại thời điểm đó, hãy sử dụng tính năng drop to frame.
  • Step filtering – Tính năng này cho phép bỏ qua một số package nhất định khi debug. Ta không cần phải điều hướng qua tất cả các lớp của hệ thống JDK khi chỉ cần đơn giản là lọc ra những phần không cần thiết phải debug.

Để cải thiện tốc độ điều hướng qua code, hãy thành thạo các phím tắt đến các chức năng quan trọng nhất.

  • F5 để step into
  • F6 để step over
  • F8 để chạy cho đến khi chạm đến breakpoint tiếp theo

Mặc dù các phím tắt debug có thể khác nhau tùy vào IDE, việc ghi nhớ chúng là quan trọng, giảm thiểu việc dùng chuột quá nhiều.

Học cách giải quyết Deadlocks

Deadlocks xảy ra khi hai hoặc nhiều luồng bị chặn vĩnh viễn sau khi hình thành một phụ thuộc vòng (cyclic dependency), như hình minh họa dưới đây.

Học cách giải quyết Deadlocks
Học cách giải quyết Deadlocks. Ảnh: Medium

Một tập hợp các luồng Java chờ một tài nguyên thuộc sở hữu của luồng kia, đây là tình huống có thể khiến ứng dụng bị đình trệ hoàn toàn.

Khá là khó để debug jstack deadlocks vì chúng không biểu hiện các triệu chứng như tăng đột biến trong bộ nhớ, CPU hoặc các thông số hệ điều hành khác.

Ngoài ra, chúng có xu hướng biểu hiện trong các điều kiện tồi tệ nhất, như heavy production load conditions (phải xử lý lượng lớn dữ liệu đồng thời), và rất khó để replicate.

Có nhiều cách khác nhau để khắc phục các tình huống deadlocks. Ta có thể capture các thread dump trong JVM.

Tùy vào kích thước của JVM mà việc này có thế tốn nhiều thời gian và công sức.

Một cách hay hơn là sử dụng một ứng dụng theo dõi giải pháp cung cấp mức độ JV và độ hiển thị theo mức độ code cần thiết để cô lập các thread deadlocks.

Có nhiều công cụ đột phá hiện có thể giải quyết vấn đề này – bao gồm một số trình debug tiên tiến cũng như các công cụ APM thương mại.

Sử dụng các công cụ này để có được khả năng hiển thị vào code Java và cô lập bugs giúp giảm thời gian đáng kể nên dành cho việc điều tra và phân tích.

Tận dụng các trình debug cho môi trường production

Quá trình debug điển hình mà hầu hết các lập trình viên thường tuân theo là: tái tạo môi trường → tái hiện bugs → tiến hành fix bugs.

Tuy nhiên, điều này không phải lúc nào cũng khả thi trong mọi môi trường production. Lúc này, developers có thể sử dụng các trình debug cho production.

Rookout là một trong những công cụ hiệu quả, cho phép thu thập dữ liệu debug từ các ứng dụng live mà không làm thay đổi trạng thái hoặc điều khiển luồng của ứng dụng.

Với Rookout, bạn có thể đặt các non-breaking breakpoints để lấy được full stack trace, nắm bắt các biến live hoặc bất kỳ dữ liệu ứng dụng nào khác cần để debug.

Tận dụng các trình debug cho môi trường productionTận dụng các trình debug cho môi trường production
Tận dụng các trình debug cho môi trường production. Ảnh: Medium

Vì vậy, thay vì sử dụng các giải pháp giám sát high-overload để debug cho môi trường production, hãy thử sử dụng các công cụ như Rookout để debug các ứng dụng live mà không cần deploy lại hoặc viết code mới.

Cho dù đang làm việc trên các ứng dụng không có máy chủ hoặc được đóng gói, Rookout sẽ là một bổ sung tuyệt vời cho kho công cụ debug.

Đừng quên về debug từ xa (remote debugging)

Phần lớn các IDE hàng đầu như NetBeans, Eclipse, Intellij IDEA Visual Studio hỗ trợ debug từ xa, một kỹ thuật cho phép debug code Java chạy trên máy khác.

Điều này đặc biệt quan trọng trong các tình huống trong đó hệ thống đích không hỗ trợ debug cục bộ hoặc trên các hệ thống thiếu tài nguyên để chạy trình debug.

Để thực hiện debug từ xa, ta cần cung cấp chi tiết cấu hình mà trình debug sẽ sử dụng để kết nối với cổng từ xa.

Ví dụ, nếu sử dụng Eclipse, đây là các cấu hình cần được cung cấp để khởi chạy phiên debug từ xa thành công.

Debug từ xa
Debug từ xa. Ảnh: Medium

Debug từ xa cũng có ích khi khắc phục bugs trong quá trình cài đặt môi trường production, khi lập trình viên cần kết nối với một ứng dụng và fix bugs từ xa.

Bugs là một câu đố lập trình, và có rất nhiều lập trình viên đã giải được những câu đố này mà không cần ở gần máy tính của họ
Bugs là một câu đố lập trình, và có rất nhiều lập trình viên đã giải được những câu đố này mà không cần ở gần máy tính của họ. Ảnh: Lukas – Pexels

Cuối cùng, hãy nhớ rằng việc debug đôi khi có thể mất nhiều thời gian hơn so với việc thực hiện thực tế.

Khi trau dồi kỹ năng debug Java, hãy luôn cố gắng viết code rõ ràng, dễ hiểu, tường minh, đặt tên biến và tên hàm có ý nghĩa – vì sau này khi debug sẽ đỡ cực hơn rất nhiều.

Và nếu mọi thứ dường như vượt ra khỏi tầm kiểm soát của mình, nghỉ ngơi một chút cũng không sao cả.

Mong bạn sử dụng thành công các chiến lược trên để trải nghiệm debug Java bớt “đau khổ” hơn nhé.

Happy coding!

Theo Ari Noman

Categories
All about Japan

Khẩu trang vải – Xu hướng mới ở Nhật Bản

Kỳ này, Gambaru mời bạn cùng đọc bài chia sẻ của một giáo viên người Nhật về xu hướng và thói quen mới của người dân Nhật Bản trước tình hình đại dịch Covid-19 vẫn đang diễn biến phức tạp.

Khẩu trang vải là xu hướng mới ở Nhật
Khẩu trang vải là xu hướng mới ở Nhật. Ảnh: john Applese – Unsplash

Trước sự lan rộng kéo dài của đại dịch Covid-19, người dân Nhật Bản tìm thấy được một thứ tuyệt vời: khẩu trang vải.

“Người Việt chúng tôi dùng khẩu trang vải lâu rồi nè. Có gì đặc biệt đâu chứ!”

Tôi chắc rằng bạn sẽ nói như vậy. Nhưng với người dân Nhật Bản, nó lại là một xu hướng mới.

Trong lúc số lượng khẩu trang y tế trên thị trường vẫn đang khan hiếm, người ta nhận thấy rằng khẩu trang làm bằng vải có thể tái sử dụng được, và cũng chẳng khó gì để làm.

Thế là nhiều người đã thử tự làm, cũng như giới thiệu cách làm lên các trang web và mạng xã hội.

Bây giờ bạn chỉ cần dạo một vòng trên internet là dễ dàng tìm thấy các bài viết, các video hướng dẫn làm khẩu trang vải.

Người Nhật chúng tôi đến thăm Việt Nam rất nhiều, nhưng tôi đoán là không ai chú ý đến việc rằng người Việt Nam thường đeo khẩu trang vải.

Thú thật, tôi nghĩ rằng biết đâu Việt Nam có thể kinh doanh lớn nhờ xuất khẩu trang vải sang Nhật Bản đấy chứ!

Gần đây, bà Koike Yuriko – thị trưởng Tokyo – luôn khiến nhiều người chú ý với những chiếc khẩu trang vải xinh xắn.

Bà cho biết đó là những chiếc khẩu trang hand-made do bạn bè, người ủng hộ và thậm chí là hàng xóm đã gửi tặng.

Thị trưởng Tokyo trông thật thời trang với những chiếc khẩu trang hand-made
Thị trưởng Tokyo trông thật thời trang với những chiếc khẩu trang hand-made. Ảnh: Tokyo Metropolitan Government

Ở một số khu vực nổi tiếng với các sản phẩm giấy truyền thống, người ta cũng đang thử mô hình sản xuất khẩu trang giấy mới. Chất liệu giấy ở đây được làm từ thực vật, tốt cho sức khỏe.

Thành phố Mino, tỉnh Gifu là một trong những địa điểm sản xuất giấy nổi tiếng tại Nhật.

Ở đó, có công ty nọ đã phát triển một loại vải mới để làm khẩu trang. Vải này được dệt bằng bột giấy. Khẩu trang của họ đều được làm bằng tay, có thể giặt và tái sử dụng được.

Đây là một sự đổi mới đáng chú ý về các sản phẩm giấy tại Nhật Bản.

Khẩu trang vải là một sự đổi mới lớn cũng như là một trong những thói quen mới đối với người dân xứ anh đào. Mặc dù, vẫn có một số người cho rằng nói chuyện khi đeo khẩu trang là không lịch sự.

Thói quen mới của người dân Nhật Bản
Thói quen mới của người dân Nhật Bản. Ảnh: Ketut Subiyanto – Pexels

Người Nhật vẫn phải tiếp tục chiến đấu với Covid-19, và đeo khẩu trang là một trong những hành động thiết thực để phòng ngừa virus lây lan trong cộng đồng.

Và tôi nghĩ rằng những chiếc khẩu trang vải xinh xắn, phong cách này có thể tạo chút niềm vui nho nhỏ trong cuộc sống khó khăn hiện giờ đấy.

Theo Gambaru

Categories
Gambaru News

Cách phỏng vấn Java Developer bao đậu

“Thành công là kết quả của sự chuẩn bị kỹ càng”

Trước buổi phỏng vấn, bạn thường chuẩn bị những gì?

Ôn lại sơ bộ kiến thức, hỏi những người bạn cùng ngành, hay tham khảo từ những người phỏng vấn trước đó? 

Việc xem qua những câu hỏi phỏng vấn giúp bạn kiểm tra lại mình còn thiếu sót ở đâu, phần nào lâu rồi chưa có cơ hội xem lại. Lấp đầy những “kẽ hở li ti” là cách tuyệt vời để trau dồi cũng như nâng cao kiến thức. 

Theo kinh nghiệm của Gambaru, người phỏng vấn thường bắt đầu với những khái niệm cơ bản, sau đó tùy biến vào câu trả lời của bạn để hỏi nâng cao.

Mong muốn đầu tiên của người phỏng vấn đó chính là nền tảng kiến thức vững chắc của bạn.

Những câu hỏi thường gặp khi phỏng vấn Java Developer

Dưới đây là những câu hỏi thường gặp trong buổi phỏng vấn vị trí Java Developer:

1. Hướng đối tượng OOP

  • Hàm get/set trong Object để làm mục đích gì
  • Encapsulate Data
  • Dependency Injection
  • So sánh Abstract và Interface
  • Extend và Implement
  • Data Structure hay sử dụng
  • Khác nhau giữa Association, Aggregation và Composition (Câu hỏi nâng cao)
  • Vẽ Observer Pattern (Dựa trên level yêu cầu của vị trí)
Xem qua những câu hỏi phỏng vấn là cách giúp bạn kiểm tra nhanh kiến thức
Xem qua những câu hỏi phỏng vấn là cách giúp bạn kiểm tra nhanh kiến thức. Ảnh: Christina Morillo – Pexels

2. Java

  • String là bất biến? Đúng hay sai
  • So sánh Strong và Weak Reference, cho ví dụ cụ thể
  • Tại sao Java không hỗ trợ Multiple Inheritance
  • JDK, JRE và JVM
  • Equals () và == trong Java khác nhau như thế nào
  • Sự khác biệt giữa Heap và Stack Memory trong Java
  • Java String Pool
  • Final, Finally, Finalize
  • Cách chia sẻ biến trong Multi Threads (Nếu trong CV bạn có liệt kê dùng Threads)
  • Cách sửa lỗi khi memory leak (Nếu trong CV có đề cập vấn đề về bộ nhớ)
  • Số lượng tối thiểu Threads cần cho một Java Thread deadlock
  • Giải thích về cách hoạt động của ConcurrentHashMap
Thread Signalling, tìm lỗi đoạn code này
Ví dụ: Thread Signalling, tìm lỗi đoạn code này. Ảnh: Java Specialists
Static Locks, Code phía dưới có gì không ổn
Ví dụ: Static Locks, Code phía dưới có gì không ổn? Cách sửa. Ảnh: Java Specialists

3. SQL

  • Delete và Truncate statements
  • Drop và Truncate commands
  • Subsets SQL
  • Join trong SQL
  • Char và Varchar2 datatype trong SQL
  • Phân biệt Clustered and Non-Clustered Index trong SQL
  • ACID property trong database

4. HTTP

  • HTTP
  • Stateless
  • Stateful
  • Stateless, Session, Logout Stateless
  • Cookie và Session khác nhau ở điểm nào
  • Oauth2, JWT
  • Sự khác biệt giữa SOAP REST? Cái nào tốt hơn và tại sao
  • Put, Patch, Delete, Head
  • Các loại HTTP Status Code

5. Scaling system

Ví dụ: Có 1 server scheduler count down lượt chọn player của 1 game ABC, mỗi user sẽ có 5 lần chọn players mỗi lần user sẽ có 30 giây suy nghĩ để chọn (có thời gian count down).

Làm thế nào để scaling ra 3 nodes cho server scheduler này?

6. Tư duy Logic

Phỏng vấn thường có những bài Test về Logic
Phỏng vấn thường có những bài Test về Logic. Ảnh: Danial RiCaRoS – Unsplash

Ví dụ: 

  • Cho một non-empty list, trả về k phần tử thường gặp nhất.
  • Kết quả phải được sắp xếp theo tần số xuất hiện từ cao đến thấp, nếu có 2 phần tử cùng tần số thì trả về phần tử có thứ tự chữ cái thấp hơn (lower alphabetical order).

Ví dụ:

Input: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2 Output: [“i”, “love”]

Explanation: “i” and “love” are the two most frequent words.

Note that “i” comes before “love” due to a lower alphabetical order

Hoặc bạn có thể ôn thêm các ví dụ liên quan đến xử lý chuỗi hay xử lý random.

Và cũng như tất cả các vị trí khác, bạn hãy:

  • Tập trung liên kết giữa kinh nghiệm làm việc 2 năm gần đây nhất của bạn với những yêu cầu mà công ty đăng tuyển trong Job Description.
  • Đề cập về dự án mà bạn cảm thấy tâm đắc nhất, hãy luôn nhớ thử thách bạn trải qua trong quá trình làm việc càng khó khăn sẽ càng đề cao những thứ bạn gặt hái được. Tất nhiên, mọi thông tin nên được trung thực.
  • Chia sẻ những giải pháp và “bài học xương máu” trong quá trình làm việc hay quản lý dự án.
  • Chuyên sâu phần nào thì hãy đề cập đến vấn đề đó. Nếu thực sự không chuyên, hãy mạnh dạn xin lời khuyên từ người phỏng vấn. Điều này sẽ được đánh giá cao.

Đến đây, bạn tự đánh giá mình được bao nhiêu điểm trên thang điểm 10?

Hy vọng những chia sẻ trên của Gambaru sẽ giúp bạn có được sự chuẩn bị tốt nhất trước mỗi buổi phỏng vấn nhé!

Nguồn: GNT Leaders & HR

Categories
Gambaru News

Làm việc từ xa: Xu hướng việc làm tương lai

Tiếp tục cập nhật về những tác động của đại dịch COVID-19 lên giới công nghệ hay kế hoạch remote work của các doanh nghiệp công nghệ trong năm nay, Gambaru mời bạn theo dõi những dự đoán về xu hướng làm việc nói chung trong tương lai.

Làm việc từ xa đã trở thành hiện thực sau đại dịch COVID-19
Làm việc từ xa đã trở thành hiện thực sau đại dịch COVID-19. Ảnh: Freepik

Tôi đang nhâm nhi ly cà phê tại một quán vỉa hè ở Belgrade, thủ đô Serbia.

Nơi đây đang ở giai đoạn hậu COVID, mọi người ra ngoài, ăn uống, cười đùa, và đáng ngạc nhiên là chẳng hề đeo khẩu trang.

Tôi nhớ về mùa hè hai năm trước ở đây.

Vào thời điểm đó, tôi nghĩ rằng những gì mình đang làm là vô cùng cấp tiến – một kẻ du mục kỹ thuật số làm việc toàn thời gian và chu du khắp thế giới.

Tôi đã tin rằng bản thân là bằng chứng cho thấy văn hóa văn phòng sẽ tuyệt chủng, và bị thống trị bởi làm việc từ xa.

Những người ủng hộ làm việc từ xa như tôi thay vì truyền cảm hứng cho mọi người rằng remote work chính là tương lai, chúng tôi lại đang chiến đấu theo một kiểu khác, một cuộc chiến chống lại đại dịch COVID toàn cầu và cuối cùng sẽ thuyết phục được giới tinh hoa công nghệ áp dụng hoàn toàn chính sách remote work.

Những gã khổng lồ bao gồm Facebook, Google, Coinbase, Twitter và 74% các công ty khác (như được tiết lộ trong một cuộc khảo sát gần đây của Gartner) đang lên kế hoạch thực hiện và duy trì làm việc từ xa trong năm nay.

Sự kiện mang tính bước ngoặt này giết chết văn hóa công sở và tất cả các bằng chứng cho thấy rằng remote work đang là hiện thực, buộc chúng ta đặt ra câu hỏi: “Tương lai thì sao?”

3 Dự đoán hàng đầu về việc làm tương lai

1. Công việc bạn làm không ràng buộc với bất kỳ công ty cụ thể nào

Một nghiên cứu của Gallup cho thấy sự linh hoạt là chìa khóa để giữ chân nhân viên. 53% nhân viên nói rằng sự cân bằng cuộc sống-công việc và hạnh phúc cá nhân là “rất quan trọng” đối với họ khi xem xét có nên nhận một công việc mới hay không.

Bước tiếp theo trong tính linh hoạt đó là các cách tiếp cận mới đối với việc làm như sự tham gia của nhân viên bán thời gian, freelancer và contractor làm việc theo dự án.

Sự linh hoạt là chìa khóa để giữ chân nhân viênSự linh hoạt là chìa khóa để giữ chân nhân viên
Sự linh hoạt là chìa khóa để giữ chân nhân viên. Ảnh: Johnson Wang – Unsplash

Đối với nhân viên bán thời gian, tùy chọn này cho phép họ có thể kiểm soát việc ưu tiên công việc bên cạnh những việc như chăm sóc sức khỏe, chăm lo cho con cái, cha mẹ hoặc đơn giản là có nhiều thời gian cá nhân hơn.

Đối với các công ty, điều này mang đến khả năng giữ chân nhân tài hàng đầu với các mục tiêu nghề nghiệp thay đổi và tạo ra thành công cho dự án với ít tài nguyên hơn.

Đối với nhân viên freelancer và contractor, việc có nhiều kênh để sử dụng chuyên môn của họ sẽ tăng tính linh hoạt trong công việc, giúp kích thích sự sáng tạo, mang lại nhiều quyền kiểm soát hơn và cơ hội khám phá những sở thích mới.

Từ góc nhìn doanh nghiệp, làm việc từ xa mang lại nguồn chuyên môn bổ sung trong việc giải quyết các khó khăn kinh doanh, tạo môi trường chia sẻ kiến ​​thức về các vấn đề kinh doanh không nhạy cảm, không cần bảo mật đồng thời cho phép phản hồi và đổi mới từ việc đặt câu hỏi về các giả định cách vận hành doanh nghiệp.

2. Kết quả đầu ra có thể đến từ nhiều nguồn

Giống như việc nhân viên có thể lựa chọn làm việc cho nhiều công ty, doanh nghiệp có thể hưởng lợi từ việc có nhiều người làm cùng một công việc.

Chia sẻ công việc (job-sharing, work-sharing) là một hệ thống trong đó một công việc trước đây thường do một người đảm nhiệm nay được phân chia giữa hai người, và điều này ngay lập tức mang đến nhiều lợi ích vì “hai cái đầu vẫn tốt hơn một”.

Có nhiều cách khác nhau để phân chia vai trò, dựa trên đam mê, thế mạnh, chuyên môn và kiến ​​thức cụ thể của nhân viên hoặc bằng cách tập trung vào việc kết hợp hai quan điểm đa chiều, chẳng hạn như các thành viên trong team đa thế hệ hoặc đa văn hóa.

Doanh nghiệp có thể hưởng lợi từ việc có nhiều người làm cùng một công việc
Doanh nghiệp có thể hưởng lợi từ việc có nhiều người làm cùng một công việc. Ảnh: Pixabay – Pexels

3. Công ty thuê người theo những cách độc đáo và mang lại lợi ích chung

Mô hình tuyển dụng và cơ cấu nhân viên của các công ty sẽ có nhiều thay đổi
Mô hình tuyển dụng và cơ cấu nhân viên của các công ty sẽ có nhiều thay đổi. Ảnh: Polina Zimmerman – Pexels

Cuối cùng, bước tiếp theo trong cuộc cách mạng này sẽ là đặt câu hỏi đối với các giả định về mô hình nhân viên toàn thời gian truyền thống và tìm các tùy chọn có lợi cho công ty và những người xây dựng chúng.

Trong tương lai, các công ty thành công nhất sẽ phát triển mô hình của họ để đón nhận nhiều người tham gia phát triển công việc nội bộ bao gồm nhân viên toàn thời gian, chuyên gia tư vấn, freelancer và nhân viên bán thời gian.

Tất nhiên, có những thứ cần thay đổi trong hệ thống hiện tại của chúng ta để hiện thực hóa tương lai này.

Một ví dụ đó là việc tách phúc lợi y tế khỏi chế độ làm việc, và dường như đây là một gánh nặng đặc trưng của người Mỹ.

Rộng hơn nữa là việc tái cơ cấu hỗ trợ của chính phủ đối với doanh nghiệp và các dịch vụ được cung cấp cho loại hình này.

Nếu có thể thực hiện các bước để tạo ra những thay đổi đó và khuyến khích nhiều nhóm làm việc toàn diện hơn, chúng ta có thể bắt đầu phong trào “Việc làm tương lai” tiếp theo và tôi hy vọng chúng ta không cần một thảm họa toàn cầu khác nữa để biến điều này thành hiện thực!

Theo Ali Greene

Categories
Dev's Corner

Sự khác biệt giữa Junior, Mid-Level và Senior Developer

bài viết trước, Gambaru đã cùng các bạn tìm hiểu về vị trí Senior Software Developer.

Hôm nay, mời mọi người theo dõi góc nhìn của Daan, một back-end developer từ Hà Lan về:

Sự khác nhau giữa Junior, Mid-Level và Senior Developer

Sự khác nhau giữa Junior, Mid-level và Senior developer
Sự khác nhau giữa Junior, Mid-level và Senior developer. Ảnh: Soumil Kumar – Pexels

Số năm kinh nghiệm lập trình không đủ để xác định được ai là một Junior, Mid-level hoặc Senior Developer.

Tôi nghĩ điều quan trọng ở đây là kỹ năng.

Một Senior Developer chẳng phải là chuyên gia về mọi thứ, nhưng ta hoàn toàn có thể nói rằng Senior Developer có kỹ năng thành thục hơn Junior và Mid-level Developer.

Kiến thức

Senior Developer sở hữu lượng kiến thức lớn hơn nhiều so với Mid-level và Junior Developer.

Junior Developer cần mở mang hiểu biết về design pattern, architecture, automating testing, performance, security… mới thu hẹp được khoảng cách kiến thức với Mid-level và Senior Developer.

Đúng là rất quan trọng để biết mọi thứ trong quá trình phát triển phần mềm nên thực hiện như thế nào, nhưng chỉ biết những điều này chưa đủ để bạn trở thành một Senior Developer.

Kiến thức là một trong những yếu tố cho thấy sự khác biệt lớn nhất giữa các dev, nhưng nó chưa phải là tất cả
Kiến thức là một trong những yếu tố cho thấy sự khác biệt lớn nhất giữa các dev, nhưng nó chưa phải là tất cả. Ảnh: NeONBRAND – Unsplash

Coding

Trái với suy nghĩ của hầu hết mọi người, coding không phải là vấn đề về việc giao tiếp với máy tính.

Coding là việc giao tiếp với con người và hướng dẫn máy tính. Suy cho cùng, code được tổng hợp và biên dịch thành giá trị 0 và 1.

Code phải có ý nghĩa đối với những dev khác làm việc với nó trong tương lai.

Một team mới chưa bao giờ tiếp xúc với đoạn code vẫn có thể mở được nó và tiến hành làm việc với các tính năng mới hoặc fix bug.

Đây là nơi có thể thấy sự khác biệt lớn giữa Junior Developer và Senior Developer.

Tôi sẽ không nói về Mid-level Developer trong đoạn so sánh tiếp theo vì Mid-level Developer là một khu vực xám khi nói đến kỹ năng coding.

Phân biệt Junior Developer?

Junior Developer ít kinh nghiệm, một số vừa tốt nghiệp và lần đầu tiên đi làm.

Một Junior Developer thường chỉ nghĩ là phải làm cho code chạy được. Theo họ, phần mềm chạy được và phần mềm tốt là như nhau.

Viết được code tường minh không đơn giản và Junior Dev thường viết code rườm rà.

Bạn có thể nhận ra Junior Developer vì họ hay viết tất cả mọi thứ trên một dòng hoặc những lớp abstract phức tạp quá mức.

Đây là cách một Junior Developer thể hiện cho các dev khác biết họ có thể viết code tốt như thế nào. Và điều này là sai lầm.

Senior Developer thì sao?

Khi nhìn vào code của một Senior Developer, bạn có thể nghĩ: đây có phải là tất cả không?

Phần code còn lại đâu rồi? Một Senior Developer viết code đơn giản, dễ hiểu và thậm chí có thể là ngớ ngẩn.

Đây là một trong những phẩm chất làm lập trình lớn nhất một developer có.

Senior Developer tuân theo nguyên tắc KISS (Keep It Simple, Stupid).

Làm đơn giản thôi, ngốc ạ.
Làm đơn giản thôi, ngốc ạ. Ảnh: Myburgh Roux – Pexels

Senior Developer viết code và cân nhắc về khả năng code maintain được và mở rộng được.

Đây là một tư duy hoàn toàn khác so với Junior Developer – Senior nghĩ về những người phải làm việc với code, còn Junior chỉ nghĩ về việc làm cho nó hoạt động trên máy tính.

Không chỉ là kỹ năng lập trình

Nói chung, Junior Developer thực hiện các task hoặc task đơn giản nhất với độ ảnh hưởng thấp. Họ không thực hiện việc thiết kế kiến trúc hệ thống.

Mid-level Developer cũng không tạo ra solution, họ chỉ thực hiện task.

Sự khác biệt với Junior Developer là họ thực hiện task đó với ít sự giám sát hơn miễn là họ được giao cho các task có tính ổn định tương đối.

Senior Developer thì có thể hoàn toàn tự mình phát triển một ứng dụng.

Điều này không có nghĩa là Senior Developer không có bất kỳ câu hỏi nào trong quá trình làm việc.

Senior Developer biết cách đặt câu hỏi đúng và cách xử lý những câu hỏi này.

Mid-level Developer có thể đặt câu hỏi đúng liên quan đến các task họ thường xuyên làm, nhưng cần hỗ trợ ở những task phức tạp hơn.

Senior Developer không hoang mang và biết cách theo dõi những câu hỏi đặt ra với hành động hợp lý.

Senior Developer vẫn luôn nhờ sự giúp đỡ từ các dev khác vì đôi khi cách tốt nhất là chỉ cần nhờ dev có kinh nghiệm trong lĩnh vực đó giúp đỡ.

Mid-level Developer cũng có thể hỏi đúng câu hỏi, miễn là họ không được giao những task có độ phức tạp cao, đòi hỏi kiến thức chuyên sâu.

Ta không nên mong đợi một Junior Developer sẽ làm được điều này vì họ thiếu kinh nghiệm và cần hướng dẫn từ một dev có kinh nghiệm hơn, cần những nguồn lực cần thiết hoặc một sự thúc đẩy mạnh mẽ để đi đúng hướng.

Nâng cấp từ Junior lên Senior Developer

Tất cả chúng ta đều muốn cải thiện bản thân và trở thành một developer hoàn thiện hơn. Các bước cần thực hiện để đạt đến cấp độ tiếp theo là gì?
Tất cả chúng ta đều muốn cải thiện bản thân và trở thành một developer hoàn thiện hơn. Các bước cần thực hiện để đạt đến cấp độ tiếp theo là gì? Ảnh: Jerry Zhang – Unsplash

Junior lên Mid-level

Vì các Junior Developer đều thiếu kinh nghiệm, nên điều quan trọng là phải tự mình trải qua toàn bộ chu trình lập trình ít nhất một vài lần.

Bằng cách này, bạn sẽ mắc nhiều sai lầm và học cách tránh lặp lại chúng vào lần tiếp theo.

Bạn nên học cách viết code đơn giản. Hãy nghĩ về người tiếp theo sẽ làm việc với code đó.

Bạn cũng nên tìm hiểu cách debug vì điều này sẽ giúp ta hiểu rõ hơn về những gì xảy ra trong quá trình lập trình.

Ngoài ra, bạn nên làm quen với những thực tiễn tốt nhất và tìm hiểu về architecture, performance, security v.v. Mục tiêu là thu hẹp khoảng cách kiến thức cần có để đạt đến mid-level.

Mid-level đến Senior

Đi từ Mid-level đến Senior là một chặng đường khá khó khăn. Một số dev sẽ chỉ ở mức Mid-level trong suốt sự nghiệp của mình.

Senior Developer biết khi nào cần đi đường tắt và khi nào thì không.

Đây là những bài học khó nhằn chỉ học được bằng cách mắc sai lầm trong quá khứ.

Nếu muốn lên Senior Level, bạn phải sẵn sàng nhận những task mà không ai biết cách xử lý và nên biết nhiều hơn ngoài việc làm thế nào để hoàn thành công việc.

Là một Senior Developer, bạn cũng có công việc hỗ trợ các dev ít kinh nghiệm hơn.

Và bạn sẽ chẳng ngạc nhiên khi tôi nói rằng Senior Developer làm chủ được công nghệ của mình.

Bên cạnh kỹ năng coding, họ biết tất cả các công cụ và ứng dụng đang được sử dụng trong công ty mình đang làm.

Tôi xin kết bài bằng một câu nói từ Martin Fowler:

Bất kỳ kẻ ngốc nào cũng có thể viết code sao cho máy tính hiểu được. Lập trình viên giỏi viết code con người có thể hiểu được.

Theo Daan