Là cụm từ không bao giờ phát minh lại bánh xe phù hợp cho học sinh?


115

Tôi thấy mình liên tục chạy theo biểu thức này "không phát minh lại bánh xe" hoặc "không bao giờ phát minh lại bánh xe" khi tôi hỏi một số câu hỏi về SO. Họ bảo bạn sử dụng một số khung hoặc các gói hiện có. Tôi biết thái độ này đến từ đâu vì nó không khôn ngoan khi lãng phí thời gian vào thứ gì đó mà người khác đã giải quyết. Hay nó là như vậy?

Khi còn là sinh viên, tôi tìm thấy bằng cách sử dụng một số mã mà người khác viết để giải quyết vấn đề của mình, tôi không thể học được nhiều như tôi muốn và tôi hiểu rõ hơn. Và đôi khi tôi nghĩ rằng cụm từ đó chủ yếu dành cho các lập trình viên làm việc phải đối mặt với thời hạn và không dành cho sinh viên như tôi.

Có phải là xấu khi "phát minh lại bánh xe"? Có lẽ tôi đang nghĩ sai? Có lẽ có một cách tôi có thể tránh phát minh lại bánh xe và đồng thời học hỏi được nhiều điều?


51
Bạn sẽ không nhận được nhiều lợi ích từ việc tham gia một phòng tập thể dục nếu bạn có được những người khác để nâng mức tạ cho bạn (trừ khi bạn đang học cách trở thành người quản lý).
Charles E. Grant

82
Bạn có thể phát minh lại bánh xe khi bạn chuẩn bị chế tạo bánh xe. Khi bạn xây nhà, bạn nên giả sử những người xây dựng bánh xe biết họ đang làm gì tốt hơn bạn.
zzzzBov

22
Bạn ít nhất cần phải THỬ làm một bánh xe! Nếu không, bạn không biết tại sao bạn nên sử dụng một tiền chế.

59
không bao giờ thích hợp để nêu một cách tuyệt đối. :)
một CVn

2
Có thể chấp nhận phát minh lại các bánh xe khi bạn đang tạo mã cực kỳ tối ưu. Thư viện tiêu chuẩn rất hữu ích, nhưng thường có thể tạo ra một cái gì đó ít chung chung nhưng nhanh hơn.
Leo

Câu trả lời:


126

Tôi nghĩ rằng bạn làm cho một điểm tốt. Hầu hết các lập trình viên trên trang này có khả năng là các chuyên gia làm việc với mục tiêu là khá nhiều để tạo ra phần mềm chất lượng càng nhanh càng tốt. Phát minh lại bánh xe thất bại mục tiêu này trên hai tính.

  1. Viết lại mã tồn tại là lãng phí công sức có thể được sử dụng trên các phần duy nhất của hệ thống của bạn và làm cho dự án mất nhiều thời gian hơn mức cần thiết.
  2. Phiên bản đầu tiên của bất kỳ mã nào có nhiều khả năng có lỗi / giải quyết vấn đề. Hầu hết các thư viện và các thành phần có thể sử dụng lại đã được thử nghiệm và vá lỗi nhiều lần. Nếu bạn phát minh lại một thuật toán băm hoặc cố gắng tạo RDBMS của riêng bạn (trừ khi đó là dự án) thường xuyên hơn là bạn sẽ không có kết quả thấp hơn.

Điều đó nói rằng, trong một môi trường học thuật, mục tiêu là học , không cung cấp phần mềm trên ngân sách. Phát minh lại một bánh xe để hiểu cách thức nan hoa hoặc trục hoạt động là một cách tuyệt vời để thực hiện mục tiêu đó. Đó là lý do tại sao nhiều chương trình giảng dạy lập trình bao gồm một lớp về xây dựng trình biên dịch khi rất ít lập trình viên làm việc từng có lý do cần phải làm điều đó.


37
Tôi đồng ý với ý tưởng để hiểu mọi thứ hoạt động như thế nào, mặc dù tôi cũng mong muốn các trường lập trình mất một chút thời gian trong chương trình giảng dạy của họ để học cách sử dụng thư viện của bên thứ ba và tại sao bạn nên làm vậy. Tôi liên tục tìm thấy các lập trình viên và nhà phát triển có năng lực chuyên nghiệp, những người không thể làm điều này và cuối cùng đã phát minh lại bánh xe.
Spoike

3
điểm tuyệt vời về trình biên dịch
Chani

1
Tôi nghĩ rằng học không phát minh lại bánh xe là quan trọng hơn. Có nhiều thứ bạn có thể làm mà không liên quan đến việc tạo ra thứ gì đó đã được tạo.
Thomas Bonini

@Krelp Trong khi một học sinh, các khái niệm là phần quan trọng nhất. Nhiều giáo sư sử dụng các mẫu mã để cho phép một lý thuyết và ứng dụng cầu nối. Đó là những loại chương trình sẽ phát minh lại thư viện nhưng nó là để đảm bảo rằng các sinh viên hiểu tài liệu.
Jetti

2
Là một sinh viên, bạn cần phải phát minh lại bánh xe để xem tại sao nó đi nhanh như vậy, nhưng là một chuyên gia, bạn cần sử dụng bánh xe thương mại để bạn có thể đi nhanh nhất có thể. Thật không may, vì hóa ra, SO chủ yếu là một trang dành cho các chuyên gia, không dành cho sinh viên (họ không cấm [bài tập về nhà] trong một thời gian sao?)
Tacroy

19

Câu trả lời phụ thuộc rất nhiều vào bối cảnh. Nếu bạn muốn hiểu sâu hơn về cấu trúc dữ liệu bằng cách thử thực hiện bảng băm, "phát minh lại bánh xe" là điều tốt nhất bạn có thể làm. Nếu bạn đang học cách viết trình biên dịch và cần một bảng biểu tượng, việc thực hiện bản đồ băm của riêng bạn thay vì sử dụng lại từ thư viện chuẩn là một sự lãng phí hoàn toàn thời gian của bạn.


17

Là một sinh viên, tôi mong bạn bắt đầu giáo dục lập trình bằng cách trước tiên sao chép một hoặc hai bánh xe , sau đó học cách sửa đổi các bánh xe để xem cách chúng hoạt động và hiểu bất kỳ giới hạn nào. Sau đó, bạn thậm chí có thể tạo ra một bánh xe hoàn toàn mới của riêng bạn để xem liệu bạn có thể cải thiện thiết kế hay để cho người giám sát khóa học của bạn hiểu về các khái niệm liên quan.

Tuy nhiên, là một chuyên gia làm việc, tôi hy vọng bạn đã học được cách sử dụng bánh xe nào để giải quyết bất kỳ vấn đề nào và khi nào có thể phù hợp để sửa đổi một bánh xe hiện có nếu nó chỉ giải quyết được một phần vấn đề của bạn. Nếu bạn không thể tìm thấy một bánh xe ở bất cứ đâu, thì có lẽ bạn đã xác định được thị trường thích hợp hoặc bạn chưa khám phá đủ xa và bạn sẽ cần có đủ kinh nghiệm để biết khi nào sẽ phù hợp để tạo ra một bánh xe hoàn toàn mới của bạn sở hữu.

Vấn đề khi nào là phù hợp để phát minh lại một giải pháp rất phức tạp và nó đòi hỏi thời gian và kinh nghiệm để tìm hiểu khi nào có thể tốt hơn để tạo ra một phiên bản hoàn toàn mới của một cái gì đó đã được thực hiện trước đó. Khi bạn chỉ mới phát triển trong một thời gian ngắn, tốt hơn hết là sử dụng một giải pháp hiện có và yêu cầu người cố vấn của bạn đề xuất các lựa chọn. Khi bạn có thời hạn chặt chẽ và nhiều sự không chắc chắn trong một dự án, sử dụng một cái gì đó hiện có có thể là một trình tiết kiệm thời gian rất lớn và luôn là lựa chọn đầu tiên của bạn. Bạn luôn có thể cấu trúc lại để sử dụng các giải pháp khác sau này nếu phù hợp để làm như vậy, ngay cả khi điều này có nghĩa là cuối cùng quay lại để phát minh lại bánh xe của bạn .


12

Là một giáo viên hoặc lập trình, tôi liên tục chiến đấu với mặt trái của vấn đề: khi nào tôi yêu cầu học sinh phát minh lại bánh xe?

Thực hiện các tình huống đơn giản sau: chúng tôi đang nghiên cứu thuật toán sắp xếp và tôi đặt các tác vụ để viết chương trình sắp xếp một số dữ liệu; hoặc làm việc với chức năng ngày, và tôi yêu cầu một lịch.

Đối với cả hai điều này, có vô số thư viện và chức năng làm sẵn; nhưng tôi muốn các sinh viên tránh chúng, và phát triển phiên bản thuật toán sắp xếp của riêng họ hoặc của lịch.

Bây giờ lấy cái khác này: Tôi đặt một nhiệm vụ để viết một ứng dụng đơn giản, giả sử, lên lịch các cuộc hẹn. Điều này có thể cần sắp xếp, và một lịch, và nhiều hơn nữa. Lần này "không phát minh lại bánh xe" được áp dụng: Tôi không muốn sinh viên phải vật lộn với các vấn đề đã được giải quyết, mà thay vào đó, lắp ráp các chức năng hiện có để có được kết quả.

Khó khăn của tôi là, yêu cầu bạn tái tạo bao nhiêu, điều đó giúp bạn học hỏi và có lợi thế của các vấn đề được giải quyết tốt với những khó khăn mà tôi có thể sử dụng để khiến bạn thực hành thủ công và tôi nên đặt bao nhiêu bạn trong một môi trường thực tế, nơi bánh xe không được phát minh lại?

Để trả lời câu hỏi của bạn trực tiếp hơn, hai gợi ý:

  • nếu một giáo viên nói với bạn "không phát minh lại bánh xe", họ có thể nói như vậy bởi vì họ đã thiết kế vấn đề của họ theo cách đó. Có thể họ muốn bạn thử một thư viện, đấu tranh với việc thực hiện thuật toán của người khác, thay vì tự viết - bạn cũng đang học và tái tạo lại rất thú vị nhưng lại bị mất điểm.
  • nếu bạn có quá nhiều bài tập lắp ráp các cuộc gọi thư viện, thay vì phát triển thuật toán, bạn có thể đặt ra cho giáo viên của mình câu hỏi về sự cân bằng giữa các hoạt động này - nổi bật là bạn chưa bao giờ được yêu cầu viết thuật toán của riêng mình, ví dụ như sắp xếp và hợp nhất. Truyền thông sẽ không bao giờ đi sai.

6

Thực hành Tôi nghi ngờ 1000 dòng mã đầu tiên mà bất cứ ai viết đều rất độc đáo.

Mở rộng bộ công cụ của bạn Sử dụng một khung công tác có nhiều lợi ích hơn khi bạn hiểu những gì nó đang làm (Alost đến điểm bạn có thể tự làm.) Để bạn biết cách áp dụng nó.

Hiểu "Bánh xe" Sử dụng bánh xe bị mòn và mòn hoặc bánh xe không phù hợp, không có lý do gì để mù quáng bám vào quy tắc này. Bạn có thể thiếu thời gian, kinh phí, chuyên môn, vì vậy bạn chỉ cần vá nó và kết thúc chuyến đi.

Có một vài điều tuyệt đối .


1
+ Đặc biệt cho điểm cuối cùng.
Mike Dunlavey

1000 dòng mã đầu tiên mà bất cứ ai viết đều có xu hướng rất độc đáo về những sai lầm sáng tạo.
leftaroundabout

@leftaroundabout - Tôi đoán tôi nên giới hạn câu lệnh đó trong các dòng mã có thể biên dịch.
JeffO

3

Sinh viên không có ngân sách tiền để hoàn thành bài tập, nhưng có ngày đến hạn để xem xét.

Là một người là sinh viên cho đến gần đây, tôi nghĩ rằng số lượng bánh xe phát minh lại phù hợp tùy thuộc vào lớp bạn đang làm bài tập. Bạn không muốn viết thư viện ổ cắm của riêng mình cho lớp thiết kế và phát triển web (nếu bạn có thể làm điều đó chuyển bài tập đúng giờ, bạn đang làm gì để tham gia một lớp dễ dàng?), Nhưng bạn sẽ bị mất rất nhiều nếu nó là một nhiệm vụ cho một lớp mạng. Tất nhiên, các giáo sư thường tính đến những điều này khi họ tạo ra các bài tập, vì vậy bạn sẽ chủ yếu làm những công việc liên quan đến lớp học, nhưng đôi khi, biết những gì bạn không nên tự viết cũng quan trọng.

Điều đó nói rằng, một khi bạn rời trường, thật khó để tìm ra thời gian để xây dựng những thứ đã tồn tại. Tận dụng mọi cơ hội bạn có được khi bạn có thể, trong khi bạn vẫn còn đi học.

Nếu bạn nhận được phần mềm "Sử dụng thư viện X / framework Y" trên SO, hãy mở đầu câu hỏi của bạn bằng "Tôi tự viết X để tìm hiểu thêm về nó"


mở đầu câu hỏi của bạn bằng "Tôi đang viết X một mình để tìm hiểu thêm về nó". Điều này. +1.
boisvert

2

Nếu bạn không có thời hạn cho dự án của mình, IMO, tốt hơn là nên phát minh lại bánh xe. Nếu bạn không có việc làm, hoặc chỉ muốn học lập trình, không kiếm tiền lập trình, thì việc sử dụng các phím tắt sẽ không giúp bạn trở thành một lập trình viên giỏi hơn, những gì sẽ giúp dự án của bạn hoàn thành nhanh hơn? Mặc dù điều này là đúng, nhưng chắc chắn đây là một kỹ năng tốt để biết cách sử dụng thư viện, khung và mã của người khác.


Đây là ý tưởng đằng sau khái niệm Code Katas, viết lại mã nhiều lần để cải thiện và học hỏi từ nó. Tôi đã nói ngay cả trong công việc viết lại mã của bạn nhiều lần là tốt và có thể thực hiện nhiều patters nếu bạn phải làm tốt hơn nữa.
Bill K

2

Trong cuộc sống thực, bánh xe được phát minh lại nhiều lần. Nếu chúng ta tìm kiếm các lý do, chúng ta có thể tìm thấy một số hiểu biết như khi chúng ta cần phát minh lại bánh xe trong lập trình.

Kể từ thời Sumer, nhiều thứ đã thay đổi:

  • Vật liệu được sử dụng để chế tạo bánh xe: từ đá, gỗ, kim loại, carbon, ...
  • kích thước của các vật thể cần bánh xe - với kích thước nanomet cho dụng cụ y tế và bánh xe để kiếm than nâu, kích thước 100m
  • môi trường sản xuất - làm bằng tay, hoặc sản xuất công nghiệp
  • độ chính xác của bánh xe cần thiết
  • Tình huống phù hợp xung quanh bánh xe của bạn. Có thể có một bánh xe hoàn hảo cho công việc của bạn, nhưng nó có thể được cấp bằng sáng chế.
  • Sự tỏa sáng và đánh bóng cho bánh xe của bạn. Một chiếc Cadillac có thể xứng đáng với một bánh xe khác hơn là một chiếc Golf VW.
  • Bánh xe tối ưu cho xe đẩy trẻ em phụ thuộc vào nhiều thông số: Kích thước và trọng lượng của xe đẩy (cộng với em bé / ~ ies), hoàn cảnh khí hậu, giá tài nguyên cho dầu hoặc cao su tự nhiên, máy móc để chế tạo bánh xe và thợ thủ công, có sẵn để sản xuất. Nói ngắn gọn: Kinh tế thế giới.

Làm thế nào mà dịch cho thế giới phần mềm? Tốt,

  • có thể có một máy chủ web, nhưng thật không may, nó được viết bằng PHP. Bạn muốn có nó trong một ngôn ngữ mà bạn thông thạo
  • một thuật toán sắp xếp có thể quá khổ cho 10 phần tử, nhưng không mở rộng tới 1T phần tử
  • bạn có thể cần một giải pháp do chính chương trình thứ hai tạo ra
  • độ chính xác thường là một câu hỏi kỹ thuật số trong vùng đất phần mềm, nếu một thuật toán sắp xếp một danh sách thì nó được sắp xếp - không phải hầu hết được sắp xếp. Nhưng bên cạnh hiệu suất, kích thước mã, sử dụng bộ nhớ hoặc các hạn chế khác có thể xảy ra
  • Bằng sáng chế không cần giải thích thêm, tôi đoán.
  • Giao diện là một lý do liên tục để phát minh lại một cái gì đó - hãy nghĩ dropDownList (ComboBox).
  • Tình hình kinh tế toàn cầu có thể ảnh hưởng đến bánh xe phần mềm của bạn: nó sẽ là bánh xe đám mây, bánh xe nguồn mở, bánh xe trình duyệt hay bánh xe ứng dụng?
  • Và tất nhiên lý do nổi tiếng nhất để xây dựng bánh xe của riêng bạn: Bạn thích tìm hiểu nó.

2

Tôi là một sinh viên mới được giáo dục. Ở trường chúng tôi đã 'học' asp.net và C #, trong 2 năm giáo dục, chúng tôi chưa bao giờ cố gắng tạo hệ thống email, hệ thống đăng nhập hoặc CMS của riêng mình. Mọi thứ chỉ kéo và thả điều khiển vào chế độ xem thiết kế .

Chúng tôi bắt đầu 102 sinh viên, 23 đã hoàn thành. 4 người có một công việc. Lý do?: 4 người đó (bao gồm cả tôi) đã biết cách lập trình trước khi chúng tôi thực sự bắt đầu vào giáo dục.

Những người còn lại bị mất. Bởi vì chúng tôi không bao giờ "phát minh lại bánh xe". Chúng tôi không bao giờ phải biết làm thế nào mã thực sự hoạt động. Việc xây dựng một hệ thống đăng nhập đầy đủ khá đơn giản, với quản lý người dùng - Nhưng những sinh viên từ giáo dục của tôi, không biết làm thế nào để làm điều đó. Bởi vì họ không biết làm thế nào một hệ thống đăng nhập thực sự hoạt động.

Tôi cảm thấy buồn, đến một lúc nào đó, thực sự lãng phí 2 năm, chẳng học được gì. - Tôi ước rằng các giáo viên trên khắp thế giới nói: Vâng, chúng tôi biết có các khung, nơi mã tồn tại, Bạn có thể sử dụng chúng trong cuộc sống thực .. Nhưng trên nền giáo dục này, bạn sẽ học cách lập trình ..

Nhiều giáo dục lập trình rất ngắn, vì vậy các nền giáo dục cần phải bao gồm rất nhiều thứ trong thời gian đó. Tôi nghĩ sẽ tốt hơn nếu danh sách mọi thứ bị cắt giảm một nửa và dành nhiều thời gian hơn cho lập trình. Mọi người có thể 'phát minh ra một loại bánh xe mới' nếu họ biết cách chế tạo một 'bánh xe' bình thường. Mọi người sẽ không ngu ngốc nếu họ có một chút kiến ​​thức, nhưng bạn không thể hỏi một người đàn ông không biết gì về ô tô, chế tạo xe hơi .. Nhưng hỏi một người đàn ông biết cách chế tạo một chiếc xe đạp, sẽ dễ dàng hơn nhiều với việc thực sự xây dựng chiếc xe.


1

Nó thực sự phụ thuộc vào những gì bạn đang làm. Nếu bạn đang cố gắng hiểu bánh xe, đó là một ý tưởng tốt để tự sáng tạo lại chúng. Tuy nhiên, nếu bạn đang cố gắng để hiểu xe ô tô, việc phát minh lại bánh xe hoặc động cơ đốt trong nói chung là lãng phí và mất tập trung.

Vì vậy, ví dụ, khi bạn quan tâm đến việc hiểu làm thế nào một chỉ mục tìm kiếm toàn văn bản có thể hoạt động, đó là một ý tưởng tốt để thử cuộn của riêng bạn. Nếu bạn đang cố gắng xây dựng một ứng dụng để quản lý tài liệu, tốt hơn hết là sử dụng lại một thư viện hiện có, bởi vì phần lớn công việc của bạn là nhận được kiến ​​trúc ứng dụng và trải nghiệm người dùng ngay lập tức.


1

Vâng, thật thích hợp để bảo học sinh không phát minh lại bánh xe. Nhưng cần phải có một sự hiểu biết rõ ràng về ý nghĩa của nó đối với một học sinh: viết những gì là nguyên bản cho bài tập. Điều đó không có nghĩa là nếu bài tập là viết một bong bóng, bạn sao chép nó ra khỏi Wikipedia, cũng không có nghĩa là sử dụng mảng.sort hoặc tương đương nếu khung hoặc ngôn ngữ của bạn cung cấp nó. Nhưng sau khi bạn trình bày các thuật toán sắp xếp khác nhau, đã viết bong bóng và quicksort của riêng bạn, đừng bận tâm viết lại nó cho mỗi bài tập mới, hãy sử dụng cách sắp xếp theo thứ tự hoặc những gì bạn đã viết, đừng làm lại điều cũ .

Phát minh lại bánh xe là về việc không lãng phí thời gian, điều này cũng có thể áp dụng cho sinh viên cũng như đối với các chuyên gia - sự khác biệt nằm ở những gì có mục tiêu. Học sinh nên học, vì vậy một cái gì đó không hiểu thêm, là một sự lãng phí thời gian - sau khi bạn đã viết một bong bóng bạn biết nó làm gì, bạn biết tại sao bạn không muốn sử dụng nó trên một bộ lớn, và viết lại nó nhiều lần là một sự lãng phí thời gian. Bạn sẽ không học được điều gì mới trong lần viết lại thứ 25.

Đối với sinh viên, điều đó không có nghĩa là không viết những gì người khác đã viết, điều đó có nghĩa là đừng làm lại những gì bạn đã thành thạo - thời gian đó có thể tốt hơn dành cho những gì bạn chưa thành thạo.


Ngoại trừ nếu viết lại lần thứ 25 là một thực hành cho một số ngôn ngữ lập trình bạn mới học.
leftaroundabout

1

Rất nhiều suy nghĩ và nỗ lực đã đi vào việc tạo ra một bánh xe. Lời khuyên là "không phát minh lại bánh xe" nhưng bạn có thể tiếp tục và đảo ngược kỹ sư và hiểu lý do tại sao một số điều được thực hiện theo cách nó được thực hiện. Sau này, bạn có thể thử thực hiện bánh xe theo cách riêng của mình, điều này có thể dẫn đến một trong ba kết thúc hợp lý.

  1. Bạn có thể hiểu tại sao mọi thứ là như vậy.
  2. Bạn có thể tối ưu hóa nó và làm cho nó tốt hơn
  3. Bạn có thể làm hỏng nó và học cách không làm điều đó.

Đối với tôi sinh viên không nên phát minh lại bánh xe, nhưng cố gắng đảo ngược nó và hiểu ý nghĩa.


1

Tôi sẽ nói rằng nó phụ thuộc vào việc bạn đang phát minh lại để xem bánh xe hoạt động như thế nào hoặc phát minh lại bánh xe trong quá trình hoàn thành một số nhiệm vụ khác. Chắc chắn có những bánh xe mà mỗi sinh viên cần tự thực hiện ít nhất một lần. Bạn phải biết một số cấu trúc dữ liệu và thuật toán cơ bản hoạt động như thế nào để hiểu chúng sẽ ảnh hưởng đến hiệu suất mã của bạn như thế nào hoặc chọn sử dụng cái nào trong các trường hợp khác nhau.

Ngăn xếp, đống, danh sách liên kết, cây, vv chắc chắn là giá trị đầu tư trong thời gian để thực hiện một lần; sau đó sử dụng những cái được cung cấp bởi khung. Mọi người sử dụng plugin jQuery nên viết ít nhất một, nhưng bạn không phải viết mọi loại khác nhau mà bạn sẽ sử dụng. Tôi muốn nói rằng nó hữu ích, nhưng không cần thiết, để viết một trình lập lịch xử lý nhỏ hoặc hệ điều hành mini để bạn có thể hiểu những gì diễn ra dưới mui xe trên máy tính. Bạn cần phải hiểu làm thế nào các quy trình, chủ đề, vv làm việc, mặc dù.

Một khi bạn có kiến ​​thức làm việc tốt, việc quay lại và thực hiện các cấu trúc / thuật toán mới để có được cảm giác về chúng cũng rất quan trọng. Trừ khi đó là công việc của bạn hoặc bạn thực sự giỏi về nó, tôi sẽ không sử dụng những cái hiện có trong mã của bạn.


1

Câu trả lời phụ thuộc vào việc bạn muốn học hay sáng tạo.

Nếu học tập là mục đích, "phát minh lại bánh xe" có thể giúp bạn hiểu rõ hơn và hiểu rõ hơn so với việc sử dụng các bánh xe hiện có (chức năng thư viện).

Nhưng nếu việc tạo ra một sản phẩm phức tạp là mục đích, thì "phát minh lại bánh xe" có thể là một thực tế tốn thời gian và sẽ giúp ích rất ít cho việc tạo ra sản phẩm.

Tuy nhiên, nếu mục tiêu tâm hồn là học tập được cung cấp đủ thời gian và sức chịu đựng, "phát minh lại bánh xe" là lựa chọn tốt nhất, vì nó giúp tùy chỉnh mọi tính năng.


1

Vâng, có hai khía cạnh này.

Thứ nhất, nếu bạn đang cố gắng học, có thể hữu ích để làm một số điều từ đầu, hoặc sử dụng các giao diện cấp thấp hơn mức cần thiết. Tuy nhiên, vẫn cần xác định những gì bạn đang học: nếu bạn muốn tìm hiểu về giao thức HTTP, bạn không cần phải tự lập trình socket. Chỉ phát minh lại những điều bạn đang tìm hiểu và chỉ làm như vậy để thực sự khám phá và hiểu chúng.

Nhưng - một trong những kỹ năng quan trọng nhất của một lập trình viên chuyên nghiệp là chọn, tìm hiểu và sử dụng phần mềm có sẵn. Đây là điều mà bạn cũng cần phải học. Một tỷ lệ lớn các câu hỏi về SO dường như đến từ những người không có khả năng đọc tài liệu.

Cuối cùng, lập trình dựa trên một cơ sở lý thuyết đáng kể. Bạn sẽ cần sử dụng cả hai bài tập thực hành, kết hợp với đọc, để học lý thuyết.


Tôi đồng ý. Đó là lý do tại sao có rất nhiều khung và thư viện phần mềm mới có sẵn được tạo ra mọi lúc :)
gbjbaanb

0

Tôi đã phải đối mặt với tình huống tương tự. Đó là vì sự khác biệt trong nhận thức trong ngành công nghiệp và học thuật.

Nếu bạn không "phát minh lại bánh xe" thì bạn hoàn toàn không thể học bất cứ điều gì ở trường hoặc hiểu cách thức hoạt động của một cái gì đó.

Trong khi đó trong một ngành công nghiệp, mục tiêu là đưa ra một sản phẩm trong ít thời gian và công sức nhất.

Cá nhân, tôi thích đi xuống hố thỏ và tôi ghét triết lý của ngành nhưng đó là cách các doanh nghiệp được thực hiện và bạn không thể phàn nàn.


0

Các Hacker ngữ khó hiểu Lexikon có một nhận xét rất tốt về reinventing the wheel :

Để thiết kế hoặc thực hiện một công cụ tương đương với một hoặc một phần hiện có, với ngụ ý rằng làm như vậy là ngớ ngẩn hoặc lãng phí thời gian. Đây thường là một lời chỉ trích hợp lệ. Mặt khác, ô tô không sử dụng con lăn bằng gỗ và một số loại bánh xe phải được phát minh lại nhiều lần trước khi bạn làm đúng. Mặt khác, mọi người phát minh lại bánh xe có xu hướng đưa ra tương đương đạo đức của một hình thang có trục bù.

Vì vậy, có thể tốt khi phát minh lại bánh xe, nhưng hãy chắc chắn rằng bạn xem xét các giải pháp của người khác trước hoặc sau khi thực hiện.


0

Đáp án A: Phát minh lại bánh xe. Nó giúp bạn hiểu sâu hơn về các cấu trúc dữ liệu và thuật toán và làm cho nó rất nhiều khả năng bạn sẽ viết những thứ tốt. Tôi chắc chắn rằng khi Guido van Rossum bắt đầu sử dụng Python, mọi người bảo anh ta đừng phát minh lại bánh xe. Có rất nhiều ngôn ngữ. Tại sao phải viết google khi đã có Yahoo! Làm thế nào về tiếng kêu? Tìm hiểu tất cả. Hãy là một người khổng lồ. Đừng để những người nhỏ bé giới hạn bạn. Trả lời B: Nếu một người hướng dẫn cho bạn biết phải làm gì, hãy cho anh ta những gì anh ta muốn, hoặc chỉ một chút nữa ngay cả khi điều đó có vẻ ngớ ngẩn. Nếu bạn muốn điên rồ hãy làm một giải pháp đáng kinh ngạc và cho anh ta một liên kết đến nó đi trước. Tuy nhiên, trước tiên, hãy thực hiện các yêu cầu được đặt ra như đã đưa ra để anh ấy hạnh phúc.


-1

Nếu bạn là sinh viên và do đó không có thời hạn cho dự án của bạn, tốt hơn là "phát minh lại bánh xe". Nếu bây giờ bạn đang lập trình chỉ để học cách lập trình và không kiếm tiền, tại sao lại dùng các phím tắt không giúp bạn học? Tại sao không làm điều đó một cách khó khăn? Nhưng, khi bạn trở thành một lập trình viên làm việc, mọi người sẽ nghi ngờ nếu bạn không biết cách sử dụng các khung hoặc thư viện ...


10
Tôi không biết bạn học trường nào, nhưng tôi đã đi đâu, thời hạn chuyển nhượng là phổ biến.
một CVn

-2

Làm những gì bài tập / câu hỏi / bài kiểm tra yêu cầu bạn làm.

Cách đây nhiều năm, tôi là một TA cho một lớp lập trình C. Một câu hỏi thi là 'Viết chương trình để sao chép tệp'. Một số sinh viên hỏi cùng loại câu hỏi - họ có thể sinh ra một quy trình và chạy lệnh cp OS không?

Điều chúng tôi hỏi họ trở lại là 'Chương trình của bạn có sao chép tệp không?'

Câu hỏi thi yêu cầu họ viết mã để sao chép một tập tin. Nếu câu trả lời không có mã C sao chép tệp (ví dụ: mở đầu vào, đầu ra mở, một vòng lặp để đọc / ghi byte, đóng đầu vào, đóng đầu ra) thì nó đã không sao chép tệp.

Nếu giáo viên nói sử dụng khung hoặc thư viện (ví dụ: lớp đồ họa có thể yêu cầu bạn sử dụng thư viện 3D) thì hãy sử dụng những gì họ bảo bạn sử dụng. Không phát minh của riêng bạn hoặc sử dụng một cái khác. Bất cứ điều gì khác biệt sẽ làm cho giáo viên khó hơn để chấm điểm công việc của bạn.

Trong một cuộc phỏng vấn việc làm, một kiến ​​thức về các khung phổ biến sẽ giúp bạn trả lời các câu hỏi. Tạo các dự án của riêng bạn để tìm hiểu. Chúc may mắn với các nghiên cứu của bạn.


Có, nhưng nếu họ sinh ra cpchương trình của họ thì thực tế sẽ sao chép tệp.
Marcin
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.