Hành trình học lập trình của đa số người bắt đầu bằng việc thức khuya và tìm kiếm trên Google.
Thông thường là “Learn _______”
Nhưng làm sao mà ta quyết định nên tìm kiếm thứ ngôn ngữ nào?
“Tôi hay nghe câu nói đùa về Java ở Silicom Valley. Chắc là tôi nên học thứ này.”
Hoặc:
“Haskell. Dạo này rất hot. Haskell.”
Hay:
“Con chuột Go dễ thương quá trời quá đất.”
Và rồi đa phần chúng ta, chắc cũng đã từng search những câu hỏi:
“Tôi nên học ngôn ngữ lập trình nào trước đây?”
Không phải câu hỏi nào cũng được tìm kiếm nhiều đến mức phải có riêng một infographic trả lời. Đây là một trong số đó:
Quyết định ngôn ngữ lập trình đầu tiên luôn là một trải nghiệm lý thú — giống như kiếu mấy câu trắc nghiệm tính cách vậy “Bạn là nhân vật nào trong Game of Throne?”
Trước trước khi bạn nhảy nhanh vào Ruby vì hồi bé thích chơi đùa với Play-Doh, tôi muốn nhắc nhở bạn: nguy cơ bỏ cuộc rất cao đấy.
Bạn sẽ mất đến hàng trăm tiếng đồng hồ học tập để có thể “đại khái” thành thạo đôi chút với ngôn ngữ lập trình đầu tiên của mình.
Vậy nên bạn cần xem xét những yếu tố sau:
Ngôn ngữ có dễ học hay không?
Bạn có thể lập kế hoạch xây dựng dự án nào đó trong quá trình học (và chia sẻ nó với bạn bè để duy trì động lực).
Mỗi năm, chúng ta chứng kiến sự xuất hiện của những ngôn ngữ lập trình mới, và đi kèm với đó là nguồn tài liệu học thuật mới cùng những web comic thú vị. Thực sự, chỉ cần một tháng trước đây:
Khi bạn bắt đầu học lập trình, có vô số lựa chọn về ngôn ngữ lập trình và điều này có thể làm cho quá trình lựa chọn trở nên khó khăn. Để giúp thu hẹp phạm vi và cung cấp hướng dẫn, dưới đây là những từ khóa tìm kiếm phổ biến nhất trên Google liên quan đến việc học lập trình trong 12 năm gần đây:
Python dần dần lớn mạnh và trở thành lựa chọn phổ biến nhất.
Trước khi nói về những ngôn ngữ lập trình này, tôi cần nói rõ rằng:
Tôi không nói rằng ngôn ngữ này (về khách quan) tốt hơn ngôn ngữ khác.
Tôi đồng ý rằng lập trình viên trước sau gì cũng nên học nhiều hơn một ngôn ngữ.
Theo tôi, trước hết họ cần học tốt một thứ ngôn ngữ trước đã. Và — như bạn có lẽ đoán được từ phần text lộn ngược trên tiêu đề — bạn nên học JavaScript trước tiên.
Trước hết, hãy tìm hiểu xem tại sao ngôn ngữ này lại được giảng dạy rộng rãi đến vậy.
Computer Science 101
Nhiều trường đại học đã và đang giải dạy lập trình dưới cái tên khoa học máy tính, bản thân môn học này là một nhánh của toán học, hoặc phần nào gắn với kỹ sư điện.
Tất nhiên, các bạn chắc cũng đã nghe qua:
“Giảng dạy về khoa học máy tính không thể biến bất cứ ai thành chuyên gia lập trình; cũng giống như học về cọ và màu chả biến người đó thành siêu họa sĩ vậy.” — Eric S. Raymond
Đến năm 2016, nhiều trường đại học vẫn giảng dạy lập trình như thể là môn khoa học máy tính vậy, và môn khoa học máy tính chả khác gì toán học.
Bởi lẽ đó, nhiều khóa học lập trình vỡ lòng thường tập trung xoáy vào các ngôn ngữ có độ trừu tượng thấp như C, hoặc các ngôn ngữ trọng tính toán như MATLAB.
Và các trưởng khoa lại thường giữ nguyên con đường đầy khó khăn, hướng đến các ngôn ngữ lập trình ở đầu bảng xếp hạn như TIOBE Index, hoặc bảng xếp hạng dưới đây từ IEEE:
Đa phần những bảng xếp hạng này sẽ thấy rất ít sự thay đổi dù đã… 10 năm trôi qua.
Nhưng sự thay đổi vẫn có diễn ra, trong hay ngoài giới học thuật cũng vậy.
Năm 2014, Python chiếm ngôi Java trở thành ngôn ngữ giảng dạy nổi tiếng nhất trong các chương trình Khoa Học Máy Tính hàng đầu tại Mỹ.
Và một sự thay đổi nữa hiển nhiên… sớm hay muộn… cũng sẽ xảy ra.
Vì nếu bạn nhìn vào các ngôn ngữ thực sự được người lao động sử dụng, đây lại là một bức tranh hoàn toàn khác:
JavaScript từ trước đến giờ là ngôn ngữ phổ biến nhất, được đến 49.397 lập trình viên phản hồi lại bài khảo sát 2016 của Stack Overflow sử dụng.
Hơn nửa số lâp trình viên có sử dụng JavaScript. Đây là ngôn ngữ chủ chốt trong lập trình web front-end và ngày càng dấn thân vào lập trình back-end. Và đang ngày càng mở rộng nhanh chóng sang lập trình game và IoT.
Các tin tuyển dụng cũng nhắc đến JavaScript thường xuyên hơn bất cứ ngôn ngữ nào khác (ngoại trừ Java):
Nếu bạn học lập trình vì ham muốn hiểu biết, hãy bỏ qua phần này. Nhưng nếu bạn, giống như hầu hết những người học lập trình, muốn áp dụng kỹ năng này để tìm kiếm công việc, đây là một yếu tố quan trọng cần xem xét.
Như đã đề cập trước đó, Java thường được đề cập trong nhiều tin tuyển dụng hơn so với bất kỳ ngôn ngữ lập trình nào khác, và JavaScript đang tiếp tục theo đuổi.
Tuy nhiên, điều đáng chú ý về JavaScript là: mặc dù nó đã tồn tại trong suốt 20 năm, nhưng chỉ gần đây nó mới trở thành một công cụ đáng chú ý trong việc phát triển ứng dụng cho các tập đoàn lớn như Netflix, Walmart và Paypal.
Do đó, mặc dù có nhiều công ty đang tìm kiếm lập trình viên JavaScript, nhưng nguồn cung lại kém hơn nhu cầu một cách đáng kể.
Có đến 2,7 lập trình viên tranh nhau một vị trí Java đang tuyển dụng. Tình hình cạnh tranh với PHP và iOS cũng chả khá hơn là bao.
Nhưng với mỗi vị trí JavaScript đang tuyển, chỉ có 0,6 bạn lập trình viên mà thôi.
Factor #2: Hướng đi về lâu về dài
Trung bình, dự án JavaScript nhận đến gấp đôi số pull request của project Java, Python, hoặc Ruby. Hơn nữa, JavaScript đang phát triển nhanh hơn bất kỳ ngôn ngữ nào khác
Source: The GitHub’s 2016 State of the Octoverse
Hệ sinh thái JavaScript cũng thu được nhiều lợi ích trước lượng đầu tư về tài chính và nhân lực khổng lồ từ các công ty như Google, Microsoft, Facebook, và Netflix.
Ví dụ như, TypeScript (superset của JavaScript) có đến hơn 100 người đóng góp nguồn mở, đa số là nhân viên Microsoft và Google được trả tiền để hoàn thiện sản phẩm này.
Kiểu liên kết đa công ty như thế này sẽ khó tìm thấy ở Java. Oracle (chủ sở hữu Java sau khi mua lại từ Sun Microsystems ) thường kiện các công ty cố gắng mở rộng trên đó.
Factor #3: Khó học
This is a parody of an XKCD comic.
This is a parody of an XKCD comic.
Đa phần lập trình viên đều đồng ý rằng các ngôn ngữ scripting cấp cao thường dễ học hơn. JavaScript thuộc vào kiểu ngôn ngữ này, cùng với Python và Ruby.
Tuy các trường đại học vẫn giảng dạy những ngôn ngữ như Java và C++ làm ngôn ngữ đầu tiên, nhưng chúng là các ngôn ngữ khó học hơn.
Factor #4: Các project bạn có thể xây dựng với Java
Đây là thế mạnh to lớn của JavaScript. JavaScript chạy trên bất cứ thiết bị có trình duyệt nào. Bạn có thể xây dựng hầu như mọi thứ với JavaScript và chia sẻ chúng đi khắp mọi nơi.
Bởi sự xuất hiện của JavaScript ở khắp mọi nơi, Jeff Atwood, đồng sáng lập Stack Overflow đưa ra một quy luật lý thú:
“Bất kỳ ứng dụng nào có thể viết được bằng JavaScript, đến cùng cũng được viết bằng JavaScript mà thôi.”
Và theo thời gian, Quy luật của Atwood càng được chứng thực.
Java cũng đã từng đưa ra lời hứa là sẽ chạy ở mọi nơi. Chắc bạn vẫn nhớ Java Applets chứ nhỉ. Oracle đã chính thức giết chết công cụ này mới năm nay.
Python cũng đang hứng chịu những vấn đề tương tự:
“Tôi đưa game mới làm sang cho người bạn nhứ thế nào ấy nhỉ? Hơn nữa, tôi đưa game này lên điện thoại và khoe với mấy đứa nhó mà không phải cài đặt được không?” — James Hague in Retiring Python as a Teaching Language
Ngược lại, dưới đây là một số ứng dụng được xây dựng trên trình duyệt trong CodePen. Bạn có thể click vào và chạy ngay trên trình duyệt của mình:
1970s style Simon game
Conway’s Game of Life
Star Wars-themed Wikipedia Search
A roguelike dungeon crawler game
Học cho tốt một ngôn ngữ trước đa. Rồi mới học cái thứ hai.
Nếu bạn cứ liên tục nhảy từ ngôn ngữ này sang ngôn ngữ khác, bạn sẽ chẳng đi xa được đâu.
Để vượt qua mức căn bản, bạn cần phải học tốt một ngôn ngữ trước đã. Sau đó ngôn ngữ thứ hai sẽ trở nên dễ dàng hơn rất nhiều.
Từ đây, bạn có thể phân nhánh, phát triển thành một lập trình viên toàn diện hơn thông qua việc học tập nhiều ngôn ngữ:
C là ngôn ngữ giúp bạn hiểu được cách làm việc của máy tính, đặc biệt là quản lý bộ nhớ, và rất hữu dụng trong phép tính hiệu năng cao
C++ phù hợp lập trình game
Python hoàn hảo cho khoa học và thống kê
Java lại quan trọng nếu bạn muốn làm việc tại các công ty công nghệ lớn.
Nhưng hãy học JavaScript trước tiên.
Được rồi, giờ tôi sẽ cố gắng làm thử điều không tưởng —tôi sẽ thử và dự đoán phản đối ở dưới phần comment.
Objection #1: Nhưng mà không phải JavaScript chạy chậm lắm ư?
JavaScript, với đa số mục đích thực tiễn, là một ngôn ngữ có hiệu năng cao.
JavaScript (Node.js) nhanh hơn chút đỉnh so với Python, Ruby, và PHP.
Ngôn ngữ này cũng gần nhanh bằng các ngôn ngữ hiệu năng siêu cao như C++, Java, và Go.
Sau đây là kết quả của bảng benchmark toàn diện đa ngôn ngữ gần đây:
Objection #2: Nhưng mà JavaScript không phải typed tĩnh
Giống Python và Ruby, JavaScript typed động, thật tiện lợi. Nhưng bạn có thể gặp nhiều vấn đề. Ở đây tôi dự định dùng exampleArray làm array. Tôi set giá trị của nó, sau đó kiểm tra độ dài—nghĩa là số thành tố nó chứa đựng.
exampleArray = [1, 2] -> [1, 2] exampleArray.length -> 2
Nhưng sau đó tôi lại tình cờ chỉ định nó thành string.
exampleArray = “text” -> “text” exampleArray.length -> 4
Những lỗi như thế này xảy ra mọi lúc trong các ngôn ngữ typed động. Đa số lập trình viên chỉ việc ngưng check lại, và viết test tương tứng.
Nếu bạn bắt buộc phải có typing tĩnh trong ngôn ngữ lập trình đầu tiên của mình, tôi vẫn đề nghị học JavaScript trước. Sau đó bạn có thể nhanh chóng dùng TypeScript sau đó.
“Typescript không dễ lắm, nhưng nếu đã biết trước JavaScript thì khác.”—Alex Ewerlöf on TypeScript
Objection #3: Nhưng tôi thật sự muốn tạo ứng dụng di động
Tôi đề xuất bắt đầu với việc học JavaScript.
JavaScript là ngôn ngữ lập trình mạnh mẽ hỗ trợ nhiều công cụ phát triển ứng dụng di động native như Angular Cordova và React Native. Để xây dựng một ứng dụng di động đa dạng và ấn tượng, bạn cũng cần một backend phù hợp. Một sự kết hợp hiệu quả là sử dụng Node.js cùng với Express.js, một framework lập trình web mạnh mẽ.
Điều quan trọng cần lưu ý là mặc dù có nhiều người sử dụng ứng dụng di động, nhưng một phần lớn công việc lập trình vẫn liên quan đến lập trình web. Đối chiếu với con số khá thấp là 8% các công việc liên quan đến lập trình ứng dụng di động.
Dựa trên cuộc khảo sát Stack Overflow năm 2016 với 49,525 lập trình viên, số liệu nghề nghiệp tiết lộ những xu hướng quan trọng trong lĩnh vực này.
Đã lâu kể từ thời kỳ “Làm gì cũng phải có ứng dụng” chấm dứt. Thay vào đó, người dùng di động ngày nay dường như không muốn tải thêm ứng dụng mới, mặc dù điều này không đúng với mọi người.
Thực tế là họ vẫn sử dụng ứng dụng, nhưng đa số chúng ta thường giữ những ứng dụng quen thuộc như Facebook, Google Maps và một số ứng dụng tiện ích khác. Do đó, nhu cầu tuyển dụng lập trình viên phát triển ứng dụng di động chủ yếu tập trung vào một số doanh nghiệp lớn.