Thứ Tư, 28 tháng 3, 2018

Những câu nói của Tester làm đau lòng Developer...

Chẳng ai muốn làm việc chung với những người thiếu tinh thần và thiếu chuyên nghiệp, sống và "chiến đấu" trên cùng 1 chiến tuyến, Developer và Tester chắc chắn sẽ gặp không ít rắc rối với nhau. Và đây là những câu nói từ Tester, khiến cho Developer đau lòng nhất...

1- Có bug! Có bug!

"Nhanh chóng report ngay khi tìm thấy một bug bất kì" - Okay, report thì dễ, nhưng để xử lý lỗi tận gốc thì nên chăng, bạn nghiên cứu thêm một chút, tìm hiểu qua một vài trường hợp khác, và thử nghiệm trên nhiều môi trường, sẽ vô cùng hữu ích để team development có thể khắc phục trong thời gian ngắn nhất, hiệu quả hơn cho đôi bên. Bạn cũng đâu muốn phải test lại nhiều lần trên cùng một bug? Đây cũng là một điểm mấu chốt để đánh giá độ senior trong kinh nghiệm của Tester.

2- Tôi có phải developer đâu?

Tôi không biết code như thế nào, và cũng không muốn biết, đó là việc của developer. Nói như vậy nghĩa là bạn không hiểu những kiến thức lập trình phần mềm, và cũng không biết các nguyên nhân kỹ thuật gây ra bug. Tức là bạn bắt bug như một user thông thường, và đôi khi, chỉ vô tình bắt được bug lấy hên?

3- Tôi cần mọi loại tài liệu liên quan, nếu không tôi không test được!

Tài liệu không phải lúc nào cũng luôn có sẵn, và đầy đủ như mong đợi. Dự án sẽ ra sao nếu tester không chịu bắt đầu nếu mọi tài liệu chưa sẵn sàng đâu vào đấy? Đôi khi, tester nói vậy tức là họ đang biện minh cho việc thiếu khả năng tưởng tượng và hình dung của mình! Bạn có thể test chỉ dựa trên cái bạn đang thấy, review code và thông tin do developer cung cấp?

4- Code quá kinh khủng, không thể test được!

Tôi không thể làm được, hãy để dành cho một ai đó, có nhiều kiến thức kỹ thuật hơn, tôi bó tay! (điệp khúc này lặp đi lặp lại vài lần trong cả ngày làm việc...)

 Học lập trình asp net để trở thành dev chuyên nghiệp

5- Tôi test hay anh test?

Bây giờ theo cách của tôi hay cách của bạn? Người Tester này sẽ quan tâm về quan điểm cái tôi cá nhân hơn là lợi ích chung của dự án. Họ sẽ xem cuộc đối đầu giữa giải pháp của họ và người khác quan trọng hơn mọi thứ, và họ chắc chắn sẽ gây ra nhiều cuộc tranh cãi vì điều đó. Người này là một nút thắt cổ chai cho sự hiệu quả của nhóm, họ cần phải được loại bỏ ra khỏi nhóm trước khi bị quá tải bởi áp lực và chỉ biết đẩy trách nhiệm sang người khác?

6- Chưa release được đâu, có thể minor bugs còn đầy ra đấy!

Kiểu Tester cầu toàn - và làm khổ team vì tính cầu toàn đó. Người này sẽ thường có cảm giác như chết cứng nếu không được cung cấp đầy đủ thông tin trong bản đặc tả yêu cầu, hoặc bồn chồn lo lắng vì mình chưa test hết tất cả các trường hợp có thể xảy ra. Họ cần mọi thứ nằm trong vùng an toàn của họ, và đòi hỏi người khác cũng làm được điều đó. Bao giờ thì release được? Một người tester dày dạn kinh nghiệm phải biết cách linh động khái niệm an toàn trong từng tình huống. Thực tế, sự bồn chồn lo lắng kể trên thường chỉ xảy đến với những người mới vào nghề, và sẽ được cải thiện dần khi họ có nhiều kinh nghiệm hơn.

Lập trình app sử dụng React Native, so với Android/ iOS

Cách đây 2 năm, tôi chỉ tập trung vào lập trình Android native. Nhưng đến năm ngoái, khi công ty yêu cầu tôi học lập trình iOS, tôi đã khá phấn khích lúc đầu, nhưng sư phấn kích đó nhanh chóng phai nhạt dần, năng suất làm việc của tôi cũng suy giảm đi. Tôi nhận ra, mình phải học lại từ đầu tất cả mọi thứ như framework, các công cụ, IDE… Và vì tôi rất thích đến các buổi meetup nên tôi cũng bắt đầu tham dự các buổi meetups của cả Android và iOS. Tôi cần phải cập nhật với những tính năng mới nhất trên cả 2 platforms, nên rất tốn thời gian và khó chịu khi khả năng học của tôi không nhanh. Vì vậy, tôi đã rất hứng thú khi React Native dành cho iOS ra đời.
React Native là gì?
React Native là công nghệ được tạo bởi Facebook, cho phép các dev sử dụng JavaScript để làm mobile apps trên cả Android và iOS với cảm nhận và giao diện native. Một ví dụ để làm rõ cách vận hành của React Native là wrapper của code native. Có rất nhiều thành tố được tạo nên khi đang wrapping – “bọc” chức năng native của iOS hoặc Android. React Native đã đạt được rất nhiều traction kể từ ngày ra mắt vì nó đã thay đổi game về mặt cơ bản theo nhiều cách.
Một lý do lập trình mobile app rất khó và tốn thời gian là vì thực tế bạn cần tìm hiểu 2 hệ sinh thái hoàn toàn khác biệt. Nếu bạn muốn lập trình app iOS, bạn phải học Swift hoặc Objective-C và Cocoa Pods. Nếu muốn lập trình app Android, bạn cần học Java và Android SDK. Tôi từng viết code với 3 ngôn ngữ là Swift, Objective C, Java và không thực sự hứng thú với việc tranh luận ngôn ngữ nào tốt hơn. Tuy nhiên, điều tôi có thể nói là chúng khác nhau và việc học từng ngôn ngữ đó sẽ tốn khá nhiều thời gian. Điều tương tự cũng xảy ra với các frameworks: Cocoa Touch và Android SDK. Tất nhiên, mỗi frameworks luôn có 1 gói các công cụ như công cụ testing, các libs, packages… và việc các dev phải cập nhật các tính năng mới nhất của mỗi hệ sinh thái là điều không thể bàn cãi.
Mặc khác, nếu bạn chọn lập trình trên React Native, phần lớn thời gian bạn sẽ chỉ cần học 1 bộ công cụ. Có rất nhiều thứ để bạn làm quen như: JavaScript, Node, React Native… nhưng chỉ có 1 công cụ duy nhất để học.
Khả năng sử dụng lại
Khả năng sử dụng lại đóng vai trò quan trọng trong lập trình phần mềm, nên mỗi khi bạn có thể sử dụng lại code thì React Native là công cụ tốt.
React Native không phải chỉ viết 1 lần mà nó chạy platform ở mọi nơi. Bất cứ khi nào bạn lập trình 1 app, bạn cần phải xây dựng UI trông native. Vì lý do này, 1 số UI code cần được viết theo đúng các chỉ dẫn và chuẩn mực tốt nhất của platform đó. Tuy nhiên, sẽ luôn có vài UI code thông dụng có thể được chia sẻ chung với nhau cùng tất cả logic. Tính năng “có thể chia sẻ code” có rất nhiều lợi điểm như: tận dụng nguồn nhân lực tốt hơn, duy trì ít code hơn, ít bugs hơn, các tính năng trong cả 2 platforms cũng tương tự nhau…
Học 1 lần, viết ở mọi nơi
Khi team của Facebook tạo React Native, mục tiêu của họ là giúp các dev học 1 lần nhưng sử dụng được mọi platform. Bởi vì tất cả code của Android và iOS sử dụng cùng bộ công cụ, nên ý tưởng có 1 team dev làm app cho cả 2 platform là thực hiện được – 1 điều ít khi xảy ra khi có rất ít dev lập trình cả 2 platform iOS và Android. Thậm chí, tôi còn cho rằng team đang lập trình web app sử dụng React.js sẽ không phải cực khổ nữa khi học lập trình React Native và bắt đầu làm mobile app.
Declarative API
Khi bạn tạo ứng dụng sử dụng React Native, việc dự đoán và hiểu UI của bạn cũng dễ dàng hơn vì nó có 1 declarative API, tương phản với imperative API. Sự khác biệt giữa các cách tiếp cận này là khi bạn có 1 app với nhiều trạng thái khác nhau, bạn cần phải theo dõi các thay đổi trong UI và chỉnh sửa chúng. Điều này có thể là 1 nhiệm vụ phức tạp và không thể dự đoán được khi app của bạn phát triển. Đây được gọi là Imperative Programming. Nếu bạn dùng React Native vốn đã có declarative APIs, bạn chỉ cần quan tâm đến tình trạng UI hiện tại trông như thế này, mà không cần theo dõi những UI cũ.
Hot Reloading
Thói quen thông thường của dev khi code là test các thay đổi mỗi lần code được viết. Để thực hiện được, app cần phải được tổng hợp lại và và cài đặt hoặc trong 1 simulator hoặc 1 thiết bị thật sự. Với React Native, phần lớn thời gian, bạn không cần phải tổng hợp lại app mỗi lần có thay đổi. Bạn chỉ cần làm mới app trong simulator, emulator hoặc thiết bi. Thậm chí còn có 1 tính năng là Live Reload để tự động refresh app mỗi lần phát hiện 1 thay đổi trong code.
Nguồn mở
React Native vẫn còn là 1 công nghệ rất mới, mới chỉ trở thành nguồn mở chưa tới 1 năm về trước. Tuy vẫn còn vài bugs, nhưng nhìn chung, các dev có thể sử dụng React Native vào giai đoạn sản xuất ở hầu hết các mobile app. Ngoài ra vẫn còn vài tính năng có sẵn trong các frameworks native, chưa sử dụng được với React Native nhưng đây không phải là vấn đề lớn. Từ kinh nghiệm của bản thân, đây chỉ là chuyện đơn giản khi bạn đã quen thuộc với lập trình native. Thêm nữa, từ khi React Native đã là nguồn mở, 1 cộng đồng lớn các dev đã hỗ trợ thực hiện nhiều tính năng hơn, fix bugs… Phần lớn thời gian, nếu bạn đang cố gắng lập trình 1 thứ gì đó đã quen thuộc trong mobile apps thì nhiều khả năng là nó đã được lập trình rồi.
Như bạn thấy, tôi thực sự rất lạc quan về React Native. Tôi vẫn nhớ lập trình Android và iOS native nhưng đồng thời rất hứng thú khi sử dụng React Native thời gian qua. Tôi nghĩ React Native sẽ là game-changer – kẻ thay đổi cục chơi trong lập trình mobile và khó lòng đợi được cho đến lúc nó trở thành platform không thể bỏ qua để lập trình mobile!
Chúc các bạn học tốt với ngôn ngữ mình đã chọn

Những kỹ năng lập trình đang "được lòng" nhà tuyển dụng nhất


Dù là đối với người mới học lập trình, hay là ngay cả với những chuyên gia đã có nhiều năm kinh nghiệm lập trình thì việc thay đổi là tất yếu. Luôn luôn phải làm mới chính mình, học hỏi những điểu mới, có rất nhều thứ phải học: những ngôn ngữ mới, các frameworks, DevOps automation, thiết bị mobile, front-end, back-end development, SQL, NoSQL databases, và còn nhiều hơn thế nữa. . Tôi đã có 18 năm kinh nghiệm trong lĩnh vực lập trình. Nhưng ngay tại thời điểm tôi viết bài viết này , tôi vẫn đang học về xử lý ngôn ngữ tự nhiên, engineering management, Elixir, Docker và rất nhiểu thứ khác.
Mỗi lần được học hỏi thứ gì mới, nó thật sự khiến tôi cảm thấy hứng thứ sáng tạo, khám pha những công nghệ mới . Là một web developer tự học, tôi yêu thích tìm hiểu những công nghệ mới và chia sẻ những hiểu biết của mình tới những người có cùng sở thích giống mình Cách đây vài năm, tôi bắt đầu tò mò về việc xác định các công nghệ mới nổi và dự đoán chúng. Vì vậy, tôi tạo Hacker News Hiring Trends, hay còn được gọi là HN Hiring Trends. Hacker News là một diễn đàn thảo luận phổ dành cho các lập trình. Đây cũng là một trong những nơi tốt nhất để tìm hiểu về các công nghệ mới. Hàng tháng Hacker News tổ chức một chủ đề gọi là "Hỏi HN: Ai đang tuyển dụng?" Người dùng cũng đăng các cơ hội việc làm từ các công ty của họ về chủ đề này. Các cơ hội nghề nghiệp được đăng hằng tháng và nó bắt đầu từ những ngày đầu. Chính vì vậy, đây là nguồn cung cấp dữ liệuu chất lượng để nắm bắt các xu hướng hiện hành. Mặc dù hiện nay cũng có nhiều công cụ theo dõi các xu hướng ngôn ngữ lập trình như TIOBE và RedMonk’s. Tuy nhiên, các bảng sếp hạng này chủ yếu vẫn tập trung vào các ngôn ngữ lập trình là chính. Nhưng thực ra, ngôn ngữ lập trình chỉ là một phần của thế giới lập trình. Google Trend cũng là một nguồn cung cấp dữ liệu chất lượng. Nhưng nó thì lại quá rộng tính trên phạm vi toàn bộ Internet. u hướng là nguồn cảm hứng khác. Nhưng nó là phạm vi toàn bộ Internet. Một lần nữa, các báo cáo trên HN sẽ được cập nhật số liệu mỗi tháng một lần. Dưới đây là những cập nhật mới nhất

React tăng mạnh

React dẫn đầu trong bảng xếp hạng cho cả tháng 6 và tháng 7 năm 2017. React, thư viện JavaScript được tạo bởi Facebook và chắc hẳn cũng không cần phải giới thiệu thêm chúng ta ddefu biết nó đã được opend source từ 4 năm trước. Tháng 6 năm ngoái nó giữ vị trí số 2, đến 11 năm 2016 vươn lên vị trí số 1 và giữ vững vị trí ngôi vương cho tới ngày hôm nay, có lẽ đủ để chứng minh sức hấp dẫn của nó.

Lập trình viên JavaScript đứng trước cơ hội và thách thức

Sức hấp dẫn của React ngày càng tăng lên. Điều này đồng nghĩa với việc các lập trình viên JavaScript phải chấp nhận thay đổi nhiều và nhanh hơn những lập trình viên khác Khi chúng tôi bắt đầu theo dõi dữ liệu, ghi nhận những sự phát triển của AngularJS trên bảng xếp hạng, tuy nhiên vẫn không có nhiều sự thay đổi so với trước. Tốc độ tăng trưởng của AngularJS là không ổn định. Nó liên tục rớt hạng trong vòn 3 năm liên tiếp, đi cùng với đó là các frameworks và thư viện của AngularJS cũng bị ảnh hưởng: Backbone.js, jQuery, và CoffeeScript. CoffeeScript đã biến mất hoàn toàn vào tháng 7 năm 2017.Có nhiều thay đổi, đồng thời cũng tạo ra nhiều cơ hội hơn cho lập trình viên JavaScript. Vue.js là ngôn ngữ khá mới, được dự đoán sẽ tạo ra nhiều bất ngờ trong thời gian tới. Thêm vào đó, do sự phát triển của front-end ngày càng trở nên phức tạp hơn, một bộ công cụ mới đã xuất hiện để kết hợp các phần khác nhau của một ứng dụng JavaScript hiện đại. Ví dụ những xu hướng nổi lên này là webpack, Gulp và Bower.

Cuộc chiến server side


Cuộc chiến server side cũng khá thú vị giữa Node.js và Ruby on Rails đã. Đây là cuộc chiến chưa bao giờ có hồi kết. Trong tháng 7 đã chứng kiến một chiến thắng thuyết phục của Node.js, trong khi trước đó trong tháng 6 Rails đã giành chiến thắng.

PostgreSQL không đối thủ

Chọn một công nghệ cơ sở dữ liệu an toàn nhất trong stack. Có nhiều lựa chọn sẵn có. Cơ sở dữ liệu, đặc biệt là các cơ sở dữ liệu quan hệ như MySQL và PostgreSQL, đã tồn tại từ lâu. Tuy nhiên, một người chiến thắng rõ ràng trong các bảng xếp hạng này là PostgreSQL. Không chỉ là nó đang thống trị MySQL, mà nó cũng đánh bại MongoDB.

Sự phát triển của di động

Không lâu trước đây, chính xác là tháng 11 năm 2016, rằng iOS năm trong top 10 vị trí tuyển dụng hàng đầu. Liên tục trong top 20, iOS cùng với Android vẫn là những kỹ năng quan trọng mà các nhà quản lý cần tìm. Tuy nhiên, có một sự thay đổi mạnh mẽ từ phát triển điện thoại từ native mobile sang hybrid , dẫn đầu bởi React Native. React Native trong những tháng gần đây đã vượt qua Swift, ngôn ngữ lập trình chính để phát triển iOS native

Các framework xuất hiện rồi biến mất nhưng ngôn ngữ không bao giờ chết

Tất nhiên, ngôn ngữ lập trình ảnh hưởng nhiều đến công việc của lập trình viên. Nhưng trong số 20 từ khóa hàng đầu trong tháng 7 năm 2017, chỉ có 5 ngôn ngữ lập trình là: · Python (#2) · JavaScript (#3) · Java (#8) · Ruby (#13) · C++ (#20) Nhưng những ngôn ngữ này đã luômđứng đầu bảng xếp hạng. Trong báo cáp đầu tiên, được phát hành vào tháng 6 năm 2013, cho thấy JavaScript, Python, Java và Ruby luôn có mặt trong top 10. Bây giờ, chỉ có một số ít ngôn ngữ trụ vững tới ngày hôm nay. Một số ngôn ngữ mới xuất hiện trong vài năm gần đây là lấy hơi nước, ví dụ như Go, Elixir, Rust và Kotlin.

Những thay đổi lớn tiếp theo

Một phân tích xu hướng hiện nay sẽ là thiếu sót nếu không nhắc đên AI và Machine Learning. Trong vài năm gần đây, chúng ta đã thấy hầu hết các công ty công nghệ lớn tham gia vào cuộc chơi AI. Từ những chiếc xe tự hành đến các trợ lý gia đình, những ứng dụng này đang bước vào cuộc sống của chúng tôi. Nhưng với các nhà phát triển, điều đó có ý nghĩa gì? Chúng ta hãy cùng xem Machine learning vị trí # 6 vào tháng 7 năm 2017 và hiện đã được đề cập tới 12% trong tất cả các bài đăng. Từ các xu hướng, bạn có thể thấy rằng machine learning và AI đều có tăng lên đáng kể. Có nghĩa là tôi cần phải mở một số tab mới.

Học lập trình di động hái ra tiền

Hơn 60% lượng truy cập internet từ thiết bị di động là khẳng định từ “ông vua tìm kiếm” Google. Điều này hoàn toàn đúng khi chúng ta nhìn và sự bùng nổ của các thiết bị số thông minh hiện nay. Giờ đây không chỉ là một chiếc smart-phone mà để phục vụ công việc, học tập và giải trí đã thêm những chiếc tablet, internet tivi, smart watch….

Hơn 60% lượng truy cập internet từ thiết bị di động là khẳng định từ “ông vua tìm kiếm” Google. Điều này hoàn toàn đúng khi chúng ta nhìn vào sự bùng nổ của các thiết bị số thông minh hiện nay. Giờ đây không chỉ là một chiếc smart-phone mà để phục vụ công việc, học tập và giải trí chúng ta còn có thêm những chiếc tablet, internet tivi, smart watch….
Nghề lập trình di động nói riêng đã trở thành một nghề hot không chỉ ở trên thế giới mà còn trở thành một nghề hái ra tiền ở Việt Nam.


lap-trinh-di-dong-nghe-hai-ra-tien-o-viet-nam-01

Việc học để trở thành một lập trình viên di động nói đơn giản sẽ là: bạn chọn một nền tảng ví dụ như iOS, Android, WindowsPhone… rồi sau đó cố gắng học ngôn ngữ native của nó như Objective-C cho iOS, Java cho Android hay C# cho WindowsPhone.
Tất cả những ngôn ngữ này đều là ngôn ngữ bậc 4 và theo hướng đối tượng (OOP) nên thực sự khó nắm bắt đối với người bắt đầu học lập trình. Thêm vào đó, khi phát triển một sản phẩm thì ai cũng muốn nó xuất hiện trên tất cả nền tảng phổ biến nhất bây giờ như iOS, Android, WindowsPhone.
Tuy nhiên học để thành thạo một nền tảng đã khó thì càng không thể mơ mộng tới sản phẩm trên nhiều nền tảng được.

lap-trinh-di-dong-nghe-hai-ra-tien-o-viet-nam-02
PhoneGap chính là sự lựa chọn khôn ngoan cho người bắt đầu học lập trình di động!
Trở lại những năm 90, với khẩu hiệu nổi tiếng “write one, run anywhere” – “Viết 1 lần – chạy mọi nền tảng”, Java đã trở thành một ngôn ngữ phổ biến bậc nhất thế giới với hàng tỷ thiết bị chạy phần mềm, mã nhúng…
Java trở lên phổ biến như vậy vì nó giải quyết được khó khăn trên mỗi nền tảng thiết bị khác nhau, người ta không phải viết lại chương trình để phù hợp với thiết bị đó nữa.
Ngày nay, có thể nói PhoneGap chính là “truyền nhân” xuất sắc của Java khi nó hoàn thiện và đẩy tiêu chí “write one, run anywhere” lên một tầm cao mới. Hãy nhìn qua kiến trúc của PhoneGap:

lap-trinh-di-dong-nghe-hai-ra-tien-o-viet-nam-03

Với sự hỗ trợ của các framework CSS, JS mã nguồn mở, PhoneGap xây dựng thêm cho mình một bộ API để có thể kết nối tới các thành phần vật lý của thiết bị như Camera, GPS, cảm biến, File System..v..v.. - điều mà những ứng dụng chạy trên nền trình duyệt không thể làm được.
Như vậy có thể nói rằng, để lập trình ứng dụng, game với PhoneGap trên mọi nền tảng thiết bị di động ta chỉ có thể cần học HTML, CSS, JS là đủ, nó thật sự dễ dàng hơn rất nhiều, dễ học, dễ làm, quy tắc đơn giản, dễ viết, không cần cầu kỳ chặt chẽ. 
Nếu bạn đã từng thử mày mò viết một webpage đơn giản bằng HTML, CSS, JS thì chắc chắn bạn sẽ tin chẳng thể đơn giản hơn.
Những lợi ích khi phát triển ứng dụng với PhoneGap có thể kể đến như:
• Tận dụng lợi thế của HTML5 và CSS3
• Sử dụng JavaScript để code
• Truy cập vào các tính năng native của thiết bị
• Triển khai ứng dụng trên nhiều nền tảng.
• Phát triển nhanh
• Chi phí hiệu quả.
Với những lợi thế tên, ngày càng có nhiều doanh nghiệp, cá nhân, tổ chức lựa chọn PhoneGap để phát triển sản phẩm của mình. Và nếu bạn không muốn đứng ngoài cuộc chơi của thế giới di động hay nhanh chóng tiếp cận PhoneGap.
Một số Ứng dụng làm bằng PhoneGap

Sworkit

lap-trinh-di-dong-nghe-hai-ra-tien-o-viet-nam-04
Sworkit là một ứng dụng cung cấp những bài hướng dẫn, video tập thể dục cho mọi người có thể luyện tập ở bất kỳ đâu, bất kỳ khi nào với thời lượng mỗi bài tập từ 5 đến 60 phút.
Sworkit hỗ trợ đến 13 ngôn ngữ và sử dụng PhoneGap để lập trình nên đồng thời nó có thể triển khai trên đa nền tảng. Chính vì lợi thế cạnh tranh áp đảo đó nên ứng dụng nhanh chóng đạt 4 triệu lượt tải và 7 triệu phútsử dụng của người dùng mỗi tháng - tính trên tất cả nền tảng.
Một số hình ảnh của ứng dụng:

lap-trinh-di-dong-nghe-hai-ra-tien-o-viet-nam-05
Game làm bằng Phonecap
Một minigame thú vị đa người chơi. Trong game, bạn sẽ nhập vài là một chiến binh trẻ tuổi khám phá thế giới phép thuật, sẽ không có công chúa để bạn cứu đâu mà thay vào đó là những nhiệm vụ, thử thách mà vượt qua sẽ có những phần thưởng giá trị, bạn cũng có thể trang bị cho nhân vật của mình và chiến đấu với người chơi khác. Game được lập trình bằng PhoneGap và đã có sẵn trên iOS và Windows Phone.
Đây là trò chơi xếp hình thú vị dành cho trẻ nhỏ nhưng nó thực sự cũng là thách thức với người lớn.
Kết thúc 1 khóa học PhoneGap từ 3-6 tháng, bạn đã có thể tự tay kiếm tiền. Để tiến sâu hơn vào thị trường lập trình di động, sau khi nắm được ngôn ngữ đa nền tảng PhoneGap, các bạn nên tiếp tục theo học chuyên sâu lập trình ứng dụng Android.
Tham khảo các khóa học ở Msita cùng với Huynh My Van

Dành cho người bắt đầu học Lập trình Java

Java là ngôn ngữ dễ học, nó lược bớt những lệnh thừa và rườm rà của C/C++ để người lập trình chú trọng vào việc viết chương trình. Đồng thời, nó còn hạn chế người lập trình không can thiệp quá sâu vào hệ thống.

Java là ngôn ngữ dễ học, nó lược bớt những lệnh thừa và rườm rà của C/C++ để người lập trình chú trọng vào việc viết chương trình. Đồng thời, nó còn hạn chế người lập trình không can thiệp quá sâu vào hệ thống.
1. Lập trình Java là gì?
Java được coi là ngôn ngữ lập trình số 1 hiện nay. Nó thường được nhắc đến như một ngôn ngữ lập trình bậc cao, giúp lập trình viên tạo ra những chương trình phần mềm hữu ích: phần mềm của các ngân hàng, ngành tài chính, quản lý, các hệ thống của nhà mạng di động, phần mềm quản lý, kế toán…
Java đồng thời chính là cơ sở của Android nên nó cũng giúp lập trình viên tạo ra các game hay phần mềm cho mobile…. Java có thể giúp bạn chơi game online, chat với mọi người trên khắp thế giới, chạy các game trên điện thoại di động và hàng ngàn ứng dụng khác….
Ngôn ngữ lập trình Java là ngôn ngữ lập trình hướng đối tượng, có cú pháp rất giống với ngôn ngữ C/C++, tuy nhiên nó đã được thay đổi khá nhiều để đáp ứng khả năng độc lập với hệ điều hành và bộ xử lý.
Lập trình Java chính là việc sử dụng ngôn ngữ Java để viết các chương trình, ứng dụng, cho phép người lập trình viết chương trình một lần và có thể sử dụng tại bất kỳ đâu.

danh-cho-nguoi-bat-dau-hoc-lap-trinh-java-01
Một ứng dụng viết bằng Java có thể được thực hiện trên bất kỳ hệ điều hành và hệ xử lý nào có hỗ trợ Java. Do vậy, người lập trình chỉ cần viết ứng dụng bằng Java đúng một lần, sau đó có thể sử dụng ứng dụng này trên các hệ điều hành khác nhau như Windows95, WindowsNT, Mac OS, Unix,... theo phương châm: "viết một lần, sử dụng ở bất kỳ đâu".
Có thể nói rằng sự ra đời của Java đánh dấu một cuộc cách mạng mới trong lĩnh vực Công Nghệ Thông Tin. Cuộc cách mạng này kéo theo một loạt những thay đổi: các ứng dụng dần được thay thế bằng Java, các thế hệ máy tính sử dụng những vi mạch có khả năng hỗ trợ Java,... Làm quen với Java sẽ giúp chúng ta tiếp cận được với những công nghệ mới nhất của Công nghệ thông tin.
2. Học lập trình Java có khó hay không?
Cú pháp Java được vay mượn nhiều từ C & C++ nhưng có cú pháp hướng đối tượng đơn giản hơn và ít tính năng xử lý cấp thấp hơn. Do đó việc lập trình Java dễ hơn, đơn giản hơn, đỡ tốn công sửa lỗi hơn, trong khi lập trình C rất hay xảy ra lỗi và khó sửa.

danh-cho-nguoi-bat-dau-hoc-lap-trinh-java-02
Java là ngôn ngữ dễ học, nó lược bớt những lệnh thừa và rườm rà của C/C++ để người lập trình chú trọng vào việc viết chương trình. Đồng thời, nó còn hạn chế người lập trình không can thiệp quá sâu vào hệ thống.
3. Cơ hội nghề nghiệp cho người học Lập trình Java
Với độ an toàn cao, Java là ngôn ngữ lập trình được các phần mềm, trang web của các hệ thống ngân hàng hết sức tín nhiệm. Các dự án liên quan đến Java đều mang tầm vóc tỉ đô. Có câu nói vui dành cho các chuyên viên lập trình Java: viết code ra “thóc” ra “gạo”. Bạn thấy thế nào nếu ngày ngày chỉ việc ngồi gõ những dòng lệnh, thể hiện tình yêu với lập trình mà tiền lại “tự động” chảy vào tài khoản?
Theo con số thống kê từ hãng Oracal hiện nay có tới 3 tỉ thiết bị đang sử dụng ngôn ngữ java: thiết bị điều khiển ô tô, điều hòa, máy giặt…7 tỉ card sim điện thoại, thẻ ATM, 97 % Enterprise Deskop chạy bằng ngôn ngữ Java. Portal của các sở ban, ngành, các hệ thống ngân hàng lớn như Viettin Bank, Techcom Bank…đều sử dụng ngôn ngữ Java.

danh-cho-nguoi-bat-dau-hoc-lap-trinh-java-03
Với độ lan tỏa như vậy, cơ hội nghề nghiệp cho người học lập trình Java là vô cùng lớn. Hơn nữa có một nền tảng vững chắc về ngôn ngữ lập trình Java, tư duy hướng đối tượng sẽ giúp lập trình viên nhanh chóng làm chủ được công việc lập trình và có thể tự học thêm các công nghệ khác.
4. Học lập trình Java ở đâu?
Msita sẽ là môi trường tuyệt vời nhất, chuyên nghiệp nhất để chỉ cho bạn cách học như thế nào để ra trường có thể làm được việc ngay lập tức.
Nội dung khóa học Java:
Thời gian đào tạo: 46 buổi (dành cho sinh viên CNTT) và 20 buổi (dành cho học viên đã biết một ngôn ngữ lập trình)
1. Lập trình hướng đối tượng trong Java
2. Ngôn ngữ đánh dấu văn bản HTML5
3. Cascading Style Sheet (CSS3)
4. Ngôn ngữ Client Side Javascript, Jquery
5. Microsoft SQL Server 2012
6. Database with Java
7. Java Model-View-Controller (MVC) framework Struts 2
8. Project
Với thời gian đào tạo 46 buổi, mỗi buổi 2h cùng chuyên gia số 1 về  lập trình Java – chuyên gia Nguyễn Sông Hương, sinh viên hoàn toàn có thể tự tay kiếm tiền bằng nghề lập trình Java.

danh-cho-nguoi-bat-dau-hoc-lap-trinh-java-04
Chuyên gia Nguyễn Sông Hương:
• Team Leader, Project manager của các dự án Java lớn của Tập đoàn HIPT và FSoft-FPT;
• Team Leader Java của Msita ;
• Phó Giám đốc Học viện ITPlus, Đại học Quốc gia Hà Nội;
• Giảng viên cao cấp của Msita  toàn cầu.
5. Bạn làm được gì sau khóa học lập trình Java tại Msita ?
• Tự tin thiết kế và code Java web với công nghệ hot HTML5, CSS3, JQuery, SQL Server 2012, Struts2, JDBC4.
• Tự tin tham gia các dự án Java, EE hàng triệu đô;
• Tự tin ứng tuyển các vị trí lập trình Java của các công ty lớn như FPT, CMS, Vietel, các ngân hàng như Vietinbank, Teckcombank, Ngân hàng chính sách ...
• Mức lương khởi điểm từ 500$.
Msita  luôn coi trọng việc dạy học để sinh viên có thể ra trường làm được việc. Chúng tôi dành cho học viên cơ hội học tập thực tiễn và cơ hội được tiếp xúc với doanh nghiệp nhiều nhất. Hàng năm Msita  đều tổ chức “Ngày hội tuyển dụng CNTT”, trong các dịp Lễ trao bằng, bảo vệ project, Msita  đều mời doanh nghiệp đến để tạo cơ hội cho sinh viên tiếp xúc với nhà tuyển dụng, mang đến hàng nghìn cơ hội việc làm cho sinh viên. Đây chính là điểm mà ngoài Msita chưa đơn vị nào áp dụng thành công

Hai con đường trở thành lập trình viên: Đại học và học đại

NEW YORK, NY - SEPTEMBER 24: Bill Gates, chairman and founder of Microsoft Corp., listens during the Clinton Global Initiative (CGI) meeting on September 24, 2013 in New York City. Timed to coincide with the United Nations General Assembly, CGI brings together heads of state, CEOs, philanthropists and others to help find solutions to the world's major problems. (Photo by Ramin Talaie/Getty Images)
Ở bài viết trước trong series Nhập Môn Lập Trình Không Code, mình đã chia sẻ về triển vọng nghề nghiệp và lương bổng của ngành lập trình.
Trong bài này, chúng ta cùng tìm hiểu về hai con đường để trở thành một lập trình viên: Đại Học và Học Đại (tự học), cùng với những thuận lợi và khó khăn khi lựa chọn chúng nhé.

Đại Học – Con đường dễ đi (Dù không bằng phẳng)

Trở thành lập trình viên bằng con đường Đại Học, nghĩa là thi đậu Đai Học và theo học ngành Công Nghệ Thông Tin (Khoa Học Máy Tính/Kĩ Sư Phần Mềm) của một trường Đai Học nào đấy.
Đây là con đường an toàn, khá dễ đi (thực ra học cũng hơi cực khổ chứ không quá dễ đâu) nên được nhiều bạn lựa chọn. Việc học Đại Học một cách chính qui có khá nhiều ưu điểm:
  • Vững kiến thức cơ bản: Chương trình học của các trường  ĐH thường được xây dựng một cách công phu, kĩ lưỡng. Sinh viên sẽ được học từ những môn lập trình cơ bản (C, C++) cho đến kiến thức nền tảng (cơ sở dữ liệu, thuật toán, hạ tầng mạng, hệ điều hành). Các kiến thức nền tảng này vô cùng quan trọng trong quá trình làm việc, học kiến thức mới.
  • Quan hệ: Đi học, bạn sẽ được làm quen, học hỏi từ những người bạn có cùng đam mê, cùng sở thích. Khi có gì khó khăn, bạn có thể dễ dàng hỏi bạn bè hoặc thầy cô. Những mối quan hệ này rất có ích về sau này (Khi muốn tìm việc hay muốn học lên cao).
  • Cơ hội việc làm và thực tập: Hầu hết các trường đều hỗ trợ hoặc hướng dẫn sinh viên đi thực tập. Đây là cách tốt nhất để lấy kinh nghiệm, trải nghiệm môi trường làm việc chuyên nghiệp, tạo lợi thế cho bạn khi đi xin việc.
Bằng Đai Học cũng khá là quan trọng đấy nhé!
Các bạn có thể xem thêm về những lợi ích mà học Đại Học mang lại trong bài: Lập trình viên có cần học Đại Học hay không?.
Tuy vậy, nếu đi con đường này, bạn cần lưu ý những khuyết điểm của nó:
  • Dễ bị thói quen ỷ lại: Do chương trình học đã cố định, nhiều bạn cứ nghĩ học hết các môn trong trường là đã đủ kiến thức để đi làm. Điều này dẫn đến thái độ ỷ lại, không tự học mà chỉ đợi được dạy. Thái độ này vô cùng nguy hiểm khi đi làm.
  • Kiến thức cũ, không được cập nhật: Kiến thức trong trường Đai Học chỉ là kiến thức cũ và cơ bản, không đủ để làm việc (Xem lại bài viết Những điều Đai Học không dạy bạn). Ngoài ra, ta còn phải học một số môn khá nặng nề mà vô dụng như: quân sự, triết học Mác Lê Minh, Lý Hoá Đại Cương,…
  • Tốn thời gian và tiền bạc: Học Đại Học đồng nghĩa với việc bạn bỏ mất 4 năm thời gian để mài đít trên ghế nhà trường, đóng tiền nhà, tiền học phí v…v. Đây là một khoảng đầu tư khá lớn. Xét về mặt kinh doanh, học ĐH ra mà không kiếm được việc làm đồng nghĩa với việc bạn đầu tư… thua lỗ.
Ngoài ra, có thể bạn sẽ mất kha khá thời gian cho việc chơi game, gái gú ờ thời Đai Học

Học Đại – Con đường gập ghềnh, lắm chông gai vất vả

Học Đại Học không phải là con đường duy nhất để trở thành lập trình viên. Có khá nhiều bạn trở thành lập trình viên bằng cách tự học ở trung tâm, tự học thêm trên mạng hoặc qua sách vở.
Đây là con đường dành cho các bạn không có thời gian hoặc điều kiện; hay đã tốt nghiệp ngành khác, có đam mê với công nghệ thông tin và muốn tự học lập trình.
So với học Đại Học, con đường này có lắm chông gai, lắm gian nan thử thách hơn nhiều:
  • Bối rối không biết hướng đi: Rất nhiều bạn hỏi mình “Em muốn tự học lập trình, nhưng không biết bắt đầu từ đâu?”. Thật vậy, kiến thức trong ngành lập trình rất rộng và vô cùng bao la. Các bạn tự học thường dễ “ngộp” vì lượng kiến thức khổng lồ và không biết bắt đầu như thế nào.
  • Dễ nản và bỏ cuộc: Thật lòng mà nói, việc lập trình và học lập trình không hề dễ dàng. Bạn không thể thành thạo lập trình chỉ sau ngày một ngày hai, mà phải trải qua nguyên một quá trình học tập rèn luyện dài đằng đẳng. Quá trình dài dòng và gian khổ này dễ khiến nhiều bạn nản lòng và bỏ cuộc.
  • Hổng kiến thức căn bản: Kiến thức căn bản chỉ có trong sách vở, lại khá nặng nề nên nhiều bạn tự học thường bỏ qua hoặc học sơ sài. Điều này dẫn đến việc nhiều bạn tự học lập trình bị mất căn bản, có thể sử dụng công nghệ nhưng không hiểu rõ bản chất của chúng.
  • Khó tìm việc hơn: Mặc dù ngành IT có tiếng là “không quá coi trọng bằng cấp”, rất nhiều công ty chỉ tuyển người đã tốt nghiệp. Bạn chưa tin à? Đây là một số mẫu tuyển dụng mình vừa hốt trên careerbuilder về:

Đừng để mình trở thành coder siêu nhân

Từ chuyện ngày xưa

Ngày xửa ngày xưa, à thật ra cũng không xưa lắm, khoảng những năm 75-90, có một số lão lập trình viên rảnh hơi, thực hiện một số nghiên cứu rảnh hơi để … đo năng suất làm việccủa developer.
Kết quả thu được thật đáng ngạc nhiên! Chênh lệch về năng suất làm việc của 2 developer là rất lớn. Một developer giỏi có thế có năng suất gấp 10 lần một developer khác.
Người đời gọi những developer giỏi này là rockstar developer, 10x developer. Huyền thoại về các developer “siêu nhân”, “thần thánh” cũng ra đời từ đó.
rock-star-developer-or-programmer

Đến chuyện ngày nay

Thuở đi làm, mình cũng từng gặp 2 dạng coder “siêu nhân”:
  • Dạng thứ nhất thường gặp ở các bác senior. Họ thường là những người giàu kinh nghiệm, trầm mặc, ít khoe khoang, nhưng là người chịu trách nhiệm cho kiến trúc hệ thống, vấn đề technical phức tạp, các module chính. Họ debug nhẹ nhàng như chuồn chuồn giỡn nước, code trong sáng như nước hồ thu, ngồi pair programming với họ một buổi mà như được truyền thụ mấy năm công lực của các bậc thánh nhân.
  • Dạng thứ hai là các thanh niên mới ra trường hoặc mới đi làm 1,2 năm. Họ cũng khá có tài, rất tự tin về tốc độ và khả năng code của mình. Dạng coder này thoắt ẩn thoắt hiện, đi như mây bay, đến như gió thoảng. Họ luôn ôm nhiều việc, hoàn thành công việc trước thời hạn nên rất được lòng các developer.
Dạng thứ nhất chính là dạng developer mà chúng ta nên học hỏi. Tuy nhiên, cần cố gắng tránh trở thành dạng thứ hai. Vì sao vậy? Hãy đọc đoạn bên dưới.
rockstar-ninja-guru-developer

Các cấp độ của developer

Trong cuốn Mastery, tác giả có nhắc đến các cấp độ cần đạt đến để thực sự “master” một cái gì đó, mình thấy cũng khá đúng với ngành lập trình:
  • Cấp độ một: Đây là giai đoạn nhập môn học hỏi. Lúc này, do chưa có kinh nghiệm, không biết cách giải quyết vấn đề nên tốc độ code của bạn khá chậm.
  • Cấp độ hai: Sau một thời gian sẽ chuyển qua cấp độ này. Do đã có kinh nghiệm. dần nắm được cách giải quyết vấn đề nên tốc độ code của bạn tăng lên. Tuy nhiên, bạn sẽ gặp khó khăn khi gặp vấn đề mới.
  • Cấp độ ba: Sau khi tích luỹ được nhiều kinh nghiệm thì bạn sẽ code … chậm lại. Tại sao? Lúc này với một vấn đề, bạn sẽ nghĩ nhiều hơn trước khi code. nhìn ra nhiều điều cần lưu ý hơn, có nhiều hướng giải quyết hơn. Lúc đó bạn sẽ phân vân giữa các hướng giải quyết để chọn cách tối ưu và tốt cho tương lai.
  • Cấp độ bốn: Bạn sẽ mất khá lâu để đạt tới cấp độ này. Lúc này, bạn có thể nhanh chóng tìm ra giải pháp tối ưu nhờ kinh nghiệm nhiều. Bạn sẽ có cái nhìn tổng quát về solution, về hệ thống chứ không chỉ là module nữa.
Two Business People Working On Laptop at Lunch In Restaurant
Nếu đi làm được một thời gian, thấy mình bắt đầu code chậm lại so với lúc trước, không phải là do bạn … già đâu ;)), đây chỉ là quá trình lột xác từ cấp độ hai lên cấp độ ba đấy.

Vậy mấy thằng “coder thần thánh” đạt cấp nào???

Mấy bác senior ở cấp độ bốn, code vừa nhanh và hiệu quả thì không cần nói rồi! Tuy nhiên, đa phần các “thánh code” mình gặp thường là những người ở cuối cấp độ hai. Thật vậy, ngày xưa mình cũng từng tưởng mình giỏi, mình là “thánh”.
Ta thường hay lầm tưởng là code nhanh, hoàn thành task nhanh là coder giỏi. Thế nhưng, tốc độ code không phải là tất cả. Đôi khi các “thánh” design ẩu. code ẩu cho xong module mà không chịu test, hoặc không cover đủ các case. Lối code nhanh mà ẩu sẽ làm tăng thêm technical debtcho team, để các thành viên khác phải hốt shit (refactor code).
Tệ hơn, do hoàn thành task nhanh, những coder dạng này thường tự phong mình là “siêu nhân”, là “thánh” và tiếp tục coi khinh những thằng chậm hơn. Chịu khó đọc bạn sẽ thấy thể loại này được manager thương, nhưng đôi khi lại bị developer ghét vì làm chậm tiến độ dự án và mất thời gian người khác. Đừng để mình trở thành một người như vậy nhé!
maxresdefault
Để hạn chế tác hại các “thánh code” kiểu này, các team phải có qui trình rõ ràng, có unit test, có code review. Tuy nhiên, không phải công ty nào cũng có qui trình bài bản. Do đó, nếu đôi khi bạn phải hốt shit của “coder thần thánh” nào đó thì cũng đành cắn răng chịu đựng thôi nhé.

Vài lời khuyên

Thuở mới ra trường, thích chứng tỏ bản thân, mình thường cố gắng code nhanh để “thể hiện trình độ”. Lớn lên mới biết, chất lượng code quan trọng hơn “tốc độ code” rất nhiều.
Hãy tập cho mình thói quen code chậm lại một chút, suy nghĩ kĩ hơn một chút, bạn sẽ nhận ra nhiều cách để giải quyết vấn đề hơn. (Mình nhận được lời khuyên này từ một ông senior bên ASWIG Solution).
Bạn cũng không nên ăn thua về hiệu suất làm việc làm gì. Nếu muốn gây ấn tượng trong mắt team leader, PM và đồng đội, hãy giúp đỡ các thành viên khác chứ đừng thể hiện sự “thần thánh” của mình ra nhé!

Thứ Ba, 27 tháng 3, 2018

Khi bạn không code bạn sẽ làm gì ?


LẬP TRÌNH VIÊN LÚC KHÔNG CODE THÌ… LÀM GÌ?


Khá nhiều bạn lập trình viên mình quen có lối sống hơi “thiếu lành mạnh”. Thiếu lành mạnh ở đây không có nghĩa là ăn chơi sa đoạ cờ bạc rượu chè gái gú mà là … quá biệt lập.
Họ đi làm từ 8 giờ sáng đến 5,6 giờ chiều. Ăn uống tắm rửa xong lại bật máy lên đánh Lol, Dota hoặc code tới 12h đêmrồi ngủ. Cuối tuần, họ lại tiếp tục đánh Lol, Dota hoặc tải JAV, nhầm,… phim rạp về xem. Thứ hai tiếp tục đi làm, cuộc sống cứ thế nhàm chán trôi qua.
Code và máy tính là những người bạn thân thiết của lập trình viên. Tuy nhiên, đừng nên để cuộc sống của mình quanh đi quẩn lại chỉ có code và máy tính. Nhân hôm trước có bạn đã hỏi, hôm nay mình viết bài này để trả lời câu hỏi: Lập trình viên làm gì khi không code?

Giành thời gian cho gia đình, bạn bè và gấu

Gia đình không chỉ là nguồn động lực quan trọng, mà còn là tổ ấm để ta dựa vào (Nếu thất nghiệp thì còn về xin tiền hoặc ở ké nhà bố mẹ). Nếu ở xa, lâu lâu cuối tuần bạn có thể về quê thăm nhà, chở má đi bơi, chở ba đi tập tạ. Vừa thoải mái đầu óc lại giúp cả nhà thân thiết hơn.
Nếu rảnh rỗi, cuối tuần ta nên rủ bạn bè đi ăn, đi chơi hoặc cà phê chém gió. Chán nói chuyện linh tinh thì có thể nói chuyện nghiêm túc như tương lai sự nghiệp. Bạn cũng có thể rủ đồng nghiệp đi nhậu nhằm thắt chặt tình đồng đội, nhưng nhớ nhậu ít thôi nhé.

ban-tre-uong-bia-1442789444-1442821191
Nhậu vừa thôi chứ đừng cố quá nhé. Nhậu xong nên về nhà, đừng la cà mát xa lung tung

Chiều tối hoặc cuối tuần cũng là dịp để bạn dắt gấu đi ăn đi chơi đi chịch. Nếu chưa có gấu thì xách ba lô lên và táng, nhầm, tán thôi. Chịu khó ra đường chứ nằm trong phòng chơi game thì gấu không từ trên trời rơi xuống đâu nhé.

Chơi thể thao

Ngành mình ngồi nhiều rất có hại cho sức khoẻ. Nên chơi một hai môn thể thao vừa sức như: bơi, cầu lông, đá bóng, … Thuở còn ở Fsoft và Aswig, công ty nào cũng có một đội bóng nho nhỏ. Do thời đấy mình lười nên không tham dự. Nghe mấy anh trong công ty kể lại là khi đá bóng chung đội có thể… đá sếp hoặc mắng sếp, có vẻ rất hay.
sport02

Đi phượt hoặc đi du lịch

Mình có 2 thằng bạn cứ cuối tuần là đi phượt hoặc xách balo đi quẩy. Chi phí cũng không hề đắt đỏ tí nào. Do đi chung với cả đội, bạn vừa nâng cao trải nghiệm bản thân, vừa có thể tranh thủ làm quen mấy bạn nữ dễ thương FA chung nhóm.
Nếu được thì bạn có thể rủ bạn bè, đồng nghiệp đi chung (Tốt nhất là tìm mấy thằng hay đi quẩy rồi xin đi ké). Nếu không có nhóm, bạn có thể liên hệ các hội nhóm facebook hoặc một số forum nhé.

15252697_1480322011978027_2938438242150601637_o
Thằng bạn hay phượt của mình và chiếc moto của n

ó

Bổ sung kiến thức

Tự bổ sung kiến thức cho mình cũng là cách giết thời gian khá tốt. Là dân IT, bạn có thể dễ dàng học những thứ mới trên pluralsight, coursera, udemy.
Ngoài xem video, mình cũng thường hay đọc sách. Dạo gần đây do chán technical nên mình chuyển qua các thể loại như tiểu thuyết, ngôn tình, sách kinh doanh, khởi nghiệp, tâm lý, … để sau này còn đi startup hoặc đi lừa đảo.

20150729211514-man-reading-book-hipster
Blog có khá nhiều sách hay trong mục review sách nhé

Ngoài ra, để không bị ngu ngơ như bạn nữ “canh cua rau đay”, các bạn có thể nên lướt kenh14, phunutoday, vnexpress khoảng 2,3 lần một tuần để cập nhật xu thế chung. Đừng phí quá nhiều thời gian nhé, xem sơ để biết thôi!

Tìm một thú vui

Một cách khác để tận dụng thời gian rỗi khi không code là tìm một thú vui cho bản thân. Bạn có thể học đàn, học vẽ, học võ, chụp hình, chơi droid, chăm sóc cây kiểng gì đó… Những thú vui này sẽ giúp bạn thấy cuộc đời đẹp hơn, đồng thời ta cũng có thể tìm được nhiều bạn bè cùng sở thích.

huy_4068a_a__resize

Nếu dư dả thì nên đầu tư học nhiếp ảnh, vừa ngầu lại vừa dễ làm quen các bé xinh xinh
😛

Viết blog

Mình đã nói nhiều lần về tầm quan trọng của việc viết blog. Viết blog giúp bạn xây dựng thương hiệu bản thân, mở rộng mạng lưới quan hệ, nâng cao trình độ cũng như khả năng viết…
Ngoài ra, viết lách còn là công cụ xả stress rất tốt. Đừng chần chừ nữa, cứ đăng kí 1 blog mới trên wordpress.com, chọn một cái tên thật “kêu” rồi bắt đầu thôi. Có khó khăn gì cứ liên hệ mình, mình sẽ tận tình chỉ dẫn!
dealing_with_writers_block
Còn bản thân các bạn đọc thì sao? Các bạn làm gì khi không code? Hãy chia sẻ với mọi người trong phần comment nhé.

Bạn chọn lập trình web hay mobile

Tôi thường xuyên phải trả lời "theo anh, em nên chọn học lập trình di động hay lập trình web?". Cách trực quan là tôi đưa học viên đi tham quan phòng lab thực tập của đội di động và web, để họ tự trải nghiệm, hỏi đáp với học viên đang thực tập chuyên ngành web - di động. Học viên mới có thể đóng một khoản phí 700,000 VND để thực tập thử 1 tuần, tự mình rút kết luận. Rẻ hơn cực nhiều nếu bạn phải mất 4-5 năm học đại học để nhận ra một điều cay đắng, bạn không thích và không thể làm nghề mà bạn đã học trong trường đại học.
Tuy nhiên vẫn còn có nhiều sinh viên chỉ có thể học trực tuyến, thực sự bối rối giữa web và di động, tôi xin tóm tắt tư vấn của tôi như sau:

Tập trung xuất sắc cho 1 kỹ năng

  • Trong khoảng thời gian 2 năm, chỉ nên tập trung học, rèn luyện xuất sắc 1 công nghệ: hoặc lập trình web, hoặc lập trình di động. Đối với lập trình web tập trung dùng thành thạo 1 framework, lập trình ra ứng dụng cụ thể. Đối với di động chỉ cần xuất sắc 1 nền tảng: iOS hoặc Android là đủ sống.

Nếu bạn lập trình web

  • Lập trình web rất rộng. Nó bao gồm: lập trình front end (HTML, CSS, JavaScript), thiết kế UI/UX, lập trình back end, triển khai hệ thống web. HTML, CSS, JavaScript là ngôn ngữ dễ học lúc đầu, gõ sai cú pháp thì trình duyệt cố gắng giảm thiểu độ nghiêm trọng của lỗi. Trên Internet có rất nhiều những thư viện, mã nguồn mở giúp lập trình front end rất dễ dàng. Lập trình viên khôn ngoan giảm được 60% sức lực bằng cách dùng lại thư viện. Nhiều người lẫn lộn việc dễ dàng tiếp cận HTML, CSS, JavaScript, dùng lại mã với năng lực thực sự về 3 ngôn ngữ này của bản thân. Tạo ra thư viện front end JavaScript tốt tương thích nhiều trình duyệt mất nhiều thời gian và kinh nghiệm. Lập trình viên front end chỉ máy móc dùng lại theme, thư viện có sẵn, 5-10 năm lập trình cũng chỉ tương đương lập trình viên 1 năm kinh nghiệm.

  • Mức lương khởi điểm tại Hà nội cho lập trình viên web rất đa dạng. Với một lập trình viên non tay nghề < 6 tháng, chưa từng có việc làm, có một chỗ ngồi, một máy tính và được tham gia dự án và nhận thù lao 500k/tháng không tệ chút nào. Nhưng với lập trình viên web đã làm ứng dụng cụ thể, tích lũy được nhiều kỹ năng, tiếng Anh tốt, nắm vững quy trình làm dự án, thì mức lương 8 triệu/tháng thực ra là thấp. Nhà tuyển dụng thường trả ép đối với những lập trình viên lần đầu đi xin việc.
  • Để nắm vững nhiều kỹ thuật khó trong lập trình web sẽ mất nhiều năm, và không phải ai cũng kiên trì làm được. Việc học lập trình web đòi hỏi phải học nhiều ngôn ngữ hơn. Nhưng tôi vẫn mạnh dạn khuyên các bạn không quá giỏi, không background CNTT học lập trình web bởi đây là một thị trường rất rộng, màu mỡ, thượng vàng hạ cám. Giỏi thì kiếm, còn kém, đứng đúng chỗ vẫn sống tạm được. Với lập trình di động không có chỗ cho lập trình viên trung bình.

Nếu bạn lập trình di động

  • Trái với nhiều người nghĩ, học lập trình di động dễ hơn lập trình web ở mấy điểm:
    • Chỉ phải học 1 ngôn ngữ lập trình hoặc Swift hoặc Objective-C hoặc Java hoặc C++
    • Nền tảng iOS, Android cung cấp rất đầy đủ API, code mẫu, pattern để lập trình viên học và tạo ra app
    • Công cụ lập trình IDE chính hãng (XCode, Android Studio) vừa tốt vừa miễn phí. Đối với web, PHP Storm, WebStorm là IDE lập trình tốt nhưng phải mua.
    • Các hãng Apple, Google hỗ trợ lập trình đi theo nền tảng của họ rất nhiệt tình. Đối với web, hầu hết các framework là miễn phí và open source, hỗ trợ từ cộng đồng.
  • Ngôn ngữ lập trình di động hầu hết kiểm soát kiểu rất chặt, biên dịch ra file chạy mã nhị phân. Do đó, nếu gõ ẩu, sai logic, ứng dụng không chạy hoặc đổ vỡ.
  • Rất nhiều ứng dụng di động kết nối lưu- truy xuất dữ liệu trên Internet. Thực chất nơi lưu - trả về dữ liệu là những web service back end do đội lập trình web back end xây dựng. Công việc của lập trình viên ứng dụng di động giống với lập trình viên front end ở trên.
  • Nếu không có ý tưởng nổi trội, năng khiếu đồ họa, lập trình viên di động vẫn có kiếm việc ở công ty gia công, phát triển ứng dụng di động cho doanh nghiệp. Ở đó, di động hóa hoạt động nghiệp vụ cần hơn tạo ra một ứng dụng giải trí.
  • Trong khoảng 24 tháng đầu, lương của một lập trình viên di động có thể sẽ cao hơn đồng nghiệp web vì: số lượng lập trình viên di động chuyên nghiệp hiện còn thiếu. Tuy nhiên sau đó thì chưa chắc nếu các lập trình viên web tiếp tục nâng cấp trình độ và trở thành full stack web developer. Full stack web developer yêu cầu nhiều kỹ năng kết hợp, hiểu biết tổng quan hệ thống, rõ ràng, đãi ngộ phải tốt

Chuyển từ di động sang web và ngược lại

Trong 18-24 tháng đầu tiên học lập trình web hay di động, tôi chân thành khuyên các bạn hãy tập trung làm tốt một công nghệ, một framework, tham gia dự án không cần nhiều nhưng đủ một vòng đời sản phẩm từ thiết kế đến lúc phát hành chạy thật. Tuyệt đối không nên học để biết mỗi thứ một tý. Chỉ có những chuyên gia giỏi mới kiếm được tiền tốt, những anh chàng học việc thường sẽ không có lương hoặc lương thấp. Câu nói "Nhất nghệ tinh" chưa bao giờ sai cả. Kinh nghiệm 10,000 giờ bay liên tục trong khoảng 6 năm bạn mới là chuyên gia trong lĩnh vực hẹp bạn đang làm. Nếu buộc phải chuyển từ di động sang web và ngược lại, thì đây là một số kinh nghiệm:
  • Bạn lập trình iOS Objective-C, hãy chuyển sang Swift. Swift có nhiều lựa chọn mở hơn để lập trình web: 
  • Bạn lập trình iOS Swift, hãy chú ý đến Swift 3, XCode 8 sẽ được Apple giới thiệu tháng 9/2016. Hiện đã có một số web framework viết bằng Swift như Vapor Web Framework, IBM Kitura, Perfect.org, SwiftExpress.io . Khi Swift 3 ra mắt số lượng web framework cho Swift sẽ phát triển rất nhanh, sẽ vượt cả Golang, bởi số lượng lập trình viên Swift gia tăng nhanh hơn Golang, Elixir, Ruby, PHP.
  • Bạn lập trình Android. Java vốn là ngôn ngữ lập trình phổ biến số 1 hiện nay, bạn có thể chọn học Spring, Spark. Spark sẽ dễ học hơn. Nhưng Spring có nhiều việc làm và dự án thật hơn ở VN.
  • Bạn lập trình web, hãy thử React Native hoặc ionic để tạo ứng dụng di động cross platform bằng ngôn ngữ Java

Còn lời khuyên nào nữa?


Thực ra còn có nhiều lời khuyên hay gợi ý nữa. Thị trường việc làm CNTT hết sức sôi động thay đổi theo từng ngày, nếu bạn muốn trở thành lập trình viên di động hay web chuyên nghiệp, hãy tham khảo chương trình thực tập toàn thời gian trong 6 tháng tại Techmaster. Đã có những khóa học trực tuyến 6 tuần nhưng luôn nhớ quy luật 10,000 giờ bay. 6 tháng thực hành tập trung không quá dài, không quá ngắn, đủ để bạn bắt đầu một hành trình 10,000 giờ trở thành chuyên gia, có mức lương tốt và sự công nhận từ đồng nghiệp.

Các kiểu ký tự trong lập trình C++

Chào mừng các bạn đến với bài học tiếp theo trong khóa học lập trình ngôn ngữ C++ hướng thực hành.

Trong hầu hết tất cả các bài học trước đây, chúng ta chỉ làm việc cùng nhau trên kiểu dữ liệu số. Chúng ta sử dụng các biến lưu trữ giá trị số (số nguyên int, số thực như float hoặc double, ...) để phục vụ cho việc tính toán toán học, giải quyết các bài toán đơn giản là chủ yếu.
Trong bài học ngày hôm nay, chúng ta sẽ tìm hiểu một kiểu dữ liệu cũng là một trong những kiểu dữ liệu cơ bản trong ngôn ngữ C và C++, đó là kiểu kí tự.

Kiểu kí tự là gì?

Cũng tương tự như các kiểu dữ liệu số (int32_tfloatuint64_t, ...), kiểu kí tự là một kiểu dữ liệu có độ lớn 1 byte (8 bits) dùng để lưu trữ 1 kí tự trong vùng nhớ máy tính. Kí tự có thể là các chữ cái đơn trong bảng chữ cái (a, b, c, ... x, y z), có thể là các kí hiệu toán học (+, -, *, /, ...), hay có thể là những con số (0, 1, 2, ..., 9)...
Một đặc điểm của kiểu kí tự là KHÔNG PHẢI MỌI KÝ TỰ đều có thể hiển thị được lên màn hình.
Trong C/C++, kiểu kí tự có thể lưu trữ 1 kí tự trong bảng mã ASCII.
Đây là bảng mã kí tự ASCII đầy đủ:
Bảng mã ASCII được chia làm 2 cột:
  • Cột Code là số thứ tự của kí tự trong bảng mã ASCII.
  • Cột Symbol là kí tự được chuyển đổi từ mã Code sang dạng có thể đọc được.

Khai báo biến kiểu kí tự như thế nào?

Để khai báo biến kiểu kí tự trong C/C++, ta dùng từ khóa char như sau:
char character; //declare a variable type char
char ch(65); //declare a variable type char and initialze with ASCII code
char a = 'a'; //declare a variable type char and initialize with a symbol of ASCII table
Cú pháp hoàn toàn giống việc thực hiện khai báo biến thông thường.
Biến kiểu kí tự (char) thực tế cũng là một kiểu số nguyên kích thước 1 byte (tương đương với int8_t), nó lưu trữ giá trị là mã Code của kí tự đó, nhưng khi hiển thị lên màn hình, nó cho ra kết quả là kí tự (Symbol) chứ không in ra mã ASCII của kí tự đó.
Vì thế, chúng ta có thể khởi tạo cho biến kiểu char bằng cách gán một kí tự đặt giữa cặp dấu nháy đơn. Ví dụ:
char ch = 'a';
ch = 'b';
hoặc cũng có thể gán trực tiếp mã Code của kí tự đó trong bảng mã ASCII. Ví dụ:
char ch = 97; //kí tự 'a' trong bảng mã ASCII có mã là 97
ch = 98; //kí tự 'b' trong bảng mã ASCII có mã là 98

In biến kiểu kí tự ra màn hình

Để in một kí tự ra màn hình, chúng ta có thể thực hiện bằng nhiều cách khác nhau:
  • In trực tiếp một kí tự đặt trong cặp dấu nháy đơn:
    cout << 'h' << 'e' << 'l' << 'l' << 'o' << endl;
Ở câu lệnh trên, mình sử dụng đối tượng cout để in ra một dãy nhiều kí tự đơn nối tiếp nhau. Sau khi chạy chương trình, dòng lệnh trên sẽ in ra màn hình dãy kí tự hello.
  • Sử dụng biến kiểu char để lưu trữ một kí tự:
    char h = 'h', e = 'e', l = 'l', o = 'o';
    cout << h << e << l << l << o << endl;
Chúng ta có thể sử dụng lại nhiều lần 1 biến, nên mình chỉ cần khai báo 1 lần biến l để lưu trữ kí tự 'l'. Câu lệnh trên cho kết quả hoàn toàn tương tự, dòng hello sẽ được in ra màn hình.
  • In trực tiếp mã Code của kí tự trong bảng mã ASCII (nhưng ép về kiểu char):
    cout << static_cast<char>(67) << static_cast<char>(43) << static_cast<char>(43) << endl;
Các bạn thử tra trong bảng mã ASCII xem thử hai số 67 và 43 đại diện cho 2 kí tự gì nhé, sau đó đoán xem kết quả in ra màn hình của dòng lệnh trên là gì.
  • Chúng ta có thể in ra mã Code của 1 biến kí tự:
    char ch = 'V';
    cout << static_cast<int16_t>(ch) << endl;
Bằng cách ép kiểu của biến ch về kiểu số nguyên, chương trình sẽ in ra 1 con số là số thứ tự của kí tự đó trong bảng mã ASCII.
Như mình đã nói, kiểu kí tự (char) hoàn toàn là kiểu số nguyên (int8_t). Để in ra kí tự đại diện cho số nguyên đó, chúng ta cần định dạng cho nó là kiểu kí tự (char) thì compiler mới hiểu là chúng ta đang cần hiển thị kí tự chứ không phải con số.
Bây giờ chúng ta thử in ra toàn bộ bảng mã ASCII trên màn hình dưới dạng
<Code>: <Symbol>
bằng cách sử dụng 1 vòng lặp for để in ra toàn bộ kí tự từ mã 0 đến mã 127.
cout << "Code" << '\t' << "Symbol" << endl;
for(int16_t ascii_code = 0; ascii_code <= 127; ascii_code++) {
 cout << ascii_code << '\t' << static_cast<char>(ascii_code) << endl;
}
Và kết quả in ra màn hình:
Chắc các bạn còn nhớ kí tự đặc biệt '\t' tương đương với 1 Tab trên màn hình console. Nếu không nhớ thì cũng không sao, mình sẽ nhắc lại một chút ở phần bên dưới.
Có một số mã Code cho ra kí tự khoảng trắng vì đó là những kí tự đặc biệt, ví dụ mã 7 đại diện cho 1 tiếng Beep, nên nó không có kí tự để in ra.

Nhập giá trị cho kiểu kí tự (char) từ bàn phím

Nhập kí tự từ bàn phím cũng tương tự việc nhập giá trị số từ bàn phím để gán cho biến. Chúng ta có thể sử dụng đối tượng cin như cách chúng ta sử dụng với biến số nguyên, số thực ...
char ch;
cout << "Enter a character from your keyboard: ";
cin >> ch;
cout << ch << " has ASCII code " << static_cast<int16_t>(ch) << endl;
Các bạn cùng nhìn vào phần kết quả chương trình mình đã thực thi bên dưới:
Mình không thực hiện nhập 1 kí tự từ bàn phím, thay vào đó, mình nhập nhiều kí tự liên tiếp nhau, và điều gì xảy ra? Biến ch (kiểu char) chỉ nhận vào 1 kí tự duy nhất là kí tự đầu tiên mà mình nhập vào.
Vậy thì những kí tự còn lại sẽ đi đâu? Nó vẫn còn được lưu trữ tạm thời bên trong đối tượng file stdin. Để kiếm chứng điều này, mình thêm một đoạn mã nhỏ sau khi in ra kí tự của biến ch trên màn hình:
char ch;
cout << "Enter a character from your keyboard: ";
cin >> ch;
cout << ch << " has ASCII code " << static_cast<int16_t>(ch) << endl;

//check if there is any character exist in stdin file object
if (!cin.eof()) {
 cout << "There are some character more in stdin file object" << endl;
}
Nếu cin.eof() trả về giá trị là đúng, điều này có nghĩa chúng ta đã lấy hết kí tự trong đối tượng file stdin ra và đọc được kí tự kết thúc file (EOF = End of file). Vì thế, nếu điều này không xảy ra, tức là !cin.eof() là đúng, nghĩa là vẫn còn kí tự bên trong đối tượng file stdin.
Mình sẽ chạy lại chương trình với đoạn mã mà mình vừa thêm vào để các bạn cùng xem kết quả:
Mình nhập vào "Le Tran Dat" và biến ch (kiểu char) nhận vào kí tự đầu tiên (kí tự 'L'), chương trình thông báo tiếp vẫn còn kí tự tồn tại bên trong đối tượng file stdin.
Vì thế, khi chúng ta tiếp tục thêm vào dòng lệnh nhập kí tự khác phía sau đoạn chương trình trên, nó sẽ không dừng lại chờ người dùng nhập kí tự nữa mà nó lấy luôn kí tự tiếp theo trong đối tượng file stdin để đưa vào biến. Các bạn cùng chạy đoạn mã lệnh sau để kiểm chứng kết quả:
char ch;
cout << "Enter a character from your keyboard: ";
cin >> ch;
cout << ch << " has ASCII code " << static_cast<int16_t>(ch) << endl;

//check if there is any character exist in stdin file object
if (!cin.eof()) {
 cout << "There are some character more in stdin file object" << endl;
}

//Continue reading a character from stdin file object
char next_ch;
cin >> next_ch;
cout << "The next character is " << next_ch << endl;
Và đây là những gì chương trình cho ra kết quả:
Biến ch nhận vào kí tự đầu tiên là 'L', biến next_ch lấy ngay kí tự 'e' mà không đợi người dùng nhập thêm kí tự khác.
Sẽ có trường hợp chúng ta chỉ muốn nhận vào biến kí tự đầu tiên chúng ta nhập vào, những kí tự thừa phía sau có thể là do chúng ta nhấn nhầm phím nào đó, và chúng ta muốn loại bỏ những kí tự thừa đi để nhập lại kí tự khác cho biến char tiếp theo. Trong trường hợp này, có hai cách để thực hiện xóa toàn bộ dữ liệu đang tồn tại trong đối tượng file stdin:
  • Sử dụng hàm fflush(FILE *file):
Đây là một hàm được định nghĩa trong ngôn ngữ C, nhưng chúng ta hoàn toàn có thể sử dụng nó trong ngôn ngữ C++. Hàm fflush nhận vào một đối tượng file mà chúng ta muốn xóa dữ liệu bên trong nó (trong trường hợp này là đối tượng file stdin).
fflush(stdin); //Add this command line where you want to clear all data in stdin file object
  • Sử dụng phương thức ignore của đối tượng cin để bỏ qua toàn bộ kí tự bên trong đối tượng file stdin:
Phương thức ignore này nhận vào 2 đối số là số kí tự nó sẽ bỏ qua, và kí tự khiến lệnh này dừng lại khi gặp phải trong đối tượng file stdin, ở đây mình sử dụng kí tự '\n' là kí tự được tạo ra khi nhấn phím Enter.
cin.ignore( INT64_MAX, '\n');
Sau khi sử dụng một trong hai cách trên, lần yêu cầu nhập dữ liệu từ bàn phím tiếp theo (thông qua đối tượng cin) sẽ phải thực hiện nhập lại từ đầu.

Một cách nhập dữ liệu khác cho kiểu kí tự (char)

Cũng sử dụng đối tượng cin thuộc thư viện iostream, nhưng không dùng toán tử >> mà sử dụng phương thức getcủa đối tượng cin. Có hai cách sử dụng phương thức get của đối tượng cin để nhập dữ liệu cho biến kiểu char, các bạn có thể nhớ 1 trong 2 cách mà bạn cảm thấy dễ hiểu nhất:
char ch;
ch = cin.get(); //get method return the character which you just entered
cin.get(ch); //put a char variable into the brackets
Cả 2 cách trên đều cho ra kết quả tương đương nhau.

Escape sequences

Trong C/C++ có một số kí tự có ý nghĩa đặc biệt, nó được gọi là escape sequences. Một escape sequences bắt đầu bằng một dấu '\' và theo sau là một kí tự hoặc con số.
Ví dụ:
cout << "First line\nSecond line" << endl;
First line
Second line
Hay dòng lệnh dưới đây:
cout << "First part\tSecond part" << endl;
Sẽ cho chúng ta kết quả:
First part    Second part
Bạn chỉ có thể in ra kí tự nháy kép bằng cách thêm dấu backslash '\' trước kí tự nháy kép trong dãy kí tự bạn muốn in ra.
cout << "This is \"quote\" text" << endl;

Có một số bạn thắc mắc rằng, kí tự xuống dòng '\n' và đối tượng endl trong thư viện iostream khác nhau như thế nào?

Khi sử dụng std::endl (sử dụng toán tử phạm vi để truy cập vào đối tượng endl bên trong namespace std), output sẽ được đẩy vào vùng bộ nhớ đệm, đối tượng cout có thể không chuyển text trực tiếp đến thiết bị đầu ra ngay lập tức.
Cả kí tự '\n' và đối tượng endl đều chuyển con trỏ đến vị trí đầu dòng tiếp theo, thêm vào đó, đối tượng endl đảm bảo thứ tự trên thiết bị đầu ra đúng với lúc nhập dữ liệu từ đầu vào.
cout << endl;
tương đương với
cout << '\n' << std::fflush;
Sử dụng đối tượng std::endl sẽ làm sạch luôn stream, trong khi đó, sử dụng kí tự '\n' chỉ đơn giản là đưa kí tự xuống dòng lên màn hình.
Câu trả lời ngắn gọn cho việc khi nào sử dụng std::endl và '\n' là:
  • Sử dụng std::endl khi bạn cần đảm bảo cho ra kết quả ngay lập tức, cụ thể khi làm việc trên các thiết bị đầu ra chậm.
  • Sử dụng '\n' cho các trường hợp còn lại.

Sự khác nhau khi đặt kí tự bên trong cặp dấu nháy đơn và cặp dấu nháy kép là gì?

Như đã học trong bài này, một biến kí tự (char) chỉ được dùng để đặc tả 1 kí tự trong bảng mã ASCII, và chúng ta luôn đặt 1 kí tự đơn bên trong 1 cặp dấu nháy đơn.
char ch('65');
ch = 'a';
Những kí tự được đặt bên trong cặp dấu nháy kép được gọi là chuỗi kí tự (string). Một string là một tập hợp các kí tự nối tiếp nhau. Ví dụ:
cout << "Hello everyone!" << endl; //Hello everyone is a string
Tất nhiên làm việc với chuỗi kí tự (string) sẽ phức tạp hơn, nên các bạn sẽ được học nó trong các bài học sau.

Do stupid thing with char type

Trước khi kết thúc bài học này, mình sẽ hướng dẫn các bạn làm một cái gì đó với kiểu kí tự (char) mà các bạn đã được học.
Mình muốn thực hiện nhập họ và tên của mình (Viết không dấu do bảng mã ASCII bị giới hạn) từ bàn phím. Xóa màn hình console đi và in ra lại họ tên mà mình vừa nhập từ bàn phím, nhưng in ra lần lượt từng kí tự, mỗi lần in kí tự sẽ tạm dừng trong một khoảng thời gian ngắn.
Để thực hiện được yêu cầu này, mình sẽ cung cấp cho các bạn một số chức năng cần thiết:
  • system("cls");
Hàm này gọi đến lệnh cls, thực hiện xóa dữ liệu đã in ra trên console.
  • Sleep(DWORD miliseconds);
Hàm này sẽ tạm dừng mọi công việc thực hiện trên console trong một khoảng thời gian miliseconds mà bạn truyền vào. Để sử dụng hàm này cần thêm thư viện windows.h tại phần khai báo thư viện.
Các bạn chưa được học cách để lưu trữ biến là một chuỗi các kí tự liên tiếp nhau, nên việc lưu trữ dãy kí tự tên của bạn bên trong biến là rất khó khăn. Chúng ta chỉ mới biết đến cách lưu trữ 1 kí tự bên trong 1 biến kiểu char.
Nhưng thử nhớ lại những điều mình đã nói, khi thực hiện nhập kí tự từ bàn phím mà bạn nhập thừa kí tự thì điều gì xảy ra? Những kí tự thừa vẫn còn lưu trữ bên trong đối tượng file stdin, vì thế, chúng ta chỉ cần lấy những kí tự đó ra 1 lần nữa thông qua đối tượng cin.
Ban đầu, chúng ta yêu cầu người dùng nhập tên đầy đủ của mình vào:
char ch;
cout << "Enter your full name: ";
cin >> ch;
Kí tự đầu tiên mà bạn nhập sẽ lưu vào biến ch, những kí tự còn lại vẫn lưu trong đối tượng file stdin.
Tiếp theo, chúng ta thực hiện xóa màn hình console:
system("cls");
Công việc còn lại, chúng ta lấy lần lượt từng kí tự vẫn được lưu trong đối tượng file stdin cho đến khi gặp kí tự xuống dòng '\n' hoặc kí tự kết thúc file EOF. Các bạn nhớ phải in kí tự đã lưu trong biến ch ra trước rồi mới đọc tiếp vào nhé.
do
{
 Sleep(50); //Pause the program for 50 miliseconds
 cout << ch;
 ch = cin.get();
} while (ch != '\n' && ch != EOF);
Vòng lặp trên sẽ dừng khi biến ch nhận được kí tự xuống dòng '\n' (lúc bạn nhấn Enter để kết thúc nhập) hoặc kí tự kết thúc file EOF.
Kết hợp những phần trên thành một chương trình hoàn chỉnh:
#include <iostream>
#include <Windows.h>
using namespace std;

int main() 
{
 char ch;
 cout << "Enter your full name: ";
 cin >> ch;

 system("cls");

 do
 {
  cout << ch;
  ch = cin.get();
  Sleep(50);
 } while (ch != '\n' && ch != EOF);
 cout << endl;

 system("pause");
 return 0;
}
Các bạn thử chạy chương trình, nhập full-name của các bạn vào xem điều gì xảy ra nhé!