Khi nào chúng ta nên dừng công việc và làm công cụ?


25

Là một kỹ sư phần mềm, chúng tôi luôn mong muốn có được các công cụ hiệu quả để tăng năng suất của chúng tôi. Và trong công việc hàng ngày, chúng tôi thường không thỏa mãn với các công cụ hiện có và muốn có những cách tốt hơn như cấu hình tập lệnh GDB tốt hơn, tập lệnh Vim và một số tập lệnh Python để tự động làm những điều nhàm chán.

Tuy nhiên, nó thực sự là một sự đánh đổi vì việc chế tạo công cụ cũng cần thời gian và năng lượng. Nó không giúp tăng năng suất ngay lập tức. Do đó, làm thế nào để bạn đánh giá liệu đã đến lúc dừng công việc và tạo ra một số công cụ để giảm bớt nỗi đau trong tương lai của bạn?



1
có thể tái cấu trúc hướng tới một công cụ và tiếp tục hoạt động
Ray Tayek


1
XKCD đó đóng đinh khá nhiều ngoại trừ một điều: liệu thời gian được lưu bởi công cụ chỉ là của riêng bạn hay liệu nó được nhân với một cơ sở người dùng lớn trong toàn tổ chức của bạn hay xa hơn.
Kaz

Câu trả lời:


27

Tôi "tạo ra các công cụ" khi một trong những điều này là đúng:

  1. Nhiệm vụ làm tôi khó chịu
  2. Nguy cơ lỗi của con người trong nhiệm vụ là quá lớn

"Rủi ro" cho tùy chọn thứ 2 không phải là rất lớn - chi phí xây dựng một công cụ nhỏ thường rất nhỏ, vì vậy nếu tất cả những gì bạn tiết kiệm được là rủi ro khi chạy lại bản dựng 10 phút mỗi tuần một lần, nó thường sẽ tự trả nợ rất nhanh.

Tôi cố gắng làm cho các công cụ nhỏ nhất có thể - chỉ cần làm cho công việc dễ dàng hơn một chút bây giờ và có thể cải thiện lại lần sau.

Điều này có nghĩa là bạn chỉ khắc phục nỗi đau lớn nhất mỗi lần và không tạo ra các bản sửa lỗi cho các vấn đề không thực sự làm bạn tổn thương.


2
+1 để tránh lỗi vì số tiền này nhiều hơn thời gian sử dụng thông thường so với thời gian được lưu khi thực hiện.
k3b

1
Tôi sẽ thêm "khi bạn thấy mình lặp lại cùng một nhiệm vụ rất thường xuyên". Tôi, thật đáng ngạc nhiên, thấy mình cần phải tạo ra một chuỗi ký tự ngẫu nhiên khá thường xuyên. Vì vậy, thay vì viết một đốm mã để làm điều đó, tôi đã tạo một biểu mẫu đơn giản với một nút để làm điều đó cho tôi
bsara

9

Với kinh nghiệm tôi đã thấy rằng chỉ cần cố gắng hết sức vào công việc lẩm cẩm thường là hiệu quả nhất về thời gian. Làm một công cụ thường hấp dẫn. Tôi từ bỏ chống cự khi:

  • Công cụ này có nhiều hơn một mục đích. Một người chơi cờ giỏi hoàn thành hai điều với mỗi lần di chuyển: chặn một quân cờ đối thủ và giải thoát một giám mục. Một người mới bắt đầu có lẽ sẽ cần hai lượt để làm điều đó. Tương tự như vậy, tôi xem xét nếu công cụ sẽ chỉ làm một việc, hoặc với nỗ lực nhỏ hơn làm hai, ví dụ như giúp sửa một số tệp dữ liệu thô và cũng tạo dữ liệu thử nghiệm nhân tạo.
  • Tương lai hữu ích. Nó có thể giúp tôi tiết kiệm thời gian cho công việc trong tuần này, nhưng nó có khả năng giúp tôi hoặc ai đó tiết kiệm thời gian cho một dự án mới vào tuần tới không?
  • Đây là thời điểm tốt để học một ngôn ngữ mới, thư viện, kỹ thuật thiết kế hoặc bất cứ điều gì, và tôi có thời gian để làm điều đó. Công cụ này là một tác dụng phụ có lợi của việc làm một cái gì đó giáo dục, sử dụng thời gian đã được cấp cho giáo dục.
  • Khi chúng ta gặp vấn đề nghiêm trọng khiến mọi thứ hoạt động. Giống như nhảy dù mà không cần dù, bạn thực sự nên dành thời gian để làm hoặc mua một chiếc dù. Nếu bạn không thể nhận được bất kỳ kết quả thử nghiệm có ý nghĩa nào, hoặc ứng dụng web mới hoàn toàn không hoạt động, bạn chỉ cần dừng lại và tạo hoặc mua một công cụ để đo lường những gì bạn không thể nhìn thấy, điều khiển các thành phần hoặc thay thế một phần của hệ thống. Khi công việc hoàn toàn bị treo cần một công cụ, tôi không quan tâm đến việc sử dụng trong tương lai hoặc sử dụng nhiều lần. Sự cần thiết nặng đủ.

3
"Công cụ này có nhiều mục đích" Trừ khi chúng thực sự có cùng mục đích được áp dụng theo hai cách khác nhau, theo kinh nghiệm của tôi, tốt hơn là chỉ tạo hai công cụ.
AJMansfield

5

Nguyên tắc nhỏ của tôi là khi tôi phải làm điều gì đó lần thứ ba, đã đến lúc viết một kịch bản nhỏ để tự động hóa nó, hoặc suy nghĩ lại về cách tiếp cận của tôi.

Tôi không tạo ra một "công cụ" đầy đủ vào thời điểm này, chỉ là một đoạn script nhỏ (thường là bash hoặc python; perl cũng sẽ hoạt động hoặc thậm chí PHP) tự động hóa những gì tôi đã làm thủ công trước đó. Về cơ bản, đây là một ứng dụng của nguyên tắc DRY (hoặc nguyên tắc Nguồn đơn Sự thật, về bản chất là giống nhau) - nếu bạn phải thay đổi hai tệp nguồn song song, phải có một sự thật chung mà chúng chia sẻ, và đó là sự thật phải được đưa ra và lưu trữ ở một nơi trung tâm. Thật tuyệt nếu bạn có thể giải quyết vấn đề này bằng cách tái cấu trúc, nhưng đôi khi, điều này không khả thi và đó là nơi các tập lệnh tùy chỉnh xuất hiện.

Sau đó, tập lệnh có thể hoặc không phát triển thành một công cụ toàn diện, nhưng tôi thường bắt đầu với một tập lệnh rất cụ thể với rất nhiều thứ được mã hóa cứng vào nó.

Tôi ghét công việc nặng nề với một niềm đam mê, nhưng tôi cũng tin tưởng mạnh mẽ rằng đó là một dấu hiệu của thiết kế xấu hoặc không chính xác. Lười biếng là một phẩm chất quan trọng trong một lập trình viên, và tốt hơn hết là bạn nên trải qua thời gian dài để tránh công việc lặp đi lặp lại.

Chắc chắn, đôi khi số dư là âm - bạn dành ba giờ để cấu trúc lại mã của mình hoặc viết một tập lệnh để tiết kiệm cho bạn một giờ làm việc lặp đi lặp lại; nhưng thông thường, sự cân bằng là tích cực, vì vậy nếu bạn xem xét các chi phí không rõ ràng trực tiếp: thất bại của con người (con người thực sự tồi tệ trong công việc lặp đi lặp lại), cơ sở mã nhỏ hơn, khả năng duy trì tốt hơn do giảm dư thừa, tự làm tài liệu tốt hơn, tương lai nhanh hơn phát triển, mã sạch hơn. Vì vậy, ngay cả khi cán cân xuất hiện tiêu cực ngay bây giờ, cơ sở mã sẽ phát triển hơn nữa và công cụ mà bạn đã viết để tạo các biểu mẫu web cho ba đối tượng dữ liệu sẽ vẫn hoạt động khi bạn có ba mươi đối tượng dữ liệu. Theo kinh nghiệm của tôi, sự cân bằng thường được ước tính có lợi cho công việc nặng nề, có thể là do các nhiệm vụ lặp đi lặp lại dễ ước tính hơn và do đó được ước tính thấp, trong khi tái cấu trúc, tự động hóa và trừu tượng hóa được coi là ít dự đoán và nguy hiểm hơn, và do đó được ước tính quá mức. Rốt cuộc, việc tự động hóa không quá khó.

Và sau đó có nguy cơ thực hiện nó quá muộn: thật dễ dàng để cấu trúc lại ba lớp đối tượng dữ liệu hoàn toàn mới thành hình và viết một tập lệnh tạo biểu mẫu web cho chúng và khi bạn đã thực hiện điều đó, thật dễ dàng để thêm 27 lớp nữa cũng làm việc với kịch bản của bạn. Nhưng gần như không thể viết tập lệnh đó khi bạn đã đạt đến điểm có 30 lớp đối tượng dữ liệu, mỗi lớp có các mẫu web viết tay và không có sự thống nhất giữa chúng (còn gọi là "tăng trưởng hữu cơ"). Duy trì 30 lớp đó với các hình thức của chúng là một cơn ác mộng của mã hóa lặp đi lặp lại và thay thế tìm kiếm bán thủ công, việc thay đổi các khía cạnh phổ biến mất gấp ba mươi lần, nhưng viết một kịch bản để giải quyết vấn đề, đó sẽ là một bữa ăn trưa không có trí tuệ khi dự án bắt đầu bây giờ là một dự án hai tuần đáng sợ với triển vọng đáng sợ của một hậu quả kéo dài một tháng bao gồm sửa lỗi, giáo dục người dùng và thậm chí có thể từ bỏ và trở lại với cơ sở mã cũ. Trớ trêu thay, việc viết ra mớ hỗn độn 30 lớp mất nhiều thời gian hơn giải pháp sạch sẽ có, bởi vì bạn có thể đã đi theo kịch bản thuận tiện mọi lúc. Theo kinh nghiệm của tôi, tự động hóa công việc lặp đi lặp lại quá muộn là một trong những vấn đề lớn trong các dự án phần mềm lớn dài hạn. bởi vì bạn có thể đã cưỡi kịch bản thuận tiện mọi lúc. Theo kinh nghiệm của tôi, tự động hóa công việc lặp đi lặp lại quá muộn là một trong những vấn đề lớn trong các dự án phần mềm lớn dài hạn. bởi vì bạn có thể đã cưỡi kịch bản thuận tiện mọi lúc. Theo kinh nghiệm của tôi, tự động hóa công việc lặp đi lặp lại quá muộn là một trong những vấn đề lớn trong các dự án phần mềm lớn dài hạn.


4

Tôi chỉ nhớ điều này:

xkcd - Có đáng thời gian không?

Vấn đề với điều này tất nhiên là trong tình huống thực tế, bạn không thể dễ dàng đo các dữ liệu đó để chọn đúng ô trong bảng. Và như đã được đề cập trong các câu trả lời khác, có các biến khác (nguy cơ lỗi, tác vụ quá nhàm chán để thực hiện dù chỉ một lần, ...) bạn cần thêm vào phương trình.

Vì vậy, câu trả lời của tôi là nó thực sự phụ thuộc vào tình huống và bạn không thể hy vọng nhận được bất kỳ câu trả lời "chính xác" nào cho tất cả các tình huống. Sau tất cả cuộc sống sẽ nhàm chán nếu chúng ta có sách dạy nấu ăn cho mọi thứ.


1
Đẹp quá :-) Nhưng thời gian tiết kiệm cũng có thể dành cho các tác vụ khác - vì công cụ có thể được sử dụng cho nhiều mục đích hoặc do kiến ​​thức bạn có được khi viết công cụ.
Hans-Peter Störr 16/07/13

3

Đây là một vấn đề lớn trong kinh nghiệm của tôi. Xây dựng công cụ thường được để lại cho một nhà phát triển có động lực, người dừng công việc để xây dựng công cụ. Điều này thường cản trở sự phát triển ngay cả khi nó cung cấp giá trị. Xây dựng công cụ cần được xem như là một phần tích hợp của "Quy trình" phát triển.

Tôi nhớ tham dự các đánh giá mã trong đó các lỗi tiêu đề sẽ dẫn đến việc lên lịch đánh giá khác. Nhiều trong số này có thể đã được phát hiện bởi một công cụ. ví dụ số lượng sloc không chính xác, thiếu yêu cầu, lỗi định dạng. Công cụ của tôi được viết bằng perl đã tạo tiêu đề từ mã được gửi và các yêu cầu được xác thực từ cơ sở dữ liệu Oracle. Nó không phải là một phần của "Quy trình" của chúng tôi, vì vậy trong thời gian ngắn, việc xây dựng công cụ được xem là trì hoãn việc giao hàng.

Toàn bộ nhóm cần định kỳ dừng lại và xem nơi nào có những nỗ lực thủ công hơn có thể được tự động hóa bằng cách tạo công cụ.


2

Tất cả các câu trả lời khác đều tốt, nhưng tôi muốn thêm một lý do tại sao nên dành thời gian để xây dựng các công cụ nhỏ (và tùy chỉnh .vimrc, .emacs của bạn, v.v.):

Đôi khi bạn bị "mắc kẹt" một cách sáng tạo hoặc có động lực và làm bất cứ điều gì, bất cứ điều gì, sẽ "làm cho nước trái cây chảy" một lần nữa (để trộn các ẩn dụ). Lý tưởng nhất sẽ là thứ gì đó có hiệu quả thúc đẩy dự án tiến lên, nhưng nếu nó hơi tiếp tuyến và truyền cảm hứng cho bạn, thì điều đó cũng tốt.

Bạn có thể không nhìn chằm chằm vào một màn hình trống, nhưng thay vào đó chỉ đơn giản là gặp khó khăn khi nhìn thấy tiến trình bạn đang thực hiện trong một nhiệm vụ lớn. Trong tình huống đó, việc đánh dấu thứ gì đó hữu hình có thể khiến bạn cảm thấy như mình không đi đến đâu.

Một biến thể của điều này là khi bạn tiếp tục suy nghĩ về thứ gì đó nên có trong "ổ ghi ngược" - chỉ cần dành một chút thời gian và thực hiện nó sẽ khiến bạn mất trí và giải phóng bạn để đưa toàn bộ năng lượng của bạn vào nhiệm vụ chính một lần nữa.


1

Nó phụ thuộc vào những gì bạn coi là làm một công cụ. Có thể cho rằng tôi tạo ra vô số chúng theo cách mà các nhà phát triển khác sẽ coi là phù phiếm ... Bởi vì tôi tạo ra chúng cho mọi thứ trừ các lệnh hệ thống tập tin cơ bản nhất.

Tôi sử dụng 2 lý do để hỗ trợ đó.

  • Đó là một phần mở rộng của nguyên tắc DRY. Nếu chúng ta muốn lặp lại một cái gì đó, nỗ lực thủ công là cách sử dụng nguồn nhân lực kém hiệu quả nhất.
  • Đó là một cách hiệu quả để ghi lại những gì tôi đã làm, vì vậy nếu tôi xây dựng một cái gì đó thì tôi (hoặc người khác) có thể muốn tham khảo lại cách tôi đã thực hiện vài tuần hoặc vài tháng sau đó và nó giữ nhật ký công việc với dự án.

Đôi khi, chúng phát triển thành các công cụ lớn hơn và có được các chức năng tương tác, nhưng nếu không, chúng vẫn có giá trị như một bản ghi.

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.