Một lập trình viên có nên học bài viết để tăng cường tính biểu cảm?


15

Cho rằng các lập trình viên là tác giả và viết mã để diễn đạt những suy nghĩ và khái niệm trừu tượng, và các lập trình viên tốt nên đọc các mã lập trình mà không gặp khó khăn và hiểu lầm, một lập trình viên có nên viết bài để viết mã tốt hơn không?

Tóm tắt các khái niệm và các vấn đề / thực thể trong thế giới thực là một phần quan trọng của việc viết mã tốt và việc thành thạo ngôn ngữ được sử dụng để mã hóa sẽ cho phép lập trình viên thể hiện suy nghĩ của mình dễ dàng hơn, hoặc theo cách tốt hơn. Bên cạnh đó, khi cố gắng viết hoặc viết lại một số mã để làm cho nó tốt hơn, có thể dành nhiều thời gian để quyết định tên cho các hàm, biến hoặc cấu trúc dữ liệu.

Tôi nghĩ rằng điều này cũng có thể giúp tránh viết mã với nhiều hơn một nghĩa, thường gây ra sự hiểu lầm giữa các lập trình viên khác nhau. Mã phải luôn luôn thể hiện rõ ràng chức năng của nó một cách rõ ràng.



2
Sẽ thật tuyệt nếu mọi người có thể học viết rõ ràng sau khi họ ở độ tuổi trên 18, đặc biệt khi họ sử dụng ngoại ngữ (như trường hợp trong CNTT). Câu hỏi là, liệu có một phương pháp giảng dạy có thể đạt được kết quả tốt trong một thời gian tương đối ngắn. Tôi nhớ khi tôi mới vào đại học, tôi đã được học một khóa về Tiếng Anh Khoa học, tôi đoán nó đã giúp tôi một chút (vâng, tôi đã từng viết tệ hơn thế này :)).
NoChance

1
"Biểu cảm mã" là gì? Tôi coi đó là thứ gì đó không phải là biểu cảm của ngôn ngữ lập trình , bởi vì không có bài học viết nào sẽ thay đổi điều đó ...
Andres F.

1
blog.codinghorror.com/recommends-reading-for-developers -> Xem Mã hoàn thành 2. Cuốn sách "cách viết mã đúng" hay nhất mà tôi từng đọc.
Machado

1
@JoseFaeti thì bạn có một sở thích tốt trong sách, thưa ông. :-) Các trang vô tận thảo luận về cách viết chính xác câu lệnh "nếu"? Đếm tôi trong. :-)
Machado

Câu trả lời:


25

1. Viết bài? Không hẳn vậy.

Viết mã nguồn đủ khác với viết một cuốn sách.

Mặc dù cả hai đều theo đuổi cùng một mục tiêu: càng rõ ràng càng tốt và dễ hiểu, họ đang thực hiện nó theo một cách rất khác, và những điều mà một nhà văn nên học không giống như những điều mà một nhà phát triển phần mềm nên học.

Ví dụ 1: số liệu của bài phát biểu

Số liệu của bài phát biểu có giá trị khi viết tiểu thuyết, thơ, v.v., vì chúng làm tăng tính biểu cảm của văn bản.

Lần cuối cùng bạn nhìn thấy một oxymoron hoặc một litote trong mã nguồn là gì? Nó sẽ giúp có được chúng, hay nó sẽ cực kỳ có hại cho bất kỳ nhà phát triển nào sẽ phải duy trì mã nguồn như vậy sau này?

Ví dụ 2: từ vựng

Vốn từ vựng phong phú được đánh giá cao trong văn học. Từ vựng của William Shakespeare, chẳng hạn, là hai mươi nghìn đến hai mươi lăm nghìn từ. Từ vựng phong phú hơn làm cho nó thú vị hơn để đọc một cuốn tiểu thuyết hoặc một bài thơ.

Khi bạn viết mã nguồn, bạn hy vọng nó sẽ được đọc bởi những người không nói tiếng Anh tốt . Cho thấy bạn biết tiếng Anh như thế nào sẽ cực kỳ có hại cho mã của bạn. Nếu bạn biết một từ ưa thích có nghĩa chính xác những gì bạn cần nhưng bạn biết rằng nhiều người không biết nghĩa của từ này, bạn nên tìm một từ đồng nghĩa ít biểu cảm hơn hoặc một nhóm từ giải thích nghĩa. Một từ vựng của một vài ngàn từ thường phần lớn là đủ cho một dự án nhất định.

Lưu ý một khía cạnh quan trọng: trong khi Google Dịch có thể giúp ích rất nhiều cho người không phải người bản ngữ, có hai vấn đề với bất kỳ người dịch nào:

  • Một cặp ngôn ngữ không nhất thiết phải có sự trùng khớp 1: 1 giữa các từ. Một số từ không có bản dịch trong các ngôn ngữ khác, hoặc nhiều từ có thể dịch thành một từ duy nhất bằng tiếng nước ngoài. Ví dụ, trong tiếng Nga, có một lượng lớn các từ nhắm vào các trạng thái cụ thể của tuyết và thời tiết lạnh, và việc dịch chúng sang tiếng Pháp hoặc tiếng Tây Ban Nha thường là không thể mà không làm mất tính đặc hiệu của chúng.

  • Một từ đôi khi có nhiều nghĩa và nghĩa được suy ra từ ngữ cảnh. Google Dịch, mặc dù chất lượng cao, thường không thể chỉ ra ý nghĩa cho bất kỳ tình huống cơ bản nào.

Ví dụ 3: biểu thức

Biểu hiện làm cho văn xuôi phong phú hơn là tốt. Một tác giả hy vọng người đọc có một lượng văn hóa chung nhất định và sử dụng cơ hội này để làm cho văn bản trở nên biểu cảm hơn.

Tương tự như ví dụ trước, các biểu thức như vậy có thể rất có vấn đề khi được đọc bởi những người không phải là người bản ngữ. Nhưng nếu từ vựng thông thường có thể được dịch, các thành ngữ có vấn đề hơn nhiều.

Chẳng hạn, tiếng Anh không phải là ngôn ngữ đầu tiên của tôi và trên cơ sở hàng ngày, tôi bắt gặp các biểu thức, kể cả ở đây trên StackExchange, mà tôi không biết. Tôi cố gắng đoán ý nghĩa của chúng, và đôi khi tôi đúng. Nhưng đôi khi tôi sai và làm cho những biểu hiện đó không có ích.

Một người dùng trong nhận xét của cô ấy / anh ấy đã nhắc nhở tôi về một ví dụ khiến tôi đau khổ trong một thời gian dài khi tôi mới bắt đầu lập trình: kimcỏ khô của PHP . Tôi đã không nhận thức được con số tương ứng của bài phát biểu, vì vậy mỗi lần tôi đọc tài liệu, tôi đều tự hỏi tất cả những thứ này là về cái gì. Không cần phải nói rằng C # sequence.Contains(element)hay Python tuyệt vời element in sequencelà một sự thay thế tốt hơn nhiều. Chà, ít nhất, các nhà phát triển không biết tiếng Do Thái cũng phải chịu đựng PHP , nhưng đây là một câu chuyện khác.

Ví dụ 4: tài liệu tham khảo văn hóa

Tài liệu tham khảo văn hóa. Trong văn học, việc đưa vào các yếu tố từ một nền văn hóa nhất định là rất hấp dẫn và điều này cũng làm cho cuốn sách trở nên phong phú hơn và đôi khi thú vị hơn để đọc.

Tuy nhiên, mã được gửi đến các nhà phát triển từ khắp nơi trên thế giới. Do đó, một tài liệu tham khảo rõ ràng cho một nhà phát triển người Ý có thể không rõ ràng đối với một người Nga và điều mà mọi chàng trai hay cô gái Ấn Độ biết có thể không nhất thiết phải được một lập trình viên người Mỹ biết đến.

Chính người dùng đã nói về cây kim và đống cỏ khô đã đưa ra một ví dụ tuyệt vời về tài liệu tham khảo văn hóa như vậy: Chén Thánh. Ai không biết Chén Thánh là gì? Chà, ý tôi là, đó là Gra Gravio trong tiếng Pháp, kiểu Grial, tiếng Tây Ban Nha và ... từ Kutsal Kâse, trong tiếng Thổ Nhĩ Kỳ, nhưng vẫn còn. Tuy nhiên, có bao nhiêu nhà phát triển người Mỹ hay châu Âu biết lịch sử thời trung cổ của Trung Quốc hay Ấn Độ? Tại sao mọi người sẽ cho rằng mọi lập trình viên Trung Quốc và Ấn Độ đều phải biết tài liệu tham khảo Chén Thánh?

2. Bài học để viết mã nguồn biểu cảm? Chắc chắn rồi.

  • Bất kỳ nhà phát triển nào cũng nên học cách viết mã nguồn biểu cảm.

  • Bất kỳ nhà phát triển nên giải thích lý do tại sao bình luận trong:

    int j = i + 1; // Creating i and adding 1 to it.
    

    là xấu, thậm chí sang một bên thực tế là nó hoàn toàn sai.

  • Bất kỳ nhà phát triển nào cũng có thể hiểu được cấu trúc lại cơ bản và cách nó giúp làm cho mã nguồn trở nên biểu cảm hơn.

  • Bất kỳ nhà phát triển nào cũng nên nhớ rằng 20% ​​thời gian được dành cho việc phát triển mã và 80% thời gian để duy trì nó. Đối với một số dự án, nó giống như 5% - 95%.

  • Vân vân.


Về bản chất, lập trình gần với tài liệu kỹ thuật. Có một người viết một tờ đặc tả cho một bu lông cần phải học bài viết? Không hẳn vậy. Điều tương tự áp dụng cho các nhà phát triển. Bất cứ ai cũng nên viết mà không mắc lỗi chính tả trong mỗi từ và bất kỳ ai cũng có thể truyền đạt ý tưởng của mình đủ rõ ràng. Bên cạnh đó, tôi không chắc cách viết bài học sẽ hữu ích hơn, giả sử, một khóa học về Khoa học máy tính hoặc bảo mật CNTT hay bất cứ điều gì.

Tính biểu cảm của mã nguồn có thể được học bằng các phương tiện khác. superM đã đề cập đến một trong số họ trong câu trả lời của mình : đọc mã tốt. Tôi có thể đề cập đến một vài người khác:

  • Đọc những cuốn sách như Code đẹp hoặc Code Complete,

  • Yêu cầu nhà phát triển có kinh nghiệm hơn để xem lại mã của bạn,

  • Hiểu các mẫu và làm thế nào và khi nào sử dụng chúng.


+1 câu trả lời hay. Biểu cảm và súc tích rất quan trọng, nhưng viết bài học có thể không phải là cách sử dụng tốt nhất thời gian đào tạo. Có ý thức phấn đấu để viết mã rõ ràng, tự mô tả là điều mọi người nên làm, và tôi nghĩ phần còn lại chỉ đơn giản là rơi vào vị trí mà không cần các bài học thực tế.
Daniel B

Có tài liệu, e-mail, ... cũng như mã - phần bằng văn bản của việc giao tiếp với đồng nghiệp, sếp, người dùng, bản thân trong tương lai, v.v. Nhưng làm ơn, không có thơ.
Steve314

Tôi đã nhận được điểm. Trên thực tế, tôi đã suy nghĩ nhiều hơn về việc sử dụng các ngôn ngữ dành riêng cho tên miền. Tôi đã đạt đến một điểm mà tôi cảm thấy thoải mái hơn khi lập trình bằng ngôn ngữ dành riêng cho tên miền thay vì sử dụng cú pháp cơ bản của ngôn ngữ lập trình mục đích chung. Điều này làm cho mã của bạn dễ hiểu và dễ hiểu hơn, ngay cả với những người không lập trình. Tôi đã tự hỏi nếu điều này là do vốn từ vựng tiếng Anh không tốt của tôi, do đó suy nghĩ về việc viết bài học.
Jose Faeti

Nói chung câu trả lời tốt, nhưng tôi đã thấy số liệu của bài phát biểu trong mã. Ví dụ, một trong số ít các tính năng tốt của PHP là tất cả các chức năng tìm kiếm / tìm kiếm của nó tìm kiếm kim trong đống cỏ khô.
user949300

@ user949300: và đây là một trong những lý do khiến tôi ghét PHP rất nhiều. Là một người nói tiếng Anh không phải là người bản ngữ, tôi không biết biểu thức tương ứng và đối với tôi, những thuật ngữ đó hoàn toàn hữu ích. So sánh nó với C # sequence.Contains(element)hoặc Python tuyệt vời element in sequence. Vì vậy, không, số liệu về lời nói không có chỗ trong API.
Arseni Mourzenko

11

một lập trình viên nên học bài viết để viết mã tốt hơn?

Không. Một lập trình viên nên học bài để viết để viết văn xuôi tốt hơn. Một lập trình viên nên học các bài học lập trình để học cách viết mã tốt hơn. Mặc dù có một số điểm tương đồng, viết văn xuôi và viết mã khá khác nhau.

Điều đó không có nghĩa là các lập trình viên không nên tham gia các lớp học viết. Họ nên! Một số lý do:

  • Viết là một kỹ năng thiết yếu cho bất kỳ người có học. Bạn sẽ có vẻ thông minh hơn nếu bạn có thể viết tốt.

  • Bất chấp những nỗ lực tốt nhất của họ, lập trình viên thường xuyên cần giao tiếp với người khác, thường sử dụng từ viết.

  • Bạn học các kỹ năng ngoài việc viết trong các lớp viết và những kỹ năng này thường hữu ích cho các lập trình viên. Ví dụ: bạn sẽ học cách thảo luận về công việc của người khác mà không làm tổn thương cảm xúc của họ và bạn sẽ học cách chấp nhận những lời chỉ trích từ người khác mà không cần thực hiện.


Đó là điểm. Ngay cả khi mã của bạn không nhất thiết phải tốt hơn, bạn sẽ trở thành một người tốt hơn, đặc biệt là trong việc giao tiếp với các lập trình viên hoặc đồng nghiệp khác. Tôi đoán câu hỏi của tôi nên được đặt ra theo cách khác :)
Jose Faeti

2
Rất nhiều điều này. Có thể viết văn xuôi tốt là một kỹ năng quan trọng đối với bất kỳ chuyên gia nào
Zachary K

6

Mã của tôi ngày càng phụ thuộc vào việc tạo ra một từ vựng được chia sẻ giữa doanh nghiệp và các nhóm kỹ thuật. Tôi muốn nói rằng việc cải thiện kỹ năng viết của bạn có thể giúp bạn giảm sự mơ hồ và hiểu lầm trong những nỗ lực này, nhưng điều đó không có khả năng giúp cho tính biểu cảm của mã của bạn.

Khái niệm văn học về tính biểu cảm không giống như khái niệm lập trình về tính biểu cảm. Trong nhiều trường hợp, sự mơ hồ trong ngôn ngữ có thể được sử dụng như một thiết bị văn học, thậm chí là phi hư cấu, dưới hình thức làm tăng tính biểu cảm, bởi vì nó sẽ kích hoạt các liên kết văn hóa, ngôn ngữ và biểu tượng khác nhau ở người đọc, cả dự định và ngoài ý muốn. Loại biểu cảm này là không mong muốn trong lập trình; trừu tượng có giá trị hơn sự mơ hồ. Trong lập trình, sự trừu tượng làm tăng tính linh hoạt với một số chi phí của tải nhận thức. Sự trừu tượng trong hình thức văn học có thể có tác dụng ngược lại với tác dụng của nó trong lập trình: bài viết của bạn càng trừu tượng, người đọc sẽ càng có cảm nhận rằng bạn không nói gì. Tất cả những biểu tượng và liên kết xuất phát từ lời nói cụ thể đều có giá trị,

Tuy nhiên, một lập trình viên không phải là một cái máy. Con người được hưởng lợi theo những cách bất ngờ từ sự phát triển trí tuệ và cảm xúc. Cải thiện văn bản của bạn có thể dẫn đến sự đồng cảm của khách hàng lớn hơn vì bạn buộc bản thân phải đấu tranh với các thách thức giao tiếp; có lẽ bạn sẽ cảm thấy khách hàng đó nói những gì họ muốn, sau đó bạn cung cấp và họ nhận ra đó không phải là thứ họ cần. Có lẽ bạn sẽ học cách tập trung vào những gì chưa trả.

Có lẽ học cách ném đất sét vào bánh xe gốm sẽ giúp bạn bắt đầu thấy sự tương đồng giữa sự khéo léo và phát triển phần mềm. Nghiên cứu cách các kiến ​​trúc sư xây dựng giao tiếp có thể khiến bạn có sự đánh giá cao hơn trong việc xây dựng vốn từ vựng về các mẫu thiết kế trong lập trình. Nghiên cứu sinh học có thể đưa bạn đến những hiểu biết hấp dẫn về cách kiến ​​và ong tìm và giao tiếp về nguồn thức ăn và làm thế nào những cơ chế đơn giản đó có thể được dịch thành thuật toán tìm đường.

Học những thứ bên ngoài miền lõi của bạn rất đáng giá vì những người tò mò tạo ra những nhà phát triển tốt hơn những người không biết.

Đối với những gì nó có giá trị, tôi gần như một chuyên ngành văn học; Tôi đã kết thúc việc chuyển sang nghiên cứu Đông Á vì tôi quan tâm nhiều hơn đến các lớp học tôi đang theo học tại khoa đó. Có một cơ hội tôi có thể không làm trong ngành nếu tôi không học Đông Á, bởi vì tác dụng phụ của việc học tiếng Nhật khiến tôi có giá trị hơn vào thời điểm đó, khi một công ty phần mềm thuê tôi một phần do kỹ năng ngôn ngữ. Tôi vẫn phải xây dựng một danh mục kỹ năng kỹ thuật sâu hơn, nhưng những tác dụng phụ ngoài ý muốn của việc học bất cứ thứ gì có thể giúp bạn trở thành một chuyên gia phần mềm tốt hơn, phù hợp hơn.


+1: "Mã của tôi ngày càng phụ thuộc vào việc tạo ra một từ vựng được chia sẻ giữa doanh nghiệp và các nhóm kỹ thuật.": Điểm rất quan trọng! Nhiều lỗi bắt nguồn từ những hiểu lầm bởi vì các nhà phân tích và nhà phát triển sử dụng một thuật ngữ nhất định cho hai điều khác nhau.
Giorgio

4

Khi các dự án lập trình thất bại, thường là do giao tiếp thất bại, thường là xung quanh các yêu cầu. Mặc dù nắm bắt tiếng Anh tầm thường có thể đủ để thực sự viết mã, nhưng trở thành một người giao tiếp tốt là điều cần thiết để viết đúng mã. Trong thời đại làm việc từ xa, giao tiếp dựa trên văn bản, viết tiếng Anh là một kỹ năng giao tiếp rất quan trọng.

Điều đó nói rằng, câu hỏi của bạn được viết một cách rất rõ ràng và súc tích - tốt hơn so với hầu hết các lập trình viên mà tôi đã làm việc cùng. Chưa thấy mã của bạn, tôi khuyên bạn nên tập trung thể hiện bản thân bằng ngôn ngữ mã hóa mà bạn chọn. Đối với Java, tôi giới thiệu cuốn sách của Joshua Bloch, "Java hiệu quả."


Cảm ơn bạn, tôi đang cố gắng hết sức! Trên thực tế, tôi đã đạt đến điểm mà cú pháp của ngôn ngữ lập trình mục đích chung là không đủ để thể hiện bản thân khi mã hóa. Bây giờ tôi đang lập trình các công cụ tiền xử lý để tăng cường cú pháp ngôn ngữ và triển khai các ngôn ngữ dành riêng cho miền cho cùng một vấn đề, có lẽ tốt hơn là cố gắng ép buộc tính biểu cảm trong ngôn ngữ lập trình mục đích chung.
Jose Faeti

3

Giống như các nhà văn được dạy bằng cách đọc các tác phẩm cổ điển của thế giới, vì vậy các lập trình viên được giáo dục bằng cách đọc mã tốt . Nhưng có một vấn đề nhỏ. Trong khi có những người khổng lồ được công nhận trong văn học, có rất ít trong số họ trong lập trình. Và nếu có, họ có thể "nói" một ngôn ngữ khác. (Tôi thậm chí không chắc rằng hợp lý khi khuyên đọc mã nguồn Minix của Tanenbaum)

Có nhiều cách phổ biến để làm cho mã dễ đọc hơn (=> có thể duy trì), như viết bình luận, đặt tên có ý nghĩa, v.v. Bên cạnh đó, nhiều công ty thiết lập quy tắc viết mã của họ và nó giúp mọi thứ dễ dàng hơn nhiều.

Dù sao, giống như nhiều nhà văn xuất sắc, các lập trình viên không bao giờ hài lòng với mã riêng của họ. Vì vậy, biết khi nào nên dừng lại cũng quan trọng như viết mã chất lượng.


2

Tôi luôn thấy chỉ đơn giản là dừng lại sau mỗi bit mã bạn viết và đọc lại nó, tưởng tượng rằng bạn chưa bao giờ nhìn thấy nó trước đây, giúp tôi đi một chặng đường dài với điều này.

Thậm chí tốt hơn là yêu cầu một người bạn quen thuộc với lập trình đọc mã của bạn mà không nói cho họ biết nó làm gì.


0

Tôi không nghĩ rằng nó sẽ giúp; viết sáng tạo là về cốt truyện và phát triển nhân vật và đối thoại, không phải là thể hiện rõ ràng các khái niệm kỹ thuật. Viết kỹ thuật có thể giúp ích, nhưng tôi nghi ngờ nó - chúng chỉ là những loại văn bản rất khác nhau!

và lưu ý rằng mã "có thể đọc được" là chủ quan, và chủ yếu là vấn đề về kiểu cú pháp và thành ngữ chung (khác nhau giữa các ngôn ngữ và thậm chí giữa các nhóm)

tuy nhiên, việc chọn tên tốt cho các biến và các lớp và phương thức là rất quan trọng. Ở một mức độ nào đó, mọi nhà phát triển trở thành một chuyên gia về vấn đề trong các khía cạnh nhất định của miền đang được phát triển, vì vậy việc sử dụng chính xác thuật ngữ tên miền là rất quan trọng.

đánh giá ngang hàng có thể giúp bạn xây dựng vốn từ vựng và sự tự tin


0

Chắc chắn có một sự khác biệt lớn giữa viết mã và viết văn xuôi.

Trong văn xuôi, các câu được kết nối (hoặc tách biệt) theo thời gian (cách chúng theo nhau để đi đến kết thúc hoặc ý nghĩa) nhưng trong mã (hiệu quả), bạn có thể (tải lại) các phần của 'câu chuyện' từ các bảng có thể lặp lại hành động / phản ứng. Vì vậy, sự tương tác với người đọc (bằng văn xuôi) hoặc người dùng (của mã) là hoàn toàn khác nhau.

Theo một cách khác, viết văn xuôi 'đẹp' và viết mã 'đẹp' là tương tự nhau: học viết (viết mã hoặc văn xuôi) là một quá trình bao gồm rất nhiều sai lầm (hoặc suy nghĩ / kiểm tra về các cải tiến hoặc cải cách) để có được nó ' thanh lịch'.

Tôi nghĩ rằng hệ thống hóa học định kỳ của các yếu tố là thanh lịch, bởi vì cách thức rất nhỏ gọn, nó mô tả một số tính chất cơ bản của vật liệu cơ bản chúng ta sử dụng, hơi giống mã hiệu quả nhưng chắc chắn không phải là văn xuôi. Một trò đùa có rất nhiều phẩm chất văn xuôi (đưa bạn vào một tâm trạng nhất định, giữ tâm trạng đó và sau đó thay đổi nó, khi bất ngờ) nhưng đó là một thực hành mã hóa tuyệt vời.

Nhưng cả hai loại văn bản đều yêu cầu sự khéo léo.


-1

Theo quan điểm của tôi, tiếng Anh và ngữ pháp cơ bản là đủ cho một lập trình viên. Nhưng sau đó, bất cứ điều gì để phá vỡ một thói quen lập trình đơn điệu sẽ luôn được trẻ hóa và vì vậy các bài học viết sẽ được thư giãn cho các lập trình viên.


4
Một thói quen lập trình đơn điệu có lẽ sẽ được giải quyết tốt hơn bằng cách sửa đổi nghề nghiệp hơn là viết bài học.
Bóng Eliot
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.