
Bây giờ, khi tôi bắt đầu học một ngôn ngữ mới( gần đây tôi học python và switf), tôi biết chính xác rằng tôi chỉ cần dưới một tháng để học hết những CONCEPTS, sau đó mới bắt đầu lập trình.
Trong bài này, tôi sẽ chia sẻ cho bạn hết những bí quyết mà tôi đã tích góp sau bao năm kinh nghiệm học và làm việc với nhiều ngôn ngữ khác nhau . Tôi huy vọng sẽ giúp ích đối với những beginning programmers mà có chút lưỡng lự về việc chọn ngôn ngữ nào .
Bài viết cũng sẽ giúp cho những experience programmer nhận ra rằng họ đang mạo hiểm khi chỉ biết đến ngôn ngữ mà họ đã với làm việc với nó trong nhiều năm và động lực khuyến khích họ học thêm nhiều thứ mới. Nào chúng ta cùng bắt đầu nào !
PROGRAMMING IS A CONCEPT
Nguyên nhân đầu tiên tôi nghĩ tại sao việc lựa chọn ngôn ngữ lập trình không phải là thứ được ưu tiên mà thực ra việc cài đặt một patterns ( hiểu là mô hình hoặc kiểu mẫu) mới giúp chúng ta xây dựng một machine hiệu quả để giải quyết các vấn đề thực tế. Nó là một khái niệm cốt lõi, nếu bạn nhặt (pick up) 2 quyển sách lập trình với 2 ngôn ngữ khác nhau và lướt qua 5 chương đầu tiên, rõ ràng bạn sẽ notice được những patterns. Sẽ có lessons trên các biến đã xác định với những kiểu dữ liệu khác nhau. Phân chia những giá trị theo nhiều biến, tính logic và các hàm toán học được biểu diễn trên nhiều biến.Sẽ cũng có lessons cho bạn về việc dạy computer to take những quyết định logic như câu lệnh if, else or switch và thiết lập các vòng lập như while, for.Vì vậy, theo thời gian, bạn sẽ pick up ngôn ngữ lập trình thứ 3, bạn sẽ biết những gì được sẽ có trong 10 chương đầu tiên. Một cách dễ nhận thấy, sẽ có nhiều ngôn ngữ mà có những đặc điểm đặc biệt mà bạn chưa từng thấy trước đó. Nhưng điều đó thì không nên chiếm 30 phần trăm toàn bộ kết quả đề cần học một ngôn ngữ mới .
Tôi luôn đề nghị những new programmer nên học cách viết một thuật toán tốt. Bất cứ khi nào bạn có một vấn đề mà có thể giải quyết thông qua một quyết định logic dựa trên dữ liệu và tính toán, bạn nên nghĩ về cách mà có thể giải quyết TASK đó nếu bạn phải làm bằng tay và giấy. Sau đó nên ghi lại từng bước trên quyển sổ ghi chép, và suy nghĩ làm sao đó tối ưu hóa đầu ra với số step nhỏ nhất.
Ví dụ, giả thiết rằng chúng ta làm việc cho một công ty bảo hiểm và nếu bạn phải tính toán số tiền bảo hiểm cần được thu từ một customer tương lai cho việc cung cấp "life cover " benefit với 100000 đô la tiền mặt. Nếu bạn phải làm việc đó mà không dùng đến hệ thống phần mềm doanh nghiệp ( sử dụng pen, paper, calculator và những document ) bạn phải làm theo các bước sau:
1.Xác định số tuổi của khách hàng dựa theo ngày tháng được cung cấp.
2.Tra cứu mức phí bảo hiểm (mỗi bảo hiểm là 1000 đô la tiền mặt) từ biểu đồ thể hiện đặc tính sản phẩm theo độ tuổi.
3.Nhân phí bảo hiểm với số tiền mặt được yêu cầu là 100 000 đô la tiền mặt.
Nếu bạn đã hiểu rõ những bước được đề cập phía trên, thì bạn có thể covert chúng trong một hệ thống phần mềm bằng một ngôn ngữ lập trình mà bạn đã chọn bằng cách theo dõi những bước sau đây:
1.Đưa những input liên quan đến những yêu cầu của khách hàng thông qua giao diện người dùng như desktop or mobile.
2.Sử dụng input để xác định độ tuổi khách hàng bằng cách sử dụng các hàm lịch tiêu chuẩn có sẵn trong ngôn ngữ của bạn.
3.Truy vấn cơ sở dữ liệu doanh nghiệp để tìm kiếm mức bảo hiểm dựa trên độ tuổi khách hàng.
4.Nhận mức phí bảo hiểm theo số tiền mặt yêu cầu để xác định mức phí yêu cầu.
5.In phí bảo hiểm đã được tính ra UI.
Tất cả những ngôn ngữ lập trình phổ biến đều cung cấp cho bạn những phương pháp để giải quyết những bài bước trên.Vì vậy nếu bạn viết một chương trình bằng JAVA để nó làm những việc này, bạn nghĩ bạn mất bao lâu để làm được điều đó bằng python ?
Chương trình máy tính chỉ giúp bạn thực hiện những câu lệnh một cách lặp đi lặp lại và rất nhanh. Nhưng điều đó phụ thuộc vào lập trình viên xác định cách họ viết những câu lệnh đó như thế nào mà điều đó một lần nữa phụ thuộc vào việc bạn viết thuật toán có đủ tốt hay không ?
Nếu bạn có thể phân bố một vấn đề thành các bước nhỏ, riêng biệt và độc đáo một cách khoa học thì khả năng cao bạn sẽ trở thành một lập trình viên giỏi. Thuật toán tồn tại vĩnh viễn. Chúng chèo lái một chương trình phần mềm mà chúng được viết bởi bất kỳ ngôn ngữ lập trình nào. Nếu bạn hiểu thuật toán, bạn có thể dễ dàng thay đổi để chạy một application sao cho minimal effort.
Bạn cũng nên thảo luận về cấu trúc dữ liệu nên có một good understanding of which algorithms work well on which data structures. Cấu trúc dữ liệu giúp xác định dữ liệu của bạn được tổ chức như thế nào với một application. All kinds of software manipulate small or large sets of data in order to produce a meaningful result.Vì vậy, chương trình của bạn có làm việc hiệu quả hay không phụ thuộc kind của cấu trúc dữ liệu mà bạn sử dụng. Một vài cấu trúc dữ liệu phổ biến như Lists, Maps, Sets and and N dimensional matrices. Thuật toán làm việc trên cấu trúc dữ liệu để tạo ra sản phẩm.
Một khái niệm mà bạn nên tập trung vào đó là Design patterns ( mô hình thiết kế). Design patterns capture how programming tasks with similar types of challenges can be solved by following a pattern that has proved to be successful in the past and has been able to repeat its success in different kinds of projects.Hầu hết các mô hình thiết kế phổ biến không theo một chuẩn mực nào và có thể được thực hiện bởi bất kỳ ngôn ngữ nào.Một ví dụ đơn giản, mô hình thiết kế phổ biến FACTORY DESIGN mà được tóm gọn trong đối tượng là object-oriented programming languages.
Với những khái niệm như trên, bạn có thể chinh phục bất kỳ ngôn ngữ nào trong một thời gian rất ngắn.Điều mà bạn thật sự cần học cho bất cứ ngôn ngữ nào là những keywords, syntax(cú pháp), application programming interfaces ( APIs) và chắc chắn là các khái niệm. Những khía cạnh này bạn có thể làm chủ nó bằng cách bắt đầu một dự án mini ngay lập tức.
Cá nhân tôi không thích 'hello wolrd", dự án mà bạn chọn phải là một cái gì đó thực tế dù rằng nó không phải là quy mô lớn. You can simply build to-do list software or a spending tracker for yourself.
Trong một vài ngày đầu tiên, bạn phải xem qua một quyển sách hoặc một tài liệu online cho cú pháp và APIs. Tuy nhiên, bạn càng viết mã nhiều, bạn càng ít cần đọc tài liệu tham khảo hơn.
PROGRAMMING IS COMMUNICATION
Lập trình là hướng dẫn machine hành động để trình diễn để mà giải quyết một vấn đề trong thế giới thật. So efficient communication is more important than the choice of programming language for an efficiently written software program.
Theo kinh nghiệm của tôi, một người với kỹ năng giao tiếp tốt( qua lời nói và viết) có thể trở thành một lập trình viên tốt. Lập trình cách giao tiếp với máy như thế nào đó để thực hiện chính xác từng bước để phần mềm có thể đạt được mục tiêu. Lập trình viên talk với machine bằng ngôn ngữ sao cho trình biên dịch có thể hiểu được, which again converts the instructions into microprocessor-readable instructions.
Khoảng hai mươi năm về trước, các lập trình viên sử dụng ngôn ngữ assembly để mã hóa bộ vi xử lý. Nó là ngôn ngữ cấp rất thấp, mà điều đó đòi hỏi sự hiểu biết về kiến trúc phần cứng. Khi mà lập trình được cải tiến, thì chúng ta có thể tạo ra một ngôn ngữ lập trình mà nó gần gũi với ngôn ngữ tự nhiên. Mục tiêu mà chúng ta luôn luôn hướng đến là tạo ra một ngôn ngữ mà khi sử dụng chúng ta cảm thấy thoải mái nhất, giống như các ngôn ngữ lập trình cố gắng sao cho code mà ta viết phải clean và dễ hiểu nhất có thể, khoảng cách giữa cú pháp mã hóa cũng đang dần trở nên giảm. This can reduce the learning curve to learn a new programming language.
Lập trình viên Python có thể viết 10 dòng code để giải quyết một vấn đề mà làm mất hơn 100 dòng code nếu được viết bằng ngôn ngữ C. Tuy nhiên, một lập trình viên C có thể học dễ dàng Java nếu như thành thạo các khái niệm OPP ( lập trình hướng đối tượng). Tương tự, một lập trình viên Java có thể dễ dàng chuyển sang ngôn ngữ Python cho sự nỗ lực ít hơn một tháng.
Nếu bạn có thể instruct một machine trong Java, bạn chắn chắn sẽ lảm được điều tương tự trong Python.Vì vậy sự tập trung của bạn nên dành cho việc học bất kỳ popular general-purpose, preferably OOP, language. Nếu bạn làm được điều đó, khi chuyển qua bất kỳ ngôn ngữ nào không quá khó như những gì bạn nghĩ.
NO PROGRAMMING LANGUAGES IS ONE-SIZE-FIRST-ALL
Một nguyên nhân khác mà bạn không nên tập trung vào bất kỳ đặc biệt ngôn ngữ nào là việc chọn lựa ngôn ngữ nào nó phụ thuộc vào type của vấn đề mà bạn đang cố gắng giải quyết. Đối với phần mềm doanh nghiệp, sẽ rất phù hợp nếu bạn chọn JAVA , đối với những project có liên quan đến khoa học dữ liệu, bạn nên chọn python, đối với mobile development, bạn nên chọn swift.Lý do đằng sau đó là việc có sẵn framework and packages làm cho một ngôn ngữ lập trình phù hợp với những dự án nhất định.Framework nắm giữ nhiều boilerplate code và giúp programmer tập trung nhiều hơn vào vấn đề được giải quyết.
Vậy lời khuyên của tôi là hãy master những khái niệm căn bản của lập trình được mô tả trước đó ( algorithm, data structures và design patterns) của ngôn ngữ mà project của bạn đang sử dụng. Nếu bạn làm điều đó một cách hợp phù hợp, nó sẽ dễ dàng cho bạn để move đến bất cứ ngôn ngữ bất kỳ nào khác khi bạn thay đổi dự án, lựa chọn công ty khác hay muốn theo đuổi một dự án cá nhân.
Trước khi bắt tay vào bất kỳ một dự án mới, bạn phải nguyên cứu best fit cho dự án đó. Bạn không nên đi thẳng vào việc giải quyết project, đi thẳng vào ngôn ngữ mà hãy chuẩn bị thật tốt. 3/4 là chuẩn bị, việc giải quyết chỉ chiếm 1/4. Điều đó dễ dẫn đến rủi ro.
THE PROGRAMING LANDSCAPE IS EVOLVING FAST
Công nghệ thì thay đổi rất nhanh. Một vài ngôn ngữ phổ biến như Perl và Ruby đang trên đường tuyệt chủng và những ngôn ngữ khác như Swift, kotlin thì đang phổ biến nhanh.giống như việc chúng ta cố gắng khám phá những cái mới trong ngôn ngữ mà được sử dụng cho việc giải quyết những vấn đề in our life ( home automation, self-driving car, robotic surgevy). Chúng ta liên tục tạo ra những ngôn ngữ mới, nhiều framework, và tools để chúng nhanh hơn và tốt hơn .Vì vậy nếu bạn muốn nắm lấy tương lai nghề nghiệp của bạn trong thời đại này thì bạn phải tiến triển rất nhanh bằng cách học những concepts của những ngôn ngữ mới (ex: deep learning) và ngôn ngữ để bạn có thể bắt kịp sự thay đổi này và xứng đáng vào ngày mai.Luôn luôn cố gắng tập trung vào những quy tắc lập trình cơ bản (basic programming principles) mà được đề cập phía trên.
Cuối cùng, tôi hy vọng có thể thuyết phục bạn tại sao phải dành sự ưu tiên cho programming concepts hơn ngôn ngữ lập trình. Nếu bạn có kiến thức nền tốt, thì bạn sẽ tồn tại trong thế giới mà công nghệ thay đổi chóng vánh bằng việc học một ngôn ngữ mới phù hợp mục đích của bạn. Điều này giúp bạn đứng vững và không gì lay chuyển được.
NGUỒN: John Somez.






Không có nhận xét nào:
Đăng nhận xét