Làm thế nào để chọn một ngôn ngữ lập trình học hôm nay
Source: http://techmaster.vn/posts/33667/hoc-ngon-ngu-lap-trinh-kiem-duoc-viec-lam
Bài viết được dịch từ trang web Makeuseof
Lập trình không hề dễ dàng; hoặc ít ra việc học lập trình là không dễ dàng, đặc biệt khi bạn bắt đầu từ con số 0. Có thể bạn phải mất nhiều năm làm việc cật lực mới trở thành một lập trình viên thực sự giỏi; vậy liệu có một cách nào đó chọn ra một ngôn ngữ lập trình phù hợp để bắt đầu ngay hôm nay, để có thể kiếm được một công việc tuyệt vời trong vài năm?
Để tìm câu trả lời, tôi đã đưa câu hỏi này tới ban biên tập của chúng tôi gồm các chuyên gia có nhiều năm kinh nghiệm trong nghề lập trình. Những gì xảy ra sau đó là một cuộc thảo luận thú vị mà bạn sẽ muốn đọc trước khi bắt tay vào cuộc hành trình của mình để trở thành một lập trình viên chuyên nghiệp.
Một phương pháp điên rồ?
Đây không phải là lần đầu tiên chúng ta nói đến việc chọn một ngôn ngữ lập trình: Trở lại năm 2011, chúng ta đã thảo luận về ngôn ngữ lập trình bạn nên học để phát triển phần mềm?, cũng như những ngôn ngữ bạn nên học để lập trình Web.
Nhưng đây không phải là về một lời khuyên (kiểu như "hãy chọn JavaScript"), mà nó là một phương pháp - một cái gì đó người ta có thể sử dụng trong hai năm kể từ ngày hôm nay, về mặt lý thuyết là như vậy. Làm thế nào để thực sự biết những ngôn ngữ nào đang gia tăng? Những số liệu phổ biến nào là thước đo tin cậy và số liệu nào là đáng nghi ngờ (và tại sao)? Đâu là những trang web tốt nhất để bạn tham khảo mức lương? GitHub có phải là một nguồn số liệu tốt hay không?
Ví dụ, bạn sẽ thấy chẳng mấy ai nhảy vào học PHP vào những ngày này - nhưng nhiều, rất nhiều các lập trình viên vẫn đang kiếm sống rất tốt bằng lập trình PHP, và nó vẫn chiếm phần lớn những gì đang chạy trên nền tảng Web. Vì vậy, liệu lao vào học PHP bây giờ có phải là một ý tưởng tồi? (Không hẳn là như vậy!)
Không chỉ có một ngôn ngữ lập trình
Đây là ý kiến của James, một nhà phát triển Web của chúng tôi nói về điều này:
Các lập trình viên thường không chỉ học một ngôn ngữ lập trình duy nhất. Bất cứ ai đi theo con đường Khoa học Máy tính cổ điển sẽ học rất nhiều Java, một ít Haskell, một ít Prolog nếu họ tham gia một khóa trí tuệ nhân tạo AI, một ít Node.js nếu họ tham gia một khóa kỹ thuật về startup, một ít PHP nếu họ tìm hiểu về các CMS truyền thống, một ít .NET nếu họ thực tập tại một văn phòng của các công ty lớn, một ít JavaScript nếu họ làm thiết kế web, một ít C ++ nếu họ làm thiết kế game, và cuối cùng là một ít Ruby nếu họ muốn lãng phí cuộc đời mình với các ngôn ngữ tối nghĩa mà chẳng mấy ai thực sự sử dụng.Chẳng có "phương pháp" nào cả, và bạn không chọn một ngôn ngữ để học mà ngược lại: nó chọn bạn!Học một ngôn ngữ cũng giống như việc cả năm bạn chỉ ăn mỗi một món bánh quy vậy. Và nghiêm túc mà nói, liệu có ai chọn công việc theo mức lương dự kiến không?
Nhưng sẽ ra sao nếu bạn không học ngành Khoa học Máy tính?
Tôi đã trả lời James như sau:
Có một thực tế là: Phương pháp này không phải dành cho những người theo học ngành Khoa học Máy tính cổ điển. Nó được dành cho những người đang học MOOC và số lượng của các khóa học lập trình trực tuyến, rất nhiều người đang tự học lập trình từ đầu. Và khi bạn bắt đầu như thế, bạn cần một ngôn ngữ để bắt đầu tìm hiểu. Có lẽ sau này bạn không còn dùng nó nữa, nhưng ngôn ngữ đầu tiên sẽ là một sự đầu tư quan trọng của thời gian và nỗ lực - vì vậy nó rất có giá trị.Điều gây được tiếng vang nhất đối với tôi đó là việc anh nói rằng - có ai mà đi chọn công việc theo mức lương dự kiến không? Tôi nghĩ rằng một số người làm như vậy, nhưng tôi cũng cho rằng đó không phải là một cách tuyệt vời để làm theo.Có một thực tế là, mọi người đang cố gắng tìm ra ngôn ngữ phù hợp để bắt đầu, và sử dụng chính ngôn ngữ này trong thế giới thực theo quyết định đó (chứ không chỉ là việc họ tìm một ngôn ngữ thật dễ học - như Pascal chẳng hạn ...).
Trước tiên hãy chọn một dự án, sau đó mới đến ngôn ngữ
James đã trả lời như thế này:
Được rồi, có lẽ một trong những quan điểm của phương pháp này đó là: không có một phương pháp chính xác nào cả. Khi tôi lần đầu tiên đến với PHP, đó là thông qua WordPress. Lúc đó tôi đã có một nền tảng về Khoa học Máy tính trong lập trình và một số kinh nghiệm thiết kế web, nhưng tôi chưa bao giờ học PHP trước đó. Tôi đã học nó vì WordPress xem ra khá đơn giản, và tôi muốn vọc vậy với WordPress. Không phải vì tôi đã nhìn vào một danh sách các xu hướng công nghệ, hoặc xem xét một nghề để theo đuổi, mà vì nó là một cái gì đó thú vị và tôi muốn biết sử dụng nó.Nếu ai đó tìm cách để học lập trình hoàn toàn với mục đích của một công việc, thì họ sẽ thất bại. Nếu họ đang tìm kiếm chỉ vì họ thích học cách lập trình một cái gì đó, thì sẽ không quan trọng về ngôn ngữ mà họ chọn, miễn là nó có thể khơi dậy niềm đam mê của họ.
Một lý do khác để chọn dự án trước
Đây là khi Simon bước vào với một số lời khuyên khá thực dụng:
Đầu tiên và trước hết, nó phụ thuộc vào việc bạn muốn phát triển Web hay là phần mềm dạng "cổ điển".Nếu lập trình phần mềm cổ điển, thì Java là khá tốt:
- Hướng đối tượng đơn giản
- Đa nền tảng (Linux, Windows, Mac, Android)
- Cú pháp tương tự như rất nhiều ngôn ngữ lập trình khác (JS, C#).
Không thể nói nhiều về phát triển Web, mặc dù HTML/JS/CSS/PHP/MySQL dường như khá hiệu quả cho rất nhiều người. Python cũng vậy.Nhưng vâng, "để giúp bạn có được một công việc tuyệt vời trong 2 năm" thì làm tôi khó trả lời quá. Cần nhấn mạnh những khía cạnh sai lầm của việc học làm thế nào để lập trình. Một khi bạn có thể lập trình, bạn rất dễ dàng chuyển sang ngôn ngữ khác.Để được tuyển dụng khi chỉ biết một ngôn ngữ lập trình cụ thể cũng tương tự việc được tuyển dụng cho vị trí kế toán mà bạn chỉ biết có mỗi dùng MS Excel vậy. Nếu đó là trình độ chuyên môn chính, thì nó có lẽ sẽ là một công việc tồi.
Đừng học một ngôn ngữ: hãy học thiết kế phần mềm
Có một sự đồng thuận đã bắt đầu hình thành. Bruce Epper, tác giả của những câu trả lời nổi tiếng trên MakeUseOf, đã cho biết:
Ngôn ngữ lập trình tự bản thân nó không thực sự quan trọng. Khi nói đến các công việc lập trình thì những khía cạnh quan trọng nhất thường được hiểu là kiến trúc và thiết kế cơ bản của phần mềm, quá trình lập trình nói chung, hiểu biết về các design pattern, biết khi nào thì sử dụng chúng, và làm thế nào để áp dụng một pattern cụ thể cho tác vụ của bạn - tất cả chúng đều độc lập với ngôn ngữ. Khi một lập trình viên đã nắm được điều này, thì việc nhảy sang một ngôn ngữ hoàn toàn mới là chuyện nhỏ như con thỏ.Thậm chí có những kỹ năng như quản lý dự án, viết tài liệu kỹ thuật là những thứ quan trọng đối với một lập trình viên còn hơn là hiểu biết về bất kỳ một ngôn ngữ lập trình cụ thể nào đó.
Nền tảng nào bạn đang xây dựng trên đó mới quan trọng: tiếng Anh hay tiếng Latin?
Đó là khi Guy bước vào để nhắc nhở tất cả chúng ta rằng ngôn ngữ cũng khá quan trọng, ở một mức độ nào đó:
Các ngôn ngữ tự nó không phải là điều quan trọng nhất để nhận được một công việc, tôi đồng ý. Tuy nhiên, bạn đang xây dựng sản phẩm dựa trên nền tảng nào. Thực ra tôi đã đi theo cả 2 lộ trình này, và để dễ hiểu hơn thì tôi sẽ so sánh các ngôn ngữ lập trình với các ngôn ngữ của con người nhé!Python dường như là tiếng Anh của ngày hôm nay vậy. Ngày càng nhiều, tôi thấy các khóa học lập trìnhvà thậm chí giáo trình Khoa học Máy tính tại các trường đại học bắt đầu dạy bạn với Python thay vì Java, nó dường như đã trở nên rất phổ biến trong khoảng 10 năm nay. Bạn có thể làm được rất nhiều thứ bằng cách sử dụng Python.C++ giống như tiếng Latin của thế giới lập trình vậy. Nếu bạn học nó, bạn có thể hiểu được những nguyên lý cơ bản của nhiều ngôn ngữ và tìm hiểu chúng một cách dễ dàng hơn. Nếu bạn thành thạo C++ thì Python cũng là chuyện nhỏ.
Thế còn một "công việc lập trình" thì sao?
Đến lượt Matthew nhảy vào cho ý kiến, để nhắc nhở tất cả chúng ta rằng trở thành một lập trình viên có thể có ý nghĩa rất khác nhau đối với những người khác nhau:
Một điều chưa được nói đến trong bất kỳ chỗ nào trong bài viết này đó là loại công việc lập trình nào mà bạn muốn.
Bạn không quá kiểu cách về các quyền lợi được ném cho các nhân viên Startup? Hay bạn muốn ổn định với một mức lương kha khá, nhưng không sở hữu cổ phần của công ty? Bạn thích mặc những bộ đồ sang trọng của dân kinh doanh? Hãy học C#, Java hoặc COBOL. COBOL cũng có lợi thế của việc có rất nhiều ứng dụng ngân hàng được viết bằng nó. Và hầu hết các lập trình viên COBOL hoặc đã nghỉ hưu hoặc đã chết, vì vậy có rất nhiều nhu cầu cho các lập trình viên COBOL với một mức lương lên đến 6 con số! Tuy nhiên, bạn sẽ phải làm việc trên những codebase rất lớn, được viết rất tồi và đã có tuổi đời hàng thập kỷ. Điều đó chẳng vui tí nào.Nhưng nếu bạn không quan trọng việc có một công việc ổn định? Bạn muốn được làm việc trên các sản phẩm thú vị, và bạn sẵn sàng bị mất việc nếu mô hình kinh doanh đó không hoạt động tốt? Tôi nhận thấy rằng trang Hacker News là một nơi chắc chắn để tìm hiểu về các ngôn ngữ đang được sử dụng bởi giới startup. Khi tôi thực tập tại một công ty startup trước đây, chúng tôi sử dụng một kết hợp của Go, Python và CoffeeScript. Những startup khác sử dụng Rails và Groovy và tất cả những dạng ngôn ngữ và framework ít được biết đến khác. Chỉ cần chọn lấy một trong số chúng và bạn sẽ tìm thấy một công việc thú vị ở đâu đó.
Code mới hay code cũ?
Viết code mới là một trải nghiệm hoàn toàn khác so với việc bảo trì một ứng dụng hiện có, như Bruce nói thêm:
Với ý kiến của bạn về COBOL, bạn nên quan tâm đến một yếu tố nữa: bạn muốn làm việc trên code mới hay là đi bảo trì code của người khác? Đây có thể là một yếu tố rất quan trọng khi quyết định hướng đi. Đối với các dự án nhỏ, việc duy trì một codebase được viết bởi người khác có thể không phải là tồi, nhưng tôi đã thấy một số đoạn code nơi bạn và nhiều đồng nghiệp khác cứ nhìn chằm chằm vào nó trong nhiều giờ và hỏi, "Suy nghĩ của thằng cha viết ra đoạn code này là gì vậy nhỉ?", hoặc trong trường hợp lập trình viên ban đầu đã lợi dụng một tính năng cụ thể hay một bug trong trình biên dịch (mà có thể đã được fix trong phiên bản trình biên dịch hiện tại) để thực hiện một cái gì đó.
Điều gì sẽ xảy ra nếu bạn không có sự lựa chọn?
Guy trở lại để nhắc nhở tất cả chúng ta rằng không phải ai cũng có nhiều sự lựa chọn:
Matthew đặt ra một câu hỏi rất hay là, "Những loại công việc lập trình nào mà bạn muốn?"Thật kỳ lạ, tôi chưa bao giờ thực sự nghĩ rằng mình đã có nhiều sự lựa chọn trong vấn đề này. Tôi biết mình muốn trở thành một nhà phát triển web khi tôi bắt đầu học lập trình. Nhưng tôi nhận ra mình trở nên tốt hơn khi chuẩn bị nhận bất kỳ công việc nào mà tôi có thể, và sẵn sàng học hỏi về công nghệ mới đó. Bây giờ tôi là một người biết rất nhiều thứ, thành thạo một số công nghệ - nhưng không tinh thông một cái nào cả.Đối với việc tìm ra nơi bạn muốn làm việc, thì việc xác định phong cách sống mà bạn muốn là rất quan trọng. Sau đó nhìn vào các thông tin tuyển dụng từ những doanh nghiệp có phù hợp với các tiêu chí của bạn và xem họ đang tìm kiếm gì. Soạn ra một portfolio chứa những thứ tương tự như những gì họ đang làm, đặc biệt nếu bạn không được đào tạo chính quy trong các công nghệ mà họ đang sử dụng. Có thể bạn đã học Java trong trường, nhưng họ lại sử dụng C#. Vì vậy, bạn đã tự học C# và viết ra một vài chương trình bằng ngôn ngữ này như là bằng chứng rằng bạn biết những gì mình đang làm và rằng bạn có khả năng tự học thêm những công nghệ khác.
Không có một câu trả lời đơn giản
Nếu có bất cứ điều gì mà cuộc thảo luận này có thể chỉ ra, thì đó là những câu hỏi đơn giản không phải luôn những có câu trả lời đơn giản. Chưa hết, sau khi đọc ý kiến của mọi người, tôi cảm thấy có thêm rất nhiều thông tin - và chúng đã làm thay đổi suy nghĩ của tôi.
Tôi chắc chắn rằng chúng tôi đã không thể đưa ra hết những quan điểm có thể ở đây - điều này để dành cho phần bình luận của các bạn. Tôi sẽ rất thích nghe ý kiến của bạn về vấn đề này, cho dù bạn là một lập trình viên chuyên nghiệp hay không. Làm thế nào để bạn chọn một ngôn ngữ lập trình và có thể kiếm được một công việc tốt sau 2 năm? Có cách nào đó để chọn ngôn ngữ lập trình hiệu quả? Hãy chia sẻ suy nghĩ của bạn trong phần bình luận phía dưới nhé!
No comments:
Post a Comment