Có phải học C # như một ngôn ngữ đầu tiên là một sai lầm? [đóng cửa]


26

Tôi biết có những câu hỏi tương tự ở đây, mà tôi đã đọc, nhưng gần đây tôi đã đọc bài đăng này của Joel Spolsky:

Làm thế nào tôi có thể dạy một người thông minh, không có kinh nghiệm lập trình, làm thế nào để lập trình?

Và nó khiến tôi suy nghĩ về cách học của mình và liệu nó có thực sự có hại trong thời gian dài hay không.

Tôi đã học được nhiều ngôn ngữ khác nhau nhưng C # là ngôn ngữ nghiêm túc đầu tiên của tôi, tôi đã đọc "Head First C #" và tạo ra một vài dự án. Nhưng sau khi đọc bài viết ở trên, tôi thấy có một chút không hài lòng rằng tôi có thể sẽ hiểu sai về nó, rõ ràng tôi tôn trọng ý kiến ​​của Joel, thứ đã ném cho tôi một chút.

Tôi đã bắt đầu đọc "Mã" theo khuyến nghị trong danh sách đọc và tôi thấy nó khá khó, mặc dù rất thú vị. Tôi cảm thấy như nó đã tỏa sáng khỏi "hack noobish about" của tôi trong Visual Studio.

Vì vậy, bây giờ tôi không chắc chắn nên đi con đường nào? Tôi có nên lùi lại một bước và làm theo lời khuyên của Joel và bắt đầu đọc không?

Tôi đoán mục đích chính của tôi là trở thành một lập trình viên giỏi, giống như mọi người khác, nhưng tôi không muốn thực hành xấu bằng cách học một ngôn ngữ .NET khi ai đó mà tôi tôn trọng nghĩ rằng nó có hại.

Suy nghĩ?


4
Học CS một cách khó khăn có thể được thực hiện, nhưng chỉ khi bạn có một giáo viên giỏi.
Công việc

5
C # không phải là ngôn ngữ đầu tiên của tôi VB.net và tôi có thể nói với bạn đó không phải là vấn đề bạn bắt đầu như thế nào. Tôi nghĩ C # sẽ là một ngôn ngữ khởi đầu tuyệt vời, chỉ cần nhớ luôn tự hỏi tại sao mọi thứ được thực hiện theo cách của họ.
Daniel Little

23
Không. Bất kỳ ngôn ngữ nào là ngôn ngữ đầu tiên đều tốt để học lý thuyết về khoa học máy tính. Cấp, để làm cho sự nghiệp của nó, một số ngôn ngữ tốt hơn những ngôn ngữ khác, nhưng với mục đích học tập, bất cứ điều gì là tốt. Một số lập trình viên giỏi nhất mà tôi biết bắt đầu với BASIC trên C64, Apple II hoặc TI-99 / 4A. Nó không làm hỏng bộ não của họ, nhưng thúc giục họ sang ngôn ngữ tiếp theo và tiếp theo.
Jesse C. Choper

5
Ngoài ra, nó phụ thuộc vào những gì bạn dự định làm với kiến ​​thức đó. C # giải quyết các vấn đề kinh doanh ngày này qua ngày khác nơi tôi làm việc. Tôi đã không nhìn vào C khi giáp với 2 thập kỷ và tôi cảm thấy khó chịu khi phải làm thế.
Jesse C. Choper

19
Học một cái gì đó không bao giờ là một sai lầm. Nó luôn luôn tốt hơn nhiều so với việc không học .
SK-logic

Câu trả lời:


80

Tôi đã học được nhiều ngôn ngữ khác nhau nhưng C # là ngôn ngữ nghiêm túc đầu tiên của tôi, tôi đã đọc "Head First C #" và tạo ra một vài dự án. Nhưng sau khi đọc bài viết ở trên, tôi thấy có một chút không hài lòng rằng tôi có thể sẽ hiểu sai về nó, rõ ràng tôi tôn trọng ý kiến ​​của Joel, thứ đã ném cho tôi một chút.

Tôi cũng tôn trọng ý kiến ​​của Joel, nhưng chúng chỉ là: ý kiến . Hoàn toàn không có gì sai khi sử dụng C # làm ngôn ngữ bắt đầu.

Lời khuyên lớn nhất tôi có thể đưa ra cho bạn, hoặc bất kỳ ai làm bất kỳ chương trình nào (ngay cả khi họ bắt đầu bằng vanilla C!) Là đừng trì trệ và đừng tôn giáo . Tôi không quan tâm những gì ngôn ngữ lập trình bạn đang bắt đầu với, hoặc làm thế nào tinh khiết, chính đáng rằng ngôn ngữ là - trong thời đại ngày nay bạn không thể đủ khả năng để ngồi chỉ trong thế giới lập trình.

Ví dụ, tôi bắt đầu lập trình với PHP3 trở lại khi tôi còn là một thiếu niên. Tôi đã xây dựng một số ứng dụng web nhỏ và một vài trang web với nó; Tôi nghĩ rằng tôi là một lập trình viên thiên tài và tôi có thể làm bất cứ điều gì với PHP3, và cau mày với những người tất cả về ASP hoặc BASIC. Chàng trai, tôi đã sai.

Tôi đã không bắt đầu thực sự nở rộ như một nhà phát triển cho đến khi tôi bắt đầu mở rộng tầm nhìn và nghiên cứu các ngôn ngữ và khái niệm lập trình khác. Trong thời gian học trung học, tôi đã học được một số RealBASIC, và sau đó là Visual Basic. Sau khi học trường kinh doanh, khi tôi trở thành một nhà phát triển chuyên nghiệp, tôi bắt đầu học C # và Javascript một cách nghiêm túc.

Bây giờ, đừng hiểu lầm tôi ở đây - Tôi không ủng hộ việc bạn cố gắng trở thành một Jack của tất cả các giao dịch. Trái tim và trong thương mại, tôi vẫn là một lập trình viên PHP. PHP là bánh mì và bơ của tôi, và tôi biết nó từ trong ra ngoài. Tuy nhiên, các kỹ năng PHP của tôi đã không trở thành những gì họ chỉ làm PHP. Dưới đây là một số khái niệm rất quan trọng mà tôi đã không nắm bắt được từ PHP, mặc dù hoạt động trong lĩnh vực này rất chuyên nghiệp.

  • Javascript: Đóng cửa
  • jQuery (có, riêng biệt): DOM và Ajax
  • Visual Basic: Lập trình hướng đối tượng
  • C #: Generics và đóng cửa
  • Ruby (trên Rails): Sức mạnh của thiết kế MVC

Tôi có thể tiếp tục, và nhiều người khác trên trang web này cũng vậy, trong nhiều ngày. Mặc dù tôi là một lập trình viên PHP nhưng tôi có thể mang tất cả những khái niệm tuyệt vời này trở lại với tôi vào công việc tôi làm hàng ngày.

Quan điểm của tôi là gì? Tìm hiểu C #. Trở thành bậc thầy về C # - bạn sẽ có một sự nghiệp thành công lâu dài và có thể bạn sẽ hoàn thành một số điều tuyệt vời. Nhưng đừng tự chọc lỗ chim bồ câu. Hành trình, và nếm các ngôn ngữ và môi trường và khái niệm khác.


+1: @toleero - C # hoặc Java là hoàn toàn tốt để bắt đầu học hỏi. Joel và Paul Graham Đánh bại mức trung bình đã cố gắng vượt qua điểm các nhà phát triển trì trệ với các ngôn ngữ đã chọn của họ vì chỉ ra rằng điều này là quá phổ biến.
Justin Shield

Nhân tiện, Objective-C cũng dạy MVC, nhưng nó ít được quy ước hóa.
Moshe

4
+1. Theo tôi, bạn không thể thực sự là một nhà phát triển tuyệt vời và là một bậc thầy về ngôn ngữ chính của bạn, mà không cần phải học và chơi xung quanh với các ngôn ngữ khác. Đó là cách tốt nhất để mở rộng kiến ​​thức của bạn và thực sự đánh giá cao những mặt mạnh của ngôn ngữ chính của bạn.
Niklas H

3
+1. Chìa khóa lấy đi từ đây là những từ anh ấy chọn để in đậm. Thật quá dễ dàng để học một cái gì đó như Java và C #, hoặc thậm chí C và dành 10 năm cuộc đời của bạn để viết mã theo cách bạn luôn có. Đẩy mình, học một ngôn ngữ mới mỗi năm. Đặt câu hỏi cho những việc bạn làm, cố gắng tìm một cách tốt hơn. Và quan trọng nhất, hãy tham gia vào Lập trình viên và StackOverflow.
Andrew T Finnell

Bạn có thể làm tất cả các ví dụ này trong C #. Dom / ajax: Thư viện C # xml & ajax. Hướng đối tượng? Kiểm tra. MVC? Khung mvc Asp.net.
Carra

21

khi ai đó có ý kiến ​​tôi tôn trọng thì nghĩ rằng nó có hại.

Điều này làm tôi nhớ đến một câu chuyện liên quan đến Richard Feynman. Một sinh viên tại Caltech đã hỏi nhà vũ trụ học nổi tiếng Michael Turner rằng "thiên vị" của anh ta là gì trong việc ưu tiên một loại hạt như một ứng cử viên để bao gồm vật chất tối, và Feynman cáu kỉnh và nói "Tại sao bạn muốn biết thiên kiến của anh ta ? ... Đừng để ý đến chính quyền, hãy tự suy nghĩ. "

Các lập trình viên đến từ mọi tầng lớp xã hội. Java được dạy ở nhiều trường trung học và cao đẳng ngày nay, nhưng nó thậm chí còn chưa được phát minh khi Joel Spolsky ở trường. Không có "một con đường thực sự" khi trở thành một lập trình viên giỏi. Chắc chắn có một số tác phẩm kinh điển như SICP mà hầu hết các lập trình viên vấp ngã tại một số điểm, nhưng không có tiêu chuẩn cứng và nhanh. Điều chính là bắt đầu ở đâu đó, và tập trung vào việc xây dựng các khái niệm. Một lập trình viên tuyệt vời đã từng nói điều gì đó như:

Lập trình viên xấu tập trung vào mã, lập trình viên giỏi tập trung vào thuật toán.

Tôi nghĩ rằng C # là một ngôn ngữ tốt để bắt đầu, nhưng tôi cảnh báo bạn hãy cảnh giác với Visual Studio. Đó là một IDE rất lớn, nhưng nếu bạn kéo DropDownListvà gắn kết GridViewvới a ObjectDataSourcevà sử dụng Buttonđiều khiển để thực hiện DropDownListtìm kiếm dựa trên thì phần lớn công việc được IDE thực hiện và bạn không thực sự lập trình. Tận dụng các công cụ IDE, nhưng luôn cố gắng xây dựng các khái niệm và phát triển kiến ​​thức.


Một câu trả lời tuyệt vời.
Yasir

3
Đầu tiên bạn nói "Lập trình viên giỏi tập trung vào Thuật toán" sau đó bạn nói "công việc được thực hiện bởi IDE và bạn không thực sự lập trình". Đó là cái gì Tôi có thể viết chương trình, thực hiện đúng luồng công việc và không quan tâm đến "chi tiết triển khai" như GridView và DropDown (Giả sử tôi biết đủ để chọn đúng và cách triển khai đúng). +1 cho phần còn lại của câu hỏi, nhưng sử dụng IDE không ngăn cản bạn trở thành một lập trình viên giỏi.
WernerCD

@WernerCD - Khi tôi nói "công việc được thực hiện bởi IDE", tôi đã đề cập đến ví dụ cụ thể mà tôi đã đưa ra. Nếu bạn đưa một đứa trẻ chưa bao giờ thực hiện bất kỳ mã hóa nào và yêu cầu nó làm theo các hướng dẫn từng bước trong IDE, nó sẽ tạo một trang làm việc, nhưng nó không lập trình. Tôi nghĩ rằng IDE rất hữu ích cho công việc lập trình, nhưng là một người mới hoàn toàn, bạn nên học cách đệ quy thay vì kéo các điều khiển xung quanh.
BlackJack

2
@Graham - Xin lỗi, nhưng tôi không đồng ý. Anh ấy không cố gắng học CNTT hay phát triển phần mềm - anh ấy đang cố gắng học lập trình. Theo tôi, các công cụ IDE là tốt nhất để lại sau khi bạn thực sự là một lập trình viên có năng lực.
BlackJack

16
Điều quan trọng là một nhà phát triển giỏi không tin vào phép thuật . Công việc được thực hiện bởi IDE (hoặc bất kỳ công cụ nào khác) là một sự tiện lợi, một lối tắt, nhưng không phải là sự thay thế cho sự hiểu biết .
Bevan

7

Tôi chỉ là một thiếu niên, nhưng với tất cả sự khiêm tốn và tôn trọng những người vô cùng kinh nghiệm hơn, tôi phải thú nhận rằng tôi cũng không có thái độ này.

Một lập trình viên nhận xét bên dưới câu trả lời của Joel: " như ai đó đã phải đập đầu của mình trên bàn qua 'lập trình viên' người đến rất khuyến khích cho C # khả năng của họ, nhưng không thể làm những việc đơn giản như thực hiện một lớp cơ sở rất tốt tài liệu, tìm rò rỉ bộ nhớ trong các chương trình c và c ++ " ...

Nhưng tại sao việc tìm kiếm rò rỉ bộ nhớ trong ứng dụng C ++ lại đơn giản đối với người không bao giờ tuyên bố biết C ++? :) Tôi không hiểu. Nó giống như chỉ trích một nhà tâm lý học vì thiếu kỹ năng nha sĩ. Tôi chắc chắn không phải là một lập trình viên giỏi, nhưng tôi cảm thấy điều này không phải vì tôi không biết C ++ - bởi vì tôi không biết rõ về khuôn khổ và ngôn ngữ mà tôi đang sử dụng.

"không thể làm những việc đơn giản như thực hiện một lớp cơ sở được ghi chép rất tốt (...) hoặc chỉ đơn giản là tự mình tìm ra một vấn đề hoặc học một ý tưởng mới với tốc độ vừa phải"

OK, nhưng - mối tương quan không có nghĩa là nhân quả, và điều gì khiến chúng ta cho rằng việc họ thiếu các kỹ năng lập trình chung - điều mà tôi không nghi ngờ - là kết quả của sự lựa chọn ngôn ngữ của họ?

Hay một tác động của C # là ngôn ngữ lựa chọn đầu tiên của họ , cho vấn đề đó?

Tôi có thể thấy lời giải thích chính đáng khác (có lẽ C # là chỉ hợp thời trang, và vì thế nó thu hút rất nhiều người mới ... hầu hết mọi người cho ai C # là ngôn ngữ đầu tiên đã không được lập trình rất dài ở tất cả , và đó là chi tiết của một khuyết tật trong quyền riêng của mình hơn là không bao giờ lập trình bằng một số ngôn ngữ khác ... vv, v.v.).


Nó giống như chỉ trích một thợ mộc chỉ có thể sử dụng các công cụ quyền lực. Ngay cả trong các ngôn ngữ được thu gom rác, việc biết các biến của bạn sẽ tồn tại bao lâu là một kỹ năng cơ bản. Nếu bạn không thể nhận ra tuổi thọ dự định của một biến với một ánh mắt trắng trợn freenhìn thẳng vào mặt bạn, làm thế nào bạn nhận ra nó trong một chương trình được viết bằng ngôn ngữ không cung cấp manh mối như vậy?
Karl Bielefeldt

1
Tôi thấy điểm của bạn. Tôi biết những điều cơ bản rất của đời biến (chỉ là về càng nhiều càng tốt tôi có thể cần trong C # trên một cơ sở hàng ngày: phạm vi, using, IDisposable, xử lý sự kiện tham khảo thính giả của họ vv), nhưng tôi thậm chí không thể nghiêm túc cố gắng để chẩn đoán một ký ức rò rỉ trong một ứng dụng C ++, vì tôi thậm chí không quen với cú pháp! Tôi không biết dấu hoa thị là gì.
Konrad Morawski

5

Tôi muốn nói rằng việc học một ngôn ngữ và gắn bó với nó là một sai lầm nhiều hơn là quyết định bạn nên bắt đầu với ngôn ngữ nào. Tất nhiên, có một số ngôn ngữ bạn có thể học dễ hơn, nhưng tốt hơn hết là hãy thử và bắt đầu học một ngôn ngữ mà bạn sẽ sử dụng nhiều (trong trường học, sự lựa chọn ngôn ngữ đã được nhà trường đưa ra). Sau khi bạn đã học đúng ngôn ngữ và sử dụng ngôn ngữ đó một cách tích cực sau vài tháng, bạn nên học một ngôn ngữ lập trình khác và so sánh.

Trong .NET thật dễ dàng để bạn có thể đi với hai ( sắp xếp của ) ngôn ngữ lập trình khác nhau kể từ khi bạn có thể chuyển đổi giữa Visual Basic và C #. Vì vậy, bạn có thể tìm hiểu Visual Basic và xem sự khác biệt là gì. Ở cấp độ này, bạn nên thành thạo mã hóa thủ tục cơ bản với ba cấu trúc lập trình cơ bản, nếu bạn có thể sáng tạo với tất cả chúng (và biết cách sử dụng biến) thì bạn đang trên đường trở thành một lập trình viên tuyệt vời:

  • Trình tự - Mã được viết theo trình tự các bước theo nhau theo cách bạn chỉ định, (xác định "bước nhảy", từng bước và gotos)
  • Có điều kiện - Mã có thể có các điểm quyết định, (xác định câu lệnh if, câu lệnh chuyển đổi)
  • Vòng lặp / Lặp lại - Mã có thể lặp lại chính nó đã đưa ra một số quyết định (là phần mở rộng của cả hai ở trên, định nghĩa cho-, do-while-loop)

Không có vấn đề gì nếu ngôn ngữ lập trình phụ của bạn sẽ hoạt động mạnh nhất hay không, chỉ cần biết rằng các ngôn ngữ lập trình (đặc biệt nếu chúng theo cùng một mô hình) rất giống nhau và có những sắc thái nhỏ thực sự đi một chặng đường dài để giúp bạn hiểu cách lập trình phần mềm hoạt động.

Từ đó, ít nhất mỗi năm một lần, hãy cố gắng học một ngôn ngữ lập trình mới theo mô hình lập trình khác . Bạn không cần phải hoàn toàn theo kịp ngôn ngữ mới nhưng có một số lợi ích để biết các mô hình khác. Có một số mô hình và một số ngôn ngữ lập trình xen kẽ giữa nhiều ngôn ngữ (lưu ý rằng C # thực sự có các tập hợp con sau ba):

Những điều quan trọng nhất bạn nên học là nhiều ngôn ngữ lập trình tuân theo tập hợp thành ngữ và API cơ bản của riêng chúng. Vì vậy, khi bạn học một ngôn ngữ mới, hãy cố gắng học tốt những thành ngữ và API đó và bạn sẽ ổn khi xây dựng công cụ. Một lý do tốt là bạn sẽ trở nên giỏi hơn trong việc thiết kế và giải quyết các vấn đề lập trình. Một số thành ngữ trong một ngôn ngữ, có thể cung cấp cho bạn một cái nhìn sâu sắc về cách giải quyết vấn đề trong ngôn ngữ chính của bạn.

Cũng biết rằng còn có một lý do rất chính đáng khác tại sao bạn nên học các ngôn ngữ lập trình khác, ngoài ngôn ngữ chính mà bạn sẽ sử dụng nhiều nhất: Cơ hội việc làm của bạn sẽ lớn hơn nhiều.


5

Trọng tâm của câu hỏi của bạn và nhiều câu trả lời ở đây là về C #. Từ Wikipedia :

Ngôn ngữ C # được dự định là một ngôn ngữ lập trình hướng đối tượng đơn giản, hiện đại, có mục đích chung.

Chỉ dựa vào điều đó, có vẻ an toàn khi nói rằng bạn có thể học C # như một ngôn ngữ đầu tiên mà không gây ra bất kỳ tổn hại lâu dài nào cho bộ não của bạn. Tuy nhiên, tôi không nghĩ rằng Joel đã lên án toàn bộ ngôn ngữ, khi anh viết :

Nỗ lực thực hiện một phím tắt và đi thẳng vào việc học chính xác điều bạn muốn học ngay bây giờ (như bắt đầu với C # và ASP.NET) sẽ bị tiêu diệt.

Vấn đề không phải là ngôn ngữ, đó là dùng phím tắt. Quá thường xuyên, mọi người cố gắng thực hiện một lộ trình nhanh chóng đến mục tiêu cuối cùng của họ bằng cách làm theo các hướng dẫn từng bước hoặc "tìm hiểu mọi thứ trong 24 giờ". Bạn không cần phải dành quá nhiều thời gian cho Stack Overflow trước khi bạn bắt đầu nhận thấy rằng có rất nhiều câu hỏi: "Tôi chưa bao giờ viết một dòng mã nào trong đời, nhưng tôi đang vào iPhone lập trình! Ai đó có thể vui lòng cho tôi hướng dẫn từng bước để làm chính xác những gì tôi muốn làm không? Cảm ơn! " Tôi không nói rằng bạn đang thực hiện phương pháp đó, nhưng đó là điều mà bạn phải đề phòng.

Nếu bạn muốn phát triển các kỹ năng lập trình vững chắc, bạn nên bắt đầu bằng cách học các kỹ năng cơ bản. Nếu bạn cố gắng chuyển thẳng sang các ứng dụng OOP và GUI và như vậy, có thể bạn sẽ bỏ lỡ những nguyên tắc cơ bản đó. Những cuốn sách mà Joel chỉ là thực sự rất tốt. Tôi chỉ đọc lướt qua Sách vàng C # (PDF), nhưng có vẻ như đó là phần giới thiệu tốt hơn để lập trình so với hầu hết các sách C # tôi thấy trong các cửa hàng.


Tôi muốn chỉ ra rằng cụm từ không "không học C #", đó là "C # ASP.NET" (nhấn mạnh thêm). Tôi không phải là lập trình viên C #, nhưng .NET và CLR là một nền tảng tốt để bắt đầu học hỏi.
trước

5

Đối với tôi, những thứ đó trong bài báo khác đó đã đập tan một chút sự nhếch nhác. Có, tôi thường giới thiệu SICP cho các nhà phát triển nghiêm túc, những người thực sự muốn cải thiện, nhưng chỉ với những người muốn vượt ra khỏi "chuẩn mực" và tìm hiểu ma thuật sâu sắc. Thật vậy, trong nhiều năm, SICP là văn bản lập trình năm nhất của MIT; nhưng, rất nhiều lập trình viên làm việc vững chắc không bao giờ có cơ hội tham dự tổ chức tốt nhưng đắt đỏ và có tính chọn lọc cao đó.

Vậy điều gì làm tôi khuyên bạn nên, trong câu trả lời cho câu hỏi của bạn? Bắt đầu với những gì bạn có và học cách suy nghĩ như một lập trình viên, thay vì chỉ học một số ngôn ngữ cụ thể.

Nếu bạn tình cờ có sẵn một triển khai C #, tôi có thể nói với bạn rằng đó là một ngôn ngữ hoàn toàn tốt cho một người làm việc chăm chỉ như tôi, cũng như Java, JavaScript, Python, Ruby, Scala, Scheme và nhiều ngôn ngữ khác tôi có học qua nhiều năm. Cuối cùng, tôi cố gắng chọn ngôn ngữ và công cụ phù hợp cho công việc cụ thể trong tay và điều đó có nghĩa là chuyển đổi ngôn ngữ như mũ.

Không có gì sai khi sử dụng những cách thú vị để tìm hiểu, chẳng hạn như tiếp cận Ruby thông qua Hướng dẫnGiày dép của Why (như tôi đã đề xuất trong một bài đăng gần đây ). Có những con đường bí ẩn và huyền bí, chẳng hạn như đập đầu bạn vào The Little SchemerThe Seasoned Schemer trên đường đến SICP . Nhiều nhà tư tưởng hiện đại sẽ yêu cầu bạn bỏ qua tất cả những thứ học thuật và "enterprisey" cũ hơn và đi thẳng vào JavaScript, JQuery và HTML5. Có nhiều cách để bắt đầu, vì vậy đừng lãng phí quá nhiều thời gian. Chỉ cần chọn một và nhận được mã hóa!

Trên thực tế, tôi tin rằng một số chuyên gia làm việc ngày nay sẽ gửi cho bạn ngược lại để học Trình biên dịch hoặc C / C ++ trước tiên. Thành thật mà nói, nếu họ đã làm, tôi không tin rằng họ sẽ làm cho bạn nhiều dịch vụ.

Vì vậy, để tô điểm thêm một chút về "bắt đầu với những gì bạn có", tôi có thêm ba lời khuyên:

  • Chọn một ngôn ngữ lập trình có vẻ hay với bạn và một phương pháp học tập có vẻ hợp lý và mang lại cho họ tất cả. Trở nên biết chữ trong ngôn ngữ bạn đã chọn; đọc càng nhiều mã tốt như bạn có thể quản lý!
  • Bắt tay vào bàn phím của bạn ngay lập tức và bắt đầu viết mã khi bạn học. Tự mình làm tất cả các bài tập cơ bản trong sách lập trình của bạn và thực hành tất cả các hướng dẫn bạn có thể tìm thấy bằng ngón tay của mình một cách vui vẻ bấm vào để làm cho chúng thực sự hiệu quả. Bạn sẽ ngạc nhiên bởi có bao nhiêu kỹ năng bạn sẽ đạt được trong khi sửa lỗi trong các bản demo được cho là mã làm việc nhưng không!
  • Dành phần lớn nỗ lực của bạn để tìm hiểu làm thế nào các lập trình viên giỏi nghĩ về cách giải quyết vấn đề của họ. Tìm hiểu cách phân tích và phân tách các vấn đề và hệ thống phức tạp, phá vỡ chúng cho đến khi bạn thực sự hiểu chúng. Sau đó học cách tổng hợp và thiết kế các giải pháp tự động, xây dựng chúng để chúng làm cho một số nhiệm vụ dễ dàng hơn đối với một số người trên hành tinh này.

Tôi đã bắt đầu với FORTRAN IV và QBASIC và nếu những thứ đó không hủy hoại tôi, C # cũng sẽ không làm tổn thương bạn! Chúc may mắn và chắc chắn rằng bạn đang vui vẻ trong khi học!


Bạn có thể tìm thấy các bài giảng gốc của Abelson & Sussman tại đây: Groups.csail.mit.edu/mac/groupes/6.001/abelson-sussman-lectures
BlackJack

4

Tôi nghĩ rằng lời khuyên tốt nhất mà tôi từng thấy khi nói với mọi người rằng "Tôi nên học ngôn ngữ nào?" chỉ đơn giản là: một lập trình viên giỏi có thể làm việc trong bất kỳ ngôn ngữ nào.

Có những lập luận chống lại tuyên bố đó tôi chắc chắn, nhưng vấn đề là: học cách trở thành một lập trình viên giỏi, thay vì một chuyên gia ngôn ngữ, trước tiên. Các nhà xây dựng không chuyên xây dựng trên chính xác một lô đất, họ học các kỹ năng giao dịch của họ và áp dụng chúng trên bất kỳ lô đất nào họ yêu cầu.


Tôi sẽ +1 đó. Nó tương tự như tương tự thông thường của tôi về xây dựng xe máy. Bạn có thể chế tạo một chiếc xe máy đàng hoàng bằng cách làm việc trên dây chuyền lắp ráp và làm theo cuốn sách, nhưng những người xây dựng thực sự tuyệt vời là những người chặt chém biết can đảm của chiếc xe đạp ra vào, và kết quả là bạn nhận được một số thứ tuyệt vời.
Jarrod Nettles

3

Đôi khi tôi nghi ngờ các ngôn ngữ được lựa chọn có liên quan nhiều đến tính cách của chúng ta và chúng theo cách chúng ta có dây và ít liên quan đến các cân nhắc thực tế hoặc học thuật hơn là chúng ta muốn thừa nhận.

Điều đó nói rằng, học những thứ mới không bao giờ có hại. Bạn sẽ biết ngày bạn vượt qua ngưỡng đối với một bộ não tiến hóa hoặc có thể bị hỏng (tất cả chỉ là vấn đề về viễn cảnh tôi cho rằng) khi bạn bắt đầu nhận ra rằng mọi thứ đều có hướng dẫn sử dụng. Cuối cùng, bạn có thể thực sự làm bất cứ điều gì bạn muốn nếu bạn có một số tài năng và thực sự quan tâm đến việc đó hơn là khía cạnh của một lập trình viên.

Ít nhất là loay hoay với Python và JavaScript. Đó là một lợi thế học tập nhất định để thực sự có thể chỉ cần viết mã và xem nó thực thi ngay lập tức trong một môi trường bảng điều khiển có thể truy cập I / O như IDLE hoặc môi trường hộp cát như trình duyệt. Điều tôi không thích về C # và Java là họ muốn mọi thứ bị giới hạn trong các lớp ngay cả khi bạn thực sự chỉ viết một hàm đơn giản với các hàm bao vô nghĩa xung quanh nó để giữ cho các đồng nghiệp hoặc trình biên dịch hạn chế quá mức của bạn hài lòng. Một điều khác tôi thích về JS và Python là chúng thực sự cho phép bạn thiết lập mô hình của riêng bạn. Một chút quá linh hoạt bởi rất nhiều sở thích của nhà phát triển. Tôi vẫn không chắc sẽ nghĩ gì về sự khôn ngoan của việc quá tải các toán tử cơ bản nhưng tôi khá chắc chắn rằng tôi yêu Python vì đã cho phép tùy chọn này.

Cũng đừng rơi vào sự dối trá tàn nhẫn của việc chọn ngôn ngữ chính với danh sách công việc nhất. Tốt hơn là trở thành một con cá lớn ở vùng nước trung bình làm những gì bạn thích hơn là một thành viên của một đàn cá không thể vượt qua được, hầu như biến mọi công việc tìm kiếm thành nhiều trò xổ số hơn là một quy trình phù hợp.


Là một người thuê từ bầy cá không thể vượt qua trong công việc hàng ngày của tôi, tôi phải đồng ý. Có rất nhiều phản hồi thực sự hữu ích trong cuộc thảo luận này; Tôi hy vọng @toleero thấy nó hữu ích và không bị thất vọng. Theo suy nghĩ của tôi, trong khi Joel là một thiên tài, chúng ta không bao giờ nên chấp nhận mọi thứ mà ai đó nói là phúc âm. Những cuốn sách ông đề nghị có hữu ích. Nhưng mã hóa là ngày này qua ngày khác và nhận được kinh nghiệm thực tế. Làm điều đó bằng một số ngôn ngữ (nói C # và một cái gì đó ít giống C hơn - Cơ bản, có thể hoặc Python hoặc Ruby) và bạn sẽ trở thành một nhà phát triển tốt như nhiều người ngoài kia: o)
Owen Blacker

3

C # không tệ như Java bởi một mức độ đáng kể. Chúng hỗ trợ tốt hơn cho nhiều khái niệm như lập trình chức năng, lập trình chung, phá hủy xác định và các loại giá trị, quá tải toán tử, v.v. nó không có C ++.

Thứ hai, tôi nghĩ rằng bạn đang đọc sai những gì Joel đã nói. Nếu bạn có thể thành thạo con trỏ và đệ quy, thì bây giờ bạn không sử dụng ngôn ngữ nào. Điều quan trọng nhất sẽ là sử dụng một ít unsafemã, nắm bắt unsafe quicksorthoặc một cái gì đó, và sau đó quay trở lại phần còn lại của C # bình thường.

Ồ, và được đọc :)


2

Ngôn ngữ đầu tiên mang lại hiệu quả cho tôi là C #. Mặc dù tôi đã nghịch với Foxpro khi còn đi học và một chút C ở trường Cao đẳng. C # là điểm khởi đầu khá tốt và rất đẹp cho bất kỳ ai. Nó tuân theo các nguyên tắc cơ bản chung của lập trình như gõ mạnh, đóng gói, kế thừa, v.v ... mà tôi tin rằng người ta phải luôn học hỏi, bất kể họ có sử dụng chúng hay không. Sau đó, bạn luôn có thể chuyển sang các ngôn ngữ khác như Python không tuân theo tiêu chuẩn hóa lập trình cơ bản.

Yếu tố bổ sung khác mà mọi người không thực sự thêm vào khía cạnh học tập của C # là sự sẵn có của IDE tốt nhất cho bất kỳ ngôn ngữ nào tôi đã thấy. IDE Eclipse cũng tốt, nhưng một khi bạn đã sử dụng Visual Studio, bạn sẽ cảm ơn microsoft.

C # được tăng cường hơn C, đảm bảo rằng bạn không cần phải học các ngôn ngữ khác trước đó. Tất cả các ngôn ngữ trong hơn một thập kỷ đã phát triển từ bản chất của C, thậm chí là JAVA.

Vì vậy, bản án là, C # là điểm khởi đầu tuyệt vời cho bạn khả năng học các ngôn ngữ khác nhanh chóng trong tương lai


Eclipse tốt hơn cho tôi rất nhiều so với Visual Studio. Nhưng tôi đồng ý với bạn - C # sẽ là một ngôn ngữ tuyệt vời, đặc biệt là nếu nó không thuộc sở hữu của & bị khóa trong lớp phủ bóng tối phá hủy tiêu chuẩn độc quyền của Redmond .
Thomas W

2

Học C # như một ngôn ngữ đầu tiên không có lỗi, miễn là bạn sớm muộn gì cũng tiếp tục và bắt đầu học một ngôn ngữ thứ hai. Điều đó quan trọng hơn nhiều. Thậm chí tốt hơn nếu ngôn ngữ thứ hai đó hơi khác so với C # (javascript hoặc ruby ​​về mặt đó sẽ tốt hơn java). Mỗi ngôn ngữ đều có ưu và nhược điểm, và chính sự khác biệt sẽ giúp bạn trở thành một lập trình viên tốt hơn về lâu dài.


1

Nhiều như tôi khuyên bạn nên học nhiều ngôn ngữ (cũng như những người khác gợi ý), hãy chắc chắn rằng bạn biết (một vài) ngôn ngữ mà bạn học rất tốt.

Nguy cơ của việc biết nhiều ngôn ngữ là bạn có thể không bao giờ học một ngôn ngữ hoàn toàn gây ra sự thất vọng khi thực sự muốn giải quyết vấn đề.

Biết xây dựng vòng lặp for là nhiều ngôn ngữ rất thú vị nhưng vô dụng nếu bạn không biết cách xử lý lỗi trong bất kỳ ngôn ngữ nào.


1

Đừng lo lắng về việc bạn đã học C # trước. Nó giống như lo ngại rằng bước đầu tiên của bạn được thực hiện bằng chân trái hoặc chân phải của bạn. Sự khác biệt duy nhất giữa việc học ngôn ngữ được quản lý trước tiên là bạn chỉ trì hoãn khi bạn phải học con trỏ và quản lý bộ nhớ chi tiết. Điều này thực sự có thể có lợi cho bạn, vì khi đến lúc học C, thứ mới duy nhất bạn lo lắng là quản lý bộ nhớ - bạn cũng sẽ không cố gắng tìm hiểu các cấu trúc điều khiển, khái niệm về chức năng, v.v. có thể tập trung hoàn toàn vào con trỏ và quản lý bộ nhớ.

Bản mẫu tồn tại bởi vì có những lập trình viên ngôn ngữ được quản lý, những người không bao giờ làm phần thứ hai đó và học C và C ++, sau đó áp dụng cho các công việc C và C ++.

Nó giống như học một nhạc cụ - điều đầu tiên rất khó vì bạn đang cố gắng học cơ chế đọc nhạc viết VÀ cơ học vật lý của việc phát âm một nhạc cụ để làm những gì bạn muốn. Đối với các công cụ thứ hai và tiếp theo bạn học, bạn có thể chỉ tập trung vào những gì làm cho công cụ đó khác với những gì bạn đã biết.


1

Không còn nghi ngờ gì nữa về người mới. Tôi đã thực hiện vb, javascript, PL / SQL, T-SQL, Uniface và một chút C # để đặt tên cho một số.

Một số người trước đó đã đề cập đến Visual Basic như là nơi họ đã học về lập trình hướng đối tượng và thành thật mà nói, VB.NET có cú pháp dễ hiểu nhất về bất kỳ ngôn ngữ nào tôi từng thấy. Tính năng tốt nhất là các từ khóa phù hợp với các khái niệm được mô tả chặt chẽ.

ví dụ: Hàm myHandler () xử lý myButton.click

hoặc Class Human Mở rộng động vật có vú thông minhLifeform

Nghiêm túc mà nói, để dễ đọc khi bạn là người mới, bạn muốn cú pháp trông như thế nào?

Khi bạn đang tìm kiếm các thuộc tính và phương thức (và phân biệt giữa các hàm và hàm), việc đọc VB sẽ dễ dàng hơn rất nhiều.

Tương tự khi khai báo biến

Dim myString As string - Rõ ràng đó là kiểu và là thể hiện

Độ nhạy trường hợp C # khuyến khích những gì đối với tôi là một thói quen xấu nghiêm trọng - có cùng tên cho lớp và ví dụ với một chữ hoa và một chữ hoa.

ví dụ

Con người

  • Có quá ít từ trong từ vựng yuor mà bạn phải sử dụng lại những từ hiện có với chữ hoa không?

nếu bạn gọi human.think, sẽ rất dễ nhầm một thể hiện cho một lớp và nghĩ rằng bạn đang gọi một phương thức tĩnh trong nháy mắt. Và liếc nhìn thường là cách chúng ta nhận thức mã, chúng ta không có thời gian để di chuột qua từng yếu tố để cho biên tập viên cho chúng ta biết điều gì đang xảy ra.

C # có thể có một số lợi thế, nhưng việc bắt đầu lại khó khăn hơn rất nhiều - ngay cả khi nó tiết kiệm việc gõ. Đó là lý do tại sao chắc chắn phải có một nơi cho cả hai ngôn ngữ.


+1 cho con người. Có c # là ngôn ngữ thứ 2 (bánh mì và bơ = Delphi) thông qua một cuốn sách thay vì có bất kỳ kinh nghiệm sâu sắc nào với mã hiện có, nó luôn khiến não tôi đau một chút khi nhìn thấy điều này. Mặc dù có những phần của ngôn ngữ mà tôi thực sự thích, kéo theo độ nhạy trường hợp từ C là một sai lầm lớn IMHO.
Matt Allwood

Chắc chắn, bởi vì Dim myHuman as Humanlà tốt hơn nhiều? : D
Scrwtp

0

Nhược điểm lớn nhất mà tôi có thể thấy là Visual Studio và các công cụ liên quan rất, rất hay - những thứ như intellisense và hoàn thành mã có thể dễ dàng trở thành nạng. Nói chung, tôi cho rằng môi trường có thể rất tốt và hỗ trợ đến mức bạn có xu hướng cảm thấy hơi lạc lõng khi cần, nói, hãy hack mã ruby ​​trong trình soạn thảo văn bản. Ồ, và bạn thường sẽ bỏ lỡ những thứ như linq.


0

C # là hoàn toàn tốt để bắt đầu lập trình.

Đó là những gì tôi được bảo bắt đầu, thậm chí không có cơ hội lao vào bất cứ điều gì khác (ngoài Hello World trong Java, một số nội dung LOGO cơ bản và một số thứ trong Scratch, nhưng không có gì "Nghiêm trọng").

Nhìn chung, nó có thể khó khăn - có rất nhiều thứ dường như không trực quan và nó cũng có những hạn chế, nhưng tôi nghĩ nó khuyến khích mã hóa tốt và thật tuyệt khi bạn hiểu rõ về nó. Ý tôi là, nó mang lại cho bạn nhiều sức mạnh hơn và chuyên nghiệp hơn một chút so với Python (thường được đề xuất) và điều đó sẽ tạo ra một thế giới khác biệt - thử C ++ sau C # không quá đau đớn, nhưng nếu tôi đã bắt đầu với Python thì nó thực sự sẽ là một trở ngại rất lớn, thậm chí chỉ ở mức cú pháp.

Ngoài ra, nó có hỗ trợ đa nền tảng tốt dưới dạng Mono (đối với những người cho rằng Mono không phải là vấn đề lớn - Unity Game Engine cho phép bạn viết mã theo phiên bản của nó). Nó cũng khá hữu ích cho hầu hết mọi thứ, cho dù đó là kịch bản trò chơi, hoặc thiết kế web hay Ứng dụng Windows. Tất nhiên, một số ngôn ngữ sẽ tốt hơn cho một số dòng nhất định, vì vậy nó sẽ phụ thuộc vào hướng chung mà bạn dự định đi theo - ví dụ: nếu bạn đang đi theo hướng web, thì C # (ASP.NET) chắc chắn sẽ là một ý tưởng tốt. Nếu bạn đang có kế hoạch tham gia vào các trò chơi, thì bạn nên nghĩ về C ++.

Cuối cùng, nó cũng đáng để học nó, ngay cả khi bạn không sử dụng nó để ủng hộ tính đơn giản của Python hoặc bản chất cổ xưa của Java (vì chu trình phát hành cho Java thực sự chậm) - bạn học mã hóa tốt thực hành, trong khi không quá phức tạp cho một người mới học.


bài này khá khó đọc (tường văn bản). Bạn có phiền chỉnh sửa ing nó thành một hình dạng tốt hơn?
gnat

1
Làm như thế nào? Vẫn khó đọc, hay ok bây giờ? Cảm ơn nhân tiện cho những người đứng đầu.
Sbspider

-1

Để trở thành một lập trình viên bạn cần phải có đam mê. Các lập trình viên mà tôi biết là những người không muốn học hỏi và nhận thấy những thay đổi của ngành. Tôi đã bắt đầu lập trình của mình với cơ bản trên một chiếc Commodore Vic 20 (Có cái cũ) và tiếp tục chuyển sang các ngôn ngữ mới khác. Một phần trong những năm lập trình của tôi thậm chí bao gồm cả COBOL. Tôi cũng bắt đầu nhận thấy rằng một số ngôn ngữ hoạt động tốt nhất trong các quy trình nhất định so với các ngôn ngữ khác. Lời khuyên của tôi cho bạn là học bất kỳ ngôn ngữ nào và hiểu các khái niệm lập trình cơ bản như vòng lặp, phương pháp, so sánh. Hầu hết các ngôn ngữ hỗ trợ ba khái niệm đó. Bạn không bao giờ nên nói "Đây là cách tốt nhất" mà là "Làm thế nào tôi có thể cải thiện điều này". Điều tồi tệ nhất về câu cuối cùng đó là bạn có thể tự mình nắm bắt được kỹ thuật. Lập trình là niềm vui, làm cho nó vui vẻ! Internet đã mở ra một cách hoàn toàn mới để trải nghiệm lập trình bởi vì mức độ truy cập mà chúng ta có thông tin ngày nay rất đáng kinh ngạc. Đối với tôi trước khi có internet, tôi phải lên kệ và kéo xuống các cuốn sách lập trình GRAY IBM và học. Hôm nay bạn có thể đơn giản gõ một điều vào google và whammo.


2
bài này khá khó đọc (tường văn bản). Bạn có phiền chỉnh sửa ing nó thành một hình dạng tốt hơn?
gnat

-3

Wow rất nhiều câu trả lời. Đây là quan điểm của tôi:

C # không phải là nơi để học khoa học máy tính. Tôi thấy đó là một ý tưởng cực kỳ tồi tệ. Tôi sẽ liệt kê một số mối quan tâm của tôi dưới đây.

  • C # là ngôn ngữ của Microsoft. Không phải là tôi đang đánh giá MS ở đây, chỉ là bên ngoài thế giới MS có rất ít sự hấp thu. Nếu bạn chỉ muốn lập trình phần cứng MS thì hãy tiếp tục nhưng tôi không thấy cách tiếp cận vững chắc này đối với khoa học máy tính.
  • Tôi không phải là một fan hâm mộ lớn của việc học lập trình với các ngôn ngữ được quản lý. Tôi tin rằng chúng là giá trị trong việc học cách quản lý bộ nhớ chương trình và xây dựng cấu trúc dữ liệu.

Quá mệt mỏi để đi tiếp nên nhanh chóng chọn ngôn ngữ khác.


Tôi có thể hiểu nếu bạn nghĩ rằng việc trói mình vào MS sẽ không tốt cho sự nghiệp của bạn. Nhưng điều đó có liên quan gì đến việc học khoa học máy tính? CS không có gì để làm với các nền tảng hoặc tập đoàn.
Svick

-3

Tôi muốn giới thiệu C # hoặc bất kỳ ngôn ngữ nào cung cấp ba điều cốt lõi này:

Gõ đầy đủ Biên dịch và hướng đối tượng đầy đủ ..

Một ngôn ngữ đầu tiên cung cấp ba cốt lõi này sẽ dạy rất nhiều về luồng chương trình, cú pháp và cách giải quyết vấn đề theo cách có cấu trúc hơn. Tôi sống và thở trong một loạt các ngôn ngữ tuyệt vời không có các thuộc tính này nhưng nếu tôi dạy cho ai đó một ngôn ngữ, tôi sẽ chọn một ngôn ngữ có ba yêu cầu này.


-6

Không, câu trả lời đó thật kinh khủng. Tại sao? Chà, anh ấy đã kê toa một số cuốn sách hay mà bạn nên đọc, nhưng không có công việc trong lớp và phòng thí nghiệm (phòng máy tính), bạn sẽ lạc lối và thất vọng. Bạn cần phải cùng với một loạt các lập trình viên mới khác thử nghiệm bởi vì có rất nhiều điều để tìm hiểu ngoài những gì trong những cuốn sách đó. Tôi không nói rằng bạn phải đi BSCS, nhưng bạn cũng cần truy cập vào một người hướng dẫn có kiến ​​thức khi cả một loạt điều có thể xảy ra bất cứ lúc nào, chẳng hạn như các vấn đề về trình biên dịch, xây dựng môi trường ... bạn đặt tên cho nó. Bạn sẽ không có nhiều lập trình viên làm việc trong chân không. Bất cứ cuốn sách nào các khóa học của bạn yêu cầu sẽ đủ tốt miễn là bạn chọn một trường học nửa chừng.

Vì vậy, đăng ký một số lớp và nó sẽ vui hơn rất nhiều! Ngoài ra, nếu bạn có kế hoạch nhận một công việc như một lập trình viên, bạn cần kết nối và bạn sẽ nghe thấy tất cả những tin đồn về các công ty tuyển dụng tại trường, v.v.

Cuối cùng, giáo dục chính quy rất quan trọng vì lập trình đòi hỏi nhiều kiến ​​thức nền tảng lý thuyết để hiểu cách mọi thứ hoạt động ở mọi cấp độ (hw / sw) để bạn có thể tìm ra cách khắc phục mọi thứ. Tất cả mọi thứ là một hộp đen, vì vậy bạn phải có thể tìm ra lý do tại sao một cái gì đó đang hành xử theo cách đó để bạn có thể thực hiện cú đâm hợp lý tiếp theo trong bóng tối. Nếu không có ít nhất một bằng cấp lập trình 2 năm (bất cứ điều gì bạn gọi nó), bạn sẽ gặp bất lợi.

PS Tôi sẽ không đến gần .Net hoặc C # cho đến khi bạn trải nghiệm Java. C # không vừa mắt. Đó là mã tìm kiếm lộn xộn và lộn xộn. IDE .Net hút vượt quá niềm tin. Đó là trong thời kỳ đen tối của các tiêu chuẩn IDE. Java: C # ~ Dữ liệu: Truyền thuyết


10
Tôi với bạn cho đến đoạn cuối cùng. Nó nêu ý kiến ​​của bạn về tính thẩm mỹ của C # theo cách gây viêm đến nỗi nó dường như không thuộc về một câu trả lời hay.
Adam Lear

9
Ngay cả trước đoạn cuối cùng, điều này chủ yếu là vô nghĩa. Một số người học tốt trong môi trường phòng học - nhưng đối với những người khác, điều đó thật lãng phí thời gian. Học nền tảng lý thuyết rất quan trọng, nhưng điều đó không nhất thiết đòi hỏi phải có một lớp học hoặc giáo dục chính quy - họ giúp đỡ một số người, nhưng không (thậm chí gần với) tất cả mọi người.
Jerry Coffin

Một ý kiến ​​chỉ là vậy; Đó không phải là một tuyên bố thực tế. Vì vậy, đừng cảm thấy bị xúc phạm.
Tom Jones

YOu đã hiểu nhầm đề xuất cho việc học chính thức. Bạn cần một nơi để đặt câu hỏi và cộng tác với các đồng nghiệp trong phòng thí nghiệm. Hợp tác là khái niệm quan trọng. Xin lỗi nếu bạn là người dùng C # và tôi đã xúc phạm bạn mặc dù điều đó là không thể đối với các kỹ thuật viên không chuyên trách.
Tom Jones

1
Stackoverflow đã trở thành "phòng thí nghiệm" cho nhiều người không thể học đại học mà muốn có sự hỗ trợ của cộng đồng. Có giống như một lớp học? Tất nhiên là không. Nó có đủ tốt không? Bạn đặt cược.
BlackJack
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.