Ngôn ngữ lập trình

Ngôn ngữ lập trình rất quan trọng và rất đa dạng. Lập trình viên thường học một vài ngôn ngữ nhưng vẫn có riêng một ngôn ngữ thiết yếu để làm việc...

Set trong C++

Tổng quan

  • Set là một loại associative containers để lưu trữ các phần tử không bị trùng lặp (unique elements), và các phần tử này chính là các khóa (keys).
  • Khi duyệt set theo iterator từ begin đến end, các phần tử của set sẽ tăng dần theo phép toán so sánh.
  • Mặc định của set là sử dụng phép toán less, bạn cũng có thể viết lại hàm so sánh theo ý mình.
  • Set được thực hiện giống như cây tìm kiếm nhị phân (Binary search tree).

Khai báo:

#include <set> 
set <int> s;
set <int, greater<int> > s;
Hoặc viết class so sánh theo ý mình:
struct cmp{
bool operator() (int a,int b) {return a<b;}
};
set <int,cmp > myset ;

Capacity:

  • size : trả về kích thước hiện tại của set. ĐPT O(1)
  • empty : true nếu set rỗng, và ngược lại. ĐPT O(1).

Thay đổi:

  • insert : Chèn phần tử vào set. ĐPT O(logN).
  • erase : có 2 kiểu xóa: xóa theo iterator, hoặc là xóa theo khóa. ĐPT O(logN).
  • clear : xóa tất cả set. ĐPT O(n).
  • swap : đổi 2 set cho nhau. ĐPT O(n).

Truy cập phần tử:

  • find : trả về itarator trỏ đến phần tử cần tìm kiếm. Nếu không tìm thấy itarator trỏ về “end” của set. ĐPT O(logN).
  • lower_bound : trả về iterator đến vị trí phần tử bé nhất mà không bé hơn (lớn hơn hoặc bằng) khóa (dĩ nhiên là theo phép so sánh), nếu không tìm thấy trả về vị trí “end” của set. ĐPT O(logN).
  • upper_bound: trả về iterator đến vị trí phần tử bé nhất mà lớn hơn khóa, nếu không tìm thấy trả về vị trí “end” của set.. ĐPT O(logN).
  • count : trả về số lần xuất hiện của khóa trong container. Nhưng trong set, các phần tử chỉ xuất hiện một lần, nên hàm này có ý nghĩa là sẽ return 1 nếu khóa có trong container, và 0 nếu không có. ĐPT O(logN).

 

Chương trình Demo 1:

#include <iostream>
#include <set>
using namespace std; 
main() {
      set <int> s;
      set <int> ::iterator it; s.insert(9);  // s={9}
      s.insert(5);  // s={5,9} cout << *s.begin() << endl; //In ra 5 s.insert(1);  // s={1,5,9} cout << *s.begin() << endl; // In ra 1
 
      it=s.find(5);
      if (it==s.end()) cout << "Khong co trong container" << endl; else  cout << "Co trong container" << endl;

      s.erase(it);  // s={1,9}
      s.erase(1);  // s={9}

      s.insert(3);  // s={3,9}
      s.insert(4);  // s={3,4,9}

      it=s.lower_bound(4);
      if (it==s.end()) cout << "Khong co phan tu nao trong set khong be hon 4" << endl; else cout << "Phan tu be nhat khong be hon 4 la " << *it << endl;  // In ra 4

      it=s.lower_bound(10);
      if (it==s.end()) cout << "Khong co phan tu nao trong set khong be hon 10" << endl; else cout << "Phan tu be nhat khong be hon 10 la " << *it << endl; // Khong co ptu nao           

      it=s.upper_bound(4);
      if (it==s.end()) cout << "Khong co phan tu nao trong set lon hon 4" << endl; else cout << "Phan tu be nhat lon hon 4 la " << *it << endl;  // In ra 9                

      /* Duyet set */

      for (it=s.begin();it!=s.end();it++) { cout << *it <<  " ";
      }
      // In ra 3 4 9

      cout << endl; system("pause");
}

Lưu ý: Nếu bạn muốn sử dụng hàm lower_bound hay upper_bound để tìm phần tử lớn nhất “bé hơn hoặc bằng” hoặc “bé hơn” bạn có thể thay đổi cách so sánh của set để tìm kiếm. Mời bạn xem chương trình sau để rõ hơn:

#include <iostream>
#include <set>
#include <vector> using namespace std;
main() {
      set <int, greater <int> > s;
      set <int, greater <int> > :: iterator it; // Phép toán so sánh là greater

      s.insert(1);  // s={1}
      s.insert(2);  // s={2,1}
      s.insert(4);  // s={4,2,1}
      s.insert(9);  // s={9,4,2,1}

      /* Tim phần tử lớn nhất bé hơn hoặc bằng 5 */ it=s.lower_bound(5);
      cout << *it << endl;  // In ra 4

      /* Tim phần tử lớn nhất bé hơn 4 */ it=s.upper_bound(4);
      cout << *it << endl;  // In ra 2

      system("pause");
}

Vector trong C++

Khai báo vector:

Vector có thể hiểu là một mảng có trình tự, giống như với danh sách liên kết hay một chuỗi thông thường nhưng “vector” khác với chuỗi hoăc mảng thông thường là chúng ta có thể thay đổi kích thước của nó và cũng có thể truy cập trực tiếp đến các phần tử, điều này làm cho việc sử dụng “vector” linh hoạt hơn so với “list”…

#include <vector>
...
/* Vector 1 chiều */

/* tạo vector rỗng kiểu dữ liệu int */ vector <int> first;

//tạo vector với 4 phần tử là 100 vector <int> second (4,100);

// lấy từ đầu đến cuối vector second
vector <int> third (second.begin(),second.end())

//copy từ vector third vector <int> four (third)

/*Vector 2 chiều*/

/* Tạo vector 2 chiều rỗng */ vector < vector <int> > v;

/* khai báo vector 5×10 */
vector < vector <int> > v (5, 10) ;

/* khai báo 5 vector 1 chiều rỗng  */ vector < vector <int> > v (5) ;

//khai báo vector 5*10 với các phần tử khởi tạo giá trị là 1 vector < vector <int> > v (5, vector <int> (10,1) ) ;
Các bạn chú ý 2 dấu “ngoặc” không được viết liền nhau. Ví dụ như sau là sai:
/*Khai báo vector 2 chiều SAI*/ 
vector <vector <int>> v;

Các hàm thành viên:

  • size : trả về số lượng phần tử của vector. ĐPT O(1).
  • empty : trả về true(1) nếu vector rỗng, ngược lại là false(0). ĐPT O(1).

 

Truy cập tới phần tử:

  • operator [] : trả về giá trị phần tử thứ []. ĐPT O(1).
  • at : tương tự như trên. ĐPT O(1).
  • front: trả về giá trị phần tử đầu tiên. ĐPT O(1).
  • back: trả về giá trị phần tử cuối cùng. ĐPT O(1).

 

Chỉnh sửa:

  • push_back : thêm vào ở cuối vector. ĐPT O(1).
  • pop_back : loại bỏ phần tử ở cuối vector. ĐPT O(1).
  • insert (iterator,x): chèn “x” vào trước vị trí “iterator” ( x có thể là phần tử hay iterator của 1 đoạn phần tử…). ĐPT O(n).
  • erase : xóa phần tử ở vị trí iterator. ĐPT O(n).
  • swap : đổi 2 vector cho nhau (ví dụ: first.swap(second);). ĐPT O(1).
  • clear: xóa vector. ĐPT O(n).

 

Nhận xét:

  • Sử dụng vector sẽ tốt khi:
    • Truy cập đến phần tử riêng lẻ thông qua vị trí của nó O(1)
    • Chèn hay xóa ở vị trí cuối cùng O(1).
  • Vector làm việc giống như một “mảng động”.

 

Một vài ví dụ:

Ví dụ 1: Ví dụ này chủ yếu để làm quen sử dụng các hàm chứ không có đề bài cụ thể.

#include <iostream>
#include <vector> 
using namespace std;
vector <int> v; //Khai báo vector
vector <int>::iterator it;  //Khai báo iterator
vector <int>::reverse_iterator rit; //Khai báo iterator ngược int i;
main() {
      for (i=1;i<=5;i++) v.push_back(i); // v={1,2,3,4,5} cout << v.front() << endl;  // In ra 1
      cout << v.back() << endl;  // In ra 5

      cout << v.size() << endl;  // In ra 5

      v.push_back(9);  // v={1,2,3,4,5,9}
      cout << v.size() << endl;  // In ra 6

      v.clear();  // v={}
      cout << v.empty() << endl;  // In ra 1 (vector rỗng)

      for (i=1;i<=5;i++) v.push_back(i); // v={1,2,3,4,5} v.pop_back();  // v={1,2,3,4}
      cout << v.size() << endl;  // In ra 4

      v.erase(v.begin()+1);  // Xóa ptử thứ 1 v={1,3,4} v.erase(v.begin(),v.begin()+2);  // v={4}
      v.insert(v.begin(),100);  // v={100,4}
      v.insert(v.end(),5);  // v={100,4,5}

      /*Duyệt theo chỉ số phần tử*/
      for (i=0;i<v.size();i++) cout << v[i] << " "; // 100 4 5 cout << endl;
 
      /*Chú ý: Không nên viết
      for (i=0;i<=v.size()-1;i++) ...
      Vì nếu vector v rỗng thì sẽ dẫn đến sai khi duyệt !!!
      */

      /*Duyệt theo iterator*/
      for (it=v.begin();it!=v.end();it++) cout << *it << " " ;
      //In ra giá trị ma iterator đang trỏ tới "100 4 5" cout << endl;

      /*Duyệt iterator ngược*/
      for (rit=v.rbegin();rit!=v.rend();rit++) cout << *rit << " "; // 5 4 100
      cout << endl;

      system("pause");
}
Ví dụ 2: Cho đồ thị vô hướng G có n đỉnh (các đỉnh đánh số từ 1 đến n) và m cạnh và không có khuyên (đường đi từ 1 đỉnh tới chính đỉnh đó).

Cài đặt đồ thị bằng danh sách kề và in ra các cạnh kề đối với mỗi cạnh của đồ thị. Dữ liệu vào:

  • Dòng đầu chứa n và m cách nhau bởi dấu cách
  • M dòng sau, mỗi dòng chứa u và v cho biết có đường đi từ u tới Không có cặp đỉnh u,v nào chỉ cùng 1 đường đi.

Dữ liệu ra:

  • M dòng: Dòng thứ i chứa các đỉnh kề cạnh i theo thứ tự tăng dần và cách nhau bởi dấu cách.

Giới hạn: 1 <= n,m <= 10000 Ví dụ:

INPUT OUTPUT
6 7 2 3 5 6
1 2 1 3 6
1 3 1 2 5
1 5  
2 3 1 3
2 6 1 2
3 5  
6 1  

 

Chương trình mẫu:

#include <iostream>
#include <vector> using namespace std;
vector < vector <int> > a (10001);
 
//Khai báo vector 2 chiều với 10001 vector 1 chiều rỗng int m,n,i,j,u,v;
main() {
      /*Input data*/ cin >> n >> m;
      for (i=1;i<=m;i++) { cin >> u >> v; a[u].push_back(v);
      a[v].push_back(u);
      }
      /*Sort cạnh kề*/ for (i=1;i<=m;i++)
      sort(a[i].begin(),a[i].end());
      /*Print Result*/
      for (i=1;i<=m;i++) {
      for (j=0;j<a[i].size();j++) cout << a[i][j] << " "; cout << endl;
      }
      system("pause");
}

Toán tử trong C++

Toán tử so sánh (Relational operators)

Toán tử logic trong C++ (Logical operators)
Toán tử trên bit trong C++ (Bitwise operators)
Các toán tử hỗn hợp trong C++ (Misc Operators)

Độ ưu tiên và quy tắc kết hợp toán tử trong C++

Các cấu trúc điều khiển trong C++

Cấu trúc lặp for

   for(biểu_thức_1; biểu_thức_2; biểu_thức_3)
   {
      Câu lệnh 1;
      ...
      Câu lệnh n;
   }
  • Ý nghĩa từng biểu thức:
  • biểu_thức_1: thường dùng khởi tạo biến đếm vòng lặp.
  • biểu_thức_2: thường dùng kiểm tra điều kiện vòng lặp.
  • biểu_thức_3: thường dùng điều khiển biến đếm của vòng lặp
  • Ví dụ: for(int i=0; i<10; i++)
  • Thứ tự thực hiện:
    • Bước 1: Xác định biểu_thức_1
    • Bước 2: Xác định biểu_thức_2
    • Bước 3: Nếu biểu_thức_2 đúng chương trình sẽ thực hiện khối lệnh trong vòng lặp for. Ngược lại thoát khỏi for.
    • Bước 4: Tính biểu_thức_3, sau đó quay lại bước 2 để bắt đầu vòng lặp mới.

Cấu trúc điều khiển rẽ nhánh if

   if(biểu_thức_điều_kiện)
   {
      Câu lệnh 1;
      ...
      Câu lệnh n;
   }

Cấu trúc điều khiển rẽ nhánh if…else

   if(biểu_thức_điều_kiện)
   {
      Câu lệnh 1;
      ...
      Câu lệnh n;
   }
   else
   {
      Câu lệnh 1;
      ...
      Câu lệnh n;
   }

Cấu trúc điều khiển switch

   switch(biều_thức_chọn)
   {
      case Giá_trị_1:
            Lệnh_1;
            Lệnh_2;
            ...
            break;
      case Giá_trị_2:
            Lệnh_1;
            Lệnh_2;
            ...
            break;
      default:
            Lệnh_1;
            Lệnh_2;
            ...
            break;
   }
  • biều_thức_chọn trong switch sẽ được so sánh với các giá trị trong tương ứng với các mệnh đề case.
  • Nếu giá trị biều_thức_chọn bằng Giá_trị_i thì khối lệnh của case i được thực hiện. Ngược lại thì khối lệnh tương ứng với khóa default được thực hiện.

Cấu trúc điều khiển lặp while

   while(<điều_kiện_lặp)
   {
      Câu lệnh 1;
      ...
      Câu lệnh n;
   }
  • Điều kiện lặp được kiểm tra trước khi thực hiện khối lệnh

Cấu trúc lặp while

   do
   {
      Câu lệnh 1;
      ...
      Câu lệnh n;  
   }while(điều_kiện_lặp);
  • Điều kiện lặp được kiểm tra khi khối lệnh được thực hiện xong. Do đó khối lệnh trong vòng lặp được thực hiện ít nhất 1 lần

Chọn trình soạn thảo C++ nào?

Hiện tại có rất nhiều trình soạn thảo C++ nhưng để chọn được trình soạn thảo phủ hợp với đặc thù công việc thì cần thời gian dài trải nghiệm và học hỏi… Dưới đây là 9 trình soạn thảo C++ hay còn gọi là IDE tốt nhất do các chuyên gia trên thế giới đánh giá.

1. CLion

Platforms: Linux, Mac OS X, Windows

  • Soạn thảo thông minh
  • Hộ trợ lập trình nhúng
  • Hỗ trợ thêm nhiều ngôn ngữ: C++11, libc++, boost, JavaScript, XML, HTML and CSS
  • Phím tắt giúp tạo nhanh dự án
  • CMake hộ trợ
  • Thống kê

2. Visual Studio

 

Platforms: Windows
IDE này do gã khổng lồ Microsoft sản xuất. Một phần lý do trình soạn thảo này chỉ hoạt động trên Windows. Đây là một trong những trình soạn thảo tốt nhất không chỉ cho C/C++ developers mà còn cho nhiều ngôn ngữ khác. Nếu bạn làm việc team thì có thể bạn cần phiên bản Pro trả phí nhưng nếu bạn làm một mình thì bạn có thể sử dụng bản Express miễn phí.

3. XCode

 

Platforms: Mac OS X
This IDE is the best choice for Mac users. Probably there are so many programmers who prefer to use a Mac. And again this IDE like the previous one (Visual Studio) is not only for C/C++ developers, there are many other popular languages supported. It is completely free to use. So you get pretty cool features to develop your program with C/C++.
Đây là sự lựa chọn tốt nhất cho người dùng Mac. Nó hoàn toàn miễn phí cho bạn nhưng cũng rất nhiều tính năng hay danh cho C/C++ developers

4. Eclipse

 

Platforms: Linux, Mac OS X, Windows
Eclipse hỗ trợ đã nền tảng và nó có một kho mã nguồn mở lớn và miễn phí.
  • Công cụ phát triển C/C++
  • Cộng đồng hỗ trợ Eclipse Git Team
  • Danh sách task Mylyn
  • Khai thác từ xa

Xem thêm

5. NetBeans

 

Platforms: Linux, Mac OS X, Windows
  • Hỗ trợ C++11
  • Bộ công cụ hỗ trợ Qt
  • Phát triển từ xa
  • Tệp điều hướng
  • Cài đắt cấu hình trình biên dịch

Xem thêm

6. Code::Blocks

Platforms: Linux, Mac OS X, Windows

  • Đơn giản, dễ dùng
  • Viết bằng C++.
  • Có thể mớ rộng bằng plugins
  • Open Source! GPLv3 miễn phí
  • Hỗ trợ nhiều trình biên dịch
  • Interfaces GNU GDB
  • Hỗ trợ MS CDB
  • Xem thông kê sử dụng CPU
  • Chuyển đổi giữa các threads

Hướng dẫn học C++

Xem thêm

7. Qt Creator

Platforms: Linux, Mac OS X, Windows
Thư viện nguồn mở là một điểm cộng.
  • Biên dịch nhanh Qt
  • Khởi động Qt nhanh
  • Qt Quick 2D Renderer
  • Qt WebView
  • Qt Bàn phím ảo
IDE có phiên bản pro trả phí.

8. Geany

Platforms: Linux, Mac OS X, Windows
Nhẹ, dễ sử dụng
  • Syntax highlighting
  • Code folding
  • Tự động đóng thẻ XML và HTML
  • Xây dựng hệ thống để biên dịch và thực thi
  • Quản lý project đơn giản

Xem thêm

9. CodeLite

Platforms: Linux, Mac OS X, Windows
  • Hiển thị lỗi dễ hiểu
  • Hỗ trợ Built-in GDB
  • Hỗ trợ C++11 auto keyword, templates, inheritance etc.

Xem thêm

Tóm lại

Yêu cầu công việc khác nhau thì nên lựa chọn những trình soạn thảo khác nhau.

  • Nếu bạn yêu cầu làm những dự án nhỏ hay chỉ mới học lập trình C++ thì có thể lựa chọn những IDE nhẹ, dễ sử dụng như Code::Blocks, Geany
  • Nếu bạn đang làm dự án lớn thì nên chọn những IDE có nhiều công cụ có sẵn như: VLion, Visual Studio

Nên chọn ngôn ngữ lập trình nào?

Bài viết này phù hợp với cả người mới học lập trình lẫn người lập trình thành thạo.

Khi bắt đầu vào con đường phát triển phần mềm, điều quan trọng là bạn nên đầu tư thời gian một cách khôn ngoan trong việc lựa chọn học một công nghệ nào đó mà nó sẽ có cả lợi ích cho bạn trong ngắn hạn với những kết quả nhìn thấy được, cũng như là cho phép bạn thiết lập một nền tảng cho bất kỳ ngôn ngữ lập trình nào trong tương lai. Lựa chọn của bạn sẽ còn phụ thuộc vào một số các yếu tố, vì thế hãy xem qua những đặc thù của chúng, xem nó có dễ học và giúp bạn kiếm sống được hay không. Tôi sẽ cung cấp tới bạn một vài đoạn code hiển thị dòng chữ “hello world”, đó là ứng dụng đầu tiên mà nhiều người tập viết khi học một ngôn ngữ lập trình mới.

Trong bài viết này, chúng ta sẽ xem xét những ngôn ngữ được sử dụng để phát triển phần mềm — là các ứng dụng chạy trên máy tính hoặc các thiết bị di động. Trong bài viết sau, chúng ta sẽ bàn về danh sách các ngôn ngữ lập trình web phổ biến, thường được sử dụng để tạo ra các trang web động và các giao diện tương tác người dùng thông qua trình duyệt.

Nên học ngôn ngữ lập trình nào để phát triển phần mềm?
Nên học ngôn ngữ lập trình nào để phát triển phần mềm?

C/C++

Mặc dù thực ra đó là hai ngôn ngữ riêng biệt, nhưng chúng lại thường được nhóm lại với nhau, C++ về cơ bản là một phiên bản mở rộng của C, bổ sung thêm đặc trưng hướng đối tượng. C++ là ngôn ngữ lập trình được lựa chọn bởi các lập trình viên chuyên nghiệp, hầu hết các game trên máy tính và các phần mềm cho Windows là được viết bằng nó. Nó có tốc độ thực thi rất nhanh, nhưng yêu cầu các lập trình viên phải quản lý bộ nhớ một cách chính xác, do đó để giỏi được ngôn ngữ này là rất khó. Người mới bắt đầu học lập trình thì chưa nên học ngôn ngữ này.

Cơ hội kiếm tiền:

Có ít sự cạnh tranh, các lập trình viên C++ có nhiều yêu cầu tuyển dụng và được trả lương rất cao, đặc biệt là trung lĩnh vực phát triển game.

Ngôn ngữ lập trình C++

Java

Java là một ngôn ngữ lập trình hoàn toàn hướng đối tượng, strongly typed, cùng với một tập đặc trưng mở rộng tập trung vào lập trình mạng và khả năng tương thích trên nhiều nền tảng. Các ứng dụng viết bằng Java thì gần như có thể chạy trên mọi hệ điều hành – mặc dù tốc độ sẽ không tốt được như ứng dụng được thiết kế chạy trên môi trường gốc.

Nó là ngôn ngữ lập trình được lựa chọn cho hầu hết các khóa học về Khoa học Máy tính, và do đó hầu như mọi người đều có ít nhất là một chút kinh nghiệm lập trình Java. Các ứng dụng Android thì cũng được viết bằng Java, tuy vậy bạn không thể đơn giản chạy một ứng dụng Java thông thường trên thiết bị Android hoặc ngược lại.

Cơ hội kiếm tiền:

Bạn có thể tạo ra các ứng dụng có giá trị để bán trên chợ ứng dụng Android; và cũng có rất nhiều công ty lớn tuyển dụng lập trình viên Java, nhưng tỷ lệ cạnh tranh khá lớn và mức lương hơi thấp.

Ngôn ngữ lập trình Java[Chú ý: Đừng nhầm lẫn Java với JavaScript, vì JavaScript là một ngôn ngữ hoàn toàn khác được sử dụng cho lập trình web – chúng ta sẽ nói về nó trong bài viết sau].

C#

Bạn phát âm nó là C sharp, đây là một ngôn ngữ của Microsoft nhân bản từ Java (mặc dù chúng cũng có nhiều điểm khác nhau hoàn toàn) – là một ngôn ngữ hướng đối tượng, đa năng và strongly-type. Tốc độ thực thi khá tốt, mặc dù không nhanh được như C++. Phần mềm viết bằng C# thì yêu cầu phải có .Net Framework và chỉ chạy trên hệ điều hành Windows.

Ngôn ngữ lập trình C#Tiềm năng kiếm tiền:

Có một số lượng khá lớn các công việc yêu cầu C# trong các dự án enterprise, nhưng bạn không có tiềm năng để kiếm tiền trên những dự án nhỏ. Tuy nhiên, nó là một ngôn ngữ thú vị và khá dễ học cho người mới bắt đầu, chắc chắn là tôi sẽ đề xuất nó nếu bạn muốn tập trung phát triển ứng dụng trên hệ điều hành Windows.

Bạn có thể tải bản Visual Studio Express miễn phí của Microsoft, nó là công cụ tuyệt vời để bạn thiết kế giao diện GUI và viết code cho chương trình. Bạn cũng có thể sử dụng IDE này với ngôn ngữ Visual Basic và nhiều ngôn ngữ khác của Microsoft.

Visual Basic

Là một đóng góp khác của Microsoft, Visual Basic là một ngôn ngữ hướng sự kiện tập trung vào các ứng dụng có thiết kế giao diện đồ họa GUI đơn giản. Hướng sự kiện nghĩa là code bạn viết ra thì nói chung sẽ xảy ra theo hành động của người dùng – ví dụ nó xảy ra khi người dùng click chuột vào một cái button chẳng hạn. Ngôn ngữ này rất dễ dàng để học và xây dựng các ứng dụng đơn giản, nhưng nó không phải là ngôn ngữ tốt nhất để học về các khái niệm nền tảng trong lập trình.

Ngôn ngữ lập trình Visual BasicObjective-C/ Cocoa

Đây là một ngôn ngữ dành cho Apple Mac, hầu hết các ứng dụng chạy trên hệ điều hành OSX và iOS đều được viết bằng ngôn ngữ này. Về mặt kỹ thuật, Objective-C là một phiên bản mở rộng của ngôn ngữ C với đặc trưng hướng đối tượng, giống như C++, nhưng nó gần như luôn kết hợp cùng với Cocoa framework để xây dựng các giao diện ứng dụng người dùng và các đặc trưng ở mức độ cao hơn trên nền tảng Mac. Bạn cũng phải cẩn thận trong việc quản lý bộ nhớ khi viết bằng ngôn ngữ này.

Các cú pháp và khái niệm bạn cần học thì tương đối phức tạp khi so sánh với một ngôn ngữ như Java hoặc C#, nhưng mặt khác, Apple cung cấp một môi trường phát triển toàn diện và miễn phí (XCode) và các công cụ khác sẽ làm cho quá trình tạo ra các ứng dụng thực tế và có thể xài được thì khá dễ dàng. Ngoài ra cũng có nhiều bài hướng dẫn và các video trên mạng hướng dẫn cho bạn, vì thế nó cũng chắc chắn là dễ học hơn C++. Khi bạn chọn ngôn ngữ này thì cơ bản là bạn sẽ phát triển ứng dụng cho OSX và iOS, nhưng bạn cũng sẽ có khả năng để viết ứng dụng cho Apple desktop và môi trường di động với chỉ một ngôn ngữ duy nhất.

Ngôn ngữ lập trình Objective-CTiềm năng kiếm tiền:

Chỉ với một tài khoản dành cho developer ($99 đô-la/năm), bạn có thể xây dựng ứng dụng và có cơ hội kiếm khá bộn tiền — Apple đã trả hơn $2 tỉ đô-la cho các nhà phát triển ứng dụng. Các nhà phát triển ứng dụng cho App Store thì có cơ hội tốt hơn các nhà phát triển cho Android để kiếm tiền với các ứng dụng có trả phí, trong khi các nhà phát triển cho Android có khuynh hướng kiếm thu nhập từ việc quảng cáo trên các ứng dụng miễn phí.

Đó là tất cả các ngôn ngữ mà tôi muốn giới thiệu với bạn ngày hôm nay, và chúng là những ngôn ngữ phổ biến để phát triển phần mềm trong thế giới thực trên máy PC, Mac và môi trường di động. Trước khi tôi nhận được những bình luận của bạn, tôi đã quyết định đặt ngôn ngữ Python vào trong danh sách các ngôn ngữ dành cho phát triển web ở bài viết sau, bởi vì có vẻ như nó được sử dụng nhiều nhất ở mảng đó.

Sự thực là một khi bạn đã có kiến thức khá cơ bản trong bất kỳ một ngôn ngữ nào, thì nó rất dễ để học thêm một ngôn ngữ khác; nó cũng giống như là nếu bạn biết tiếng Trung Quốc theo lối tượng hình thì việc học đọc và viết tiếng Nhật Bản cũng dễ hơn rất nhiều — các ngôn ngữ lập trình cũng thường kế thừa và vay mượn lẫn nhau, chúng chia sẻ cùng tập các cú pháp và đặc trưng cơ bản. Trong bài viết tới tôi sẽ giới thiệu các ngôn ngữ chuyên dành cho phát triển web như là JavaScript và PHP.

Bạn đang sử dụng ngôn ngữ nào để lập trình, bạn có tranh luận gì về các ngôn ngữ lập trình hiện nay? Hãy để lại vài dòng bình luận nhé!

Nguồn: dịch từ Makeuseof

10 lời khuyên cho người mới học PHP

PHP là ngôn ngữ đằng sau một số ứng dụng web mạnh mẽ và phổ biến nhất hiện nay, trong đó có thể kể đến Facebook và WordPress.

Học một ngôn ngữ mới có thể khá khó khăn với nhiều người. Bài viết này giới thiệu với bạn đọc một số lời khuyên quý báu của các chuyên gia PHP dành cho người mới bước chân vào thế giới PHP.

1. Elizabeth Naramore: Bắt đầu với OOP

Naramore hiện đang là nhân viên của SourceForge và người sáng lập trang PHPWomen.org. Đối với người vừa mới bắt đầu học PHP, Naramore cho rằng nên có một nền tảng vững chắc trong việc lập trình hướng đối tượng (OOP) trước khi tìm hiểu sâu hơn vào PHP.

“Nếu bạn vốn không xuất thân từ lĩnh vực lập trình, hãy dành thời gian để tìm hiểu nguyên tắc căn bản của phát triển phần mềm. Những vấn đề cần chú ý như lập trình hướng đối tượng (OOP), phát triển hướng kiểm thử (test driven development), quản lí phiên bản (version control), gỡ lỗi (debugging), các mẫu thiết kế (design pattern), vv).

“Nếu bạn đã thử và không thể giải quyết vấn đề của bạn, đừng ngại hỏi. Các cộng đồng PHP nói chung rất hữu ích và thân thiện. Có vô số tài nguyên cho những người mới trên mạng. Nhờ đến sự trợ giúp của cộng đồng, cho dù đó là một nhóm người dùng địa phương, một dự án mã nguồn mở của cộng đồng, hay một kênh IRC như #phpc trên freenode”.

2. Keith Casey: Hãy Google trước khi hỏi

Casey là chủ của một cửa hàng bán phần mềm và là một diễn giả rất có tiếng trong các cuộc hội thảo lớn về PHP.

Lời khuyên của ông nhấn mạnh việc hãy biết mình đang ở đâu trong cộng đồng PHP cùng với một câu châm ngôn đang ngày càng trở nên quan trọng: Google trước khi hỏi.

“Hãy tham gia ngay vào một nhóm người dùng PHP (PHP User’s Group). Có vô số nhóm người dùng PHP ở mọi nơi trên thế giới. Đó là nơi những người thông minh tập hợp để thảo luận, khám phá những ý tưởng, và giúp đỡ lẫn nhau.

“Hãy nhớ thử tìm kiếm trên Google trước khi đặt câu hỏi. Chẳng có ai thích những kẻ lười biếng cả”.

3. Eamon Leonard: Tham gia các dự án mã nguồn mở

Leonard điều hành một công ti phần mềm đặt tại Ireland và là đồng sáng lập CloudSplit, một dịch vụ phân tích thời gian thực cho công nghệ điện toán đám mây. Giống như nhiều đồng nghiệp của mình, ông khuyên rằng hãy cố gắng tham gia các dự án mã nguồn mở ngay cả khi mới bắt đầu học PHP.

“Hãy tham gia vào các dự án mã nguồn mở ngay sau khi bạn nắm bắt được các vấn đề cơ bản… Việc này khiến bạn có thể truy cập vào mã nguồn của các dự án và là một cơ hội rất lớn để học hỏi từ các chuyên gia kì cựu trong ngành”.

“Tìm và lập tài liệu cho các lỗi có thể tái phát sinh là một nhiệm vụ rất tốn thời gian và được đánh giá cao bởi bất kỳ nhóm phát triển mã nguồn mở nào… Khi thuê các nhà phát triển để làm việc với chúng tôi, chúng tôi sẽ dành nhiều sự ưu ái hơn cho những ai đã từng làm việc trên một dự án phần mềm mã nguồn mở”.

4. Lorna Jane Mitchell: Hãy bắt tay vào làm (Just do it)

“Lornajane” là tên gọi phổ biến hơn của Mitchell trên cộng đồng trực tuyến, là một nhà cố vấn, nhà phát triển phần mềm, một tác giả và diễn giả về PHP.

Cô đưa ra một lời khuyên khá nổi tiếng trong giới chuyên môn: Hãy bắt tay vào làm (Just do it).

“Muốn biết bơi thì phải nhảy xuống nước! PHP là một ngôn ngữ rất dễ học. Cách tốt nhất để tìm hiểu xem cái gì đó hoạt động như thế nào là bắt tay vào làm thử.

“Bất cứ ai cũng có thể lập trình PHP. Ít khó khăn khi tham gia có nghĩa là có rất nhiều code PHP tồi trên thế giới. Nhưng những đoạn code PHP tồi mà chạy tốt thì cũng vẫn hữu ích. Cá nhân tôi nghĩ rằng nếu bạn có thể giải quyết vấn đề của bạn với PHP thì cứ mạnh dạn bắt tay vào code ngay cả khi nó chưa hoàn hảo”.

5. Chris Cornutt: Tránh những đoạn code rối rắm

Cornutt điều hành PHPDeveloper.org và Joind.in. Ông đã bắt đầu lập trình PHP từ năm 1998. Trong lời khuyên của ông dành những người mới bắt đầu phát triển PHP, ông cảnh báo về những đoạn code rối rắm.

“Tôi nghĩ rằng những phát triển mới sẽ dễ dàng bị chán nản với những đoạn code rối rắm, đau đầu… Những người mới bắt đầu và có một chút thích thú với ngôn ngữ PHP thường rất hăng hái viết code với tâm lí là chỉ cần code chạy được là được, nhưng tôi dám chắc rằng hơn một nửa trong số họ sẽ bỏ cuộc”.

“Hãy thử tìm một người cố vấn có thể hướng dẫn bạn một số bước đi ban đầu. Bạn sẽ cảm nhận được một sự khác biệt rất lớn khi bạn có một người nào đó để bàn luận. IRC là một lựa chọn tốt, nhưng một người để có thể gặp mặt để học hỏi sẽ tốt hơn rất nhiều.

Thường họ có rất nhiều các trang web với vô số các đoạn code và các ví dụ PHP đã giúp họ vượt qua những tình huống khó khăn. Một số ví dụ rất hay, một số không có ích nhiều lắm nhưng hãy học chúng một cách dần dần. Phát triển PHP cũng giống như bất cứ điều gì khác, là một kỹ năng mà cần phải được mài giũa – bạn không thể nhảy bụp vào và trở thành một chuyên gia sau một đêm được”.

6. Abraham Williams: Học Drupal

Williams là một nhà phát triển và tự gọi mình là một “người ủng hộ các hacker” (hacker advocate). Ông cũng khuyên những người mới lập trình PHP nên tham gia vào các dự án lập trình mã nguồn mở.

“Tìm một dự án hoặc cộng đồng chất lượng (tốt nhất là các dự án phát triển theo định hướng mã nguồn mở) để đóng góp vào. Tìm hiểu về các đoạn mã, con người và văn hóa riêng của dự án đó. Bạn sẽ học hỏi được từ các nhà phát triển có kinh nghiệm, niềm đam mê với những đoạn code chất lượng cùng với một cộng đồng thân thiện. Những người mới sẽ nhận được nhiều hơn từ việc đề xuất các đoạn code cải tiến trong các bản vá và thậm chí từ việc làm thế nào để là một thành viên cộng đồng tốt hơn”.

“Tôi cho rằng các dự án Drupal là một điểm khởi đầu tốt. Đó là một cộng đồng trưởng thành và hùng hậu, có tốc độ tăng trưởng mạnh mẽ. Ngoài ra, có rất nhiều cơ hội việc làm đối với các nhà phát triển Drupal giỏi”.

7. Demian Turner: Học hỏi từ các coder nhiều kinh nghiệm

Turner đã làm việc với các web và các dự án mã nguồn mở từ năm 1996. Ông điều hành PHPKitchen.com và gần đây là một trong những người lọt vào chung kết cuộc thi doanh nhân khởi nghiệp Seedcamp.

Ông đã đưa ra một lời khuyên vô cùng quý báu cho những người mới phát triển PHP để tiết kiệm thời gian, cải thiện các đoạn code tốt hơn và giúp duy trì được sự yêu thích viết code.

“Đọc các code của các nhà phát triển dày dạn kinh nghiệm. Đó luôn là những cách tốt hơn, sáng sủa hơn để giải quyết các vấn đề bạn gặp phải. Đừng phát minh lại bánh xe, bạn sẽ luôn có thừa các công cụ, thư viện sẵn có để lập trình. Hãy sử dụng các thư viện có uy tín bất cứ khi nào bạn có thể thay vì tự viết code từ đầu”.

“Đảm bảo rằng code của bạn thật dễ hiểu. Nếu chính bạn cũng không thể hiểu được code mà bạn viết ra sau sáu tháng sau thì làm sao các nhà phát triển khác có thể hiểu nổi?”.

“Luôn cố gắng đơn giản hóa các đoạn code. Sẽ vất vả hơn để viết các đoạn code đơn giản hơn nhưng một cấu trúc code nhất quán sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức hơn khi phải bảo trì”.

“Cuối cùng, tìm hiểu về một số các lập trình viên xuất sắc và cách làm thế nào họ giữ được niềm đam mê về nghệ thuật lập trình trong nhiều năm như vậy”.

8. Stuart Herbert:

Tìm hiểu về phát triển hướng kiểm thử (test-driven development), tính đóng gói (encapsulation) và quản lí mã nguồn (source control)

Herbert đã bắt đầu code PHP kể từ năm 1999. Ông đã viết về PHP trong nhiều năm và đã đóng góp rất nhiều cho Gentoo Linux.

Đối với những người phát triển PHP, ông khuyên “Hãy tìm hiểu về việc phát triển hướng thử nghiệm và đóng gói. Một khi hiểu về nó, bạn sẽ viết code nhanh hơn. Và bất cứ ai phát triển kế thừa từ những đoạn code của bạn sẽ cảm ơn bạn rất nhiều”.

“Tìm hiểu về việc quản lí mã nguồn chưa bao giờ được xem nhẹ”.

Ông cũng nói rằng sức mạnh lớn nhất của ngôn ngữ PHP là bộ tài liệu tuyệt vời và hoàn toàn miễn phí tại PHP.net. Với một số ngôn ngữ khác, có thể bạn sẽ cần phải đi ra ngoài và mua các tài liệu như sách ngoại trừ với PHP”.

9. Maggie Nelson: Tìm hiểu về lưu trữ dữ liệu (data storage)

Nelson là một nhà phát triển PHP hiện đang làm việc cho Flickr.

Cô nói rằng những người mới học PHP nên bắt đầu học về lưu trữ dữ liệu ngay từ khi mới bắt đầu.

“Hầu như bạn sẽ sử dụng PHP cho các ứng dụng web. Các ứng dụng web nổi trội là những ứng dụng web sử dụng dữ liệu theo những cách không bình thường để giải quyết những vấn đề bình thường. Nếu bạn chỉ vừa bắt đầu với PHP và đây là ngôn ngữ lập trình đầu tiên của bạn, hãy dành một hoặc hai ngày để đọc về lưu trữ dữ liệu và một chút về SQL. PHP được biết đến là hoạt động rất tốt với các cơ sở dữ liệu. Hãy thử tìm hiểu về MySQL, các cơ sở dữ liệu quan hệ khác và một vài giải pháp lưu trữ NoSQL”.

“Hãy tự viết code cho ít nhất một ứng dụng mà không dùng bất cứ thư viện hay framework hỗ trợ nào. Thế giới PHP cung cấp rất nhiều các framework tuyệt vời và có thể dễ dàng trừu tượng hóa (abstract) việc truy cập dữ liệu, nhưng hãy luôn đảm bảo rằng bạn thực sự hiểu dữ liệu thực sự được thao tác ra sao đằng sau hậu trường!”.

10. Michael Maclean: Tìm hiểu về bảo mật

Maclean là một nhà phát triển PHP và Python tại Outer Hebrides, Scotland.

Ông nói: “Khá dễ dàng để có thể hiểu và code PHP, đó là lí do tại sao rất nhiều người sử dụng nó, nhưng tôi nghĩ điều quan trọng là phải xem trên thực tế mọi người đang dùng nó như thế nào. Thay vì viết tất cả mọi thứ từ đầu, hãy tìm hiểu một vài framework. Việc này sẽ giúp bạn có một điểm xuất phát thuận lợi hơn.

“Ngoài ra nên học thêm về bảo mật. Trong quá khứ, PHP đã bị nhiều chỉ trích về vấn đề này. Đó là mặt trái của tính dễ sử dụng của PHP. Có nhiều nguồn sách vở và tài nguyên trên mạng trình bày về cách tránh đối phó với các vấn đề bảo mật. Hãy tìm đọc những cuốn sách và thông tin trên mạng về chủ đề bảo mật của các tác giả Chris Shiflett và Ilia Alshanetsky”.