Đấu tranh như một lập trình viên. Cần một số lời khuyên [đóng]


20

Tôi đã là một nhà phát triển bây giờ trong một số năm. Tôi khá giỏi trong những gì tôi làm và có thể "hoàn thành công việc".

Nhưng, có một sự khác biệt giữa "hoàn thành công việc" và "thực hiện công việc đúng cách". Hãy sử dụng một ví dụ.

Gần đây tôi đã phát triển một trang web từ đầu. Trang web chạy tốt và tôi không có vấn đề. Nhìn qua mã tôi tự nghĩ rằng mình có thể làm nó tốt hơn. Tôi có thể đã cắt giảm các truy vấn MySQL của tôi. Tôi có thể đã sử dụng MVC làm cho việc mở rộng dễ dàng hơn (hiện tại nó cần phải mở rộng).

Tôi quyết định viết lại dự án bằng CodeIgniter. Tôi thích khuôn khổ. Nhưng sau đó tôi đã bị lãng quên vì để cắt giảm các truy vấn MySQL của tôi, tôi phải học các liên kết nâng cao.

Và đây là vấn đề. Bất cứ khi nào tôi làm một công việc đúng cách, tôi sẽ không ngừng học hỏi. Và các chủ đề như MySQL tiên tiến tham gia cần có thời gian để tìm hiểu và sau đó là thời gian để thực hiện.

Tôi không làm việc cho một công ty. Tôi làm mọi thứ một mình. Vì vậy, tôi tưởng tượng nếu tôi làm việc như một nhà phát triển PHP cho một công ty thì sẽ có các nhóm riêng biệt xử lý SQL.

Độc tấu thật khó. Và đôi khi, mặc dù kiến ​​thức của tôi được nâng cao, tôi thấy mình đặt câu hỏi, sau câu hỏi. Tôi có thể có rất nhiều niềm tự hào trong công việc của tôi. Nhưng nếu tôi phải làm việc cho một công ty xử lý các dự án hoàn chỉnh, tôi có thể tưởng tượng các dự án mất một thời gian vì tôi phải học hỏi nhiều hơn để thỏa mãn niềm tự hào của mình và để đảm bảo rằng tôi đang làm mọi thứ "chính xác".

Tôi có kế hoạch nhận việc sau năm mới. Tôi cần sự bảo đảm công việc. Đó là lý do tại sao tôi hỏi câu hỏi này.

Lời khuyên nào bạn có thể đưa ra về mặt phát triển bản thân và cải thiện bản thân? Tôi có nên bớt lo lắng? Hoặc có thể tìm kiếm một công việc như một nhà phát triển PHP khi tôi sẽ không trực tiếp xử lý các truy vấn SQL?


54
nếu bạn không muốn liên tục học thì bạn đang ở sai trường

6
@JamesGuvnaJeffery: nếu họ không cho phép (bất kỳ) thời gian (tất cả) để học trong một dự án, tôi sẽ không muốn làm việc ở đó vì là một nhà phát triển, tôi sẽ ngừng cải thiện bản thân.
Marjan Venema

3
công việc là học tập, họ không cho bạn thời gian tuyệt vời để học, thực ra họ làm, nó được gọi là "thời gian cá nhân của bạn". Họ không gọi đó là "đào tạo nghề" mà không có lý do. Nếu bạn không cảm thấy thoải mái khi là người học tự khởi xướng và học mọi lúc mà không phải trả tiền, như tôi đã nói, có lẽ bạn đang ở sai lĩnh vực.

5
Mã cũ được cho là để hút. Đừng tự sát vì nó; chỉ cần cố gắng cải thiện theo thời gian. Viết lại một dự án làm việc hầu như không có ý nghĩa thực tế. Khách hàng sẽ không trả thêm tiền cho nó. mã hóa kinh dị.com / blog / 2006/10 / từ
Công việc

2
Bạn không hiểu những gì tôi đang nói, làm việc cho một công ty là OPPOSITE chính xác về những gì bạn đang làm mà bạn thích làm. Nó đang làm việc theo lịch trình của ai đó, sử dụng những gì họ ra lệnh và cách họ ra lệnh mà không có gì ngoài sự thỏa hiệp và không có thời gian để nghiên cứu những điều mới về thời gian của họ và không có thời gian để thực hiện những điều thú vị mới mà bạn học được trong thời gian cá nhân. Đây là thực tế của việc trở thành một nhà phát triển phần mềm của công ty. Tôi nghi ngờ bạn sẽ tận tâm với môi trường công ty như bạn nói bạn thích phong cách nghiên cứu và phát triển thử nghiệm mà bạn đã quen thuộc.

Câu trả lời:


33

Lời khuyên: Đừng sợ học những điều mới - bạn đã thực hiện Bước đầu tiên tốt khi thừa nhận rằng bạn có thể làm tốt hơn và sau đó nỗ lực để tìm hiểu cách bạn có thể làm tốt hơn. Vâng, phải mất nhiều thời gian hơn về phía trước, nhưng tiền chi trả thường có giá trị trong thời gian dài. Bây giờ bạn đã biết CodeIgniter, bạn có thể sử dụng nó cho (các) dự án tương lai tiếp theo. Bạn có thể đặt nó vào sơ yếu lý lịch của bạn. Bây giờ bạn đã biết các kỹ thuật SQL nâng cao, các dự án trong tương lai của bạn sẽ được hưởng lợi. Nếu bạn ngừng học, bạn sẽ trì trệ.


21

Những gì bạn đang trải qua âm thanh khá bình thường với tôi. Đây là cách chúng tôi làm việc trên nghề của chúng tôi và ngày càng tốt hơn với những gì chúng tôi làm.


10

... Tôi quyết định viết lại dự án bằng CodeIgniter. Tôi thích khuôn khổ. Nhưng sau đó tôi đã bị chệch hướng vì để cắt giảm các truy vấn MySQL của tôi, tôi phải học các liên kết nâng cao.

Và đây là vấn đề. Bất cứ khi nào tôi làm một công việc đúng cách, tôi sẽ không ngừng học hỏi. Và các chủ đề như MySQL tiên tiến tham gia cần có thời gian để tìm hiểu và sau đó là thời gian để thực hiện ...

Được đưa ra ở trên tôi nghĩ rằng sẽ hợp lý khi bạn tập trung vào việc cải thiện khả năng lập kế hoạch trước, thiết lập và ưu tiên hàng đợi công việc, quản lý thời gian của bạn - những thứ như thế.

Thực sự, đây dường như là điều duy nhất còn thiếu trong thái độ của bạn. Những gì bạn gọi là "sidetracking" về cơ bản là một phần công việc khác ("tìm hiểu các tham gia nâng cao") phải được lên kế hoạch, ưu tiên và đưa vào hàng đợi.


Cảm ơn @gnat. Tôi thực sự đánh giá cao những phản ứng tích cực này. Tôi có thể thách thức đồng ý với bạn về những gì bạn nói.
James Guvna Jeffery

9

Để trở thành một chuyên gia trong lĩnh vực này là liên tục đập vỡ bản thân trước sự bất cập của chính bạn. Làm điều đó 8-5 từ thứ Hai đến thứ Sáu, có thể nhiều hơn nếu có thời hạn sắp tới, có một ngày cuối tuần tốt đẹp và quay trở lại để biết thêm vào thứ Hai. Đó là công việc.

Làm phần mềm đòi hỏi một sự khiêm tốn nhất định. Nếu bạn là người phải đúng, và người phải chứng minh rằng họ đã biết tất cả mọi thứ, thì đây có thể không phải là lĩnh vực dành cho bạn.

Tôi không thể không học được điều gì mỗi ngày. Tôi không nghĩ rằng tôi muốn công việc đó.


Kinh nghiệm của tôi là ổn khi trở thành một người phải đúng, miễn là bạn cũng có thể bị suy dạ dày. Tôi tự đá mình qua mọi thứ không hoàn hảo. Đó là lý do tại sao tôi làm mọi thứ tốt hơn khi thời gian trôi qua.
Tom Anderson

Chà, đó là nghịch lý phải không? Hubris là một trong ba đức tính của lập trình viên. Nhưng theo kinh nghiệm của tôi, việc "bị ép buộc phải chứng minh rằng tôi thông minh bằng cách thể hiện rằng tôi đã biết tất cả mọi thứ trước khi học nó" là xu hướng mà các nhà phát triển tân binh sẽ từ bỏ, hoặc họ không tồn tại lâu trong lĩnh vực này.
Dan Ray

Có lẽ điều tiết trở lại chứ không phải buông tay? Tôi từ lâu, may mắn thay, đã thoát khỏi thói quen tuyên bố rằng tôi biết những điều tôi đã không làm. Tuy nhiên, tôi vẫn ghét thừa nhận không biết điều gì; sự cần thiết phải thu hẹp khoảng cách giữa những gì tôi biết và những gì tôi muốn có thể nói tôi biết là một trình điều khiển cho tôi. Không nhất thiết phải cho tất cả mọi người!
Tom Anderson

Tôi không biết, Tom. Dường như với tôi như khoảnh khắc bối rối mà bạn không biết điều gì đó là khoảnh khắc bạn có thể dành cho việc học nó. Tôi muốn biết nhiều như anh chàng tiếp theo, nhưng tôi không có vấn đề gì cả khi nói "Tôi không biết".
Dan Ray

6

Là độc tấu khó khăn. Ngược lại, khi bạn làm việc với một nhóm các nhà phát triển, mọi người đều học hỏi lẫn nhau. Là một phần của nhóm, bạn sẽ thu thập được nhiều kiến ​​thức bằng cách làm việc với các nhà phát triển khác và với nỗ lực ít hơn nhiều so với khi bạn cố gắng tự mình tìm ra mọi thứ.

Điều đó nói rằng, là một nhà phát triển, bạn phải cam kết không ngừng học hỏi. Cho dù đó là đọc tài liệu cho các khung mới hoặc sách về phát triển, bạn phải nỗ lực không ngừng để duy trì kiến ​​thức của mình hiện tại và phát triển. Tuy nhiên, là một phần của một nhóm có thể làm rõ lĩnh vực nào bạn cần tìm hiểu về hầu hết tại bất kỳ thời điểm nào.

Về quan điểm của bạn về việc xem lại mã cũ của bạn và viết lại: Tôi đã thấy rằng mã của riêng tôi luôn thể hiện tốt nhất những gì tôi biết tại thời điểm tôi viết nó. Nhiều lần tôi quay lại một cái gì đó tôi đã viết cách đây nhiều năm, và tự tát vào trán mình, khi tôi thấy tôi có thể làm tốt hơn bao nhiêu, đưa ra những gì tôi biết bây giờ . Nhưng đó là bản chất của kinh nghiệm, bạn có được nó sau khi bạn cần nó ...

Cuối cùng, khi bạn đang phát triển một ứng dụng, bạn luôn cần rèn luyện ý thức kinh doanh tốt, quyết định khi nào nên cắt góc để hoàn thành nhanh hơn và khi nào cần thêm thời gian để học một cái gì đó mới sẽ cải thiện thiết kế và chất lượng của ứng dụng. Có một vũ trụ để học hỏi trong thế giới phần mềm. Nếu không thực hiện kiểu phán đoán tốt đó, bạn có thể thấy mình quay cuồng học hỏi, suy nghĩ, thiết kế lại, nhưng không bao giờ hoàn thành công việc.


+1 cho câu thứ hai. Tôi đã học được nhiều hơn từ các đồng nghiệp của mình, làm việc tại một số tổ chức khác nhau, hơn là tôi từng học từ việc đọc (sách hoặc trực tuyến). Nghe có vẻ từ câu hỏi của bạn như làm việc trong một nhóm trong một thời gian sẽ làm cho bạn một thế giới tốt.
Dawood nói phục hồi Monica

3

Tôi nghĩ rằng mối quan tâm của bạn là hợp lệ, nhưng bạn không nên mất bất kỳ giấc ngủ nào trên nó. Tôi tin rằng việc trở thành một nhà công nghệ đi kèm với hành lý sau:

  • Bạn phải liên tục học hỏi những điều mới. Bạn có thể học cách yêu nó, hoặc bạn không.
  • Có nhiều thứ bạn muốn làm chủ hơn những gì bạn có thể biết.
  • Bạn sẽ phát triển các kỹ năng trong một dự án mà bạn muốn bạn có trong dự án.
  • Kết quả là, bạn sẽ luôn muốn quay lại và làm lại dự án đó. Thật khó để phát hành một cái gì đó bạn biết có thể tốt hơn.

Cuối cùng, có vẻ như bạn quan tâm đến việc xây dựng phần mềm chất lượng, đó là điều mà bạn không thể học được . Biết rằng bạn cần phân biệt xây dựng một giải pháp chất lượng cao với xây dựng một cái gì đó hoàn hảo. Nghe có vẻ như bạn giống tôi, và sẽ không bao giờ cảm thấy nó hoàn hảo. Sẽ có liên quan nhiều hơn nếu bạn không cảm thấy như bạn có cơ hội cải thiện bản thân và công việc.

Thật khó khăn để trở thành người nắm giữ tất cả các giao dịch (không thành thạo), nhưng bạn thực sự cần tìm ra cách xác định những điều thú vị và hữu ích nhất đối với bạn và tập trung vào chúng. Chỉ ra cách tốt nhất để "thuê ngoài" công việc khác cho người khác hoặc công cụ .


2

Tôi nghĩ bạn cần bớt lo lắng về việc "hoàn thành nó đúng cách". Phấn đấu cho sự hoàn hảo, nhưng nhận ra rằng thực sự không thể thiết kế một giải pháp hoàn hảo, thậm chí còn hơn thế ngay từ lần đầu tiên. Thực tế là bạn đủ lo lắng về việc thực hiện đúng để hỏi câu hỏi này có nghĩa là bạn đã đi đúng hướng.

Đối với sự thất vọng của bạn khi học những điều mới, tôi thấy rằng làm việc trong một nhóm, và có thể hỏi và thảo luận vấn đề với các lập trình viên khác đã loại bỏ nỗi đau của việc tìm hiểu những gì tôi cần học và thay thế nó bằng niềm vui khám phá một cái gì đó mới và học cách áp dụng nó.

Tôi thích viết phần mềm, nhưng đôi khi thực sự đau đớn khi không học thực sự một cái gì đó mới, nhưng tìm ra chính xác những gì bạn cần học để có thể đạt được những gì bạn muốn làm.

Từ những gì tôi hiểu, tôi đã ở một vị trí tương tự như bạn. Mã hóa một cái gì đó một mình có thể vừa khó chịu vừa khó khăn, và đôi khi rất bổ ích và vui vẻ.

Làm chính xác những gì bạn dự định làm, tìm một công việc mà bạn sẽ là thành viên của một nhóm (và làm hết sức mình để đảm bảo bạn tìm được một công việc ở đâu đó không hút). Làm việc với những người khác sử dụng cùng các công nghệ và thiết kế cùng một phần mềm sẽ mở rộng sự hiểu biết và ứng dụng của bạn về các công nghệ và mẫu thiết kế đó gần như chỉ sau một đêm.

Vì biết làm thế nào để làm điều gì đó ngay lần đầu tiên, à, làm sao bạn biết có một cách tốt hơn trừ khi bạn đã thực hiện nó theo một cách nhất định ngay lần đầu tiên? Kỹ năng thiết kế phần mềm thường phụ thuộc phần lớn vào kinh nghiệm. Joel Spolsky là một thiên tài phần mềm, nhưng nếu bạn đọc nhiều bài viết của anh ấy, bạn sẽ nhận thấy rằng chúng là kết quả của cả kinh nghiệm và trí thông minh.

Về phần SQL, với tư cách là nhà phát triển .NET Tôi chưa từng làm việc ở bất kỳ nơi nào có nhà phát triển cơ sở dữ liệu chuyên dụng, tất cả chúng ta đều viết SQL của riêng mình, nhưng thường có những nhà phát triển thực sự giỏi về SQL, họ sẵn sàng giúp đỡ bạn với các công cụ sâu hơn.

Bạn có vẻ là một người thông minh, tôi không nghĩ bạn nên quá khó khăn với chính mình.


1

Điều này là hoàn toàn bình thường và không phải là điều bạn nên lo lắng quá nhiều. Bạn cần phải liên tục học các kỹ năng mới, nhưng bạn cũng cần học cách ưu tiên và quản lý thời gian của mình. Bạn cũng cần tránh bẫy tái phát triển không cần thiết.

Lập trình viên thiếu kinh nghiệm thường sẽ bị cuốn vào cái bẫy tái phát triển:

Tôi đã không viết chương trình này một cách hoàn hảo, và bây giờ tôi cần mở rộng hoặc thay đổi nó. Sẽ rất nhiều công việc để sửa đổi mã hiện có do cách tôi đã viết nó. Tôi đã học được nhiều hơn kể từ đó, tôi chắc chắn rằng điều tốt nhất sẽ là viết lại toàn bộ chương trình. Tôi chắc chắn rằng tôi có thể viết nó tốt hơn nhiều lần này.

Có một số điều sai với logic này.

  • đó là rất nhiều công việc để sửa đổi hoặc bổ sung vào mã hiện tại, nhưng nó sẽ không có nhiều hơn việc phải viết lại tất cả mọi thứ?
  • nếu bạn viết lại mọi thứ, rất có thể bạn sẽ tạo ra các lỗi mới và sẽ mất nhiều thời gian hơn bạn nghĩ (đặc biệt là nếu bạn không có kinh nghiệm). Bạn đang xem xét tất cả mọi thứ có liên quan đến việc viết hệ thống? (hãy nhớ bạn mất bao lâu lần đầu tiên)
  • bạn đã học được rất nhiều kể từ khi bạn viết chương trình ban đầu (vì vậy bạn có thể cải thiện nó), nhưng bạn cũng sẽ học được nhiều hơn vào tháng tới / năm. Điều gì khiến bạn nghĩ rằng bạn sẽ không muốn viết lại mọi thứ một lần nữa vào một thời điểm nào đó trong tương lai?
  • thử nghiệm cuối cùng của một chương trình là nó hoạt động . Bạn không có gì tốt hơn để làm gì?

Nó không bao giờ có thể bị tổn thương để suy ngẫm và lập kế hoạch tái phát triển. Điều đó có nghĩa là xem xét cách bạn muốn viết lại chương trình của mình và cố gắng xác định bất kỳ vấn đề nào bạn sẽ gặp phải. Trong trường hợp này, bạn sẽ xác định được 'các SQL tham gia nâng cao' mà bạn hiện yêu cầu, sau đó điều tra cách chúng hoạt động và tìm hiểu về chúng.

Nếu bạn nghĩ rằng bạn sẽ không xác định được lỗ hổng kiến ​​thức tham gia nâng cao thông qua lập kế hoạch (mà không bắt đầu phát triển) thì bạn cần cải thiện kỹ năng lập kế hoạch của mình. Hãy thử nghĩ về phần nào của kế hoạch không đủ chi tiết. Bạn nên đi vào chi tiết càng nhiều càng cần thiết cho đến khi bạn chắc chắn rằng toàn bộ hệ thống là có thể về mặt kỹ thuật.

Cách tiếp cận này sẽ cho phép bạn học trước thời hạn .

Cuối cùng, học trong công việc là một phần bình thường của lập trình. Tuy nhiên, điều này không có nghĩa là bạn bắt đầu một nhiệm vụ và sau đó nhận ra rằng bạn phải dừng lại một tuần để tìm hiểu về HTML cơ bản. Bạn có thể dừng lại một vài giờ để tìm hiểu về một cái gì đó, nhưng nhà tuyển dụng của bạn chỉ trả tiền cho bạn để hoàn thành công việc. Học hiệu quả - không đọc phần giới thiệu và lịch sử, chỉ cách nó hoạt động và cách nó sẽ phù hợp với chương trình của bạn. Nếu bạn phải ngừng làm việc trong nhiều ngày liên tục để học cách hoàn thành một phần của chương trình, bạn đã làm sai.


1

Bạn có thể nghĩ rằng học các công nghệ và vấn đề mới là một khoảng thời gian. Nhưng đừng hoảng sợ. Nó bình thường. Đó là một phần trong quá trình thực hành của bạn với tư cách là một lập trình viên để học ... hoặc nếu không tất cả chúng ta sẽ bị mắc kẹt với COBOL.

Các chuyên gia tự do điều chỉnh hoa hồng của họ cho phù hợp và thời gian học tập là một trong những điều khác cần được tính đến trong ước tính thời gian của bạn. Lần tới khi bạn quyết định đưa vào một khuôn khổ mới, hãy đảm bảo bạn lên kế hoạch đủ thời gian để tìm hiểu nó.


0

Nhưng, có một sự khác biệt giữa "hoàn thành công việc" và "thực hiện công việc đúng cách".

Không, không có, và tôi nghĩ đó là gốc rễ của vấn đề của bạn ở đây. Đối với tôi, dường như bạn quá lo lắng về việc thực hiện mọi thứ "chính xác" bởi vì là một nhà phát triển cá nhân, bạn không thấy cách người khác vận hành. Nhưng đúng theo ai? Ai là người có phép thuật này đã quyết định rằng những gì bạn đang làm là "chính xác"? Lấy 100 trong số các lập trình viên giỏi nhất thế giới và tôi đảm bảo không có hai người sẽ đồng ý 100% cho mọi chủ đề lập trình.

Cuối cùng, điều quan trọng là nếu khách hàng của bạn hài lòng. Nếu các chương trình bạn tạo đang giải quyết các vấn đề mà họ cần phải thực hiện và thực hiện theo cách tiết kiệm chi phí, thì bạn đang thực hiện chính xác. Nó không phải là chính xác hơn, ví dụ, để sử dụng codeigniter hơn là sử dụng khuôn khổ của riêng bạn. Hệ quả của điều đó là nếu bạn tạo ra một đống tào lao, bạn đang làm điều đó 'sai' bất kể các quy trình hay 'thực hành tốt nhất' được tuân theo.

Rằng bạn đang xem lại mã của mình và thấy các cách để cải thiện nó là một phần bình thường của quá trình phát triển. Đó không phải là một dấu hiệu cho thấy bạn không làm việc 'chính xác'. Đó là một dấu hiệu cho thấy bạn đang tận tâm học tập và cải thiện. Từ tất cả mọi thứ tôi thấy trong bài viết của bạn, bạn không có vấn đề.

Bây giờ đi đá một số * * *


Tôi không đồng ý với điều này. Có những cách lập trình dễ bảo trì và dễ đọc hơn nhiều so với những cách khác, và có những đống sách dành riêng để cải thiện lập trình viên để họ có thể viết mã tốt hơn.
TehShrike

Cảm ơn bạn @grandmasterB. TehShrike, và tham khảo những cuốn sách này?
James Guvna Jeffery

3
" Không có hai người sẽ đồng ý 100% cho mọi chủ đề lập trình " - có thể, nhưng ít nhất 80% sẽ đồng ý về ít nhất 80% chủ đề lập trình. Đó là sự đồng thuận chuyên nghiệp. Không có "quyền" tuyệt đối, nhưng có những thực tiễn tốt nhất và chúng đáng được biết.
Kirk Broadhurst

1
Tất cả đều tốt và tốt, nhưng nếu chương trình của bạn không giải quyết được vấn đề mà nó được cho là, thực tiễn tốt nhất hay không, thì nó đã được thực hiện không chính xác. Có một phương tiện khách quan để biết liệu một chương trình có được thực hiện chính xác hay không - nếu khách hàng trao các tờ giấy xanh hoặc thanh toán khác để đổi lấy công việc của bạn. Bất kỳ biện pháp nào khác chỉ đơn giản là ý kiến.
GrandmasterB

2
Và khi khách hàng của bạn cảm thấy báo giá của bạn về sự thay đổi là quá mức và tìm một chuyên gia khác để xác nhận những cảm xúc đó vì nó được mã hóa kém, bạn đã nghỉ việc.
JeffO
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.