Kinh Nghiệm Học Coding Dành Cho Dân Trái Ngành

Công Nghệ
Kinh Nghiệm Học Coding Dành Cho Dân Trái Ngành
Tác giả: Mai Trần Dành cho những bạn không phải dân IT nhưng vì dòng đời xô đẩy mà đâm đầu vào con đường coding. Điểm bắt đầu Hãy tìm lấy cho mình một động cơ, vì sao bạn muốn học coding? Tớ muốn học từ rất lâu rồi, lúc đầu chỉ cho vui, nhưng khi nhìn thấy khối kiến thức khổng lồ thì hoảng và bỏ cuộc luôn sau tutorial video đầu tiên. Tớ chỉ bắt đầu học coding nghiêm túc sau khi nhập học chương trình Thạc sĩ Data Science ở Đức, trước đó tớ học Cử nhân Kinh tế Đối Ngoại ở FTU Hà Nội và Thạc sĩ Economics & Institutions ở Uni Marburg. Lúc bắt đầu, kiến thức về coding của tớ đúng là con số Không tròn trĩnh, tới mức còn không biết gì về “data types/variable types” các kiểu. Khi đó, tớ mới chỉ tiếp xúc với phần mềm thống kê Stata và viết các câu lệnh theo kiểu mẫu có sẵn, với syntax siêu đơn giản. Hành trình Có động cơ rồi thì bạn phải tìm cách thu xếp thời gian và lên kế hoạch, thậm chí chiến thuật cho hành trình của mình. Mục tiêu của bạn là gì? Bạn muốn hoàn thành mục tiêu trong bao lâu? Cái thuận lợi của tớ (hay là bất lợi không biết nữa) là vì bài tập trên trường cứ chất đống lên nên phải nhảy bổ vào học ngấu nghiến để giải quyết vấn đề, không có thời gian mà trăn trở học như thế nào. Các môn học trong chương trình Data Science được dạy bởi Khoa Toán và Khoa CNTT của trường. Và điều đó có nghĩa là bọn tớ “được” ưu ái học các môn Toán với dân Thạc sĩ Toán...
Tác giả: Mai Trần
Dành cho những bạn không phải dân IT nhưng vì dòng đời xô đẩy mà đâm đầu vào con đường coding.

Điểm bắt đầu

Hãy tìm lấy cho mình một động cơ, vì sao bạn muốn học coding? Tớ muốn học từ rất lâu rồi, lúc đầu chỉ cho vui, nhưng khi nhìn thấy khối kiến thức khổng lồ thì hoảng và bỏ cuộc luôn sau tutorial video đầu tiên. Tớ chỉ bắt đầu học coding nghiêm túc sau khi nhập học chương trình Thạc sĩ Data Science ở Đức, trước đó tớ học Cử nhân Kinh tế Đối Ngoại ở FTU Hà Nội và Thạc sĩ Economics & Institutions ở Uni Marburg. Lúc bắt đầu, kiến thức về coding của tớ đúng là con số Không tròn trĩnh, tới mức còn không biết gì về “data types/variable types” các kiểu. Khi đó, tớ mới chỉ tiếp xúc với phần mềm thống kê Stata và viết các câu lệnh theo kiểu mẫu có sẵn, với syntax siêu đơn giản.

Hành trình

Có động cơ rồi thì bạn phải tìm cách thu xếp thời gian và lên kế hoạch, thậm chí chiến thuật cho hành trình của mình. Mục tiêu của bạn là gì? Bạn muốn hoàn thành mục tiêu trong bao lâu? Cái thuận lợi của tớ (hay là bất lợi không biết nữa) là vì bài tập trên trường cứ chất đống lên nên phải nhảy bổ vào học ngấu nghiến để giải quyết vấn đề, không có thời gian mà trăn trở học như thế nào. Các môn học trong chương trình Data Science được dạy bởi Khoa Toán và Khoa CNTT của trường. Và điều đó có nghĩa là bọn tớ “được” ưu ái học các môn Toán với dân Thạc sĩ Toán và học các môn CNTT với dân Thạc sĩ CNTT. Với nhiều bạn thì điều đó không thành vấn đề vì vốn các bạn đã là dân Toán/IT, thậm chí đi làm dev dăm năm rồi, chỉ có một phần nhỏ là dân trái ngành như tớ, bao gồm Kinh tế, Tài chính, Tâm Lý học, Kĩ thuật điện,… Do lúc đó em bé nhà tớ mới được năm tháng, nên tớ quyết định học hết các môn Toán trước (vì vốn cấp Ba học chuyên Toán nên tớ mới bắt đầu như vậy cho dễ), rồi mới chuyển sang các môn IT.
Vì khoa Toán chủ yếu dùng R nên tớ bắt đầu viết thuật toán với R, rồi mới tới Python, Java, mấy ngôn ngữ command line của Linux như bash, awk các kiểu, rồi thêm pyspark lúc học môn Big Data Analytics. Bên cạnh lập trình, thuật toán, tớ còn được học thêm khá kĩ về phần database, cả relational với ngôn ngữ truy vấn SQL lẫn non-relational database với các ngôn ngữ truy vấn kiểu NoSQL. Dĩ nhiên là trình độ coding của tớ tới giờ vẫn còn gà lắm, nhưng so với ngày mới lò dò bước vào lớp “Java for dummies” thì tớ đã vỡ lẽ ra kha khá rồi nên thôi thì cứ viết tổng hợp kinh nghiệm lại, biết đâu có ai đó cần.

Kinh nghiệm

Ngày trước, khi còn ở Việt Nam, tớ từng hỏi một bạn đi du học Pháp rằng liệu bạn có áp dụng được kiến thức đã học vào công việc không. Bạn ấy nói một câu mà tớ nhớ mãi, đó là việc đi học không phải để học hết các kiến thức mình cần, mà là để học được “cách học”. Quả đúng như thế, nhất là khi công nghệ thay đổi không ngừng thì kiến thức nhà trường dạy rất nhanh trở nên lạc hậu. Không quan trọng việc chúng ta đã học được bao nhiêu ngôn ngữ, mà quan trọng là chúng ta phải tìm ra cách học phù hợp với mình, hiệu quả với công việc mình đang làm!
Việc học coding nhìn chung cần sự kiên nhẫn, ham học hỏi, tư duy logic, cẩn thận. Biết tiếng Anh là một lợi thế. Tớ tạm chia việc học một ngôn ngữ ra làm ba chặng như sau:

1. Khởi động:

Trình độ cơ bản thì bắt đầu với syntax chung, data types, operators, conditions, loops là ổn, có thể viết được đủ thứ để chạy chương trình được rồi. Đây là phần khung xương, hơi nhàm chán nhưng cực kì quan trọng, có thể xem như khi bạn học ngữ pháp của một ngôn ngữ mới vậy đó. Lúc này, bạn sẽ được học sâu hơn về tầm quan trọng của từng dấu chấm phẩy, lùi dòng, ngoặc đơn, ngoặc kép, viết comment như thế nào. Hồi mới học Java, tớ viết vài dòng là hỏng lên hỏng xuống, đôi lúc chỉ vì mở mà quên đóng ngoặc hoặc đóng ngoặc sai chỗ ấy (dễ xảy ra khi copy code từ đâu đó về rồi tự xào nấu lại). Lúc debug đọc log mà đến phát khóc vì chả hiểu nó nói lỗi ở đâu. R và Python thì ít khi dùng tới các dấu ngoặc hơn, nhưng phải tuân thủ lùi dòng. Đối với dân Data Science nói riêng thì hai ngôn ngữ này có đủ thư viện cho thống kê, mô hình, đồ thị các kiểu nên ít khi tớ phải tự viết packages mới, hay thậm chí là tạo class mới như khi sử dụng Java. Tớ đã học trình độ cơ bản trên những trang sau:
https://www.tutorialspoint.com: trang này có giải thích đơn giản, ngắn gọn, có nhiều ví dụ với hướng dẫn chi tiết, lại chia làm các phần nhỏ, có từ basic tới advanced nên dễ chia dễ trị. Các bài học cũng được sắp xếp theo thứ tự hợp lý. Sau đó, tùy vào nhu cầu mà bạn học lên hướng advanced cho phù hợp.
https://Coding: trang này là cứu cánh của cuộc đời tớ hồi mới học Java. Trên đó có những đề bài nhỏ với mục đích giúp chúng ta luyện tư duy lập trình. Chẳng hạn, đây là một đề bài ngắn dành cho Java mang tính khởi động.
Hồi đó, tớ thường dùng tư duy toán để giải quyết vấn đề. Thêm một ví dụ nữa, đề bài dưới đây bảo tính tổng các số liên tiếp tới n thì tớ nghĩ ngay tới việc tính n(n+1)/2 và không tài nào hiểu nổi sao lại phải dùng “for loop” làm gì. Dĩ nhiên tư duy toán của tớ không sai, nhưng sẽ không dùng cách đó để tính tổng cho một dãy số bất kì không cách đều nhau, bởi vậy, cách tư duy lập trình là dùng cách tính increment để tổng quát hóa bài toán lên. Rất buồn cười là tư duy toán cũng khiến tớ ngứa cả mắt khi nhìn “đẳng thức” increment sum = sum + num (hình dưới). Mãi tới khi giải rất nhiều đề bài trên codingbat thì tớ mới quen được với một kiểu tư duy giải quyết vấn đề mới. Nhờ thế mà tớ đã bắt đầu hình thành phản xạ trong giải quyết các bài toán nhỏ.
https://www.geeksforgeeks.org/python-programming-examples/: tớ cũng hay đọc trên trang này, nhưng chưa luyện bài tập trên đó bao giờ. Ở đây có thêm nhiều ví dụ, chương trình nhỏ để bạn luyện cách viết code cũng như tư duy. Còn nhiều trang khác gợi ý những đề bài, dự án nhỏ với cả đáp án mẫu cho chúng ta lắm, google là ra thôi.
Bên cạnh những trang trên thì tớ hay tận dụng 10-15 phút mỗi ngày để học thêm trên app điện thoại SoloLearn. Tớ học toàn bộ lý thuyết python trên bản miễn phí này, và thi thoảng vào đấu challenges cho vui, vừa để khỏi quên kiến thức.

2. Vượt chướng ngại vật và tăng tốc:

Đây chắc là lúc bạn thấy ngán, vì nhiều thứ phải học quá và nhìn lên đỉnh núi thấy cao vời vợi. Bạn thấy mình cứ quên trước quên sau, thậm chí lẫn lộn nếu như học vài ngôn ngữ một lúc và lúng túng khi gặp vấn đề mới. Không sao đâu, đây là chuyện bình thường. Cũng giống như khi học ngoại ngữ, bạn không cần biết hết mọi từ vựng để có thể sử dụng được, mà cần tới đâu thì dùng tới đấy. Đây là lúc bạn nên chọn một hướng để học lên advanced. Nếu như công việc đòi hỏi bạn làm gì thì bạn đi theo hướng đó. Như tớ chẳng hạn, phần lớn thời gian tớ viết data pipeline, data modelling với pyspark, khi cần giải quyết vấn đề gì mới trong pipelining thì tớ google và gần như lúc nào cũng tìm thấy đáp án trên các diễn đàn như https://stackoverflow.com/. tớ hay đọc cách mọi người giải quyết vấn đề trên này, theo nhiều hướng khác nhau và quay trở lại đọc thêm trong documentation cũng như các ví dụ khác để học cách sử dụng một cách linh hoạt. Lại phải nói thêm là không phải lúc nào documentation cũng dễ hiểu, bạn nhất định phải nắm chắc các khái niệm cơ bản ở bước 1 để đọc hiểu documentation của ngôn ngữ hay từng package dễ dàng hơn.
Sau này, công việc đòi hỏi tớ phải thiết kế web app, vì vậy tớ tự đọc sách thêm về html, css và javascript. Vốn html và css không phải ngôn ngữ lập trình nên nó lại đòi hỏi kiểu tư duy khác. Tớ hay đọc sách, bạn thích thì có thể coi tutorials trên youtube. Khi nắm được khái niệm mấu chốt rồi thì tớ cứ dựa vào documentation mà làm thôi.

3. Về đích:

chắc chẳng có lúc nào được gọi là về đích cả. Học ngôn ngữ nào cũng thế, học cho chắc, cho thành thạo một ngôn ngữ còn hơn là biết mỗi thứ một tí mà chẳng có tư duy giải quyết vấn đề gì cả. Hồi mới học java trên trường thì thầy dạy cả các khái niệm về object-oriented, rồi lên luôn advanced mà không để ý gì tới bọn beginner như tớ. Khi đó tớ thấy khá là chơi vơi vì đọc phần giải thích trừu tượng mấy lần vẫn chả hiểu gì. Mãi tới khi tớ lấy hết sức can đảm thú thật với thầy rẳng em chẳng hiểu gì hết thì thầy mới tổ chức thêm lớp phụ đạo Java for dummies ngoài giờ. Ấy là lần đầu tiên tớ được chứng kiến tận mắt tư duy lập trình là như thế nào. Thầy ra đề bài viết trò chơi Tic Tac Toe (giống kiểu chơi cờ ca-rô). Sau đó, thầy bắt đầu đặt các câu hỏi nhỏ để bọn tớ phát triển ý tưởng: lấy gì làm bàn cờ, làm sao biết được ai đánh dấu ở đâu, các đối thủ luân phiên chơi như thế nào, trò chơi kết thúc khi nào, và xắn tay áo lên viết từng class mẫu cho bọn tớ. Lúc đó tớ mới hiểu ra sức mạnh của object-orientation và về nhà viết một mạch hết trò chơi ấy. Đến hôm thứ ba, tớ đã có thể tự viết code cho một trò chơi khác (Connect Four) và thầy rất hào hứng bảo tớ phải gửi package đấy lên diễn đàn của lớp (nhưng chắc chả ma nào thèm xem). Đến đây, tớ chỉ muốn nói rằng, dù không có cái đích nào nhưng chúng ta tạm có thể coi như đã về đích khi ta hiểu được những khái niệm trụ cột của một ngôn ngữ, hình thành được tư duy coding, phản xạ khi đối diện với những đề bài cơ bản, và có thể tự học lên mức advanced bằng cách đọc hiểu documentation cũng như các ví dụ cụ thể. À, một lần sếp trên cơ quan gọi pizza về rồi cả nhóm bọn tớ mỗi đứa cầm một miếng bánh pizza ngồi châu đầu bên máy tính của sếp cùng debug, ấy là lúc tớ cảm thấy mình trở thành dân geek thực sự rồi đấy!
Tóm lại, tớ thấy học ngôn ngữ lập trình cũng như học ngoại ngữ ấy, phải sử dụng thì mới ngấm, mới khiến nó thành của mình được, còn cứ ngồi ngâm cứu mấy chương sách, hay bao nhiêu tutorials mà không tự viết chương trình nào, không đâm đầu vào bao nhiêu bugs rồi hí hoáy debug thì khó ngấm vào người lắm. Thôi, bạn còn chờ gì nữa mà không xắn tay áo nhảy vào luôn đi. Have fun coding!
Bài viết gốc được đăng tải tại Blog Mai knows
Có thể bạn quan tâm:

Bài viết liên quan

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bộ cài đặt Laravel Installer đã hỗ trợ tích hợp Jetstream

Bài viết được sự cho phép của tác giả Chung Nguyễn Hôm nay, nhóm Laravel đã phát hành một phiên bản chính mới của “ laravel/installer ” bao gồm hỗ trợ khởi động nhanh các dự án Jetstream. Với phiên bản mới này khi bạn chạy laravel new project-name , bạn sẽ nhận được các tùy chọn Jetstream. Ví dụ: API Authentication trong Laravel-Vue SPA sử dụng Jwt-auth Cách sử dụng Laravel với Socket.IO laravel new foo --jet --dev Sau đó, nó sẽ hỏi bạn thích stack Jetstream nào hơn: Which Jetstream stack do you prefer? [0] Livewire [1] inertia > livewire Will your application use teams? (yes/no) [no]: ... Nếu bạn đã cài bộ Laravel Installer, để nâng cấp lên phiên bản mới bạn chạy lệnh: composer global update Một số trường hợp cập nhật bị thất bại, bạn hãy thử, gỡ đi và cài đặt lại nha composer global remove laravel/installer composer global require laravel/installer Bài viết gốc được đăng tải tại chungnguyen.xyz Có thể bạn quan tâm: Cài đặt Laravel Làm thế nào để chạy Sql Server Installation Center sau khi đã cài đặt xong Sql Server? Quản lý các Laravel route gọn hơn và dễ dàng hơn Xem thêm Tuyển dụng lập trình Laravel hấp dẫn trên Station D

By stationd
Principle thiết kế của các sản phẩm nổi tiếng

Principle thiết kế của các sản phẩm nổi tiếng

Tác giả: Lưu Bình An Phù hợp cho các bạn thiết kế nào ko muốn làm code dạo, design dạo nữa, bạn muốn cái gì đó cao hơn ở tầng khái niệm Nếu lập trình chúng ta có các nguyên tắc chung khi viết code như KISS , DRY , thì trong thiết kế cũng có những nguyên tắc chính khi làm việc. Những nguyên tắc này sẽ là kim chỉ nam, nếu có tranh cãi giữa các member trong team, thì cứ đè nguyên tắc này ra mà giải quyết (nghe hơi có mùi cứng nhắc, mình thì thích tùy cơ ứng biến hơn) Tìm các vị trí tuyển dụng designer lương cao cho bạn Nguyên tắc thiết kế của GOV.UK Đây là danh sách của trang GOV.UK Bắt đầu với thứ user cần Làm ít hơn Thiết kế với dữ liệu Làm mọi thứ thật dễ dàng Lặp. Rồi lặp lại lần nữa Dành cho tất cả mọi người Hiểu ngữ cảnh hiện tại Làm dịch vụ digital, không phải làm website Nhất quán, nhưng không hòa tan (phải có chất riêng với thằng khác) Cởi mở, mọi thứ tốt hơn Bao trừu tượng luôn các bạn, trang Gov.uk này cũng có câu tổng quát rất hay Thiết kế tốt là thiết kế có thể sử dụng. Phục vụ cho nhiều đối tượng sử dụng, dễ đọc nhất nhất có thể. Nếu phải từ bỏ đẹp tinh tế – thì cứ bỏ luôn . Chúng ta tạo sản phẩm cho nhu cầu sử dụng, không phải cho người hâm mộ . Chúng ta thiết kế để cả nước sử dụng, không phải những người đã từng sử dụng web. Những người cần dịch vụ của chúng ta nhất là những người đang cảm thấy khó sử dụng dịch...

By stationd
Hiểu về trình duyệt – How browsers work

Hiểu về trình duyệt – How browsers work

Bài viết được sự cho phép của vntesters.com Khi nhìn từ bên ngoài, trình duyệt web giống như một ứng dụng hiển thị những thông tin và tài nguyên từ server lên màn hình người sử dụng, nhưng để làm được công việc hiển thị đó đòi hỏi trình duyệt phải xử lý rất nhiều thông tin và nhiều tầng phía bên dưới. Việc chúng ta (Developers, Testers) tìm hiểu càng sâu tầng bên dưới để nắm được nguyên tắc hoạt động và xử lý của trình duyệt sẽ rất hữu ích trong công việc viết code, sử dụng các tài nguyên cũng như kiểm thử ứng dụng của mình. Cách để npm packages chạy trong browser Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser? Khi hiểu được cách thức hoạt động của trình duyệt chúng ta có thể trả lời được rất nhiều câu hỏi như: Tại sao cùng một trang web lại hiển thị khác nhau trên hai trình duyệt? Tại sao chức năng này đang chạy tốt trên trình duyệt Firefox nhưng qua trình duyệt khác lại bị lỗi? Làm sao để trang web hiển thị nội dung nhanh và tối ưu hơn một chút?… Hy vọng sau bài này sẽ giúp các bạn có một cái nhìn rõ hơn cũng như giúp ích được trong công việc hiện tại. 1. Cấu trúc của một trình duyệt Trước tiên chúng ta đi qua cấu trúc, thành phần chung và cơ bản nhất của một trình duyệt web hiện đại, nó sẽ gồm các thành phần (tầng) như sau: Thành phần nằm phía trên là những thành phần gần với tương tác của người dùng, càng phía dưới thì càng sâu và nặng về xử lý dữ liệu hơn tương tác. Nhiệm...

By stationd
Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Thị trường EdTech Vietnam- Nhiều tiềm năng nhưng còn bị bỏ ngỏ tại Việt Nam

Lĩnh vực EdTech (ứng dụng công nghệ vào các sản phẩm giáo dục) trên toàn cầu hiện nay đã tương đối phong phú với nhiều tên tuổi lớn phân phối đều trên các hạng mục như Broad Online Learning Platforms (nền tảng cung cấp khóa học online đại chúng – tiêu biểu như Coursera, Udemy, KhanAcademy,…) Learning Management Systems (hệ thống quản lý lớp học – tiêu biểu như Schoology, Edmodo, ClassDojo,…) Next-Gen Study Tools (công cụ hỗ trợ học tập – tiểu biểu như Kahoot!, Lumosity, Curriculet,…) Tech Learning (đào tạo công nghệ – tiêu biểu như Udacity, Codecademy, PluralSight,…), Enterprise Learning (đào tạo trong doanh nghiệp – tiêu biểu như Edcast, ExecOnline, Grovo,..),… Hiện nay thị trường EdTech tại Việt Nam đã đón nhận khoảng đầu tư khoảng 55 triệu đô cho lĩnh vực này nhiều đơn vị nước ngoài đang quan tâm mạnh đến thị trường này ngày càng nhiều hơn. Là một trong những xu hướng phát triển tốt, và có doanh nghiệp đã hoạt động khá lâu trong ngành nêu tại infographic như Topica, nhưng EdTech vẫn chỉ đang trong giai đoạn sơ khai tại Việt Nam. Tại Việt Nam, hệ sinh thái EdTech trong nước vẫn còn rất non trẻ và thiếu vắng nhiều tên tuổi trong các hạng mục như Enterprise Learning (mới chỉ có MANA), School Administration (hệ thống quản lý trường học) hay Search (tìm kiếm, so sánh trường và khóa học),… Với chỉ dưới 5% số dân công sở có sử dụng một trong các dịch vụ giáo dục online, EdTech cho thấy vẫn còn một thị trường rộng lớn đang chờ được khai phá. *** Vừa qua Station D đã công bố Báo cáo Vietnam IT Landscape 2019 đem đến cái nhìn toàn cảnh về các ứng dụng công...

By stationd