Tự chứng minh tương lai khi học lập trình [đóng]


10

Tôi muốn học lập trình theo cách 'chứng minh tương lai', nếu bạn thích. Trong khi Windows thống trị thị trường HĐH máy tính để bàn (hiện tại), rõ ràng có rất nhiều giá trị trong việc học ngôn ngữ / khung / API của nó, v.v. - điều này có thể thay đổi khi các thiết bị mới xuất hiện hoặc Windows tự bắn vào xem trước thân thiện với Windows 8 không quá hấp dẫn ...).

Tôi có đúng không khi nghĩ rằng có kiến ​​thức vững chắc về C / C ++ để lập trình logic / lập trình cấp thấp và tương tự, kết hợp với một ngôn ngữ cực kỳ di động như Java cho GUI, v.v., sẽ là cơ sở tốt để phát triển phần mềm Điều đó sẽ hữu ích trên hầu hết các hệ thống? - Tôi đang nói về máy tính để bàn, máy tính bảng, điện thoại.


11
Không có điều đó
Công việc

Xây dựng một den và điền nó với sách.
Edward Strange

4
Xây dựng một den và lấp đầy nó với thực phẩm đóng hộp. Lập trình viên tương lai nhất là lập trình viên còn sống sau ngày tận thế.
Tom Anderson

1
Đừng học ngôn ngữ lập trình hoặc mã hóa, mà chủ yếu là học lập trình và mất nhiều năm , gần mười và bạn nên tiếp tục học cả đời
Basile Starynkevitch

Câu trả lời:


31

Nếu bạn muốn trở thành bằng chứng trong tương lai, lời khuyên tốt nhất tôi có thể cung cấp cho bạn là đừng bao bọc bản thân vào một công nghệ.

Vì vậy, đừng học API một cách mù quáng. Tìm hiểu làm thế nào họ được thụ thai. Những triết lý đằng sau hậu trường là gì? Ưu điểm và sai sót của họ là gì? Hãy nghĩ rằng phần mềm nói chung, không phải là một công nghệ cụ thể.

Bạn cũng có thể làm việc về việc thụ thai chương trình tốt, đi đến OOP và AOP là một lựa chọn tốt IMO. Nhưng đừng hiểu cơ chế, hãy thực sự nghiên cứu triết lý đằng sau cơ chế này.

Đừng bỏ qua khoa học máy tính nói chung, như các cấu trúc dữ liệu và thuật toán, bởi vì chúng là kiến ​​thức công nghệ chéo luôn hữu ích.

Cũng đi cho thực hành tốt. Bạn thường có hàng tá cách để làm một cái gì đó, nhưng hầu hết trong số chúng là tào lao: dễ bị lỗi, khó bảo trì, khó hiểu sau này hoặc bởi một lập trình viên khác, v.v. . . Thông thường, mã khó đọc hơn viết. Vì vậy, hãy học cách dành một chút nỗ lực hơn cho việc viết để làm cho việc đọc dễ dàng hơn (vì bạn sẽ đọc mã nhiều hơn bạn viết).

Tìm hiểu các kỹ thuật hiệu quả để gỡ lỗi (sử dụng thông minh nhật ký và trình gỡ lỗi) và kiểm tra (cách viết mã có thể được kiểm tra đơn vị dễ dàng và cách tự động hóa các kiểm tra này).

Sau đó, bạn sẽ cần một nền tảng công nghệ chung. Tôi đang nói về kiến ​​thức rất rộng, như cách bộ xử lý hoạt động (bộ nhớ cache hoặc dự đoán nhánh là khởi đầu tốt), về các hệ thống UNIX, về các giao thức mạng như IP, TCP và Ethernet, v.v. . .

Cuối cùng, học cách học. Nếu bạn biết cách học, thì bạn có thể thích nghi.

Bạn sẽ cần một số kiến ​​thức vững chắc về các công nghệ cụ thể để có thể tìm được việc làm, nhưng những công nghệ đó đã lỗi thời rất nhanh (ví dụ như về COBOL, hoặc lập trình web tại thời điểm chiến tranh IE / Netscape). Vì vậy, đừng dựa vào chúng để làm bằng chứng trong tương lai. Họ sẽ là chìa khóa để được tuyển dụng, nhưng chắc chắn không phải là thứ tạo nên một lập trình viên tuyệt vời và điều gì sẽ khiến kỹ năng của bạn bền bỉ theo thời gian.

EDIT: Nếu bạn chỉ mới bắt đầu, bạn chắc chắn nên hoàn thành một cái gì đó. Cái gì đó thật sự. Một trò chơi như Tetris hoặc con rắn là một khởi đầu tốt và thú vị. Nếu bạn không hoàn thành công việc, bạn sẽ dành nhiều thời gian để học và thực sự không có được kinh nghiệm cần thiết để hiểu đầy đủ những gì bạn học.

Hãy làm một ví dụ với các mẫu thiết kế. Các mẫu thiết kế là tuyệt vời và bạn nên sử dụng chúng một cách dứt khoát. Nhưng nếu quá lạm dụng, chúng sẽ khiến mã của bạn trở nên phức tạp và khó hiểu. Bạn sẽ phải đối mặt với vấn đề mà một mẫu thiết kế giải quyết và mất một thời gian cố gắng giải quyết nó hoặc các tác dụng phụ của nó để hiểu đầy đủ về mẫu thiết kế đó là về cái gì. Các mẫu thiết kế phải được sử dụng như các phép tái cấu trúc nhỏ theo thời gian khi mã phát triển. Và bạn sẽ biết khi nào cần một mẫu thiết kế khi lợi ích của nó lớn hơn độ phức tạp của mã gây ra bởi việc sử dụng nó. Điều này đòi hỏi kinh nghiệm.

Vì vậy, dứt khoát, hoàn thành công việc, họ học hỏi từ những sai lầm của bạn. Tôi không thể nhấn mạnh thêm: NHẬN NHỮNG ĐIỀU !


Tốt ... Tuyệt vời * câu trả lời và một cái gì đó mà tôi hiểu - Tôi hiểu sự cần thiết phải hiểu toàn bộ chủ đề 'lập trình', chứ không phải mỗi chủ đề bạn đề cập. Tôi không quá lo lắng về việc tìm kiếm một công việc trong lĩnh vực này vì tôi có một công việc được trả lương cao khi quản lý một trang web thương mại điện tử mà tôi chắc chắn hài lòng với những điều có thể thấy trước. Sở thích lập trình của tôi, tôi phân loại là một sở thích nghiêm túc, mặc dù tôi muốn sử dụng nó để tăng cường cả công việc của tôi và của người khác trong công việc.
Ẩn danh

Đã thêm một chỉnh sửa để làm cho mọi thứ rõ ràng hơn như là một quan điểm mới bắt đầu.
deadalnix

4

Điều tách biệt các lập trình viên giỏi với những người xấu là khả năng lập trình bằng ngôn ngữ BẤT K .. Như các áp phích khác đã lưu ý, việc biết bất kỳ ngôn ngữ hướng đối tượng quan trọng nào sẽ cung cấp cho bạn các công cụ để tạo ra các chương trình tuyệt vời và được yêu cầu.

Ngoài ra nếu bạn vẫn còn đi học, hãy chắc chắn rằng bạn tham gia một số lớp học viết. Các kỹ sư và lập trình viên giỏi nhất cũng là những người truyền đạt ý tưởng của họ tốt.

Một khi bạn bắt đầu làm việc, điều tốt nhất cần làm để tránh bị lỗi thời là theo kịp các xu hướng hiện tại. Đừng ngại giao việc cho người khác nếu họ không sử dụng công nghệ hiện tại hoặc có quy trình khủng khiếp, v.v. Điều tồi tệ nhất bạn có thể làm cho sự nghiệp của mình là nhận một công việc mà bạn làm việc với công nghệ cũ hoặc quy trình yếu.


Tôi đánh giá cao kiến ​​thức vững chắc về các khái niệm lập trình là điều cần thiết để trở thành 'trong trò chơi này', nhưng có kiến ​​thức về cú pháp ngôn ngữ / thư viện chuẩn thực tế và những gì không chứng minh được là cần thiết để sử dụng tất cả các tính năng của ngôn ngữ (khi thích hợp). Thật không may, tôi vẫn không ở trường, tôi đang làm việc - mặc dù như tôi nghĩ tôi đã nói trong một bình luận trước đó, tôi được trả lương khá cao nên tôi không quá lo lắng về khía cạnh đó. Cảm ơn câu trả lời. =)
Ẩn danh

4

Câu trả lời từ @deadalnix là tốt. Tôi sẽ thêm vào đó ba điều:

  1. thông tin có thể tái sử dụng đến từ giữa, không phải là cực đoan. Minsky trình bày chi tiết điều này trong cuốn sách Xã hội tâm trí của mình, vì vậy tôi sẽ tóm tắt nó như sau: lớp trên cùng quá gần với giải pháp cụ thể để áp dụng cho vấn đề tiếp theo, trong khi lớp dưới quá gần với nền tảng cụ thể cho phần lớn của nó để áp dụng cho các vấn đề tiếp theo. Lớp giữa là nơi tìm thấy thông tin có thể sử dụng lại - các thuật toán, mẫu, phân loại, chiến thuật, chiến lược, kỹ thuật, tổ chức, giao thức, và các cộng sự thường hữu ích để giải quyết các vấn đề tương tự bất kể miền (lớp trên cùng) hay nền tảng (lớp dưới cùng) ). Lưu ý: các lớp này không liên quan gì đến kiến ​​trúc 3 tầng, chúng ta đang nói về ngữ nghĩa vấn đề không gian / không gian giải pháp ở đây.
  2. bạn sẽ không biết cái gì là phổ biến / chung / có thể tái sử dụng cho đến khi bạn đã thấy ít nhất hai trường hợp của nó. Vì vậy, hãy nghiên cứu cách Windows hoạt động bên trong, sau đó nghiên cứu cách linux / unix hoạt động bên trong và so sánh hai cái đó. Những điều phổ biến là tái sử dụng. Những điều khác nhau là quyết định thiết kế, cũng có thể dẫn đến những hiểu biết có thể tái sử dụng.
  3. đối với bất kỳ tình huống hoặc vấn đề cụ thể nào, hãy nghĩ về cách bạn có thể thực hiện giải pháp, sau đó so sánh giải pháp ghế bành của bạn với giải pháp thực tế và cố gắng hiểu các lý do có thể xảy ra đằng sau sự khác biệt.

Bổ sung tuyệt vời!
deadalnix

2

Vì bạn mới bắt đầu, tôi nói chỉ cần học một ngôn ngữ, không quan trọng là ngôn ngữ nào. Khó khăn không nằm ở ngôn ngữ (cú pháp), mà là trong việc hiểu các khái niệm; và các khái niệm lập trình chung này áp dụng cho tất cả các ngôn ngữ lập trình, vì vậy việc học ngôn ngữ thứ hai và thứ ba và thứ tư (...) của bạn sẽ dễ dàng hơn rất nhiều.

Vì vậy, ngay từ đầu, đừng nghĩ quá nhiều về việc trở thành 'bằng chứng trong tương lai'. Tuy nhiên, khi bạn tiến bộ, hãy cố gắng trở nên thành thạo các ngôn ngữ rất khác biệt với nhau. Về cơ bản, (như bạn đã nói), bạn nên sử dụng ngôn ngữ cấp thấp (-ish) như C / C ++, ngôn ngữ lập trình cấp cao hơn như Java và ngôn ngữ kịch bản (Python, Ruby, v.v.). Nếu bạn muốn đi vào những thứ thực sự tiên tiến, bạn cũng phải biết hội.

Nhưng đừng căng thẳng quá nhiều về điều này ngay bây giờ. Học chương trình mất nhiều năm. Hiện tại, chỉ cần chọn một ngôn ngữ như Java hoặc C # hoặc bất cứ thứ gì và đi cho nó. :)


Tôi thích 'chọn một' và tỏ thái độ ... Có lẽ tôi sẽ chấp nhận nó. Bạn có thể chọn một ngôn ngữ cấp thấp (C), một ngôn ngữ cấp cao (Java) và một ngôn ngữ kịch bản (Python) và học cả 3 ngôn ngữ này không?
Ẩn danh

Bạn chỉ mới bắt đầu lập trình? Sau đó, đừng học nhiều ngôn ngữ cùng một lúc, điều đó sẽ khiến bạn bối rối. Những gì bạn cần học lúc đầu là các khái niệm, không phải ngôn ngữ. Bạn chỉ nên chuyển sang ngôn ngữ mới khi bạn được yêu cầu. Ví dụ, gần đây tôi chỉ cảm thấy cần phải đi vào các ngôn ngữ kịch bản, và đó là vì tôi đã quyết định làm cho trò chơi của mình có thể viết được bằng Python.
Paul

Tôi sẽ không nói chỉ mới bắt đầu - Tôi đã biết html / css trong nhiều năm (mặc dù chúng không thực sự đủ điều kiện / loại không liên quan) và đã xây dựng các trang web PHP / MySQL trong một vài tháng. Phát triển web tôi có thể 'nhận được', đó là sự phát triển phần mềm mà tôi đang giải quyết. Tôi sẽ chú ý những gì bạn đang nói.
Ẩn danh

If you want to go into the really advanced stuff you must also know Assembly- Bạn có thể làm điều này trong bất kỳ tầng nào, các thử thách chỉ khác nhau.
Sixty feetersdude

1

Tôi có đúng không khi nghĩ rằng có kiến ​​thức vững chắc về C / C ++ để lập trình logic / lập trình cấp thấp và tương tự, kết hợp với một ngôn ngữ cực kỳ di động như Java cho GUI, v.v., sẽ là cơ sở tốt để phát triển phần mềm Điều đó sẽ hữu ích trên hầu hết các hệ thống?

Tôi đang nói về máy tính để bàn, máy tính bảng, điện thoại.

Không ai trong số đó sẽ giúp.

Một kiến ​​thức vững chắc về cấu trúc dữ liệu và thuật toán - độc lập với bất kỳ ngôn ngữ lập trình cụ thể nào - có giá trị hơn "lập trình cấp thấp và tương tự".

Một "ngôn ngữ cực kỳ di động như Java" cũng dễ mang theo như C và không giúp ích gì. Điều lớn tiếp theo sẽ khác với các ngôn ngữ này đến nỗi Java siêu di động của bạn sẽ là một trách nhiệm, không phải là một tài sản.

Mac OS (máy tính để bàn, máy tính bảng và điện thoại) đều được thực hiện trong Mục tiêu C. Đó có thể là một nơi để bắt đầu.

Windows (máy tính để bàn, bảng và điện thoại) đều được thực hiện trong C #. Đó có thể là một nơi để bắt đầu.


Tôi đã so sánh Java với C là cả hai ngôn ngữ di động - với Java là cấp độ thấp và cấp độ tương ứng, điều này đúng ... Như bạn vừa nói, Mac OS = Obj-C, Windows = C #, đó là nơi tôi không muốn chuyên về một và cắt bỏ các lựa chọn của mình, hoặc cả hai và trở thành 'chủ nhân của không' nếu bạn bắt được sự trôi dạt của tôi. Tôi đánh giá cao những gì bạn đang nói, nhưng kiến ​​thức vững chắc về cấu trúc dữ liệu và thuật toán không có kiến ​​thức về ngôn ngữ lập trình cũng vô dụng như kiến ​​thức về ngôn ngữ lập trình mà không có ngôn ngữ lập trình.
Ẩn danh

@Chris Bridgett: Bạn đang hoàn toàn nhầm lẫn điểm này. Có những nguyên tắc cơ bản phổ quát, và một ngôn ngữ lập trình cũng không. Đầu tiên, tìm hiểu các nguyên tắc cơ bản. Sau đó, một ngôn ngữ (hoặc một hệ điều hành) chỉ đơn giản là phủ sương trên bánh. Nguyên tắc cơ bản là bánh và là bằng chứng trong tương lai.
S.Lott
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.