C ++ khó hơn java reddit

Chào mừng đến với /r/học lập trình. Đây là danh sách một số câu hỏi thường gặp nhất trên subreddit này. Nếu câu hỏi của bạn là một trong những câu hỏi này, nó có thể đã được trả lời nhiều lần trước đây và bạn nên thử sử dụng các phương tiện tìm kiếm của reddit (xem trong thanh bên) để tìm câu trả lời trước đó trước khi đăng ở đây

Show

Bắt đầu

Tôi bắt đầu từ đâu?

Nếu bạn quan tâm đến việc học viết mã, sẽ rất hữu ích nếu bạn bắt đầu với tư duy đúng đắn. Video YouTube này của Kevin Cheers thực hiện rất tốt việc giải thích quan điểm đúng đắn mà bạn nên có khi bắt đầu

Tiếp theo, bạn nên nhớ rằng không có cách học viết mã nào được thống nhất chung -- mọi người thích học theo một cách hơi khác và bạn có thể cần thực hiện một số thử nghiệm để tìm ra cách tiếp cận phù hợp nhất với mình. Tuy nhiên, phần lớn mọi người dường như học tốt nhất bằng cách sử dụng phương pháp sau đây, chúng tôi thực sự khuyên bạn nên thử

  1. Tìm một số vấn đề hoặc dự án nhỏ mà bạn muốn giải quyết. Bạn có thể thử xây dựng một công cụ để giải quyết một vấn đề nhỏ trong cuộc sống của mình hoặc thử triển khai một chương trình mà bạn thấy thú vị từ đầu. Dự án này sẽ giúp thúc đẩy bạn tiếp tục học cách viết mã và sẽ cho bạn cơ hội thực hành áp dụng những gì bạn đang học
  2. Thực hiện một số nghiên cứu để tìm ra ngôn ngữ lập trình nào phù hợp nhất cho dự án của bạn. (Xem bên dưới để biết các khuyến nghị)
  3. Tìm và theo dõi một nguồn duy nhất, chất lượng cao dành cho người mới bắt đầu cho ngôn ngữ đó. (Một lần nữa, xem bên dưới)
  4. Bổ sung tài nguyên đó bằng cách googling và đặt câu hỏi
  5. Cuối cùng hoàn thành một số dự án không tầm thường bằng ngôn ngữ đó

Dưới đây là một số điều chúng tôi khuyên bạn nên tránh làm

  1. Đừng chỉ đơn giản là theo dõi một cách thụ động bất kỳ tài nguyên nào bạn đang sử dụng. Làm bài tập và bài tập về nhà;
  2. Tránh chuyển đổi qua lại giữa các ngôn ngữ lập trình một cách không cần thiết; . Điều này là do lập trình cuối cùng là về giải quyết vấn đề, không phải về ngôn ngữ lập trình. Học cách giải quyết vấn đề là một thách thức và là một kỹ năng bạn chỉ có thể trau dồi thông qua thực hành. Mỗi khi bạn chuyển đổi ngôn ngữ, bạn sẽ mất thời gian mà lẽ ra bạn có thể dành để thực hành áp dụng những gì bạn đã học để cải thiện kỹ năng giải quyết vấn đề của mình
  3. Không ngừng học khi bạn đã hoàn thành hướng dẫn. Lập trình là loại lĩnh vực luôn có cái gì đó mới để học

Và cuối cùng, hãy nhớ rằng học lập trình có thể là một quá trình lâu dài và khó khăn. Nếu việc học viết mã cảm thấy khó khăn, đừng nản lòng. Điều đó hoàn toàn bình thường -- nhiều người sẽ dành nhiều năm trong cuộc đời để học hỏi và rèn luyện trước khi họ cho rằng mình đủ năng lực để tìm việc làm hoặc đóng góp cho một dự án quan trọng. May mắn thay, chỉ mới bắt đầu không khó chút nào

Tôi nên bắt đầu với ngôn ngữ lập trình nào?

Có hai quan niệm sai lầm phổ biến khiến mọi người đặt câu hỏi này. Đầu tiên là thực sự có một ngôn ngữ lập trình "tốt nhất" để học và thứ hai là ngôn ngữ đầu tiên bạn học sẽ quyết định phần còn lại trong sự nghiệp lập trình của bạn sẽ như thế nào

Trên thực tế, không có ngôn ngữ nào tốt nhất để bắt đầu và ngôn ngữ đầu tiên của bạn hầu như không có tác dụng lâu dài đối với sự nghiệp sau này của bạn. Các ngôn ngữ lập trình bề ngoài có thể trông rất khác nhau, nhưng phần lớn các khái niệm cơ bản sẽ chuyển từ ngôn ngữ này sang ngôn ngữ khác. Học một ngôn ngữ mới cũng sẽ trở nên dễ dàng hơn theo thời gian -- người mới bắt đầu có thể mất vài tháng trước khi họ cảm thấy thoải mái với ngôn ngữ đầu tiên của mình;

Tất cả các lập trình viên nên có kinh nghiệm về nhiều loại ngôn ngữ. Khi bạn cảm thấy thoải mái với một ngôn ngữ, hãy chuyển sang một ngôn ngữ khác khác biệt theo một số cách cơ bản. Khi bạn học nhiều ngôn ngữ hơn, bạn sẽ được trang bị nhiều hơn để chọn công cụ phù hợp cho công việc đang làm, đây là dấu hiệu của một lập trình viên giỏi. Vì các khái niệm lập trình là điều quan trọng nhất, chúng tôi khuyên những người mới bắt đầu nên bắt đầu với một trong những ngôn ngữ chính từ bảng bên dưới. Tất cả các ngôn ngữ này cho phép người mới bắt đầu viết các ứng dụng đơn giản và thực hành lập trình mà không cần phải sử dụng bất kỳ tính năng ngôn ngữ phức tạp nào.

Nếu bạn đã có dự án hoặc mục tiêu trong đầu, bạn sẽ học nhanh hơn nếu bạn có thể áp dụng các kỹ năng của mình vào vấn đề mà bạn đang cố gắng giải quyết. Bảng bên dưới chứa một số lựa chọn ngôn ngữ được đề xuất cho các dự án phổ biến

tôi muốn học cách. Cân nhắc sử dụng. tạo ứng dụng iPhoneSwift (). tạo ứng dụng AndroidKotlin/Java (). xây dựng một trang web JavaScript, CSS, HTML5 (). viết các ứng dụng máy tính để bàn Windows C#. tạo trò chơi 2D/3DJavaScript, C# hoặc C++ (). chương trình Arduinos/vi điều khiển/robot. thực hiện tính toán khoa học/toán học hoặc phân tích dữ liệuJulia, Python, R hoặc Matlab. thực hiện tự động hóa và viết kịch bản Nhiều ngôn ngữ (Python, Ruby, Bash, Powershell, AutoHotKey. )

Nếu bạn vẫn không thể quyết định, hãy thử Python. Python là một ngôn ngữ tốt, thân thiện với người mới bắt đầu với một cộng đồng lớn và nhiều thư viện để làm hầu hết mọi thứ bạn muốn, từ tạo trò chơi đến tự động hóa mọi thứ ở nhà hoặc nơi làm việc của bạn hoặc phân tích dữ liệu để tạo trang web. Cố gắng tìm một tài nguyên học tập tập trung vào các khái niệm và nguyên tắc cơ bản trước khi đi sâu vào các ứng dụng phức tạp hơn

Tôi tìm tài nguyên học tập tốt ở đâu?


Làm thế nào để cải thiện

Một câu hỏi phổ biến mà chúng tôi nhận được từ nhiều người mới bắt đầu là "bây giờ thì sao?". Cụ thể, bạn có thể đã thử làm việc qua một số hướng dẫn, sách, khóa học, nhưng cuối cùng gặp khó khăn trong việc tạo ra khoảng cách từ việc hiểu cách thức hoạt động của những thứ như câu lệnh if và vòng lặp for đến việc hiểu cách thực sự áp dụng những gì bạn đã học để tạo ra sự phức tạp và thú vị

Thực hiện chuyển đổi này giữa các hướng dẫn giới thiệu sang mã phức tạp có thể khó khăn và là một phần bình thường của việc học viết mã. Bài viết này mô tả hiện tượng này rất tốt. Nhiều hướng dẫn (đặc biệt là các trang web "học viết mã" được thương mại hóa như CodeCademy) có xu hướng hướng dẫn bạn những điều cơ bản, nhưng dừng lại sau thời điểm đó, khiến nhiều người mới bắt đầu lúng túng

Tuy nhiên, nếu bạn gắn bó với nó và vượt qua sự bối rối, cuối cùng bạn sẽ thấy mình ngày càng trở nên tốt hơn, cho đến một ngày, mà bạn không nhận ra điều đó, bạn sẽ thấy rằng mình đã bắt đầu trở nên có năng lực.

Dưới đây là một số gợi ý về cách kiên trì và bạn nên làm gì tiếp theo

  • Chuyển từ học thụ động sang học chủ động

    Thay vì chỉ tham gia các khóa học và lớp học (bạn hy vọng) sẽ dạy cho bạn những gì bạn muốn học, hãy bắt đầu tích cực nghiên cứu các cách để dạy cho chính mình. Ví dụ: nếu bạn không biết cách tạo trò chơi, hãy google "cách lập trình trò chơi bằng X", trong đó "X" là ngôn ngữ lập trình bạn muốn sử dụng. Nếu bạn gặp một thông báo lỗi mà bạn không nhận ra, hãy thử tra cứu nó trên Google. Bạn muốn học cách học máy?

    Bạn thường có thể tìm thấy các hướng dẫn giải thích chính xác những gì bạn muốn làm hoặc ít nhất là các bài báo cung cấp cho bạn thông tin tổng quan và manh mối về cách soạn các truy vấn tìm kiếm cụ thể hơn. Nói rộng hơn, không có gì xấu hổ khi thực hiện nghiên cứu để học hỏi những điều mới -- thực tế là hoàn toàn ngược lại. Google và nghiên cứu là điều mà tất cả các lập trình viên, cả người mới bắt đầu và nâng cao đều làm liên tục

  • Không ngừng luyện tập

    Lập trình giống như tập thể dục, trong đó cách chính để cải thiện là thông qua thực hành liên tục. Bắt đầu đơn giản và thử lập trình một trò chơi cơ bản như "oẳn tù tì" trên dòng lệnh. Khi bạn hoàn thành, hãy thử chọn một dự án tham vọng hơn và thực hiện nó. Có lẽ hãy thử một số bài tập lập trình, nếu bạn muốn kết hợp mọi thứ

    Về cơ bản, lập trình thực sự là về giải quyết vấn đề ứng dụng và cách tốt nhất để học cách giải quyết vấn đề là liên tục giải quyết các vấn đề lớn và nhỏ

    (Xem thêm và )

  • Học cách phân tách vấn đề

    Khi bạn đang cố gắng giải quyết một dự án hoặc vấn đề lớn, bạn rất dễ nản lòng bởi nhiệm vụ đó có vẻ quá lớn hoặc đáng sợ. Thay vì bị đe dọa, hãy tìm cách chia nhỏ vấn đề (phân tách vấn đề) thành các vấn đề con ngày càng nhỏ hơn, cho đến khi mỗi vấn đề con riêng lẻ dường như có thể quản lý và thực hiện được

    Ví dụ: giả sử bạn muốn chơi trò oẳn tù tì. Chà, nếu bạn thực sự tách nó ra, nó bao gồm một số bài toán con. cách nhận thông tin đầu vào từ người dùng, cách làm cho máy tính chọn một tùy chọn ngẫu nhiên, cách biết ai đã thắng và cách lặp lại toàn bộ (nếu bạn muốn chơi nhiều trò chơi)

    Nếu bạn không chắc chắn cách giải quyết từng vấn đề con này, hãy thử chia nhỏ chúng ra nhiều hơn. Ví dụ: nếu bạn không biết làm thế nào để biết ai đã thắng, bạn có thể chia nó thành nhiều vấn đề phụ hơn. làm thế nào để biết bạn đã hòa chưa, làm thế nào để biết bạn đã thắng hay chưa (giả sử bạn chọn đá), làm thế nào để biết bạn đã thắng (giả sử bạn đã chọn giấy) và làm thế nào để biết bạn đã thắng (giả sử

    Nếu bạn hoàn toàn không chắc chắn (ví dụ: làm cách nào để máy tính chọn một tùy chọn ngẫu nhiên?), hãy thử tìm trên Google. Trong trường hợp này, việc tra cứu "X chọn tùy chọn ngẫu nhiên" (trong đó X là ngôn ngữ lập trình bạn đang sử dụng) sẽ hiển thị nhiều phương pháp khác nhau mà bạn có thể sử dụng. Đôi khi, bạn có thể chia một vấn đề thành nhiều phần trước khi cần google, và đôi khi sẽ cần phải làm như vậy ngay lập tức

    Ví dụ: nếu bạn đang học Java, muốn học cách viết trò chơi, nhưng không biết bắt đầu từ đâu hoặc làm thế nào để giải quyết vấn đề, thì việc tìm kiếm "hướng dẫn trò chơi java" trên Google sẽ mang lại một số kết quả tốt vừa dạy bạn cách làm.

    Về cơ bản, bạn đang cố gắng đạt được tư duy của một kỹ sư. Nếu một vấn đề lớn, đừng bỏ cuộc. Tiếp tục chia nó thành những phần nhỏ hơn và nhỏ hơn, và nghiên cứu những thứ dường như không thể rút gọn được. Sau đó lặp lại, tiếp tục chu kỳ. phá vỡ, google, phá vỡ, google

    Nhân tiện, đây là một chiến lược khá hiệu quả để tự học. Khi bạn thực hành, bạn sẽ hiểu rõ hơn về cách chia nhỏ vấn đề và sẽ mở rộng kho kiến ​​thức/giải pháp khả thi cho các vấn đề

    Xem thêm gợi ý

  • Học cách có hệ thống

    Khi mã hóa và gỡ lỗi mã của bạn, đừng bao giờ có thói quen chỉ "thử" mọi thứ và hy vọng chúng hoạt động. Hãy có hệ thống và chặt chẽ nhất có thể, và tránh "thử và sai"

    Khi viết mã, hãy dành một chút thời gian để tạm dừng và viết ra giấy một kế hoạch tấn công sơ bộ. Cân nhắc phác thảo một số sơ đồ hoặc ghi lại một số mã giả. Nếu bạn phải thay đổi kế hoạch của mình (điều mà rất có thể bạn sẽ làm), hãy nghĩ xem tại sao bạn lại thực hiện thay đổi đó và kế hoạch tấn công mới của bạn là gì. (Giai đoạn lập kế hoạch này cũng là thời điểm tốt để thực hành phân tách vấn đề. )

    Khi gỡ lỗi, đừng bao giờ vu vơ. Hãy thử và suy nghĩ như một nhà khoa học -- tiến hành các thí nghiệm để cố gắng sửa lỗi hoặc thu hẹp vị trí có thể có lỗi và ghi lại kết quả của bạn. Nếu giả thuyết/nỗ lực thay đổi của bạn hóa ra là sai, hoặc nếu điều gì đó hiệu quả khi bạn không nghĩ rằng nó sẽ như vậy, hãy dừng lại, tạm dừng và tìm hiểu lý do tại sao. Cân nhắc theo dõi các thí nghiệm và bài kiểm tra của bạn trong một cuốn sổ, nếu nó giúp bạn đi đúng hướng

    Lỗi xảy ra khi các giả định của bạn không khớp với thực tế. Nếu có điều gì đó khiến bạn cảm thấy "không ổn", đừng bỏ qua nó -- hãy lần theo dấu vết đó cho đến khi bạn xác định được vấn đề là gì/bạn đã đưa ra giả định không chính xác nào

    Đừng chỉ "làm" một cách ngẫu nhiên cho đến khi bạn gặp may mắn -- hãy làm việc đó một cách có hệ thống

  • Đừng nản lòng vì phải debug hay google

    Một điều mà không phải tất cả những người mới bắt đầu đều nhận ra là việc dành nhiều thời gian hơn để gỡ lỗi hoặc tra cứu trên Google là điều hoàn toàn bình thường, ngay cả đối với các lập trình viên chuyên nghiệp

    Gỡ lỗi (và đấu tranh. ) là một phần thiết yếu của mã hóa. Cố gắng tránh bị căng thẳng hoặc thiếu kiên nhẫn, nếu có thể. Coi nó như một cuộc đi săn thú vị hoặc một câu đố

    Ngay cả khi bạn không đạt được tiến bộ nào trên mã thực tế của mình do một số lỗi, miễn là bạn có hệ thống, bạn vẫn đang thực hành các kỹ năng giải quyết vấn đề của mình, mặc dù theo một cách khác

    Do đó, ngay cả khi bạn dành nhiều giờ để xử lý một lỗi, bạn vẫn nên coi đó là thời gian hợp lý. Gỡ lỗi là một trong những cách tốt nhất để trở nên giỏi giải quyết vấn đề

    (Điều này thậm chí còn đúng hơn khi bạn có nhiều kinh nghiệm hơn. Hóa ra độ khó của các lỗi mà bạn gặp phải sẽ tăng lên và mở rộng theo mức độ kinh nghiệm của bạn. Không có gì lạ khi các lập trình viên có kinh nghiệm phải dành hàng tháng để theo dõi chỉ một lỗi duy nhất nếu nó trở nên đặc biệt khó chịu. )

  • Đừng ngại yêu cầu giúp đỡ

    Và cuối cùng, nếu bạn hoàn toàn bế tắc và không biết phải làm gì tiếp theo, đừng ngại nhờ sự giúp đỡ

    Các lập trình viên thường rất hữu ích. Nhiều người trong chúng ta cũng là những người tự học, và vì vậy hiểu cảm giác khó khăn khi mới bắt đầu và hoàn toàn bế tắc là như thế nào

    Lưu ý, hãy đảm bảo rằng bạn đã thực hiện thẩm định của mình (đã thử phân tách vấn đề, thử gỡ lỗi, thử tìm kiếm trên Google, v.v.) và đảm bảo rằng bạn đã viết một bài đăng có chất lượng tốt. Giống như bất kỳ nhóm văn hóa nào, các lập trình viên có xu hướng có những quy tắc và kỳ vọng ngầm nhất định. Một trong những điều quan trọng là câu hỏi của bạn phải được viết tốt (ngay cả khi nó cơ bản)

    Xem hướng dẫn của chúng tôi để biết thêm thông tin

  • Hãy thử tham gia một khóa học giới thiệu nghiêm ngặt hơn

    Điểm đầu dòng này chỉ áp dụng nếu việc tiếp xúc duy nhất của bạn với lập trình là các khóa học "giới thiệu về lập trình" thực sự cơ bản như CodeCademy. Những loại trang web đó rất tốt trong việc cho bạn biết lập trình là như thế nào và dạy một số điều cơ bản, nhưng có thể không hữu ích nếu bạn đang cố gắng tiến tới trình độ trung cấp

    Theo nguyên tắc chung, nếu bất kỳ khóa học "giới thiệu về lập trình" nào bạn tham gia không thực sự thách thức bạn hoặc không yêu cầu bạn thực hiện các bài tập và dự án nhỏ, thì bạn nên cân nhắc tìm một khóa học khắt khe hơn. Thực hành liên tục (và đấu tranh. ) là một phần thiết yếu của quá trình học tập

Để biết thêm quan điểm, đề xuất và lời khuyên về việc thực hiện bước nhảy vọt này, hãy xem các bài đăng sau

Tôi có thể tìm các bài tập thực hành và ý tưởng dự án ở đâu?

ý tưởng dự án

Nếu bạn đang cố gắng thực hiện một dự án, đây là một số danh sách ý tưởng bạn có thể tham khảo để lấy cảm hứng

  • danh sách lớn
  • Ý tưởng dự án kèm theo hướng dẫn hoặc bài viết
  • Khác
    • http. //tiện lợi. standford. edu/ - Lưu ý. trang web này thực sự có ý nghĩa hơn đối với những giáo viên đang tìm kiếm ý tưởng bài tập sáng tạo cho phần giới thiệu của họ về các khóa học lập trình, nhưng nó có thể đóng vai trò là nguồn cảm hứng tốt cho những người tự học

Bạn muốn làm điều gì đó đầy thách thức? . Ví dụ: hãy thử viết của riêng bạn

  • Các tiện ích dòng lệnh (ls, wget, curl, v.v.)
  • soạn thảo văn bản
  • IDE
  • Xem ảnh
  • Bộ Office (đại loại như Microsoft Office hoặc Libreoffice)
  • Ngôn ngữ lập trình (viết trình thông dịch hoặc trình biên dịch)
  • trình duyệt web
  • Cơ sở dữ liệu (quan hệ hoặc không quan hệ)
  • máy chủ web
  • Hệ thống kiểm soát phiên bản

Bài tập thực hành

Dưới đây là một số trang web/tài nguyên tốt để bắt đầu

  • trên reddit
  • bài tập tổng hợp
  • bài tập chuyên đề
    • Dự án Euler - Tập trung vào các vấn đề liên quan đến toán học (i. e. lý thuyết số, số nguyên tố, hệ thống số) nhằm giải quyết theo cách lập trình
    • CodeByMath - Giống như Project Euler, nhưng với các vấn đề có thể đơn giản hơn
    • Rosalind - có vấn đề với một vòng xoắn tin sinh học
  • Bài tập lập trình cạnh tranh
  • ngôn ngữ cụ thể

    • P-99 và L-99 - Bộ 99 bài toán cơ bản được biên soạn giúp bạn thành thạo prolog và lisp tương ứng
    • 4Clojure - Một tập hợp các bài tập lập trình dành riêng cho Clojure, một biến thể Lisp
  • Khác

Làm cách nào tôi có thể cải thiện kỹ năng chuyển đổi nhiệm vụ/bài toán thành chương trình (Tư duy thuật toán)?

Đây là một trong những câu hỏi thường gặp nhất

Câu trả lời chung là. Bằng cách viết nhiều chương trình

Tuy nhiên, có một bài tập đơn giản có thể giúp bạn xây dựng kỹ năng đó.

  • Chọn một hoạt động mà bạn thực hiện hàng ngày, chẳng hạn như làm bữa sáng hoặc việc gì đó tương tự. Nó không nên quá dễ dàng, nhưng cũng không quá khó
  • Viết ra các bước mà bạn nên thực hiện cho hoạt động, nhưng hãy thực hiện nó ngoài bộ nhớ vào thời điểm khác với thời điểm bạn thực sự thực hiện hoạt động đó. (Viết các bước làm bữa sáng chiều xuống. )
  • Lần tới khi bạn thực hiện hoạt động, hãy ghi chú lại và cố gắng làm theo các bước một cách cẩn thận. Cố gắng không đi chệch khỏi các bước đã viết ra của bạn và nếu bạn phải làm vậy, hãy ghi lại những điểm khác biệt
  • Cải thiện thuật toán của bạn cho đến khi bạn hài lòng
  • Hãy thử điều này với các hoạt động khác nhau. Các nhiệm vụ trở nên dễ dàng hơn và dễ dàng hơn

Nghe có vẻ ngu ngốc, nó hoạt động. Những điều trên đã được thử trên nhiều sinh viên và được chứng minh là tạo ra sự cải thiện đáng kể

Tôi không thể nghĩ ra bất kỳ ý tưởng mới hay ho nào cho một dự án. Có phải tôi chỉ đơn giản là thiếu sáng tạo?

Để bắt đầu, đây là một trích dẫn hay từ Chuck Close on (not) để chờ nguồn cảm hứng

Lời khuyên mà tôi muốn dành cho các nghệ sĩ trẻ, hoặc thực sự là bất kỳ ai lắng nghe tôi, là đừng chờ đợi cảm hứng. Cảm hứng dành cho những người nghiệp dư; . Nếu bạn đợi những đám mây tan đi và một tia sét đánh vào não bạn, bạn sẽ không làm được nhiều việc cho lắm. Tất cả những ý tưởng tốt nhất đều xuất hiện trong quá trình này; . Những điều xảy ra với bạn. Nếu bạn đang ngồi cố mơ về một ý tưởng nghệ thuật tuyệt vời, bạn có thể ngồi đó rất lâu trước khi bất cứ điều gì xảy ra. Nhưng nếu bạn vừa bắt đầu làm việc, điều gì đó sẽ xảy ra với bạn và điều gì đó khác sẽ xảy ra với bạn và điều gì đó khác mà bạn từ chối sẽ đẩy bạn sang một hướng khác. Cảm hứng là hoàn toàn không cần thiết và bằng cách nào đó lừa đảo. Bạn cảm thấy mình cần ý tưởng tuyệt vời này trước khi có thể bắt tay vào làm việc, và tôi thấy điều đó hầu như không bao giờ xảy ra

Bạn sẽ hiếm khi có ý tưởng nếu chỉ ngồi một chỗ và chờ đợi một tia cảm hứng. Thời gian của bạn sẽ được sử dụng hợp lý hơn nhiều nếu bạn cứ tiếp tục và thử xây dựng một thứ gì đó (bất cứ thứ gì. ), ngay cả khi ý tưởng có vẻ hơi ngu ngốc hoặc đã được thực hiện

Xét cho cùng, đó là điều mà các nghệ sĩ và nhạc sĩ làm -- họ không nhất thiết phải bắt đầu bằng cách cố gắng tạo ra một bản vẽ có tính sáng tạo cao hoặc sáng tác nhạc của riêng mình. Thay vào đó, họ vẽ phong cảnh hoặc bình hoa hoặc cover các bài hát hiện có. Tương tự như vậy, đừng cảm thấy bị bắt buộc khi đưa ra ý tưởng dự án. Triển khai lại các chương trình hiện có là một truyền thống lâu đời -- hãy xem bạn có thể tiến xa đến đâu

Nhưng trong mọi trường hợp, đây là một số ý tưởng và thủ thuật khác để đưa ra các dự án của riêng bạn

  • Thử thực hiện lại một dự án hiện có. Giống như cách các nhạc sĩ mới bắt đầu bằng cách hát lại các bài hát mà người khác đã viết, có thể tốt hơn nếu bắt đầu bằng cách thực hiện lại các chương trình mà người khác đã thực hiện. Ví dụ: trò chơi thùng 2D là một lựa chọn phổ biến -- các trò chơi như "Pong" hoặc "Space Invaders" rất dễ thực hiện đối với người mới bắt đầu và vẫn sẽ dạy cho bạn nhiều điều. Câu hỏi thường gặp có
  • Hãy thử kết nối lập trình với một sở thích khác. Lập trình là một kỹ năng rất hữu ích ở chỗ bạn có thể áp dụng nó vào nhiều lĩnh vực khác nhau, ngay cả những lĩnh vực hoàn toàn không liên quan đến khoa học máy tính. Ví dụ: nếu bạn quan tâm đến chính trị, bạn có thể thử phân tích các nhóm và xu hướng bỏ phiếu, nếu bạn quan tâm đến âm nhạc, bạn có thể thử viết một soundboard kỹ thuật số, nếu bạn quan tâm đến thể thao, bạn có thể thử viết một trình theo dõi bóng đá giả tưởng hoặc . Có sở thích ngoài khoa học máy tính là hữu ích ở đây
  • Thử theo dõi những thứ khiến bạn khó chịu. Nếu bạn tìm thấy bất cứ điều gì trong cuộc sống mà bạn không thích làm hoặc thấy lặp đi lặp lại, hãy tự hỏi bản thân xem đó có phải là điều bạn có thể tự động hóa không. Để biết máy tính có thể tự động hóa những thứ gì, hãy xem Tự động hóa những thứ nhàm chán. Hướng dẫn này sử dụng Python, nhưng bạn có thể làm tất cả những điều nó đề cập bằng bất kỳ ngôn ngữ lập trình nào. Hoặc, có thể thử tìm kiếm "hướng dẫn tự động hóa gia đình" trên Google để biết thêm các giải pháp vật lý

Tôi có thể tìm các ví dụ về mã và dự án tốt để nghiên cứu ở đâu?

Trước khi bắt đầu, xin lưu ý rằng nghiên cứu mã hiện có không nhất thiết là cách tốt nhất để học lập trình. Cuối cùng, lập trình là về giải quyết vấn đề ứng dụng và cách tốt nhất để giải quyết vấn đề tốt hơn là thông qua thực hành nhiều. Chỉ đọc các đoạn mã hiện có không có khả năng dạy cho bạn nhiều. Thông thường, khi mọi người nghiên cứu mã, đó là cách có mục tiêu và cụ thể. Ví dụ: nếu một nhà phát triển quan tâm đến việc viết trò chơi bằng một số công cụ, sẽ rất hữu ích nếu bạn xem mã nguồn của các bản demo khác nhau sử dụng công cụ đó.

Trong mọi trường hợp, hãy thử xem phần Trưng bày trên Github. Nó có một danh sách tuyển chọn gồm rất nhiều chương trình nguồn mở phổ biến và thú vị trải dài từ thư viện và trò chơi đến âm nhạc và phân tích dữ liệu/báo chí mở, đồng thời là một ví dụ điển hình về những thứ mọi người đang làm với mã. Mã nguồn cũng có thể xem công khai, vì vậy bạn có thể thử tải xuống và tự mày mò các dự án này

Ngoài ra, hãy xem Kiến trúc của các chương trình nguồn mở, một loạt sách điện tử miễn phí chứa nhiều hướng dẫn có hướng dẫn hơn về cách cấu trúc các chương trình nguồn mở phổ biến. Cuốn sách mới nhất trong sê-ri, "500 dòng hoặc ít hơn" có thể là một điểm khởi đầu tốt vì các chương trình đủ nhỏ để bạn có thể tự mày mò chúng một cách khả thi và sử dụng chúng như một điểm xuất phát tốt để bắt đầu dự án của riêng bạn

Làm cách nào để tôi học các chủ đề được đề cập trong một văn bằng khoa học máy tính điển hình?

Nếu bạn quan tâm đến việc tự học tài liệu có trong hầu hết các chương trình khoa học máy tính tiêu chuẩn ở cấp đại học hoặc cao đẳng, các liên kết sau đây sẽ cung cấp một cái nhìn tổng quan tốt, cùng với các liên kết đến các nguồn học tập bổ sung

Xin lưu ý rằng bằng khoa học máy tính chất lượng cao có xu hướng rất khắt khe và đòi hỏi khắt khe. Nếu bạn quan tâm đến việc theo đuổi con đường này, bạn có thể sẽ mất vài năm và rất nhiều nỗ lực để đạt được trình độ học vấn tương tự thông qua việc tự học

Làm cách nào để bắt đầu và kết thúc một dự án lớn?

Đầu tiên và quan trọng nhất. nhận thức đầy đủ, toàn diện về vấn đề

Thông thường, Gỡ lỗi Vịt cao su sẽ giúp thực hiện bước này. Giải thích một vấn đề hoặc khái niệm cho ai đó (hoặc một cái gì đó) không có kiến ​​thức hoặc hiểu biết giúp hiểu sâu hơn về vấn đề. Làm như vậy, người ta phải suy nghĩ nhiều hơn về vấn đề sẽ dẫn đến sự hiểu biết sâu sắc hơn.

Thứ hai. Đừng đi thẳng vào máy tính

Dành thời gian đáng kể để cân nhắc về vấn đề/nhiệm vụ. Tạo một số bản phác thảo, bản vẽ, một số mã giả, một số gợi ý bằng ngôn ngữ đơn giản, bất cứ thứ gì có thể hữu ích trên giấy (Tôi nhấn mạnh điều này ở đây vì các công cụ kỹ thuật số làm xao nhãng nhiệm vụ thực tế - chỉ sử dụng bút chì và giấy hoặc bảng trắng. ) Phân tích kỹ vấn đề

Điều này dẫn chúng ta đến những điều sau đây

Hãy nhớ một điều khi tự mình giải quyết các dự án lớn

Mọi thứ trên thế giới đều được làm từ những phần nhỏ hơn

Điều này có nghĩa là về cơ bản bất cứ máy móc lớn, nhà ở, tòa nhà chọc trời, ô tô, xe lửa, máy tính, v.v. bạn nhìn bao gồm nhiều cấu trúc nhỏ hơn, kết hợp lại, tạo ra sản phẩm cuối cùng. Các cấu trúc nhỏ hơn bao gồm các cấu trúc nhỏ hơn, v.v.

Điều tương tự cũng áp dụng cho các chương trình lớn. Chúng bao gồm nhiều đơn vị nhỏ hơn được ghép nối với nhau để tạo thành toàn bộ. Lý tưởng nhất (nhưng thường là không thể) mỗi đơn vị nhỏ hơn nên hoạt động (và được kiểm tra) độc lập với các đơn vị khác

Khởi đầu nhỏ. Nhìn vào vấn đề bạn đã chọn và cố gắng chia nó thành các phần nhỏ hơn. Rửa sạch và lặp lại cho đến khi bạn nghĩ rằng bạn không thể tách nó ra nữa

Khi bạn đã đạt đến điểm đó, hãy bắt đầu lập trình. Xây dựng một phần nhỏ, kiểm tra nó. Xây dựng phần nhỏ tiếp theo, kiểm tra nó, v.v.

Đừng nhìn vào bức tranh lớn, cuối cùng vì điều này sẽ làm bạn choáng ngợp. Giải quyết một phần riêng lẻ tại một thời điểm

Vấn đề lớn nhất mà các lập trình viên thiếu kinh nghiệm gặp phải là phần lớn họ bị choáng ngợp khi nhìn vào một nhiệm vụ lớn. Nhưng vấn đề này không quá khó để khắc phục

Đừng cố xem chương trình cuối cùng với tất cả chuông và còi. Tập trung vào một phần nhỏ, có thể quản lý được, hoàn thành nó và tiếp tục. Ngay cả chương trình/hệ thống phức tạp nhất cũng bao gồm các phần nhỏ, đơn giản

Làm thế nào để tôi theo kịp với nó?

Hãy tưởng tượng rằng bạn đang làm việc cho một khách hàng và khách hàng cần xem và phê duyệt thiết kế của bạn trước khi bạn bắt đầu viết mã vì họ có thể có nhận xét này hoặc nhận xét khác hoặc họ muốn đảm bảo rằng giao tiếp giữa họ và bạn đã hiệu quả và bạn hiểu ý kiến ​​của họ.

  • Chuẩn bị một mô tả chi tiết về dự án của bạn, cái gọi là "đặc tả thiết kế chức năng"
  • Thảo luận về đặc tả thiết kế chức năng đó với khách hàng tưởng tượng của bạn (tôi. e. giải thích nó với một số đồ vật vô tri vô giác, hoặc nếu bạn có ai đó có thể chịu đựng được, với họ)
  • Tinh chỉnh đặc tả thiết kế chức năng - quay lại bước trên - lặp lại cho đến khi bạn hài lòng
  • Chuẩn bị lịch trình dự án với thời hạn cố định (thực tế)
  • Bám sát những điều trên (vì nếu không, khách hàng tưởng tượng sẽ yêu cầu phí trả chậm có thể khá đắt)

Một số lời khuyên bổ sung

  • Lúc đầu, hãy quên mã hoàn toàn và tưởng tượng chương trình hoàn toàn từ quan điểm của người dùng
  • Viết ra danh sách các tính năng bạn muốn phần mềm thực hiện
  • Viết ra danh sách các tính năng mà phần mềm KHÔNG CÓ. (Điều này sẽ giúp bạn tránh khỏi sự lo lắng về tính năng với câu "thật tuyệt nếu nó có thể làm được điều này. ". Các chương trình trở nên quá lớn là lý do chính khiến mọi người từ bỏ chúng sau một vài tuần. )
  • Viết ra một vài bản vẽ về màn hình mà người dùng sẽ thấy và quy trình làm việc của họ. Đây không phải là bản thiết kế hoặc để hiển thị chúng sẽ trông như thế nào, mà là "đầu tiên người dùng ở trang này, sau đó họ có thể truy cập trang này". Phác thảo nó giúp bạn không quên bất kỳ điều lớn lao nào
  • Tìm hiểu cách sử dụng git và tạo tài khoản github. Thật tuyệt vời để sao lưu và cũng thu hút đánh giá mã. (Bỏ qua nhận xét của bất kỳ ai về kiểu mã, 99% thời gian đó là một cuộc tranh luận không hiệu quả. )

Những lo lắng và sợ hãi chung

Tôi có quá già để viết mã không?

Không, bạn có thể học lập trình và có thể có một sự nghiệp làm việc đó ở mọi lứa tuổi

Có một lầm tưởng phổ biến rằng cách duy nhất để giỏi lập trình là bắt đầu học viết mã từ khi còn nhỏ. Điều này là sai -- trong khi có một số người bắt đầu học viết mã sớm (và do đó có thể có một chút khởi đầu thuận lợi), hầu hết mọi người sẽ bắt đầu học viết mã khi họ vào đại học hoặc muộn hơn

Học hỏi là điều bạn có thể làm ở mọi lứa tuổi -- thay vì tập trung vào người khác, hãy chỉ tập trung vào bản thân và tốc độ tiến bộ của cá nhân bạn. Hãy thử và trau dồi một "tư duy phát triển" thay vì một "tư duy cố định"

Có điều gì tôi nên học trước không?

Có rất ít điều kiện tiên quyết -- phần lớn, bạn có thể bắt đầu ngay việc học viết mã

Điều kiện tiên quyết thực sự duy nhất là

  • Bạn biết cách đánh máy (trừ khi bạn đang sử dụng ngôn ngữ kéo và thả như Scratch)
  • Bạn sở hữu một chiếc máy tính
  • Bạn biết cách google/tìm kiếm câu trả lời một cách độc lập

Nó cũng hữu ích nếu bạn biết một số môn toán (đến cấp độ đại số cơ bản) và nếu bạn biết tiếng Anh (vì nhiều tài nguyên trực tuyến bằng tiếng Anh), nhưng cả hai đều không bắt buộc

Tất cả những điều trên ít nhiều cũng đúng nếu bạn muốn lấy bằng chính quy tại một trường đại học. Hầu hết các trường đại học và cao đẳng mong muốn sinh viên mới vào không biết gì về khoa học máy tính và lập trình, và sẽ bắt đầu dạy bạn từ đầu (mặc dù trong một số trường hợp, bạn có thể bỏ qua một hoặc hai khóa học giới thiệu nếu bạn vượt qua bài kiểm tra hoặc thể hiện đủ kỹ năng trước đó). Nếu bạn đang học trung học hoặc sớm hơn và muốn học khoa học máy tính ở trường đại học, thì có thể tốt hơn nếu bạn bắt đầu học trước để có một khởi đầu thuận lợi, nhưng bạn không nên cảm thấy bắt buộc phải làm như vậy

Một số trường đại học cũng có thể có các điều kiện tiên quyết nghiêm ngặt hơn về giáo dục phổ thông hoặc toán học (ví dụ: hầu hết các trường cao đẳng đều có môn giải tích là điều kiện tiên quyết), nhưng điều này sẽ khác nhau giữa các trường cao đẳng và là điều bạn nên trực tiếp điều tra và hỏi các trường cao đẳng và đại học mà bạn ' . Xem dưới đây để biết thêm chi tiết

Tôi có cần phải giỏi toán không?

Không nhất thiết - lập trình và khoa học máy tính là một lĩnh vực rộng và rộng, và việc bạn có cần giỏi toán hay không phụ thuộc vào việc bạn chọn chuyên ngành gì

Ví dụ, một số lĩnh vực lập trình đòi hỏi kỹ năng toán học tốt. Các trò chơi 2D và 3D sẽ sử dụng thường xuyên các vectơ, ma trận và đại số tuyến tính;

Nói chung, chủ đề càng nâng cao và phức tạp thì bạn càng cần phải có một nền tảng toán học vững chắc. Nếu mục tiêu của bạn là có thể giải quyết những loại vấn đề phức tạp đó, thì việc có một nền tảng tốt sẽ là vô giá

Tuy nhiên, cũng giống như nhiều khía cạnh của khoa học máy tính và lập trình không yêu cầu hiểu biết tốt về toán học. Điều duy nhất bạn thực sự cần biết là cách cộng, trừ, nhân và chia, và có thể là một chút đại số cơ bản. Nhiều lập trình viên trải qua toàn bộ sự nghiệp của họ mà hầu như không phải làm bất kỳ phép toán nào

Đặc biệt, nhiều vai trò đối mặt với sản phẩm (e. g. phát triển web, phát triển di động) yêu cầu kiến ​​thức rất tối thiểu về toán học. Trong các phân ngành đó, điều quan trọng nhất là khả năng viết mã mạnh mẽ và có thể bảo trì của bạn, cũng như khả năng tìm ra cách xây dựng những thứ có giá trị cho người dùng của bạn

Trong mọi trường hợp, nếu bạn không giỏi toán, bạn chắc chắn có thể học và cải thiện. Rốt cuộc, có lẽ bạn cũng chưa giỏi lập trình lắm, nhưng bạn đang ở đây, học cách viết mã. Hãy xem Khan Academy và bạn có thể tìm thấy các bài học miễn phí bắt đầu từ môn toán cơ bản trở lên. Ngoài ra, hãy xem /r/learnmath để biết thêm tài nguyên

Tuy nhiên, xin lưu ý rằng câu trả lời sẽ hơi khác một chút nếu bạn quan tâm đến việc lấy bằng Khoa học Máy tính. Nhiều trường đại học hoặc cao đẳng sẽ có những điều kiện tiên quyết cụ thể mà bạn cần phải đáp ứng trước khi bạn có thể vào chuyên ngành hoặc tốt nghiệp (các lớp giải tích, v.v.). Và, vì Khoa học Máy tính, ở một mức độ nhất định, bạn gần như chắc chắn sẽ học về toán rời rạc, viết chứng minh và các chủ đề tương tự khác trong khi lấy bằng cấp của mình. Bạn không cần phải giỏi toán bẩm sinh để học những chủ đề này (hoặc thực sự là bất kỳ chủ đề toán học nào), nhưng việc có một chút thành thục về toán học chắc chắn sẽ không ảnh hưởng gì và có thể sẽ giúp quá trình học diễn ra suôn sẻ.

Bằng cấp CS tập trung vào toán học sẽ khác nhau chính xác như thế nào giữa các trường. Một số trường nhấn mạnh vào lý thuyết bao quát, trong khi những trường khác không nhấn mạnh cả hai để tập trung vào ứng dụng. (Và một số trường nhấn mạnh cả hai). Nếu bạn muốn tìm hiểu thêm, bạn nên điều tra trực tiếp các yêu cầu và cấu trúc bằng cấp của bất kỳ trường cao đẳng hoặc đại học nào mà bạn muốn theo học. Chúng ta sẽ không thể dễ dàng dự đoán một số trường đại học nhất định sẽ đi theo hướng nào

Tóm lại, bạn không nhất thiết phải giỏi toán nếu muốn có một sự nghiệp thành công với tư cách là một nhà phát triển. Nếu bạn muốn trở thành một nhà khoa học máy tính, bạn sẽ phải học một lượng kha khá toán học. Nếu bạn muốn giải các bài toán khó hơn/trong một số lĩnh vực nhất định, toán học có thể là một công cụ hữu ích, tùy thuộc vào tình huống

Tôi Google rất nhiều hoặc không biết cách hoàn thành việc gì đó trước khi bắt đầu. Như vậy có được không?

VÂNG. Đây là một chủ đề thảo luận về chủ đề từ nhiều góc độ khác nhau. Có nhiều hơn nữa giống như nó

Lập trình có khó không?

Lập trình giống như hầu hết các kỹ năng. nó tương đối dễ dàng để tìm hiểu những điều cơ bản và áp dụng chúng. Nếu bạn muốn học cách đánh bát - bạn sẽ tìm ra cách đặt ngón tay của mình vào các lỗ và đẩy nó theo hướng chung của các chốt. Bạn thậm chí có thể xô đổ một số người và không thấy việc đó đặc biệt khó khăn.

Lập trình cũng giống như hầu hết các kỹ năng ở chỗ nó liên quan nhiều hơn đến việc chuyển từ người mới bắt đầu thành người có trình độ kỹ năng nhất định. Để tiếp tục tương tự bowling. nếu bạn muốn trở thành một vận động viên ném bóng thi đấu, bạn sẽ phải dành nhiều năm để thành thạo kỹ năng này. Điều này cũng đúng với mã hóa. bạn sẽ cần dành thời gian (tức là rất nhiều) để cố gắng tìm ra lý do tại sao chương trình ngu ngốc này không hoạt động ngay cả khi bạn đã kiểm tra nó ba lần. Bạn sẽ cần phải đọc sách, ngồi học và nói chuyện với mọi người về nó. Bạn sẽ học biệt ngữ. Bạn cũng sẽ chuyên sâu - tìm hiểu sâu hơn về một vài lĩnh vực nhỏ. Tất cả điều này vẫn sử dụng những điều cơ bản của lập trình, nhưng theo những cách mới và sự kết hợp mới. Tìm giải pháp cho các vấn đề của bạn sẽ khó khăn. Tập trung hàng giờ vào cùng một vấn đề sẽ rất khó. Điều đó không sao cả, bởi vì nếu bạn thích nó và bạn có động lực - những phần khó khăn sẽ không khó khăn bằng và bạn có thể vượt qua chúng

Tóm lại, lập trình có thể khó. Giống như với hầu hết mọi thứ, nó cần nỗ lực và nỗ lực đó có thể khó khăn. Đừng nản lòng - nếu bạn thích nó, phần khó khăn sẽ có phần thưởng xứng đáng

Người mới bắt đầu gặp một số rắc rối về các vấn đề và bài tập có phải là điều bình thường không?

Người mới bắt đầu bị ngã xe đạp một vài lần có phải là điều bình thường không?

Hoàn toàn đồng ý

Thất bại và đấu tranh là một phần rất quan trọng và tự nhiên của quá trình học tập. Thất bại dạy bạn cách không làm mọi việc và cho bạn phản hồi có giá trị về mức độ bạn hiểu điều gì đó. Thất bại chỉ là một từ khác để chỉ kinh nghiệm thu được

Thất bại và chật vật là điều mà mọi người mới bắt đầu đều trải qua. bạn phải đấu tranh. Vì vậy, thay vì cảm thấy nản lòng, bạn nên nắm lấy điều này. đấu tranh là một dấu hiệu cho thấy bạn đang thử thách chính mình. Sử dụng nó như một hướng dẫn để giúp bạn tìm ra tài liệu nào bạn cần xem lại và học tiếp theo, hoặc những câu hỏi bạn nên đặt ra

Ngay cả các chuyên gia cũng thất bại và gặp khó khăn khi họ cần học tài liệu mới (mặc dù họ có xu hướng phục hồi/sử dụng thất bại tốt hơn như một cách để giúp họ tăng tốc việc học)

Trên thực tế, nếu bạn không gặp khó khăn, đó là dấu hiệu cho thấy bạn gần như chắc chắn đang làm sai điều gì đó. Nếu mọi thứ đều dễ dàng, điều đó có nghĩa là

  1. Bạn không thử thách bản thân
  2. Bạn không thúc đẩy bản thân học một cái gì đó thực sự mới
  3. Bạn không buộc bản thân phải thực sự chắc chắn rằng mình hiểu tài liệu bằng cách cố gắng áp dụng nó.

Nó tương tự như tập thể dục. Nếu bạn không cảm thấy mệt mỏi về thể chất sau khi tập luyện, bạn có thực sự đạt được nhiều điều từ bài tập đó không?


Câu hỏi về học tập

"Biết một ngôn ngữ" hay "biết lập trình" có nghĩa là gì?

"Biết một ngôn ngữ" để lập trình cũng giống như biết một ngôn ngữ để nói. Bạn có thể nói rằng bạn biết nó khi bạn có thể sử dụng nó một cách hiệu quả, ngay cả khi bạn không biết "mọi thứ" về nó. Để "biết cách lập trình" thường có nghĩa là bạn hiểu các khái niệm liên quan đến lập trình và bạn có thể sử dụng chúng hiệu quả bằng một hoặc nhiều ngôn ngữ. Đọc một số chủ đề trước đây về chủ đề này

Tôi mới bắt đầu học ngôn ngữ X. Tôi có nên bắt đầu học ngôn ngữ Y?

Đặc biệt khi bạn mới bắt đầu học lập trình, tốt nhất nên học một ngôn ngữ và gắn bó với nó một thời gian. Ngay cả khi một miền vấn đề cụ thể sử dụng một ngôn ngữ cụ thể mà bạn chưa biết, trước tiên hãy học cách lập trình. Khi bạn hiểu các nguyên tắc cơ bản (điều khiển luồng, xử lý lỗi, I/O, triển khai thuật toán, cấu trúc dữ liệu, v.v. ), thì bạn có thể bắt đầu lo lắng về việc chọn các ngôn ngữ khác nhau

Tôi có nên học nhiều hơn một ngôn ngữ lập trình cùng một lúc không?

Trừ khi bạn có lý do chính đáng, hầu hết những người mới bắt đầu chỉ nên gắn bó với một ngôn ngữ trong ít nhất vài tháng. Đây là một cách học hiệu quả hơn vì nhiều lý do

  1. Những điều cơ bản của hầu hết các ngôn ngữ là khá giống nhau. Ví dụ, hầu hết các ngôn ngữ xử lý các câu lệnh if theo cùng một cách. Dành thời gian học hai hương vị của cùng một chất liệu không nhất thiết là cách sử dụng thời gian tốt và có thể gây nhầm lẫn cho người mới bắt đầu
  2. Phần khó nhất của việc học cách lập trình không phải là học cách một ngôn ngữ lập trình hoạt động. nó đang học cách giải quyết vấn đề bằng mã. Vì vậy, bạn muốn tối đa hóa lượng thời gian dành cho việc thực hành giải quyết vấn đề bằng mã, thay vì dành thời gian đó để học thêm những chi tiết vụn vặt về ngôn ngữ cụ thể/phải lãng phí chất xám để theo dõi sự khác biệt giữa các ngôn ngữ
  3. Việc học ngôn ngữ thứ hai sẽ dễ dàng hơn rất nhiều khi bạn đã thành thạo ngôn ngữ thứ nhất và có kỹ năng giải quyết vấn đề vững chắc

Có một số ngoại lệ đối với hướng dẫn này. Bạn có thể học ngôn ngữ thứ hai cùng với ngôn ngữ thứ nhất nếu

  1. ngôn ngữ thứ hai không phải là ngôn ngữ lập trình. Ví dụ, bạn có thể học các ngôn ngữ đánh dấu (e. g. HTML hoặc CSS) cùng với một ngôn ngữ lập trình (e. g. C, C++, C#, Java, JavaScript, Python, Ruby)
  2. nó cần thiết cho các loại dự án mà bạn muốn làm việc. Điều quan trọng là giữ cho bản thân có động lực để tiếp tục học và nếu điều đó có nghĩa là học hai ngôn ngữ lập trình cùng một lúc, thì hãy cứ như vậy.
  3. nếu bạn có một giáo viên hoặc người cố vấn tận tâm để hướng dẫn bạn. Các giáo viên và người cố vấn có năng lực có thể giúp sắp xếp hợp lý quá trình học tập của bạn, điều này sẽ bù đắp cho bất kỳ sự kém hiệu quả nào

Nếu bạn không coi mình là người mới bắt đầu và cảm thấy thoải mái khi sử dụng ngôn ngữ lập trình của mình để hoàn thành các dự án phức tạp vừa phải, thì tất nhiên bạn nên thử học nhiều ngôn ngữ cùng một lúc. Tại thời điểm này, bạn nên có đủ hiểu biết về lập trình để bắt đầu tiếp thu ngôn ngữ mới với tốc độ nhanh và nên biết rõ bạn có khả năng học bao nhiêu cùng một lúc.

Làm cách nào tôi có thể có/duy trì động lực để học lập trình?

Kiểm tra /r/GetMotivated/ và /r/GetDisciplined

Chúng ta thường nghĩ "nếu tôi có đủ động lực. sau đó tôi có thể. ", tuy nhiên; đó là hành động thúc đẩy động lực. Đầu tiên là hành động, sau đó là động lực. Tìm các chương trình nhỏ, cụ thể để tạo. Loại bỏ những phiền nhiễu. Nhận plugin trình duyệt để chặn các trang web như Reddit, Facebook và Twitter. Hãy dành một phút để hình dung bạn sẽ cảm thấy tuyệt vời như thế nào khi trở thành một lập trình viên hiểu biết hơn

Dưới đây là một số chủ đề trước đây về chủ đề này


Làm thế nào để tôi bắt đầu trong X?

Làm cách nào tôi có thể bắt đầu tạo trò chơi điện tử?

Trò chơi điện tử hiện đại được thực hiện bằng cách sử dụng công cụ trò chơi. thư viện phần mềm xử lý các tác vụ phức tạp như đồ họa, âm thanh, vật lý và kết nối mạng. Có nhiều tùy chọn có sẵn - Tuy nhiên, các công cụ sau đây được khuyến khích mạnh mẽ cho người mới bắt đầu vì chúng được phát triển miễn phí và có tài liệu tốt nhất để học

  • Thống nhất (C#). Thích hợp cho các trò chơi 2D & 3D trên thiết bị di động, máy tính để bàn, trình duyệt/trực tuyến & bảng điều khiển
  • Cấu trúc2 (JavaScript). dành cho thiết bị di động 2D, máy tính để bàn, trình duyệt/trực tuyến
  • Pygame (Trăn). công cụ cho trò chơi máy tính để bàn 2D
  • TÌNH YÊU (LUA). Thích hợp cho các trò chơi máy tính để bàn 2D

Luôn nhớ rằng mục tiêu của bạn là phát triển game chứ không phải engine

Công cụ sẽ giúp bạn bắt đầu với đồ họa và điều khiển người dùng cho trò chơi của mình, nhưng bạn vẫn cần học kỹ ngôn ngữ lập trình để viết logic trò chơi của mình - vì vậy hãy chọn một cuốn Sách hay hoặc Tài nguyên trực tuyến

Quan trọng nhất. bắt đầu đơn giản. Bạn sẽ muốn tham gia ngay và tạo ra trò chơi mơ ước của mình ngay lập tức, nhưng hãy nhớ rằng cách duy nhất để leo lên một ngọn núi là thực hiện nhiều bước nhỏ. Dưới đây là danh sách các trò chơi luyện tập đơn giản được liệt kê theo thứ tự độ khó tăng dần - hãy cân nhắc thử một vài trong số này trước khi chuyển ngay đến mục tiêu cuối cùng của bạn

Đảm bảo xem Câu hỏi thường gặp về /r/gamedev, đọc hướng dẫn "Cách bắt đầu" /r/gamedev và thực hiện một số tìm kiếm cho các chủ đề trước đây trên /r/gamedev và /r/learnprogramming

Làm cách nào để tôi bắt đầu tạo trang web/tạo ứng dụng web/phát triển web?

Có nhiều cách khác nhau để tìm hiểu về phát triển web, nhưng nói chung, các kỹ năng cốt lõi mà bạn cần thường được chia thành kỹ năng giao diện người dùng (mã chạy trên trình duyệt web của người dùng) và kỹ năng phụ trợ (mã chạy trên máy chủ của bạn)

Nói chung, hầu hết mọi người sẽ khuyên bạn nên bắt đầu bằng cách học HTML, CSS và Javascript (theo thứ tự đó), đây là ba ngôn ngữ cốt lõi chạy trên mọi trình duyệt web và tạo nên mọi trang web.

Bạn có thể tìm thêm thông tin trên /r/webdev FAQ. Đây là một cái khác cho người mới bắt đầu

Làm cách nào để bắt đầu tạo ứng dụng dành cho thiết bị di động/ứng dụng Android/ứng dụng iOS/ứng dụng Windows phone?

Bạn sẽ cần học một ngôn ngữ lập trình khác nhau cho từng loại điện thoại thông minh

  • Các ứng dụng Android được mã hóa chủ yếu bằng Kotlin hoặc Java -- xem Câu hỏi thường gặp của /r/androiddev để biết thêm thông tin
  • Các ứng dụng iOS được mã hóa bằng Objective-C hoặc Swift -- xem thanh bên của /r/iosprogramming và wiki của chúng (được lưu trữ trên Github) để biết thêm thông tin
  • Các ứng dụng Windows Phone được mã hóa bằng C#, Visual Basic hoặc Javascript -- xem thanh bên của /r/WPDev để biết thêm thông tin

Bạn cũng có thể tạo các ứng dụng có thể chạy trên cả ba điện thoại thông minh chính bằng cách sử dụng các công nghệ như Phonegap và Titanium -- chúng cho phép bạn viết ứng dụng của mình một lần bằng HTML, CSS và Javascript và chạy ứng dụng của bạn trên mọi nền tảng

Xem để biết thêm thông tin. Đây là một chủ đề quá khứ về chủ đề này. http. //đỏ. nó/352f09

Tuy nhiên, hãy nhớ rằng nhiều, nếu không phải tất cả, các nguồn trên đều hướng đến những người đã có một số kinh nghiệm lập trình trước đó. Nếu bạn chưa bao giờ lập trình trước đây, bạn có thể muốn bắt đầu học một ngôn ngữ có nhiều tài nguyên hơn dành cho người mới bắt đầu. Khi bạn đã có một số kinh nghiệm và tìm hiểu về các khái niệm cơ bản đằng sau lập trình, bạn sẽ thường thấy rằng việc học một ngôn ngữ mới và bắt đầu tìm hiểu về phát triển di động sẽ dễ dàng hơn nhiều. Phần trong Câu hỏi thường gặp của chúng tôi có thêm một số thông tin về nơi bắt đầu

Làm thế nào để tôi tự động hóa mọi thứ?

Đối với Windows, có một số ngôn ngữ lập trình chuyên dụng, chẳng hạn như Autohotkey và AutoIt

Một giải pháp thay thế đa nền tảng khả thi khác là Python. Tự động hóa những thứ nhàm chán với Python là một tài nguyên học tập tuyệt vời

Nếu bạn muốn tự động hóa MS-Office, hãy sử dụng ngôn ngữ lập trình tích hợp sẵn Visual Basic for Applications (VBA). /r/vba dành riêng cho lập trình VBA


tốt nhất là gì

/u/thekodols đã tổng hợp danh sách hơn 150 câu hỏi và câu trả lời "điều gì là tốt nhất" trong bài đăng này bao gồm nhiều ngôn ngữ, công cụ và chủ đề khác nhau


Thuật ngữ và từ vựng

Sự khác biệt giữa khoa học máy tính, kỹ thuật máy tính, công nghệ phần mềm, lập trình và viết mã là gì?

CS/CE/SE so với Lập trình/Viết mã

Khoa học máy tính (CS), kỹ thuật máy tính (CE), công nghệ phần mềm (SE), lập trình và mã hóa là tất cả các thuật ngữ có liên quan với nhau nhưng khác biệt một cách tinh tế với nhau, thường khiến người mới bắt đầu khó phân biệt chúng

Sự khác biệt đầu tiên bạn nên thực hiện là phân biệt giữa CS/CE/SE và lập trình/viết mã. CS, CE và SE là tất cả các lĩnh vực nghiên cứu. Nói "Tôi đang học khoa học máy tính" sẽ tương tự như nói "Tôi đang học hóa học" hoặc "Tôi đang học văn". Ngược lại, lập trình và viết mã là những hoạt động -- chúng là những việc bạn làm. Nói một cách ẩn dụ, học CS/CE/SE sẽ giống như học lý thuyết âm nhạc, trong khi học lập trình/viết mã giống như học cách chơi một nhạc cụ cụ thể

Về mặt lý thuyết, bạn có thể học cái này và không học cái kia, nhưng kinh nghiệm của bạn sẽ phong phú hơn nhiều nếu bạn học cả hai.

Một điểm khác biệt nữa là trong khi CS/CE/SE là những thứ bạn có thể học, thì học lập trình là thứ chỉ có được thông qua thực hành. Và trên thực tế, điều mà hầu hết các trường đại học và phổ thông sẽ làm là chính thức dạy một ngôn ngữ để dạy những điều cơ bản về viết mã, sau đó sẽ tập trung vào dạy CS, CE và SE và để bạn học cách lập trình thông qua thực hành và hoàn thành bài tập về nhà.

CS so với CE so với SE

Sự khác biệt tiếp theo bạn nên thực hiện là giữa CS, CE và SE. Tóm lại, mặc dù có nhiều điểm trùng lặp, nhưng "khoa học máy tính" ít liên quan đến máy tính hay khoa học mà là một lĩnh vực toán học ứng dụng nghiên cứu khái niệm về khả năng tính toán. Kỹ thuật máy tính tương tự như CS, nhưng có xu hướng tập trung nhiều hơn vào phần cứng cấp thấp hơn -- nó giống như sự giao thoa giữa khoa học máy tính và kỹ thuật điện. Và cuối cùng, công nghệ phần mềm thiên về cách xây dựng các chương trình lớn và phức tạp đồng thời ngăn không cho chúng sụp đổ dưới sức nặng của chính chúng -- nó giống như CS và CE, nhưng ít lý thuyết hơn

Bạn có thể tìm thấy một cái nhìn tổng quan chi tiết hơn ở đây. http. //www. reddit. com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/

Lập trình vs Mã hóa

Và cuối cùng, bạn có lập trình vs mã hóa. Sự khác biệt giữa hai thuật ngữ này rất nhỏ -- nhiều người sử dụng chúng thay thế cho nhau. Nói chung, thuật ngữ "lập trình" dường như có ý nghĩa tích cực hơn một chút so với "viết mã". Nếu bạn nói "Tôi là một lập trình viên", điều đó ngụ ý một mức độ chuyên nghiệp nhất định -- điều đó cho thấy rằng bạn không chỉ có thể viết mã mà còn nắm vững các nguyên tắc và lý thuyết cơ bản, biết cách giao tiếp với khách hàng và làm việc

Ngược lại, nếu bạn nói "Tôi là một lập trình viên", điều đó thường ngụ ý rằng bạn tập trung hoàn toàn vào việc viết mã và ít tập trung vào những thứ khác

Tuy nhiên, một lần nữa, các ý nghĩa khác nhau ở đây rất nhỏ -- bạn có thể sử dụng hai thuật ngữ thay thế cho nhau trong phần lớn các trường hợp

Sự khác biệt giữa C, C++, Objective-C và C# là gì?

TL; DR - C, C++, Objective-C và C# không phải là các hương vị khác nhau của cùng một ngôn ngữ

C là ngôn ngữ nhỏ nhất và lâu đời nhất trong số các ngôn ngữ này. Ban đầu nó được tạo ra làm ngôn ngữ lập trình hệ thống cho hệ điều hành Unix và ngày nay vẫn được sử dụng rộng rãi để lập trình ứng dụng

C++ là một ngôn ngữ lập trình đa năng, rất phổ biến, ban đầu dựa trên C. Với một số điều chỉnh, hầu hết mã C có thể được biên dịch thành mã C++. Tuy nhiên, C ++ bổ sung một tập hợp lớn các tính năng ngôn ngữ làm thay đổi đáng kể cách sử dụng ngôn ngữ so với cách sử dụng C. Nó thường được coi là một thực tế xấu để viết mã kiểu C trong C ++

Mục tiêu-C là tập hợp thay thế nghiêm ngặt của C, có nghĩa là tất cả mã C hợp lệ cũng là mã Mục tiêu-C hợp lệ. Objective-C gần như không phổ biến như C hoặc C++ và ngày nay chủ yếu được sử dụng để phát triển cho nền tảng OS X và iOS của Apple

C# không dựa trên C theo bất kỳ ý nghĩa kỹ thuật nào. C# là ngôn ngữ có mục đích chung được thiết kế bởi Microsoft và có nhiều điểm tương tự như Java. Nó biên dịch thành một dạng trung gian chạy trong máy ảo (CLR), không giống như ba ngôn ngữ trước đó, tất cả đều được biên dịch thành mã máy gốc. Trong khi C# mượn các yếu tố cú pháp từ C và C++ (cũng như Java), nó không có mối quan hệ kỹ thuật thực sự nào với các ngôn ngữ đó

Sự khác biệt giữa Java và JavaScript là gì?

Java có liên quan đến JavaScript giống như cách quả nho có liên quan đến quả bưởi

Tương tự như câu hỏi trước, Java và JavaScript không liên quan đến bất kỳ ý nghĩa kỹ thuật nào. Họ chia sẻ một chút cú pháp vì cả hai đều bị ảnh hưởng bởi C, nhưng đó là về nó. Wikipedia có một lời giải thích tốt về lý do tại sao sự giống nhau về tên tồn tại.

Lớp so với Giao diện

Đây là một câu hỏi xuất hiện thường xuyên và thường gây nhầm lẫn cho những người mới bắt đầu vì nhìn bên ngoài cả hai dường như làm những việc tương tự nhau

/u/donsagiv đã viết một ELI5 tuyệt vời và đơn giản (liên kết tới nhận xét ban đầu)

Một hướng đạo sinh có huy hiệu xứng đáng để họ làm những việc nhất định, chẳng hạn như nấu ăn, bơi lội, đốt lửa trại, chèo thuyền, v.v. Đội trinh sát nam không quan tâm làm thế nào họ có thể làm những việc này (tôi. e. bơi kiểu bơi ếch, bơi ngửa, v.v. ) miễn là chúng đáp ứng đặc điểm kỹ thuật của nó (có thể di chuyển trong nước bằng một chuyển động nhất định, có kiểm soát của cơ thể trong khi vẫn nổi). Mỗi nam hướng đạo sinh có thể có 0 hoặc nhiều huy hiệu, nghĩa là họ được chứng nhận để làm từng việc mà huy hiệu xứng đáng

Mặc dù vậy, họ vẫn là hướng đạo sinh. Mỗi hướng đạo sinh được phép tham dự các cuộc họp định kỳ của họ, mặc đồng phục của họ, v.v. Hướng đạo sinh không cần huy hiệu để bơi. Tuy nhiên, họ không thể đi bè trên sông trừ khi họ có huy hiệu bơi. Chỉnh sửa. huy hiệu bơi không thể tự bơi. Nó chỉ đơn thuần là một dấu hiệu cho thấy cậu bé trinh sát được gắn vào nó có thể bơi

Hướng đạo sinh là lớp học và huy hiệu bơi lội là một giao diện mà nó thực hiện

Mọi đối tượng của lớp được khởi tạo đều có các chức năng giống nhau (i. e. tham dự các cuộc họp định kỳ, đồng phục, v.v.). Nếu lớp thực hiện một giao diện, thì lớp PHẢI có khả năng thực hiện các chức năng được chỉ định trong giao diện (i. e bơi lội, chèo thuyền). Một số lớp không thể được sử dụng trong một số phần mã của bạn trừ khi chúng triển khai giao diện đó (tôi. e. đi bè trên sông cần có phù hiệu bơi). Chỉnh sửa. Một giao diện là một sự trừu tượng, vì vậy nó không thể được khởi tạo. (Bản thân huy hiệu không biết bơi. ) Tóm lại, một giao diện là một hợp đồng mà một lớp phải tuân theo để lớp triển khai nó

Các giao diện và các lớp hoạt động khác nhau trong các ngôn ngữ khác nhau (Ví dụ của tôi là từ những gì tôi biết trong C# với khái quát). Tôi đề nghị bạn đọc tài liệu cho ngôn ngữ của bạn một cách cẩn thận

Các giao diện cũng có thể được sử dụng để thu thập các đối tượng từ các lớp khác nhau (chúng hoạt động như một kiểu dữ liệu)

Bạn có thể thu thập tất cả các hướng đạo sinh biết bơi, bất kể quốc tịch, giới tính, tuổi tác, v.v. và đi bè trên sông. Bạn không cần biết bất cứ điều gì về từng nam hướng đạo sinh, nhưng bạn biết rằng mỗi người trong số họ đều có thể bơi


Kiểm soát Nguồn/Phiên bản/Sửa đổi là gì?

Hệ thống kiểm soát phiên bản (VCS) là một công cụ theo dõi các thay đổi đối với mã của bạn và cho phép bạn thực hiện những việc hữu ích như hoàn tác lỗi mã hóa và xem điều gì đã thay đổi trong mã theo thời gian. Hệ thống kiểm soát phiên bản phân tán hiện đại (DVCS) cũng cho phép bạn làm việc dễ dàng với các lập trình viên khác trên cùng một mã. Và vâng, bạn chắc chắn nên sử dụng hệ thống kiểm soát phiên bản

Hai DVCS phổ biến nhất là git và Mercurial;

Vậy làm thế nào để tôi bắt đầu với kiểm soát sửa đổi?

Bạn có thể bắt đầu với git bằng cách đọc sách hướng dẫn về git, được viết bởi một redditor, và cả sách git miễn phí

Một hướng dẫn ngắn gọn, hay về Mercurial có tại đây

Chúng tôi có liên kết đến các trang web tải xuống cho cả hai phần mềm trên

IDE là gì?

IDE là Môi trường phát triển tích hợp, là một ứng dụng GUI thường bao gồm trình soạn thảo văn bản với tính năng hoàn thành mã và đánh dấu cú pháp, một số tính năng quản lý dự án, trình biên dịch hoặc trình thông dịch (có thể định cấu hình hoặc bao gồm) và nhiều tính năng ưa thích khác để viết . Giải pháp thay thế cho việc sử dụng IDE là tự động làm những gì IDE đang làm cho bạn. Phương pháp này yêu cầu lập trình viên sử dụng các công cụ riêng biệt và có kiến ​​thức chuyên sâu hơn về quy trình phát triển

Đối với người mới bắt đầu, có các đối số cho cả hai phương pháp phát triển này

  • Sử dụng IDE có nghĩa là bạn không cần phải biết nhiều về quy trình phát triển, không phải sử dụng giao diện dòng lệnh và không phải định cấu hình các công cụ đó để hoạt động chính xác với nhau;

  • Mặt khác, làm việc từ dòng lệnh có nghĩa là bạn không cần phải phù hợp với suy nghĩ của nhà thiết kế IDE và vì ít quá trình phát triển bị ẩn khỏi bạn hơn, bạn sẽ hiểu rõ hơn về việc xây dựng phần mềm

Việc sử dụng IDE so với các công cụ riêng biệt thường tùy thuộc vào sở thích cá nhân (tất nhiên trừ khi chủ lao động/trường học của bạn yêu cầu sử dụng một môi trường phát triển cụ thể). Nếu bạn chưa từng sử dụng IDE trước đây, hãy tải xuống một trong những IDE phổ biến và tìm hiểu về nó. Và nếu bạn chưa bao giờ sử dụng vim hoặc mã biên dịch từ dòng lệnh, hãy dùng thử và xem bạn có thích nó không. Có thể tìm thấy danh sách các IDE phổ biến và trình soạn thảo văn bản nhẹ trong Công cụ lập trình


Máy tính và Hệ điều hành

Tôi nên sử dụng loại hệ điều hành nào?

Một câu hỏi phổ biến mà nhiều người mới bắt đầu đặt ra là họ nên sử dụng loại hệ điều hành nào -- Windows, Mac hoặc Linux

Thành thật mà nói, điều đó không thành vấn đề -- trong thời đại ngày nay, chất lượng và mức độ trưởng thành của các công cụ có sẵn cho bạn sẽ giống nhau trên tất cả các nền tảng và bất kỳ ngôn ngữ lập trình phù hợp nào cũng sẽ có thể sử dụng được trên tất cả các hệ điều hành

Điều đó có nghĩa là, cuối cùng bạn sẽ đạt được một số mức độ quen thuộc với cả ba hệ điều hành để bạn không bị lạc hoàn toàn khi gặp một loại HĐH mới (ví dụ: khi truy cập từ xa vào một máy khác hoặc khi bạn đến một hệ điều hành mới).

Có hai ngoại lệ chính cho quy tắc này

  • Nếu bạn muốn phát triển dành riêng cho Windows, hãy mua máy tính Windows
  • Nếu bạn muốn thực hiện phát triển dành riêng cho Mac hoặc iOS, hãy mua máy Mac

Có một số tùy chọn tốt để chạy mã C# trên các nền tảng khác, nhưng một số Microsoft và. NET vẫn chủ yếu hướng tới Windows

Mặc dù bạn có thể phát triển ứng dụng Mac và iOS trên bất kỳ máy tính nào, nhưng bạn phải sử dụng Xcode trên máy Mac để biên dịch và gửi ứng dụng của mình tới cửa hàng ứng dụng

Cuối cùng, cũng cần lưu ý rằng bạn không bị "khóa" sau khi đã chọn một hệ điều hành -- bạn luôn có thể chạy một máy ảo (VM) với một hệ điều hành khác được cài đặt. Ví dụ: nếu tôi sở hữu một máy tính Windows, sẽ rất dễ dàng thiết lập một máy ảo Linux mà tôi có thể sử dụng mà không sợ nó can thiệp vào hệ điều hành Windows hiện có của tôi

Tôi nên mua loại máy tính/máy tính xách tay nào?

Một lần nữa, điều đó không thực sự quan trọng -- bất kỳ máy tính xách tay hoặc máy tính tầm trung nào cũng nên làm. Nếu bạn đã sở hữu một máy tính hoặc máy tính xách tay, bạn chỉ nên sử dụng nó thay vì mua một máy tính mới. Về cơ bản, bạn có thể học cách lập trình và có thể viết các chương trình phức tạp và thú vị trên hầu hết mọi máy tính hiện có

Về cơ bản, nếu bạn túng thiếu và không có bất kỳ máy tính nào có thể sử dụng được, bạn luôn có thể kiểm tra các địa điểm như Craigslist để tìm máy tính đã qua sử dụng hoặc hỏi xung quanh. Bạn có thể tiến rất xa với một chiếc máy tính cũ nếu nó chỉ dành cho việc học

Tuy nhiên, nếu bạn có nhu cầu mua máy tính mới và muốn dùng để lập trình thì nên ưu tiên CPU, RAM và dung lượng ổ cứng. Nếu có thể, hãy thử và mua một máy tính có thông số kỹ thuật sau hoặc tốt hơn

  • CPU Intel i5 (3. 0+ GHz)
  • RAM 8GB
  • ổ cứng 200GB
  • (Tùy chọn) Ổ cứng thể rắn

Nếu bạn có thể nâng cấp, có thể an toàn khi ưu tiên nhận CPU tốt hơn và nhiều RAM hơn là mua ổ cứng lớn hơn -- CPU mạnh hơn sẽ luôn hữu ích. Ngược lại, hầu hết các loại lập trình không yêu cầu bạn phải có nhiều dung lượng đĩa. các trường hợp ngoại lệ duy nhất là nếu bạn đang cố làm điều gì đó với hình ảnh hoặc video hoặc nếu bạn muốn tải xuống và phân tích các tập dữ liệu lớn trong khi tìm hiểu về máy học và những thứ tương tự (và bạn thường có thể lưu trữ những thứ đó trên đám mây, nếu

Nếu bạn muốn mua một máy tính để bàn, những thông số kỹ thuật này thực sự là những thông số phù hợp duy nhất. Nếu bạn muốn tính di động, bạn nên mua một chiếc máy tính xách tay và đảm bảo rằng nó có màn hình và bàn phím đủ lớn để có thể thoải mái lập trình. Tuy nhiên, có một sự cân bằng tốt giữa khả năng sử dụng và tính di động trong máy tính xách tay

  • Màn hình càng lớn, thời lượng pin càng ngắn (nhưng bạn sẵn sàng đặt độ sáng của màn hình càng mờ thì thời lượng pin càng dài)
  • Màn hình càng nhỏ, bạn càng ít có thể đặt trên màn hình và bạn càng phải lật nhiều hơn giữa các cửa sổ/máy tính để bàn
    • Tốt nhất là bạn có thể lắp 2 cửa sổ cạnh nhau một cách thoải mái
  • Laptop càng lớn thì càng nặng, mang đi lại càng nặng

Bạn cũng nên tự hỏi mình dự định sử dụng máy tính xách tay của mình như thế nào. Bạn có định đặt nó trên bàn làm việc cả ngày hay mang nó đi khắp khuôn viên trường hay đi bộ đường dài ở Yukon với nó không?

Nếu có thể, hãy thử trực tiếp kiểm tra máy tính xách tay mà bạn đang xem xét. Ví dụ, nếu bạn cảm thấy khó chịu khi gõ trên bàn phím của một máy tính xách tay cụ thể và không phải là thứ bạn có thể quen, thì bạn có thể muốn cho máy tính xách tay đó vượt qua bất kể nó trông đẹp như thế nào trên giấy.

Nếu bạn cũng đang cố gắng mua một chiếc máy tính xách tay để chuẩn bị cho các lớp học ở trường đại học hoặc cao đẳng, bạn có thể thử kiểm tra trang web của họ/trang web của khoa khoa học máy tính hoặc kỹ thuật phần mềm của họ để xem họ có đề xuất và khuyến nghị cụ thể nào không

Để biết thêm thông tin và để được trợ giúp chi tiết hơn, hãy truy cập các subreddits sau để nhận được các đề xuất được cá nhân hóa hơn

Bạn cũng có thể muốn thận trọng khi mua Chromebook -- chúng sẽ yêu cầu một số mức độ tùy chỉnh hoặc sẽ yêu cầu bạn làm việc bằng trình chỉnh sửa và IDE trực tuyến cũng như yêu cầu truy cập internet liên tục. Để biết thêm thông tin, hãy xem các liên kết sau

Bạn thậm chí nên thận trọng hơn khi cố gắng sử dụng máy tính bảng hoặc điện thoại làm thiết bị lập trình chính của mình. Mặc dù có thể lập trình bằng máy tính bảng hoặc điện thoại với một số nỗ lực, nhưng gần như tất cả quá trình phát triển phần mềm được thực hiện bằng máy tính để bàn hoặc máy tính xách tay bằng bàn phím

Nếu bạn cần lời khuyên về việc chọn một nhãn hiệu cụ thể, hãy nhớ rằng lập trình không yêu cầu bất kỳ điều gì đặc biệt từ máy tính của bạn. Điều này có nghĩa là một máy tính đa năng tốt, rất có thể sẽ là một máy tính lập trình tốt. (Điều này làm cho việc tìm kiếm một chiếc máy tính xách tay tốt trở nên dễ dàng hơn, vì bạn không cần phải cố gắng tìm kiếm một chiếc được bán riêng cho các lập trình viên. )

Một ràng buộc tùy chọn cuối cùng. Nếu bạn đặc biệt quan tâm đến việc học máy, xử lý ngôn ngữ tự nhiên hoặc đồ họa (bao gồm cả phát triển trò chơi), bạn có thể cân nhắc mua máy có GPU. Mặc dù bạn không cần GPU để thực hiện bất kỳ việc nào trong số này, nhưng bạn thường có thể tăng tốc mã của mình bằng cách viết mã cẩn thận để mã tận dụng lợi thế của GPU (nếu có thể)

Nếu bạn quan tâm nhiều hơn đến máy học hoặc NLP, xin lưu ý rằng bạn có thể thuê máy có GPU trên đám mây thông qua các dịch vụ như Amazon Web Services (AWS) hoặc Google Compute Engine (GCE) với giá tương đối rẻ

Không có laptop/điện thoại có học Lập trình được không?

Câu trả lời chung là có với điều kiện là bạn có một số thiết bị có thể chạy trình duyệt web

Có rất nhiều IDE và khóa học trực tuyến

Một vài ví dụ

khóa học

IDE


Nghề nghiệp và công việc

Tôi có thể kiếm được nhiều tiền từ lập trình không?

Có thể, nhưng chỉ khi bạn giỏi về nó. Nhưng bạn cũng có thể kiếm được nhiều tiền khi làm thợ sửa ống nước hoặc trong bất kỳ lĩnh vực kinh doanh nào khác. Bạn cũng có thể thất bại khủng khiếp. Lập trình không phải là một công việc đảm bảo, an toàn

Tôi có thể kiếm một công việc lập trình mà không cần bằng Khoa học Máy tính không?

vâng và vâng

Có thể kiếm được một công việc mà không cần bằng CS và không cần bằng cấp nói chung, mặc dù xác suất giảm. Bỏ học chắc chắn là không nên. Nếu lập trình không dành cho bạn, hãy chuyển chuyên ngành. Nếu nó dành cho bạn, ở lại trường sẽ cho bạn cơ hội tốt nhất để có việc làm sau khi bạn học xong

Bạn có thể nhận được nhiều câu trả lời đầy đủ thông tin hơn cho những câu hỏi này và các câu hỏi định hướng nghề nghiệp khác nếu bạn đăng chúng trong /r/cscareerquestions hoặc /r/cscareerquestionsEU

Làm thế nào để tôi thâm nhập vào ngành và có được một công việc mới bắt đầu?

Một lần nữa, câu hỏi này hầu như nằm ngoài phạm vi của subreddit này -- các câu hỏi liên quan đến nghề nghiệp tốt hơn nên hỏi trên /r/cscareerquestions và bằng cách tham khảo wiki toàn diện của họ. Ngoài ra, hãy xem /r/cscareerquestionsEU nếu bạn đang sống ở EU

Nhưng nói chung, có hai giai đoạn chính để nhận được một công việc mới bắt đầu, giả sử bạn đã biết cách viết mã

  1. Xây dựng một sơ yếu lý lịch đủ nổi bật để mọi người bắt đầu mời bạn phỏng vấn
  2. Vượt qua cuộc phỏng vấn

Hai giai đoạn đòi hỏi các chiến lược hơi khác nhau

Giai đoạn 1. Xây dựng một sơ yếu lý lịch nổi bật

Trong giai đoạn 1, mục tiêu của bạn là dần dần bắt đầu thêm các mục vào sơ yếu lý lịch giúp bạn nổi bật (hoặc ít nhất giúp bạn so sánh với) bất kỳ ứng viên nào khác đang nộp đơn.

Một chiến lược đặc biệt hữu ích để làm điều này là bắt đầu xây dựng một danh mục các dự án không tầm thường mà bạn có thể giới thiệu với các nhà tuyển dụng tiềm năng. Danh mục đầu tư của bạn có thể chứa bất cứ thứ gì khác nhau, từ

  • Dự án phụ độc lập
  • Công việc tình nguyện -- e. g. có thể tạo một trang web cho một số tổ chức phi lợi nhuận
  • dự án lớp học
  • Công việc bạn đã làm trong công việc của mình, nơi bạn tìm ra cách kết hợp lập trình
  • Công việc kỹ thuật bạn làm cho một câu lạc bộ ở trường -- có thể một số câu lạc bộ muốn có một trang web mới hoặc có thể bạn có thể tìm một câu lạc bộ tập trung vào công nghệ
  • Dự án nghiên cứu -- có thể là dự án độc lập hoặc nghiên cứu bạn đã thực hiện như một phần của phòng thí nghiệm tại trường học của mình
  • Các dự án từ công việc trước đây hoặc thực tập

Có một danh mục đầu tư tốt cho thấy nhà tuyển dụng có thể áp dụng thành công các ngôn ngữ lập trình, thư viện và công nghệ để giải quyết vấn đề và cung cấp cho họ cách đánh giá chính xác hơn trình độ kỹ năng của bạn. (Và, hóa ra, làm việc trong các dự án không tầm thường cũng là một trong những cách tốt hơn để cải thiện trình độ kỹ năng của bạn nói chung. )

Nói cách khác, bạn muốn chứng minh rằng bạn có thành tích xây dựng thành công những thứ tương đối phức tạp. Nếu bạn không có bất kỳ lịch sử công việc nào trước đây trong lĩnh vực này, làm việc trong các dự án là một trong những cách tốt hơn để làm điều đó

Một số lưu ý bổ sung

  • Các dự án của bạn không nhất thiết phải hào nhoáng về mặt hình ảnh. Hầu hết các nhà tuyển dụng sẽ tập trung vào sơ yếu lý lịch của bạn (và thường sẽ chỉ đọc sơ yếu lý lịch của bạn. ) và các nhà tuyển dụng có nền tảng kỹ thuật sẽ hiểu rằng không phải tất cả các dự án thú vị đều có hoặc cần một giao diện bóng bẩy. Điều có lẽ quan trọng hơn là bạn có thể mô tả trung thực dự án của mình trong sơ yếu lý lịch theo cách thể hiện mức độ phức tạp của công việc bạn đã làm

    Có lẽ ngoại lệ chính là nếu bạn đang ứng tuyển vào một vai trò đòi hỏi sự tinh tế về hình ảnh. Ví dụ: nếu bạn đang ứng tuyển vào vai trò nhà thiết kế web giao diện người dùng, sẽ rất hữu ích nếu có các dự án cho thấy bạn có thể tạo một trang web bóng bẩy và có thể sử dụng được

  • Tất nhiên, làm việc trên các dự án không phải là điều duy nhất bạn có thể làm. Làm những việc như lấy bằng (tốt nhất là trong một chủ đề liên quan đến khoa học máy tính) chắc chắn cũng sẽ giúp ích. Chỉ cần lưu ý rằng nhiều người xin việc cũng sẽ có bằng cấp liên quan đến công nghệ, vì vậy chỉ có bằng cấp có thể không đủ để giúp bạn nổi bật -- bạn cũng sẽ muốn tận dụng mọi cơ hội ngoại khóa mà trường bạn cung cấp. Những trường học tốt sẽ có nhiều dự án phụ tiềm năng mà bạn có thể tham gia nếu chịu khó tìm hiểu một chút. Có quyền truy cập vào các dự án phụ tiềm năng đó là một trong những lợi ích lớn nhất khi trả học phí

  • Một số người cũng tham dự bootcamp một phần để đẩy nhanh quá trình xây dựng sơ yếu lý lịch/danh mục đầu tư có liên quan. Chỉ cần đảm bảo thực hiện nghiên cứu của bạn trước khi cam kết tham gia bootcamp. một số là tuyệt vời, và một số là lừa đảo hoàn toàn. Trước khi cam kết tham gia bất kỳ bootcamp nào, hãy thử liên hệ với các cựu sinh viên của bootcamp đó trên các trang web như Linkedin để xem họ cảm thấy thế nào, thử kiểm tra xem bootcamp có báo cáo số liệu thống kê về CIRR hay không, thử hỏi mọi người ở nhiều cộng đồng khác nhau (không chỉ reddit . Cũng thấy

  • Nếu sơ yếu lý lịch của bạn không được nhiều người chú ý, hãy thử đăng nó để xem xét trên /r/cscareerquestions' hoặc /r/cscareerquestionsEU's chuỗi đánh giá sơ yếu lý lịch hàng tuần

Giai đoạn 2. Vượt qua cuộc phỏng vấn

Chính xác những gì xảy ra trong giai đoạn 2 (vượt qua cuộc phỏng vấn) có thể khác nhau giữa các vùng. Ví dụ: nhiều công ty kiểu thung lũng silicon thích đặt câu hỏi về cấu trúc dữ liệu và thuật toán, vì vậy nếu bạn dự định nộp đơn vào những loại công ty có nền tảng vững chắc về chủ đề đó thì điều bắt buộc là phải làm. Điều này có thể không nhất thiết đúng ở những nơi khác trên thế giới hoặc đối với các loại công ty khác

Một số nguyên mẫu phỏng vấn phổ biến mà bạn có thể gặp bao gồm

  • Cung cấp cho bạn một số loại thử thách viết mã, thường là về cấu trúc dữ liệu và thuật toán -- đặc biệt là ở cấp độ đầu vào. Để tìm hiểu thêm về những kiểu phỏng vấn này trông như thế nào và cách chuẩn bị cho chúng, hãy xem xét việc mua hoặc mượn một bản "Phỏng vấn viết mã"
  • Hỏi bạn những câu hỏi liên quan đến vai trò cụ thể mà bạn đang phỏng vấn -- e. g. thiết kế web frontend, bảo mật, khoa học dữ liệu
  • Yêu cầu bạn ghép nối chương trình với người phỏng vấn nơi bạn cộng tác xây dựng hoặc gỡ lỗi một chương trình nhỏ
  • Yêu cầu bạn hoàn thành một số loại thử thách mang về nhà
  • Yêu cầu bạn thử thiết kế kiến ​​trúc cấp cao của một số chương trình lớn hơn
  • Hỏi bạn về các mục bạn đã liệt kê trong sơ yếu lý lịch của mình (đôi khi nói chung, đôi khi tập trung vào một dự án chuyên sâu)
  • Chỉ cần có một cuộc thảo luận về công nghệ nói chung

Ghi chú. Đây không phải là một danh sách đầy đủ. Bạn cũng nên nhớ rằng các nhà tuyển dụng khác nhau sẽ tìm kiếm những thứ khác nhau và các thông lệ phỏng vấn phổ biến ở một khu vực có thể gần như hoàn toàn không được biết đến ở một khu vực khác. Vì vậy, chúng tôi thực sự khuyên bạn nên kết nối với các nhà phát triển trong khu vực địa phương của mình và nhờ họ tư vấn

Ngoài ra, hãy xem wiki của /r/cscareerquestions -- và có thể là /r/cscareerquestionsEU nếu bạn đang sống ở EU


Bây giờ tôi phải làm gì?

Không còn là người mới bắt đầu

Sẽ có lúc mọi lập trình viên lớn lên và họ gặp phải một vấn đề, họ bị cuốn vào thế giới thực. Trong thế giới thực, không có sự nắm tay hay hướng dẫn chính. Thay vào đó, bạn cần học cách làm theo cách của bạn. Nếu bạn đã đi xa đến mức này, bạn nên có một lĩnh vực mà bạn quan tâm, có thể đó chỉ là lập trình chung, phát triển web, thuật toán hoặc bất kỳ thứ gì tương tự. Có thể, bạn muốn tìm hiểu về các lĩnh vực khác, khác liên quan đến lập trình, hoặc có thể, bạn chỉ muốn biết phải làm gì tiếp theo

Khi bạn bắt đầu lập trình, bạn có thể tự hỏi khi nào mình sẽ học cách tạo Reddit tiếp theo hoặc khi nào bạn sẽ học cách tạo ra những đồ họa lạ mắt đó hoặc cách thực hiện các thuật toán khác nhau. Chà, nếu bạn coi mình không còn là người mới bắt đầu nữa, thì bạn đã có chương trình dưới vành đai công cụ của mình. Bây giờ bạn cần học cách áp dụng nó và cách củng cố nó. Bạn sẽ sớm có thể làm được những điều này và học được tất cả về chúng

Nâng cao kỹ năng lập trình của bạn

Nhiều người phải đối mặt với nỗi sợ rằng họ không đủ năng lực khi lập trình. Và do đó, nhiều người muốn cải thiện kỹ năng lập trình của họ. Nhưng, ở giai đoạn này, chỉ có một cách duy nhất để làm điều đó, và đây là thực hành. Có rất nhiều trang web và địa điểm dành riêng cho việc luyện tập, chẳng hạn như /r/dailyprogrammer, CodeWars, HackerRank, Project Euler, và nhiều trang khác


linh tinh

Để biết danh sách các cộng đồng liên kết, hãy xem -- và cụ thể là phần "Trợ giúp theo thời gian thực"

Xin lưu ý rằng /r/learnprogramming không được liên kết chính thức với bất kỳ cộng đồng nào được liệt kê trên trang đó. Các nhóm kiểm duyệt của tất cả các cộng đồng được liệt kê là khác biệt và độc lập với cộng đồng này

Làm thế nào để dạy một đứa trẻ lập trình?

Hãy thử kiểm tra /r/ProgrammingForKids và /r/CSeducation. Cả hai subreddits sẽ chứa các tài nguyên và đề xuất hữu ích về cách dạy người khác

Bạn cũng có thể thử chạy truy vấn này để tìm các cuộc thảo luận trước đây về câu hỏi này

Một số tài nguyên thường được đề xuất bao gồm

  • Scratch từ MIT, một ngôn ngữ lập trình được thiết kế cho trẻ em từ 8 đến 16 tuổi. Ngôn ngữ này dựa trên trình duyệt và không cần cài đặt phần mềm
  • Mã số. org, một trang web thu thập các tài nguyên về dạy trẻ em viết mã
  • dạy cùng nhau. tech, một cuốn sách miễn phí dành cho những người có ít kinh nghiệm giảng dạy CS và muốn tìm hiểu các phương pháp sư phạm tốt nhất
  • pixelpad. io - PixelPAD được tạo ra để đưa người học vượt qua Scratch. Được tạo ra cho người học, API của PixelPAD được thiết kế có chủ đích để chỉ bao gồm các tính năng có lợi cho việc tìm hiểu các cơ chế và mã cơ bản
  • Reeborg's World - Một công cụ học tập dựa trên trình duyệt để "thu hẹp khoảng cách" giữa Scratch và ngôn ngữ lập trình văn bản - hiện hỗ trợ JavaScript và Python. Chương trình có thể được "nhấp vào nhau" trong một hệ thống khối giống như Scratch và sau đó có thể được chuyển sang ngôn ngữ văn bản và ngược lại

Làm cách nào tôi có thể đóng góp cho các dự án mã nguồn mở?

Tham gia vào một trong các dự án trong nhóm github /r/learnprogramming. Nhóm này do jfredett tạo ra với mục đích rõ ràng là cung cấp các dự án cho các lập trình viên mới để học cách đóng góp cho nguồn mở bằng cách tương tác với các lập trình viên có kinh nghiệm hơn với tư cách là người cố vấn

Nhóm vẫn còn ở giai đoạn sơ khai nhưng một số người đang làm việc để thiết lập và vận hành nó

Dưới đây là một số trang web chứa liên kết đến các dự án đang tích cực tìm kiếm những người đóng góp ở mọi cấp độ kinh nghiệm và thường sẽ liên kết đến các lỗi hoặc sự cố đang mở mà người mới bắt đầu rất dễ tiếp cận

Dưới đây là một số chủ đề trước đây về làm việc trên các dự án nguồn mở

Tôi có một câu hỏi về C/Python/một số ngôn ngữ cụ thể

Hãy thử tham khảo các wiki dành riêng cho ngôn ngữ của chúng tôi để xem câu hỏi của bạn có được liệt kê ở đó không

Câu hỏi của tôi không phải là một trong số này;

Kiểm tra hướng dẫn khắc phục sự cố nhanh dành cho người mới bắt đầu và trang Câu hỏi thường gặp cho ngôn ngữ bạn đang sử dụng để xem ngôn ngữ đó có được trả lời ở một trong hai vị trí không. Không thì đăng đi

Hãy thử cũng kiểm tra

Vâng, câu hỏi tôi đang hỏi nằm trong phần Câu hỏi thường gặp, nhưng tôi muốn nhận được câu trả lời từ những người thực

Câu hỏi thường gặp này và các trang còn lại trong wiki /r/learnprogramming đều do cộng đồng biên tập. Những câu trả lời này là sản phẩm của cộng đồng và chúng đến từ những người thực. Nếu câu hỏi của bạn được liệt kê ở đây trong phần Câu hỏi thường gặp, đó là vì nó đã được hỏi nhiều lần trước đây. Câu hỏi thường gặp này là tập hợp các câu trả lời thường được đưa ra và chấp nhận cho những câu hỏi này. Vui lòng cân nhắc xem câu hỏi của bạn có thực sự khác biệt đáng kể so với câu hỏi được trả lời ở đây trong phần Câu hỏi thường gặp hay không trước khi yêu cầu mọi người dành thời gian trả lời cá nhân cho một câu hỏi đã được hỏi đi hỏi lại

Nếu câu hỏi của bạn thực sự khác biệt đáng kể và câu trả lời trong Câu hỏi thường gặp này không thỏa đáng, thì vui lòng cho biết trong bài đăng của bạn rằng bạn đã đọc Câu hỏi thường gặp và cho biết chính xác câu hỏi của bạn khác biệt như thế nào và câu trả lời ở đây không hữu ích với bạn như thế nào. Điều này sẽ cho thấy rằng bạn đã nỗ lực tìm câu trả lời cho câu hỏi của mình và sẽ giúp tập trung vào các câu trả lời cho câu hỏi của bạn

Làm cách nào để chỉnh sửa wiki /r/learnprogramming (bao gồm cả Câu hỏi thường gặp này)?

Chúng tôi khuyến khích bạn đóng góp, nhưng hiện tại wiki chỉ là người kiểm duyệt chỉnh sửa để ngăn những kẻ gửi thư rác thêm các liên kết của họ một cách thiếu kiểm soát. Vui lòng gửi cho người điều hành một tin nhắn với thông tin bạn muốn thêm/thay đổi. Người điều hành vẫn có quyền từ chối thay đổi nếu các đề xuất không phù hợp

Cái nào khó hơn C hay Java?

Mọi người đều nhất trí rằng Java dễ học hơn vì cú pháp của nó gần với ngôn ngữ tự nhiên hơn C.

Ngôn ngữ C có khó nhất không?

Không, C không phải là ngôn ngữ khó nhất . Viết mã nói chung không khó để học. Tuy nhiên, ngôn ngữ lập trình tương đối khó học. Nếu bạn là người mới bắt đầu lập trình, bạn có thể bắt đầu bằng cách xây dựng nền tảng vững chắc về khoa học máy tính trước khi chuyển sang C.

Java có phải là ngôn ngữ khó học nhất không?

Mặc dù một số ngôn ngữ lập trình phức tạp và khó học, nhưng Java thì không . Các nhà phát triển cho biết ngôn ngữ này rất dễ tiếp thu. Cú pháp của nó đơn giản, giúp dễ hiểu, viết và bảo trì. Với Java, các nhà phát triển có thể viết một lần và chạy mọi nơi (WORA).

C có phải là ngôn ngữ dễ nhất không?

Mặc dù C là một trong những ngôn ngữ khó học hơn , nhưng đây vẫn là ngôn ngữ đầu tiên tuyệt vời vì hầu hết tất cả các ngôn ngữ lập trình đều được triển khai . Điều này có nghĩa là một khi bạn học C, sẽ rất đơn giản để học thêm các ngôn ngữ khác như C++ và C#.