Cải thiện kỹ năng mã hóa Python

Một trong những khía cạnh khó khăn nhất của việc trở thành một lập trình viên là số lượng lớn các kỹ năng cần học. Cho dù bạn mới bắt đầu hành trình lập trình của mình hay bạn đang trên đường trở thành một kỹ sư phần mềm có năng lực, thì việc không ngừng nâng cao kiến ​​thức và kỹ năng của bạn luôn là điều quan trọng. Vì khoa học máy tính tiến bộ rất nhanh với các ngôn ngữ và khuôn khổ ra vào và biến đổi, nhu cầu học các kỹ năng mới thực sự không bao giờ biến mất.

Cá nhân tôi thấy rằng sau khi tốt nghiệp đại học, tôi phải đảm bảo dành thời gian để tiếp tục mở rộng kiến ​​thức lập trình của mình. Mặc dù tôi đã bắt đầu đạt được những kỹ năng có giá trị trong công việc, nhưng tôi không muốn bắt đầu quên những chủ đề ở trường mà công việc hiện tại của tôi không yêu cầu tôi phải sử dụng thường xuyên. Ngay cả khi tôi còn đi học, việc vượt qua bài tập về nhà đã giúp tôi tiến bộ nhanh hơn. Tôi bắt đầu học đại học ngành Kỹ thuật Môi trường nhưng chuyển sang Khoa học Máy tính và Địa lý vào năm thứ hai, điều đó có nghĩa là tôi có một số việc phải làm. Trong bài đăng này, tôi sẽ thảo luận về các chủ đề và chiến lược đã giúp tôi trở thành một lập trình viên giỏi hơn và cách bạn có thể sử dụng chúng để cải thiện kỹ năng lập trình Python của mình

Chú ý đến cấu trúc dữ liệu

Thuật toán và Cấu trúc dữ liệu là hai trong số những lĩnh vực quan trọng nhất cần hiểu để trở thành một lập trình viên giỏi. Mặc dù đúng là bạn có thể tìm thấy cách triển khai hầu hết mọi thuật toán hoặc cấu trúc dữ liệu trên internet, nhưng việc hiểu rõ cách chúng hoạt động sẽ cho phép bạn giải quyết vấn đề hiệu quả hơn. Khi nói đến việc thành công trong một cuộc phỏng vấn kỹ thuật hoặc gây ấn tượng với sếp của bạn, khả năng xem xét một vấn đề mới và đưa ra giải pháp khả thi một cách nhanh chóng là rất quan trọng. Thông thường, việc hiểu sâu về các thuật toán và cấu trúc dữ liệu thường được sử dụng giúp giải quyết vấn đề dễ dàng hơn nhiều

Python là một ngôn ngữ thú vị vì nó cực kỳ dễ sử dụng các hàm và thư viện tích hợp để trừu tượng hóa rất nhiều thứ chúng ta sẽ làm thủ công bằng các ngôn ngữ khác. Nhiều trường đại học bắt đầu cho sinh viên học một ngôn ngữ như c ++ vì nó buộc họ phải học những thứ như cách cấp phát bộ nhớ hoạt động cùng với một cú pháp nghiêm ngặt hơn. Tuy nhiên, ngày càng có nhiều sinh viên bắt đầu với Python vì nó có rất nhiều tiện ích trong nhiều chủ đề như khoa học dữ liệu, phát triển web và công nghệ phần mềm.

Cấu trúc dữ liệu

Vì Python có rất nhiều cấu trúc dữ liệu hữu ích đã được triển khai và dễ dàng truy cập, nên việc hiểu tình huống nào sẽ sử dụng cấu trúc dữ liệu cụ thể là rất quan trọng

Việc chọn cấu trúc dữ liệu tùy thuộc vào số lượng dữ liệu bạn đang làm việc, cách bạn muốn truy cập dữ liệu đó và tốc độ chạy mã của bạn. Một số cấu trúc dữ liệu rất nhanh với một số thao tác nhất định, nhưng có thể hoàn toàn không hỗ trợ các thao tác khác. Một từ điển Python, là một triển khai tích hợp sẵn của bảng băm, sẽ nhanh chóng khi chèn hoặc tìm một mục; . Điều này có nghĩa là một từ điển có thể là một lựa chọn tuyệt vời cho các tác vụ liên quan đến nhiều điểm dữ liệu duy nhất cần được truy vấn thường xuyên, nhưng lại là một lựa chọn tồi nếu thứ tự của dữ liệu quan trọng

Python cũng có quyền truy cập vào các thư viện, như Numpy, sử dụng C để tạo cấu trúc dữ liệu nhanh hơn và hiệu quả hơn. Một ví dụ điển hình về điều này là danh sách Python so với mảng Numpy. Trong một số trường hợp, một mảng Numpy và một danh sách có thể hoán đổi cho nhau, tuy nhiên khi dữ liệu của bạn đồng nhất — tất cả đều cùng loại — một mảng có thể giúp bạn tiết kiệm thời gian và bộ nhớ. Đoạn mã dưới đây tạo một danh sách và một mảng Numpy có độ dài bằng nhau, sau đó thêm hai vào mỗi phần tử;

Được tạo bởi Tác giả
It Took 0.03738 seconds to add two to each element in our list
It Took 0.00026 seconds to add two to each element in our array

Chúng ta có thể thấy rằng mảng Numpy có cùng số lượng số nguyên có thể được thay đổi nhanh hơn nhiều so với đối tác danh sách của nó. Hiệu quả này đi kèm với chi phí linh hoạt, mặc dù. Danh sách Python có thể lưu trữ hỗn hợp các loại dữ liệu và dễ dàng nối thêm các phần tử hơn so với mảng Numpy. Numpy cung cấp một số thao tác không dễ đạt được trên danh sách Python mà không cần vòng lặp, nhưng Numpy được thiết kế dành riêng cho toán học và không nhằm xử lý nhiều loại dữ liệu như danh sách. Hy vọng rằng, ví dụ này cho thấy mức độ suy nghĩ có thể xảy ra khi sử dụng nhiều cấu trúc dữ liệu có sẵn cho bạn trong Python

Nhìn vào Mã trên Github

Mặc dù điều quan trọng là làm việc dựa trên ý tưởng của riêng bạn, nhưng học cách xem mã do các lập trình viên khác viết và hiểu nó đang làm gì là một kỹ năng rất quan trọng cần thành thạo. Sẽ có nhiều lần trong suốt sự nghiệp của bạn khi bạn được giao một chương trình được viết bởi một nhà phát triển trong quá khứ và dự kiến ​​sẽ nâng cấp hoặc duy trì nó trong tương lai. Tùy thuộc vào nhà phát triển đi trước bạn, nhiệm vụ này có thể từ đơn giản đến cực kỳ khó khăn. Vì Python là một ngôn ngữ rất linh hoạt nên thường có nhiều cách để giải quyết cùng một vấn đề với một loạt các tùy chọn cú pháp có sẵn. Đôi khi, các nhà phát triển tập trung nhiều hơn vào việc trở nên ngắn gọn với chi phí dễ đọc và nếu họ không sẵn sàng giải thích quá trình suy nghĩ của mình thì có thể mất nhiều thời gian hơn để cập nhật mã của họ

Điều này nghe có vẻ như là một kỹ năng khó thực hành, tuy nhiên, các ngôn ngữ như Python với các cộng đồng nguồn mở phát triển mạnh mang đến nhiều cơ hội để khám phá mã của các nhà phát triển có kinh nghiệm thông qua các thư viện mà họ xuất bản. Khi bạn sử dụng nhiều thư viện hơn như Numpy, Pandas và các thư viện nhỏ hơn, bạn có thể truy cập GitHub và cố gắng hiểu cách chúng triển khai các chức năng bạn sử dụng. Mặc dù một số thư viện lớn hơn - Numpy - có thể quá lớn, nhưng có rất nhiều thư viện nhỏ hơn dễ bắt đầu hơn

Cũng có khả năng cao là bạn có thể tìm thấy các lỗi hoặc sự thiếu hiệu quả trong chức năng của các thư viện mà bạn sử dụng trong các dự án; . Nếu bạn tìm thấy một lỗi, bạn có thể tiến xa hơn là chỉ báo cáo bằng cách tự sửa lỗi đó và đề xuất những thay đổi bạn đã thực hiện dưới dạng yêu cầu kéo. Vì hầu hết các thư viện Python được phát triển bởi các tình nguyện viên nên nó có thể rất hữu ích khi một thành viên cộng đồng đưa ra giải pháp cho một lỗi. Tìm lỗi có thể khó hơn người ta tưởng và người dùng thường là những người tìm thấy các trường hợp cạnh mà nhà phát triển không lường trước được. Những người bảo trì thư viện có thể hợp nhất các thay đổi của bạn vào cơ sở mã của họ hoặc thảo luận về lỗi và giải pháp được đề xuất với bạn để đưa ra giải pháp tốt nhất có thể

Cuối cùng, bạn không cần phải có lỗi để gửi yêu cầu kéo tới kho lưu trữ. Nếu bạn tìm thấy một dự án mà bạn quan tâm, vui lòng đề xuất các cải tiến mà bạn nghĩ đến khi sử dụng phần mềm của họ. Đóng góp cho các dự án mà bạn thích sử dụng là một trong những cách tốt nhất để hỗ trợ cộng đồng nguồn mở đã giúp Python trở thành một ngôn ngữ mạnh mẽ để sử dụng

Luôn tìm cách để tối ưu hóa

Khi bạn làm việc trong một dự án, hãy nghĩ về những cách bạn có thể giải quyết các bước hiệu quả hơn. Python có quyền truy cập vào rất nhiều công cụ và thường có một số cách để giải quyết cùng một vấn đề. Tuy nhiên, một số phương pháp thường sẽ nhanh hơn các tùy chọn khác. Vì chúng tôi thường sử dụng Python để làm việc với các bộ dữ liệu ngày càng lớn, nên việc cải thiện tốc độ mã của bạn có thể giảm đáng kể thời gian bạn chờ đợi khi làm việc và kiểm tra.

Ngay cả khi dự án hiện tại của bạn không cần phải hiệu quả, thì việc học cách viết mã gọn gàng và nhanh chóng sẽ giúp các dự án trong tương lai có nguồn lực hạn chế hơn trở nên dễ dàng hơn nhiều. Khi tôi lần đầu tiên bắt đầu phát triển mã Python cho các ứng dụng web, tôi nhanh chóng nhận ra việc tạo các chương trình Python cồng kềnh dễ dàng như thế nào và một số tác vụ nhất định có thể được thực hiện nhanh hơn bao nhiêu với các phương pháp phù hợp

Sử dụng đúng công cụ

Như chúng ta đã thấy khi so sánh danh sách Python với mảng Numpy, thường có nhiều cách để giải quyết vấn đề, nhưng mỗi phương pháp sẽ có những ưu điểm nhất định. Một ví dụ điển hình khác có thể được tìm thấy với việc sử dụng tốt các hàm có sẵn của Python, thường được viết bằng C để nhanh hơn nhiều

Ví dụ: tôi đã nhập một danh sách chỉ hơn 230.000 từ bằng thư viện nltk. Nếu tôi muốn viết hoa từng từ, tôi có thể lặp qua danh sách và gọi .upper[] trên mỗi từ. Một bước tốt hơn là sử dụng khả năng hiểu danh sách để làm cho vòng lặp của chúng ta hiệu quả hơn một chút. Nhưng tùy chọn nhanh nhất là sử dụng hàm map[] tích hợp sẵn của Python để áp dụng .upper[] cho mỗi từ trong danh sách

Our list contains 236736 words 

It took 0.03233 seconds using a for loop
It took 0.01148 seconds using list comprehension
It took 2e-05 seconds using 'map

Mặc dù không thể sử dụng map[] trong mọi tình huống, nhưng nó được tối ưu hóa cực kỳ tốt cho các tác vụ mà nó có thể được sử dụng cho. Khả năng hiểu danh sách cũng có tốc độ tăng đáng kể so với vòng lặp for truyền thống đồng thời linh hoạt hơn map[]

phụ thuộc phình to

Nhiều thư viện Python lớn và việc phải tải trong một phụ thuộc lớn chỉ để sử dụng một chức năng có thể thêm kích thước không cần thiết cho một dự án. Một trong những ứng dụng web đầu tiên của tôi đã hỏi người dùng về vị trí, họ sẵn sàng lái xe bao xa và họ muốn đi bộ bao xa. Chương trình Python sẽ lấy tất cả các đường mòn nằm trong bán kính lái xe và sau đó giải quyết một vòng lặp gần nhất với độ dài mong muốn. Vì có rất nhiều con đường mòn giao nhau ở các bang như Colorado, nên ý tưởng của chúng tôi là tạo ra một ứng dụng thú vị giúp chúng tôi tìm các chuyến đi bộ đường dài dài hơn ở các khu vực cụ thể

Thiết kế ứng dụng Python để tạo một mạng lưới các đường mòn và sau đó giải quyết một vòng lặp tối ưu rất thú vị và tôi đã học được rất nhiều về các thuật toán đồ thị. Phần khó khăn đến khi tôi cố gắng di chuyển nó lên đám mây. Rất tốn kém khi lưu trữ một phiên bản AWS luôn chạy và chờ ai đó tương tác với trang web, đặc biệt là đối với một dự án nhỏ sẽ không hoạt động thường xuyên hơn so với khi sử dụng. Vì vậy, tôi đã sử dụng phương pháp không có máy chủ, trong đó một phiên bản nhỏ sẽ xuất hiện bất cứ khi nào trang web đưa ra yêu cầu. Cuối cùng tôi đã chọn AWS Lambda cho serverless backend và nó hoạt động rất tốt

Vấn đề duy nhất là mã quá nặng đối với Lambda. Tôi đã cố gắng tối ưu hóa giải đồ thị để tạo mã đủ nhanh, tuy nhiên, tôi có quá nhiều phần phụ thuộc và vượt quá các yêu cầu nghiêm ngặt về kích thước của Lambda đối với môi trường. Tải nhiều thư viện như sci-kit learn, NumPy, Pandas và Scipy tạo nên một môi trường rộng lớn. May mắn thay, tôi đã có thể cấu trúc lại mã để sử dụng các chức năng từ một nhóm thư viện nhỏ hơn. Thật tuyệt khi nó hoạt động hiệu quả, nhưng đó là một bài học tốt để xem xét cách giải quyết các vấn đề với các thư viện tôi đang sử dụng thay vì nhập một thư viện mới mỗi khi tôi gặp một nhiệm vụ khó khăn để tìm ra

Thực hành thực hành thực hành

Tôi thấy rằng bước quan trọng nhất cần thực hiện để cải thiện kỹ năng của bạn với tư cách là nhà phát triển là thực hành một cách nhất quán. Có rất nhiều cách để thực hành lập trình như làm việc trong một dự án cá nhân mà bạn quan tâm hoặc dành thời gian để học các kỹ năng mới mà bạn không sử dụng trong công việc hiện tại. Điều quan trọng nữa là tiếp tục chú ý đến các kỹ năng cơ bản có thể không được sử dụng hàng ngày, chẳng hạn như các thuật toán

Các trang web như Leetcode đưa ra cho bạn những thách thức cụ thể cần giải quyết với những hạn chế về tốc độ là một cách tuyệt vời để thử thách bản thân một cách nhất quán. Tôi cũng thấy Leetcode là một cách để thử thách bản thân thú vị hơn một chút vì nó mang lại cho tôi cảm giác được khen thưởng khi mã của tôi vượt qua các trường hợp thử nghiệm

Đừng quên tăng dần độ khó nếu bạn là người mới học lập trình. Có thể khó thực hành các nguyên tắc cơ bản khi bạn muốn xây dựng các ứng dụng tuyệt vời và làm việc trên các dự án lớn hơn. Mặc dù thật tuyệt khi có tham vọng, nhưng hãy đảm bảo tăng dần độ khó cho công việc của bạn. Không có gì khiến việc học trở nên khó khăn hơn là bị choáng ngợp hoặc thất vọng, và bạn sẽ có khoảng thời gian dễ dàng hơn nhiều nếu chia việc học của mình thành nhiều phần dễ quản lý hơn

Điều này không có nghĩa là bạn không nên giải quyết một ý tưởng hay mà bạn có. Nhưng khi bạn gặp phải những thách thức mới, bạn có thể lùi lại một bước và dành thêm thời gian để thực sự tìm hiểu chủ đề mới thay vì sao chép thứ gì đó từ Stack Overflow và xem liệu nó có hoạt động không. Chắc chắn sẽ có lúc bạn chỉ cần làm cho mã hoạt động, nhưng để thực sự cải thiện, tốt nhất bạn nên dành thời gian để thực sự hiểu những gì bạn tìm thấy trong khi Google để giải quyết vấn đề của bạn

Ghi chú. Nếu bạn thích đọc nội dung của tôi và của những người khác ở đây trên Phương tiện, hãy cân nhắc đăng ký bằng liên kết bên dưới để hỗ trợ tạo nội dung như thế này và mở khóa những câu chuyện không giới hạn

2 tháng có đủ để học Python không?

Nói chung, bạn mất khoảng hai đến sáu tháng để tìm hiểu các kiến ​​thức cơ bản về Python . Nhưng bạn có thể học đủ để viết chương trình ngắn đầu tiên của mình chỉ trong vài phút. Phát triển khả năng làm chủ mảng thư viện khổng lồ của Python có thể mất hàng tháng hoặc hàng năm.

Tôi có thể học Python trong 10 ngày không?

Trung bình, có thể mất từ ​​5 đến 10 tuần để tìm hiểu kiến ​​thức cơ bản về lập trình Python, bao gồm lập trình hướng đối tượng, cơ bản .

Tôi có thể thành thạo Python sau 3 năm không?

Nếu bạn chỉ muốn tìm hiểu kiến ​​thức cơ bản về Python, có thể chỉ mất vài tuần. Tuy nhiên, nếu bạn đang theo đuổi sự nghiệp khoa học dữ liệu ngay từ đầu, bạn có thể mất từ ​​bốn đến mười hai tháng để học đủ Python nâng cao để sẵn sàng cho công việc.

Tôi có thể học Python trong 1 giờ không?

Nếu bạn chưa quen với lập trình python hoặc nếu bạn chỉ cần tìm hiểu các khái niệm, thì đây là khóa học dành cho bạn. Không cần đọc hàng trang tài liệu khi bạn có thể tìm hiểu tất cả về ngôn ngữ lập trình này chỉ trong một giờ thông qua các bài giảng ngắn gọn và dễ hiểu .

Chủ Đề