Làm cách nào để tôi học cách viết mã? . Giống như học bất cứ thứ gì khác, không có quy trình chuẩn nào cho việc học viết mã. Tất nhiên là có những hướng dẫn, có những khóa học, có những hệ tư tưởng và có những truyền thống được thiết lập, nhưng không có một cách duy nhất nào đúng cả.
Một trường phái tư tưởng rất phổ biến và khá đơn giản để bắt đầu là Lập trình cạnh tranh. Bắt đầu với nó khá dễ dàng và nếu một người dành đủ thời gian và công sức, bạn có thể phát triển khả năng nắm vững logic lập trình rất tốt trong một khoảng thời gian tương đối ngắn
Dưới đây là một số bước để bắt đầu và thành thạo nó
Thoải mái viết mã bằng một trong hai ngôn ngữ này C, C++ hoặc Java. Tại sao chỉ có C, C++ hoặc Java?
Nếu bạn đã giỏi C, nên học C++. Đây là ngôn ngữ phổ biến nhất trong số các lập trình viên cạnh tranh vì tốc độ của nó và một thư viện tuyệt vời dưới dạng STL [Thư viện mẫu tiêu chuẩn]
Chọn một thẩm phán trực tuyến. Những cái được đề xuất là Topcoder và Codeforces. Các trang web này có chất lượng vấn đề cao và cũng cho phép bạn xem quá trình hoàn thành cuộc thi viết mã của người khác. Chúng cũng phân loại các vấn đề dựa trên chủ đề. Một số thẩm phán phổ biến khác bao gồm SPOJ, CodeChef [được cung cấp bởi SPOJ] và HackerEarth
Để bắt đầu, hãy bắt đầu với những bài toán đơn giản thường yêu cầu chuyển đổi tiếng Anh sang mã và không yêu cầu bất kỳ kiến thức nào về thuật toán. Giải Div 2 250 [Division 2, 250 điểm] trong Topcoder hoặc Div 2 Vấn đề A trong Codeforces là một khởi đầu tốt
Ở giai đoạn đầu của lập trình, người ta có xu hướng viết những đoạn mã dài, điều này thực sự không bắt buộc. Cố gắng giữ mã ngắn và đơn giản
Thực hành những bài toán này cho đến khi bạn cảm thấy thoải mái để có thể nộp nó với 240 điểm lẻ vào bất kỳ ngày nào
Bắt đầu triển khai các thuật toán cơ bản [hoặc tiêu chuẩn]. Bạn nên đọc chúng từ các hướng dẫn của Topcoder hoặc Giới thiệu về thuật toán
Một số khái niệm cơ bản mà bạn nên tìm hiểu là
- Thuật toán đồ thị. Tìm kiếm theo chiều rộng [BFS], Tìm kiếm theo chiều sâu [DFS], Các thành phần được kết nối mạnh mẽ [SCC], Dijkstra, Floyd-Warshall, Cây bao trùm tối thiểu [MST], Sắp xếp theo cấu trúc liên kết
- Lập trình năng động. Các bài toán lập trình động tiêu chuẩn như Cắt que, Ba lô, Nhân chuỗi ma trận, v.v.
- Lý thuyết số. Số học mô đun, Định lý Fermat, Định lý phần dư Trung Quốc [CRT], Phương pháp Euclidian cho GCD, Lũy thừa logarit, Sàng Eratosthenes, Hàm toàn phần Euler
- Tham. Các vấn đề tiêu chuẩn như lựa chọn Hoạt động
- kỹ thuật tìm kiếm. Tìm kiếm nhị phân, tìm kiếm ternary và Gặp nhau ở giữa
- Cấu trúc dữ liệu [Cơ bản]. Ngăn xếp, hàng đợi, cây cối và đống
- Cấu trúc dữ liệu [Nâng cao]. Trie, Cây phân đoạn, Cây Fenwick hoặc Cây chỉ mục nhị phân [BIT], Cấu trúc dữ liệu rời rạc
- Dây. Knuth Morris Pratt[KMP], thuật toán Z, mảng hậu tố/cây hậu tố. Đây là những thuật toán nâng cao
- hình học tính toán. Graham-Scan cho vỏ lồi, Quét đường
- lý thuyết trò chơi. Các nguyên tắc cơ bản của trò chơi Nim, số Grundy, định lý Sprague-Grundy
Danh sách không đầy đủ nhưng đây là những thứ bạn gặp rất thường xuyên trong các cuộc thi. Có các thuật toán khác nhưng rất hiếm khi được yêu cầu trong các cuộc thi
Bạn có thể tìm thấy mô tả và triển khai các thuật toán tiêu chuẩn tại đây
Khi đã có đủ kiến thức về các thuật toán phổ biến, bạn có thể bắt đầu giải các bài toán mức độ trung bình. Đó là Div 2 tất cả các vấn đề trong Topcoder và Codeforces. Không nên đi Div 1 500 vào thời điểm này
Học cách viết mã là tất cả về thực hành. Thường xuyên tham gia các cuộc thi lập trình. Giải những câu không giải được trong cuộc thi, sau cuộc thi. Ngoài Topcoder và Codeforces, bạn cũng có thể xem các cuộc thi HackerEarth Challenges hoặc Codechef
Đọc mã của các lập trình viên được đánh giá cao. So sánh giải pháp của bạn với họ. Bạn có thể nhận thấy rằng nó đơn giản và ngắn hơn giải pháp của bạn. Phân tích cách họ đã tiếp cận và cải thiện kỹ năng triển khai của bạn
Đọc các bài xã luận sau cuộc thi. Bạn có thể tìm hiểu cách giải quyết các vấn đề mà bạn không thể giải quyết trong cuộc thi và tìm hiểu các cách khác để giải quyết các vấn đề mà bạn có thể giải quyết
Luôn thực hành các vấn đề mà bạn có thể giải quyết trong cuộc thi. Giả sử nếu bạn có thể giải Div 2 250 và 500 trong cuộc thi nhưng không thể giải Div 2 1000 thì hãy thực hành càng nhiều bài toán Div 2 1000 càng tốt
Đừng dành quá nhiều thời gian nếu bạn không nhận được giải pháp hoặc bị mắc kẹt ở đâu đó
Sau khi bạn cảm thấy rằng mình đã dành đủ thời gian, hãy xem các bài xã luận. Hiểu thuật toán và mã hóa nó. Đừng nhìn vào giải pháp thực tế trước khi bạn cố gắng tự viết mã
Lập trình là một kỹ năng rất thiết thực và thực tế. Phải làm liên tục thì mới giỏi. Nó không đủ để giải quyết vấn đề về mặt lý thuyết, bạn phải viết mã nó và chấp nhận giải pháp. Biết sử dụng thuật toán/logic nào và triển khai nó là hai việc khác nhau. Cần cả hai để giỏi lập trình
Giai đoạn học lập trình sẽ mất rất nhiều thời gian và điều quan trọng là thực hành thường xuyên. Phải mất một thời gian trước khi bạn có thể thử Div 1 500 và các vấn đề khó khăn khác. Đừng từ bỏ việc đọc các bài xã luận và thực hiện chúng, ngay cả khi phải mất nhiều giờ/ngày. Hãy nhớ rằng mọi thứ đều cần luyện tập để thành thạo
Phải mất một lượng thời gian đáng kể trước khi bạn giỏi về nó. Bạn phải giữ cho mình có động lực trong suốt. Thành lập một đội và luyện tập là một lựa chọn tốt. Không bỏ cuộc là chìa khóa ở đây
Hackerearth tổ chức các cuộc thi lập trình trực tuyến hàng tháng bắt đầu từ tháng này. Đăng ký tại đây để bắt đầu và nhận thêm thông tin cập nhật