Làm thế nào một người nên sử dụng để suy nghĩ FP đọc mã mệnh lệnh?


14

Tôi tốt nghiệp đại học khoảng năm tháng trước, và đã làm việc trong một công ty khởi nghiệp địa phương trong bốn tháng qua. Khi còn học đại học, tôi đã tự học Haskell, F # vv. Chúng tôi đã được dạy Java tại trường đại học, nhưng tôi đã sớm được tiếp xúc với lập trình chức năng và đã dành nhiều thời gian hơn cho nó so với tôi đã làm với lập trình bắt buộc. Kết quả là, bộ não của tôi có dây cho một suy nghĩ chức năng. Công ty tôi đã tham gia sử dụng Python và mã này rất bắt buộc. Tôi đang có một thời gian rất khó đọc mã mệnh lệnh. Tôi không thể theo dõi các đột biến. Khi một tổ hợp for-if-other-for -... lồng sâu hơn bốn cấp, tôi hoàn toàn mất dấu vết về những gì đang xảy ra trong mã. Để thêm vào nó, Python là một ngôn ngữ động, vì vậy không có loại nào trong mã. Nó ' Đã được vài tuần kể từ khi tôi cố gắng hiểu một phần của cơ sở mã của chúng tôi (được cho là "phức tạp vừa phải"), nhưng tôi chưa đạt được tiến bộ đáng kể nào cho đến nay khi hiểu về nó. Vui lòng cung cấp cho tôi một số kỹ thuật thực tế về cách tôi nên tìm hiểu về mã đó. Cảm ơn trước!

Chỉnh sửa:
Có lẽ tôi cũng nên đề cập rằng thực sự không có nhiều bình luận trong mã và các tên cũng không trực quan lắm.


1
Bạn có muốn có ý kiến ​​hoặc ý kiến ​​không chính xác? Tôi chắc chắn ý kiến ​​sẽ không già đi trong các điều kiện bạn đề cập.
Larry Coleman

Trừ khi mã nằm trong tập hợp mã cực kỳ nhỏ có thể được quy là "tự nhận xét", tôi muốn có ít nhất một số nhận xét, ít nhất có thể bao gồm một số gợi ý hữu ích để hướng dẫn tôi cách nói vô nghĩa không thể giải mã được! Nhưng đó chỉ là tôi!
John Tobler

2
Ngay cả các lập trình viên cấp bách có xu hướng hạn chế tác dụng phụ của họ, ít nhất là bằng trực giác và viết các phương pháp nhỏ. Tôi nghĩ rằng bạn vừa hạ cánh trên một cơ sở mã kém lý tưởng.
Mauricio Scheffer

Câu trả lời:


14

Hiểu mã di sản là khó. Nó gần như không có gì để làm với chức năng so với thủ tục.

  1. Tạo một bản đồ của một số loại. Một sơ đồ thành phần của các gói và mô-đun Python. Đối với mỗi mô-đun, bạn sẽ cần tạo sơ đồ lớp.

  2. Sử dụng trình thông dịch Python. Bạn sẽ có thể nhập các mô-đun, tạo các đối tượng và thực hiện chúng một cách tương tác. Đó là lý do Python phổ biến. Bạn có thể in type(x)để xem loại biến ( x ) thực sự là gì.

  3. Khi nghi ngờ, hãy chắc chắn đọc mã kiểm tra đơn vị. Nếu không có mã kiểm tra đơn vị, bạn có các vấn đề lớn, lờ mờ ngoài việc học một cơ sở mã mới.

  4. Viết công cụ xuống. Bắt đầu với các tài liệu phụ. Sau đó, khi bạn nghĩ rằng bạn biết những gì đang xảy ra, hãy thêm nhận xét chuỗi cho các hàm, phương thức và lớp. Thêm những sớm và thường xuyên.

  5. Sử dụng Sphinx với 'autodoc' để thu thập những gì bạn đang học.

Phần quan trọng nhất là đây. Thật khó để giữ mọi thứ trong đầu bạn. Nó dễ dàng hơn để giữ mọi thứ trên các tập tin tài liệu.


6
+1. Hiểu bất kỳ mã kế thừa nào là khó, ngay cả khi nó được viết tốt.
quant_dev

12

Tôi đang có một thời gian rất khó đọc mã mệnh lệnh. Khi một tổ hợp for-if-other-for -... lồng sâu hơn bốn cấp, tôi hoàn toàn mất dấu vết về những gì đang xảy ra trong mã.

Đợi ... bất cứ ai hoàn toàn mất theo dõi mã với các mức lồng nhau sâu như vậy. Hay như Linus Torvalds đã nói:

Nếu bạn cần nhiều hơn 3 cấp độ thụt đầu dòng, dù sao bạn cũng bị vặn và nên sửa chương trình của mình.

Có lẽ tôi cũng nên đề cập rằng thực sự không có nhiều bình luận trong mã và các tên cũng không trực quan lắm.

Điều này không có vẻ như công ty của bạn đang tuân thủ các thông lệ tốt nhất phổ biến.

Nếu tôi là bạn, tôi chỉ cần cố gắng hiểu cơ sở mã theo kỷ luật và lực lượng. Chỉ cần đào sâu vào nó, hết lần này đến lần khác. Nó có lẽ giống như bất cứ điều gì. Ngay bây giờ bạn cảm thấy như bạn đang ở dưới nước và không thể thở được nhưng tiếp tục kiểm tra cơ sở mã hóa và chẳng mấy chốc bạn sẽ bơi lên mặt nước.

Tôi e rằng câu hỏi của bạn thiếu các chi tiết kỹ thuật để cung cấp cho bạn một lời khuyên tốt về cách hiểu về cơ sở mã, nhưng sẽ không bao giờ sai khi đi qua nó với các đồng nghiệp có kinh nghiệm trong một vài phiên. Hãy để họ giải thích cho bạn kiến ​​trúc tổng thể và cách các thành phần khác nhau tương tác với nhau, cùng với các quyết định triển khai mà họ đưa ra.

Thật khó để đưa ra lời khuyên chung cho việc chuyển đổi từ ngôn ngữ chức năng sang ngôn ngữ bắt buộc / OO. Chắc chắn, tôi có thể đề cập đến một vài cụm từ hoa mỹ như "Bạn cần suy nghĩ về trạng thái và hành vi của đồ vật", nhưng những điều này sẽ không giúp bạn nhiều, tôi nghĩ đây là điều bạn phải trải nghiệm.


Vấn đề thụt đầu dòng có thể tồi tệ hơn: khi ngôn ngữ là mã cột (như RPG), và có không phải là bất cứ thụt đầu dòng thực tế. Một số công cụ cố gắng khắc phục điều này ...
Clockwork-Muse

2

Nếu (lớn nếu từ các thực tiễn xấu mà bạn mô tả) có các bài kiểm tra đơn vị, thì bạn có thể xem xét các cách đó để xem cách kiểm tra mã. Điều này có thể cung cấp một cái nhìn sâu sắc tốt về những gì mã làm.

Mặt khác, tôi khuyên bạn nên đọc mã python chung hơn để làm quen với cách viết.


2

Bạn có thể thử dịch một số đoạn từ Python sang giả Haskell hoặc bất cứ điều gì bạn thích. Điều đó có thể cho bạn cảm giác về những công trình bắt buộc lỏng lẻo ánh xạ vào những công trình chức năng. Khi bạn có thêm kinh nghiệm, các công trình bắt buộc sẽ bắt đầu cảm thấy bản địa hơn.

Tôi đã chuyển từ lập trình OCaml và Haskell sang lập trình Java và Python và kinh nghiệm của tôi là lập trình bắt buộc không phải là một bước nhảy vọt như gõ động, mà cho đến ngày nay cảm thấy xa lạ.


1

Tôi khuyên bạn nên đặt các điểm dừng và bắt đầu sử dụng lệnh Tiếp theo (như thể bạn đang gỡ lỗi), điều này sẽ giúp bạn hiểu luồng (có thể trên các nhánh, có những đường dẫn có nhiều khả năng được thực hiện, trên những đường bạn nên tập trung để có được ý tưởng chung của mã).

(Tôi đã có kết quả tốt với Eclipse cùng với PyDev là plugin Eclipse)

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.