Bạn đã sử dụng Stackoverflow đúng cách chưa?

Lời nói đầu

Chắc hẳn đại đa số developer chúng ta đều đã từng (và đang) sử dụng stackoverflow như một công cụ giải quyết issue, "giúp em trả lời những câu hỏi" 😄 hay đơn giản chỉ là ngó nghiêng xem các đồng nghiệp trên toàn thế giới đang trao đổi về những gì. Vậy bạn có tự hỏi cách mình sử dụng công cụ hữu ích này đã thực sự hiệu quả chưa? Bài viết dưới đây sẽ phân tích chi tiết về điều đó.

How to ... ?

Bạn gặp vấn đề, đầu tiên bạn phải biết cách search xem người khác có từng gặp vấn đề tương tự như bạn không và họ đã giải quyết như thế nào? Nếu vấn đề đó là mới, bạn sẽ post một topic mới với mong muốn sẽ nhận được những lời giải đáp, gợi ý từ cộng đồng. Và khi bạn trở thành senior, muốn hành hiệp trượng nghĩa giúp ích cho đời, bạn muốn giúp ai đó trả lời những câu hỏi. Hãy cùng tìm hiểu, phân tích làm thế nào để thực hiện tốt ở mỗi giai đoạn, mỗi bước.

How to search

Như bạn đã biết, StackExchane là một cơ sở tri thức vô cùng lớn, bao gồm các câu trả lời cho hầu hết các câu hỏi về phần mềm mà bạn quan tâm. Để search hiệu quả bạn có thể sử dụng Google với giới hạn site:stackoverflow.com kèm theo các keywords tiêu biểu cho câu hỏi của bạn (e.g java, arrays, algorith...) hoặc ngay trên chính trang stackoverflow.com. Để search các topic với tag cụ thể, hãy sử dụng ngoặc vuông, e.g tìm kiếm các topic với từ khóa sort array có chứa tag algorithm

[algorithm] sort array

Sử dụng regex pattern * hoặc " " cho các trường hợp search contains hay matching với các keywords bạn quan tâm, keyword có thể được giới hạn xuất hiện trong title hay body. E.g

title: "fastest way", encour*
body: "search phrase"

hoặc loại trừ những kết quả có chứa các keywords mà bạn muốn lọc bỏ

"search phrase" - [keyword1] - [keyword2]

Bạn có thể giới hạn phạm vi tìm kiếm chỉ trong những post của mình

user:me "search phrase"

Một số thủ thuật search nâng cao hơn:

Search theo range

Dựa trên các tiêu chí score, answers hoặc views

score:-1 or score:-1.. tất cả các post có score >= -1 views:500..1000 or views:500-1000 tất cả các post có số view nằm trong khoảng 500 - 1000 answers:..3 tất cả các post có số câu trả lời <=3

Dựa trên khoảng thời gian: created, lastactive. Có thể sử dụng thời gian theo cả 2 cách tuyệt đối và tương đối

year only – e.g., created:2016..2017 sẽ tìm tất cả các post được tạo trong khoảng 1/1/2016 - 31/12/2017; created:2016 search tất cả các post được tạo trong khoảng 1/1/2016 - 31/12/2016 year and month – e.g., created:2012-04..2012-05 tương tự như trên, search được tạo từ 1/4/2012 - 31/5/2012 day, month, and year – e.g., lastactive:2012-04-03 tìm tất cả các post có tương tác lần cuối từ phía user từ 12:00 AM 3/4/2012 tới 11:59 PM 3/4/2012. hoặc lastactive: 3m cho các post có tương tác trong khoảng 3 tháng gần đây.

Search theo các toán tử boolean (yes/true/1 hoặc not/false/0)

isaccepted: yes/true/1 lọc những câu trả lời được đánh dấu "accepted". hascode: yes/true/1 lọc những post có đính kèm code block; no/false/0 ngược lại. hasaccepted: câu hỏi có câu trả lời đã được chấp nhận. isanswered: câu hỏi với ít nhất 1 câu trả lời tích cực. closed: các câu hỏi đã được closed. duplicate: câu hỏi được đánh dấu trùng migrated: câu hỏi được đánh dấu migrate với site khác locked: post đã bị lock hasnotice: post đi kèm với notice ở dưới wiki: lọc các post dạng wiki comunity

Một số toán tử hỗn hợp khác

url: "example.com" tìm các post có chứa url cụ thể is:question hoặc is:answer giới hạn tìm kiếm với từ khóa nằm trong câu hỏi hoặc câu trả lời inquestion:50961 giới hạn phạm vi cụ thể id của câu hỏi mà bạn muốn tìm kiếm

How to ask

Có thể bạn đã quen với việc chém gió, hỏi bài bạn đồng nghiệp theo nhiều kiểu: official trong phòng họp, phòng làm việc, trước máy tính hoặc suồng sã ngoài quán trà đá ... Việc hỏi trên stackoverflow không đơn giản như vậy, bạn phải học cách làm thế nào để giải thích vấn đề đang gặp phải, xây dựng các câu hỏi gắn nhãn và đặt tên sao cho cộng đồng hơn 6M+ developers có thể hiểu được và cảm thấy "hứng thú" muốn trả lời câu hỏi của bạn. Lần đầu tiên sẽ không hề dễ dàng, có thể câu hỏi bạn đặt ra nghe có vẻ ngô nghê, nhập nhằng thiếu tường minh và kết thúc bằng câu kinh điển "Best regards!" hoặc "Thanks in advanced" (bạn quen với cách dùng này khi viết thư hay các forum thông thường nhưng điều này rất tối kị khi post câu hỏi ở stackoverflow). Và dĩ nhiên bạn sẽ không nhận được up-votes nào cho những câu hỏi như thế này. Sau đó khi kỹ năng đặt câu hỏi của bạn được cải thiện, bạn sẽ thấy ngạc nhiên khi các câu hỏi của mình được up-votes nhiều hơn, theo đó danh tiếng cũng như độ tin cậy của bạn sẽ tăng lên (thể hiện bằng điểm reputation). Đây chính là một dấu hiệu chứng minh răng kỹ năng đặt câu hỏi của bạn đã được improve - một điểm cộng khi nhà tuyển dụng hoặc head hunter nghiên cứu CV profile hoặc phỏng vấn bạn. Dưới đây là một số điểm cần lưu ý để "tối ưu hóa" việc đặt câu hỏi

The Golden Rule: Hãy tưởng tượng bạn đang ở vị trí của người cố gắng trả lời câu hỏi

Đặt title

Tránh:

Java: Why are bytes signed?

Nên:

Why are bytes signed in Java?

Ngữ cảnh (Context)

Nên cung cấp các thông tin về ngữ cảnh phát sinh câu hỏi của bạn, các thông tin cơ bản có thể nhắc tới như: Language version (platform version), OS, software sử dụng (IDE, tools) các tiền điều kiện nếu có. Hãy sử dụng các tag nếu cần, chú ý tới các tag được suggest.

Câu nhấn của vấn đề (problem statement)

Tránh đặt những câu hỏi dạng "Khi tôi làm abc thì kết quả bị sai, chương trình bị lỗi ...." thay vào đó hãy trình bày một cách tuần tự input, các bước đã thực hiện, lỗi hoặc kết quả không mong muốn thu được, và kết quả mong muốn. Việc trình bày rõ ràng như thế này không chỉ giúp người đọc hình dung rõ vấn đề bạn gặp phải mà còn có thể đưa ra các hướng dẫn, lời khuyên về design pattern, giải thuật bạn nên sử dụng.

Cung cấp sample code và dữ liệu chạy thử (nếu có)

Không gì nhanh hơn việc mô tả bằng lời kết hợp với sample code mà bạn đang gặp vấn đề, tuy nhiên đừng copy/paste code một cách tùy tiện mà hãy chú ý

  • Code/data sample phải hoàn chỉnh và độc lập: có thể là một phần nhỏ lược ra từ source code, database nhưng hãy đảm bảo người khác có thể sử dụng được
  • Có thể compile được: đừng ném lên một đoạn code nhìn qua đã thấy lỗi và không thể compile
  • Nếu ứng dụng của bạn có liên quan tới UI, hãy cố gắng simulate nó đơn giản bằng các console log
  • Ngắn gọn súc tích, nhấn mạnh những điểm nghi vấn của bạn
Vấn đề về ngữ pháp, chính tả và format
  • Sử dụng viết hoa, in nghiêng hoặc bôi đậm chính xác để tăng tính mạch lạc cho câu hỏi
  • Chia đoạn, tách phần để người dùng dễ đọc hơn
  • Không sử dụng các tiếng lóng, từ viết tắt không đúng chuẩn để tránh làm mất thời gian suy luận của người đọc
  • Sử dụng tính năng spelling-checker của trình duyệt để correct những từ viết sai trước khi submit post
  • Chú ý tới ngôn ngữ mô tả, e.g bạn muốn đặt câu hỏi specific cho C# hay Java có thể sử dụng mô tả dạng generic

Why can’t I convert an expression of type List<string> to List<object>?

sẽ có giá trị hơn nhiều so với việc sử dụng đơn thuần mô tả

Why can’t I convert an expression of type List to List?

Tạo ấn tượng tốt

Điểm mấu chốt cuối cùng của kỹ năng tạo câu hỏi đó là hãy mang đến cho nó một ấn tượng ban đầu tốt, đây có thể xem là một điểm cộng tích cực có thể giúp bạn được trả lời nhanh hơn.

  • Sử dụng một username có ý nghĩa, liên quan tới tài khoản social của bạn, tránh sử dụng các username dạng "ask-and-run" fastfood kiểu "newbie...., pro..., user13232"
  • Chú ý theo dõi câu hỏi của bạn, nếu có phản hồi (tích cực hoặc tiêu cực) về câu hỏi hãy trả lời một cách lịch sự và edit câu hỏi để làm rõ ràng ý nghĩa hơn nếu cần.
  • Đừng tự thêm câu trả lời cho câu hỏi của chính bạn trừ khi đó là một câu trả lời chính xác và chưa có ai trả lời. Việc tự hỏi tự trả lời ngớ ngẩn sẽ làm mất điểm của bạn. Nếu để trả lời cho một phản hồi nào đó, hãy ghi cụ thể updated (thời gian, lý do) bổ xung vào phần câu hỏi bạn đã đặt.
  • Trên tất cả, một lần nữa hãy lịch sự. Hãy nhớ rằng không ai được trả tiền để giúp bạn trả lời những câu hỏi, trái lại họ đã hào phóng dành thời gian của mình để giúp bạn, hãy trân trọng điều này. Nếu vấn đề bạn hỏi thuộc về bài tập cá nhân, hãy cho người khác biết vì sao bạn phải nhờ giúp đỡ một công việc mà đáng ra bạn phải tự hoàn thành. Nếu phản hồi nào đó nói bạn đã tiếp cận sai, đề xuất cách tiếp cận mới tốt hơn thì hãy suy nghĩ tích cực, tiếp thu các ý kiến này thay vì việc phản bác lại theo hướng tiêu cực.
  • Nếu câu trả lời giúp bạn giải quyết được vấn đề, hãy up-vote accept nó, điều này sẽ giúp người trả lời câu hỏi được tăng điểm cũng như giúp cho những người đọc về sau nhận định nhanh chóng được câu trả lời đáng tin cậy.

How to answer

Ban đầu bạn rất sợ phải trả lời, bạn sợ bị cộng đồng đánh giá không tốt về những câu trả lời "chưa tới" của mình. Và sự thật là hầu hết các câu trả lời đầu tiên của bạn nhận được những down-votes. Tiếp sau đó, một trong số các câu trả lời sẽ được accept như là câu trả lời tốt nhất. Sau cùng, các câu trả lời của bạn bắt đầu nhận được những up-votes. Để đến được đích này, bạn sẽ phải trải qua rất nhiều cung bậc cảm xúc mà đa phần là thất vọng và tiêu cực 😃. Bạn sẽ phải tìm hiểu làm thế nào để biến câu trả lời của mình trở nên hữu ích với mọi người, rằng không đơn giản chỉ là ném lên một vài dòng code hay những câu văn lủng củng là sẽ giải quyết được vấn đề. Cách thức sẽ khác hoàn toàn khi bạn giúp bạn bè bạn giải quyết những vấn đề, bạn có thể không có những ý tưởng rõ ràng nhưng họ tôn trọng bạn và không muốn xúc phạm bạn. Trên stackoverflow thì lại khác, cuộc đối thoại trên mạng xã hội sẽ "phũ phàng" hơn nhiều, mọi người tới đây để tìm câu trả lời chứ họ không hề quan tâm tới bạn là ai (chí ít là cho tới khi bạn thật sự nổi tiếng trong cộng đồng) và cảm xúc của bạn ra sao khi đọc những feedback. Đây là một kỹ năng bạn bắt buộc phải học, nó không thể mua được và là một trong những yếu tố rất quan trọng khi làm việc trong một team phân tán (không tập trung, theo kiểu remote). Dưới đây là một số gạch đầu dòng đáng chú ý khi bạn bắt tay vào giúp người khác trả lời những câu hỏi trên stackoverflow

  • Câu cú sử dụng phải thật rõ ràng, gãy gọn
  • Cung cấp ví dụ đi kèm
  • Trích dẫn link nguồn cung cấp để tham khảo thêm (nếu có)
  • Nếu câu trả lời có trích dẫn những khái niệm cơ bản, bạn có thể đưa các trích dẫn tới chúng, thay cho việc viết lại.
  • Update, sửa đổi câu trả lời của bạn theo thời gian để nó có thể được người khác tiếp tục sử dụng lại như một giải pháp chính xác.
  • Chú ý quan sát các comment cho câu trả lời của bạn để có thể đưa ra những lời giải thích cho các câu hỏi phụ xung quanh việc giải quyết vấn đề cho câu hỏi chính của topic.

How to deal with people

Stackoverflow cũng là một mạng xã hội, và dĩ nhiên bạn sẽ gặp rất nhiều thể loại người ở đây. Có những kẻ thuộc thành phần "ngu và nguy hiểm" và chúng thật sự rất đông 😃) luôn sử dụng những từ ngữ mất lịch sự, mang tính chất công kích vào câu hỏi hoặc câu trả lời của bạn. Dĩ nhiên bạn không nên nhảy vào các cuộc cãi vã vô bổ này, hãy bỏ qua chúng (và report nếu cần), họ không phải là những người bạn quen trong office hay bạn bè cùng khóa, không đáng để suy nghĩ.

Cũng có những người rất thông minh, họ có kiến thức tương đối rộng và họ đôi khi cũng khó chịu khi câu hỏi của bạn có phần ngô nghê. Đừng nhụt chí, hãy tích cực lắng nghe và tham gia các cuộc trao đổi, tranh luận với những người này và học từ họ các kỹ năng giải quyết vấn đề. Đây là kỹ năng bạn sẽ rèn luyện nhiều nhất, và không đâu dạy bạn tốt hơn stackoverflow.

Thay cho lời kết

Dù thích hay không, chúng ta đều phải công nhận Stackoverflow là một công cụ thuộc dạng phải-có của bất cứ developer nào, bất kể bạn làm việc với ngôn ngữ gì, dự án của bạn lớn ra sao hay bạn có bao nhiêu năm kinh nghiệm. Nó giống như là một IDE hay một unit-test thứ mà bạn sử dụng hàng ngày để có thể rút ngắn thời gian phát triển, cũng như giải quyết vấn đề tốt hơn. Đừng chỉ sử dụng Stackoverflow như một trang web, hãy tự build một profile cho mình thật tốt ở đây, biến nó thành điểm mạnh, tăng sức cạnh tranh của bạn trong thị trường nhân sự phát triển phần mềm.

Tham khảo thêm ở các bài viết

  1. https://www.javacodegeeks.com/2017/02/stackoverflow-mandatory-tool.html
  2. http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title
  3. http://stackoverflow.com/help/how-to-ask

All Rights Reserved