Giúp lập trình viên cơ sở vượt qua những thiếu sót của họ? [đóng cửa]


15

Nắm bắt phổ biến của bạn về các nhà phát triển cơ sở tham gia nhóm của bạn hoặc người mà bạn phải làm việc với là gì? Rõ ràng là họ thiếu kinh nghiệm nên bạn không thể mong họ biết tất cả mọi thứ, nhưng kỹ năng nào thường thiếu một cách khó hiểu - và cụ thể, chúng ta có thể giúp họ xây dựng những kỹ năng còn thiếu này như thế nào?

Tôi không có nghĩa là các kỹ năng liên cá nhân như 'lắng nghe lời khuyên', ý tôi là các vấn đề kỹ thuật như (nếu có):

  • 'bạn chưa bao giờ thực hiện SQL?'

  • 'bạn chưa bao giờ viết một bài kiểm tra đơn vị?'

  • 'bạn không biết cách sử dụng dòng lệnh Unix?'

Mọi thứ mà bạn làm mong đợi - Tôi muốn nghe những quan sát và kỹ thuật của mình để dạy lập trình viên mới để vượt qua những thiếu sót nhất định.


13
Điều khó chịu nhất: liên tục hỏi về những gì gây khó chịu. :-)
Jerry Coffin

12
Tôi không nghĩ bạn nên cáu kỉnh khi mọi người không biết những điều bạn mong muốn họ biết. Điều quan trọng là họ sẵn sàng học hỏi =)
koenmetsu

Vâng đồng ý với @KoMet nếu bạn sẵn sàng học Nghe Tôi nghĩ nó quan trọng :)
MalsR

8
Tôi không thích câu hỏi này, nó có tâm lý sai cho một nhà phát triển. CHÚNG TÔI TẤT CẢ MỘT LẦN NỮA người mới đó, và hàng ngày chúng tôi là một người mới ở một cái gì đó. Tôi KHÔNG BAO GIỜ bị kích thích vì một người không biết gì. Điều này cảm thấy rằng có quá nhiều sự kiêu ngạo liên quan ....
Darknight

3
Ồ, đóng cửa, BRAVO. Tôi đọc sáu hướng dẫn câu hỏi chủ quan mang tính xây dựng và điều này đáp ứng tất cả chúng. Thành thật mà nói, phần không liên quan là bận rộn đóng một chủ đề mà 13 người đã trả lời, chỉ vì họ hiểu sai câu hỏi. Nó chỉ đơn giản là một thực tế mà các nhà phát triển cấp cao đôi khi sẽ thất vọng về khả năng của các nhà phát triển cơ sở, câu hỏi này chỉ tìm cách tìm bất kỳ mô hình nào trong sự thất vọng này để chúng ta có thể tránh những khó khăn tốt hơn. Bỏ qua những lời phàn nàn và chỉ trích hợp pháp không có lợi cho bất cứ ai và điều đó chẳng liên quan gì đến sự kiêu ngạo.
Andrew M

Câu trả lời:


25

Không biết kiểm soát phiên bản là gì, hoặc sử dụng đúng cách .

Một trong những nhà phát triển cơ sở đã ở công ty tôi vài tháng gần đây đã được dạy về những điều rất cơ bản của Subversion. Nó thực sự khiến tôi co rúm lại ... cô ấy đã kiểm tra mã cho các dự án trực tiếp suốt thời gian đó ... và không biết cô ấy đang làm gì ...?


4
Co rúm? Cô ấy may mắn vẫn có một công việc.
Rein Henrichs

2
Điều này có vẻ như là vấn đề "không biết những gì bạn không biết" hoặc "không thừa nhận những gì bạn không biết." Nếu cô ấy yêu cầu sự giúp đỡ ngay từ đầu, liệu nó có phải là một vấn đề lớn không?
Michael McGowan

1
Rất tiếc, nghe có vẻ như tôi haha, chúng tôi đã không thực hiện kiểm soát phiên bản cho đến gần đây và tôi đã gia nhập công ty khi mới tốt nghiệp, tôi đã học được một chút về kiểm soát phiên bản và loại lật đổ ở Đại học, nhưng chưa bao giờ thực hiện trước đây.
Sufendy

1
"Đó là công cụ để sao lưu phải không? Bạn có sử dụng nó để lưu mã của mình mỗi tối không?"
David

2
Đó là một điều lớn mà họ gần như không bao giờ dạy bạn ở trường
Elijah Saounkine

23

Không hỏi đủ câu hỏi

Tôi biết họ là đàn em, tôi hy vọng rằng họ sẽ phạm sai lầm và chỉ không biết mọi thứ. Vì vậy, rất nhiều hoàng gia f ** k có thể tránh được bằng cách chỉ hỏi một câu hỏi thay vì giả định điều gì đó. Thành thật mà nói, tôi không thể bị làm phiền đủ.

Tôi đã có TONNES các câu hỏi khi tôi bắt đầu - yêu cầu họ lưu mông của tôi trong một số dịp. Chết tiệt, tôi vẫn còn rất nhiều câu hỏi ... Tôi chỉ muốn nghĩ rằng bây giờ chúng là những câu hỏi hay hơn.


Gee ... gần như cùng một câu trả lời tôi đã đăng, bạn đi vào khoảng 5 giây trước.
quick_now

2
"bạn thật phiền phức !! Tôi đang bận ở đây, bạn có thể tự mình suy nghĩ không?" nếu bạn không may mắn !! haha
Sufendy

4
+1 - Một trường hợp con của điều này không hỏi lại sau khi giải thích. Nó thực sự làm tôi bực mình khi tôi giải thích một số nhiệm vụ cho một thiếu niên, anh ấy gật đầu, tôi nghĩ rằng anh ấy đã nhận được nó và sẽ nhận được công việc, sau đó hai tuần anh ấy quay lại, hỏi lại những câu hỏi tương tự , gật đầu lần nữa, rồi hai người khác vài tuần sau ... Đủ công bằng, đó không phải là một nhiệm vụ tầm thường, nhưng vì Chúa không giả vờ bạn hiểu nó nếu bạn không. Và nếu bạn nghĩ rằng bạn đã hiểu điều gì đó, hãy ghi chú để bạn nhớ nó hai tuần sau đó.
Péter Török

1
Một số người, mặt khác, hỏi quá nhiều câu hỏi (trên Stack Overflow).
BoltClock

1
@SnOrfus: Những người không đủ tiêu chuẩn là những người tôi đang đề cập đến: P
BoltClock

14

Sao chép dán và dùng thử và lỗi thay vì tìm cách hiểu các nguyên tắc cơ bản cơ bản

Nhiều nhà phát triển cơ sở sẽ sao chép mã trông gần gũi, sau đó gần như ngẫu nhiên thử các hoán vị khác nhau của các sửa đổi bằng vũ lực cho đến khi chúng đánh vào một mã hoạt động. Nếu bạn không biết tại sao nó hoạt động, rất có thể bạn đang giới thiệu các lỗi trong các trường hợp ranh giới mà ai đó hiểu nó sẽ phải dọn dẹp sau.

Giữ "bản nháp" đầu tiên của họ

Khi một nhà phát triển có kinh nghiệm viết một hàm mới có độ phức tạp nhất định, họ bắt đầu với một sơ khai không có gì ngoài biên dịch, sau đó viết lại để thêm các nhận xét mã giả cấp cao cho thuật toán tổng thể, sau đó viết lại các bình luận đó cùng một lúc mã thực tế, thêm và loại bỏ mã giả khi cần để thử nghiệm, sau đó viết lại để loại bỏ sự dư thừa xuất hiện trong quá trình thực hiện, v.v. trong một loạt các cải tiến liên tiếp và tăng dần.

Các nhà phát triển cơ sở có xu hướng viết nó thành một khối lớn, sau đó thực hiện gỡ lỗi vũ lực lớn. Họ không muốn xóa một dòng mã một khi nó được nhập vào trình chỉnh sửa, và rất vui vì cuối cùng họ đã làm cho nó hoạt động đến mức họ không muốn viết lại để cải thiện phi chức năng, nhưng họ là những người cần phải làm vì vậy nhất


1
+1 cho "sao chép và dán thay vì tìm cách hiểu", mặc dù tất nhiên đây không phải là vấn đề duy nhất đối với các lập trình viên mới, chỉ với những người xấu. Các lập trình viên mới ít nhất có cơ hội phát triển từ đó - những người tôi làm việc cùng với những người đã lập trình trong nhiều thập kỷ và vẫn không làm điều này.
Tom Anderson

Một phần của điều này cũng có thể là một hệ quả của phong cách quản lý. Nhiệm vụ đã nói lâu hơn dự kiến ​​và người quản lý muốn tính năng của bạn vào ngày mai. Bạn vội vàng để làm cho nó hoạt động và nhanh chóng chuyển sang nhiệm vụ tiếp theo. Mọi thứ được chia thành các thẻ nhiệm vụ được hiển vi, vì vậy không có thời gian để cấu trúc lại hoặc lùi lại một bước và xem xét vấn đề lớn hơn
Jamie McGuigan

14

Tin rằng bạn là người đầu tiên gặp phải một tình huống.

Mọi vấn đề lập trình mà bạn gặp phải đều phải đối mặt với người khác, dưới một hình thức chung nào đó. Có rất nhiều điều để học hỏi từ các lập trình viên giàu kinh nghiệm. Tôi đủ lớn để nhớ lập trình trước khi Google, và nó hút . Thậm chí còn tệ hơn khi chúng tôi có các công cụ tìm kiếm, nhưng vẫn chưa có nhiều thông tin tốt trên web. Lập trình bây giờ hiệu quả hơn nhiều vì bạn có quyền truy cập vào kiến ​​thức toàn cầu trong vài giây. Những người không sử dụng nó đang phớt lờ nó trong tình trạng nguy hiểm.

Chỉnh sửa :

Để rõ ràng, tôi không ủng hộ lập trình sao chép / dán. Tuy nhiên, tôi chắc chắn rằng bạn cần xem lại kiến ​​thức hiện có trước khi bạn có thể tự đưa ra quyết định tốt.


1
Chà, bạn cũng không muốn nhà phát triển sao chép-dán tất cả mã từ một số tài nguyên đáng ngờ từ Web. Tìm kiếm là tốt để có được một số ý tưởng, có thể giải quyết một số vấn đề hiểu biết cơ bản, nhưng không bao giờ có được giải pháp sẵn sàng. Nó cũng làm cho nhà phát triển trở nên ngu ngốc; có thể nó làm cho anh ta trở thành một nhà sưu tập giỏi, nhưng không phải là một nhà phát minh.
Elijah Saounkine

Tôi đồng ý tại một số điểm với Elijah, mã sao chép mà không dành thời gian để tìm hiểu những gì nó làm, không tăng tốc các kỹ năng lập trình của bạn. Tệ nhất, nó sẽ chiếm lấy và trở thành một thói quen xấu.
setzamora

1
Chắc chắn, nhưng @Scott đã không nói bất cứ điều gì về sao chép và dán mã, anh ta chỉ nói đừng cho rằng bạn là người đầu tiên gặp phải tình huống, nhận ra rằng có thể có một số thông tin và kinh nghiệm ngoài đó bạn có thể hưởng lợi. Ví dụ: Tôi muốn biết nếu hai chuỗi tương tự nhau. Đã có một thuật toán được biết đến để giải quyết vấn đề này? Hãy tưởng tượng nếu một nhà phát triển chỉ quyết định bắt đầu tự lăn mà không hề biết rằng câu trả lời đã tồn tại.
David Conrad

@David Conrad đúng, điểm đã được thực hiện, chúng tôi đang ở cùng một trang ở đây.
Elijah Saounkine

10

Suy nghĩ rằng họ biết tất cả mọi thứ.

Tôi đã có một jr. thực tập sinh đã cố gắng giải quyết mọi thứ với javascript. Đã cố gắng để giải thích một số khái niệm, nhưng anh ấy luôn nghĩ rằng anh ấy có thể làm điều đó tốt hơn. Bây giờ anh ấy đã nghỉ việc và đang làm lại một chương trình lớn mà anh ấy đã xây dựng cho đầu ra in bằng HTML thay vì một công nghệ in sẵn như PDF. Chưa kể một đống vấn đề lớn khác.

Bài học là yêu cầu người cao niên hướng dẫn bao quát chính trong một dự án, đừng tắt kiến ​​trúc mà không có sự giúp đỡ. Bạn có thể viết mã và chi tiết một mình, nhưng hãy chắc chắn rằng bạn ít nhất sử dụng đúng công nghệ.


5

Tôi hiếm khi cảm thấy khó chịu khi đàn em không biết những điều cơ bản, họ không được dạy các kỹ năng công nghiệp như SCC ở trường đại học. Đó là công việc của các nhà phát triển cấp cao để dạy họ. Tôi chỉ thấy khó chịu bởi những cuộc đụng độ cá tính. Nhưng tôi cảm thấy khó chịu nhất bởi các nhà phát triển cấp cao, những người không biết những điều cơ bản.


1
@Graig đúng nhiều điều khiến chúng tôi khó chịu với các nhà phát triển dày dạn về đàn em là những điều chúng tôi phải học không phải ở trường đại học mà trong môi trường thương mại.
Nickz

5

Không muốn nâng cao kiến ​​thức của họ - thay vào đó là con đường ít kháng cự nhất.

Một ngày khác, một thực tập sinh cùng với nhà thiết kế đồ họa (người có kỹ năng lập trình đáng ngạc nhiên) đã yêu cầu trợ giúp vì họ gặp rắc rối khi thực hiện một cái gì đó trong jQuery - việc đóng cửa có thể gây đau đớn nếu bạn không thể thấy nó đến.

Tôi ngồi xuống với thực tập sinh và giải thích chính xác những gì đang xảy ra và tại sao. Chúng tôi đã sửa lỗi, sau đó tôi đã chỉ ra một số cải tiến bổ sung có thể được thực hiện ("vì tôi ở đây") và cuối cùng chúng tôi đã viết lại chức năng có tội trong 10 dòng thay vì 20 và không có lỗi. Sau khi trả lời bất kỳ câu hỏi nào, hài lòng rằng mọi thứ đều ổn trên thế giới một lần nữa, tôi rời đi.

Ngày hôm sau, nhân viên thực tập đến với một câu hỏi tiết lộ rằng anh ta "ừm, muốn thực hiện một số thay đổi và viết lại chức năng theo cách của tôi vì tôi thấy khó hiểu" (phần lớn là hoàn tác những cải tiến của tôi).

Ông hoặc có thể đã cố gắng chăm chỉ hơn để thay thế (đặt câu hỏi thêm, đọc lên trên khái niệm tôi đã đề cập) - Mã quá ngắn có thể không bao giờ có điều đó khó có thể hiểu được - hoặc đi lối thoát dễ dàng. Nó làm tôi buồn mỗi khi tôi thấy ai đó làm sau.


Thật thú vị, tôi tự hỏi mặc dù nếu có thể bạn đã làm cho nó khó đọc hơn. Tôi nhớ người quản lý dự án đầu tiên của tôi đã làm điều này một vài lần (và tôi cũng có lỗi khi thay đổi nó trở lại) .
Maxim Gershkovich

3

Không hiểu OOP. Đáng buồn thay, đây là cách phổ biến hơn hầu hết chúng ta có thể nhận ra.

Biết cách tạo ra một lớp, lớp trừu tượng, giao diện hoặc thậm chí biết đa hình là một điều; hiểu làm thế nào để sử dụng chúng đúng cách cho lợi ích của chương trình của bạn là một cách khác .


Nếu bạn muốn tránh câu hỏi này, tôi đã tìm thấy những câu hỏi này và câu trả lời cho chúng khai sáng:


Giống như ở cấp độ cơ bản, họ không biết ý của bạn là gì khi tạo đối tượng, lớp và kế thừa? Hoặc những thứ nâng cao hơn như sử dụng các mẫu thiết kế (bạn phải thừa nhận, sách GoF khá khó hiểu, mặc dù có những cuốn sách / hướng dẫn khác)
Andrew M

@Andrew Tôi đã mở rộng câu trả lời một chút.
Nicole

1
Và tôi thấy điều ngược lại: không biết cách viết mã thủ tục cũ đơn giản bằng C vì chỉ được dạy OOP. Sau đó, một lần nữa, đừng để tôi nói về những người không được dạy viết trình phân tích cú pháp nữa bởi vì họ được thông báo rằng tất cả những vấn đề đó có thể được giải quyết bằng lex và yacc.
quick_now

1
@quickly_now Đó là một điểm tốt, mặc dù writing code other ways than OOPwriting bad OOPlà hai điều hoàn toàn khác nhau. Đầu tiên, tôi không có vấn đề gì với.
Nicole

Hầu hết các trường đại học không dạy thiết kế hướng đối tượng. Ngoài ra, nhiều nơi làm việc hoạt động như silo ngay cả với các nhà phát triển cơ sở ... hoặc có các nhà phát triển "cấp cao" không biết lập trình hướng đối tượng. Có những nhà phát triển "cao cấp" đã nhận được danh hiệu từ những năm làm việc x và những nhà phát triển cấp cao biết công cụ của họ ....
Cervo

3

Không biết những gì bạn không biết, và trong sự thiếu hiểu biết, bạn biết tất cả mọi thứ.

(Và anh em họ thân thiết của nó, không muốn hỏi.)

Một phần đây là một điều có tổ chức - một cảm ứng đến thích hợp sẽ đi một chặng đường dài để ngăn chặn một số điều này trở thành vấn đề. Nhưng rất ít công ty có thời gian hoặc người sẵn sàng cho một cảm ứng đến - một cái gì đó sẽ mất từ ​​vài ngày đến vài tuần và khiến các nhà phát triển nghỉ việc. Vì vậy, chúng tôi phải dập tắt đám cháy thay thế.


2

Tôi ngạc nhiên khi thấy nhiều lập trình viên cơ sở tương đối mới trong một chương trình CS yếu về thuật toán. Lựa chọn thuật toán kém có thể không thực sự nổi bật trong các ứng dụng kinh doanh, nhưng khi xử lý hàng tỷ yêu cầu dịch vụ web mỗi ngày, điều đó thực sự quan trọng.

Đây là một câu hỏi phỏng vấn tôi sử dụng mà hầu hết tất cả các lập trình viên Junior đều bỏ lỡ vấn đề nổi bật:

Viết mã tính toán số Fibonacci thứ N.

Họ hầu như luôn luôn viết những điều rõ ràng nhất nhưng không hiệu quả

int Fib(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;
    return Fib(n-2) + Fib(n-1);
}

Khi được yêu cầu nhận xét về độ phức tạp của thuật toán, tôi thường nhận được "nó tệ hơn O (N) ... uhm ... O (N logN)". Nó thực sự còn tệ hơn thế nữa ...


1
để trả lời câu hỏi của bạn về compleixty, người ta nên biết rằng công thức tính số lượng của Wikipedia mà không cần đệ quy, mà anh ta sẽ sử dụng thay vì đệ quy ở vị trí đầu tiên.
P Shved

1
@Pavel: Có một giải pháp O (n) và O (1) ... trên thực tế Like every sequence defined by linear recurrence, the Fibonacci numbers have a closed-form solution. en.wikipedia.org/wiki/Fiborie_number#Closes-form_expression
Eric J.

1
Tôi không nói rằng giải pháp bạn đăng là hoàn hảo. Tôi chỉ đang đặt câu hỏi về sự liên quan của câu hỏi tiếp theo của bạn với một giải pháp như vậy, câu hỏi về sự phức tạp. Bạn muốn đạt được điều gì bằng cách hỏi nó, và quan trọng nhất là tại sao bạn mong đợi rằng bạn muốn đạt được điều gì cho câu trả lời cho câu hỏi trước? (Tôi đã đưa ra quan điểm của mình chưa?)
P Shved

để làm rõ hơn quan điểm của tôi, tôi khuyên bạn nên hỏi về cách cải thiện mã thay vì yêu cầu ước tính độ phức tạp. Tôi chắc chắn rằng một số sinh viên tốt nghiệp CS sẽ đề xuất ghi nhớ hoặc nói rằng họ biết công thức nhưng không muốn hiển thị ngay lập tức vì bạn nghĩ họ là những người thông minh.
P Shved

Trong điều kiện thực tế, một chức năng như vậy có thể được phát hiện bằng cách sử dụng một hồ sơ và được tối ưu hóa bằng cách thêm vào bộ nhớ cache ghi nhớ. Sự không hiệu quả chỉ thực sự là một vấn đề đối với các giá trị lớn của N. Cách tốt nhất để dạy một thiếu niên về mã như vậy là buộc họ phải thực hiện toàn bộ quá trình thực thi mã bằng trình gỡ lỗi. Đối với các giá trị thực sự lớn của N, hóa ra có một công thức toán học maths.surrey.ac.uk/hosted-sites/R.Knott/Fiborie/ phỏng
Jamie McGuigan

1

Làm thụt mã ngược!

Tất nhiên đó không phải là "điển hình". Tôi không bao giờ có thể tin nó thậm chí có thể, nhưng những gì một nhà phát triển bình thường sẽ viết như thế nào

try {
    switch(action){
        case case1:
            ...
            break;
        case case2:
            ...
            break;
        default:
            break;
    }
}
catch(Exception e) {
    e.printStackTrace();
}

cô ấy sẽ viết như thế (Chúa ơi, dường như tôi vẫn không thể!)

            try {
        switch(action){
    case case1:
...
break;
    case case2:
...
break;
    default:
break;
        }
            }

Thất vọng phải không?


Cái gì nhân danh ...
Mike Speed

1
Thật tuyệt vời !!!
javanna

Nó gần như là nơi họ nói tiếng Ả Rập, tiếng Do Thái hoặc tiếng Trung Quốc nơi bạn đọc từ phải sang trái, chứ không phải là quy ước từ trái sang phải. Là một cách hoàn toàn hợp lệ để thụt mã của bạn, nhưng điều đó có nghĩa là bạn cần phải thụt lại toàn bộ tệp của mình dựa trên mức lồng nhau sâu nhất và nó làm cho mã của bạn không tương thích với mọi người chia sẻ quy ước ngược lại.
Jamie McGuigan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.