Chọn nỗ lực thiết kế mã hoặc sự lười biếng trong thế giới Ngân hàng


23

Tôi đã làm việc được hai năm trong một Ngân hàng Đầu tư tuyệt vời.

Tôi đã thực hiện một số dự án kỹ thuật với mong muốn tạo mã được tối ưu hóa nhất, tôn trọng các mẫu thiết kế tốt được điều chỉnh, nguyên tắc RẮN, luật của demeter và tránh tất cả các loại mã trùng lặp ...

Khi giao hàng trong sản xuất => không có lỗi, tất cả đã xảy ra như mong đợi.

Nhưng, phần lớn các nhà phát triển đã đến với tôi để chính xác rằng tất cả mã của tôi quá phức tạp để đọc hiểu. Tôi đã lắng nghe ví dụ: "tạo một số if và instanceof, quên tính đa hình để nó sẽ rất dễ dàng để sửa các lỗi sản xuất khẩn cấp". Tôi không thích trả lời ......

Biết các nhà phát triển này không tò mò chút nào, từ chối nỗ lực tìm hiểu một thiết kế tốt (ví dụ, 90% các nhà phát triển không biết Mô hình chiến lược là gì và tạo mã thủ tục và không bao giờ thiết kế vì họ muốn, đơn giản ), các nhà quản lý dự án của tôi nói với tôi rằng tôi thực sự sai lầm và quá lý tưởng cho thế giới Ngân hàng.

Bạn sẽ khuyên tôi điều gì? Tôi có nên giữ mong muốn về mã thực sự tốt hay thích ứng với phần lớn các nhà phát triển, tôi nhắc lại, thực sự không thú vị bởi mã thiết kế theo tôi, tất cả vẻ đẹp của công việc nhà phát triển của chúng tôi.

Hoặc ngược lại, họ có nên học các nguyên tắc OO cơ bản và thực tiễn tốt nhất để tự thích nghi với mã của tôi không?


19
Thật khó để bay lên như đại bàng khi bạn làm việc với gà tây ;-)
JonnyBoats

8
Thay đổi tổ chức của bạn hoặc thay đổi tổ chức của bạn. - Martin Fowler
Don Roby

9
@ Mik378 Bạn có thể gặp vấn đề về giao tiếp. Nếu bạn viết tài liệu mã của mình một cách chậm chạp như bạn đã viết câu hỏi này (và càng có nhiều "cruft" thì bạn càng cần nhiều tài liệu hơn, để mọi người biết ITradeSettlementVisitorgiao diện này phải làm gì), đồng nghiệp của bạn có quyền khiếu nại. Đó là một điều để viết mã đẹp mà bạn thích, đó là một cách khác để cấu trúc và ghi lại nó theo cách làm cho nó có thể truy cập và sử dụng được cho người khác.
quant_dev

2
@quant_dev: Tôi nghĩ rằng bạn đang giả sử một chút quá nhiều về Mik378. Câu hỏi của anh ấy dường như không được nói với tôi; Anh ấy không chỉ là người bản ngữ. Tôi không thích sự dài dòng và thiết kế quá sức trong OO nhiều như bạn tưởng, nhưng tình huống Mik378 mô tả cũng rung chuông: Tôi đã làm việc với quá nhiều lập trình viên không thể hiểu những thứ đơn giản như biểu thức boolean (vì vậy họ sẽ viết "if (exp) then True other false") ... Có khả năng loại người này cũng sẽ sợ hãi bởi các mẫu thiết kế, đa hình và do đó sẽ trở lại mã thủ tục cũ đơn giản.
Andres F.

2
Tôi hoàn toàn không đồng ý rằng việc giữ mã đơn giản và dễ bảo trì cho đồng nghiệp của bạn là lười biếng như đã nêu trong tiêu đề.

Câu trả lời:


20

những người quản lý dự án của tôi nói với tôi rằng tôi thực sự sai lầm và quá lý tưởng cho thế giới Ngân hàng.

GTFO!

Thời gian để rời đi và thương hại họ. Tại sao bạn nên cho một quái? Bạn biết điều đó sẽ khiến họ mất tiền trong thời gian dài với đội ngũ nhân viên bất tài của họ. Đây không phải là một trò chơi thảo luận kỹ thuật. Đây là về chính trị. Nhờ họ đào tạo các nhà phát triển khác hoặc GTFO! Nếu bạn không có đủ sức nặng chính trị, thì GTFO! Tìm kiếm một công ty với thực tiễn tốt hơn.

Lý do duy nhất để ở đó là một khoản bồi thường thỏa đáng cho những cơn đau đầu của bạn. Vì vậy, họ trả tiền tốt hơn mức trung bình hoặc GTFO! Tôi nghi ngờ bạn có thể phát triển ở đó như là một nhà phát triển phần mềm. Tăng trưởng trong nghề nghiệp của chúng tôi chủ yếu đạt được bằng cách làm việc với những người giỏi hơn bạn và những người khuyến khích thực hành tốt nhất. Và bạn càng giỏi, giá trị thị trường của bạn càng cao đối với các công ty quan tâm.

Vâng, tôi biết đây không phải là một trong những câu trả lời thông thường của tôi nhưng thực sự, nếu bạn không thể chơi trò chơi chính trị trong công ty này, GTFO.

Bạn sẽ khuyên tôi điều gì? Tôi có nên giữ mong muốn về mã thực sự tốt hay thích ứng với phần lớn các nhà phát triển, tôi nhắc lại, thực sự không thú vị bởi mã thiết kế theo tôi, tất cả vẻ đẹp của công việc nhà phát triển của chúng tôi.

Tôi sẽ không làm việc cho một công ty muốn tôi cung cấp các giải pháp tối ưu. Tôi muốn khắc tên tôi vào phần mềm. Tôi muốn tự hào về nó. Tôi không viết các ứng dụng thủ tục bằng các ngôn ngữ dựa trên mô hình OO. Tôi tin vào phần mềm chất lượng cao và nếu công ty không có, tôi sẽ GTFO! Hy vọng bạn có đủ "đụ bạn tiền".


4
1 - Sau khi nó xảy ra với tôi những gì GTFO là ... ( urbandictionary.com/define.php?term=gtfo )
Reddog

2
@Falcon Tôi hoàn toàn đồng ý với bạn và thật vui khi thấy mọi người chia sẻ ý tưởng của tôi; và đặc biệt khi bạn nói: "Tăng trưởng trong nghề nghiệp của chúng tôi chủ yếu đạt được bằng cách làm việc với những người giỏi hơn bạn và những người khuyến khích thực hành tốt nhất." Điều tuyệt vời nhất và bực bội thực sự là tôi là nhà phát triển trẻ hơn và tôi không thực sự học được từ những người lớn tuổi hơn. Cảm ơn câu trả lời của bạn :)
Mik378

+1, tôi hoàn toàn đồng ý. Ngân hàng này dường như không phải là một môi trường làm việc tốt, và các vấn đề của nó dường như không thể vượt qua: lập trình viên tồi, quản lý tồi. GTFO thực sự!
Andres F.

2
@ Mik378: Nhà tuyển dụng hiện tại của bạn không thể sử dụng hết khả năng của bạn và do đó sẽ không thể trả cho bạn những gì bạn có giá trị. Một tổ chức tốt hơn sẽ có thể nhận được nhiều giá trị hơn từ bạn và có thể trả cho bạn nhiều hơn.
kevin cline

+1, Nếu có thể cung cấp cho bạn nhiều ưu đãi hơn, bạn sẽ nhận được 1000 từ tôi. Bản thân tôi đã làm việc trong một ngân hàng đầu tư, tôi biết chính xác Mik378 đang làm gì. Đó là một nơi sinh sản cho hành vi độc hại, phản ứng phân cực và egomania. Không phải là một môi trường ý tưởng để thúc đẩy xuất sắc kỹ thuật.
Hành tinh hoang vắng

18

Điểm khó khăn. Tôi nghĩ rằng bạn có thể đi song song hai cách, đứng lên quan điểm của mình và thể hiện ý chí để thỏa hiệp:

  • Đây là về tiền. Như bất kỳ công việc dev nào trong thực tế, nhưng vì bạn nhấn mạnh vào môi trường ngân hàng, điều này sẽ hoạt động tốt hơn nữa;). Cho họ thấy rằng phong cách của bạn tiết kiệm tiền. Tìm một ví dụ về cách thay đổi yêu cầu có thể được thực hiện dễ dàng vì thiết kế của bạn. Cố gắng tìm một đoạn mã khác (bạn phải chắc chắn rằng bạn không quá hung dữ ở đây, nhưng này, đó là về việc so sánh các kiểu mã) có xu hướng bị phá vỡ sớm và cho họ thấy bạn không cần phải làm thế nào quan tâm đến các vấn đề như vậy bởi vì mã của bạn có chất lượng tốt hơn để bắt đầu.

  • Đây là về tiền. Điều gì nếu phong cách mã hóa của bạn trong thực tế tốn tiền? Nó cũng có thể làm được, nếu người khác dành nhiều thời gian cố gắng hiểu mã của bạn hơn những gì được lưu bởi thiết kế phù hợp. Bạn có thể đang làm điều đúng đắn về mặt kỹ thuật và vẫn không đóng góp tích cực cho nỗ lực của nhóm. Ngoài ra, có thể lạm dụng thiết kế OOP. Tôi với bạn ở khía cạnh "thiết kế tốt là đẹp", nhưng tôi đang cố gắng làm cho bạn biết ở đây về quan điểm của họ và cách họ thực sự có thể đúng theo quan điểm của họ. Song song với điểm trước đó, hãy cố gắng tìm một vị trí mà bạn dùng quá liều. Điều đó cung cấp cho bạn một số chỗ để điều động: Bạn có thể nói, ok, tôi có thể thực dụng hơn một chút ở đây và ở đó, nhưng hãy nhìn xem, cũng có những nơi mà mã này thực sự tốt hơn.


Cảm ơn câu trả lời phát triển của bạn. Tôi đã ghi nhận lời khuyên của bạn :)
Mik378

Tôi sẽ thêm vào vấn đề FizzBuzz đơn giản này. Viết nó bằng Java và sau đó thực hiện lại theo cách TDD, đột nhiên không thể đọc được ;-).
Martijn Verburg

@Martijn Verburg - Bạn có nghĩ TDD dẫn đến mã không thể đọc được không?
Don Roby

@Don Roby - đôi khi có, đặc biệt là khi giao dịch với thứ gì đó như FizzBuzz bằng ngôn ngữ OO
Martijn Verburg

+1 @ Nicolas78 "Ngoài ra, có thể lạm dụng thiết kế OOP" - ví dụ: tạo các kiểu dữ liệu nguyên thủy Các đối tượng như int chẳng hạn.
trị liệu

16

Nhưng, phần lớn các nhà phát triển đã đến với tôi để chính xác rằng tất cả mã của tôi quá phức tạp để đọc hiểu

Có phải nó đã xảy ra với bạn rằng họ có thể đúng?

Tôi đã làm việc với một người nỗ lực rất nhiều để viết mã mà anh ta mô tả là thanh lịch. Ông đã dành rất nhiều thời gian để chê bai công việc của người khác là không thanh lịch. Khi cần thiết phải duy trì mã, mã của anh ấy không phải là mã tôi sẽ chọn để sửa đổi. Nó rất chính xác và chính xác đến nỗi việc thay đổi nó vô cùng nguy hiểm.

Từ thú vị mà bạn đề cập ở đây là "phức tạp". Mã có thể được mô tả là phức tạp hiếm khi cũng có thể được mô tả là đặc biệt tốt.


1
Đồng ý +1000. Mã dành cho con người. Tất nhiên, hãy cẩn thận rằng các lập trình viên khác sẽ có thể đọc những gì hầu hết các lập trình viên viết. Bất cứ ai không hiểu những điều cơ bản nên được thực hiện để cải thiện.
Người giữ Iain

3
+1 @teemar cho "Điều đó có xảy ra với bạn không mà họ có thể đúng?" và "Mã có thể được mô tả là phức tạp hiếm khi cũng có thể được mô tả là đặc biệt tốt."
trị liệu

2
-1: Tôi không nghĩ họ đúng, chỉ cần một chút cao cấp và tôi nghĩ rằng việc đọc kỹ hơn câu hỏi làm cho điều đó trở nên rõ ràng. Cụm từ chính của OP là "tránh tất cả các loại mã trùng lặp ..." Anh ta đang cố gắng để mã hóa mã, nhưng làm như vậy đòi hỏi sự tinh tế mà các đồng nghiệp của anh ta dường như thiếu. Ông cũng trích dẫn các đề xuất của đồng nghiệp của mình để "chỉ cần thêm một ... ví dụ". Điều đó cũng cho tôi biết rằng OP đang đi đúng hướng và các đồng nghiệp của anh ta đang xây dựng một WTF lớn.
kevin cline

Điều khiến tôi lo lắng là OOP "Quá phức tạp" có thể là một điều tốt nhưng nó cũng có thể trở nên rất phức tạp rất nhanh. Tôi nghi ngờ Poster gốc có thể đã uống viện trợ mát mẻ OOP và không hiểu rằng đó không phải lúc nào cũng là cách tốt nhất để viết mã, và anh ta có thể giới thiệu rất nhiều điều phức tạp khi không cần thiết.
Zachary K

Âm thanh như đồng nghiệp này của bạn không có thử nghiệm của anh ấy để bảo trì trong tương lai. Bạn có thể muốn đưa lên với người quản lý dự án.

10

Các nhà sản xuất đồ nội thất thời Victoria (ít nhất, những người mà chúng ta vẫn thấy ngày nay) là những thợ thủ công thực sự, những gì họ làm là có chức năng, đẹp, được chế tạo tốt và được thiết kế và xây dựng để tồn tại lâu dài. Tuy nhiên trong 150 năm qua, thế giới đã thay đổi. Không nhiều người sẵn sàng trả tiền cho sự khéo léo như vậy, khi các lựa chọn thay thế rẻ hơn mang tính thực dụng hơn khi mua bàn ăn.

Nhiều lập trình viên muốn trở thành thợ thủ công cũ, không may, thương mại ra lệnh rằng điều này không thể xảy ra mọi lúc. Bạn có một sự lựa chọn, thích nghi hoặc rời đi. Có những công ty muốn thợ thủ công, nhưng họ đông đảo hơn những người muốn sản phẩm chủ yếu hoạt động, giá rẻ và bây giờ.

Gợi ý cho tôi rằng bạn không phù hợp với hầu hết các phát triển phần mềm thương mại là "Khi giao hàng trong sản xuất => không có lỗi". Thậm chí Nasa không đạt được điều đó với các tàu con thoi không gian.

Những nơi duy nhất mà bạn chú ý đến chi tiết, và do đó chi phí ban đầu, có thể được chấp nhận là các hệ thống quan trọng trong cuộc sống cấp 1 - ví dụ Avionics / Hàng không vũ trụ, Ô tô, Quân sự và Y tế.


1
+1 @mattnz cho "Bạn có lựa chọn, thích nghi hoặc rời đi."
Therobyoukn

2
Tôi không đồng ý - đây là một ngân hàng . Họ có xu hướng thích rằng không có lỗi trong phần mềm của họ vì lỗi có thể phát triển khá tốn kém. Ngoài ra các giải pháp có thể chạy trong nhiều năm hoặc nhiều thập kỷ.

2

Vấn đề là bạn đang làm việc không đúng chỗ. Có vẻ như bạn là một lập trình viên rất có khuynh hướng học thuật. Bạn sẽ không làm tốt trong môi trường mà bạn đang ở và rất có thể một số lý do sẽ được phát minh để loại bỏ bạn và mã "quá phức tạp" của bạn. Bạn có thể được giao nhiệm vụ rác và / hoặc được đánh giá hiệu suất kém và như vậy cho đến khi bạn tự mình rời đi hoặc họ có một dấu vết giấy che phía sau đủ để sa thải bạn.

Tôi khuyên bạn nên tìm một nơi làm việc sẽ coi trọng khả năng học tập của bạn. Họ đang ở ngoài kia. Bạn cũng sẽ tìm thấy một số thứ nằm trong hàng rào giữa thực dụng và học thuật. Một công việc như thế có thể là lựa chọn tốt nhất của bạn vì điều đó sẽ cho phép bạn mời một số hỗn loạn vào cách tiếp cận của bạn khi bạn giúp người khác khôi phục lại công việc của họ.


+1 @jfrankcarr cho quan sát sắc sảo về "có thể được giao nhiệm vụ rác" (một hình thức sa thải mang tính xây dựng)
trị liệu

2

Trước khi thực hiện các biện pháp quyết liệt như thay đổi chủ nhân của bạn, tôi sẽ cố gắng cải thiện khả năng của chính bạn để giải thích những người không lập trình như bạn điều hành tại sao cách mã hóa của bạn tốt hơn cho công ty và tiết kiệm thời gian và tiền bạc cho họ. Ngoài ra, hãy chắc chắn rằng bạn không áp dụng các mẫu thiết kế chỉ vì lợi ích của các mẫu thiết kế - bạn có chắc là bạn cũng đã tuân theo các quy tắc của KISS và YAGNI? (Ok, mô hình chiến lược và đa hình không phải là khoa học tên lửa, hãy cho đồng nghiệp của bạn một chút thời gian để thích nghi và giải thích cho họ lý do tại sao bạn chọn cách tiếp cận đó.)


Tôi đồng ý, vấn đề là họ không muốn học, không muốn thay đổi tâm lý của họ (Tôi không phải là thiên tài về Java nhưng khi tôi không hiểu điều gì đó mà phần lớn mọi người coi là một điều tuyệt vời biết, tôi sẽ nỗ lực để tìm hiểu nó (sách, bài báo trên internet, stackoverflow, v.v ...) Tóm lại, họ không muốn đau đầu với các mẫu (tôi nói mẫu nhưng tôi có thể nói nguyên tắc lập trình "Tuyệt vời" hơn nói chung) điều đó không mang lại cho họ nhiều tiền hơn ... Thật khó để nói điều đó nhưng nó rất đúng. Nếu chỉ có ứng dụng hoạt động tốt => Tôi chắc chắn sẽ không viết chủ đề này.
Mik378

@ Mik378: bạn đang nói rất nhiều về những gì "những người khác làm sai". Chắc chắn rằng mọi thứ bạn đã làm là đúng?
Doc Brown

Đa hình @DocBrown có nhược điểm riêng biệt là phân đoạn logic trên các tệp trong đó cá thể đơn giản giữ nó trong một phương thức duy nhất. Có lẽ các đơn vị làm việc quá nhỏ?

2

Tại công ty của tôi, chúng tôi đã tiến hành một loạt các hội thảo dựa trên Clean Code Developer . Mục đích là để tạo ra một diễn đàn bên ngoài hoạt động kinh doanh hàng ngày với sự bận rộn và thời hạn và thỏa hiệp xấu, nơi các nhà phát triển có thể tìm hiểu về các nguyên tắc thiết kế phần mềm (như bạn đã đề cập), kỹ thuật lập trình, v.v. và phản ánh về các dự án của họ và công việc riêng của họ.

Các ví dụ thực tế từ các dự án thực tế cũng được thảo luận. Phản hồi từ những người tham gia là AFAIK rất tích cực. Thật khó để đo lường một lợi ích thực tế, mặc dù.

Tham dự các hội thảo đó là một phần thời gian do công ty tài trợ, một phần thời gian rảnh rỗi của người tham gia. Bạn sẽ không tiếp cận được với những đồng nghiệp không quan tâm đến việc học và chỉ muốn làm công việc của họ và về nhà, nhưng đối với bất kỳ ai khác có hứng thú với công việc của mình thì điều này có thể thú vị.


Tôi thích ý tưởng này rất nhiều.
cám dỗ

2

Trước hết tôi sẽ kiểm tra xem cách của bạn có thực sự tốt hơn không. Mã hướng đối tượng có thể rất hay, nhưng nó cũng có thể là cơn ác mộng của các tác dụng phụ ẩn và mỗi hành động có thể yêu cầu một vài lớp khác nhau.

Tốt hơn hết hãy đến InfoQ và xem buổi nói chuyện của Rich Hickey về "Simple Made Easy"


1

Bạn sẽ phải nhượng bộ một chút nếu bạn muốn tiếp tục làm việc ở đó mà không phải vật lộn liên tục. Một nhóm nhà phát triển là tất cả các thủ tục sẽ không chấp nhận đa hình ngay lập tức. Mặc dù họ có thể không thể thiết kế theo cách OO, họ có thể học từ mã của bạn. Họ có thể đánh giá cao rằng một số mã của bạn dễ bảo trì hơn.

Là một lưu ý phụ, bạn cần đặt câu hỏi trong quá trình phỏng vấn để xem quy trình phát triển và phương pháp mã hóa nào được sử dụng nếu bạn nghĩ rằng điều quan trọng là phải phù hợp với sở thích của bạn.


0

Trường hợp khẩn cấp xảy ra. Bạn không hoàn hảo và đôi tay của họ sẽ làm hỏng mã của bạn tại một số điểm. Điều đó trừ khi bạn không bao giờ nghỉ, điều này, như bác sĩ đa khoa của bạn sẽ xác nhận, không tốt cho sức khỏe của bạn. Và dẫn đến cơ hội cao hơn để phát ra mã kém.

Mã của bạn có thể có chất lượng cao hơn, (thực tế chưa được chứng minh) nhưng họ có chính sách . (chắc chắn là sự thật

Bạn đã được cảnh báo tuân theo các chính sách và sẽ chịu trách nhiệm về việc không tuân theo chúng. Trong tình huống khẩn cấp. Trong một ứng dụng ngân hàng. Ý tôi là, nếu mục tiêu của bạn kết thúc kém và trong tù tôi có thể tìm ra nhiều cách hài hước và ý nghĩa hơn để có được kết quả tương tự.

Tuy nhiên, bạn cùng phòng của bạn sẽ rất vui mừng khi nghe bạn lan man về sự thiếu tò mò của các đồng nghiệp cũ của bạn.

. sẽ có 40% cơ hội ghi được một đòn chí mạng)


1
Cá nhân, tôi nghĩ rằng một nhà phát triển thực sự rất giỏi làm mã tuyệt vời nhanh như mã bẩn đó. Tôi đồng ý với bạn về khía cạnh khẩn cấp ... nhưng khi một dự án được quy hoạch trong 4 tháng và các nhà phát triển thậm chí không có cái nhìn toàn cầu về những gì họ sẽ làm, làm thế nào và nếu một cái gì đó đã tồn tại trong ứng dụng sẽ giúp họ, tôi không thể chấp nhận nó. Khi một nhà phát triển nói: "Tôi biết mã này là khủng khiếp nhưng tôi sẽ không bao giờ cấu trúc lại nó bởi vì tôi có thể phá vỡ nó", thật là nực cười. Họ có phải là kỹ sư hay không? Một kỹ sư nên chấp nhận rủi ro và thực hiện một số bài kiểm tra đơn vị thực sự tốt để được tự tin
Mik378

1
Tôi sẽ đồng ý nếu chúng ta không nói chuyện ngân hàng ở đây. Tôi luôn cảm thấy họ là một nhóm khác với các lập trình viên khác. Họ cũng thường già hơn. (Trong môi trường xung quanh tôi, ít nhất, như mọi nơi, tôi suy luận) Toán học của họ rất đơn giản, nhưng độ chính xác của chúng thì không.
ZJR

@ZJR Bạn đang bị mang đi đây, với những lời tiên tri của bạn về OP đang ngồi tù vì sử dụng OO. Hầu hết các mã ngân hàng không phải chịu sự giám sát như vậy.
quant_dev

0

Hãy cố gắng nhớ rằng lập trình được một số người coi là phương tiện để kết thúc chứ không phải vì lợi ích của chính nó. Hãy nghĩ về tất cả các sản phẩm và dịch vụ bạn sử dụng: bạn có dành nhiều thời gian để xem xét nếu mã bên dưới được thực hiện một cách thanh lịch? Hay bạn chỉ đơn giản là đánh giá cao họ khi họ chỉ làm việc? Tìm một ngành công nghiệp hoặc khiến bạn đam mê, sau đó tìm một tổ chức với điều đó, sau đó cung cấp cho họ các giải pháp bao gồm lập trình nhưng không chỉ vậy. Các vấn đề có thể được giải quyết một cách xuất sắc theo những cách khác nhau.

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.