Lập trình dễ hay khó?

Nhân dịp reset lại blog (thật ra là bị mất dữ liệu :’|) viết bài đầu tiên dành cho các bạn mới bắt đầu tìm hiểu về lập trình những cái nhìn cơ bản nhất bằng cách trả lời câu hỏi “Lập trình dễ hay khó?”

Tạm thời mình chưa trả lời trực tiếp câu hỏi trên mà trước hết trả lời một số vấn đề sau:

1. Làm sao để sẵn sàng học lập trình

Nếu bạn đang đọc bài viết này thì ít nhất bạn cũng đã có hứng thú với lập trình, đó cũng là yêu cầu tiên quyết để bắt đầu học và đi trên còn đường này. Ngoài hứng thú ra thì mình thấy bạn nên có những kỹ năng sau để biết mình sẵn sàng học lập trình:

  • Tư duy logic và đặc biệt là không “thù” môn toán: Cơ sở logic & toán học là nền tảng của máy tính và lập trình, tuy nhiên bạn không cần đạt đến trình độ toán cao cấp, đại số, tích phân gì đó mới có thể học lập trình.
  • Hiểu biết cơ bản về máy vi tính và internet: Làm chủ được máy tính và internet giúp bạn có thể tiếp cận đến việc lập trình trên nó một cách dễ dàng hơn.
  • Ham học hỏi, kiên trì, biết chấp nhận thất bại và làm lại: Với tốc độ thay đổi chóng mặt của công nghệ thì lượng kiến thức đi kèm phải liên tục được cập nhật, ngoài ra với những bạn mới bắt đầu học thì lập trình rất “khô” nên cần kiên trì để có thể vượt qua được giai đoạn khó khăn này.
  • Biết cách tự học, tự nghiên cứu: Lập trình là một trong những môn học mà rất hiếm khi có kiểu cầm tay chỉ việc, mà phần lớn thời gian bạn phải tự nghiên cứu để giải quyết vấn đề. Tuy nhiên lợi thế là bạn có thể tìm kiếm các tài liệu, ví dụ mẫu hoặc hướng dẫn trên internet và cộng đồng mạng.

Để kiểm tra xem bạn sẵn sàng chưa với các kỹ năng trên thử trả lời các câu hỏi sau:

(1) Chọn hình thích hợp điền vào dẫu (?)

(2) Nếu máy tính bạn chạy hệ điều hành Windows hãy xóa một file bất kỳ trong thư mục: C:\Users\[tên user của bạn]\AppData\Local\Temp

(3) Tìm hiểu xem ai là người tạo ra máy tính điện tử đầu tiên và người tạo ra ngôn ngữ lập trình đầu tiên?

(4) Cắt một file nhạc ra thành nhiều đoạn hoặc lồng nhạc vào một file video.

(5) Cài đặt trình nghe nhạc bất kỳ (vd: aimp), xong nghe thử nhạc và… xóa nó ra.

2. Lập trình là gì, có cơm ăn không?

Như bạn biết máy tính điện tử hay máy vi tính là tập hợp rất nhiều thiết bị nhét chung với nhau bằng cách nào đó, hỗ trợ cho người dùng tương tác và giải quyết các vấn đề trong công việc của họ một cách dễ dàng hơn, mà ngày nay người ta dùng từ “thông minh” khi nhắc tới máy vi tính.

Vậy làm sao một mớ thiết bị cứng đơ & “vô tri” lại trở nên “thông minh” và làm được nhiều thứ như thế?

Đầu tiên chúng ta có một ông gọi là “hệ điều hành” (operating system) làm nhiệm vụ kết nối và điều khiển mớ thiết bị đó và là nơi nhận tính hiệu từ người dùng để tạo ra các xử lý tương ứng. Tuy nhiên thì nhu cầu của mỗi người lại khác nhau, nên các hệ điều hành đều cho phép mở rộng các tính năng thông qua việc cài đặt vào các “chương trình” (program) khác nhau để khai thác tài nguyên máy tính.

Việc tạo ra các “chương trình” (program) máy tính như vậy gọi là lập trình (programing)

Các chương trình (program) bạn thương thấy như: Microsoft Word, Excel, trình duyệt web bạn đang dùng, game,…

Ngoài việc tạo ra các chương trình chạy trên hệ điều hành máy tính, việc lập trình cũng có thể tạo ra các trang web như (facebook, youtube,…), các ứng dụng trên thiết bị thông minh (smart-phone), các hệ thống lớn online-offline và rất rất nhiều thứ nữa.

Thế nên không phải lập trình viên nào cũng biết hết những thứ liên quan đến máy tính. Mỗi người sẽ có lĩnh vực mà họ am hiểu riêng. Và khi bạn làm chủ được lĩnh vực đó thì sẽ… không sợ đói.

3. Vậy học lập trình để làm gì?

Sau đây là một số lĩnh vực tiêu biểu liên quan đến lập trình nói riêng và các ngành nghề công nghệ thông tin nói chung. Bạn nên cân nhắc để chọn lĩnh vực mà mình thích và phù hợp trước khi bắt đầu học lập trình:

  • Lập trình web: Tạo ra website chạy trên trình duyệt của máy tính và điện thoại thông minh, như web bán hàng online, mxh, kênh video, kênh tin tức,…
  • Lập trình phần mềm, ứng dụng: Tạo ra các chương trình trên các hệ điều hành thông minh trên máy tính hoặc điện thoại di động, không cần phải am hiểu hết, mà trước hết hãy nắm chắc một môi trường nhất định, vd như: lập trình ứng dụng trên iOS (iPhone), lập trình ứng dụng Android, lập trình ứng dụng cho Windows 10,…
  • Lập trình game: Tạo ra các trò chơi điện tử cho máy tính hoặc smart-phone.
  • Lập trình hệ thống: Tạo ra các hệ thống kết nối nhiều tài nguyên khác nhau, ví dụ như: hệ thống quản lý karaoke, hệ thống chăm sóc khách hàng, hệ thống đặt phòng khách sạn…

Một số lĩnh vực dùng lập trình là cơ sở như:

  • Chuyên viên về dữ liệu: Thiết kế, quản trị cơ sở dữ liệu, phân tích, đưa ra dự đoán dựa trên dữ liệu để hỗ trợ mô hình kinh doanh.
  • Lập trình, thiết kế phần cứng, thiết bị thông minh (IoT): Tạo ra các thiết bị cho máy tính hoặc các thiết bị thông minh, như: thiết bị nhận dạng khuôn mặt, thiết bị trong siêu xe, smart-house,…
  • Chuyên viên trong các lĩnh vực nặng ký của thời đại 4.0 như Machine learning, Big Data, AI, Blockchain,…
  • Và còn nhiều nhiều nữa…

Tư duy lập trình rất có ích đối với mỗi người trong thời buổi công nghệ bùng nổ như hiện tại. Nên dù cho chuyên ngành của bạn không phải công nghệ thông tin, nếu có điều kiện hãy tìm hiểu nó.

4. Hỏi nhanh đáp gọn

Một số vấn đề người mới bắt đầu thường hay thắc mắc hoặc hay hiểu sai về lập trình

Hỏi: Bao nhiêu tuổi thì có thể học lập trình?

Đáp: Nếu bạn sử dụng được máy tính thì đã có thể học lập trình được rồi, một bạn nhỏ 6,7 tuổi cũng đã có thể tạo ứng dụng và đăng lên Apple Store. Tuy nhiên bạn đừng đặt mục tiêu quá lớn khi bắt đầu học lập trình, ví dụ: một chị u40 thích và muốn học lập trình, muốn trong vòng 2,3 tuần có thể viết ra một kênh như youtube.

Hỏi: Các bạn nữ có phù hợp với việc lập trình không?

Đáp: Nếu bạn nữ nào đọc tới đây thì khả năng cao là bạn thích hợp với lập trình. Tuy mặt bằng chung thì lập trình viên nữ ít hơn nam nhiều, nhưng các vị trí quan trọng như Project Manager, Data Analyst, Product Manager,… đều có nữ giới đảm nhiệm. Và sự thật là những người đi tiên phong trong lập trình đều có phái yếu trong đó. (Đặc biệt là các bạn nữ trong các công ty công nghệ được “cưng” lắm).

Hỏi: Một ngày là coder mãi mãi là coder?

Đáp: Sai sai nhá. Bạn nào có suy nghĩ như vậy thì nên thay đổi nhá. Bạn không thể cứ mãi lập trình hết ứng dụng này tới ứng dụng khác, trang web này để trang web khác mãi được. Phải định hướng phát triển bản thân bằng cách học thêm các kỹ năng khác để có thể level-up, lên leader, manager,… này nọ.

Hỏi: Một tiền bối có kinh nghiệm 10 năm hơn một bạn chỉ mới ra trường?

Đáp: Chưa hẳn đúng khi nhìn vào số năm trong nghề hoặc trường đào tạo để đánh giá một lập trình viên. Có thể một người đã làm 10 năm, họ có nhiều kinh nghiệm trong giải quyết vấn đề nhưng nếu họ không liên tục cập nhật những công nghệ mới thì sẽ thiếu hụt so với một bạn trẻ đã có nghiên cứu sâu vào lĩnh vực đó, dù các bạn trẻ còn rất nhiều điều khác phải học.

Hỏi: Riêng với sinh viên công nghệ thì kiến thức trên trường đã đủ?

Đáp: Không nha. Nếu bạn là sinh viên công nghệ và bạn sáng học chiều về, chờ thầy dạy tới đâu học tới đó thì nên thay đổi ngay và luôn. Có một tip nhỏ cho các bạn sinh viên là chạy lên các trang tuyển dụng, coi ngành nghề nào phù hợp và đọc các yêu cầu của doanh nghiệp, sau đó sớm bổ sung kiến thức của mình.

Hỏi: Học lập trình có yêu cầu tiếng Anh không?

Đáp: Có, ít nhất bạn phải có kỹ năng đọc hiểu tài liệu tiếng Anh, lý do: tài liệu tiếng Việt rất ít và không được cập nhật liên tục.

Hỏi: Đầu tư như thế nào để bắt đầu học lập trình

Đáp: 1 bộ máy tính/laptop tầm trung, máy bàn (pc) thường chi phí rẻ hơn, một bộ khoản 3-5tr, laptop thì khoản 7-10tr (riêng với lập trình mobile hay game thì máy tính yêu cầu cấu hình cao hơn). Có kết nối internet. Một bộ tài liệu phụ hợp. Ngoài ra có nhiều cộng đồng công nghệ trên facebook, youtube hoặc các diễn đàn để bạn có thể tham gia trao đổi và học tập.

Hỏi: Một lập trình viên giỏi nghĩa làm có thể giải quyết mọi vấn đề và không cần sự giúp đỡ?

Đáp: Sai!!!, mình học và làm việc với ngôn ngữ C# hơn 5 năm nhưng không thể tự tin là “tui cái gì cũng biết về C#”. Ngoài ra lập trình nói riêng hay các lĩnh vực công nghệ nói chung phần lớn là công việc mang tính tập thể (team-work) và là một trong những việc có cộng đồng trao đổi, hỏi đáp, chém gió,… lớn nhất trên mạng.

Hỏi: Lập trình là cứ ôm máy tính, gõ gõ suốt ngày là được?

Đáp: Không nhé, ngoài việc học các kỹ năng và ngôn ngữ lập trình ra bạn còn phải học rất nhiều thứ khác như kỹ năng làm việc nhóm, phân tích, trình bày vấn đề, sắp xếp công việc,… nhiều lắm.

5. Bắt đầu như thế nào

Tùy theo nhu cầu và nguồn lực bạn có hãy chọn một ngôn ngữ lập trình phù hợp. Có rất nhiều ngôn ngữ lập trình với nhiều cấu trúc và mục đích khác nhau, tiêu biểu bạn có thể lựa chọn theo sơ đồ sau:

Kinh nghiệm là bạn chọn một ngôn ngữ và cố gắng làm chủ nó trong thời gian ngắn nhất, thường thì sẽ có những giai đoạn sau:

  • Cài đặt môi trường làm việc, công cụ cần thiết
  • Viết được 1 chương trình in ra chữ “hello world”
  • Hiểu cấu trúc dòng lệnh
  • Sử dụng lệnh input và output
  • Tìm hiểu các kiểu dữ liệu
  • Sử dụng những cấu trúc có sẵn để xử lý bài toán
  • Cấu trúc rẻ nhánh và vòng lập
  • Hàm, phương thức hay chương trình con
  • Đọc và ghi tập tin, hiểu về cơ sở dữ liệu

Như mình đã đề cập thì khi bắt đầu lập trình rất “khô”, giống như bạn học một ngoại ngữ hay học cách chơi một nhạc cụ mới vậy. “Chương trình” bạn tạo ra lúc này chưa ra hình dạng gì nên hồn cả, phải ngồi suy nghĩ làm sao để in ra dãy số fibonacci từ 1 đến n bất kỳ,… tuy nhiên đây là bước rất quan trọng, nó tạo nền cho tư duy của bạn để sau này có thể khi tiếng xa hơn. Nếu bạn làm chủ được một ngôn ngữ lập trình thì bạn có khả năng chuyển đổi sang một ngôn ngữ khác, một môi trường khác một cách nhanh chóng hơn.

Nếu bạn không thích những chương trình đen thui với con trỏ nháy nháy, thì bạn có thể chọn các ngôn ngữ lập trình web để bắt đầu như: Javascipt, Python, PHP… kết hợp với HTML và CSS để bắt đầu.

Như mình nói ở trên, việc học lập trình đa phần yêu cầu phần lớn thời gian là bạn phải tự học, tuy nhiên tốt nhất là bạn nên tìm cho mình một mentor, một người có thể định hướng và hướng dẫn bạn học một cách đúng đắn, để tránh mất thời gian.

Tiện thể thì mình cũng chia sẻ quá trình học và làm việc của mình như sau (để nhớ cái):

  • Cấp 3 mình học VB6, cũng tạo được trang giao diện (forms) chạy được trên Windows XP. Sau đó trên trường có dạy Pascal, ở nhà thì mò thêm Java học sơ sơ về hướng đối tượng, hồi trước nhà mình không có internet nên đụng cái nào học cái đó.
  • Mình học chuyên ngành Hệ thống thông tin, 2 năm đầu ở trường dạy: C/C++, SQL. Tự mò thêm HTML, PHP này nọ để làm blog. Sau đó mình nghiên cứu thêm C#, làm ứng dụng WPF, Windows 8, Windows Phone. Do là hồi đó Nokia có về trường tổ chức cuộc thi này nọ, nên học để kiếm điện thoại sài :v.
  • Sau đó trường có dạy Java/Servlet để làm web và server side với Java, nhưng mình không có đi sâu vào Java mà tiếp tục trên C# vs ASP.NET MVC. Sau đó mình đi thực tập với việc dev các ứng dụng Windows 8. Sau đó là các ứng dụng đa nền tảng với Xamarin.
  • Tham gia vào chương trình MSPs của Microsoft, được gặp các anh chụy rất giỏi, học được nhiều thứ và tiếp xúc với điện toán đám mây Azure.
  • C#, .NET, và Azure phát triển đến đâu thì mình cố gắng update tới đó.

6. Túm lại: Lập trình có khó không?

Nếu bạn đọc tới đây có lẽ đã có cái nhìn sơ bộ về việc học và làm chủ một ngôn ngữ lập trình và có đáp án cho câu hỏi trên…

Biết rằng “Ai cũng có thể code, ai cũng nên học code…”. Tuy nhiên cá nhân mình thì không riêng gì lập trình mà là với các ngành nghệ khác để làm chủ được nó thì đáp án là “không hề dễ” nhé.

Cơ hội đều đi đôi với thách thức.