5 việc đơn giản có thể khiến bạn trở thành một lập trình viên hiệu quả (Phần 1)

 
Bài viết hướng tới độc giả là các bạn trẻ đang học lập trình, cũng như các lập trình viên mới vào nghề muốn trau dồi kỹ năng bản thân.

Có thể các bạn là sinh viên đang đi học, thấy project kỳ nào làm ra cũng rõ lắm bug, điểm thì lẹt đà lẹt đẹt mãi không khá được?

Hoặc có thể bạn mới đi làm, cuối tuần đáng lẽ ở nhà chơi game, đi xem phim với người yêu, thì lại bị chậm deadline, sếp bắt lên công ty ngồi code nốt?

Bạn bối rối, bạn loay hoay, không hiểu tại sao cùng là người với nhau, thằng ngồi cạnh bạn nó code nhoáy nhoáy nó rung đùi ngồi chơi, còn bạn thì trì trạc mãi hết ngày vẫn chưa xong cái gì cả?

Vậy có cách nào giải quyết tình trạng đấy không?

Thật ra là có đó.

Đọc tiêu đề nghe rất có mùi giật tít câu view phải không ạ? Nhưng hãy thử làm theo 1 trong số những điều tôi nói đến trong bài viết này, các bạn sẽ thấy sự khác biệt ngay-lập-tức.

“It’s not bragging if it’s true.”

Đây là bài viết hoàn toàn Tech và logic. Sẽ không có những lời khuyên về việc đặt đồng hồ buổi sáng, ngồi thiền tập yoga, tư thế chuẩn mực khi ngồi bàn hay công thức tính thời gian bạn nhìn máy tính bao nhiêu phút một ngày. Vì tôi không phải bác sĩ hay nhà báo, tôi là lập trình viên. Bạn thích sống thế nào là việc của bạn. Tôi chỉ đưa ra lời khuyên cho những lúc bạn ngồi code, và cả lý do logic tại sao dựa trên trải nghiệm của chính bản thân mình.

Tôi không thể biến bạn thành Bill Gates sau 1 đêm, cái này không ai làm được. Nhưng tôi có thể giúp bạn trở thành 1 thằng coder mỗi ngày đúng 6h tắt máy dắt xe đi về, đều như vắt chanh.

Vào bài ạ.


1. Luôn luôn tuân theo coding convention

“Rồi rồi biết rồi”? “Cái này em vẫn làm theo sẵn rồi anh ei”?

Các bạn có chắc chắn không?

Tôi gặp 10 lập trình viên mới vào nghề hỏi họ “Có làm theo coding convention không?”, thì cả 10 đều trả lời họ có. Nhưng mà đến lúc mở code ra thì phải đến 9 người chả có theo cái coding convention nào hết. Họ theo cái coding convention gọi là “Ờ thì nói chung là em có theo, chỉ có đoạn này em đang test thử có chạy không nên để tạm thế thôi”.

Coding convention là thứ mà khi bạn học lập trình trường nào, lớp nào cũng dạy các bạn. Nhưng có 1 cái quan trọng nhất các trường lớp lại thường không dạy, đó là “tại sao” lại cần làm thế.

Bởi vì không biết tại sao, nên hầu hết mọi người đều không hiểu được tầm quan trọng của coding convention, dẫn tới coi nhẹ nó. Cái câu trích dẫn ở trên, đợi tý để tôi quote lại to đẹp đóng khung lên nhìn cho dễ:

“Ờ thì nói chung là em có theo, chỉ có đoạn này đang em test thử có chạy không nên để tạm thế thôi”

~ Thanh niên làm overtime 1 tuần 7 ngày chia sẻ

Các bạn có bao giờ nói câu này chưa? Nếu chưa bao giờ thì quá tốt, tôi mừng cho bạn. Nếu là câu cửa miệng thì rất buồn bạn ạ; mỗi lần bạn nói câu này là 1 lần sếp của bạn, đồng nghiệp của bạn phải thở dài 1 câu “Sao tôi lại phải làm cùng với 1 thằng dốt như thế này? Haizz….” (tôi có thâm niên thở dài 7 năm liên tiếp không ngừng nghỉ rồi các bạn ạ, thở dài chuyên nghiệp và có thần lắm)

Coding convention chỉ có ý nghĩa, khi từng dòng từng dòng code trong project của bạn tuân thủ chặt chẽ theo ngay khi bạn viết nó.

Thực ra trong các lời khuyên của tôi, chỉ riêng điều này sẽ đem lại hiệu quả tương đương với cả 4 điều còn lại cộng lại.

Demo luôn, đoạn code sau có bug, các bạn thử xem lỗi tại sao nhé:

function renderScene()
{	if(this.matrixNeedsUpdate ) this.updateTextureMatrix();
      this.matrixNeedsUpdate = true;

      var scene=this;
    while ( scene.parent !==null){
    scene= scene.parent;
}
	if ( scene !== undefined && scene instanceof THREE.Scene ) {
		this.renderer.render( scene, this.mirrorCamera, this.tempTexture, true );
}

Rất khó tìm đúng không ạ? Có thể bạn thấy đây là một đống code loạn xạ, công nghệ gì đây bạn cũng không rõ. Đang nhiên bảo tìm bug thì ai mà tìm được?

Giờ vẫn đoạn code đó, tab lại cho chuẩn:

function renderScene {
  if ( this.matrixNeedsUpdate ){
    this.updateTextureMatrix();
  }
  this.matrixNeedsUpdate = true;

  var scene = this;
  while ( scene.parent !== null ){
    scene = scene.parent;
  }

  if ( scene !== undefined && scene instanceof THREE.Scene ) {
    this.renderer.render( scene, this.mirrorCamera, this.tempTexture, true );
  }

Chẳng cần trình độ cao siêu gì, nhìn qua ai cũng thấy rõ ràng cái hàm renderScene này nó thiếu dấu } kết thúc ở cuối. Thêm cái đóng ngoặc vào là xong.

Các bạn có thấy cảnh này rất quen không ạ? Code chạy lỗi, không hiểu tại sao. Vò đầu bứt tóc nửa ngày không tìm ra, đến cuối cùng hoá ra tại thiếu dấu ;.

Tìm ra xong bạn thở phào buông 1 câu với sếp “Tại mỗi cái dấu chấm phẩy chứ code em đáng nhẽ ngon rồi.”

Sai lầm.

Sai rất lớn. Dấu chấm phẩy đấy nó không nhỏ đâu, và code của bạn nói 1 cách mỹ miều thì nó như cứt.

Thiếu ;, đóng nhầm ngoặc, điền sai tên. Đáng nhẽ là I thì lại nhầm là l. Hơn một nửa số bug trong bất cứ chương trình nào đều là lỗi typo do sai chính tả.

Giá mà có cách nào để những lỗi typo kiểu đấy không xảy ra thì tốt phải không ạ? Bớt 1 nửa số bug là giảm 1 nửa số tóc rụng trên đầu bạn mỗi ngày, giảm 1 nửa thời gian fix bug.

Giá mà có 1 phép màu kỳ diệu nào để bạn có thể code trơn tru mà không còn phải lo chuyện viết sai chính tả nữa…

Vâng, phép màu đấy không có gì xa vời, mà đã được dạy cho bạn từ khi còn đang mài đít trên ghế giảng đường rồi, nó chính là coding convention đấy ạ.

Đặt tên biến như thế nào? Đặt tên hàm như thế nào?

Xuống dòng ở đâu, chỗ nào tab lại, chỗ nào cách ra?

Khai báo biến ở chỗ nào, hàm private vứt vào đâu?

Mỗi file chỉ chứa 1 class, không viết code quá dài.

Không dùng tiếng Việt trong code.

Vân vân và vân vân.

Tất cả, tất cả những cái đấy sinh ra chỉ với 1 mục đích duy nhất: để đảm bảo là code của bạn không có mấy cái “lỗi vặt” nữa.

Để đảm bảo là code của bạn có một bố cục rõ ràng, hướng đi cụ thể; để bạn không phải vắt óc lên nghĩ mỗi khi cần đặt tên biến mới rồi sinh ra một cái tên lăng nhăng dẫn đến nhầm lẫn sau này.

Làm lập trình càng lâu ta càng thèm muốn cảm giác code không có bug. Và kỹ năng né bug quan trọng nhất trong tất cả, dễ học dễ làm không cần kinh nghiệm mà hiệu quả kinh người là gì? Là coding convention.

Tôi có đủ cơ sở cả về lý thuyết lẫn thực tế để tin rằng nếu code của bạn trông như một bãi rác, thì đầu của bạn thật ra cũng toàn là rác.

Bây giờ là lúc tốt nhất để lên google search xem coding convention của ngôn ngữ bạn đang dùng là gì đấy ạ.

Chỉ cần học thuộc, làm theo.

Làm đến khi nó thành bản năng của mình.

Tay code đến đâu tự động theo chuẩn đến đây, khi đó bạn sẽ thấy chỉ cần mắt bạn lướt qua sẽ nhìn ra ngay code ở đâu có bug.

  • Code của mình – code đến đâu làm theo coding convention đến đấy.
  • Code của người khác – cóp vào format lại theo chuẩn coding convention của project trước đã, rồi làm gì thì làm.

Nhớ kỹ: coding convention chỉ có một là theo 100%, hai là không theo. Theo 99% mà 1% còn lại freestyle thì cũng vô nghĩa.


2. Không copy paste code của người khác

Tôi hoàn toàn không phản đối các bạn lên google search khi gặp bug. Cũng không cấm các bạn dùng code của người khác cho việc của mình.

Cái tôi phản đối là việc copy code của người khác vào mà hoàn không hiểu đoạn code đó cụ thể nó làm cái gì.

“Good Artists Copy; Great Artists Steal”

~Theo lời của Steve Jobs thì là lời của Pablo Picasso.

Đặc điểm chung của các bạn mới vào nghề là khi cóp code vào thường chạy thử đã, nếu chạy thì ok việc đã xong, ta nhảy sang làm việc khác. Nếu có lỗi xảy ra mới đọc tiếp xem có khả năng sửa chữa gì không.

Đây là một cách làm việc cực kỳ ấu trĩ và thiển cận. Trong phần lớn các trường hợp thì cùng lắm khoảng 1 tháng sau các bạn rồi lại phải quay lại với chỗ code lạ hoắc đó, vì có bug phát sinh. Bấy giờ thậm chí không còn hiểu nổi chỗ này lúc đó mình đang muốn cái gì, nói gì đến việc mò xem code đó sai ở đâu?

Nếu một ngày tự nhiên có thanh niên lạ hoắc, mặt đầy sẹo tay cơ bắp lưng đeo ba lô vô duyên vô cớ gõ cửa nhà bạn xin ngủ nhờ qua đêm “Em chỉ ngủ nhờ thôi anh yên tâm hihi” thì các bạn có yên tâm mà cho thanh niên đấy ngủ nhờ không?

Thế thì vì lý do gì bạn tin tưởng 1 đoạn code do 1 người mà bạn hoàn toàn không biết viết nên, cóp nó vào trong code của mình và không bao giờ ngó đến nữa?

Có 2 lý do chính để đọc kỹ bất cứ đoạn code nào bạn chuẩn bị cóp vào project trước khi sử dụng nó:

  1. Để đảm bảo đoạn code đó chỉ làm những gì nó nói: Có rất nhiều câu chuyện các thanh niên lên mạng hỏi, gặp phải 1 đứa ngẫu hứng vứt cho đoạn code phá hoại. Thanh niên hào hứng đem về paste vào project chạy thử (vâng, đúng như bạn đang làm ấy ạ), kết quả là toàn bộ dữ liệu đi tong, khóc lóc bấy giờ đã muộn. Thằng kia “Ơ tao cũng chỉ trêu vui thôi, ai ngờ mày ngu vậy?”
  2. Để học: Bạn đang gặp vấn đề, có người giúp bạn giải quyết nó. Đây là bài học thực tiễn vô cùng quý giá. Hãy đọc những dòng code đó, cố gắng hiểu xem nó nghĩa là gì. Vấn đề của bạn đã được người đó giải quyết như thế nào.

    Nghĩ xem có cách nào sửa đổi, cải tiến nó để phù hợp với tình huống cụ thể của mình không.

Biến code của người khác thành của mình.

Hôm nay bạn phải hỏi họ vấn đề này, thì hãy đảm bảo ngày mai bạn sẽ là người trả lời.

Việc nắm vững từng dòng code mà mình viết ra là vô cùng quan trọng. Nó trực tiếp ảnh hưởng đến tốc độ giải quyết vấn đề của bạn khi có bug xảy ra hoặc khi yêu cầu dự án thay đổi. Khi bạn thực sự đã hiểu từng dòng code làm gì, thì tư duy của bạn có thể tập trung giải quyết vấn đề theo phương pháp loại suy đơn giản, thay vì băn khoăn lạc lõng không biết đi về hướng nào.

Điều đó cũng nghĩa là: nếu bạn tìm thấy một đoạn code hứa hẹn giải quyết được vấn đề của mình, nhưng bạn đọc không hiểu lắm, thì tốt nhất là đừng dùng nó.

Đống code không-hiểu-lắm đấy sẽ đem lại cho bạn hậu quả thê thảm hơn nhiều những gì bạn đang mong nó giải quyết.

3 bước để biến code người khác thành code của mình:

  1. Copy vào project, format lại ngay theo coding convention của project.
  2. Đọc kỹ để hiểu đoạn code đó cụ thể làm những gì, đảm bảo nó làm đúng việc mà nó nói. Chạy thử, fix bug nếu cần.
  3. Thay đổi, cải tiến, chỉnh sửa đoạn code đó để phù hợp với hoàn cảnh project của mình.

Đảm bảo 3 bước này xong, code đó đã là code của bạn.

Sau này chắc chắn sẽ đến lúc bạn phải quay lại với nó: vì có bug, vì yêu cầu dự án thay đổi, hoặc cần optimize performance…

Nhưng khi đó bạn đã là chủ nhân của nó rồi.

Via Tôn Hồng Đức

[Series Lập Trình Qt] #3 Tìm hiểu 1 số view thông dụng.

Ở phần trước chúng ta đã viết được chương trình đầu tiên với giao diện đồ họa, ở phần này chúng ta sẽ tìm hiểu 1 số view cơ bản của

1. Label

Tạo project mới, mở cửa sổ UI kéo 1 label và đặt tên cho nó. ở đây mình đặt là lb_simple.

untitled

quay lại cửa sổ chúng ta sẽ setText cho nó (sử dụng QString::fromUtf8() để viết tiếng Việt)

untitled

Một vấn đề với label với văn bản quá dài nó chỉ hiển thị được 1 phần, giải pháp ở đây là dùng Text Browser.

Ở đây mình sẽ ví dụ phức tạp hơn 1 chút với tương tác giữa 4 view: label, button, text browser

và text edit.

Thiết kế giao diệnuntitled

Ở đây ta muốn khi button được nhấn getText ở edit text và set cho label và textBrowser ta làm như sau:

chọn push button-> go to slot-> clicked. Ta viết hàm như sau ( chú ý tên của các view):

void MainWindow::on_pb_show_clicked()
{
     // lấy text từ edit text
     QString s=ui->te_simple->toPlainText();
     // set cho label và text browser
     ui->lb_simple->setText(s);
     ui->tb_simple->setText(s);
}

Chạy ta sẽ được kết quả

untitled

Thử với 1 văn bản dài ta sẽ nhận thấy điểm yếu của label

untitled

 

[Lập trình] Cách học lập trình nhanh hơn

Phải nói là rất may mắn khi lang thang giữa đêm khuya tình cờ đọc được bài viết này trên Blog thanhcuong.wordpress.com. Nó rất hữu ích cho tôi và mong rằng bạn cũng cảm thấy điều đó. Và xin phép tác giả được chia sẻ và eidt một chút bài viết này ^^.

5 cách học lập trình nhanh hơn

Học lập trình không phải là chuyện mà ta có thể làm trong một sớm, một chiều, nhưng nó không phải là quá khó khăn. Có rất nhiều điều bạn có thể làm cho nó dễ dàng hơn khi bạn học lập trình. Bài viết sau đây được tham khảo từ trang web cprogramming.com sẽ có thể giúp ích cho chúng ta khám phá được những bí quyết để học lập trình tốt hơn và nhanh hơn.

Một trong những chủ đề được nói đến rất nhiều về mẹo học lập trình là:

Đừng đi quá nhanh, hãy nắm bắt nó trước khi đi tiếp. (Don’t go too fast, get it right before move on)
Chúng ta thường thắc mắc tại sao trong lớp học của mình, có một số bạn của chúng ta biết trước về một số ngôn ngữ lập trình. Trong những tuần đầu tiên học thường nắm bắt kiến thức rất nhanh, nhưng càng về sau họ lại bị bỏ ở đằng sau bởi những sinh viên khác. Tại sao họ lại bị bỏ xa trong khi nền tảng của họ tốt hơn.???

Đó chính là việc họ đã đi quá nhanh, và lối mòn của họ là tưởng rằng mình biết tất cả nhưng thực sự họ hiếm khi thực hiện công việc lập trình. Có thể họ biết một số cái nâng cao hơn so với những sinh viên foundationkhác, nhưng bấy nhiêu đó là không đủ để nắm vững các nguyên tắc cơ bản. Cũng giống như khi chúng ta làm bài kiểm tra môn toán thường có 8 điểm là có một người có học lực khá có thể đạt được, nhưng có một số sinh viên làm được bài 2 điểm khó kia và có một số bài tập cơ bản vẫn chưa hoàn thành, nên kết quả không bằng một sinh viên nắm vững các kiến thức cơ bản có thể làm được.

Do đó, trước tiên chúng ta cần tạo cho mình một nền tản (Foundation) tốt bằng cách thường xuyên luyện tập thực hành cái bài tập lập trình. Trong quá trình luyện tập như vậy bạn sẽ thấy được những vấn đề cơ bản mà các lập trình viên thường mắc phải. Và tạo cho mình một thoái quen tốt để giải quyết vấn đề.

Nhưng đừng lấy đó làm cớ để cứ “chậm” hơn người khác. Bạn đừng bao giờ ngừng tiến trình luyện tập của mình, cũng không nên đi quá nhanh hay quá chậm. Đừng tránh một chủ đề nào sau khi bạn đã nắm vững tất cả những gì dẫn đến nó. Bằng cách đối mặc với nhiều ý tưởng và thách thức, bạn sẽ có một chất men giúp bạn nhanh chóng nắm bắt được những vấn đề cơ bản. Sau đây là 5 cách để bạn định hướng được việc học lập trình nhanh hơn.

1. Xem các code ví dụ (Look at the Example Code)

 

Khi đọc sách chúng ta thường đọc các từ trên trang sách đó, nhưng học lập trình thì đó là code. Khi bạn mới bắt đầu học lập trình, bạn nên xem xét kỹ lưỡng và cố gắng hiểu từng ví dụ. Trước khi đọc các lời giải thích về chương trình trong sách, bạn nên cố gắng đọc và hiểu các đoạn code tác giả đã viết dùng để làm gì. Tuy các ví dụ đó không phải khi nào đánh vào máy cũng chạy, nhưng nó tập cho chúng ta một thoái quen xem code cẩn thận và góp phần giúp chúng ta viết code rõ ràng hơn.

Chúng ta phải viết code làm sao để cho các lập trình viên khác có thể đọc và hiểu nó, và để khi chính mình nhìn lại cũng nắm được. Do đó cần phải tuân thủ những nguyên tắc, và cú pháp khi viết code để đảm bảo kiểm tra lỗi đơn giản hơn, các phần hướng dẫn viết code theo một mẫu chuẩn thường được viết ở đầu các cuốn sách lập trình, nhưng ít người học lập trình để ý đến vấn đề này.

2. Đừng chỉ đọc các code ví dụ – hãy chạy thử nó (Don’t just Read exam code – Run It)

 

Khi bạn đọc một chương trình hướng dẫn (hay một cuốn sách), bạn thường xem các code ví dụ của nó và nói “Tôi đã nắm được nó, tôi đã hiểu được nó….”. Tất nhiên là bạn có thể nắm được nó, nhưng bạn thực sự chưa hiểu được nó hoạt động như thế nào, cho kết quả ra sao.

Do đó trước khi đọc một cuốn sách về lập trình, bạn nên cài trình biên dịch của ngôn ngữ mà bạn đang học vào máy (ví dụ học C++ thì bạn cài Dev C++ hay visual c++). Để sẵn sàng chạy thử tất cả các ví dụ trong cuốn sách hay chương trình mà bạn đang đọc.

Tôi nói chạy thử ở đây không phải là copy rồi paste vào rồi chạy. Tôi khuyên bạn nên tự mình đánh những đoạn code đó vào chương trình biên dịch, vì khi đó bạn thực sự buộc mình phải đi qua tất cả các mã,việc gõ mã lệnh sẽ giúp bạn chú ý đến các chi tiết cú pháp của ngôn ngữ – những sự thiếu soát buồn cười như thiếu đấu chấm phẩy ở cuối mỗi câu lệnh có thể làm bạn hết sức đâu đầu.

Sau khi gõ mã lệnh vào chương trình, hãy chạy thử nó. Rồi viết thêm một số câu lệnh mới vào chương trình của mình xem nó có hoạt động xem. Điều đó sẽ giúp bạn hiểu nhanh hơn mỗi câu lệnh có ý nghĩa như thế nào.

3. Hãy viết mã riêng của bạn càng sớm càng tốt (Write your own code as soon as possible).

write your code

Khi bắt đầu viết một chương trình bạn không biết phải bắt đầu từ đâu, sử dụng cấu trúc dữ liệu gì? Việc phân bổ viết code như thế nào? Xử lý các phương thức ra sao?… Điều đầu tiên là bạn sử dụng các công cụ tìm kiếm ở google hoặc các công cụ tìm kiếm khác để tìm kiếm đoạn mã mình cần. Đây là một điều có thể làm cho tư duy lập trình của bạn ngày càng giảm đi và ngày càng bị lệ thuộc vào các công cụ tìm kiếm.

Giải pháp được đưa ra trong trường hợp này là bạn hãy tự nghĩ cho mình một thuật toán riêng. Đầu tiên bạn viết nó bằng mã giả, sau đó dùng ngôn ngữ lập trình để viết lại. Tuy việc này rất khó và tốn nhiều thời gian, nhưng nó sẽ giúp bạn có được những kinh nghiệm thực sự hữu ích, khả năng tư duy lập trình ngày càng phát triển. Thay vì lên mạng tìm code về sửa.

Trường hợp ý tưởng chương trình của bạn lớn, phải viết một lượng lớn code. Khi đó bạn hãy phân nhỏ từng tính năng chương trình của mình ra, tự tập thiết kế cấu trúc của chương trình nhỏ đó, rồi ghép chúng lại với nhau sẽ được một chương trình lớn hoàn chỉnh hơn. Có thể chương trình đó không hoạt động tốt, nhưng cái mà bạn được ở đây chính là kinh nghiệm và một tư duy tự lập trong lập trình.

4. Tìm hiểu cách sử dụng một công cụ Debug (Learn to use a Debugger)

debug program

Debug là một công cụ rất tốt dùng để gỡ rối chương trình của bạn khi có một lỗi nào đó là chương trình bạn chạy sai. Nó cho bạn theo dõi giá trị của các biến và các thay đổi của chúng qua từng mã lệnh của chương trình. Công cụ debug mạnh nhất có lẽ được tích hợp trong các sản phẩm của Microsoft như Visual Studio (Hiện nay là visual studio 2010). Công cụ debug giúp chúng ta hiểu chương trình của mình hơn, và là thứ chúng ta cần phải biết khi viết chương trình..

Và lời khuyên cuối cùng về debug là: khi bạn lần đầu tìm hiểu về debuger, có thể nó sẽ làm bạn mất khá nhiều thời gian khi bạn sửa lỗi chương trình của mình. Nhưng khi bạn nắm được các kiến thức về debug nó sẽ đem lại cho bạn một lợi ích lớn trong việc tiết kiệm thời gian khi sửa lỗi chương trình. Tôi tin rằng mỗi bạn đều có thể tìm ra cho mình một cách debug chương trình hiệu quả, bởi nó sẽ theo suốt sự nghiệp lập trình của bạn.

Tôi thường thấy các sinh viên khác không muốn sử dụng công cụ debug (có thể là không biết giống như tôi lúc trước). Những sinh viên đã tự làm khó mình trong việc tìm kiếm lỗi sai trong chương trình. Do đó khi bạn đã xác định theo con đường lập trình, hãy học cách sử dụng một công cụ debug, nó sẽ mang lại cho bạn nhiều lợi ích thiết thực hơn bạn nghĩ.

5. Tìm kiếm thêm những nguồn tài tài liệu khác (Seek our more sources)

Khi bạn không hiểu một điều gì đó, internet là một nơi với lượng thông tin khổng lồ mà bạn tìm đến. Thế nhưng có những bài viết về đề tài mà bạn muốn tìm thì lại được tác giả viết sơ sài, hoặc có thể sai. Do đó bạn phải hết sức thận trọng khi sử dụng các thông tin từ internet vào chương trình của mình.Ngoài ra việc tìm kiếm một cuốn sách với những giải thích chi tiết sẽ giúp bạn nhanh chóng nắm được vấn đề hơn.

knowlege

Bạn cũng có thể tham gia vào các diễn đàn về lập trình (ví dụ lập trình c, c++, c# thì có diễn đàn Congdongcviet.com, Vietsource.net), khi không hiểu một vấn đề gì đó bạn có thể post bài để các thành viên trong diễn đàn giúp đỡ cho bạn. Nếu có khả năng về tiến anh thì bạn lên các diễn đàn nước ngoài sẽ có nhiều thành viên xuất sắc ở đó tìm kiếm thông tin và trả lời giúp (codeproject.com, cprogramming.com, cplusplus.com…). Lưu ý khi hỏi trên các diễn đàn bạn phải đặt câu hỏi ngắn gọn, tập trung vào mô tả nội dung vấn đề mà bạn đang gặp vướng mắc thì bạn sẽ nhận được câu trả lời tốt hơn.

Việc trước mỗi buổi học nên chuẩn bị một danh sách các câu hỏi về những vướng mắc mà bạn gặp phải vào một cuốn sổ tay nhỏ để lên hỏi giáo viên hoặc bạn bè là một việc rất có ích, nó sẽ giúp bạn tiếp thu hơn, và nó cho thấy rằng bạn là một con người cầu tiến, ham học hỏi.

Cuối cùng là việc hết sức quan trọng, Học Nhóm. Học nhóm sẽ giúp bạn tiến bộ nhanh hơn, tăng cường khả năng giao tiếp với bạn bè và đồng nghiệp sau này. Khi làm việc nhóm bạn sẽ viết ra được những chương trình lớn hơn và có sức thuyết phục người dùng hơn. Tôi khuyên bạn đừng bao giờ ôm hết công việc về mình.

Mong rằng những điều trên đây có thể giúp chúng ta chạy nhanh hơn trong thế giới lập trình luôn luôn thay đổi một cách tróng mặt!

[Series Lập Trình Qt] #2 Chương trình đầu tiên với giao diện đồ họa

Như thường lệ các bài Tutorials cơ bản chúng ta sẽ viết chương trình Hello World với giao diện đồ họa, ở đây mình sẽ giới thiệu một số thứ cơ bản về  các Label,button,…. cho các bạn

Các bạn có thể tìm kiếm tài liệu về Qt ở http://doc.qt.io ở đây có tất cả những tài liệu cho người mới bắt đầu hay kể cả chuyên gia.

Tạo dự án Qt mới

Chúng ta sẽ tạo 1 dự án mới qua thanh công cụ File > New File or Project. Chương trình đưa ra cho chúng ta khá nhiều lựa chọn về kiểu dự án mà chúng ta muốn thực hiện : ứng dụng giao diện đồ họa máy tính, ứng dụng di động, vv… Ở đây chúng ta sẽ chọn giao diện đồ họa QT Widgets Application Untitled

Quá trình tạo dự án sẽ được hướng dẫn bởi Qt Creator

hello.png

Ở đây tôi đặt tên dự án là HelloWorld bạn có thể đặt tên khác nếu muốn

Sau đó IDE sẽ hỏi bạn muốn dùng gói biên dịch nào của Qt. Trước mắt, chúng ta cứ sử dụng những lựa chọn mặc định mà IDE đề nghị.cuaso.png

Và đây là Project sau khi được tạo.

cuasomoio

Tôi sẽ giải thích sơ qua về các file này:

  • HelloWorld.pro : Project file.
  • main.cpp: file nguồn chính cho ứng dụng
  • mainwindow.cpp: file nguồn chính của lớp, mainwindow.ui
  • Mainwindow.h: file header của của lớp mainwindow
  • mainwindow.ui: giao diện đồ họa của ứng dụng

Tất cả các file đã được khởi tạo, bạn có thể ấn Windows+R để chạy chương trình nó sẽ hiện lên 1 cửa sổ và không có gì ở trong đó.

Chúng ta bắt đầu, bạn nhấn vào mainwindow.ui một cửa sổ design sẽ hiện raui

Phía bên trái là các Item, chúng ta có thể kéo thả chúng vào cửa sổ giao diện, tôi sẽ giải thích chúng dần qua các Tut hướng dẫn. Ở bài này chúng ta chỉ quan tâm đến Button và label.

  • Button (nút bấm): Khi ta ấn vào nó, 1 tín hiệu sẽ được truyền đi, chúng ta sẽ code 1 hành động khác được chạy khi nó bắt được tín hiệu phát ra từ button này như mở cửa sổ mới, chạy 1 hàm,hiển thị 1 dòng chữ…. Ở bài hướng dẫn này nó được dùng để gọi hành động hiển thị dòng chữ lên 1 Label.
  • Label: Hiển thị text cơ bản,ngoài ra ta có thể chèn ảnh,ảnh động…. vào đây, ở bài này tôi dùng nó để Hiển thị dòng thông báo “HelloWorld”.

Phía bên phải là thông số của các Item ta kéo vào Cửa sổ giao diện(tôi sẽ giải thích sau).

Chúng ta sẽ kéo 1 Label và 1 Push Button ở bên trái vào đây.

Bạn có thể nháy đúp vào chúng để thay đổi ký tự sẽ hiển thị. Điều chúng ta muốn ở đây là khi người dúng click vào button dòng chữ “Hello World” sẽ hiện ra ở Label.

uimoi

Bây giờ đến code, bạn nhấn chuột phải vào Push Button chọn Go to slot… chọn clicked()

Qt Creator đã tạo ra 1 hàm mới

on_pushButton_clicked()

code1.png

Ta code hàm  như sau(tôi sẽ giải thích bên dưới)

void MainWindow::on_pushButton_clicked()
{
    ui->label->setText("Hello World");
}

Khi người dùng ấn vào Button hàm

on_pushButton_clicked()

sẽ được gọi, trong hàm này câu lệnh

ui->label->setText("Hello World");

để hiển thị ra Label dòng chữ “Hello World”. Nếu bạn biết 1 chút về Tiếng anh thì ở đây câu lệnh khá rõ ràng ui trỏ đến Label và setText cho nó dòng chữ “Hello World”.

Chạy trương trình(Cửa sổ +R) và đây là kết quả khi ta click vào button :demo.png

Ở bài tiếp theo tôi sẽ hướng dẫn các bạn 1 số bài tập Toán rời rạc sau theo giao diện đồ họa :

  1. Thuật toán tìm kiếm tuyến tính.
  2. Thuật toán tìm kiếm nhị phân.
  3. Sắp xếp kiểu nổi bọt.
  4. Sắp xếp kiểu chèn.
  5. Sắp xếp kiểu chọn.
  6. Sắp xếp kiểu chèn nhị phân.
  7. Sinh xâu nhị phân lớn nhất liền sau.
  8. Tính div và mod.
  9. Nhân các số nguyên.

[Series Lập Trình Qt] #1 dowload và cài đặt IDE Qt Creator

Đây là bài đầu tiên trong series hướng dẫn lập trình Qt, phiên bản Qt mà tôi sử dụng là Qt 5.6 (đôi khi là 4.8.6)

I.Qt là gì?

Qt

Qt là 1 thư viện đa nền tảng để tạo nên các giao diện đồ họa người dùng, chủ yếu với các cửa sổ.

Qt được viết bằng C++ và được thiết kế để sử dụng trong C++. Tuy nhiên, hiện nay chúng ta đã có thể dùng thư viện này với nhiều ngôn ngữ khác như Java hay Python, vv…

Ban đầu Qt ra đời như một sản phẩm thương mại và cũng được dùng để viết môi trường KDE, nhưng về sau được bổ sung các giấy phép LGPL, theo đó có thể sử dụng tự do để phát triển phần mềm nguồn mở hay đúng hơn có thể sử dụng trong các phần mềm thương mại nếu muốn.

Qt Creator là một IDE rất được các lập trình viên ngày nay ưa chuộng vì từ ngày Microsoft hết mặn mà với MFC và chuyển sang .NET thì các lập trình viên đã dần chuyển sang sử dụng Qt. QT hỗ trợ rất mạng trong lập trình giao diện (GUI), tương tác với Database, Graphics….

Điểm nổi bật của Qt Creator:

  • Cross-platform, nó có thể chạy trên nhiều nền tảng: Mac, Linux, Windows.
  • Có Text-editor đẹp

Giaodien

  • Hỗ trợ vim-editor.
  • Miễn phí!

II. Dowload và cài đặt IDE Qt Creator

Cài đặt Qt Creator khá dễ dàng, đầu tiên bạn vào đây : https://www.qt.io/download-open-source/ Tải bản Qt Open Source để tải về trình cài đặt.

Caidatqt1

Mở file cài đặt vừa tải vềcaidatqt2

Chọn Next, tại đây bạn hãy điền tài khoản và mật khẩu của bạn, nếu chưa có bạn có thể đăng ký tài khoản tại phần Sign-Up bên dưới hoặc đăng ký tại đây moi1

Đăng nhập xong chọn Next và đợi trình cài đặt lấy thông tin phiên bản. Bạn chọn thư mục cài đặt cho phần mềm (theo mình cứ để mặc định).

moi2

chọn Next và chọn các thành phần muốn cài đặt (để mặc định)

moi3

Các bươc tiếp theo khá dễ dàng,bạn chỉ việc chọn next và chờ trình cài đặt thao tác.

moi4

Có một cách đơn giản hơn có thể giúp bạn cài đặt nhanh chóng, bạn tải file này về

link: https://drive.google.com/open?id=0Bzre9y8LL7m-TGZobEgzZzRSak0

giải nén vào ổ C: bạn sẽ thấy có 2 thư mục mới là Qt(phần mềm) và MingGW32(trình dịch)

moi5

Mở thư mục Qt chọn qtcreator-3.3.2 chọn bin và tìm file qtcreator

moi6

Mở lên và đây chính là giao diện chính của IDE Qt Creator, lần sử dụng đầu tiên bạn cần phải thiết lập trình dịch, Debug… cho phần mềm. Bạn chọn Tool->Options…

moi7.png

Đến thẻ Build and Run chọn thẻ  Debuggers ấn Add Chọn đến file gdb trong thư mục MingGW32\bin, Điền vào ô name GDB (như hình là được) và ấn ApplyDebug.png

Tiếp theo qua thẻ Compilers chọn Add->MingGW và chọn file g++.exe trong thư mục MingGW32\bin và ấn Apply

compile

Qua thẻ Qt version chọn Add và chọn đường dẫn đến File qmake.exe trong Qt\4.8.6\bin và ấn Apply

QTver

Qua thẻ Kits chọn Add đặt tên là Qt 4.8.6 và chọn trình biên dịch, Debugger, Qt version… (như hình) ấn Apply rồi Ok.

Kit.png

Vậy là hoàn thành các bước cài đặt cho IDE Qt Creator, trong bài hướng dẫn kế tiếp mình sẽ hướng dẫn các bạn tạo project với giao diện đồ họa.