Tôi biết lập trình, nhưng tôi không biết lập trình cái gì
Có một vấn đề thường gặp mà tôi thấy ở các nhà phát triển mới. Họ dành thời gian học một hoặc hai ngôn ngữ lập trình cơ bản và họ cảm thấy khá thoải mái khi làm các bài tập lập trình, nhưng họ không biết làm thế nào để áp dụng những gì mà họ đã học được. Vấn đề này thường đi kèm trong ...
Có một vấn đề thường gặp mà tôi thấy ở các nhà phát triển mới. Họ dành thời gian học một hoặc hai ngôn ngữ lập trình cơ bản và họ cảm thấy khá thoải mái khi làm các bài tập lập trình, nhưng họ không biết làm thế nào để áp dụng những gì mà họ đã học được. Vấn đề này thường đi kèm trong một cụm từ tương tự như “Tôi biết lập trình, nhưng tôi không biết lập trình cái gì”. Các câu trả lời thường là “làm các bài thi lập trình”, “đóng góp vào một dự án mã nguồn mở” hoặc “tạo ra một trò chơi.”
Làm các bài thi lập trình là cách tốt để thực hành trí tuệ, nhưng chúng không phải để giúp người khác học cách tạo ra một chương trình mới. Đóng góp vào một dự án mã nguồn mở là một bước tiến để bạn có thể tìm hiểu về cấu trúc của một dự án thực sự và cải thiện kỹ năng của bạn với ngôn ngữ lập trình, nhưng không học được nhiều về toàn bộ vòng đời của một dự án. Một vài dự án rất phức tạp mà có thể là sai lầm cho một lập trình viên mới. Tạo ra một trò chơi là một bước tiến khác. Các trò chơi rất thú vị! Tôi đã bắt đầu bằng cách lập trình trò chơi trong QBASIC mặc dù phát sinh tình trạng khó xử tương tự. “Tôi muốn tạo ra một trò chơi, nhưng tôi không biết tạo cái gì”.
Là một người dạy các sinh viên âm nhạc cũng như lập trình, tôi đã nhận ra vấn đề tương tự đối với các sinh viên âm nhạc. “Tôi biết tất cả các hợp âm, và đôi tay của tôi cảm thấy thoải mái, nhưng tôi không biết cách viết ra một bài hát”. Với âm nhạc, chúng tôi thực sự có một câu trả lời tốt. Có một con đường cho việc học sáng tác. Các nhạc sĩ thường không bắt đầu viết nhạc của riêng họ từ đầu. Một số nhạc sĩ không bao giờ tiến bộ để có thể sáng tác nhạc và dành toàn bộ cuộc đời của họ chỉ chơi nhạc từ người khác. Trong thế giới lập trình cũng như vậy mặc dù có chút thể hiện khác nhau.
Trong cộng đồng phần mềm, quan điểm chung là “không phát minh lại bánh xe”. Gần như chẳng ai tán thành nếu bạn viết lại một thư viện khi có một lựa chọn hoàn thiện và ổn định đã tồn tại. Trong khi nó là một nguyên tắc chung, lập trình viên mới không nên sợ phải phát minh lại bánh xe. Khi nó được thực hiện cho việc học hoặc thực hành, việc làm một bánh xe là hoàn toàn OK! Nó là một phần quan trọng của việc học. Ví dụ, viết phiên bản ls, mv, wget hoặc cowsay của riêng bạn. Nếu bạn muốn đi theo hướng trò chơi thì làm các bản sao của Ping, Tetris hoặc Space Invaders. Chúng không cần phải có toàn bộ các tính năng tương tự hoặc có bản sao y hệt.
Đừng cho rằng bạn cần phải có ý tưởng thật tốt trước khi bạn viết một chương trình. Tôi đã thấy tâm lý tương tự đối với các nhạc sĩ. Cố gắng tạo ra một kiệt tác với nỗ lực đầu tiên của họ, đưa tất cả năng lượng của họ vào trong một bài hát và không nhìn thấy một viễn cảnh lớn hơn. Viễn cảnh lớn hơn là, bạn sẽ viết NHIỀU bài hát theo thời gian, không chỉ một! Bài hát đầu tiên bạn viết sẽ thường trở nên tệ và bạn thường sẽ ném nó đi. Điều đó không sao! Bạn cần phải học quá trình viết bài hát, học hỏi từ kinh nghiệm của chính mình và thực hành trong hàng giờ mỗi tuần. Bạn sẽ viết ra các chương trình tồi tệ trước khi bạn có thể viết ra một chương trình tốt. Chấp nhận nó, vượt qua nó và nhận lấy những kinh nghiệm để bạn có thể bắt đầu ứng biến theo yêu cầu trong bất kỳ trường hợp nào.
Có một lý do chúng tôi nói cho mọi người bắt đầu với một chương trình “Hello, world”. Bởi vì tại thời điểm đó trong cuộc hành trình của họ, hoàn thành điều đó nghĩa là họ đã chinh phục được một số lượng nhất định các nguyên tắc cơ bản. Bạn hiểu cách để biên dịch, cách để chạy, cách để gọi một hàm và truyền cho nó các tham số. Viết một bản sao của một chương trình đang tồn tại là một bước tiến lớn khác, gần như là quan trọng như bước Hello World, chỉ là ở một giai đoạn khác trong cuộc hành trình của bạn. Khi bạn hoàn thành nó, bạn đã vượt qua được những thách thức nhất định. Bạn đã phải tìm ra nơi để bắt đầu, cách lên kế hoạch với nó, cách tổ chức nó, cách để đối phó với các lỗi, đưa nó một dấu ấn cá nhân và đóng gói nó để cuối cùng nó trở thành một thứ có thể sử dụng. Kể cả khi tạo bản sao của một chương trình đơn giản, bạn sẽ được học tất cả các quá trình này.
Tuy nhiên, bạn có thể đang đoán xem làm thế nào việc nhái các chương trình đang tồn tại sẽ giúp bạn đưa ra những ý tưởng mới. Vâng, cũng như âm nhạc, nó đòi hỏi sự sáng tạo. Với âm nhạc, làm thế nào để chơi bài hát của người khác giúp bạn học cách viết bài hát của riêng mình? Vâng, trước tiên thì bạn phải hiểu làm thế nào người khác làm được điều đó. Bạn phải hiểu làm sao họ lên cấu trúc mọi thứ và mô hình nào mà họ sử dụng. Sau khi bạn đã làm đủ việc này, bạn bắt đầu thấy viễn cảnh lớn hơn và bạn có một lượng kiến thức lớn để rút ra. Bạn ghép các mảnh nhỏ bạn đã học từ các nơi khác nhau và tái sử dụng một vài mô hình mà bạn đã thấy. Bạn có thể tinh chỉnh các mô hình, kết hợp chúng với nhau hoặc hoàn toàn phá vỡ chúng. Như họ nói, bạn cần phải tìm hiểu các quy tắc để phá vỡ chúng. Trong lập trình chúng ta có các mô hình phố biến như MVC. Nó là một mô hình ổn định và được chấp nhận cho việc viết phần mềm. Trong âm nhạc, chúng ta có các tiến trình phổ biến. Ví dụ như I-V-vi-IV. Tất nhiên nó không phải mẫu duy nhất, nhưng nó là một mẫu tốt để biết!
Tóm gọn thì nó là kết hợp của kinh nghiệm và sự sáng tạo. Sự sáng tạo là một khía cạnh mọi người thường bỏ qua trong lập trình, nhưng nó rất quan trọng. Bạn đã bao giờ nhận thấy có bao nhiêu lập trình viên cũng là nhạc sĩ? Âm nhạc bao gồm rất nhiều phân tích kỹ thuật, cấu trúc và các mô hình mặc dù nhiều người coi nó là một nỗ lực sáng tạo thuần túy. Lập trình thường được xem như một công việc kỹ thuật nghiêm túc mặc dù nó chủ yếu là một nỗ lực sáng tạo. Bạn có thể thúc đẩy sự sáng tạo bằng cách nhân bản các chương trình. Khi bạn làm vậy, bạn sẽ tự mình suy nghĩ về những cách mới để tinh chỉnh chương trình hoặc có thể thậm chí là thêm vào một tính năng cá nhân. Nó cũng sẽ truyền cảm hứng, ý tưởng cho những dự án khác hoàn toàn mới. Sự sáng tạo đến trong suốt chặng đường đi, nhưng trước tiên bạn cần phải học cách chơi một vài bài hát cover.
Dần dần, bạn sẽ thấy cách mà bạn có thể áp dụng lập trình vào hầu hết tất cả mọi thứ. Bạn có thể tự động hóa các nhiệm vụ và giải quyết các vấn đề thực tế. Bạn sẽ không còn vấn đề gặp phải đến với danh sách dài những điều bạn muốn làm nhưng không có thời gian. Bạn cũng sẽ có thể giải quyết các vấn đề một cách nhanh chóng. “Ồ, có một bảng tính Excel với 100 trang tính cần phải được định dạng lại, chia ra các tập tin riêng biệt và chuyển đổi chúng thành một tập tin CSV? Hãy thực hiện ngay!” Đừng dong dài khi cố gắng phớt lờ, nhảy qua chuyện khác. Viết các chương trình mà bạn sẽ sử dụng. Những ý tưởng cho các dự án tiếp theo sẽ đến dọc theo quãng đường bạn đi qua.
Bao nhiêu bạn đã trải qua tình huống mà bạn nghĩ “tôi không biết lập trình cái gì?” Bạn đã xử lý nó như thế nào? Có lời khuyên nào bạn muốn đưa ra cho những người khác trong tình huống đó?
Techtalk via kipalog