Điều quan trọng nhất, hữu ích hoặc khai sáng bạn đã học được trong 12 tháng qua là gì? [đóng cửa]


14

Rất nhiều người trong cộng đồng mã hóa nói về sự cải tiến liên tục, thực hành có chủ ý và v.v. - nhưng khi họ nói về các hoạt động hiện tại của họ, nó gần giống như họ "hình thành hoàn toàn từ các vòng của Zeus" bởi vì bạn không nghe về cách ý kiến ​​của họ thay đổi theo thời gian hoặc những gì họ học được gần đây.

Thỉnh thoảng tôi đi nói chuyện, hoặc đọc một cuốn sách, hoặc nói chuyện với ai đó và họ mở ra thêm một chút và tôi thấy rằng tôi học được rất nhiều từ những hiểu biết này.

Vì vậy, nếu bạn phải chọn một điều trong 12 tháng qua, bạn đã học được nó sẽ là gì?

Câu trả lời:


18

Tôi đã học được rằng chỉ cần một người quản lý thối để làm hỏng toàn bộ dự án, nhưng phải mất rất nhiều lập trình viên giỏi để dọn dẹp mớ hỗn độn sau đó.


Martin, tôi đã ủng hộ vì tin nhắn của bạn làm tôi cười vào buổi sáng thứ bảy mưa và lạnh này, nhưng bạn không trả lời câu hỏi;)

Đã thêm "Tôi đã học được rằng ..."
Martin Wickman

+1 vì tôi là một trong những lập trình viên tháng này. Hơn 70 giờ tuần trước == "lượt của tôi trong thùng".
Dan Ray

Tôi nhận ra cái đó! Nó nên được trích dẫn! "Chỉ cần một người quản lý thối để làm hỏng toàn bộ dự án, nhưng phải mất rất nhiều lập trình viên giỏi để dọn dẹp mớ hỗn độn sau đó."
Amir Rezaei

12

Sau khi tìm hiểu một số Clojure , tôi bắt đầu nhận ra sự hữu ích của lập trình chức năng và phong cách mã hóa Java của tôi đã bị ảnh hưởng nặng nề bởi điều đó. Trái với niềm tin phổ biến, một ngôn ngữ lập trình chức năng không phải là điều kiện tiên quyết tuyệt đối để thực hiện một số chương trình chức năng.

Có thể kết hợp khá nhiều yếu tố lập trình chức năng vào một ngôn ngữ bắt buộc như Java và ngay cả khi nó không phải lúc nào cũng thành ngữ, nó có thể mang lại lợi ích cao trong một số vấn đề. Ví dụ, các lớp ẩn danh gần bằng với các bao đóng, như được mô tả trong wikipedia . Đánh giá lười biếng nên là một tiêu chuẩn chứ không phải là một cái gì đó bất thường. Bất biến khó có thể bị lạm dụng. Chỉ cần vượt qua ý tưởng (gần như) lỗi thời rằng việc xây dựng các đối tượng mới thay vì thay đổi các đối tượng hiện có là tốn kém vì tiêu thụ của GC và heap - trong 99,9% trường hợp đơn giản là nó không liên quan. Trong thực tế, xử lý song song có thể lật ngay cả đối số hiệu quả theo cách khác: tạo các đối tượng bất biến mới có thể rẻ hơn so với việc thay đổi các đối tượng hiện có, vì bạn thoát khỏi việc khóa.

Thông tin thêm về làm FP trong tinh khiết Java ở đây , ở đây , ở đâyở đây .


Tôi đồng ý. Thật đáng buồn khi Java có sự hỗ trợ rất tệ cho lập trình chức năng.
Jonas

Tôi đã có hứng thú lâu dài với FP (công việc đầu tiên của tôi liên quan đến lisp) và tôi nghĩ thật thú vị khi trong vài năm qua, cuối cùng nó đã trở thành một mô hình khá 'phổ biến' cùng với OO, v.v.
FinnNk

Java 7 nên có các bao đóng tốt hơn ít nhất. Và sử dụng các thư viện thông minh như lambdaj có thể làm nên điều kỳ diệu để khắc phục những thiếu sót của chính ngôn ngữ này.
Joonas Pulakka

Tôi muốn có sự hỗ trợ tốt hơn cho đệ quy đuôi trong Java / JVM.
Jonas

1
Phương pháp @Helper: hai liên kết đầu tiên trong câu trả lời của tôi là các bài viết về FP với Java. Tôi không biết bất kỳ cuốn sách về chủ đề này. Tôi nghĩ rằng phương pháp tốt nhất để "hiểu" là học một số ngôn ngữ FP thực tế và sau đó chỉ cần bắt đầu sử dụng các đối tượng bất biến hơn trong mã Java của bạn.
Joonas Pulakka

10

Ngay cả khi bạn có một đội ngũ tuyệt vời và quản lý có thẩm quyền cho nhóm đó, công việc của bạn vẫn không an toàn. Quản lý cấp trên vẫn có thể làm những điều dại dột, như giải tán toàn bộ Ban giám đốc của bạn.

Tóm lại: vấn đề chính trị, và đôi khi chính trị ảnh hưởng đến bạn, bạn không thể kiểm soát.


Tôi cho bạn +1 ảo vì Martin đã khiến tôi mỉm cười với câu trả lời tương tự;) Bạn đã đọc Dead March chưa? đây là một cuốn sách về những gì bạn đang nói về

(Tôi chuyển đổi phiếu bầu ảo thành số thật)

9

Tôi đã học được rằng mục đích của kiểm thử phần mềm là tìm lỗi . Nó không phải là để xác minh rằng hệ thống là chính xác.

Có những yếu tố tâm lý quan trọng khi chơi: Nếu mục tiêu của bạn là cho thấy chương trình là "chính xác", bạn sẽ bị hút về những bài kiểm tra mà bạn biết sẽ vượt qua. Nhưng nếu mục tiêu của bạn là tìm ra lỗi, bạn sẽ bị hút về các bài kiểm tra sẽ thực sự đẩy hệ thống của bạn đến giới hạn.

Thậm chí có một thay đổi quan trọng đối với ngôn ngữ bạn sử dụng. Nếu một bài kiểm tra tìm thấy một lỗi, bạn gọi nó là thành công . Nếu bài kiểm tra không [nghĩa là chương trình vượt qua], bạn gọi nó không thành công . Tôi bắt gặp mình đi theo dòng suy nghĩ "xác minh", và nó tạo ra sự khác biệt lớn.

Hiệu ứng tâm lý này được thảo luận nhiều hơn trong Nghệ thuật kiểm thử phần mềm , một cuốn sách kinh điển mà tôi rất khuyến khích. Tác giả, Myers, cũng khuyến nghị rằng bất cứ ai đang thử nghiệm một chương trình không nên là tác giả, thậm chí trong cùng một chuỗi quản lý. Bạn có thể làm điều này nếu bạn tự viết mã, vì vậy cần có kỷ luật.


8

Thực hiện kiểm tra phát triển từ khi bắt đầu phân phối khách hàng để xem nó ảnh hưởng đến chất lượng mã như thế nào và chỉ chạy từ bên trong trình khởi chạy JUnit trong Eclipse. Nó đã dẫn đến một sản phẩm tốt hơn.


Lưu ý rằng tôi không tìm thấy cách nào để liên kết "Chạy lại bài kiểm tra đơn vị mới nhất" với khóa. Điều này làm cho nó một chút tẻ nhạt.

5

Giá trị đích thực của lập trình vô ngã.

Ở một mức độ nào đó, tôi luôn biết rằng bản ngã và lập trình không trộn lẫn, nhưng không bao giờ giải thích được hậu quả. Quan niệm rằng bạn phải chủ động xem xét và tìm ra lỗi trong thực tiễn của chính mình là điều mà tôi mới chỉ bắt đầu nhận ra vào năm ngoái. Tôi cũng đang học cách tích cực tìm kiếm những lời chỉ trích về thiết kế của mình (cả về giao diện người dùng và mã).

Thành thật mà nói, tôi vẫn đang học cách vứt bỏ cái tôi và có lẽ tôi sẽ học cách làm điều đó cho phần còn lại của sự nghiệp lập trình.


3

Đây là câu trả lời của tôi cho câu hỏi của riêng tôi:

Khoảng một năm trước, nó đã nhấp vào rằng các thử nghiệm chấp nhận tự động cần thiết không phải là phiên bản tự động của các thử nghiệm mà người thử nghiệm của chúng tôi sẽ thực hiện thủ công. Việc tập trung vào các bài kiểm tra dựa trên các thông số kỹ thuật đơn lẻ thay vì cố gắng đạt được càng nhiều càng tốt trong một lần vượt qua giúp các bài kiểm tra đơn giản hơn, dễ đọc hơn và cũng giúp khuyến khích phân phối gia tăng.


3

Tôi đã học được cách một khái niệm toán học như Semirings áp dụng cho các thuật toán. Với điều này, bạn có thể chỉ ra làm thế nào một số thuật toán giống nhau ngoại trừ việc sử dụng một thuật ngữ khác nhau. Điều này không phải là lạ đối với tôi khi là một lập trình viên, nhưng đầu tôi bị nổ tung.


1
Bạn có một ví dụ về một?
Đánh dấu C

Có một ví dụ trong cuốn sách Element of Lập trình sử dụng một hàm tính toán sức mạnh và một số nội dung của Wikipedia, tính toán sợi trong thời gian O (log n). Tôi nghĩ rằng ví dụ có thể được tìm thấy ở đây cpp-next.com/archive/2010/03/eop-ch3-preview , nhưng trang web đó phản hồi với lỗi máy chủ nội bộ.
Peter Stuifzand

3

Bên cạnh chính trị mà Frank Shearar đã đề cập , gần đây tôi đã phát hiện ra QUnitCông ty Cổ phần tạo nên ngày của tôi. Và tháng. Không bao giờ nghĩ rằng có thể đơn vị kiểm tra JavaScript với độ bao phủ mã, nhưng ở đó có ... :-)


Đây là trên radar của tôi cho năm tới, tôi đã thử nghiệm một chút trong thử nghiệm đơn vị js nhưng chưa có trong một dự án thực sự. Không biết có một công cụ bảo hiểm có sẵn!
FinnNk

2

Ba lời cảm ơn hàng đầu của tôi cho năm lập trình cuối cùng sẽ diễn ra như sau (theo thứ tự quan trọng và lòng biết ơn giảm dần):

  • mô hình lập trình chức năng để mở mang đầu óc tôi cho những cách khác, thường thanh lịch và ngắn gọn hơn để thể hiện ý tưởng và thuật toán trong mã. Tôi cảm thấy rằng kỹ năng lập trình tổng thể của tôi đã được cải thiện nhiều trong một thời gian rất ngắn, nhờ vào các ý tưởng lập trình chức năng.

    (Cảm ơn cá nhân của tôi đến Tomáš Petříček cho cuốn sách tuyệt vời của ông về lập trình chức năng trong thế giới thực .)

  • cả phép tiêm phụ thuộckiểm thử đơn vị đã dạy tôi rằng thành phần đối tượng được cho là cách tốt nhất để tạo ra các hệ thống (hướng đối tượng) phức tạp (và sự kế thừa lớp không quan trọng như tôi từng nghĩ). Cả hai đã dạy tôi và khiến tôi suy nghĩ về cách soạn thảo tốt nhất các hệ thống và cách viết các thành phần dễ sử dụng, nhưng vẫn đủ linh hoạt để sử dụng lại.

    (Nếu tôi phải đề cập đến một tài nguyên giảng dạy tốt, tôi sẽ nói Nghệ thuật kiểm tra đơn vị của Roy Osherove .)

Tất cả những điều này được thực hiện cùng nhau đã dẫn đến việc tôi viết mã thường có ít lỗi hơn trước đây, bởi vì bây giờ tôi đang viết mã dễ hiểu và sai hơn nhiều so với những gì tôi đưa ra trước đây.


2

Những gì từng thay đổi trong ngành công nghiệp phần mềm phát triển nhanh, đường cong học tập luôn ở đây. "Nếu chỉ có một cách để học mà không mất thời gian để học."


Thực tế là luôn có những thứ mới để học là, đối với tôi, một trong những điều hấp dẫn của nghề này. Các hệ thống CNTT thường tập trung vào cách xử lý tốt nhất sự phức tạp ngày càng tăng và tôi thích khám phá các lý thuyết và khái niệm mới theo hướng đó. Mặt khác, đôi khi tất cả có thể gây nản lòng, bởi vì phải theo kịp với công nghệ hiện đại có thể cảm thấy giống như một cuộc đua không ngừng.
stakx

1

Tôi đã học được rằng bán cho một công ty mới thực sự có thể cải thiện công việc của bạn. Tổ chức của tôi đã được mua từ công ty cũ của chúng tôi vào tháng Năm, và mọi thứ dường như trở nên tốt hơn. Công ty mới đã tiết kiệm được rất ít / không có chi phí với văn phòng mới của chúng tôi, thay thế các máy phát triển không dùng của chúng tôi bằng thiết bị của thế kỷ 21, thể hiện sự linh hoạt với việc quản lý các dự án của chúng tôi và nói chung khiến tất cả chúng tôi cảm thấy được chào đón nhiều hơn.

Nó cảm thấy hơi thất vọng khi bị bán (giống như một nông nô có lãnh chúa phong kiến ​​mới vì anh ta bị trói vào đất đổi tay), nhưng kết quả cuối cùng đã tốt hơn tôi mong đợi.


0

Tôi sẽ nói rằng sử dụng thử nghiệm đơn vị của Microsoft trong Visual Studio 2010.

Tôi thấy nó thực sự dễ dàng để gỡ lỗi một phương pháp thử nghiệm cụ thể.

Tôi có thể chạy bất cứ lúc nào dự án thử nghiệm của mình để xem ứng dụng lớp nghiệp vụ có hoạt động tốt không. Quá trình thử nghiệm đảm bảo rằng nhóm của tôi sẽ không gặp vấn đề gì khi triển khai giải pháp hoàn chỉnh cho khách truy cập trang web của chúng tôi.


0
  • Đã học Python cơ bản (đôi khi sử dụng nó để viết các kịch bản nhanh)

  • Đã cài đặt ArchLinux trong VM (đã có Ubuntu trong VM trước đó, PC của tôi hiện đang rất nhanh!)

  • Bắt đầu với MATLAB (đặc biệt là vẽ đồ thị và kiểm tra số nhanh)

  • Chuyển sang Mercurial (từ SVN) (phân nhánh và sáp nhập!)



-1

Tôi đã phải bắt đầu duy trì một ứng dụng web Python - vì vậy tôi quyết định đây là thời điểm tốt để học Vim . Bây giờ tôi đang sử dụng plugin IdeaVim cho Intellij để phát triển Java và Flex và tôi chắc chắn tin rằng nó giúp việc đánh máy của tôi nhanh hơn và hiệu quả hơn.


1
Thật sao - -1? Bạn muốn giải nén điều đó cho tôi - mọi người không nghĩ rằng VIM là khai sáng hay hữu ích?
Watson
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.