Học để trở thành một nhà phát triển giỏi: những phần nào bạn có thể bỏ qua? [đóng cửa]


31

Tôi đã đặt cho mình mục tiêu trở thành một nhà phát triển đàng hoàng vào thời điểm này vào năm tới. Bằng cách này, tôi có nghĩa là kinh nghiệm đầy đủ của sự phát triển 'vòng đời', một vài tốt các ứng dụng / trang web / webapps dưới thắt lưng của tôi, và quan trọng nhất là có thể làm việc tại một tốc độ ổn định mà không bị ngồi hàng giờ đồng hồ bởi một số nên-bí quyết này-đã kỹ thuật.

Tôi không bắt đầu từ đầu. Tôi đã viết rất nhiều html / css, SQL, javascript, python và VB.net và nghiên cứu các ngôn ngữ khác như C và Java. Tôi biết về những thứ như OOP, mẫu thiết kế, TDD, độ phức tạp, ngôn ngữ học tính toán, con trỏ / tài liệu tham khảo, lập trình chức năng và các vấn đề học thuật / lý thuyết khác. Chỉ là tôi không thể nói rằng tôi đã thực sự làm những điều này chưa.

Vì vậy, tôi muốn tăng tốc và tôi muốn biết những gì tôi có thể để lại cho đến một ngày sau đó. Ví dụ, nghiên cứu các thuật toán và toán học đằng sau chúng là thú vị và tất cả, nhưng cho đến nay tôi hầu như không cần phải viết bất cứ điều gì ngoại trừ các vòng lặp lồng nhau cơ bản nhất. Điều tra hội để có một bức tranh rõ ràng hơn về các hoạt động cấp thấp sẽ rất tuyệt ... nhưng tôi tưởng tượng hiếm khi xâm phạm vào công việc hàng ngày. Mặt khác, nhìn vào một ngôn ngữ lập trình chức năng có thể giúp tôi viết các chương trình dễ hiểu hơn và ít bị thất bại hơn (hiện tại tôi đang gặp khó khăn lớn nhất là khi sự phức tạp của ứng dụng vượt quá khả năng hiểu của tôi - ví dụ, truyền dữ liệu xung quanh là ổn ... cho đến khi tôi phải bắt đầu thực hiện với AJAX, đây là một bước tiến đau đớn).

Tôi là một lập trình viên với những khả năng cơ bản - tôi nên tập trung vào những kỹ năng nào?

(cũng là kỹ năng Unix của tôi rất yếu và kiến ​​thức về cấu hình Windows ... không chắc tôi nên dành bao nhiêu thời gian cho việc đó)


41
Bạn có thể bỏ qua phần mà bạn ngủ :-)
Jesse McCulloch

17
Một câu hỏi lạ. Bỏ học? Không tính toán. Nhắc nhở tôi về một câu trích dẫn: Tập trung vào cuộc hành trình, không phải đích đến. Niềm vui được tìm thấy không phải trong việc hoàn thành một hoạt động mà là thực hiện nó. Hãy
Maglob

5
Tôi nói bỏ qua, và quay lại sau ('để lại một ngày sau'). Tôi không phủ nhận tất cả những điều này sẽ / có thể quan trọng hơn nữa.
Andrew M

13
Một điều cần nhớ với tư cách là nhà phát triển: những danh sách mà bạn đặt các mục để "bỏ qua và quay lại sau" dường như luôn bị mất ...
Wonko the Sane

8
Bỏ qua việc lười biếng. Học mọi thứ vì lợi ích của việc học.
DexterW

Câu trả lời:


12

Đây là những gợi ý không dựa trên những gì tôi đã làm, nhưng những gì tôi nghĩ tôi nên làm trong nhận thức muộn màng:

  1. Bỏ qua các công nghệ thổi phồng mới bởi vì hầu hết trong số họ sẽ thất bại. Đặt ngoại lệ cho những người bạn có cổ phần hoặc kế hoạch kinh doanh, nhưng luôn có chiến lược từ chối (công nghệ thay thế).
  2. Bỏ qua việc trở thành một chuyên gia về mọi ngôn ngữ lập trình và thư viện. Hãy cố gắng trở thành một chuyên gia về tương đối ít (bảy) ngôn ngữ lập trình và thư viện trả tiền cho những gì bạn muốn làm. Điều đó nói rằng, không bao giờ bỏ lỡ một cơ hội để cố gắng hiểu các sắc thái của một ngôn ngữ lập trình khác. Trở nên thành thạo trong một ngôn ngữ mới và các thư viện tiêu chuẩn của nó mất khoảng hai tháng.
  3. Bỏ qua các công nghệ nền tảng đơn bất cứ khi nào có một cách giải quyết.
  4. Bỏ qua MS Windows. Nó có quá nhiều tật xấu.
  5. Bỏ qua việc trở thành một chuyên gia, nhưng chọn lọc cho phép người khác nghĩ rằng đó là bạn.
  6. Bỏ qua voodoo của công ty ("hướng đến người dùng, kiến ​​trúc thành phần doanh nghiệp") nếu bạn có thể. Nó không dẫn đến đâu.
  7. Bỏ qua C ++ (để người khác giải quyết vấn đề đó) và chờ đợi các ràng buộc Python.

Trên thực tế, bạn có thể bỏ qua bất cứ điều gì nếu bạn tin tưởng vào khả năng học hỏi của mình. Tôi nghĩ rằng những gì bạn muốn biết sẽ được phục vụ tốt hơn với một câu hỏi như:

  • Tôi biết điều này , và tôi đang thiếu điều đó . Tôi nên học gì trong vòng một năm kể từ bây giờ?
  • Tôi thích có những dự án trả lương cao, nhưng điều tôi thực sự thích là như vậy . Tôi nên học gì để có được điều đó trong vòng một năm?

Hãy nhớ rằng các nhà phát triển giỏi biết về mọi thứ, bởi vì điện toán hiếm khi là về điện toán, mà thường xuyên hơn là áp dụng nó vào bất kỳ lĩnh vực nào của con người, có thể là vật lý lý thuyết, bảo tồn hệ sinh thái hoặc hiệu ứng ảnh trong The Matrix .

Cuối cùng, xin vui lòng tìm hiểu về thiết kế, trừu tượng, thuật toán và độ phức tạp. Tôi, những lập trình viên đã dạy tôi, và những lập trình viên mà tôi tôn trọng sẽ cảm ơn bạn và đánh giá cao bạn vì điều đó. Nếu bạn có thời gian để học, tôi khuyên bạn nên đọc phiên bản đầu tiên của Code Complete .


Cảm ơn. Đây có lẽ là câu trả lời yêu thích của tôi cho đến nay, hoặc ít nhất là câu trả lời gần nhất với những gì (tôi nghĩ) tôi đang hỏi. Tôi đã đọc Code Complete thực sự, cuốn sách tuyệt vời, cảm thấy như nó đã giúp tôi tránh được rất nhiều trở ngại trước khi tôi đến với họ.
Andrew M

@Andrew W. Hãy lưu ý rằng một số pint tôi đã thực hiện là "lưỡi trong má" . Anh chị em của trang web này, stackoverflow.com , là một nơi tuyệt vời để tìm hiểu các công cụ mới theo cách linh hoạt, không có cấu trúc. Nó cũng cung cấp một ý tưởng tốt về những gì các nhà phát triển đang thực sự làm việc.
Apalala

Làm thế nào bạn có thể định nghĩa "6. Bỏ qua voodoo của công ty (" hướng đến người dùng, kiến ​​trúc thành phần doanh nghiệp ") nếu bạn có thể. Nó không dẫn đến đâu"? Kiến trúc thành phần doanh nghiệp hướng đến người dùng là gì? N-tier phát triển? Thiết kế mẫu, cái gì khác?
Bob

@Bob Các mốt công ty cơ bản đã có trong nhiều thập kỷ rằng một công nghệ hoặc phương pháp mới sẽ cho phép những người không lập trình viết các chương trình làm việc. CASE, UML-to-code và Khung kiến ​​trúc doanh nghiệp. Nó tái diễn: MDAs là máy tính của họ, tạo sơ đồ quy trình và tạo phần mềm.
Apalala

+1. Tôi thích "bỏ qua voodoo của công ty" và "bỏ qua các công nghệ thổi phồng". Ngay cả những thứ tuyệt vời siêu hấp dẫn (như Python) vẫn được viết bằng C & C ++. Hmmm ... tôi tự hỏi tại sao đó là ...
riwalk

35

Chọn một ứng dụng vật nuôi. Đây có thể là một cái gì đó có thể bắt đầu rất đơn giản nhưng có một số phức tạp khi bạn đào sâu hơn. Nó cũng nên là thứ mà bạn quan tâm bởi vì bạn sẽ dành nhiều thời gian cho nó. Cũng chắc chắn rằng nó LÀM cái gì đó. Đừng cố gắng viết một khung hoặc một dịch vụ web ngay bây giờ. Chỉ là một ứng dụng hướng người dùng thông thường.

Tải xuống git, mercurial hoặc bazaar và tìm hiểu cách tạo một kho lưu trữ với chúng (nó rất đơn giản).

Bây giờ thực hiện dự án thú cưng của bạn bằng cách sử dụng bất kỳ công nghệ nào bạn muốn với khả năng tốt nhất của bạn. Hãy cho mình một thời hạn để bạn có thể chắc chắn rằng nó đã được thực hiện. Sử dụng kho lưu trữ kiểm soát nguồn bạn đã thực hiện để theo dõi các thay đổi. Đừng lo lắng về các chi nhánh và những thứ tương tự, chỉ cần đảm bảo rằng bạn có thể tránh được những sai lầm.

Khi bạn viết xong ứng dụng của mình, hãy gắn nhãn cho nó. Đó là chiếc V1 của bạn. Giúp Michael Feathers hoạt động hiệu quả với Bộ luật kế thừa , Nguyên tắc, mô hình và thực tiễn phát triển phần mềm linh hoạt của Bob Martin và Quy tắc sạch , và lập trình viên thực dụng của Andrew Hunt và David Thomas . Hãy đọc chúng theo bất kỳ thứ tự nào, thậm chí để nhảy xung quanh chúng. Rất nhiều ý tưởng được lặp đi lặp lại nhưng chúng cũng sẽ củng cố sự hiểu biết của bạn bởi vì chúng được trình bày từ những quan điểm khác nhau. (Có lẽ bạn sẽ muốn chọn sách Mẫu thiết kế GoF để tham khảo)

Khi bạn đọc qua các cuốn sách, hãy cố gắng áp dụng những gì bạn đang học để cải thiện dự án của bạn. Hãy chắc chắn rằng bạn sử dụng kiểm soát nguồn của mình như một tạp chí về các thay đổi bạn thực hiện.

Nếu được thực hiện chính xác, bạn sẽ học được một số kỹ năng tốt như: tái cấu trúc, thiết kế hướng thử nghiệm, cải thiện mã hiện có và cách (và khi nào) để áp dụng các mẫu thiết kế (trong số các kỹ năng khác).

Lý tưởng nhất, bạn sẽ có một người cố vấn để giúp bạn đánh giá sự tiến bộ của bạn. Nếu quan tâm, bạn có thể liên hệ với tôi (Firstinitiallastname tại kharaoft dot net), và tôi sẽ giúp bạn với một kế hoạch và cung cấp đánh giá.

Chúc mừng bạn đã chủ động để tiếp tục sự nghiệp của bạn! Nhiều phần thưởng sẽ đến từ nó.


Cảm ơn, Mike. Hiện tại (vài tháng tới) tôi đang hoàn thành dự án phần mềm MSc của mình, nhưng sau đó, có một số điều tôi muốn làm việc trong thời gian rảnh rỗi. Một là một ứng dụng tạo động lực nhóm đơn giản cho các doanh nghiệp mà tôi đã phát triển một phần cho một trong các lớp học của mình. Đó là thứ tôi có thể chọn làm dự án thú cưng của mình, cải thiện giao diện người dùng, thêm một số tính năng mới, đi sâu vào những thứ như đồng thời / nhiều trường hợp, cuối cùng chuyển sang web, v.v. Có lẽ tôi sẽ đưa bạn về lời đề nghị của bạn khi thời gian đến. Và những cuốn sách đó hiện đang nằm trong danh sách đọc của tôi.
Andrew M

1
Tôi cũng sẽ đề xuất "Tái cấu trúc: Cải thiện thiết kế mã hiện tại" của Martin Fowler & Kent Beck.
Oscar Mederos

1
Tôi đã có cái đó thực sự, chưa đọc hết. Tôi thường xuyên đến cửa hàng sách từ thiện địa phương bên cạnh Đại học Glasgow (quê hương của Haskell ...) để chọn 'tác phẩm kinh điển'. Cho đến nay tôi đã tìm thấy Code Complete 2, Refactoring, Transceting CSS, Zen of CSS Design, Javascript The Definitive Guide, K & R C, GOF, cũng như Lập trình trang web ASP.NET, Bộ sưu tập Java, Hệ thống cơ sở dữ liệu (Connelly / Begg), Hướng dẫn dành cho sinh viên về Unix, Lập trình Ruby, Giới thiệu về Func Prog bằng Haskell, UML Demystified, Bắt đầu Java 2. Tôi sẽ làm tròn để đọc chúng cả ngày ... cũng có thể mua chúng với giá rẻ khi tôi có thể.
Andrew M

28

Bạn biết bí mật của một nhà phát triển giỏi?

Bạn không biết tất cả nhưng bạn biết những gì bạn không biết và nơi để tìm thêm thông tin về những gì bạn không biết khi bạn cần.

  • Biết tất cả những gì bạn đề cập chi tiết là không thể - quá nhiều cho một bộ não để xử lý.
  • Ghi nhớ tất cả là không thể - kiến ​​thức không sử dụng bị xóa khỏi bộ nhớ
  • Trong hầu hết các tình huống thực tế, bạn không cần nhiều như vậy

Cố gắng để đạt được điều không thể sẽ chỉ dẫn đến sự lo lắng, mất ngủ và mất tự tin.


Tôi không có ý định 'biết tất cả' nhưng hiện tại tôi cảm thấy muốn một nhóm phần mềm tuyển dụng tôi sẽ là một canh bạc. Có lẽ tôi sẽ có thể chọn mọi thứ khi tôi đi cùng và sớm trở thành một thành viên làm việc nhóm hiệu quả, nhưng có lẽ số lượng học tập sẽ là quá nhiều đối với tôi. Tôi không thích yêu cầu mọi người đánh bạc. Phải có một vùng thoải mái mà các nhà phát triển chuyên nghiệp tiếp cận ở đâu, ok, họ vẫn cần tìm kiếm công cụ và học các thủ thuật mới, nhưng nói chung họ đã hoàn thành công việc. Với một kỹ năng cốt lõi (mà họ thậm chí có thể không nhận thức được nữa). Đó là nơi tôi đang cố gắng.
Andrew M

1
@Andrew, các lập trình viên cơ sở dự kiến ​​sẽ yêu cầu hướng dẫn. Học tập đòi hỏi kinh nghiệm thực tiễn ...

Vâng, bạn có thể đúng, nhưng quảng cáo công việc không bao giờ nói điều đó. Hy vọng tôi có thể phá vỡ chúng và mạng / nói chuyện trực tiếp với các nhà quản lý nhóm. Nhưng trên cơ hội ra rằng tôi không thể có được một công việc với những kỹ năng tôi có ngay bây giờ, tôi chỉ muốn được chết tiệt chắc chắn tôi sẽ không có cùng một vấn đề một năm kể từ bây giờ.
Andrew M

10

Tôi nghĩ rằng câu trả lời sẽ khác nhau đối với mỗi nhà phát triển, tùy thuộc vào những gì họ muốn chuyên môn. Tôi khuyên bạn nên sử dụng thuật toán sau để xác định câu trả lời hay cho chính mình:

  1. Chọn một dự án đơn giản sử dụng một kỹ năng mà bạn quan tâm để học.

  2. Thực hiện nó, tập trung vào kỹ năng đó.

  3. Lưu ý những gì bạn thích về cách dự án đó bật ra và những gì bạn không thích.

  4. Đối với những điều bạn thích về cách dự án bật ra, hãy tự hỏi: "Đây có phải là thứ tôi nghĩ tôi có thể chuyên về cái mà tôi sẽ thích, hay nó có liên quan đến thứ tôi có thể chuyên và sẽ thích?"
    a. Nếu vậy, hãy nghĩ về các kỹ năng khác có liên quan đến chuyên môn này và viết chúng xuống.
    b. Nếu không, hãy vỗ nhẹ vào lưng, lưu ý nó như một thứ bạn giỏi và tiếp tục.

  5. Đối với những điều bạn không thích về cách thức thực hiện dự án, hãy tự hỏi: "Đây có phải là điều tôi nên biết cách làm (hoặc muốn biết cách thực hiện) hay đây là khía cạnh phát triển mà tôi có thể và muốn để lại cho người khác nói chung? "
    a. Nếu bạn nghĩ rằng bạn muốn hoặc nên biết cách thực hiện, hãy thêm nó vào danh sách bắt đầu ở bước 4a. b. Nếu bạn nghĩ rằng bạn có thể để lại khía cạnh đó cho người khác, hãy thở dài một cách u sầu vượt quá giới hạn của bạn như một con người, lưu ý nó như một điểm yếu và tiếp tục.

  6. Chọn một kỹ năng từ danh sách những điều bạn có thể chuyên về và những điều bạn nên biết từ 4a và 5a. Chọn bất cứ điều gì bạn nghĩ là quan trọng nhất để phát triển để đưa chương trình của bạn đến gần hơn với những gì bạn muốn.

  7. Brainstorm dự án đơn giản bạn có thể làm điều đó sử dụng kỹ năng đó. Chọn một, có thể là một dự án cho phép bạn thực hành một kỹ năng khác cũng nằm trong danh sách để bạn có thể giết 2 con chim bằng một viên đá (mặc dù n / 2 có độ phức tạp tương tự như n, nhưng nó vẫn sẽ nhanh hơn theo cách này).

  8. Quay trở lại bước 2, sử dụng dự án này.

Lặp lại vòng lặp này cho đến hết đời hoặc cho đến khi bạn không còn muốn trở thành một lập trình viên giỏi nữa (này, nếu bạn muốn bỏ mã hóa để nuôi những đứa trẻ mồ côi đói, tôi sẽ không ngăn bạn!).

Tôi đã chuyên về thử nghiệm và các ứng dụng web n-tier. Dự án tiếp theo của tôi sẽ thực hành TDD và có thể là ASP .NET MVC 2. TDD là để tăng cường sức mạnh của tôi trong thử nghiệm (Tôi là một SDET, vì vậy TDD sẽ chỉ cho tôi cái nhìn sâu sắc về thử nghiệm đơn vị, mà tôi thường không làm gì ngoại trừ trên các công cụ kiểm tra của tôi) và để giúp khắc phục điểm yếu trong thiết kế tốt (tôi hy vọng), và MVC là để giúp khắc phục điểm yếu của tôi trong thiết kế mặt trước. Danh sách của tôi bao gồm những thứ như kiểm tra hiệu suất, bảo mật web và làm việc với một nhà thiết kế web để tạo ra một trang web tốt (và đẹp mắt).

Một lời khuyên khác mà tôi nhận được từ rất sớm và đã thấy rất hữu ích: Các chuyên ngành có thể rộng hoặc sâu. Nói cách khác, học hỏi một chút về mọi thứ là một loại chuyên môn. Hãy ghi nhớ điều đó khi cố gắng tìm ra những gì bạn muốn chuyên môn của mình trở thành.

Xin lỗi nếu bạn muốn một cái gì đó cắt và sấy khô. Tôi không nghĩ câu hỏi có câu trả lời như vậy.


6

Tôi đã lập trình từ rất lâu rồi (từ khi 7 tuổi - tôi đã ngoài 30 tuổi rồi).

Nếu tôi ở vị trí của bạn, một điều tôi rất muốn đề xuất - nhưng điều mà tôi không thấy trong hầu hết các câu trả lời khác là tìm ít nhất một lập trình viên khác để làm việc TOGETHER với một dự án đã xác định.

Khi bạn đọc về lập trình Agile - SCRUM, v.v. và làm việc theo cách nhanh nhẹn và kiểm tra. Làm việc cùng nhau - nhưng đừng để một trong những người viết mã của bạn - thực sự làm việc với nó như một cặp nhà phát triển.

Và trong khi viết phiên bản của riêng bạn, mọi thứ đều có thể cung cấp thông tin - những nhà phát triển tốt nhất mà tôi biết là những bậc thầy trong việc tránh viết mã NGOẠI TRỪ cho những thứ họ hoàn toàn phải tự làm - tức là cốt lõi của những gì độc đáo về dự án của họ.

Thời gian còn lại họ sẽ sử dụng lại mã một cách rộng rãi - gọi API, sử dụng các dự án nguồn mở (nếu thích hợp) và trong thời gian ngắn tránh phát minh lại bánh xe (hoặc các lớp truy cập dữ liệu, v.v.) chỉ vì mục đích đó.

Và sau đó, trong quá trình thực hiện việc này - đặc biệt là với các dự án nguồn mở, họ cũng sẽ đóng góp lại cho các dự án đó - họ sẽ đọc mã, dọn dẹp, sửa lỗi, đóng góp tiện ích, v.v.

Phát triển thế giới thực thường là làm việc như một phần của một nhóm - vì vậy tôi rất khuyến khích bạn làm điều đó. Nếu bạn không biết các lập trình viên khác muốn làm việc với một dự án cụ thể với bạn, tôi khuyên bạn nên xem qua 1000 dự án nguồn mở và chọn một hoặc nhiều hơn để tham gia tích cực - có khả năng bạn có thể tìm thấy một hoặc nhiều dự án mà gãi một "ngứa" cá nhân - và rất có thể bạn sẽ tìm thấy một dự án mà bạn có thể đóng góp và tìm các nhà phát triển khác để làm việc cùng.

Và cá nhân tôi sẽ giảm giá lời khuyên rằng thái độ "bỏ qua những gì tôi có thể" là một điều tồi tệ - khi tôi thuê các nhà phát triển, tôi muốn các nhà phát triển không cố gắng tự làm mọi thứ. Tôi rất thích các nhà phát triển có bản năng đầu tiên không tự viết nhưng các nhà phát triển có bản năng đầu tiên là xem họ có thể đạt được nhu cầu và yêu cầu kinh doanh như thế nào mà không cần viết mã (và sau đó thông qua viết mã tối thiểu cần thiết).

Tất cả trong khi cũng kiểm tra và giữ các yêu cầu kinh doanh mạnh mẽ - và có lúc kiểm tra sẽ cho thấy rằng trên thực tế, bạn phải viết lại một số mã hoặc tự viết nó (đôi khi bạn có thể đóng góp lại để cải thiện dự án).


+1 Ý tưởng hay - kinh nghiệm làm việc với người khác là rất quan trọng.
Michael K

+1 Bạn phải điều hành một nhóm tốt, rất hiếm, vì những lý do không thể tưởng tượng được, để nghe một nhà phát triển nói - hãy xem mã có cần thiết trước không. Ngoài ra để lập trình nhóm, cần thiết.
Orble

Cảm ơn bạn Shannon. Tôi hơi ngạc nhiên khi nhiều người không đồng ý với ý tưởng bỏ qua những thứ không cần thiết. Thực tế tôi nghĩ ngay bây giờ tôi là một người theo chủ nghĩa thuần túy / cầu toàn, luôn cố gắng học mọi thứ 'cách tốt nhất' - đôi khi tôi ghen tị với những người chỉ bị mắc kẹt và không quan tâm nếu họ xóa sổ hàng tá thứ tốt nhất thực hành, hoặc chỉ hiểu một phần những gì làm cho hệ thống của họ hoạt động. Và tất nhiên tôi đều ủng hộ việc tận dụng các thư viện nguồn mở bất cứ khi nào tôi có thể.
Andrew M

5

Nó đơn giản chỉ là vấn đề đọc lên và tìm hiểu công cụ khi bạn cần.

Nếu bạn bị mắc kẹt ở đâu đó hoặc có cảm giác rằng "giải pháp của tôi đang thiếu thứ gì đó" - đó là khi bạn nên dành thời gian để tìm hiểu thêm về nó!


Tôi luôn có được cảm giác đó. Câu trả lời tốt.
JeffO

5

Cố gắng tìm bit để bỏ qua không phải là thái độ tốt nhất để có.

Điều đó đang được nói, bạn có thể nhắm đến việc tập trung vào một số lĩnh vực nhất định một khi bạn có ý tưởng về những phần mà bạn muốn làm.

Có thể dính vào phát triển web, gây hại cho các nhà phát triển windows chẳng hạn.

Tôi thích trở thành người nắm giữ tất cả các giao dịch, vì nó làm cho tôi hữu ích hơn.


3

Trong một năm, bạn sẽ không hoàn thành "một vài ứng dụng / trang web / ứng dụng web tốt", đặc biệt là trong một đường cong học tập dốc. Điều duy nhất bạn sẽ học là kiệt sức.

Thay vào đó, hãy tập trung vào một thứ mà bạn quan tâm và sử dụng nó làm công cụ học tập của bạn. Đừng lo lắng về chất lượng sản xuất (sẽ không như vậy), nhưng hãy sử dụng nó như một hộp cát mà bạn có thể tiếp tục quay lại.

Ví dụ, tôi quan tâm đến bóng chày tưởng tượng. Trong nhiều năm qua, tôi đã phát triển nhiều thứ liên quan đến điều đó, từ một thứ robot thu thập thông tin trên màn hình, đến một trang web chỉ có HTML, đến một ứng dụng web đầy đủ với cơ sở dữ liệu SQL Server có thể mở rộng, cho đến ... Dự án thú cưng tiếp theo của tôi có thể là một ứng dụng Silverlight thời gian thực để cho phép các anh chàng ngồi quanh một chiếc bàn ảo để thực hiện bản nháp.

Không có những thứ này là hữu ích ngoài thế giới của tôi. Tuy nhiên, mỗi người trong số họ đã giúp tôi trở thành một lập trình viên giỏi hơn và học hỏi các công nghệ ngoài vùng thoải mái của tôi.


3

Bỏ qua một chút về việc lo lắng nên bắt đầu lập trình ngôn ngữ nào.
Chỉ cần chọn một ngôn ngữ và đi.
Dành thời gian của bạn để tìm hiểu về API.

Đây là lý do tại sao:

Cái nào tốt hơn, XUL, SWT của Eclipse hay wxWindows? Tôi không biết. Chúng đều là những thế giới rộng lớn đến mức tôi không thể thực sự đánh giá chúng và kể. Nó không đủ để đọc các hướng dẫn. Bạn phải đổ mồ hôi và chảy máu với thứ đó trong một hoặc hai năm trước khi bạn thực sự biết nó đủ tốt hoặc nhận ra rằng dù bạn có cố gắng thế nào, bạn cũng không thể làm cho UI của mình có vị như thực phẩm.

Joel Spolsky, "Lord Palmerston về lập trình" http://www.joelonsoftware.com/articles/LordPalmerston.html


3

Tôi sẽ không lo lắng quá nhiều về hội chứng "nên biết điều này". Trong dòng công việc này, bạn luôn học được điều gì đó mới. Một hoặc hai lần một năm, ông chủ của tôi gửi cho tôi một liên kết đến một tài liệu 200-300 trang cho một giao thức truyền thông hoặc mạch tích hợp hoặc một cái gì đó và ông giao cho tôi trở thành chuyên gia thường trú về nội dung của nó. Không ai mong đợi bạn sẽ đạt đến điểm mà bạn đang "hoàn thành" việc học.

Theo như quá trình phát triển, chỉ cần thực hiện nó như nó đến. Bạn sẽ không thực sự biết những gì hữu ích nhất cho đến khi bạn làm sai một hoặc hai lần. Đánh giá hiệu suất của bạn và cải thiện trong thời gian tới.

Ví dụ, năm ngoái tôi đã gặp rất nhiều vấn đề với sự bất ổn trong xây dựng. Tôi đã sợ cập nhật từ kiểm soát nguồn bởi vì dường như mọi lần tôi làm, cuối cùng tôi sẽ dành nửa ngày để mọi thứ được biên dịch lại. Tuy nhiên, nếu tôi chờ đợi quá lâu giữa các bản cập nhật, việc hợp nhất ở cuối sẽ rất tệ. Thỉnh thoảng tôi cũng gặp phải các lỗi khẩn cấp khi tôi không thể trì hoãn cập nhật và điều này gây khó khăn cho việc theo dõi các thay đổi một phần mà tôi đã thực hiện cho các tính năng mới.

Vâng, công ty của tôi đang làm việc để sửa nó trên quy mô chung, nhưng tôi cần một cái gì đó tôi có thể sử dụng cho bản thân mình trong lúc này. Tôi đã thực hiện một số nghiên cứu về tính ổn định của bản dựng, phát hiện kiểm soát phiên bản phân tán, thử nghiệm với một số mô hình phân nhánh và hiện có một hệ thống kết hợp rất khả thi sử dụng một số chi nhánh tại địa phương và kiểm soát nguồn tập trung của công ty tôi khi tôi cần chia sẻ.

Quan điểm của tôi là nếu bạn đã hỏi tôi hai năm trước tôi nên học gì tiếp theo về các công cụ và quy trình phần mềm, tôi không thể nói với bạn. Nếu bạn không có môi trường làm việc tương tự như tôi, việc kiểm soát nguồn lai chỉ phức tạp hơn vì không có lợi ích cận biên, nhưng nó đã giúp năng suất và sự tỉnh táo của tôi rất nhiều.

Tiếp theo đối với tôi là làm việc với các kỹ năng ước tính của mình, nhưng tôi không biết điều gì sẽ xảy ra sau đó và tôi chắc chắn không biết một người lạ nào đó trên Internet sẽ thấy hữu ích nhất một năm kể từ bây giờ. Chỉ có bạn mới có thể trả lời điều đó.


2

Tôi muốn chia sẻ hai điểm ở đây:

  1. Suy nghĩ về thuật toán sẽ luôn luôn giúp đỡ. Khi tôi bắt đầu, tôi luôn sử dụng để suy nghĩ về các kịch bản thực tế và các thuật toán hiện tại đằng sau chúng và luôn cố gắng tối ưu hóa chúng.
  2. Không bao giờ bỏ học và hiểu những điều mới / Công nghệ, trong máy tính không có gì giống như vậy GURU, bạn luôn cần tiếp tục học và bạn sẽ phải chấp nhận sự thật này trước và tiếp tục học.

2

Không quan trọng bạn làm gì, miễn là bạn gắn bó với nó và học cách làm tốt .

Tất cả những ý tưởng bạn đã đăng là những điều tốt để biết và sẽ giúp bạn. Cái nào làm bạn quan tâm nhất? Bạn đã đề cập rằng các kỹ năng Unix của bạn là yếu. Bạn đã xem xét đưa Linux vào máy tính của bạn chưa? Biết C đã có ích, vì bạn có thể bị ướt chân khi lập trình các hệ thống Unix mà không phải chịu thêm căng thẳng khi học một ngôn ngữ mới. Đó cũng có thể là một cơ hội để tìm hiểu về trình điều khiển thiết bị, nếu điều đó làm bạn quan tâm.

Tôi rất muốn giới thiệu lắp ráp học tập và các nguyên tắc chức năng tại một số điểm trong giáo dục phát triển của bạn. Cả hai đều tỏ ra rất hữu ích với tôi trong vai trò là một lập trình viên Java. Tôi đã học Lisp và Prolog. Cá nhân tôi thích Lisp, nhưng đó là vấn đề quan điểm. Hội dạy bạn suy nghĩ về cách máy tính nhìn thấy chương trình của bạn và tôi nghĩ rằng điều đó quan trọng đối với mọi lập trình viên để học. lập trình chức năng dạy cho bạn suy nghĩ xác định hơn, trong trường hợp của tôi đã giúp tôi viết mã dễ kiểm tra hơn và đó là luồng an toàn.

Vì vậy, chọn một cái gì đó mà bạn thích và dành một vài tháng với nó. Bạn sẽ là người tốt hơn cho nó, và nó có thể chứng minh một bước đệm cho dự án tiếp theo trong việc tự học của bạn. Ồ vâng, và bất cứ điều gì bạn làm, không ngừng học hỏi. Lần thứ hai bạn làm, bạn bắt đầu trì trệ.


Thật ra tôi có một máy tính cũ chỉ với mục đích dùng thử Unix / Linux. Hóa ra Ubuntu đã có trên nó, nhưng tôi đã có một số ... 'vui' ... chỉnh sửa tệp xorg.conf hoặc một cái gì đó để làm cho card đồ họa hoạt động. Tôi tự nói với bản thân mình, chỉ làm những việc như thế sẽ mở rộng kiến ​​thức của bạn. Nhưng nó cũng tốn thời gian và điều tôi thực sự muốn là một ứng cử viên khả thi cho việc phát triển phần mềm / web nói chung vào năm tới. Tôi không cố gắng để có một công việc tại Google, chỉ để trở thành một 'đặt cược an toàn' cho các nhà tuyển dụng. Và tôi không còn 17 nữa, tôi 25 ... Tôi thực sự muốn ưu tiên và đưa sự nghiệp của mình đi càng sớm càng tốt.
Andrew M

Và cảm ơn lời khuyên của bạn. Bạn hỏi điều gì làm tôi quan tâm nhất - tốt, có lẽ là ứng dụng web và thiết kế web. Đánh giá bằng khả năng của chính tôi, sở trường của tôi có lẽ đang làm một cái gì đó mà tính thẩm mỹ là quan trọng và các khía cạnh kỹ thuật không quá khó . Các nhà thiết kế web sử dụng các công cụ WYSIWYG, lập trình của tôi có thể mang lại cho tôi lợi thế cạnh tranh so với họ, trong khi các lập trình viên chuyên gia đôi khi thiếu cảm giác về phong cách thiết kế / phong cách mà tôi không quá tệ.
Andrew M

0

Ngừng cố gắng học để trở thành một nhà phát triển tốt trong một năm. Học để trở thành một nhà phát triển tốt trong 10 năm.

Từ bài viết được liên kết:

Chìa khóa là thực hành có chủ ý: không chỉ thực hiện lặp đi lặp lại mà còn thử thách bản thân với một nhiệm vụ vượt quá khả năng hiện tại của bạn, thử nó, phân tích hiệu suất của bạn trong và sau khi thực hiện, và sửa chữa bất kỳ sai lầm nào. Sau đó lặp lại. Và lặp lại lần nữa. Dường như không có lối tắt thực sự: ngay cả Mozart, một thần đồng âm nhạc năm 4 tuổi, phải mất thêm 13 năm trước khi anh bắt đầu sản xuất âm nhạc đẳng cấp thế giới.

Trong một năm bạn vẫn sẽ là một canh bạc. Không có gì bạn có thể làm về điều đó. Các công ty tốt nhìn vào đàn em như một khoản đầu tư. Những gì họ tìm kiếm không phải là kỹ năng hiện tại tốt, mà là kỹ năng tiềm năng, nắm bắt tốt những điều cơ bản và nhiệt tình. Bạn cần có được những phẩm chất này trong một cuộc phỏng vấn để có được một công việc cấp đầu vào.

Bạn làm bao nhiêu chương trình trong thời gian của bạn? Đó có lẽ sẽ là yếu tố quan trọng để thuyết phục một nhà tuyển dụng tiềm năng rằng bạn sẽ cải thiện nhanh chóng. Những dự án bạn đã hoàn thành ? Dự án hoàn thành cho thấy sự cống hiến.

Tôi chỉ được tuyển dụng ở 2 công ty khác nhau, nhưng mỗi công ty đều có công nghệ nội bộ riêng mà tôi cần học trước khi tôi có thể làm việc hiệu quả. Cú va chạm ban đầu đó sẽ không giảm nhiều với bao nhiêu kinh nghiệm bạn có. Nhà tuyển dụng tốt mong đợi một thời gian học tập ban đầu.

Đừng lo lắng và đi chương trình. : D


1
Norvig đã nói về 'sự xuất sắc', mặc dù, là một lập trình viên ưu tú. Tôi chỉ nói về năng lực, và không dành thời gian (năm nay) cho những điều mà nhà tuyển dụng không quan tâm nhiều. Cảm ơn lời khuyên của bạn mặc dù, tôi sẽ cố gắng hoàn thành một số dự án hơn bất cứ điều gì tôi làm. Nói về điều đó ... tôi có một số trình xử lý GAE để viết.
Andrew M

@Andrew M, 'Nguy hiểm lớn hơn đối với hầu hết chúng ta không nằm ở việc đặt mục tiêu của chúng ta quá cao và thiếu hụt; nhưng trong việc thiết lập mục tiêu của chúng tôi quá thấp, và đạt được dấu ấn của chúng tôi. 'Michelangelo. Mục đích để trở thành một lập trình viên ưu tú, không phải là một người ổn.
Dominique McDonnell

0

Tôi chỉ muốn cung cấp cho bạn các bước đọc cảm hứng và những khoảnh khắc xoay chuyển nhất của tôi cho đến nay.

Đã có một vài khoảnh khắc "WOW" trong sự nghiệp phần mềm của tôi. Họ đã đi như sau:

Các mẫu thiết kế đầu tiên - Điều này thực sự đã mở ra thế giới của OOP / OOD đối với tôi, một mặt hàng chủ lực tuyệt đối.

Robert C. Martin - Clean Code - Tôi đã không ngủ nhiều ngày với sự phấn khích từ điều này! Đơn giản như vậy, cậu bé đã quên mất ý nghĩa của việc có mã sạch và điều này khiến tôi quay lại đúng hướng.

Robert C. Martin - Các mô hình và thực tiễn nhanh nhẹn - Bây giờ tôi sống sự nghiệp mã hóa của mình dựa trên các nguyên tắc này. Từ RẮN đi xuyên qua tâm trí tôi cho từng đoạn mã tôi viết. Điều này kết hợp với Clean Code, tôi đã bị ảnh hưởng rất nhiều bởi họ, tôi đã thuyết phục được chủ nhân của mình vào thời điểm đó để cho tôi dạy nó cho toàn bộ công ty gồm khoảng 15 nhà phát triển. Tôi thậm chí không phải là một đàn anh, giỏi thuyết trình, nhưng sự nhiệt tình của tôi đã khiến điều đó xảy ra.

Khoảnh khắc "WOW" cuối cùng của tôi, là khám phá về TDD. Tôi đã chia sẻ nhận thức của mình về nó với 2 người bạn thân khác cũng có hiệu ứng "WOW" tương tự. Tất cả chúng ta đều bị cuốn hút và bây giờ thực hành điều này nhiều nhất có thể và luôn thảo luận về tầm quan trọng của kiểm thử trong Vòng đời phát triển phần mềm - tốt hơn là tự xác minh mã so với một nhóm người chậm hơn để thực hiện kiểm tra cho bạn;).

Một điểm cuối cùng với tôi mà tôi cảm thấy rất gần với trái tim mình, đó là nếu bạn muốn có một sự hiểu biết cơ bản thực sự về công nghệ, chẳng hạn như trình phân tích cú pháp kịch bản, thư viện REST, khung kiểm tra, v.v. Chỉ để cho vui thôi! Bạn sẽ không chỉ thích nó, mà tôi còn thấy rằng việc cố gắng viết những điều tôi chưa hiểu đầy đủ, mang lại cho tôi sự tôn trọng hơn nhiều và hiểu sâu sắc hơn nhiều về nó, và buộc tôi phải hiểu nó một cách thấu đáo.

Xin lỗi, tôi mới nhận ra mình có thể lạc đề đến mức nào từ câu hỏi. Những gì tôi đề cập ở trên đã là cốt lõi tuyệt đối của tôi. Không có tài liệu nào ở trên rời bỏ tôi, và cho tôi suy nghĩ trừu tượng tuyệt vời đến nỗi việc học thực sự trở nên rộng hơn và dễ dàng hơn. Vì vậy, để trả lời câu hỏi của bạn, hãy cố gắng không bỏ qua các nguyên tắc cốt lõi của viết mã và thiết kế phần mềm. Các công cụ cụ thể khác để giải quyết các vấn đề cụ thể, không quá quan trọng.


0

Học hỏi và tích lũy kiến ​​thức cũng giống như xây dựng một tòa nhà, mỗi viên gạch nằm trên một cái khác, họ dựa vào nền tảng của họ.

Nếu bạn bắt đầu bỏ qua mọi thứ, vội vã đi qua, bạn sẽ kết thúc với những sự thật ọp ẹp, được hỗ trợ trên không. Bạn không dám sử dụng chúng vì sợ chúng sẽ rơi qua, và chúng sẽ. Sự thật có thể sai, nếu họ không hợp tác với lý trí, vì bạn cần biết giới hạn của họ.

Tôi đặc biệt lo ngại rằng bạn muốn bỏ qua các nền tảng, toán học, thuật toán và họ hàng của họ. Nếu không nắm vững ở đây, bạn sẽ không bao giờ có thể làm "bất cứ điều gì ngoại trừ các vòng lặp lồng nhau cơ bản nhất" .

Đừng vội vàng, công việc sẽ ở đó mãi mãi, thời gian cho việc học tập không bị gián đoạn là không. Tìm hiểu tất cả những gì bạn có thể, theo thứ tự bạn thấy bạn cần, không bao giờ để lại một khoảng trống không được cắm.


0

Giống như Jeff O gợi ý, nếu bạn muốn trở thành một lập trình viên giỏi, bạn sẽ không bao giờ bỏ học.

Bạn phải nhận ra rằng có rất nhiều thứ bạn có thể học có liên quan đến lập trình mà nếu bạn muốn biết tất cả và giỏi về nó, bạn sẽ ở đó hàng triệu năm. Vì vậy, chỉ tập trung vào những gì sẽ làm cho cuộc sống của bạn tốt. Cho dù đó là sự hưởng thụ thuần túy, tiền bạc, nỗ lực khoa học hay bất kỳ lý do hỗn hợp nào, đó là để bạn lựa chọn và bạn nên đầu tư thời gian và ngủ vào đâu.

Hãy tự hỏi chính xác một nhà phát triển tử tế là gì và làm điều đó: thực hành nghệ thuật của bạn trên các dự án thực tế sẽ khiến bạn quên đi thời gian.

Đối với tôi, tôi là một nhà phát triển tốt bao gồm hiểu cách nhận và viết các yêu cầu tốt, cách quản lý dự án, cách kiểm tra, cách trình bày kết quả, cách đánh giá ai có thể giúp tôi và ai không (tuyển dụng), làm thế nào để hợp tác với người khác, làm thế nào để làm hài lòng sếp và khách hàng.

Ở cấp độ kỹ thuật, trở thành một nhà phát triển giỏi đối với tôi bao gồm khả năng thiết kế, đánh giá, mã, gỡ lỗi, kiểm tra, viết hướng dẫn sử dụng hữu ích, nhận xét mã cho các nhà phát triển đồng nghiệp theo cách có ý nghĩa, quản lý phiên bản, mô phỏng và luôn tìm thấy giải pháp để cải thiện năng suất hàng ngày, để tự động hóa các tác vụ (cho dù đó là thử nghiệm, gỡ lỗi, phân tích dữ liệu cho dự báo tải hay bất cứ điều gì). Nó có nghĩa là có thể làm mã nhanh & bẩn khi cần hoặc được bảo hành, nhưng cũng có thể làm sạch, được suy nghĩ kỹ thông qua mã.

Tất cả những gì có được không phải thông qua việc học vì lợi ích của nó, mà học vì mục đích, để giải quyết nhu cầu mà bạn có ở đó và sau đó. Học vì lợi ích của nó là tốt để cung cấp cho bạn một cơ sở vững chắc, nhưng học cho một mục đích là tốt để biến nó thành sự thật.

Một nhà phát triển giỏi cuối cùng là người có thể nhận những gì cần thiết cho nhiệm vụ trong tay.


0

Có vẻ như bạn ở khắp mọi nơi. Tôi nghĩ mọi người học được nhiều nhất khi họ tập trung vào một lĩnh vực cụ thể và thực sự đào sâu bởi vì khi bạn làm điều đó, bạn sẽ luôn gặp phải một số vấn đề nhất định sẽ yêu cầu học một số công cụ khác. Bằng cách này, bạn có thể phát triển bộ kỹ năng của mình một cách hữu cơ và theo cách liên kết chặt chẽ với nhau để bạn không bị mất kiến ​​thức vì mỗi ý tưởng hoặc công cụ mới được tích hợp vào hộp công cụ tinh thần của bạn sẽ cho phép bạn học những thứ khác dễ dàng hơn nhiều.


-1

Chọn một dự án nguồn mở tốt mà bạn quan tâm và bắt đầu tìm hiểu mã của nó và đóng góp sửa lỗi và các tính năng mới. Đó là điều mà mọi lập trình viên nên làm.

Ngoài ra, bắt đầu một dự án ngay bây giờ, cách duy nhất để học là cố gắng tìm giải pháp cho một vấn đề thực sự. Nếu bạn không xây dựng bất cứ điều gì thì bạn chưa có vấn đề gì cần giải quyết.

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.