Đây là bản dịch câu chuyện thành công từ cộng đồng Java toàn cầu của chúng tôi. Alex đã học Java trên phiên bản tiếng Nga của khóa học mà bạn học bằng tiếng Anh trên CodeGym. Mong nó sẽ trở thành nguồn cảm hứng cho việc học tập sâu hơn của bạn và có thể một ngày nào đó bạn sẽ muốn chia sẻ câu chuyện của chính mình với chúng tôi :)

Giới thiệu

Một chút về cách tôi bước vào lập trình. Tôi là một giáo viên và nhà tâm lý học được đào tạo và đã thực hành thành công nghề của mình trong 5 năm. Nhưng vì nhiều lý do khác nhau, tôi ngày càng nghĩ đến việc chuyển đến một đất nước khác. Và vì ngôn ngữ và quy định ở các nước khác nhau nên tôi không thể trở thành một chuyên gia như vậy nếu không được đào tạo lại nghiêm túc. Vì vậy, tôi bắt đầu tìm kiếm những cách đơn giản, thú vị hơn để tiến lên và thành công. Nó thế nào?  Hoặc dự án đầu tiên của tôi - 1Tôi đã thử sức mình với tư cách là một nghệ sĩ xăm hình (điều này về cơ bản không đòi hỏi kiến ​​​​thức về ngôn ngữ), nhưng đó là câu chuyện của một ngày khác. Sau đó, người bạn đồng nghiệp của tôi đã giới thiệu cho tôi CodeGym. Ban đầu, tôi nghi ngờ về những lời hứa sẽ giúp tôi trở thành một lập trình viên chính thức bằng cách chơi một trò chơi với mức giá khiêm tốn như vậy. Nhưng sau đó tôi nhận được một số tiền sinh nhật (không phải chịu "thuế gia đình") và phải đối mặt với sự lựa chọn giữa WoW và CodeGym... Chà, nhờ giảm giá kịp thời, cán cân đã đi đúng hướng, và tôi ở đây. Như tất cả chúng ta đã biết, CodeGym là 90% thực hành thuần túy. Bạn học cách giải quyết nhiệm vụ. Bạn học cách tìm kiếm những kiến ​​thức bạn còn thiếu trên Internet. Tất cả điều này đều tốt, nhưng đối với 15 cấp độ, tôi không thể tránh khỏi cảm giác rằng mình đang thiếu thứ gì đó có thể hoàn thiện bức tranh cho tôi. Tôi đã nghĩ đến việc tham gia GeekBrains, nhưng (có lẽ may mắn thay) chính người bạn đó đã kịp thời ngăn tôi lại và giới thiệu tôi với Udemy. Khi mở kho kiến ​​thức này ra, tôi đã kèm theo lời kêu gọi: " Psst, bạn ơi. Bạn là người mới à?" Đang có ưu đãi giảm giá cho bạn... chỉ trong 3 ngày — Đừng bỏ lỡ cơ hội này! " Sau đó, rõ ràng là luôn có giảm giá, nhưng đó không phải là vấn đề. Tôi ngay lập tức mua một gói có hai khóa học: Java từ 0 đến Pro và thứ gì đó tương tự dành cho Android. Và đây là lúc câu chuyện của chúng tôi bắt đầu.

Thành công hay thất bại?

Khi tham gia khóa học Android, tôi đã nhận được bài tập về nhà để thực hiện một dự án dựa trên kiến ​​thức mới của mình. Tôi là kiểu người tin rằng làm một việc gì đó một cách đơn giản hoặc bình thường cũng giống như không làm gì cả. Vì vậy, tôi ngay lập tức bắt đầu phức tạp hóa cuộc sống của mình. Tôi quay sang người mà tôi biết là người có trí tưởng tượng phát triển và sống động nhất. Đây là người vợ thân yêu của tôi (vâng, cô ấy cũng sẽ đọc bài viết này). Cô đề xuất tạo một ứng dụng có hình ảnh các loài động vật, ứng dụng này sẽ tạo ra âm thanh tương ứng của các loài động vật khi người dùng nhấp vào. Đó là một ý tưởng tuyệt vời nhưng vẫn khá đơn giản. Lấy gợi ý này làm nền tảng, tôi bắt đầu lý luận:
  • Ứng dụng này chắc chắn phải có nhiều thứ hơn là vớ vẩn (thứ gì đó để cười và quên đi). Tôi muốn nó có giá trị. Ví dụ, bằng cách dạy một cái gì đó.
  • Hãy để nó là bảng chữ cái với động vật. Nhưng không chỉ bất kỳ bảng chữ cái nào, mà cả bảng chữ cái tiếng Anh!
  • Và không chỉ các loài động vật, mà cả những loài động vật quý hiếm mà ít người biết đến, nhằm mở rộng tầm hiểu biết của mình!
  • Và cần có hình ảnh động, âm thanh tái tạo tên của các chữ cái và tên các loài động vật bằng tiếng Anh và tiếng Nga!
Bây giờ đó là những gì tôi gọi là bài tập về nhà (tôi quên đề cập rằng trước CodeGym, tôi về cơ bản không quen với lập trình. Và chưa đầy 3-4 tháng trôi qua kể từ thời điểm tôi bắt đầu tích cực sử dụng trang web cho đến thời điểm tôi bắt đầu dự án. Vì vậy, nếu bạn là một cựu chiến binh trong lĩnh vực này và bạn đang nghĩ, " Pff... Có điều gì đó đã thay đổi so với phiên bản gốc không? ", Tôi đảm bảo với bạn, vâng, nó đã thay đổi)! Khó khăn đầu tiên tôi gặp phải là , thật kỳ lạ, khi bắt đầu dự án. Hóa ra, các tác giả không phải là những người duy nhất gặp phải tình trạng "tắc nghẽn của nhà văn"... Nhưng vì tôi là nhà tâm lý học nên tôi biết giải pháp cho vấn đề của mình. Bạn chỉ cần bắt đầu làm một cái gì đó. Hãy thực hiện ít nhất một bước nhỏ và sau đó đừng dừng lại. Vì vậy tôi bắt đầu với lớp Letter trừu tượng . Lớp này có một vài trường và sau đó sẽ phải có nhiều phương thức khác nhau. Trên thực tế, tôi không biết mình sẽ làm gì với nó, nhưng tôi phải làm gì đó. Sau đó, tôi tạo các lớp cho từng chữ cái, làm cho chúng kế thừa lớp trừu tượng. Phải mất rất nhiều thời gian, và ngày làm việc đầu tiên của tôi đã kết thúc. Ngày hôm sau tôi xóa dự án và bắt đầu lại. Tôi vừa mở dự án để ghi nhớ những gì đã thay đổi kể từ thời điểm tôi mô tả ở trên. Và tôi muốn nói rằng mọi thứ trông đẹp hơn khi tôi hoàn thành, nhưng không. Thực sự vẫn còn các lớp cho từng chữ cái... Điều này đặc biệt là do tôi được giao bài tập về nhà này gần như ngay từ đầu khóa học Android và tôi phải tự mình tìm ra sự phức tạp của mối quan hệ giữa một hoạt động (cửa sổ đang hoạt động hoặc thứ gì đó tương tự) với một lớp. Và tôi không tìm thấy hay nghĩ ra điều gì khác ngoài cách kết hợp một lớp học cụ thể với một hoạt động cụ thể một cách vụng về này. Dù sao đi nữa, một trong những nguyên tắc lập trình (tránh lặp lại) đã bị vi phạm 26 lần. Đầu tiên, tôi (có vẻ như đối với tôi) đã triển khai hoàn toàn hai chữ cái đầu tiên, tạo một giao diện người dùng thô bao gồm hai menu (một menu chung có thể cần thiết khi mở rộng chức năng và một mục lục, từ đó bạn có thể chuyển đến bất kỳ menu nào). của các chữ cái). Tôi thực sự không gặp nhiều khó khăn trong việc lập trình. Khi tôi triển khai dự án độc lập của mình, nhiều thứ, chẳng hạn như mối quan hệ giữa các lớp, phương thức, v.v., trở nên rõ ràng và bản thân dự án đã trở thành phương pháp thực hành tuyệt vời để củng cố tất cả kiến ​​thức tôi đã thu được không chỉ về Android mà còn về Java. Khó khăn thứ hai làrằng lá thư được chuyển đổi cùng lúc với tên của nó được nghe thấy. Sự chuyển tiếp mượt mà (bóng đổ) khiến âm thanh có vẻ như đi trước hình ảnh. Nhưng khi tôi đặt độ trễ cho âm thanh, toàn bộ luồng bị đóng băng - quá trình chuyển đổi chỉ bị trì hoãn theo mức độ trễ, tạo ra hiệu ứng không mong muốn tương tự, chỉ sau đó. Sau đó, tôi đã có một quyết định táo bạo là biến chương trình của mình thành đa luồng! Tôi đã chuyển phần phát lại âm thanh sang một chuỗi riêng biệt, với độ trễ đủ dài để tải hình ảnh. Đây chỉ là vấn đề đa luồng, nhưng tôi tự hào nói rằng tôi đang viết một ứng dụng đa luồng. Khó khăn cuối cùng là lựa chọn vật liệu phù hợp. Bạn có nghĩ rằng tiếng Anh không có động vật cho chữ X (hóa ra là có)? Tôi phải xác định 26 con vật, tìm hình ảnh và âm thanh của chúng, đồng thời ghi lại tên của 26 chữ cái và 26 con vật. Nếu tôi làm việc theo nhóm, rõ ràng tôi sẽ giao phần công việc này cho người khác. Những khoảnh khắc đơn điệu như vậy giết chết ham muốn làm việc, và khi không có ham muốn thì lại có cớ. Dù sao thì giai đoạn này mất khoảng 2 tuần (tôi thực hiện dự án vào thời gian rảnh rỗi và không có lý do gì). Dự án được tuyên bố hoàn thành khoảng 3-4 tuần sau khi bắt đầu.

Có đáng để tiếp tục học lập trình không?

Sự vỡ mộng theo sau. Đầu tiên, tôi không được phép xuất bản bài tập về nhà của mình trong khóa học. Tôi đã làm việc và nỗ lực rất nhiều để thể hiện nhưng tôi không được phép. Thứ hai, ứng dụng của tôi hoạt động hoàn toàn tốt trong trình mô phỏng và trên điện thoại của tôi. Về những gì tôi dự định làm, tôi đã không thực hiện hoạt hình, vì tôi đã nhổ và quyết định sẽ hoàn thành nó khi tôi đã học xong các bài học liên quan trong khóa học. Nhưng khi tôi bắt đầu nghĩ đến việc phân phối ứng dụng, tôi gặp phải một vấn đề thú vị. Sau khi sử dụng một điện thoại và máy tính bảng khác để kiểm tra xem ứng dụng của tôi có được tối ưu hóa cho các màn hình khác nhau và các phiên bản Android khác nhau hay không, tôi đã gặp phải một lỗi không xác định. Chương trình chỉ cần tắt khi chuyển sang một chữ cái. Tôi đã cố gắng tìm ra gốc rễ của vấn đề, xem lại nhật ký, so với các ngoại lệ Java ngắn gọn, thậm chí còn giống trò bịp bợm hơn. Internet đã không giúp tôi. Một mặt, tôi đã tạo ra một ứng dụng hoạt động được mà các con tôi thích chơi. Mặt khác, nó chỉ hoạt động trên điện thoại của tôi. Điều này làm tôi cười. Tất nhiên là tôi rất buồn, nhưng ngẫm lại, tôi kết luận rằng mình được nhiều hơn là mất:
  • Tôi đã xử lý tốt hơn những lời chỉ trích về công việc của mình.
  • Tôi nhận ra giá trị của kiến ​​thức và kinh nghiệm trong thiết kế phần mềm.
  • Tôi đã nâng cao lòng tự trọng về lập trình của mình.
  • Tôi nhận ra sự cần thiết phải nghiên cứu các mẫu thiết kế và những kiến ​​thức cơ bản về tái cấu trúc.
  • Và như tôi đã nói, bây giờ tôi có ứng dụng của riêng mình, ứng dụng mà không ai khác có và có lẽ sẽ không bao giờ có. =)
"Tôi biết là tôi chằng biết thứ gì". Bằng cách thực hiện các dự án giáo dục như thế này, bạn có cơ hội tuyệt vời để phân tích những gì bạn biết về những lỗ hổng kiến ​​thức của mình và xác định các cách để tiến bộ hơn nữa. Có đáng để tiếp tục học lập trình nếu bạn hiểu rằng tất cả những nỗ lực của bạn trong suốt chặng đường dài của cuộc đời đã đưa bạn từ 0 lên +0,001? Đối với tôi, câu trả lời là có. Còn bạn thì sao?