Friday, July 28, 2017

5 Ngôn ngữ lập trình tốt nhất cho người mới bắt đầu

Bài viết được dịch từ trang web LifeHacker
Nếu bạn đang nghĩ đến việc học lập trình, thì ngôn ngữ bạn quyết định chọn để bắt đầu phụ thuộc rất nhiều vào cái mà bạn đang cố gắng học, cái mà bạn muốn làm với kỹ năng đó, và cái đích cuối cùng mà bạn muốn đi tới. Tuy nhiên, một số ngôn ngữ lập trình dễ học hơn những ngôn ngữ khác, và có một cộng đồng tích cực trong việc dạy hoặc đưa ra nhiều các kỹ năng hữu ích một khi bạn đã học chúng. Đây là 5 ngôn ngữ tốt nhất, dựa trên sự đề cử của chính các bạn độc giả.
Đâu là ngôn ngữ lập trình tốt nhất cho người mới bắt đầu?
Đâu là ngôn ngữ lập trình tốt nhất cho người mới bắt đầu?
Xin được nói rõ rằng - chúng ta đang không cố gắng giải quyết triệt để câu hỏi "Ngôn ngữ lập trình nào bạn nên học đầu tiên nếu bạn đang thử học lập trình?". Mọi người đều có những quan điểm khác nhau và phụ thuộc vào những lý do xác định trong việc học của bạn, có lẽ trong trường hợp này không có câu trả lời nào là hoàn toàn chính xác cả. Các bạn đã đưa ra rất nhiều ý kiến trong bài viết trước và chúng tôi chỉ làm rõ hơn ở đây, với rất nhiều sự mô tả và những lý do cơ bản cho mỗi ngôn ngữ. Chúng tôi đã tiến hành tổng hợp và xếp hạng 5 ngôn ngữ lập trình phổ biến nhất theo đề cử của các bạn, nhưng không theo một trật tự nào cả.

1. Java

Ngôn ngữ lập trình Java
Ngôn ngữ Java của hãng Oracle là một trong những ngôn ngữ lập trình có chỗ đứng lâu nhất, bền bỉ và có tầm ảnh hưởng nhất. Bạn sẽ tìm thấy Java tại lõi của các ứng dụng trong và ngoài môi trường web, trên tất cả các nền tảng, các hệ điều hành và các thiết bị khác nhau. Nó là một ngôn ngữ lập trình hướng đối tượng, có đặc trưng sâu sắc dựa trên lớp (class-based), được thiết kế để có thể hoạt động được trên nhiều nền tảng nhất có thể. Vì lý do đó, nó cũng là một trong những ngôn ngữ lập trình phổ biến nhất thế giới, điều đó khiến nó trở nên vô cùng giá trị để học nếu bạn đang có hứng thú trong việc học lập trình. Nhược điểm của Java đó là để đảm bảo khả năng có thể chạy được ở nhiều nơi, nên nó tương đối khó nắm bắt để lập trình một cách hiệu quả và năng suất.
Mặc dù Java không phải là một ngôn ngữ lập trình hoàn hảo - nhiều trường lớp bắt đầu dạy bằng ngôn ngữ C hoặc C++ bởi vì Java thừa kế rất nhiều cú pháp từ những ngôn ngữ đi trước này. Những bạn chọn Java ở vị trí quán quân về ngôn ngữ lập trình nên học đầu tiên đã ghi chú rằng Java buộc bạn nghĩ giống như một lập trình viên - nghĩ một cách có logic và phân tích, và thực sự nắm được cách mà máy tính sẽ xử lý thông tin để thành công. Nó là một tập các khái niệm cốt lõi nền tảng sẽ giúp bạn khi bạn chuyển sang những ngôn ngữ và công nghệ khác.
TechMaster có đầy đủ các khóa học lập trình bằng những ngôn ngữ tốt nhất cho người mới bắt đầu.

2. Ruby

Ngôn ngữ lập trình Ruby
Ruby là một ngôn ngữ lập trình hướng đối tượng, dynamic, mã nguồn mở được phát triển bởi nhà khoa học máy tính người Nhật Bản là Yukihiro Matsumoto vào những năm 90s của thế kỷ trước, điều đó khiến cho nó trở thành một trong những ngôn ngữ lập trình tuổi đời còn ít nhưng lại được sử dụng rộng rãi. Ruby được thiết kế có cú pháp dễ đọc và dễ viết đối với con người, mà không cần thiết phải học một số lượng lớn những dòng lệnh và những "từ điển" chuyên biệt khi mới bắt đầu. Trong khi bản thân ngôn ngữ này là hướng đối tượng, nhưng nó cũng hỗ trợ lập trình thủ tục, chức năng và mệnh lệnh (imperative), một trong những yếu tố khiến nó đặc biệt linh hoạt.
Ruby nổi tiếng trong việc khá dễ học, chỉ với 20 phút xem một hướng dẫn dành cho người mới bắt đầu trên trang chủ của ngôn ngữ này là có thể khiến bạn trở nên quen thuộc với một số đặc điểm căn bản của nó, đây thực sự là một khoảng thời gian rất ngắn. Những fan hâm mộ các ngôn ngữ như Perl và Python cũng sẽ tìm thấy một số điểm tương đồng để trở nên thích thú. Những độc giả đề cử Ruby đã ca ngợi nó bởi tính dễ hiểu và dễ học, dễ đọc khi mới bắt đầu; và nó có một cộng đồng developer rộng lớn, năng động và đam mê để đảm bảo sự thành công của ngôn ngữ này.

3. Python

Ngôn ngữ lập trình Python
Khi mọi người bàn luận về những ngôn ngữ lập trình nên học đầu tiên và ngôn ngữ nào dễ dàng hơn cho mọi người có thể học nhanh chóng, Python chắc chắn là một lựa chọn. Nó được phát triển từ những năm 80s bởi Guido van Rossum, người sau đó đã quản lý ngôn ngữ này thông qua tổ chức phi lợi nhuận Python Software Foundation, phục vụ như là đơn vị quản lý của ngôn ngữ này, Python là ngôn ngữ mã nguồn mở và sử dụng miễn phí, thậm chí cho các ứng dụng thương mại. Python thường được sử dụng và xem như là một ngôn ngữ kịch bản, cho phép các lập trình viên tạo ra một số lượng lớn code dễ đọc trong một khoảng thời gian ngắn, nhưng nó cũng là một ngôn ngữ dynamic, hỗ trợ hướng đối tượng, thủ tục, và có phong cách lập trình chức năng như những ngôn ngữ khác. Bởi tính mềm dẻo của nó, Python là một trong những ngôn ngữ lập trình bậc cao được sử dụng rộng rãi nhất ngày nay.
Python không chỉ bắt đầu dạy ở mức cơ bản, mà nó dạy một số kiến thức hữu ích như indentation, module hóa, tính quan trọng của quy tắc đặt tên biến và hàm (naming conventions) sẽ giúp bạn rất nhiều khi bạn học và làm việc với những ngôn ngữ khác. Trong bài viết trước, tôi đã đề cập đến một chủ đề trên mạng xã hội Reddit nói về những mặt ưu và nhược điểm của ngôn ngữ này khi chọn nó để học đầu tiên. Những bạn đã đề cử Python cũng làm nổi bật một thực tế rằng cộng đồng các developer Python rất hạnh phúc bởi ngôn ngữ này thường được sử dụng như là một ngôn ngữ để dạy học, vì vậy họ có hàng tấn các công cụ học tập và các tài liệu có sẵn để giúp những người lần đầu tiên học code. Nhưng tutorial trên trang chủ của nó cũng dễ để làm theo, rất hữu ích và thực tế.

4. C/C++

Ngôn ngữ lập trình C/C++
Trong khi những đề cử của độc giả đa số là cho ngôn ngữ lập trình C và khá ít đề cử C++, chúng tôi đã quyết định gộp 2 ngôn ngữ này làm một, vì dù sao C++ cũng là một bước tiến từ C. Chúng ta không đi quá chi tiết vào lịch sử của ngôn ngữ C, và sau đó là C++ (cái mà đã bắt đầu cải tiến và cập nhật để mang ngôn ngữ C đến với các ứng dụng hiện đại), hãy chỉ nói về 2 ngôn ngữ này kể từ khi chúng được sinh ra từ những năm 1970s và đầu những năm 80s, tương ứng (bạn có thể đọc thêm về lịch sử của hai ngôn ngữ này ở link Wikipedia phía trên). C là ngôn ngữ lập trình mệnh lệnh được sử dụng cực kỳ rộng rãi, đa mục đích; có một tầm ảnh hưởng lớn đến hầu hết các ngôn ngữ lập trình đi sau nó. C++ mặt khác còn đi một bước xa hơn trong việc bổ sung các đặc trưng hướng đối tượng class đến ngôn ngữ này, đi kèm với các hàm ảo và template. C++ là một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới, và ngày nay nó vẫn còn được sử dụng rộng rãi trong mọi thứ từ video games cho đến các phần mềm thương mại. Việc học C++ có một chút khó khăn hơn so với C, mặc dù nhiều người sẽ tranh cãi rằng không có lý do gì mà lại bắt đầu học lập trình bằng ngôn ngữ C cả. Đó là một cuộc tranh luận không có hồi kết.
Có một điều quan trọng về C và C++: cả 2 ngôn ngữ này hầu như là những ngôn ngữ nền tảng nhất trong khoa học máy tính và lập trình. Nếu bạn học chúng, bạn sẽ thu được nhiều lợi ích, thậm chí nếu sau này bạn không còn sử dụng chúng nữa. Chúng sẽ mang lại cho bạn cái nhìn sâu sắc vào trong điểm bắt đầu và nguồn gốc của khoa học máy tính và lập trình máy tính, trong khi nhiều người chỉ ra rằng việc học đó cũng giống như bạn đang học lái xe hơi trước khi học cách lắp ráp một chiếc xe, cả hai ngôn ngữ này đều có những mặt ưu và nhược điểm của chúng. Những độc giả đã ca ngợi chúng là ngôn ngữ đầu tiên để học nói rằng bạn sẽ có một sự hiểu biết phong phú về lập trình nếu bạn bắt đầu với chúng, và một độc giả đã trỏ link sang bài viết tuyệt vời này có nội dung về làm thế nào để các ngôn ngữ có thể phân biệt những lập trình viên giỏi và lập trình viên vĩ đại một cách dễ dàng. Lúc này, nếu bạn không nhắm đến lập trình chuyên nghiệp thì nó có thể trở thành vấn đề đối với bạn, nhưng nó vẫn có giá trị đáng để quan tâm. Ngoài ra, một số bạn đã đề cử những "biến thể" khác của C và C++ áp dụng cho những ứng dụng xác định, như ANSI C thường được sử dụng trong lập trình các vi xử lý Arduino, Robot C được sử dụng trong lập trình robot. Nhiều bạn cũng nói rằng việc bắt đầu với những ngôn ngữ khó như C và C++ khiến cho việc chuyển sang học ngôn ngữ khác (ví dụ: Java) sẽ trở nên dễ dàng hơn.

5. JavaScript

Ngôn ngữ lập trình JavaScript
Bạn đừng nhầm lẫn JavaScript với Java, đây là một ngôn ngữ kịch bản đã được phát triển vào những năm 90s bởi Brendan Eich, cựu nhân viên của hãng Netscape Communications và giờ là Mozilla Foundation. JavaScript là một trong những công nghệ nền tảng mà web dựa trên đó. Đừng để tôi đánh lừa bạn - JavaScript tồn tại bên ngoài các trình duyệt, nhưng phần lớn nằm trong ngữ cảnh của các ứng dụng và dịch vụ kết nối. Ngôn ngữ này tự bản thân nó là dynamic, và cung cấp cho các lập trình viên sự mềm dẻo để sử dụng phong cách lập trình hướng đối tượng (và bản thân ngôn ngữ này hầu như là hướng đối tượng) cũng như là hướng chức năng và mệnh lệnh. Nó tiếp nhận nhiều cú pháp từ ngôn ngữ C, và nếu bạn lên kế hoạch để làm bất kỳ sự phát triển cho web, thì việc học JavaScript nên nằm trong danh sách của bạn.
May mắn thay, JavaScript khá dễ học, đã sẵn sàng ở trong trình duyệt để bạn có thể vọc vậy, và mặc dù nó đã tồn tại được khá lâu, nhưng ngày càng thu được sự nổi tiếng hơn. Nhiều người đề cử nó đã lưu ý rằng khả năng bạn áp dụng khi học JavaScript là rất lớn, bởi vì bạn có thể bắt đầu sử dụng nó ngay bằng cách xây dựng một vài thứ trên web - điều này có thể rất tốt khi mọi người bắt đầu học lập trình. Một số bạn thậm chí còn nói rằng họ đã học được những ngôn ngữ phức tạp hơn nhiều như C và Java bằng cách chọn JavaScript là ngôn ngữ đầu tiên (nhưng đừng lầm lẫn - có rất ít sự liên quan giữa JavaScript và Java). Ngoài ra, nếu bạn đang tìm cách để lập trình chuyên nghiệp, thì hiện nay JavaScript có nhu cầu rất lớn.

Kết luận

Bây giờ là lúc để đưa ra kết quả 5 ngôn ngữ được bình chọn bởi chính các bạn, những độc giả của cộng đồng Lifehacker, danh sách những ngôn ngữ dành cho người mới học lập trình:
Bảng xếp hạng các ngôn ngữ lập trình
Chúng tôi gần như không có đủ không gian để đưa ra những đề cập về tất cả mọi ngôn ngữ nên phải cắt bớt một số ứng viên cũng rất tuyệt vời. Tuy nhiên chúng tôi sẽ đưa ra một ngoại lệ với ngôn ngữ C# .NET, ngôn ngữ mà độc giả có nickname wakers01 đã tạo ra một tranh luận thuyết phục để đề cử nó. C# và .NET Framework được thiết kế và phát triển bởi Microsoft, và họ cũng rất hạnh phúc khi khuyến khích bạn học nó.
Bạn có điều gì muốn bàn luận về một trong những ứng cử viên nói trên? Ngôn ngữ ưa thích của bạn là gì, nó có nằm trong danh sách đó không? Bạn cũng nên nhớ rằng, top 5 ngôn ngữ ở trên là dựa trên số lượng đề cử của chính các độc giả từ bài viết tuần trước. Đừng chỉ phàn nàn về top 5 này, hãy cho chúng tôi biết bạn muốn thay thế ngôn ngữ nào trong danh sách trên bằng cách để lại bình luận phía dưới nhé!
8 Điều bạn cần biết về giáo dục trực tuyến Hồ Sỹ Hùng Blog Home Chọn nghề nghiệp – khi cả phụ huynh và người học là những kẻ vô trách nhiệm Techmaster team
Hồ Sỹ Hùng
Hùng là lập trình viên có nhiều năm kinh nghiệm trong lĩnh vực: C#, VB.NET, ASP.NET, SQL Server, MVC, Entity Framework… và đồng thời cũng là admin của blog http://vinacode.net/. Bạn có thể liên hệ với anh qua email hungpm2000[at]gmail.com

Tự học lập trình trong 10 năm

Tại sao mọi người lại hối hả như vậy?

Nếu bước chân vào bất kỳ hiệu sách nào, thì bạn cũng sẽ bắt gặp cuốn sách có tựa đề Tự học Java trong vòng 24 giờ và bên cạnh đó là vô số những cuốn sách chào mời việc học C, SQL, Ruby, Thuật toán, và nhiều thứ khác trong chỉ trong một vài ngày hoặc vài giờ. Tôi thử tìm trên trang web bán sách trực tuyến Amazon với cụm từ tìm kiếm “tự học trong vài giờ” thì đã tìm thấy đến 512 cuốn sách. Trong top 10 cuốn đầu tiên, thì đã có đến 9 cuốn là sách về lập trình. Nếu đổi cụm từ tìm kiếm từ “tự học trong vài giờ” sang “tự học trong vài ngày” thì cũng ra kết quả tương tự.
Liệu tôi có phải khổ luyện 10,000 giờ (10 năm) để trở thành một chuyên gia phát triển phần mềm?Liệu tôi có phải khổ luyện 10,000 giờ (10 năm) để trở thành một chuyên gia phát triển phần mềm?
Kết luận đó là hoặc mọi người đang đổ xô học về lập trình, hoặc lập trình là một cái gì đó vô cùng dễ dàng để học hơn bất cứ thứ gì khác. Giáo sư Felleisen cũng đã đưa ra quan điểm đồng tình với xu hướng này trong cuốn sách How to Design Programs của ông, khi ông nói rằng “Lập trình tồi thì rất dễ. Bất kỳ thằng ngốc nào cũng có thể học nó trong 21 ngày, thậm chí nếu chúng là những kẻ đần độn.” Trang web Abtruse Goose cũng đã đưa ra một truyện tranh biếm họa về vấn đề này.
Hãy cùng tôi phân tích một tựa sách kiểu như Tự học C++ trong 24 giờ có ý nghĩa gì nhé:
  • Tự học: Trong vòng 24 giờ thì bạn sẽ không có đủ thời gian để viết ra một vài chương trình quan trọng, và học được từ những thành công cũng như thất bại cùng với chúng. Bạn sẽ không có thời gian để làm việc cùng một lập trình viên nhiều kinh nghiệm và hiểu được việc sống trong một môi trường giống như C++ nó sẽ như thế nào. Nói một cách ngắn gọn, bạn không có đủ thời gian để học được gì nhiều. Vì vậy cuốn sách đó có thể chỉ nói về những thứ hời hợt và nông cạn theo kiểu “cưỡi ngựa xem hoa” chứ chẳng mang lại kiến thức sâu sắc gì. Cũng như Alexander Pope đã nói rằng, hiểu biết nông cạn là một điều rất nguy hiểm.
  • C++: Trong vòng 24 giờ bạn có khả năng học một số cú pháp của C++ (nếu bạn đã biết một ngôn ngữ lập trình khác rồi), nhưng bạn không thể học được nhiều về làm thế nào để sử dụng ngôn ngữ đó. Nói ngắn gọn, ví dụ nếu bạn là một lập trình viên ngôn ngữ Basic, thì bạn có thể học cách để viết các chương trình theo phong cách của Basic bằng việc sử dụng cú pháp của C++, nhưng bạn không thể học được điểm thực sự tốt (và tồi) của C++ là gì. Vì vậy quan điểm ở đây là gì? Nhà khoa học máy tính nổi tiếng Alan Perlis đã nói rằng: “Một ngôn ngữ mà không ảnh hưởng đến cái cách bạn nghĩ về lập trình, thì nó không đáng để học.” Một quan điểm khác cho rằng bạn phải học một chút xíu về ngôn ngữ C++ (hoặc cũng tương tự cho ngôn ngữ JavaScript hay Processing) bởi vì bạn cần phải giao tiếp với một công cụ hiện có để hoàn thành một tác vụ xác định nào đó. Nhưng nếu theo cách này thì không phải là bạn đang học về cách lập trình như thế nào; mà bạn đang học cách để hoàn thành tác vụ đó mà thôi.
  • trong 24 giờ: Không may là quãng thời gian này thì quá ngắn, và phần tiếp theo sẽ nói rõ hơn về điều này.

Tự học lập trình trong 10 năm

Các nhà nghiên cứu (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) đã chỉ ra rằng cần ít nhất 10 năm để đạt được sự tinh thông trong bất cứ một lĩnh vực nào, từ đánh cờ, sáng tác âm nhạc, lập trình máy tính, hội họa, chơi piano, bơi lội, chơi tennis, hoặc thu được kết quả trong lĩnh vực tâm lý học hay hình học topo. Điều quan trọng ở đây là phương pháp thực hành: không chỉ là việc lặp đi lặp lại đơn thuần, mà còn phải thử thách chính mình bằng những nhiệm vụ khó khăn vượt quá khả năng hiện tại của bản thân, thử nghiệm nó, phân tích đánh giá hiệu suất của mình trong và sau quá trình rèn luyện, sửa chữa bất cứ sai lầm nào. Cứ như vậy, lặp đi lặp lại.
Và lịch sử đã chứng minh rằng không thể có con đường tắt nào khác: dù cho đó là Mozart, thần đồng âm nhạc ở tuổi lên 4, cũng phải mất hơn 13 năm sau mới sáng tác ra những kiệt tác âm nhạc. Trong một thể loại khác, ban nhạc The Beatles dường như từ chỗ vô danh leo thẳng lên vị trí số 1 bằng một loạt các bài hát đứng top #1 và xuất hiện tại các buổi trình diễn Ed Sullivan trong năm 1964. Nhưng họ cũng đã phải cặm cụi chơi nhạc tại những phòng trà nhỏ ở Liverpool và Hamburg từ những năm 1957, mặc dù họ đã tạo được sự thu hút từ rất sớm, nhưng thành công lớn đầu tiên của nhóm là Sgt. Peppers, album được phát hành vào năm 1967. Tác giả Malcolm Gladwell đã phổ biến ý tưởng này trong cuốn sách nổi tiếng “Những Kẻ Xuất Chúng” của ông, mặc dù ông đã đề cập đến 10,000 giờ khổ luyện chứ không phải là 10 năm.
Con đường đi tới giải Fields đầy vinh quang của GS Ngô Bảo Châu cũng phải trải qua 15 năm đóng cửa cô đơn đối mặt với Bổ đề cơ bản.
Con đường đi tới giải Fields đầy vinh quang của GS Ngô Bảo Châu cũng phải trải qua 15 năm đóng cửa cô đơn đối mặt với Bổ đề cơ bản.
Nó có thể là 10,000 giờ, không phải là 10 năm, nhưng đó là một con số thần kỳ. Hoặc nó có thể được ước lượng theo một cách khác; Henri Cartier-Bresson (1908-2004) đã nói rằng “10,000 bức hình đầu tiên mà bạn chụp là những bức hình tồi nhất của bạn“. Để trở thành một chuyên gia đích thực thì có khi cần luyện tập cả đời: Samuel Johnson (1709-1784) đã nói rằng: “Để trở nên xuất sắc trong bất kỳ lĩnh vực nào thì chỉ có thể đạt được bằng lao động suốt đời; nó không thể mua được bằng một cái giá rẻ hơn“. Còn Chaucer (1340-1400) đã phàn nàn rằng “cuộc đời thì quá ngắn ngủi, mà nghề thì cần quá nhiều thời gian để học.” Ông tổ của ngành y học hiện đại là Hippocrates (năm 400 trước công nguyên) cũng được biết đến với câu nói “Cuộc đời thì rất ngắn, việc học nghề thì rất lâu, cơ hội thì phù du, trải nghiệm thì khó tin, phán xét thì rất khó“. Dĩ nhiên, không có một con số đơn lẻ nào có thể là câu trả lời cuối cùng: dường như có một lý do chấp nhận được khi cho rằng không nhất thiết mỗi công việc như lập trình, đánh cờ, và chơi nhạc đều cần chính xác cùng một số lượng thời gian để tinh thông, cũng không phải rằng tất cả mọi người đều cần chính xác một số lượng thời gian đó.
Hãy là những người đầu tiên đăng ký vé Early Bird từ 01/04 – 15/04 với giá ưu đãi chỉ còn 150k

Nếu bạn muốn trở thành một lập trình viên giỏi

-------------------- Thông tin cho Dev --------------------
Đây là công thức của tôi để trở thành công trong nghề lập trình:
  • Hãy thích thú trong việc lập trình, và làm nó bởi vì nó mang lại cho bạn nhiều niềm vui. Hãy chắc chắn rằng nó đủ vui để làm cho bạn sẽ sẵn lòng bỏ thêm 10 năm (hoặc 10,000 giờ) để luyện tập.
  • Lập trình. Cách học tốt nhất là học thông qua thực hành. Cuốn sách Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life là một tham khảo thú vị cho quan điểm này. Một số trích đoạn đáng chú ý trong cuốn sách đó như sau, “đẳng cấp của một cá nhân trong một lĩnh vực nào đó thì không đạt được một cách tự nhiên theo thời gian, mà đẳng cấp chỉ có thể tăng lên thông qua nỗ lực luyện tập để tiến bộ” và “để việc học được hiệu quả nhất thì yêu cầu mỗi tác vụ phải được xác định rõ ràng cùng với độ khó thích hợp cho người tham gia, có đánh giá phản hồi, và có cơ hội để lặp lại và sửa chữa những sai lầm.
  • Nói chuyện cùng những lập trình viên khác; đọc các chương trình do họ viết ra. Điều này thì còn quan trọng hơn bất kỳ cuốn sách hoặc khóa huấn luyện nào.
  • Nếu bạn muốn, hãy học 4 năm tại một trường đại học (hoặc nhiều hơn tại mức sau đại học). Điều này giúp bạn có thể kiếm được một công việc mà yêu cầu bằng cấp, và nó sẽ mang lại cho bạn mức hiểu biết sâu hơn trong lĩnh vực này; nhưng nếu không thích trường học, thì bạn cũng có thể (cùng với nhiều nỗ lực) thu được kinh nghiệm tương tự bằng cách tự học hoặc dựa trên công việc của bạn. Trong bất kỳ trường hợp nào, chỉ học qua sách vở sẽ là chưa đủ. Tác giả của cuốn sách The New Hacker’s Dictionary là Eric Raymond đã nói rằng, “Giáo dục về Khoa học máy tính không thể khiến cho bất kỳ ai trở thành chuyên gia lập trình, cũng như là việc học về cọ và màu không thể làm cho ai đó trở thành họa sĩ tài ba”. Một trong những lập trình viên tốt nhất mà tôi đã từng thuê, thì anh ta chỉ mới có bằng tốt nghiệp trung học; nhưng anh ta đã tạo ra được rất nhiều phần mềm tuyệt vời, có hẳn một nhóm tin (news group) của riêng mình, và kiếm đủ cổ phiếu dạng tùy chọn để có thể sở hữu một quán bar.
  • Làm việc trên nhiều dự án cùng với những lập trình viên khác. Hãy là người giỏi nhất trong một số dự án; và hãy là người kém nhất trong một số dự án khác. Khi bạn là người giỏi nhất, bạn sẽ có cơ hội kiểm tra các khả năng về lãnh đạo một dự án, và cách truyền cảm hứng tới những người khác với tầm nhìn của bạn. Khi bạn là người kém nhất, bạn sẽ học được cách mà các cao thủ sẽ làm, và bạn biết được những công việc mà họ không muốn làm (bởi vì đó là những việc mà họ sẽ sai bạn làm cho họ).
  • Làm việc trên các dự án sau những lập trình viên khác. Hiểu rõ một chương trình được viết ra bởi một người khác. Đọc code để hiểu nó và có thể sửa chữa khi những lập trình viên ban đầu không còn hỗ trợ nó nữa. Hãy nghĩ về việc làm thế nào để thiết kế các chương trình của bạn khiến cho những người sau này bảo trì nó được dễ dàng hơn.
  • Hãy học ít nhất nửa tá các ngôn ngữ lập trình. Bao gồm một ngôn ngữ nhấn mạnh về các lớp trừu tượng (ví dụ như Java hoặc C++), một ngôn ngữ nhấn mạnh về các hàm trừu tượng (ví dụ Lisp hoặc ML hay Haskell), một ngôn ngữ hỗ trợ cú pháp trừu tượng (kiểu như Lisp), một ngôn ngữ hỗ trợ khai báo các đặc tả (ví dụ như Prolog hoặc C++ templates), và một ngôn ngữ nhấn mạnh về tính song song (ví dụ như Clojure hoặc Go).
  • Nên nhớ rằng có một chữ “máy tính” trong cụm từ “khoa học máy tính”. Phải biết máy tính của bạn thực thi một lệnh mất bao lâu, tìm nạp một từ vào bộ nhớ (có và không có cache), đọc liên tục các từ (word) từ đĩa, và tìm kiếm một một vị trí mới trên đĩa.
  • Nên tham gia vào nỗ lực chuẩn hóa một ngôn ngữ. Đó có thể là ủy ban ANSI C++, hoặc đó có thể là việc quyết định liệu coding style của bạn sẽ có 2 hoặc 4 mức căn lề. Hoặc theo một cách khác, bạn hãy tìm hiểu xem những người khác thích một ngôn ngữ ở điểm gì, họ cảm thấy sâu sắc như thế nào, và thậm chí về lý do tại sao họ lại cảm thấy như vậy.
  • Có sự nhạy bén để áp dụng những nỗ lực chuẩn hóa của ngôn ngữ đó một cách nhanh nhất có thể.
Cùng với tất cả những điều kể trên, một câu hỏi đặt ra là bạn có thể đi được bao xa nếu chỉ thông qua việc đọc sách. Trước khi con cả của tôi chào đời, tôi đã đọc tất cả các cuốn sáchLàm Thế Nào (How To), mà vẫn cảm thấy tương đối mơ hồ. 30 tháng sau đó, khi đứa con thứ hai của tôi chào đời, thì tôi đã quay trở lại đọc những cuốn sách đó để có một cách nhìn tươi mới hơn? Không. Thay vì đó, tôi đã dựa trên kinh nghiệm cá nhân của bản thân mình, và chính chúng đã giúp ích cho tôi rất nhiều còn hơn hàng ngàn trang sách được viết bởi các chuyên gia.
Tác giả Fred Brooks, trong tiểu luận của mình là No Silver Bullet đã đưa ra một kế hoạch gồm 3 bước nhằm tìm kiếm ra một người thiết kế phần mềm tuyệt vời như sau:
  1. Hệ thống hóa việc nhận diện top những người thiết kế phần mềm sớm nhất có thể.
  2. Gán một người cố vấn nghề nghiệp để chịu trách nhiệm cho sự phát triển của tài năng tương lai đó và lưu giữ cẩn thận một hồ sơ nghề nghiệp.
  3. Cung cấp thật nhiều cơ hội để những người này có thể phát triển thông qua việc tương tác và cạnh tranh lẫn nhau.
Giả sử rằng một số người đã có sẵn những phẩm chất cần thiết để trở thành một nhà thiết kế phần mềm giỏi; công việc ở đây là hướng dẫn họ theo một cách thích hợp để họ có thể phát triển. Nhà khoa học về máy tính nổi tiếng Alan Perlis đã nói một cách cô đọng như sau: “Bất cứ ai cũng có thể được dạy để trở thành một nhà điêu khắc: nhưng nhà điêu khắc thiên tài Michelangelo không được dạy làm thế nào để được như vậy. Và điều đó cũng đúng đối với các lập trình viên vĩ đại“. Perlis cũng nói rằng những con người vĩ đại đó có một tố chất nội lực vượt quá cả việc huấn luyện họ. Nhưng mà những tố chất đó đến từ đâu? Đó có phải là yếu tố bẩm sinh? Hay là họ đã phát triển nó thông qua sự siêng năng tập luyện? Cũng như Auguste Gusteau (bếp trưởng trong Ratatouille) đã nói, “bất kỳ ai cũng có thể nấu ăn, nhưng chỉ những người không biết sợ mới trở nên vĩ đại”. Tôi nghĩ đó phần nhiều là nhờ họ sẵn lòng cống hiến một phần lớn cuộc đời để luyện tập và sửa sai. Nhưng có thể không biết sợ là cách để tóm tắt lại công thức thành công một cách ngắn gọn nhất. Hoặc, như nhà phê bình của Gusteau là Anton Ego đã nói rằng: “Không phải ai cũng có thể trở thành một họa sĩ vĩ đại, nhưng một họa sĩ vĩ đại thì có thể đến từ bất cứ đâu”.
Vì vậy bạn có thể vẫn cứ mua những cuốn sách về Java/Ruby/Javascript/PHP nói trên; và có thể thu được một vài kiến thức từ chúng. Nhưng bạn không thể thay đổi cuộc đời, hay toàn bộ sự nghiệp lập trình viên của mình chỉ trong 24 giờ hoặc 21 ngày. Còn nếu bạn tiếp tục làm việc chăm chỉ để phát triển trên 24 tháng thì sao? Vâng, nếu theo cách thứ hai thì bạn đang bắt đầu đi đúng hướng rồi đấy…

Sunday, July 23, 2017

Rảnh rỗi không biết code gì, sao không làm pet project?


Hôm trước, sau khi post bài viết “Lập trình viên lúc rãnh rỗi thì làm gì?”, mình nhận được một câu hỏi từ nhiều bạn: “Anh ơi, lúc rảnh em thích code cơ! Nhưng mà em không biết phải code gì?”.
Mình viết bài này để trả lời tường tận hơn câu hỏi của các bạn. Lời khuyên của mình là: Nếu không biết code gì, hãy tìm pet project và code. Pet project ở đây là một dự án ngắn ngắn, nho nhỏ do chúng ta tự nghĩ ra.
Vậy code pet project thì được gì? Làm sao nghĩ ra ý tưởng và giới thiệu pet project tới mọi người? Đọc bài viết để biết nhé!

Làm Pet Project thì được lợi ích gì?

Lợi ích đầu tiên là nâng cao trình độ. Muốn code giỏi thì phải … code nhiều. Với pet project, tự nghĩ requirement, không có áp lực về deadline, ta có thể code một cách thoải mái, đúng chuẩn mà không lo bị PM “thúc đít”.
Khi đi làm, do yêu cầu công việc, đôi khi bạn phải bảo trì ứng dụng cũ, sử dụng các công nghệ cũ. Với pet project, bạn có thể thoải mái nghịch ngợm các ngôn ngữ/framework mới và các API linh tinh. Điều này giữ cho kiến thức của bạn không bị lỗi thời. Nếu công việc không yêu cầu code nhiều nhưng bạn vẫn còn đam mê, code pet project cũng giúp bạn đỡ bị… xuống tay nghề.
Quan trọng hơn, có vài pet project trong tài khoản github hoặc CV sẽ chứng tỏ cho nhà tuyển dụng thấy bạn là người đam mê công nghệ, luôn tìm tòi học hỏi cái mới (Ví dụ). Hai ứng viên có cùng trình độ, người có pet project đương nhiên sẽ được đánh giá cao hơn.
Ngoài ra, nếu may mắn, pet project của bạn có thể có nhiều người biết đến và sử dụng, hoặc có thể phát triển lên thành startup, như Flappy Bird của bác Hà Đông chẳng hạn. (Cách đây vài tuần mình cũng có release cái Nhận Diện Idol cơ mà do nhiều người dùng quá nên nó toi rồi).
screen-shot-2016-12-18-at-1-09-45-am
Trafic của “Nhận diện idol” sau 3 ngày công bố

Lấy ý tưởng ở đâu?

Vấn đề nhiều bạn gặp phải khi muốn làm một pet project là: Không nghĩ ra ý tưởng để code. Đây là một số gợi ý cho các bạn:
  • Phát triển từ tutorial: Khi học công nghệ, các bạn thường được hướng dẫn làm theo demo. Hãy nghĩ ra chức năng mới, mở rộng thêm tính năng của bản demo này để biến nó thành pet project.
  • Chôm ý tưởng: Nhiều bạn startup cứ giữ kín ý tưởng, sợ bị Sơn Tùng chôm mất. Thật ra, ý tưởng thường chỉ đáng giá vài cốc trà đá thôi. Các bạn có thể vào ideaswatch để “chôm” ý tưởng. Trong này các ý tưởng được đăng công khai, thoải mái cho bạn chọn.
  • Copy cái có sẵn: Viết một chương trình tương tự Facebook, Instagram nhưng nhỏ hơn. Chức năng mẫu có cả rồi, bạn chỉ việc chọn lựa tính năng vừa sức và code thôi.
  • Giải quyết vấn đề của bản thân, người quen: Bạn hay dậy muộn, hãy viết app báo thức. Bạn thích đi nhà nghỉ, hãy viết app tìm nhả nghỉ quanh bạn. Ông của bạn thích đánh đề, hãy viết chương trình … dự đoán kết quả lô đề. Từ feedback của người dùng, bạn có thể phát triển thêm dự án.
head-10-things-to-consider-when-choosing-project-management-software

Đưa pet project ra ánh sáng

Hoàn thành pet project rồi, nhưng nếu bạn để nó nằm im trong xó thì nó sẽ trở nên vô dụng. Nhiều bạn có thói quen code được nửa chừng rồi… bỏ. Điều nay rất lãng phí thời gian và công sức.
pet-project
Thay vì vậy, hãy cố gắng hoàn thành pet project (dù nhỏ) của mình, sau đó đưa nó ra ngoài ánh sáng. Một số lựa chọn để deploy project:
  • Hiện tại, có vô số service cho phép host ứng dụng miễn phí như Heroku, OpenShift RedHat. Cả AzureAWS đều có phiên bản miễn phí trong 1 năm, dư sức cho bạn host ứng dụng. Giai đoạn đầu bạn sẽ gặp chút khó khăn khi deploy (host, database), bù lại bạn sẽ tự học được khá nhiều.
  • Nếu là ứng dụng di động Android, hãy compile lại thành file APK rồi up lên đâu đó, dụ bạn bè cài đặt (iOS thì chịu rồi).
  • Hiện tại mình sử dụng serverless architecture, sử dụng RestfulAPI có sẵn, trong 1 số trường hợp thì tự viết API. Front-end là file HTML tĩnh, chỉ việc upload lên Github Pages, link vừa đẹp vừa dễ nhớ.
Bài viết đến đây là hết rồi. Nếu có câu hỏi hay thắc mắc gì, các bạn cứ đăng trong phầm comment nhé.
Dưới đây là một số pet project từ trước đến giờ của mình (source code open trên github):

Thư ngỏ gửi bạn sinh viên muốn có lương khởi điểm 2.000 USD/tháng


Cập nhật: một số tờ báo đã chép (không xin phép), một vài nơi tự ý sửa tiêu đề. Tôi hoàn toàn không có liên hệ gì với các tờ báo này.

Bài viết này chỉ có vài ngày mà đã có gần 20.000 người đọc. Tôi nghĩ sinh viên học sinh có nhu cầu rất lớn về tư vấn, định hướng, trao đổi về nghề nghiệp với những người đi trước.

Cách đây hai năm tôi đã có đến nói chuyện với các bạn sinh viên ở Học Viện Kỹ Thuật Mật Mã và tôi đã học được rất nhiều từ các bạn đó. Năm ngoái cùng với anh Bruce Dang, tôi cũng có đến trường Khoa Học Tự Nhiên ở Sài Gòn và đã có nhiều trao đổi rất thú vị.

Thật tình cờ là tôi đang ở Hà Nội. Tôi sẽ tổ chức một buổi gặp mặt với các bạn sinh viên để trao đổi, mở rộng thêm về những nội dung mà tôi viết bên dưới.

Thời gian: 15.00 - 17.00, ngày thứ ba 6/12.
Địa điểm: tòa nhà Detech (đại học FPT), số 8 Tôn Thất Thuyết, Cầu Giấy, Hà Nội

Vào cửa tự do, không phải sinh viên FPT vẫn được chào đón.
--

Tôi nghĩ câu hỏi của bạn rất hay, thiết thực, không thể rõ ràng hơn được nữa. Tôi thấy thất vọng với các câu trả lời, vì chúng hoàn toàn lạc đề. Bạn hỏi phải học thế nào, nhưng các câu trả lời chỉ tập trung vào con số 2.000 USD/tháng. Bạn hỏi phải làm gì, nhưng người ta chỉ trả lời lòng vòng. Tôi viết vội lá thư này không có mục đích gì khác ngoài việc cung cấp cho bạn một câu trả lời có nhiều thông tin hơn.

2.000 USD/tháng là một mức lương cao ở Việt Nam, nhưng sinh viên đi thực tập ở Mỹ đã nhận 6.000 - 8.000 USD/tháng, lương kỹ sư 10 năm kinh nghiệm có thể lên đến 500.000 - 1.000.000 USD/năm. Câu trả lời ngắn gọn là phải học để có thể ra nước ngoài làm việc. Nếu trình độ của bạn đủ để làm việc ở Mỹ, châu Âu, Singapore, v.v. thì làm việc ở trong nước lương bổng cũng sẽ xứng đáng.

Cụ thể:

1/ Xem phần đầu của bài Kinh nghiệm tìm việc làm ở Silicon Valley. Điều kiện tiên quyết là phải nghe, đọc, nói, viết được tiếng Anh. Không cần phải xuất sắc, nhưng ít nhất phải đọc được sách, xem được phim không cần phụ đề, phản xạ nhanh khi giao tiếp, chat được bằng tiếng Anh.

2/ Học tốt những môn học ở trường, tìm học bổng đi du học. Tìm đọc những cuốn sách, theo học các lớp học của các đại học lớn trên thế giới được giới thiệu trong bài Làm an toàn thông tin thì học gì?.

3/ Chơi CTF thường xuyên để cọ xát thực tế, tham gia đóng góp vào các dự án mã nguồn mở để tích lũy kinh nghiệm.

4/ Tạo một tài khoản trên Twitter, follow những cao thủ hacker để cập nhật tin tức và tạo dựng mối quan hệ với cộng đồng làm an toàn thông tin ở Việt Nam và trên thế giới.

5/ Tìm cơ hội làm thực tập sinh có trả lương cho các công ty nước ngoài hoặc các công ty trong nước có đội làm security tốt như Viettel hay VNG.

6/ Tìm việc làm thêm tại nhà liên quan đến công việc càng sớm càng tốt. Chẳng hạn như làm lập trình, làm kiểm định an toàn phần mềm, v.v.

Cuối cùng, có thể bạn sẽ không đạt được mục tiêu lương khởi điểm 2.000 USD/tháng hoặc không tìm được công việc ở nước ngoài, nhưng tôi tin chắc đặt ra một mục tiêu lớn và theo đuổi nó đến cùng sẽ giúp bạn tiến bộ không ngừng. Tôi nghĩ tiến bộ mỗi ngày là mục tiêu quan trọng nhất. Bạn phải học và làm để ngày mai bạn biết nhiều hơn ngày hôm qua, năm sau bạn làm được những việc mà năm trước chưa biết làm.

Kiến thức và kinh nghiệm như lãi suất gộp, bạn càng biết nhiều bạn càng có nhiều cơ hội để biết thêm nhiều thứ khác. Nếu tiếp tục chăm chỉ học và làm việc, đến một lúc nào đó, bạn sẽ quá giỏi đến mức người ta không thể nào bỏ qua bạn (so good they can't ignore you). Lúc đó, bạn chọn công ty, chứ không để công ty chọn bạn. Và khi quyền chọn lựa là của mình, đừng nói 2.000 USD/tháng thậm chí 20.000 USD/tháng là hoàn toàn trong tầm tay.

Chúc may mắn.

“Em phải học thế nào để lương khởi điểm 2.000 USD/ tháng?”

Chiều ngày 29/11, tọa đàm “Vai trò và trách nhiệm của thế hệ trẻ trong xã hội thông tin” do Cục An toàn thông tin, Bộ Thông tin và Truyền thông tổ chức đã diễn ra tại Học viện Kỹ thuật mật mã.
Tại đây, các sinh viên chuyên ngành An toàn thông tin tới từ các trường Học viện Kỹ thuật mật mã, ĐH Bách khoa Hà Nội, Học viện An ninh nhân dân, ĐH Công nghệ… đã đưa ra những câu hỏi về cơ hội việc làm, kinh nghiệm nộp hồ sơ xin việc cho các khách mời là đại diện các doanh nghiệp, đại diện sinh viên ưu tú của ngành An toàn thông tin.
sinh viên, việc làm, sinh viên thất nghiệp, định hướng nghề nghiệp
Tọa đàm ““Vai trò và trách nhiệm của thế hệ trẻ trong xã hội thông tin” diễn ra tại Học viện Kỹ thuật mật mã chiều ngày 29/11
Chia sẻ trong phần khai mạc tọa đàm, ông Nguyễn Huy Dũng – Phó Cục trưởng Cục An toàn thông tin – đã khẳng định tầm quan trọng của an toàn thông tin trong xã hội hiện đại.
“Nếu như trong quá khứ, sức mạnh của một quốc gia được đo bằng sức ngựa, bằng số lượng chiến mã, bằng khả năng chinh phục đại dương, sau này là bằng khả năng chiếm lĩnh không gian, thì cho đến thời điểm hiện tại, kể từ khi máy vi tính lần đầu tiên xuất hiện, kể từ khi mạng Internet trở nên phổ biến thì sức mạnh của một quốc gia hiện nay được đo bằng khả năng chiếm lĩnh không gian mạng”.
“Mục tiêu của buổi tọa đàm ngày hôm nay là khơi dậy niềm đam mê, hoài bão. Hi vọng ngày hôm nay chúng tôi có thể giúp đánh thức tiềm năng, đánh thức “người khổng lồ còn đang say ngủ” trong một vài bạn nào đó đang ngồi ở hội trường này để trong vòng 3 năm nữa, 5 năm nữa hay 10 năm nữa, các bạn sẽ có những đóng góp lớn lao cho xã hội, cho nước nhà thì chúng tôi cảm thấy rất hạnh phúc” – ông Dũng nói.
Trả lời câu hỏi phổ biến của các sinh viên dành cho doanh nghiệp: doanh nghiệp tìm kiếm điều gì ở các ứng viên?, ông Khổng Huy Hùng – Tổng Giám đốc Công ty cổ phần công nghệ An ninh không gian mạng Việt Nam (VNCS) cho biết, mong muốn chung của VNCS cũng giống như tất cả các ngành nghề khác là các bạn phải có kiến thức nền tảng. “Tuy nhiên, kỹ năng mềm là kỹ năng cần phải trau dồi và là kỹ năng mà chúng tôi mong muốn nhiều nhất”.
Ông Hùng cho rằng, nhiều ứng viên vẫn còn thiếu sự chuyên nghiệp. Ông đưa ra một số dẫn chứng đã từng xảy ra ở doanh nghiệp của mình: ứng viên không trả lời email, gọi phỏng vấn không đến, hoặc đã xác nhận là đến nhưng đến giờ không thấy đâu.
“Không phải ai cũng là người giỏi nhất. Nếu các bạn không phải là người giỏi nhất, thì các bạn hãy trau dồi những kỹ năng mềm khác, sự chuyên nghiệp, cần cù, chăm chỉ để là người phù hợp nhất. Chúng tôi tuyển những người phù hợp nhất, chứ không phải những người giỏi nhất, thậm chí không phải là người giỏi, mà là một sinh viên bình thường thôi” – ông Hùng chia sẻ quan điểm của mình.
Trả lời câu hỏi này, ông Lê Minh Hưng – Giám đốc Trung tâm Không gian mạng, Tập đoàn Viễn thông quân đội Viettel cho rằng: “Mỗi cá nhân cần có một con đường khác nhau để đi đến thành công trong ngành An toàn thông tin nói riêng và các ngành nghề khác nói chung, tuy nhiên theo tôi có một điểm chung là “bạn cần có một số giờ bay nhất định, đâu đó khoảng 10 nghìn giờ bay”. Thành công không đến sau một đêm, sau một cơn mơ, mà là những ngày tháng khổ luyện”.
Chia sẻ thêm về quy tắc “10 nghìn giờ bay”, ông Dũng nói: “Không có một giấc mơ nào trở thành hiện thực nếu bạn không thức dậy để làm việc. Để thành công trong một lĩnh vực nào đó, theo thống kê khoa học, người ta có một quy tắc 10 nghìn giờ. Để trở thành một phi công thành thục thì bạn phải trải qua 10 nghìn giờ bay. Để trở thành một nhạc công thành thục, bạn phải có 10 nghìn giờ luyện tập trên phím đàn. Để trở thành một lập trình viên thành thục và ra được một kết quả gì đó thì bạn phải có 10 nghìn giờ miệt mài trên máy tính của mình”.
sinh viên, việc làm, sinh viên thất nghiệp, định hướng nghề nghiệp
Sinh viên Phạm Thị Thanh đặt câu hỏi: “Em phải học tập và làm việc như thế nào để các nhà tuyển dụng ở đây nhận em vào làm với mức lương khởi điểm 2.000 đô la/ tháng?”
Nhiều sinh viên ngành An toàn thông tin không ngần ngại chia sẻ rằng họ chọn ngành này vì mức thu nhập hứa hẹn trong tương lai.
Vì thế, câu hỏi của em Phạm Thị Thanh, sinh viên năm 3 ngành An toàn thông tin, Học viện Kỹ thuật mật mã đã làm “nóng” hội trường.
“Em phải học tập và làm việc như thế nào để các nhà tuyển dụng ở đây nhận em vào làm với mức lương khởi điểm 2.000 đô la/ tháng?” – Thanh mạnh dạn đặt câu hỏi cho các nhà tuyển dụng.
“Tôi cũng đã từng có suy nghĩ như bạn hồi sinh viên. Mức lương 1.000-2.000 đô nhiều người đã làm được. Đó không phải là việc quá khó. Nhưng bạn không thể ép một thần đồng giải một bài toán tích phân. Muốn giải tích phân phải đợi đến lớp 10. Nếu bạn muốn mức lương 2.000, bạn nên bình tĩnh một chút. Đó không phải là một mức lương quá khó với các bạn ở đây. Tôi tin rằng sau 10-15 năm nữa, ít nhất một nửa các bạn ngồi đây có mức lương như vậy. Nếu bạn giỏi hơn những người khác thì có thể bạn chỉ cần 5 năm thôi. Bạn nên kiên nhẫn một chút” – ông Lê Minh Hưng trả lời.
Chia sẻ về câu chuyện thu nhập, ông Khổng Huy Hùng đặt câu hỏi ngược lại với nữ sinh này: “Nếu anh trả cho em 2.000 thì em làm lại được cho anh bao nhiêu tiền?”
“Việc em đưa ra con số 2.000 không quan trọng, mà quan trọng là em làm lại được cho anh bao nhiêu. Mà với một bạn sinh viên mới ra trường thì thông thường anh không nghĩ rằng bạn ấy sẽ mang lại được cho anh 10-15 ngàn/ tháng để anh có thể trả lại cho bạn ấy 2 ngàn.
Anh chưa có câu trả lời cho em nhưng anh đang băn khoăn là em sẽ làm gì cho anh để tạo ra 10-15 ngàn/ tháng để anh trả cho em. Nên anh nghĩ câu trả lời của anh là một câu hỏi mở ngược lại cho em”.
Ông Hùng khẳng định: “Bản thân em phải biết mình có thể mang lại được giá trị gì cho công ty. Thông thường mình phải trả lời câu hỏi đó trước cho doanh nghiệp. Tôi mang lại cho anh từng này và tôi muốn nhận được từ anh chừng này. Thông thường thì logic đấy sẽ dễ chấp nhận hơn. Liệu rằng cách nghĩ đấy có phải là một cách nghĩ tốt hơn là mình đặt ra một câu hỏi ngược lại cho doanh nghiệp hay không?”
Sau câu hỏi làm “nóng” hội trường của nữ sinh năm 3 là lời đề nghị nghiêm túc nhưng không kém phần hài hước của ông Nguyễn Huy Dũng:
“Các bạn đang nói về mức lương 2.000 đô để làm những việc quan trọng. Không biết là trong những bạn sinh viên ở đây có bạn nào sẵn sàng nhận mức lương 200 đô để làm những việc quan trọng không kém không ạ?
Tất cả các bạn có thể liên hệ với tôi để đề nghị một cuộc phỏng vấn. Cục An toàn thông tin hiện đang tuyển dụng viên chức cho Cục và các bạn có thể liên hệ với tôi hoặc qua gian hàng thông tin ở ngoài kia”.
sinh viên, việc làm, sinh viên thất nghiệp, định hướng nghề nghiệp
Một nữ sinh tới từ Học viện An ninh nhân dân đặt câu hỏi cho các khách mời
Một nữ sinh viên khác đang theo học ngành An toàn thông tin, Học viện Kỹ thuật mật mã đưa ra câu hỏi về cơ hội việc làm phù hợp với sinh viên nữ học ngành này. Trả lời câu hỏi này, ông Khổng Huy Hùng gợi ý các bạn nên trau dồi kiến thức về mặt giải pháp.
“Để làm được điều đó, các bạn phải đọc nhiều, dùng nhiều, nghiên cứu trending thế giới nhiều. Ngoài kiến thức nền tảng, tiếng Anh cũng là một yếu tố quan trọng. Tiếng Anh phải tốt thì các bạn mới đọc được, tư vấn được, mới xây dựng được giải pháp để tư vấn cho khách hàng. Tôi nghĩ đó là những lựa chọn cho các bạn nữ mà không quá nặng về “technical””.
Nêu quan điểm về vấn đề nữ sinh viên học ngành An toàn thông tin, ông Lê Minh Hùng cho rằng “các bạn không nên tự đặt ra những giới hạn cho bản thân”.
“Tôi nghĩ thời đại này cũng không nên phân biệt nam hay nữ nhiều quá, tất nhiên là ở Việt Nam vẫn còn có những ảnh hưởng. Tuy nhiên, càng ngày tôi càng thấy nhiều bạn nữ, ngay cả ở trong cơ quan tôi, vẫn làm pentest, security, code như ai. Nếu nhìn rộng hơn, khi tôi đi giao lưu bên ngoài, tôi thấy nhiều bạn nữ thực sự ấn tượng. Họ rất tự tin và thông minh. Tôi nghĩ không có giới hạn nào cho các bạn”.
sinh viên, việc làm, sinh viên thất nghiệp, định hướng nghề nghiệp
Dương Quốc Tín – sinh viên ưu tú ngành An toàn thông tin, ĐH Công nghệ Thông tin - ĐH Quốc gia TP.HCM - là một trong số các khách mời của buổi tọa đàm
Tham gia tọa đàm còn có em Dương Quốc Tín – sinh viên năm cuối ĐH Công nghệ Thông tin, ĐH Quốc gia TP.HCM. Tín là một trong những sinh viên 3 năm liên tiếp giành giải Nhất trong các cuộc thi về an toàn thông tin, quán quân cuộc thi Cyber Sea Games tại Indonesia năm 2015. Cách đây 2 tuần, Tín vừa có chuyến sang Silicon Valley để phỏng vấn với Google.
Một sinh viên đề nghị Dương Quốc Tín chia sẻ kinh nghiệm với những bạn muốn làm trong lĩnh vực an toàn thông tin ở các công ty nước ngoài. “Họ đòi hỏi kinh nghiệm, kiến thức như thế nào để được gọi phỏng vấn?”
Chàng trai rất có duyên với giải thưởng này khẳng định “cần phải đặt mục tiêu sớm và con đường đi sẽ rất khó khăn”.
Tín chia sẻ, bản thân em bước chân vào ngành An toàn thông tin cũng với ước muốn một tháng làm được 3.000 đô. Và em cho rằng đó là một lý do chính đáng.
“Ngay từ năm nhất, các bạn phải đặt mục tiêu sẽ đi làm ở nước ngoài. Lúc đó, các bạn phải đặt ra những vấn đề cần giải quyết. Yếu tố đầu tiên là ngoại ngữ. Lúc đi phỏng vấn cho Google, mình gặp rất nhiều trở ngại về ngoại ngữ. 5 vòng phỏng vấn từ 10 giờ sáng đến 3 giờ chiều, mỗi vòng 45 phút. Những câu hỏi hoàn toàn đi sâu về kỹ thuật. Nếu các bạn chỉ học kiến thức nền tảng trên trường thì các bạn sẽ không thể nào vượt qua được.
Nếu các bạn muốn được phỏng vấn ở những công ty như vậy, các bạn phải là một trong số những người giỏi nhất. Đó là một quá trình khó khăn” – Tín chia sẻ.
Nguyễn Thảo

Giá trị của một fullstack developer

Trong bài viết này, chúng ta sẽ tìm hiểu về full stack developer. Họ là ai? Họ làm việc như thế nào? Giá trị của họ ra sao? Họ có giống như những Full stack Overflow developer mà tôi đã đề cập trước đây. Nào cùng tìm hiểu nhé!

Họ là ai?

Hầu hết các developer dành phần lớn thời gian của sự nghiệp cho việc chuyên môn hoá bản thân về một mảng nào đó. Còn đối với full stack developer, họ làm tất, vậy họ có phải là thiên tài công nghệ? Hay họ là những người thực sự tài năng?
Câu hỏi thứ nhất rất dễ dàng để trả lời, họ cũng như bao developer khác trên trái đất này có thể họ code vì đam mê, có thể họ code vì kiếm ăn ngày ba bữa. Còn đối với câu hỏi thứ hai, phức tạp hơn và cũng khó có cách nào để trả lời một cách hoàn hảo.

Full stack developer, họ có thực sự tồn tại?

Vâng, họ có tồn tại. Tuy nhiên, để đánh giá được đúng một developer có có đầy đủ những khả năng để trở thành một full stack developer thực sự rất khó khăn, và bạn phải vô cùng cẩn thận với điều đó. Trở thành một full stack developer giỏi không chỉ là phải quen thuộc với nhiều thứ, nó là sự tổng hợp từ kiến thức, sự hiểu biết trực quan và sâu sắc về cả front-end và back-end, cũng như nắm vững các best practices và khái niệm.
Đương nhiên, các full stack developer đều có khả năng coding cho mọi thành phần của hệ thống, và nếu họ có tài, họ sẽ làm mọi thứ một cách tốt nhất. Điều này đòi hỏi một lượng lớn các kỹ năng cũng như kinh nghiệm.
Tuy nhiên thì một full stack developer làm việc với front-end sẽ không thể bằng một chuyên gia front-end được, điều này cũng tương tự với những thành phần khác. Một full stack developer có thể là một chuyên gia trong một số thành phần nào đó, nhưng để là chuyên gia trong tất cả thì đó hẳn là một thiên tài. Thế đấy, họ tồn tại nhưng có thể họ không phải là người mà một số nhà tuyển dụng đang tìm kiếm.

Full stack developer không phải là người một mình gánh team!

Một full stack developer sẽ có hiểu biết rộng về nhiều thành phần khác nhau, và cách tương tác giữa chúng trong quá trình phát triển, và kết hợp chúng lại với nhau thành một sản phẩm hoàn chỉnh.
Điều gì cũng sẽ có những ích lợi và hạn chế. Đối với những hệ thống mà ngày một phức tạp thì full stack developer sẽ lộ ra điểm yếu, họ khó có thể kiểm soát toàn bộ stack nữa. Lúc này chúng ta sẽ cần những chuyên gia cho từng thành phần. Đã có rất nhiều sai lầm phổ biến khi cho rằng nếu bạn thuê một full stack developer bạn sẽ chẳng cần phải thuê một đội ngũ nào nữa.
Điều này thật ra không hoàn toàn sai, nhưng nó chỉ có thể áp dụng lên những startup non trẻ với budget hạn chế và chỉ cần xây dựng minimum viable product (MVP). Đối với trường hợp đó, một full stack developer là một lựa chọn cực kì tuyệt vời. Nhưng một khi sản phẩm phát triển và trở nên phức tạp, bạn sẽ cần sự hỗ trợ từ một đội các developer có khả năng chuyên môn hoá cao ở các thành phần khác nhau.
Nói một cách công bằng, việc có một người có hiểu biết một cách tổng hợp các thành phần, để kết nối chúng lại với nhau, sau đó làm việc với từng chuyên gia ở mỗi phần để có thể đưa ra sản phẩm hoàn hảo là việc vô cùng quan trọng. Và đó là nơi mà vai trò của full stack developer được thể hiện rõ ràng nhất.

Kỹ năng của một full stack developer

Mỗi developer đều có kỹ năng tốt trọng một hoặc hai lĩnh vực, sau đó kiến thức của họ được làm rộng ra để hiểu được những mảng khác nhau trong quá trình phát triển phần mềm. Và sự hiểu biết rộng này làm cho vai trò của full stack developer trở nên quan trọng trong team.

Giải quyết khó khăn trong việc giao tiếp

Phần lớn các dự án thất bại bởi vì sự yếu kém trong giao tiếp, mặc dù vẫn có nhiều vấn đề khác như trễ hẹn, đội chi phí, hay sản phẩm có chất lượng không tốt.
Thông thường, sự giao tiếp yếu kém là nguyên nhân của rất nhiều sự hiểu nhầm giữa các team khác nhau. Giả sử như, back-end developer muốn xây dựng một framework lý tưởng với cơ sở dữ liệu, nhưng việc này vô tình lại tạo ra những điều khó khăn cho front-end developer làm phần giao diện tốt.
Những vấn đề này phát sinh khi các chuyên gia ở mỗi thành phần không hiểu được những thành phần còn lại cần gì để cùng thành công.

Trở thành key player trong team

Một full stack developer có thể là một key player trong team. Họ hiểu toàn bộ các quy trình trong hệ thống cũng như hiểu về business và người dùng mà sản phẩm hướng tới. Họ có thể trở thành những team member tuyệt vời như tôi đã từng nói.
Như một điều tất yếu, full stack developer làm việc tốt hơn trong team bởi vì họ biết những công cụ nào các team member khác đang làm việc, và họ cần gì để hoàn thành. Khả năng này cho phép họ thích nghi tốt với những team sử dụng agile trong quy trình phát triển.
Một lợi ích khác của việc có full stack developer trong team đó là họ dễ dàng phù hợp với những vị trí về quản lý dự án. Họ có kiến thức về nhiều thành phần, vì thế họ dễ dàng đảm bảo các thành phần đều phát triển ở mức hợp lý và hoạt động tốt trong bối cảnh tổng thể của dự án.

Tóm lại

Vậy, đối với nhà tuyển dụng, bạn có nên thuê một full stack developer? Nếu bạn là một startup trẻ, và cần xây dựng MVP, hoặc một dự án lớn cần sự gắn kết và có một kênh giao tiếp giữa các team về code base của họ thì câu trả lời chắc chắn là có.
Còn đối với developer, có nên trở thành một full stack developer? Thì câu trả lời của mình là tuỳ thuộc vào đam mê hay mục tiêu mà bạn theo đuổi. Câu trả lời sẽ là ở bạn, hoặc nếu bạn còn phân vân, mình thấy ITViec có một vài bài chia sẻ rất

Developer Survey Results 2017

Tại sao nên học những ngôn ngữ lập trình này vào năm 2017?

Sau khi tham khảo từ các cuộc khảo sát từ StackOverFlow, kể cả lập trình viên trong nước thì với bản thân mình nhận thấy trong năm 2017, những ngôn ngữ lập trình đáng quan tâm và nên học bao gồm:
1. JavaScript
2. SQL
3. Swift, Java or Kotlin
4. Golang
5. PHP
Tại sao mình lại chọn những ngôn ngữ này và khuyên các bạn nên quan tâm đến nó?
Trước khi đọc bài viết này, mình có dẫn chứng những thông số từ cuộc khảo sát StackOverFlow vừa rồi vào năm 2016, bạn có thể tham khảo tại đây: Thống kê ngành lập trình năm 2016

1. JavaScript

Tại sao chọn JavaScript?

Không có gì phải bàn cãi về vị thế độc tôn của JavaScript ở thời điểm hiện tại, kể cả trong một vài năm tới. Đây là ngôn ngữ được sử dụng nhiều nhất trong thế giới lập trình, kể cả một lập trình viên BackEnd cũng sử dụng ngôn ngữ này nhiều hơn các ngôn ngữ khác. Vào tháng 6 năm 2015, JavaScript đã chiếm ngôi của Java trở thành tag phổ biến nhất thế giới. Theo một cuộc khảo sát trên StackOverFlow, tổ hợp công nghệ kép thường được sử dụng nhiều nhất là JavaScript và SQL. Trong đó, tổ hợp 3 công nghệ thường thấy nhất là JavaScript, SQL, PHP. JavaScript nổi tiếng đến mức lọt vào tất cả tổ hợp 3-tech được Back-End Developer sử dụng.

JavaScript được sử dụng ở đâu?

  • Thiết kế trang web
  • Có thể sử dụng để xây dựng toàn bộ một trang web nếu sử dụng với NodeJS và MongoDB (database)
  • Phát triển ứng dụng web
  • Phát triển ứng dụng điện thoại Hybrib cho các lập trình viên Web
  • Phát triển game 3D (Unity3D sử dụng JavaScript)
  • Lập trình web phía client
Nói tóm lại những gì liên quan đến website nói chung và front end nói riêng đều sử dụng JavaScript.

Sử dụng IDE nào để code JavaScript?

Nói IDE nghe nó lớn lao quá, bạn chỉ cần một Text Editor là có lập trình được với JavaScript.
AtomSublime Text là 2 text editor mình khuyên các bạn sử dụng.
  • Atom được phát triển bởi GitHub, một trong những trang web sử dụng JavaScript nhiều nhất. (Trả lời cho bạn nào hỏi GitHub là gì luôn: GitHub là một dịch vụ cung cấp kho lưu trữ mã nguồn Git dựa trên nền web cho các dự án phát triển phần mềm. GitHub cung cấp cả phiên bản trả tiền lẫn miễn phí cho các tài khoản.)
  • Sublime Text là một code editor mạnh mẽ và được đông đảo các web developer, coder, programmer sử dụng và yêu thích. Cung cấp một hiệu suất làm việc với các tính năng rất tuyệt vời.
Mình thì chủ yếu xài Atom vì nó tích hợp Git và GitHub.

2. SQL

Tại sao chọn SQL?

Với một lập trình viên thì việc nắm vững ngôn ngữ SQL là một trong những kỹ năng quan trọng mà bạn phải trang bị được. SQL được thiết kế để quản lý dữ liệu trong một hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS). Tất cả các DBMS mà bạn đang sử dụng như MySQL, Oracle, SQL Server, PostgreSQL, DB2, MongoDB, Sybase, SQLite… Nói một cách đơn giản rằng SQL dùng để quản lý dữ liệu của bạn. Nó được dùng trong tất cả các ứng dụng cần lưu trữ và xử lý dữ liệu của người dùng.
Hãy nghĩ rằng khi bạn tạo ra một trang web cho phép người dùng đăng ký tài khoản thì bạn sử dụng cái gì để quản lý các tài khoản của người dùng, lúc này SQL sẽ giúp bạn điều đó. SQL ra đời vào những năm 70 và tồn tại tới thời điểm hiện tại, là một trong những ngôn ngữ xử lý dữ liệu phổ biến nhất trên thế giới nên việc soán ngôi SQL bởi một ngôn ngữ khác là điều không dễ gì xảy ra. Vì vậy nắm vững về SQL là một điểm cộng trong mắt người tuyển dụng.
Cũng như JavaScript, SQL dường như có mặt trong toàn bộ bảng xếp hạng về 2-tech và 3-tech trong khảo sát StackOverFlow trong năm 2016 gồm JavaScript & SQL và JavaScript, PHP, và SQL. Xếp thứ 2 (sau JavaScript) về những công nghệ được sử dụng nhiều nhất trong năm 2016.
Với thành tích như vậy, liệu SQL có xứng đáng nằm ở vị trí thứ 2 trong danh sách mình để cử không?

SQL được dùng ở đâu?

Ở đâu có dữ liệu, ở đó có SQL…

Dùng phần mềm nào để thiết kế database?

Cái này hoàn toàn tùy thuộc vào mức độ database của dự án mà bạn đang triển khai, ở đây mình sẽ chia ra 3 loại:
  1. Nhỏ: Microsoft Access, SQLite…
  2. Vừa: MySQL, SQL Server Management Studio…phù hợp với các trường đại học.
  3. Lớn: Oracle, DB2 (IBM)…phù hợp với doanh nghiệp lớn như FPT.
Theo mình thì nên xài SQL Server Management Studio vì nó tương thích hầu hết với các IDE.

3. Swift, Java or Kotlin

3.1. Swift 

Tại sao chọn Swift?

Chỉ mới được Apple cho ra mắt vào năm 2014 và Open Source một năm sau đó, nhưng đến nay ai cũng có thể nhìn nhận được Swift là tương lai của Apple và cả thế giới. Không những là một ngôn ngữ lập trình mạnh mẽ được kế thừa từ 2 người đàn anh là C và Objective-C mà còn rất dễ học, không gây khó khăn cho người mới bắt đầu học lập trình. Nói về hiệu năng và sức mạnh của Swift, mình đã có một bài viết riêng cho nó. Bạn có thể tham khảo tại đây: Tại sao nên học lập trình Swift?
Với những thành công của ngôn ngữ lập trình này, thì không có gì là quá ngạc nhiên khi 2 năm liên tiếp từ khi ra mắt là 2015 và 2016, Swift luôn nằm trong top 3 ngôn ngữ được yêu thích nhất. Vào tháng 12/2015, Swift đã cướp thị phần của người đàn anh là Objective-C để vượt qua ngôn ngữ này trên bảng xếp hạng vote của các ngôn ngữ lập trình. Nói về độ tăng trưởng của Swift, số liệu từ tháng 1/2015 cho đến 1/2016 cho thấy ngôn ngữ này tăng đến 74,6% (chỉ xếp sau Spark và React).

Swift được dùng ở đâu?

Hiện nay, ngoài việc lập trình ứng dụng trên MacOS, iOS, WatchOS, tvOS cho các thiết bị của Apple thì Swift đang có một hướng đi khá thú vị cho Swift là lập trình server, đây đang là một chủ đề khá thú vị cho các lập trình viên BackEnd hoặc những bạn phát triển ứng dụng trên nền tảng Swift mà muốn học thêm BackEnd. Với sức mạnh của mã nguồn mở, bạn chỉ cần chọn một framework ưng ý và triển khai. Mình sẽ có một số bài viết về chủ đề BackEnd với ngôn ngữ Swift.

Sử dụng IDE nào để code Swift?

Điều kiện tiên quyết nếu bạn muốn lập trình Swift thì máy tính của bạn phải có hệ điều hành MacOS (hoặc có thể mua Macbook hoặc iMac).
IDE hiện tại hỗ trợ cho lập trình Swift trên nền tảng MacOS là Xcode. Bạn có thể download nó trên AppStore được tích hợp sẵn trong máy hoặc tải về từ trang chủ Apple (phiên bản mới nhất hiện tại là 8.2.1).

3.2. Java 

Tại sao chọn Java?

Do Google chọn Java để lập trình nền tảng Android nên chúng ta phải chọn Java (haha). Java không có gì quá xa lạ với chúng ta vì JavaScript và Java luôn chia sẻ nhau ở hai vị trí quán quân và á quân trong bảng xếp hạng các ngôn ngữ lập trình phổ biến trong nhiều năm qua, nhưng JavaScript có phần nhỉnh hơn so với ngôn ngữ đến từ Oracle.
Java là một ngôn ngữ lập trình hướng đối tượng do Oracle phát triển với phương châm “Write one, run anywhere” nên cũng khá dễ hiểu tại sao Java lại trở thành xu thế trong giới cộng đồng lập trình. Những lý do khiến cho Java không bao giờ hết hot có thể kể đến như:
  • Java là một ngôn ngữ lập trình hướng đối tượng
  • Số lượng API Function rất phong phú
  • Thư viện mã nguồn mở
  • Java miễn phí
  • Javadocs hỗ trợ tối đa cho lập trình viên
  • Java là nền tảng độc lập
  • Java có mặt ở khắp mọi nơi
Hiện nay, Android chiếm hơn 75% về thị phần hệ điều hành Smartphone thì chắc hẳn lập trình Android nói riêng và Java nói chung là một con mồi béo bở đối với các lập trình viên chúng ta.
Có lẽ để nói về Java thì có quá nhiều thứ để nói về ngôn ngữ này, nó thật sự rất tuyệt vời.

Java được dùng ở đâu?

Java được sử dụng rất nhiều trong thế giới thực của chúng ta như:
  • Các ứng dụng chạy hệ điều hành Android
  • Ứng dụng trong những dịch vụ tài chính lớn và rất lớn
  • Xây dựng trang web và các trang thương mai điện tử
  • Xây dựng các công cụ lập trình như NetBean, Eclipse cũng như các ứng dụng desktop
  • Trading Application: phần mềm giao diện người dùng cho phép kết nối tới ngân hàng
  • Lập trình nhúng: các thiết bị bạn đang sử dụng hàng ngày như máy giặt, điều hòa hay tủ lạnh…đều sử dụng Java để lập trình phần cứng
  • Công nghệ BigData
  • Java là lựa chọn số một để lập trình hệ thống yêu cầu bảo mật cao
Với từng đó, mình cảm thấy Java hết sức mạnh mẽ và to lớn, bạn có thể học Java và chuyển sang Android hoặc có thể đi theo nhiều hướng mà bạn thích.

Sử dụng IDE nào để code Java và Android?

Để lập trình Java thì các bạn có thể sử dụng NetBean và Eclipse để thực hiện điều đó.
Còn để lập trình Android, chúng ta đã không còn sử dụng Eclipse để lập trình mà thay vào đó là IDE Android Studio do Google phát triển riêng để lập trình Android.
Những IDE này hoàn toàn miễn phí trên trang chủ chính thức.

3.3. Kotlin

Tại sao chọn Kotlin?

Nếu bạn có tìm hiểu thông tin công nghệ và lập trình thì chắc hẳn bạn sẽ biết được vụ kiện tụng giữa Oracle và Google khi Oracle cho rằng Google đã sao chép 11.500 dòng code để đem lên hệ điều hành Android và yêu cầu Google bồi thường 9 tỷ USD. Nhưng hồi tháng 4 năm 2016, Google đã thắng kiện khi luật sư cho rằng Google đã không vi phạm bản quyền và sử dụng hợp lý. Nhưng Oracle họ vẫn kiên quyết giữ quan điểm của mình và sẽ kháng án trên Tòa Án Liên Bang.
Với vụ việc trên, ban lãnh đạo Google họ luôn phải có kế hoạch B để chẳng may nếu thua kiện thì có thể Android sẽ thay đổi hoàn toàn mã nguồn, họ đã từng dự định sử dụng ngôn ngữ Swift của Apple để làm mới Android nhưng trong thời gian đó, chính xác vào ngày 15/2/2016, phiên bản 1.0 của Kotlin được released và nổi lên, giới lập trình viên bắt đầu chú ý về anh chàng lính mới này. (mặc dù JetBrains – công ty phần mềm tạo ra ngôn ngữ lập trình Kotlin đã giới thiệu Kotlin vào năm 2011, nhưng đến 5 năm sau mới released phiên bản đầu tiên).
Kotlin cũng giống như nhiều ngôn ngữ lập trình không phải Java khác, cũng sẽ chạy trên JVM và sử dụng thư viện hiện có của Java. Điều mà Kotlin muốn hướng tới là nó tương thích với Java 100% và lập trình Android là một trong những lĩnh vực quan trọng mà JetBrains muốn hướng tới. Đây là một tin khá vui cho các dev Android. Bạn có thể tham khảo bài viết về ngôn ngữ lập trình Kotlin tại đây: Tìm hiểu về ngôn ngữ lập trình Kotlin
Các tiêu chí của Kotlin là:
  • Concise (ngắn gọn)
  • Safe (an toàn)
  • Versatile (đa nền tảng)
  • Interoperable (tính tương thích cao)

Kotlin được sử dụng ở đâu?

Nếu bạn đang tìm kiếm một ngôn ngữ cho việc phát triển Android, thì bạn nên thử qua Kotlin. Nó có thể thay thế hoàn toàn hoặc kết hợp cùng với Java trong dự án Android của bạn.
Hiện nay, Kotlin là một thành viên vừa mới gia nhập gia đình ngôn ngữ lập trình nên hiện tại JetBrain chỉ chú trọng vào việc lập trình Android. Nhưng theo tài liệu giới thiệu về Kotlin, ngôn ngữ này còn có thể đảm nhận được các lĩnh vực sau:
  • Lập trình Android
  • Lập trình Web Front End (ví dụ: Industrial Geodetic Systems)
  • Kotlin còn có thể lập trình BackEnd, xử lý dữ liệu và phát triển hệ thống (ví dụ: Prezi.com)

Sử dụng IDE nào để code Kotlin?

Chúng ta có 2 cách để lập trình Kotlin:
  • Cách 1: Sử dụng IDE trực tiếp của JetBrain với tên gọi IntelliJ IDEA. Bạn có thể download bản Community Edition trực tiếp trên trang chủ Kotlin (hỗ trợ Java, Groovy, Scala và Android Development). Còn bản Ultimate bạn phải trả phí (được hỗ trợ thêm Web, Mobile và Enterprise Development). IntelliJ IDEA hỗ trợ cả 3 hệ điều hành là MacOS, Window và Linux.
  •  Cách 2: Bạn có thể cài đặt plugin Kotlin trên IDE Android Studio lập trình Kotlin. Phần hướng dẫn có trong đường dẫn bên trên.

4. Golang

Tại sao chọn Golang?

Golang (còn được gọi là Go) là ngôn ngữ lập trình mới được Google thiết kế và phát triển vào năm 2009, nếu so về tuổi đời của các ngôn ngữ lập trình thì Golang còn khá mới. Go ra đời mang theo nhiều kỳ vọng của Google giúp ngành công nghiệp phần mềm khai thác nền tảng đa lõi của bộ vi xử lý và hoạt động đa nhiệm tốt hơn.
Với các ngôn ngữ lập trình hướng đối tượng hiện nay như Java, C++ thì khả năng khai thác nền tảng đa lõi của bộ vi xử lý mới là bất khả thi. Chính vì vậy, Google đã đặt nặng vấn đề này và thực hiện hóa thông qua dự án Golang. Không chỉ khai thác nền tảng đa lõi, Go còn được trang bị thêm tính năng “quản lý bộ nhớ trong quá trình hoạt động của phần mềm” giúp các lập trình viên xử lý dễ dàng hơn. Thêm vào đó, tốc độ của Go phải vượt trội và sánh ngang với C và C++.
Dường như không chỉ có mình tôi nhìn thấy được điều này: Chúng ta thấy được tốc độ phát triển phần cứng nhanh đến mức chóng mặt khiến tốc độ phát triển phần mềm không thể nào bắt kịp chúng, dẫn tới tốc độ xử lý thông tin ngày một chậm dần đi. Những ngôn ngữ lâu đời như C, C++, Java vẫn là một nền tảng vững chắc cho các lập trình viên, nhưng với tuổi đời hơn 40 năm, liệu chúng có thể đứng vững trong cuộc đua này. Vì thế, chúng ta rất cần những ngôn ngữ như Golang để thay đổi cuộc chơi này.
Tham vọng của Google không chỉ dừng lại ở đó, họ còn muốn đưa Go xây dựng các phần mềm máy chủ và cải tiến tốc độ các dịch vụ của Google như Youtube, công cụ tìm kiếm Google hay Gmail thông qua Golang, tiến tới thay thế hoàn toàn JavaScript. Nhưng đối với mình thì điều này khá khó, vì JavaScript là chàng hiệp sĩ toàn năng, trong mọi cuộc chơi khó có thể thay thế một chiến binh thực thụ như thế và một số dịch vụ, sản phẩm của Google vẫn phải nhờ tới anh chàng này. Chính bản thân Rob Pike – một trong những kỹ sư phần mềm đứng đầu của Google trong dự án còn phải thừa nhận rằng: “Ít nhất thì Go cũng phải tốt hơn JavaScript”.
Từ lúc ra mắt đến này, Golang luôn nằm trong top những ngôn ngữ lập trình được yêu thích nhất và lập trình viên muốn tiếp tục làm việc với ngôn ngữ này cùng với 2 ngôn ngữ Rust và Swift. Nói về ưu điểm của ngôn ngữ này, mình sẽ tổng kết các tính năng vượt trội của Go như:
  • Dễ học: đây cũng là lý do tại sao Golang luôn nằm trong top những ngôn ngữ lập trình được yêu thích nhất
  • Biên dịch ra nhiều nền tảng: Go cũng biên dịch như Java nhưng không như Java phải cần JVM để biên dịch thành, Go biên dịch thành mã máy (Machine code) nên tốc độ rất nhanh và có thể gần đạt tới ngưỡng như C (ngôn ngữ C cũng biên dịch thành mã máy). Chính vì thế, bạn có thể biên dịch trên các hệ điều hành như Mac, Linux, hay Window, sau đó lấy file biên dịch copy lên các hệ điều hành để chạy, giúp quá trình làm việc trở nên nhanh hơn.
  • Concurrency: đây là tính năng được đánh giá là nổi bật nhất trong ngôn ngữ Go. Những ngôn ngữ lập trình khác đều phải phụ thuộc vào khả năng cấp phát tài nguyên của hệ điều hành để có thể chạy Concurrency, nhưng đối với Go thì không. Concurrency trong Go gần giống như Thread, bạn có thể tìm hiểu kỹ hơn tính năng này tại đây: https://www.golang-book.com/books/intro/10.
Nếu bạn là người có khả năng tiếp thu nhanh và muốn tiếp cận các công nghệ mới, thì Golang là điểm đến tiếp theo cho bạn. Đừng mãi quanh quẩn trong vòng an toàn của JavaScript hay Ruby mà kìm hãm sự phát triển của bạn.

Golang được dùng ở đâu?

Golang là một ngôn ngữ lập trình đa mục đích được sử dụng ở rất nhiều mảng khác nhau, có thể kể đến:
  • Xây dựng hệ thống BackEnd
  • Xây dựng các phần mềm máy chủ
  • Xây dựng các công cụ hệ thống
  • Có thể ứng dụng trong lĩnh vực đồ họa, ứng dụng di động…
Golang được mệnh danh là ngôn ngữ C của thế kỷ 21 với ưu điểm xử lý đồng thời.

Sử dụng IDE nào để code Golang?

  • SDK (Software Development Kit)
Để làm việc được với Golang bạn cần có bộ công cụ phát triển phần mềm (hay được gọi là SDK), Go cung cấp các gói SDK tại https://golang.org/dl/, hiện tại Go hỗ trợ các hệ điều hành chính như MacOS, Window, Linux. Nếu bạn không sử dụng 1 trong 3 hệ điều hành này thì bạn cần biên dịch từ bộ mã nguồn. Bạn có thể tham khảo video dưới đây để cài đặt SDK bằng Terminal (Mac).
  • Môi trường phát triển (IDE)
Sau khi cài đặt SDK, bạn có thể download cái công cụ phát triển sau đây để lập trình Golang. Có rất nhiều IDE hoặc Text Editor hỗ trợ ngôn ngữ lập trình này, có thể kể tới:
  1. Atom: được phát triển bởi GitHub, hỗ trợ trên mọi hệ điều hành. Atom hỗ trợ Go với package go-plus.
  2. IntelliJ IDEA: là IDE đa nền tảng thương mại hóa, phiên bản miễn phí có sẵn. Plugin mã nguồn mở Go hỗ trợ sẵn. (mình đã nói tới IDE này ở phần Kotlin).
  3. Sublime Text: trình soạn thảo này đã quá quen thuộc với các lập trình viên chúng ta, hỗ trợ các plugin và tính năng giống IDE.
  4. Visual Studio: công cụ phát triển phần mềm của Microsoft hỗ trợ cho Window và MacOS. Các plugin hỗ trợ Go được tích hợp sẵn trên IDE này.
Riêng bản thân mình thì ngôn ngữ nào mà Atom và Sublime hỗ trợ thì cứ xài 2 đứa nó, vừa nhẹ, hỗ trợ nhiều package và plugin, cộng thêm màu đẹp cuốn hút các lập trình viên.

5. PHP

Tại sao nên chọn PHP?

Ở vị trí thứ 5 trong những ngôn ngữ lập trình mà mình chọn, thật khó để chọn ra cái tên xứng đáng nhất giữa 2 công nghệ web PHP và NodeJS, chắc hẳn sẽ có nhiều bạn thắc mắc về vấn đề này. Nhưng ở đây mình khó có thể so sánh được trong khi PHP là một ngôn ngữ lập trình còn NodeJS là một platform với sự hỗ trợ của JavaScript, mà ở bài viết này mình đề cập tới ngôn ngữ lập trình. Còn để học được NodeJS thì bạn cần phải biết trước về JavaScript.
Quay lại với câu hỏi trên là tại sao chọn PHP?
PHP là một ngôn ngữ lập trình kịch bản được ra đời vào năm 1995 và đến nay vẫn là một thế lực trong công nghệ Web. Có thể bạn chưa biết những trang web nổi tiếng như Facebook, Wikipedia, Digg, Myspace, WordPress… và hơn 60% các website đều được phát triển dựa trên ngôn ngữ này. Trong các bảng xếp hạng về công nghệ lập trình qua khảo sát của StackOverFlow thì PHP vẫn là một thế lực khi ngôn ngữ này luôn đứng trong top 5 những ngôn ngữ lập trình được sử dụng nhiều nhất trong năm qua. Và các lập trình viên FullStack sử dụng PHP nhiều hơn bất kỳ ngôn ngữ nào.
Sự linh hoạt, tính tiện ích và khả năng mở rộng của PHP đã giúp ngôn ngữ này được nhiều lập trình viên và webmaster đặt niềm tin.
  1. Open Source: với opensource thì chắc chắn tất cả đều miễn phí, có rất nhiều cms được xây dựng bằng PHP mà có thể bạn đã từng nghe tới như WordPress, Joomla, Drupal…
  2. Object Oriented Programing (OOP): PHP là một ngôn ngữ lập trình hướng đối tượng được giới thiệu trong phiên bản PHP5 (hiện tại là PHP7). Với hướng đối tượng, bạn rút ngắn thời gian hoàn thành dự án và trau chuốt cho website mình tốt hơn bằng việc khai thác toàn bộ sức mạnh của OOP. Một trong những thành công có thể kể đến Magento – một nền tảng quản lý nội dung trang thương mại điện tử nổi tiếng nhất được sử dụng bởi các tập đoàn hàng đầu thế giới như: Samsung, Nike, Olympus, Nesle, Lenovo,…
  3. Dễ học: Cấu trúc và câu lệnh của PHP khá giống với Java và C nên các bạn có thể nắm vững PHP trong một thời gian ngắn nếu thực hành nhiều bài tập và dự án nhỏ.
  4. Hỗ trợ tối đa Database: PHP hỗ trợ rất nhiều database có thể kể đến như PostgreSQL, DB2 (IBM), Sybase, MySQL, Oracle…Ngoài ra, PHP còn hỗ trợ chuẩn ODBC – chuẩn kết nối cơ sở dữ liệu mở.
  5. Hỗ trợ nhiều Framework: Laravel, Yii, Phalcon, CakePHP, Zend,…
  6. Cộng đồng PHP rất lớn

PHP được dùng ở đâu?

  • PHP hiện đang được sử dụng ở hơn 80% máy chủ web trên toàn thế giới
  • Tất cả những gì liên quan tới website

Dùng IDE nào để code PHP? 

Chúng ta có thể sử dụng NetBean hoặc PHPStorm để đẩy nhanh quá trình làm việc và hạn chế lỗi xảy ra.

Thắc mắc: Có lẽ đọc tới đây, nhiều bạn sẽ khó lòng chấp nhận rằng PHP có mặt trong danh sách này, dạo gần đây, PHP luôn được nhận được nhiều sự phẩn hồi tiêu cực từ phía những lập trình viên trên StackOver hay Quora. Nhưng họ chỉ nhìn ra những điểm yếu của PHP mà không quan tâm nó đã làm được những gì cho chúng ta. Bạn có bỏ Facebook khi biết anh Mark dùng PHP để code Facebook không? Hay các webmaster không xài nền tảng WordPress nữa khi nó được sử dụng cái ngôn ngữ được xem là “dở hơi” này. Tất cả tùy thuộc vào bạn. 
Ngoài 5 ngôn ngữ lập trình trên, bạn có thể tham khảo những công nghệ rất được ưa chuộng hiện nay như: NodeJS, ReactJS, AngularJS, MongoDB, Machine Learning, Rust (ngôn ngữ được yêu thích nhất năm 2016), Spark và Scala (2 công nghệ có mức lương cao nhất với $125,000).
Lời kết: Hy vọng bài viết này sẽ giúp các bạn định hướng về ngành lập trình cũng như có thể đặt mục tiêu dài hạn cho những ngôn ngữ lập trình mà bạn chọn.
Nguyễn Xuân An – Sài Gòn 1/1/2017