Tạo menu lựa chọn trong C/C++

Tạo một Menu có các lựa chọn là 1 bài tập lập trình căn bản, giúp các bạn làm quen với các lệnh xóa màn hình, vòng lặp while, lệnh switch case, lệnh getch. Đây có thể nói là 1 bài tập tổng hợp. Các bạn theo dõi video bên dưới để dễ hình dung hơn.

Tạo menu lựa chọn trong C/C++

Tóm tắt Video

  • Tạo một dự án mới
  • Tạo các chức năng của dự án (bài tập)
  • Tạo các menu chức năng
  • Viết các hàm xử lý menu
  • Gọi hàm main để chạy thử chương trình

Code: Menu.h

#include "Lib.h"

void Menu();		// Ham nay se xuat ra cac danh sach menu
int ChonMenu();		// Ham nay dung de chon 1 menu tuong ung
void XuLyMenu();	// Xu ly menu ung voi menu duoc chon


void Menu() {
	cout << "=================MENU================\n";
	cout << "1. Vua ga - vua cho\n";
	cout << "2. Kiem tra so nguyen to\n";
	cout << "3. Tong cac so nguyen to\n";
	cout << "4. Dao nguoc so\n";
	cout << "5. Tim so sao cho a*b = 2(a+b)\n";
	cout << "6. Tinh giai thua cua mot so\n";
	cout << "7. Tim day Fibonaci\n";
	cout << "8. Hoan vi\n";
	cout << "9. Ve tam giac\n";
	cout << "10. Bai tap cua cac ban";
	cout << "99. Thoat!!!\n";
	cout << "=====================================\n";
}
int ChonMenu()
{
	int n = 0;
	cout << "\n\nMoi chon menu: ";
	cin >> n;
	if (n > 0 || n < 99)
		return n;
	else return ChonMenu();
}
void XuLyMenu() 
{
	int chon = ChonMenu();
	int a = 5; int b = 6;
	switch (chon)
	{
	case 1:		
		cout << "1. Vua ga vua cho.\n";
		VuaGaVuaCho();
		break;
	case 2:
		cout << "2. Kiem tra so nguyen to\n";
		cout << TimSoNT(5);
		break;
	case 3:
		cout << "3. Tong cac so nguyen to\n";
		cout << TinhTongCacSoNT(11);
		break;
	case 4:
		cout << "4. Dao nguoc so\n";
		cout << DaoNguocSo(123);
		break;
	case 5:
		cout << "5. Tim so sao cho a*b = 2(a+b)\n";
		TimSoTichABBang2TongAB(100);
		break;
	case 6:
		cout << "6. Tinh gia thua cua mot so\n";
		cout << TinhGiaiThua(6);
		break;
	case 7:
		cout << "7. Tim day Fibonaci\n";
		for (int i = 0; i < 5; i++)
		{
			cout << Finbonaci(i) << "\t";
		}
		Finbonaci2(7);
		break;
	case 8:
		cout << "7. Hoan vi\n";
		//int a = 5; int b = 6;
		HoanVi(a, b);
		cout << a << "\t" << b;
		break;
	case 9:
		VeHinhTamGiac(4, 5);
		break;
	case 99:
		cout << "Thoat!!!\n";
		exit(1);
		break;
	}
}

Code Source.cpp

#include "Menu.h"
using namespace std;
void main() 
{	
	Menu();
	while (true)
	{	
		XuLyMenu();
	}
	_getch();
}

Hãy sáng tạo theo cách của bạn.

Nếu bạn đã hoàn thành theo hướng dẫn mà vẫn gặp khó khăn, hãy tải mã nguồn ứng dụng tại đây:  Download

Cảm ơn bạn đọc và tôi luôn đánh giá cao phản hồi của bạn.

Đọc và ghi file text trong C++

Trong C++ việc đọc và ghi file thường dùng để đưa các bài toán ở dạng đầu vào và xuất ra kết quả. Điều này giúp cho người ta dễ dàng kiểm tra xem chương trình của bạn có thực sự đúng không khi cho chương trình chạy với nhiều đầu vào và kiểm tra các kết quả ở đầu ra chương trình có đúng với kết quả chuẩn. Bài viết này sẽ trình bày các vấn đề về đọc và ghi file với các ký tự ASCII sử dụng thư viện fstream.

Đây là phần hướng dẫn đọc file .txt có cấu trúc như sau: HoTen SoCMND SoNamLV Luong

Cấu trúc file Text
Cấu trúc file Text

Các thư viện sử dụng:

#include <iostream>
#include <string.h>
#include <conio.h>
#include <fstream>
#include <iostream>
#include <iomanip>
Đọc ghi file Text trong C++
Đọc ghi file Text trong C++

Kết quả:

Đọc ghi file text C++
Đọc ghi file text C++

Chúc các bạn thành công.

Tìm số nguyên tố trong C++

Tìm số nguyên tố trong C++ là bài tập thú vị mà bất cứ ai khi học C++ cũng có thể gặp qua. Kiểm tra số có phải là số nguyên tố không? Xuất danh sách các số nguyên tố từ 1 đến n. Xuất các số nguyên tố trong mảng. Tính tổng các số các số nguyên tố trong mảng…

Ví dụ dưới đây cho phép bạn kiểm tra 1 số n có phải số nguyên tố hay không?

Ý tưởng: Số nguyên tố là số chỉ chia hết cho 1 và chính nó. Ta sẽ duyệt danh sách từ 2 đến sqrt(n). Nếu n chia hết cho 1 số thứ 3 thì nó không phải là số nguyên tố. Ngược lại n là số nguyên tố.

// Ham kiem tra 1 so co phai la so NT hay khong? Dung thi tra ve 1, nguoc lai tra ve 0
int KiemTraSNT(int n) {	 
	if (n == 2) {
		return 1;
	}
	else {
		for (int i = 2; i <= int(sqrt(n)); i++)
		{
			if (n%i == 0) {
				return 0;				
			}
		}
	}
	return 1;
}

so-nguyen-to

 

Áp dụng tính tổng các số nguyên tố từ 1 đến n

int TinhTongCacSoNT(int n) {
	int tong = 0, x = 0;
	for (int i = 2; i <= n; i++)
	{
		x = KiemTraSNT(i);
		if (x == 1)
			tong += i;
	}
	return tong;
}

Chúc các bạn thành công.

4 Cấp độ tự do đối với lập trình viên

Bài viết được dịch từ blog Simple Programmer

Cho đến hôm nay, sau một khoảng thời gian khá dài trong nghề phần mềm, tôi mới thử sắp xếp lại trong tâm trí mình về 4 cấp độ khác biệt mà các lập trình viên phần mềm có thể trải qua trong quá trình cố gắng tìm kiếm “tự do” cho bản thân họ.

Đối với phần lớn thời gian trong sự nghiệp phát triển phần mềm của mình, khi tôi là một nhân viên làm việc cho một công ty, tôi có một ước mơ là đến một ngày nào đó mình sẽ được tự do. Tôi muốn có khả năng làm việc cho chính bản thân mình. Đối với tôi, đó mới là tự do tối thượng.

Cấp độ tự do lập trình viên 1

Nhưng tôi thật là ngây thơ và đã không nhận ra rằng thực sự có các cấp độ khác nhau của cái khái niệm “làm việc cho bản thân”. Tôi cũng giả định rằng nếu bạn đã tự làm chủ, bởi vì hầu hết các lập trình viên mà tôi đã nói chuyện về chủ đề này đều có cùng cách nghĩ giống như tôi đã có – trước khi tôi biết nhiều hơn.

Trước đây tôi đã viết một bài về cách làm thế nào để bỏ công việc của bạn, nhưng bài viết này có một chút khác biệt. Bài viết này không thực sự nói về cách làm thế nào để bỏ việc, mà nói về các cấp độ khác nhau của việc tự làm chủ mà bạn có thể đạt được, sau khi bạn thôi việc.

4 Cấp độ tự do trong nghề lập trình viên

Bốn cấp độ mà tôi mô tả dựa trên mức độ tự do mà bạn trải nghiệm trong công việc của mình; chúng không có gì liên quan đến các cấp độ kỹ năng cả. Nhưng nói chung chúng ta luôn tìm cách để tiến lên những cấp độ này và hy vọng thành công trong việc đạt được nhiều tự do hơn. Vì vậy, hầu hết các lập trình viên đều bắt đầu tại cấp độ 1, và lần đầu tiên mà họ trở thành người tự làm chủ thường là cấp độ 3 – mặc dù bạn có thể bỏ qua các cấp độ trước và tiến thẳng lên cấp độ 3 này.

Dưới đây là một định nghĩa nhanh về các cấp độ này (tôi sẽ đề cập chi tiết về mỗi cấp độ trong phần tiếp theo.)

  1. Employed (làm thuê) – bạn làm việc cho một người nào đó
  2. Freelancer (làm tự do) – bạn là ông chủ của chính bạn, nhưng bạn làm việc cho rất nhiều người khác
  3. Product creator (chủ sản phẩm) – bạn là ông chủ của chính bạn, nhưng khách hàng của bạn xác định những gì bạn làm việc trên đó
  4. Financially free (tự do về tài chính) – bạn làm những việc bạn muốn và khi bạn thích; bạn không cần phải kiếm tiền

Tôi đã bắt đầu sự nghiệp của mình tại cấp độ 1 rồi bật đi bật lại giữa cấp độ 2 và cấp độ 1 một thời gian trước khi tôi có thể nhảy sang cấp độ 3. Hiện tại tôi đang làm việc để vươn lên cấp độ 4 – mặc dù, tôi thấy rằng rất dễ để ở lại cấp độ 3 thậm chí bạn có thể chuyển sang cấp độ 4.

Trên con đường đi qua, tôi đã nhận ra rằng tại mỗi cấp độ mà mình đang có, tôi thường cho rằng mình sẽ cảm thấy hoàn toàn tự do khi vươn tới cấp độ cao hơn. Nhưng cứ mỗi lần đó tôi đều nhận ra rằng mình đã sai. Trong khi mỗi cấp độ mang lại cho tôi nhiều tự do hơn, nhưng mỗi cấp độ đó cũng dường như không phải là những gì mà tôi đã tưởng tượng trước đó.

Cấp độ 1: làm thuê

ông chủ

Giống như tôi đã nói, hầu hết các lập trình viên đều bắt đầu ở cấp độ này. Thành thật mà nói, hầu hết các lập trình viên đều ở lại cấp độ này – và bạn đừng hiểu sai ý tôi, vì điều đó không có gì là sai cả – miễn là bạn hạnh phúc.

Ở cấp độ này, bạn không có nhiều tự do, bởi vì về cơ bản bạn phải làm những việc người ta yêu cầu bạn làm và bạn phải làm việc khi người ta yêu cầu bạn làm, và bạn thường gắn chặt với một vị trí địa lý nhất định. (Trong suốt bài này, bạn sẽ nhìn thấy 3 cấp độ của tự do.)

Làm việc cho một người khác không có gì là xấu cả. Bạn có thể có một công việc thực sự tốt với mức lương xứng đáng, nhưng trong hầu hết các trường hợp bạn phải đánh đổi sự an toàn với một sự bó buộc trong công việc. Bạn nhận được khoản tiền lương hàng tháng một cách đều đặn, nhưng bạn phải trả giá là phần lớn sự tự do của mình.

Nhưng điều đó không có nghĩa là bạn không có những mức độ tự do khác nhau trong việc làm kiểu truyền thống. Tôi nghĩ rằng có những cấp độ nhỏ của tự do tồn tại ngay cả khi bạn đang làm thuê cho một ai đó. Ví dụ, bạn có khả năng nhận được nhiều tự do hơn về việc khi nào thì bạn bắt đầu công việc và khi nào thì ra về, bằng cách leo lên những chức vụ và trở thành một người làm việc có thâm niên. Bạn cũng có khả năng được trao quyền tự chủ nhiều hơn một chút về công việc bạn làm – mặc dù các phương pháp Agile có thể sẽ mang chúng ta quay trở lại vấn đề đó.

Thậm chí bạn có thể có được tự do về địa điểm làm việc nếu bạn có khả năng tìm một công việc cho phép bạn làm việc từ xa. Trong quá trình tìm kiếm tự do của mình, tôi thực sự phải đánh đổi một mức lương đáng kể để được chấp nhận một công việc mà tôi có thể được tự do làm việc tại nhà. Tôi đã sai lầm khi tưởng rằng làm việc ở nhà sẽ là tự do tối thượng và tôi sẽ trở thành một người làm việc về nội dung cho một ai đó suốt cả phần còn lại sự nghiệp của mình, miễn là tôi có thể làm việc đó ở nhà. (Đừng hiểu sai ý tôi, làm việc ở nhà có những đặc quyền của nó, nhưng nó cũng có những điểm bất lợi. Khi tôi làm việc ở nhà, tôi cảm thấy có nghĩa vụ nhiều hơn trong việc hoàn thành công việc để chứng tỏ rằng tôi không phải là kẻ làm biếng. Tôi cũng cảm thấy rằng công việc của mình chẳng bao giờ kết thúc.)

Giờ đây, giống như tôi đã nói từ trước, nhiều người sẽ ở lại cấp độ 1 và có lẽ sẽ di chuyển loanh quanh, để đạt được nhiều tự do hơn thông qua những thứ như quyền tự chủ và một lịch trình làm việc linh hoạt, nhưng có những giới hạn nhất định của tự do tại cấp độ này. Không ai sẽ trả tiền cho bạn để làm điều bạn thích và nói với bạn rằng bạn có thể biến mất bất cứ lúc nào bạn muốn. Bạn cũng sẽ có những giới hạn về mức thu nhập. Bạn chỉ có thể làm ra nhiều tiền khi làm việc cho một ai đó và số tiền đó thì hầu như đã cố định trước rồi.

Cấp độ 2: freelancer (làm tự do)

làm tự do

Vì vậy, đây chỉ là một cấp độ khác mà tôi đã thực sự tưởng tượng tồn tại đối với một lập trình viên, trong phần lớn sự nghiệp của mình. Tôi nhớ là mình đã suy nghĩ về sự tuyệt vời khi được làm việc trên các dự án của riêng mình cùng với những khách hàng của mình. Tôi đã tưởng tượng rằng khi là một freelancer thì tôi có thể đấu thầu (bid) các hợp đồng của chính phủ và dành ra một vài năm để thực hiện hợp đồng đó trước khi chuyển sang dự án tiếp theo. Tôi cũng đã tưởng tượng ra một sự luân phiên khi tôi làm việc cho nhiều khách hàng khác nhau, làm việc trên các công việc khác nhau tại các thời điểm khác nhau – tất cả từ những thuận lợi trong các dự án của mình.

Khi hầu hết các lập trình viên nói về việc bỏ công việc của họ và trở thành một người tự làm chủ, tôi nghĩ đây chính là điều mà họ tưởng tượng. Họ nghĩ, giống như tôi đã nghĩ trước đây, rằng đây là cấp độ cuối cùng của tự do.

Tôi đã không mất quá nhiều thời gian khi làm freelancer để nhận ra rằng cấp độ này cũng không có nhiều tự do hơn, tức là làm việc với tư cách là một freelancer thì cũng không tự do hơn là làm thuê cho một người nào đó. Trước tiên, nếu bạn chỉ có một khách hàng lớn, giống như hầu hết tất cả những freelancer mới vào nghề, thì về cơ bản bạn ở vào một tình huống tương tự như là khi bạn đang đi làm thuê – sự khác biệt lớn nhất đó là bây giờ bạn không thể được trả tiền cho những giờ mà bạn làm biếng. Bạn sẽ có thể có nhiều tự do về giờ giấc làm việc của bạn, nhưng bạn sẽ bị ràng buộc vào dự án mà khách hàng đã thuê bạn làm và bạn có thể thậm chí phải đến tận văn phòng của họ để làm việc.

Điều này không có nghĩa là bạn không có nhiều tự do hơn, mặc dù nó chỉ là một hình thức khác. Nếu bạn có nhiều khách hàng, bạn có quyền kiểm soát nhiều hơn đối với cuộc sống của mình và những công việc nào mà bạn làm. Bạn có thể thiết lập tỉ lệ cho riêng mình, bạn có thể thiết lập giờ giấc của riêng bạn và có thể có khả năng từ chối công việc mà bạn không muốn làm – mặc dù, trong thực tế, bạn sẽ không bỏ dự án nào cả – đặc biệt là nếu bạn mới chỉ bắt đầu gia nhập cấp độ freelancer.

Đừng hiểu sai ý tôi, cũng rất tốt khi bạn có công ty của riêng mình và có khả năng gửi hóa đơn cho các khách hàng của bạn, thay vì vị bắt buộc làm việc cho một ông chủ mà có toàn quyền kiểm soát toàn bộ cuộc sống của bạn, nhưng freelancing là bao gồm rất nhiều công việc và các công việc hàng ngày có thể thực sự khó cảm thấy có nhiều tự do hơn là bạn đang làm việc cho một người nào đó.

Nếu được lựa chọn giữa việc làm freelancer hoặc làm việc cho một người nào đó, thì tôi chỉ muốn làm công việc có tiền lương được trả đều đặn hơn. Nếu là 5 năm về trước thì tôi đã không nói như vậy, nhưng giờ đây tôi biết rằng freelancing là công việc rất khó và căng thẳng. Tôi thực sự sẽ không đi theo con đường này trừ khi bạn biết đây là điều bạn muốn làm hoặc bạn đang sử dụng nó như là một bước đệm để tiến đến một nơi nào khác.

Từ góc độ thu nhập, một freelancer có thể kiếm nhiều tiền hơn hầu hết các nhân viên làm thuê. Hiện tại tôi đang làm freelancer và tôi không chấp nhận bất kỳ công việc nào có giá ít hơn $300 đô-la/giờ. Tôi đã không bắt đầu với mức tỉ lệ đó – khi tôi bắt đầu làm freelancer tôi tính phí $100 đô-la/giờ đã là một tỷ lệ đáng kinh ngạc – nhưng, cuối cùng tôi đã làm việc theo cách của mình để nâng lên được mức hiện nay. Một điều đáng suy nghĩ đó là mức thu nhập của bạn không có giới hạn. Bạn càng tính phí cao và số giờ bạn làm việc càng nhiều thì bạn càng kiếm được nhiều tiền. Bạn chỉ bị giới hạn bởi các giới hạn của cả hai yếu tố này kết hợp lại.

Cấp độ 3: tạo ra sản phẩm của riêng mình

tạo ra sản phẩm của riêng mình

Cấp độ này là nơi mà mọi thứ trở nên thú vị. Khi tôi chủ yếu làm công việc freelancing, tôi đã nhận ra rằng sai lầm chính của mình đó là không làm việc cho một người nào đó, mà bằng cách đánh đổi những đồng đô-la cho giờ làm việc của mình. Tôi nhận ra rằng là một freelancer thì cuộc đời mình không đẹp đẽ như là tôi đã tưởng tượng trước đây. Nó không thực sự tự do, bởi vì nếu tôi không làm việc thì tôi sẽ không được trả lương.

Tôi thực sự đã chấm dứt công việc freelancer và quay trở lại làm nhân viên toàn thời gian để suy nghĩ lại chiến lược của mình. Tôi càng vắt óc suy nghĩ, thì tôi càng nhận ra rằng để thực sự đạt được sự tự do mà tôi muốn, tôi sẽ cần phải tạo ra một dạng sản phẩm mà tôi có thể bán hoặc một loại dịch vụ mà sẽ tạo ra thu nhập cho tôi trong tất cả thời gian thậm chí khi tôi không làm việc.

Có rất nhiều cách để đạt đến cấp độ này, nhưng có lẽ cách phổ biến nhất đó là xây dựng một số loại phần mềm hoặc dịch vụ phần mềm (SASS) để sinh ra thu nhập cho bạn. Sau đó bạn có thể kiếm tiền từ việc bán sản phẩm và bạn làm việc trên sản phẩm đó khi nào và theo cách bạn cảm thấy phù hợp.

Bạn cũng có thể đạt đến cấp độ này bằng cách bán các sản phẩm số theo hình thức nào đó. Tôi đã có khả năng vươn tới cấp độ này thông qua một sự kết hợp giữa blog này, các ứng dụng di động mà tôi đã xây dựng, và tạo ra các khóa học có thu phí trên Pluralsight và gói chương trình Làm thế nào để tiếp thị bản thân với tư cách là một lập trình viên.

Bạn có thể khá tự do ở cấp độ này. Bạn không còn có bất kỳ một ông chủ thực sự nào nữa. Không còn một ông chủ đầu hói nào luôn ra lệnh cho bạn phải làm những gì và bạn cũng không có những khách hàng nói với bạn phải làm việc trên các dự án nào nữa. Bạn hầu như có thể làm việc ở bất cứ nơi nào bạn muốn và bất cứ khi nào bạn thích. Thậm chí bạn có thể biến mất trong khoảng vài tháng trời – miễn là bạn tìm ra cách nào đó để có thể xử lý hỗ trợ cho sản phẩm của mình.

Lúc này, điều đó không có nghĩa là mọi thứ trở nên ngon lành cành đào tại cấp độ này. Có một điều là, tôi đã tưởng rằng nếu tôi tạo ra các sản phẩm, thì tôi sẽ có thể làm việc một cách chính xác những gì mà tôi muốn làm. Điều này còn lâu mới thành sự thật. Tôi có một mức độ lớn trong việc kiểm soát những gì tôi lựa chọn để làm và tạo ra, nhưng vì tôi bị ràng buộc bởi nhu cầu kiếm tiền, nên tôi phải dành ra một phần lớn sự kiểm soát đó tới thị trường. Tôi phải xây dựng những thứ mà khách hàng của tôi sẽ trả tiền để mua.

Điều này dường như có vẻ không phải là vấn đề lớn, nhưng thực ra đúng là như vậy. Tôi luôn luôn có ước mơ được viết code và làm việc trên những dự án của riêng mình. Tôi đã mơ ước rằng khi trở thành một người tạo ra sản phẩm và tiền được tạo ra từ các sản phẩm của tôi sẽ mang lại cho tôi sự tự do đó. Ở một mức độ nào đó, nhưng tôi cũng phải chú ý cẩn thận tới mong muốn của các độc giả và khách hàng của mình và tôi phải đặt trọng tâm chính của mình vào việc xây dựng những thứ đó.

Cấp độ này cũng khá là áp lực, bởi vì mọi thứ phụ thuộc vào bạn. Bạn phải thành công mới có thể thu được tiền. Khi bạn là một người làm thuê, tất cả bạn phải làm đó là làm hết công việc được giao. Khi bạn là một freelancer, bạn chỉ phải tìm kiếm khách hàng và làm công việc đã thỏa thuận – bạn nhận được thù lao cho công việc bạn làm chứ không phải là các kết quả. Khi bạn là một người tạo ra sản phẩm, bạn có thể dành ra 3 tháng trời để làm việc trên một cái gì đó mà không nhận được đồng cắc nào cả. Không ai quan tâm về bạn đã làm bao nhiêu khối lượng công việc, chỉ kết quả cuối cùng mới quan trọng.

Về thu nhập tiềm năng thì không có giới hạn ở đây. Bạn có thể phải vật lộn chỉ để kiếm đủ sống, nhưng nếu bạn thành công, thì không có giới hạn nào về số tiền mà bạn kiếm được, vì bạn không bị giới hạn bởi thời gian. Tại cấp độ này bạn không còn phải đổi chác giữa thời gian và những đồng đô-la nữa.

Đối với tôi, việc cố gắng để leo lên cấp độ 2 không quan trọng cho lắm, tốt hơn là chỉ làm việc cho một ai đó cho tới khi bạn có thể vươn tới cấp độ 3, bởi vì ở cấp độ tự do này thì nó mới thực sự tạo ra những khác biệt lớn trong cuộc sống của bạn. Bạn có thể vẫn không có khả năng làm việc trên thứ mà bạn muốn, nhưng ít ra thì tại điểm này – một khi bạn đã thành công – tất cả những mặt khác của cuộc đời bạn bắt đầu trở nên tự do nhiều hơn.

Cấp độ 4: tự do tài chính

tự do tài chính

Tôi không thể tìm ra một cái tên tốt hơn cho cấp độ này, nhưng đây là cấp độ mà bạn không còn phải lo lắng về việc kiếm tiền nữa. Có một điều mà tôi nhận thấy khi tôi cuối cùng cũng đã đạt đến cấp độ 3 đó là phần lớn những yếu tố khiến tôi không thể làm chính xác cái mà tôi muốn đó là sự cần thiết phải tạo ra thu nhập.

Có một sự thật rằng bạn có thể làm việc trên thứ mà bạn muốn, nhưng việc cần phải tạo ra thu nhập có xu hướng ảnh hưởng đến cái bạn làm và cách bạn làm công việc đó như thế nào. Ví dụ, tôi đã thực sự muốn tạo ra một trò video game. Tôi đã luôn luôn mơ ước làm một dự án phát triển game lớn. Nhưng tôi biết rằng nó có thể không có khả năng tạo ra lợi nhuận. Miễn là tôi đang lo lắng về thu nhập, thì sự tự do của tôi sẽ bị giới hạn ở một mức độ nào đó. Nếu tôi không có một khoản thu nhập thụ động đủ để cầm cự, thì tôi không thể bỏ làm các dự án tạo cho tôi thu nhập để bắt đầu viết code cho trò video game đó được – vâng, tôi có thể, nhưng đó không phải là cách thông mình và tôi cảm thấy khá tội lỗi về điều đó.

Vì vậy, theo quan điểm của tôi, hình thức cao nhất của tự do mà một nhà phát triển phần mềm có thể đạt được đó là khi họ được tự do về tài chính. Ý của tôi về tự do tài chính là như thế nào? Về cơ bản nghĩa là bạn không phải lo lắng về tiền bạc nữa. Có lẽ bạn đã bán startup của mình với giá vài triệu đô-la hoặc bạn có một nguồn thu nhập thụ động từ bất động sản hoặc những khoản đầu tư khác mà có thể cung cấp nhiều hơn cho nhu cầu sinh hoạt hàng ngày của bạn. (Để có thông tin tốt về làm thế nào để đạt được điều đó thì tôi đề xuất bạn nên đọc cuốn sách “Cha giàu, Cha nghèo”.)

Ở cấp độ tự do này, về cơ bản bạn có thể làm những gì bạn muốn. Bạn có thể tạo ra các phần mềm gây hứng thú cho bạn, bởi vì bạn thích như vậy – bạn không phải lo lắng về khả năng sinh lời. Nếu muốn tạo ra một ứng dụng Android thì bạn bắt tay vào làm ngay. Muốn học một ngôn ngữ lập trình mới chỉ vì bạn nghĩ nó sẽ mang lại niềm vui, bạn lao vào học ngay.

Đây luôn luôn là cấp độ tự do mà tôi đã thầm ao ước. Tôi chẳng bao giờ muốn ngồi yên mà không làm bất cứ điều gì, tôi luôn luôn muốn làm việc mà tôi cảm thấy thú vị và chỉ những thứ mà tôi quan tâm. Mọi cấp độ khác mà tôi đã nghĩ sẽ mang lại sự tự do này, thì tôi đều nhận ra là chúng không thể đáp ứng được. Tôi đã nhận ra rằng luôn luôn có một cái gì đó sẽ kiểm soát cái mà tôi làm việc trên đó, có thể là ông chủ của tôi, các đối tác hoặc các khách hàng của tôi.

Điều này không có nghĩa rằng bạn không thể kiếm được tiền từ các dự án của mình. Trong thực tế, có một nghịch lý mà tôi luôn tin tưởng, nếu bạn có thể tiến tới giai đoạn này, bạn có tiềm năng kiếm được rất nhiều tiền. Một khi bạn đã bắt đầu làm việc trên thứ mà bạn muốn, bạn sẽ làm công việc đó với một sự đam mê và nó sẽ mang lại một giá trị rất cao. Đây là lúc lập trình giống như một nghệ thuật vậy. Dĩ nhiên tôi không có bất kỳ bằng chứng nào về điều này, nhưng tôi ngờ rằng khi tôi không quan tâm về việc kiếm tiền, bởi vì bạn đang làm công việc mà bạn yêu thích, thì đó là khi bạn làm được nhiều nhất.

Đừng hiểu sai ý tôi, bạn có thể có khả năng tập trung làm những gì bạn yêu thích, thậm chí nếu bạn không tạo ra bất cứ chút tiền bạc nào. Tôi biết rất nhiều nghệ sĩ sống đói kém mà vẫn theo đuổi nghệ thuật – hoặc ít ra là họ cho phép bản thân làm như vậy – nhưng, tôi không thể làm điều đó. Tôi đã cố thử, nhưng tôi luôn luôn cảm thấy tội lỗi và bị áp lực về một thực tế rằng tôi đang làm một công việc mà không sinh ra lợi nhuận. Theo quan điểm của tôi, bạn thực sự có tự do tài chính thì mới có thể trải nghiệm được tự do sáng tạo đích thực.

Tôi thực sự đang làm việc để tiến tới cấp độ này. Về mặt kỹ thuật, tôi có thể nói rằng mình đã ở cấp độ này, nhưng tôi vẫn bị ảnh hưởng lớn bởi lợi nhuận. Mặc dù, giờ đây tôi không lựa chọn các dự án của mình chỉ dựa trên các tiêu chí sẽ tạo ra nhiều tiền nhất. Tôi đang từ chối khá nhiều dự án và cơ hội mà không cảm thấy thích hợp với cái tôi muốn làm, và tôi đang cố gắng chuyển dịch để làm việc chỉ trên những thứ mà tôi quan tâm khi mà mức thu nhập thụ động của mình tăng lên.

Bạn có thể thu được gì từ tất cả những điều này?

Vâng, điều lớn nhất đó là tự do có nhiều cấp độ khác nhau và có lẽ dù gì thì bạn sẽ không muốn trở thành một freelancer. Tôi nghĩ có nhiều lập trình viên cho rằng làm việc cho chính họ bằng cách freelancing sẽ mang lại cho họ sự tự do tối thượng. Họ không nhận ra rằng họ sẽ chỉ có khả năng làm việc chính xác về những gì họ muốn làm chỉ khi họ thực sự tự do về tài chính.

Vì vậy, lời khuyên của tôi dành cho bạn đó là nếu bạn muốn kiểm soát hoàn toàn sự sáng tạo trong cuộc sống của mình và cái mà bạn làm việc, thì bạn phải trở nên tự do về tài chính. Nếu bạn muốn một cấp độ tự trị cao hơn trong hầu hết các lĩnh vực của cuộc sống thì bạn nên cố gắng phát triển và bán các sản phẩm. Nếu bạn hạnh phúc khi trở thành ông chủ của chính mình, thậm chí nếu bạn phải làm theo đơn đặt hàng của khách, thì freelancing có thể là con đường dành cho bạn. Và, nếu tất cả những điều trên dường như là một cái giá quá đắt mà bạn phải trả, bạn có thể chỉ muốn ở lại nơi bạn đang ở và tiếp tục nhận được những khoản lương đều đặn hàng tháng – không có gì là sai trái với điều đó cả.

Nguồn:

HỒ SỸ HÙNG

Hồ Sỹ Hùng thuộc thế hệ 8x, sinh ra ở Nghệ An, học ở Hà Nội, có vài năm làm việc tại Sài Gòn, và Đồng Nai. Anh là lập trình viên có nhiều năm kinh nghiệm trong lĩnh vực: C#, VB.NET, ASP.NET, SQL Server, XML, MVC, Entity Framework… và đồng thời cũng là admin của blog http://vinacode.net/. Bạn có thể liên hệ với anh qua email hungpm2000[at]gmail.com

 

12 Bí quyết để trở thành một web designer thành công

Các nhà thiết kế web thường chỉ quan tâm đến những kỹ năng có thể nhìn thấy được của họ, như là các kỹ năng về Photoshop hoặc jQuery. Tuy nhiên, để trở nên thành công trong lĩnh vực thiết kế website thì yêu cầu nhiều hơn là chỉ có những kỹ năng đó hay chỉ đơn thuần am hiểu sâu sắc trong thiết kế. Có một số thứ rất quan trọng mà bất kỳ một nhà thiết kế web nào cũng nên lưu ý khi xây dựng các kỹ năng cho nghề nghiệp của mình. Ngoài ra chúng tôi cũng sẽ cung cấp cho bạn một danh sách “những cuốn sách nên đọc” để bạn có thể thu được nhiều thông tin có chiều sâu hơn từ đó.

Những bí quyết nào giúp tôi trở thành một Web Designer thành công?Những bí quyết nào giúp tôi trở thành một Web Designer thành công?

Giới thiệu

Ngoài việc tạo ra một trang web bắt mắt và tiếp nhận một số lượng lớn thông tin, những thách thức mà các nhà thiết kế web phải đối mặt bao gồm việc quản lý hiệu quả trong nghề nghiệp của họ. Công việc của một nhà thiết kế web không chỉ kết thúc bằng việc xây dựng những trang web trông đẹp mắt; mà bạn cũng phải quản lý tất cả những thứ liên quan để tạo ra một mô hình kinh doanh thành công. Từ việc lên kế hoạch và thực thi cho đến tiếp thị và truyền thông, một nhà thiết kế web cũng phải khôn khéo như là một chuyên gia trong từng khâu đó.

Để trở nên thành công thì yêu cầu bạn phải có một số tính cách và đặc điểm riêng… một vài trong số này có thể bạn đã có, một số khác có thể bạn biết nhưng lại sao nhãng chúng. Có những thứ không thể thu được một cách nhanh chóng thông qua đọc sách hoặc bằng cách tham gia các lớp học; thực ra nhiều trong số các kỹ năng này cần thời gian và kinh nghiệm để luyện tập. Theo quan điểm của tôi, đây là những bí quyết vô giá, khi bạn áp dụng nó qua thời gian, chúng sẽ giúp bạn đạt được nhiều thành công trong thế giới phát triển web.

Là một nhà thiết kế website chuyên nghiệp, nếu bạn áp dụng theo những bí quyết này thì sẽ giúp bạn trở thành một “ngôi sao” trong lĩnh vực này:

1. Có kỹ năng giao tiếp hiệu quả

Có kỹ năng giao tiếp hiệu quảGiao tiếp hiệu quả là một trong những kỹ năng làm cho bạn gặp nhiều thuận lợi trong bất kỳ lĩnh vực nào, nhưng nó đặc biệt quan trọng trong thiết kế web nơi mà chúng ta cần giao tiếp với khách hàng, sếp, hoặc các lập trình viên để có thể quyết định sự thành công của một dự án. Một tâm hồn nghệ sĩ thường không thích nói chuyện phiếm; Tuy nhiên, khi cần phải thể hiện bản thân và tiếp thị công việc của mình, thì bạn cần phải mạnh mẽ và rõ ràng trong truyền thông đối với khách hàng. Bạn phải có khả năng nói một cách thuyết phục về những lựa chọn trong thiết kế của mình — tại sao bạn lại lựa chọn chúng và lựa chọn đó phù hợp với công việc kinh doanh của họ như thế nào. Hơn nữa, rất nhiều cuộc tranh cãi nhỏ có thể được giải quyết một cách dễ dàng nếu bạn là một người giao tiếp tốt. Vì thế hãy giao tiếp và truyền thông thật tốt, vì đó là yếu tố để sống sót và thành công.

2. Có khả năng tiếp thị bản thân

Có khả năng tiếp thị bản thânThiết kế web là một thế giới nhỏ bé, và từ góc nhìn của một người thiết kế wesite thì nó cũng là một khu rừng rậm nhiệt đới. Các nhà thiết kế web phải cạnh tranh với nhiều đối thủ như là những kẻ đổ xô đi tìm vàng ở Mỹ vào những năm 1848… và chỉ những kẻ mạnh nhất mới sống sót. Trong mục tiêu làm cho mình vượt trội hơn những đối thủ khác, bạn cần phải cho mọi người biết về bản thân và các kỹ năng của bạn. Các nhà thiết kế thường khiêm tốn theo tính cách tự nhiên, tuy nhiên khi muốn thành công trong nghề nghiệp thì bạn sẽ phải thúc đẩy bản thân leo lên vị trí cao và chứng tỏ sự có mặt của mình. Có một số cách khác nhau để bạn có thể làm điều đó. Tiếp thị theo lối truyền miệng, thông qua mạng xã hội, hoặc thậm chí là thông qua các tấm card visit cũng mang lại kết quả tốt. Tuy nhiên, nếu bạn chỉ muốn ngồi dựa lưng trên chiếc ghế êm ái của mình và đợi cho khách hàng biết tới và tự đến, thì bạn sẽ phải chịu số phận bi đát!

3. Lên kế hoạch trước khi bạn bắt tay vào thiết kế

Lên kế hoạch trước khi bạn bắt tay vào thiết kếTrong khi nhiều nhà thiết kế chọn cách tiếp cận dự án bằng một thái độ “đợi cho nguồn cảm hứng xuất hiện”, nhưng thực ra chỉ cần một chút lên kế hoạch đã có thể giúp nguồn cảm hứng đó đến nhanh hơn. Đúng vậy, một điều rất quan trọng là phải lên kế hoạch và nghiên cứu kỹ trước khi nhảy vào quá trình thiết kế web. Việc lên kế hoạch có thể chi tiết hơn bằng cách chia làm 3 phần như sau:

  1. Tìm hiểu về công ty của khách hàng.
  2. Hỏi vị khách hàng đó về điều mà anh ta muốn và mong chờ từ trang web.
  3. Cân nhắc về những sản phẩm mà đối thủ của anh ta đang làm và những xu hướng liên quan trong ngành.

Tạo ra một bản phác thảo về trang web trong tâm trí của bạn và sau đó vẽ ra trên giấy (nếu có thể). Mặc dù việc lên kế hoạch trước khi thiết kế là một quá trình khá nhọc nhằn và ít thú vị (vì thế mà có nhiều nhà thiết kế có khuynh hướng bỏ qua nó), nhưng bù lại nó sẽ tiết kiệm thời gian, tiền bạc và tài nguyên của bạn một cách tốt nhất.

4. Ước lượng công việc của bạn và nhận những phản hồi

Ước lượng công việc của bạn và nhận những phản hồiVòng đời của một dự án thiết kế web kết thúc tại bước phân tích và ước lượng công việc. Việc có khả năng chấp nhận và thực thi các phản hồi một cách hiệu quả là một nét quan trọng của những chuyên gia sáng tạo. Giống như tất cả các yếu tố đã đề cập ở trên, việc có một con mắt tinh tường nhằm chỉ ra những sai lầm của bạn trong công việc là một phẩm chất mà một nhà thiết kế web thành công nên có. Các nhà thiết kế web nên hành động như là đang xem xét và đánh giá trang web của họ trong vai trò là những người sử dụng. Thêm nữa, thỉnh thoảng nên nhờ một người khác kiểm tra công việc của bạn để tìm những điểm sai lầm cũng là việc rất tốt.

5. Một Web Designer không đồng nghĩa với Graphic Designer

Một Web Designer không đồng nghĩa với Graphic DesignerThường có một sự hiểu sai rằng người thiết kế đồ họa, sở hữu những kỹ năng trong đồ họa máy tính thì có thể cũng là một người thiết kế website và ngược lại. Trong khi điều này có thể đúng về mặt lý thuyết, nhưng thực tế có rất ít công việc liên quan giữa các dự án in ấn và các dự án trên web.

Thực tế là công việc thiết kế website là một lĩnh vực hoàn toàn riêng biệt trong thiết kế, nó có những kiến thức chuyên môn riêng. Có hai sự khác nhau về khách hàng và mục tiêu của các trang web thì hoàn toàn khác một sản phẩm của thiết kế đồ họa. Một người thiết kế đồ họa có thể nâng cao kỹ năng để trở thành một người thiết kế web, nhưng không phải một “cao thủ” thiết kế đồ họa nào cũng thành công khi chuyển sang thiết kế web. Để thành công trong lĩnh vực thiết kế web thì bạn nên cam kết và tập trung chuyên môn chỉ cho lĩnh vực này.

6. Cập nhật những công nghệ mới

Cập nhật những công nghệ mớiThế giới công nghệ thông tin thay đổi hầu như mỗi ngày, và để có thể bắt nhịp cùng với nó, một người thiết kế web cần có khả năng cập nhật công nghệ cùng với sự thay đổi trong ngành công nghiệp này. Hãy chia nhỏ công việc hàng ngày hoặc hàng tuần của bạn và tập trung để học thêm những điều mới trong lĩnh vực này. Nhận ra cái gì là mới, cái gì là xu hướng, và cái gì là đã lỗi thời rớt lại phía sau. Nếu bạn không muốn nhìn thấy các đối thủ của bạn chiếm lấy công việc làm ăn của mình bằng cách xuất hiện với một hình ảnh tươi mới hơn bạn, thì hãy để ý đến bí quyết này.

7. Đừng lờ đi những kỹ năng mềm

Đừng lờ đi những kỹ năng mềmNếu chúng ta cho điểm các yếu tố tạo nên thành công của một người thiết kế website, thì các kỹ năng mềm trong thiết kế web có thể là một trong những điều quan trọng nhất. Như đã đề cập từ trước, lĩnh vực thiết kế website luôn cập nhật với tốc độ rất nhanh. Hầu như mỗi ngày đều có một công nghệ mới được giới thiệu. Thậm chí nếu bạn không phải là một trong những người lập trình ra những thủ thuật mới đó, thì một nhà thiết kế thành công cũng cần học và hiểu cách làm thế nào để áp dụng những kỹ thuật đó cho tốt.

Gác qua một bên những kỹ năng thiết kế cốt lõi, điều quan trọng là bạn phải nắm rõ những chủ đề giống như, cách viết mã HTML theo phiên bản mới nhất, viết code CSS chất lượng cao để có thể tương thích trên nhiều trình duyệt, thực hành tối ưu hóa kết quả trên các bộ máy tìm kiếm, các kỹ thuật về JavaScript UI, và cách xây dựng một trang web nền tảng để từ đó bạn có thể bổ sung thêm các trang hoặc nội dung theo thời gian. Dù chỉ có một ít hiểu biết cơ bản của nhiều loại kỹ năng cũng sẽ giúp bạn có được một công việc tốt hoặc những khách hàng tốt hơn.

8. Thu nạp thêm nhiều kinh nghiệm

Thu nạp thêm nhiều kinh nghiệmKinh nghiệm rất có giá trị, đôi khi thậm chí nó còn có giá trị hơn cả bằng cấp và kỹ năng của bạn. Vì vậy, thành công của một nhà thiết kế web phụ thuộc rất nhiều vào kinh nghiệm của bạn ở trong lĩnh vực đó. Bất kể đó là ông chủ hay khách hàng tiềm năng của bạn, mọi người thường thích thú khi biết các kinh nghiệm trước đây mà bạn có, những công ty nào mà bạn đã trải qua, và những dự án nào mà bạn đã làm việc trên nó. Từ góc nhìn của bạn, việc có nhiều kinh nghiệm trong lĩnh vực này sẽ giúp bạn nhanh chóng nhận ra các giải pháp thiết kế ngay khi mà người ta mới chỉ đưa cho bạn trong buổi họp. Lời khuyên của tôi là, nếu bạn vẫn còn đang là sinh viên ngồi trên ghế nhà trường: thì đừng ngồi đợi cho đến khi tốt nghiệp rồi mới đi xin việc, nên tận dụng khoảng thời gian rảnh rỗi để bắt đầu làm việc trên những dự án thiết kế web ngay lúc này. Càng nhiều kinh nghiệm mà bạn kiếm được, thì bạn sẽ càng nhanh chóng thăng tiến trong thế giới thiết kế web.

9. Tổ chức công việc

Tổ chức công việcTổ chức tốt trong công việc sẽ mang lại rất nhiều hiệu quả. Không quan trọng là bạn làm việc trong lĩnh vực nào, ngăn nắp trong công việc là một yếu tố quan trọng để cho mỗi người có thể thành công. Cũng vậy, trong thiết kế web thì công việc của bạn có thể thực sự lộn xộn về mặt thời gian, và điều này có thể dẫn tới việc bạn sẽ đối mặt với nhiều vấn đề rắc rối. Vì thế hãy bắt đầu sắp xếp máy tính của bạn bằng việc phân loại văn bản, hình ảnh, đồ họa, video, và thậm chí là các file âm thanh trong các thư mục riêng biệt và đánh nhãn chúng một cách thích hợp. Tạo ra một danh sách những-việc-cần-làm-ngay cũng có thể giúp các nhà thiết kế web luôn giữ cho bản thân họ luôn ngăn nắp, tiết kiệm được thời gian để kết thúc được công việc của họ dễ hơn.

10. Có một sự nhạy bén trong kinh doanh

Có một sự nhạy bén trong kinh doanhCác nhà thiết kế website, cho dù làm freelancer hay làm nhân viên cho các công ty, nên có một tinh thần kinh doanh khi tiếp cận tới bất kỳ dự án nào. Thiết kế trong thế giới thật thì tất cả là nghệ thuật bán hàng, thông qua việc định giá công việc và cân bằng chi phí. Một nhà thiết kế web thành công thì không chỉ thiết kế website cho khách hàng của họ, mà còn tạo ra những giải pháp kinh doanh cho chính bản thân họ nữa. Nếu bạn là một người hiểu khách hàng và tiếp thị những thứ mà họ cần vì có thể đoán được suy nghĩ của các khách hàng tiềm năng, thì bạn sẽ chắc chắn có lợi thế vượt qua các đối thủ khác. Tuy nhiên, nếu bạn nhận thấy khía cạnh kinh doanh trong thiết kế hơi rắc rối, thì bạn nên tìm cách làm việc cho một studio lớn và họ sẽ chịu trách nhiệm chính cho bạn trong phần này.

11. Có khả năng làm việc nhóm

Có khả năng làm việc nhómCông việc thiết kế website hiếm khi là chỉ một người làm. Dù cho bạn đang làm việc cho một studio thiết kế lớn hay với một khách hàng nhỏ, thì làm việc nhóm là điều không thể tránh khỏi. Trong khi công việc của một nhà thiết kế web không yêu cầu một nhóm nhiều người (trong nhiều trường hợp thì nó có cảm giác giống như là bạn đang làm tất cả công việc một mình vậy), điều quan trọng là khả năng thường xuyên làm việc với những người khác và ủy quyền các công việc trong dự án. Việc trở thành một thành viên tốt nghĩa là hiểu vai trò của bạn trong một kế hoạch lớn, và có khả năng giúp đỡ những người khác – như là một câu thành ngữ xưa có nói rằng: hai cái đầu thì luôn tốt hơn một cái đầu. Hãy học cách cộng tác một cách hiệu quả với những người khác, và quan sát sự tiến bộ của bạn!

12. Hãy cập nhật trang hồ sơ Portfolio của bạn

Hãy cập nhật trang hồ sơ Portfolio của bạnViệc duy trì một trang hồ sơ portfolio tốt là một yếu tố quyết định tới bất kỳ sự thành công của nhà thiết kế nào… nhưng một nhà thiết kế website thì phải đối mặt với những vấn đề riêng: công việc của bạn cần phải luôn luôn cập nhật mới nhất! Trong khi một người thiết kế poster có thể khá ổn khi giữ những dự án từ những năm 1980 trong hồ sơ portfolio của họ bởi vì mẫu thiết kế đó vẫn không bị lạc hậu, còn bản hồ sơ portfolio về thiết kế website của bạn sẽ tệ đến mức nào nếu bạn còn giữ những dự án từ những năm 1990?

Bản hồ sơ đó là phương tiện tốt nhất cho các nhà thiết kế website có thể trưng bày các khả năng của họ và khiếu thẩm mỹ, nhưng quan trọng hơn, nó cho các khách hàng tiêm năng biết là bạn luôn cập nhật công nghệ, có năng lực, và tích cực trong thế giới thiết kế ngay lúc này, không phải là 5 năm về trước. Thay vì khoe khoang một cách bâng quơ về những trang web mà bạn đã làm, trang hồ sơ portfolio nên đưa bằng chứng chắc chắn cho mọi người thấy cái mà bạn có khả năng làm. Bạn sẽ muốn một hồ sơ portfolio chứa tất cả khía cạnh của thiết kế website… bao gồm các layout, quản trị nội dung, viết bài, typography, màu sắc, các kỹ thuật và thiết kế liên quan. Hãy cho khách hàng tiềm năng của bạn thấy đầy đủ các loại công việc của bạn, điều đó sẽ giúp bạn không chỉ kiếm thêm được các khách hàng mới, mà nó còn chứng minh cho việc tính thêm tiền cho dịch vụ của bạn là hợp lý!

Một số nơi để bạn có thể nhận thêm thông tin

Chúng tôi đã đưa ra những nguyên tắc trên theo một cách ngắn gọn súc tích nhất có thể, nhưng nếu bạn muốn nghiên cứu sâu và nhận thêm nhiều thông tin khác thì sao? Tôi đã liệt kê ra một danh sách các cuốn sách tập trung vào phần “ngoài thiết kế” trong việc quản lý của nghề thiết kế website.

Kết luận

Thiết kế website là một lĩnh vực đầy thách thức. Để thành công trong lĩnh vực này thực sự yêu cầu bạn phải kiên nhẫn, tập trung vào các kỹ năng nhất định và đừng bao giờ nản lòng khi mọi thứ không trở nên giống như mong đợi. Cái mà bạn cần để thành công trong nghề nghiệp thiết kế web là tính kiên trì và một thái độ ‘không bao giờ từ bỏ’. Có lẽ nhiều người trong số các bạn đã biết về các bí quyết ở trên; Tuy nhiên, mục đích của tôi là cung cấp chỉ dẫn tới những ai mà chưa biết những yếu tố tạo nên thành công đó, và cũng nhắc nhở tới những người mà đã biết rõ về chúng.

Nguồn bài viết: Hồ Sỹ Hùng, blog công nghệ vinacode.net. Bài viết đã được sự cho phép chia sẻ của tác giả bằng email.

Anh Hồ Sỹ Hùng, một developer thế hệ 8x, blog của anh có nhiều bài dịch từ các trang nước ngoài, rất phù hợp với những bạn khả năng Tiếng Anh còn yếu. Đây là blog hay cho các bạn là lập trình viên, các bạn quan tâm có thể đọc nhiều bài viết hay của anh tại vinacode.net

8 rào cản cần vượt qua khi học lập trình

Nghề lập trình viên vẫn luôn là một ngành nghề “hot” hiện nay khi nhu cầu tuyển dụng vẫn rất cao và mức lương được trả rất hấp dẫn dẫu cho bạn chỉ là sinh viên vừa mới ra trường. Tuy nhiên, cũng vì thế mà có khá nhiều nhận định sai lầm khi lựa chọn học lập trình.

Sau đây,  xin gửi đến các bạn 8 rào cản cần vượt qua khi học lập trình dưới con mắt của Andrei Soare – một lập trình viên “lão làng” từng làm việc tại các tập đoàn lớn như Google và Nokia.
[​IMG]
Khi còn là giảng viên bộ môn lập trình web trên nền tảng JavaScript, tôi đã chứng kiến rất nhiều học viên xông xáo bước vào quá trình học lập trình và ngay sau đó lập tức “vỡ mộng”.

Hầu hết mọi học viên đều trải qua các rào cản khi bước vào con đường lập trình. Tuy nhiên, nếu có thể vượt qua được, họ sẽ có được những lợi ích như sau đây:

  • Họ yêu thích và tận hưởng những gì có được sau khi học.
  • Họ lập trình một cách nhanh nhạy và thuần thục hơn hẳn.
  • Họ trở nên bền bỉ và kiên trì hơn khi gặp phải những vấn đề khó khăn
  • Họ trở nên độc lập hơn khi viết những đoạn code

Sau đây là những rào cản cần phải vượt qua khi học lập trình

1. Bạn học lập trình không phải vì cái lợi trước mắt

[​IMG]

Trước khi nói về các rào cản học lập trình có thể gặp phải, tôi muốn khẳng định lại một lần nữa về tầm quan trọng của “động lực học” trong suốt quá trình học tập. Đừng bao giờ học lập trình vì những lợi ích trước mắt hoặc chỉ vì bạn thấy cái nghề lập trình viên “sang chảnh” và được trả lương cao.
Hãy học lập trình khi bạn muốn giải quyết các vấn đề của riêng bạn, cải thiện cuộc sống của bạn và để tạo ra những ứng dụng nhằm giúp đỡ mọi người.

Nếu bạn học lập trình chỉ đơn giản là vì muốn có một công việc “trong mơ”, bạn có thể sẽ gặp khá nhiều thứ thôi thúc bạn bỏ cuộc trong suốt quá trình học. Điều này thường xảy ra khi mọi thứ trở nên quá khó nhằn và việc học trở thành một cơn ác mộng đau thương. Và tin tôi đi, bạn sẽ tự nhủ với bản thân mình hàng tá lý do để bỏ cuộc như: mình chẳng hề thích lập trình, mình sinh ra không phải là để trở thành một lập trình viên…

Đó chính là lý do mà bạn nên cân nhắc đặt ra cho mình một mục tiêu trước một dự án tương lai của mình. Nếu bạn đã ấp ủ sẵn một dự án nào đó hoặc một vấn đề lớn hơn để giải quyết, hãy tự nói với bản thân mình như sau:
Rất có thể khi bắt đầu, tôi sẽ phải trải qua những thứ chẳng hề thích thú, dễ chịu gì nhưng tôi thật sự muốn giải quyết các vấn đề đó. Và tôi sẽ tự thúc đẩy bản thân mình cho đến khi nào chinh phục được những gì đã đặt ra,

2. Bạn không biết bắt đầu từ đâu

[​IMG]
Rất nhiều người đã từng hỏi một câu hỏi sau: “Ngôn ngữ lập trình nào tôi nên học đầu tiên?” Vấn đề này được hình thành bởi vì họ không rõ lí do tại sao họ lại muốn học lập trình.

Một khi bạn đã xác định rõ mục đích của mình thì rất dễ để tìm ra ngôn ngữ lập trình nào bạn nên bắt đầu với:

  • Nếu bạn muốn lập trình ứng dụng trên nền tảng HDH iOS, hãy bắt đầu với Objective C hoặcSwift
  • Nếu bạn muốn lập trình ứng dụng trên nền tảng HDH Android, hãy bắt đầu với Java
  • Nếu bạn muốn lập trình ứng dụng trên nền tảng web, hãy bắt đầu với JavaScript

Thực tế ngày nay bạn có thể sử dụng JavaScript để lập trình hầu hết mọi dự án từ những trang web đơn giản, những ứng dụng di động cho đến những project liên quan đến phần cứng cao cấp. Có thể nói, bộ ngôn ngữ lập trình này được dùng trong gần như tất cả các lĩnh vực như: âm nhạc, y dược, game, thời trang…

Nếu bạn vẫn chưa rõ nên bắt đầu từ đâu, hãy đi xin lời khuyên từ các lập trình viên có kinh nghiệm. Khi bạn biết rõ mình sẽ làm gì, người lập trình viên đó có thể dễ dàng đề xuất một bộ ngôn ngữ thích hợp cho bạn.

Một lưu ý nhỏ rằng những kiến thức mà bạn có được với một loại ngôn ngữ lập trình vẫn có thể được chuyển đổi qua một loại ngôn ngữ khác. Vì thế vẫn có một chút rủi ro ở giai đoạn này.

3. Bạn không thể áp dụng những gì đã học và bắt đầu “sỉ vả” bản thân mình

Một khi đã lựa chọn một được bộ môn nào đó để học, bạn sẽ bắt đầu một cách khá dễ dàng với những lí thuyết cơ bản. Có hàng trăm, hàng ngàn khóa học lập trình miễn phí và tính phí ngay trên Internet.

Hầu hết mọi học viên của tôi đều nắm rất rõ lý thuyết đã học và có thể giải thích được cách thức vận hành của những đoạn mã code. Có thể nói, lý thuyết là một khái niệm mang tính chất hữu hạn, ai cũng có thể học thuộc trong vài ngày (nếu thật sự muốn). Vậy nên vấn đề nằm ở đâu?

Vấn đề lớn nhất mà học viên gặp phải là áp dụng những lý thuyết đó để giải quyết các vấn đề và viết nên một bộ code mới. Đó chính là vấn đề liên quan đến lỗ hổng những kỹ năng.

Hãy tưởng tượng việc lập trình như bộ môn bơi lội. Bạn có thể thuộc nằm lòng các kỹ thuật cao cấp và thậm chí giảng giải cho người khác nghe như một huấn luận viên thực thụ. Tuy nhiên, để áp dụng những lý thuyết đó vào thực tiễn đòi hỏi một quá trình luyện tập và cả những khó khăn, sai lầm… Nói đơn giản hơn, bạn sẽ phải “uống nước” khá nhiêu đấy.
[​IMG]
Điều tệ hại hơn là việc tự hành hạ, sỉ vả chính bản thân mình. Hoặc nhẹ nhàng hơn là có những ý nghĩ tiêu cực như bạn bất tài, không đủ thông minh để lập trình. Những điều này hoàn toàn vô nghĩa, bạn còn cả một quá trình học tập phía trước cần đến sự kiên trì, bền bỉ để vượt qua. Vậy nên, bạn trau dồi kỹ năng của mình bằng cách nào?

1. Lựa chọn một dự án phức tạp để thực hiện. Trên lý thuyết, điều này sẽ mang lại nhiều thú vị bất ngờ cho bạn.

2. Chia nhỏ và gói gọn những dự án lớn và phức tạp. Một ví dụ điển hình là việc “tích hợp trang đăng nhập vào website”. Công việc này đòi hỏi hơn 20 dòng mã để giải quyết. Vi thế sau đây là những mẹo nhỏ có thể giúp được bạn.

  • Nếu bạn không thể giải quyết trọn vẹn một vấn đề, thì hãy tìm ra cách chia nhỏ nó ra thành những phần nhỏ hơn.
  • Một dự án không đòi hỏi bạn phải sử dụng quá nhiều các mô hình lý thuyết cùng một lúc.

3. Tập trung vào một công đoạn tại một thời điểm hơn là giải quyết nhiều công đoạn song song cùng một lúc với nhau. Đừng tiến đến công đoạn tiếp theo khi bạn vẫn chưa kiểm tra kĩ càng phần hiện tại. Nếu bạn không làm như thế và ứng dụng của bạn “dở chứng”, thì vấn đề của bạn có thể nằm trong bất cứ công đoạn nào mà bạn đang giải quyết song song với nhau. Và bạn sẽ gặp khá nhiều khó khăn để tìm ra lỗi và sửa chúng.​

4. Cần phải nắm rõ các lý thuyết cần thiết trước khi bắt tay vào giải quyết các vấn đề. Đôi khi bạn sẽ không biết những gì bạn cần. Điều này là bình thường và việc bạn cần làm là đi hỏi 1 một lập trình viên nào đó hoặc lên một trang diễn đàn về lập trình để tham khảo như: StackOverflow

5. Cuối cùng, khi bạn giải quyết các tác vụ, sẽ có nhiều rào cản khác được trình bày như bên dưới:

4. Bạn viết code nhưng không hề suy nghĩ về những hệ quả, vấn đề sâu xa hơn của chúng

[​IMG]
Giả định trường hợp tốt nhất mà bạn đạt được là bạn giải quyết các tác vụ thành công và hoạt động tốt. Sau đó, nếu bạn chỉ dừng lại ở đó và tiếp tục qua một công việc khác thì bạn đã bỏ lỡ một cơ hội để học được những điều mới rồi đấy.

Tôi khuyến khích các bạn tự thử thách chính mình các câu hỏi sau đây:
[​IMG]

  • Có còn một trường hợp ngoại lệ nào đó khiến bộ code của tôi bị lỗi hay không? Cho dù hiện tại bộ code vẫn hoạt động tốt nhưng liệu có 1 trạng thái ứng dụng nào khiến nó bị hư không?
  • Bộ code của tôi có đủ “sạch” không? Tức nó có dễ hiểu và dễ sửa chửa sau này bởi những nhà lập trình viên khác và kể cả tôi hay không? Trong tương lai bạn có thể sẽ cần sửa các lỗi ẩn trong bộ code của bạn hoặc thay đổi nó để phù hợp với những thống số sản phẩm khác.
  • Liệu cách làm của tôi có phải là tốt nhất chưa? Liệu còn phương cách thay thế nào khác không? Những điểm mạnh và điểm yếu của những cách làm khác nhau? Và cuối cùng nó có đáng để xử lý tác vụ này bằng một phương cách khác không?
  • Liệu mô-đun hiện hành có tương tác được với các mô-đun khác không? Và liệu nó có tác động xấu đến các mô-đun còn lại không? Cuối cùng, mô-đun này có thể dễ dàng sử dụng bởi các mô-đun khác không?

5. Bạn không biết cách để giải quyết các tác vụ

[​IMG]

Khi bạn không biết bắt đầu từ đâu, bạn có thể thử một vài thứ ngẫu nhiên hoặc sao chép đoạn code từ một nơi nào đó mà bạn không hề hiểu. Nhưng đó không phải là một cách làm đúng đắn. Bởi vì bạn sẽ gặp lại những tác vụ tương tự vậy trong tươi lai và tiếp tục mắc kẹt với chúng.

Nếu bạn muốn xử lý các tác vụ một cách triệt để, trước tiên phải tìm ra nguyên nhân tại sao bạn lại bị mắc kẹt. Sau đây là một vài lý do:

1. Bạn chưa nắm rõ lý thuyết

  • Cú pháp ngôn ngữ (language syntax)
  • Cách thức hoạt động của thư viện lập trình, của một API…
  • Lập trình hệ biến hóa (Programming paradigms) – ví dụ: lập trình không đồng bộ (asynchronous programming)
  • Cách thức hệ thống hoạt động (ví dụ: những yêu cầu HTTP là một trong những thứ khó hiểu nhất trong lập trình web)

Trong trường hợp này, hãy đọc kĩ lý thuyết lại một lần nữa hoặc tìm một ai để giải thích cho bạn nếu như vẫn chưa nắm rõ được vấn đề.

2. Một tác vụ quá lớn và cần phải được chia nhỏ ra để giải quyết

3. Bạn không hiểu được những gì công việc đang yêu cầu bởi bạn đọc nó quá nhanh và chấp nhận những mẫu có sẵn quen thuộc mặc dù thực tế không phải như vậy.

6. Bạn biết cách để giải quyết vấn đề nhưng phương cách mà bạn đưa lại không hoạt động

[​IMG]
Đây là một việc thường gặp trong lập trình, thậm chí đối với cả những lập trình viên lâu năm. Nguyên nhân vì sao mà phương cách của bạn không hoạt động hầu hết là do lỗi trong bộ code.

Vậy làm cách nào để sửa chửa? Đơn giản thôi, gỡ rối (debugging) bộ code của bạn. Đây là một trong những kĩ năng quan trọng nhất của một người lập trình viên. Đây là một công việc bạn không làm một cách ngẫu nhiên hoặc hên xui mảy rủi. Bạn cần những bước làm cụ thể để tìm ra lỗi trong bộ code. Hiện nay đang có rất nhiều loại sách hướng dẫn kĩ năng gỡ rối này.
[​IMG]
Thật không may, có rất nhiều lập trình viên non trẻ đã mất đi động lực và ý chí ở giai đoạn này. Rất ít khóa học giải thích tầm quan trọng của việc gỡ rối bộ code. Và nếu bạn không thể thực hiện công đoạn này một cách thành thục, bạn có thể sẽ bị quá tải và tress đấy.

Rất nhiều người lo lắng việc gỡ rối code sẽ tiêu tốn rất nhiều thời gian. Điều này là bình thường và bạn cần phải chuẩn bị tinh thần cho việc này ở những năm đầu làm lập trình.

Một khi đã có trình độ khá hơn, bạn cũng cần trau dồi khả năng gỡ rối code. Hãy nghĩ công việc này như một cơ hội để sửa chửa những quan niệm sai lầm và nâng cao trình độ lập trình của bạn. Mỗi khi bạn sửa chữa xong một lỗi, hãy tự đặt cho mình một câu hỏi:
Tại sao tôi lại mắc lỗi này trong lần đầu thực hiện? Làm cách nào để tôi tránh được những lỗi tương tự trong tương lai.

Viết nhật ký lập trình mỗi khi bạn tìm ra một lỗi nào đó là một ý kiến hay. Điều này sẽ giúp bạn nhanh chóng thấy những kiểu mẫu và học hỏi từ chúng.

7. Bạn không biết cách nhận các sự giúp đỡ

[​IMG]
Không biết cách nhận các sự giúp đỡ là như thế nào? Đó là khi học lập trình, bạn sẽ nhận được rất nhiều sự giúp đỡ khác nhau đến từ: sách, khóa học, giảng viên, cộng đồng lập trình…

Vấn đề thường gặp nhất là việc bạn đã nắm rõ những sự giúp đỡ từ những nguồn được liệt kê ở trên nhưng lại không thúc ép bản thân để hiểu được hoàn toàn những gì đang diễn ra cũng như cách để suy luận ra những trường hợp lớn hơn.

Một ví dụ: Sau 10 tiếng đồng hồ giải quyết những lỗi, đã có một người đưa ra cho bạn những giải pháp cho điều này. Sau đó, bạn sửa lỗi một cách dễ dàng, ăn mừng vì điều đó và tiến đến công đoạn tiếp theo. Đừng làm như vậy, hãy làm những bước sau đây:

  • Nghĩ về những gì mình đã thực hiện trong suốt quá trình vừa qua. Tự hỏi bản thân mình đã làm sai những gì và ngược lại, mình đã có thể làm gì để tìm ra cách giải quyết.
  • Hỏi người đã giúp mình về cách thức họ đã làm. Làm cách nào mà anh ta/ cô ta có thể tìm được cách giải quyết? Hãy học hỏi từ họ và áp dụng vào những trường hợp trong tương lai.

Đây là một trong những hạn chế nếu bạn đọc những câu trả lời ở các cộng đồng như StackOverflow hoặc hỏi Google. Bạn sẽ không thể nào biết được quá trình một người nào đó tìm ra được cách giải quyết một vấn đề gặp phải.

8. Bạn không thể áp dụng những gì đã học

[​IMG]
Hình như điều này đã nói ở trên rồi thì phải? Vâng, tôi chỉ muốn nhắn nhủ các bạn rằng những gì bạn đang đọc nãy giờ cũng chỉ là những lý thuyết mà thôi.

Những lý thuyết không thể giúp được bạn trừ khi bạn áp dụng chúng, không chỉ một lần mà là cơ số lần cho đến khi nó trở thành một thói quen. Lập trình có thể xem như là một công việc tập hợp những thói quen tốt nhằm giúp bạn thoát khỏi những vấn đề của bản thân mình.

Bạn đọc thấy sao về 8 điều trên? Hãy chia sẻ ý kiến của bạn nhé.

Nguồn: The Next Web

Chuyện hỏi

Tác giả: Eric Steven Raymond, Rick Moen
Biên dịch: Hoàng Tuấn Quỳnh, Nguyễn Tiến Hải Bình, Nguyễn Minh Hương
Nguồn bài viết : http://forum.ceh.vn/
Những gì bạn đọc dưới đây không phải là tài liệu gốc.
Một câu hỏi rõ ràng, không ỷ lại, thực sự cầu thị khiến cho:

  • Câu trả lời nhận được mau chóng, xác đáng.
  • Người trả lời cảm thấy thú vị, sẵn sàng bỏ thời gian giúp đỡ.
  • Và hơn thế nữa người đặt câu hỏi được coi trọng vì trí tuệ phong phú, chính xác, cũng như cách làm việc nghiêm túc, chân thành phản ánh qua câu hỏi
  • Cuối cùng hãy nhớ rằng chúng ta muốn học được một điều gì đó từ 1 câu hỏi thông minh

1. Trước khi bạn hỏi

Cố gắng tìm câu trả lời bằng cách tìm kiếm trên Web, tài liệu hướng dẫn, kiểm tra hoặc thử nghiệm…

2. Khi bạn hỏi

  • Hãy viết tiêu đề một cách rõ ràng, mạch lạc.
  • Hãy giúp việc trả lời dễ dàng. Thông tin liên lạc của bạn cũng quan trọng như cách bạn đặt câu hỏi để được trả lời xác đáng.
  • Hãy viết bằng ngôn ngữ rõ ràng, đúng ngữ pháp và chính tả.
  • Hãy mô tả vấn đề của bạn một cách chính xác với đầy đủ thông tin.
    – Mô tả triệu chứng của vấn đề hay lỗi mà bạn gặp cách rõ ràng.
    – Mô tả môi trường xảy ra sự cố (máy tính, hệ điều hành, các ứng dụng và những gì liên quan).
    – Mô tả các nghiên cứu mà bạn đã tiến hành để thử và tìm hiểu về vấn đề trước khi bạn đặt câu hỏi.
    – Mô tả các bước kiểm tra mà bạn đã tiến hành để thử và xác định vấn đề trước khi bạn đặt câu hỏi.
  • Hãy mô tả triệu chứng sự cố, chứ không phải những phỏng đoán.
  • Đừng đòi hỏi được trả lời bằng thư riêng.
  • Hãy lược bớt các câu hỏi vu vơ. Tránh đặt các câu hỏi kiểu “Ai đó có thể giúp tôi được không?” hay “Liệu có câu trả lời nào không nhỉ?”
  • Đừng đánh dấu câu hỏi của bạn là ”Khẩn cấp”, cho dù nó là khẩn cấp đối với bạn. Đó là vấn đề của bạn, không phải của chúng tôi.
  • Phép lịch sự không bao giờ thừa, và đôi khi rất có ích. Hãy tỏ ra lịch sự. Nên sử dụng các cụm “Làm ơn”, “Cám ơn vì đã quan tâm” hay “Cám ơn vì đã xem xét vấn đề
  • Hãy thông báo về kết quả của các giải pháp được tư vấn (chốt lại vấn đề)

Sau khi vấn đề của bạn đã được giải quyết, hãy gửi một thông báo tới tất cả những người đã giúp bạn, để họ biết rằng vấn đề đã được giải quyết như thế nào và một lần nữa cám ơn sự giúp đỡ của họ.

3. Câu hỏi hay và dở

Hỏi dở: Tôi có thể tìm các tài liệu về Foonly Flurbarmatic ở đâu?
Hỏi kiểu này sẽ nhận được trả lời là “STFW” (Viết tắt của: search the fucking Web)

Hỏi hay: Tôi đã tìm “Foonly Flurbamatic 2600” trên Google, nhưng không kiếm được thông tin nào bổ ích. Không biết ai có thể chỉ cho tôi chỗ tìm được các tư liệu lập trình cho thiết bị này không?
Câu hỏi này đã được STFW rồi, có vẻ như là anh ta gặp rắc rối thật

Hỏi dở: Code của chương trình foo không compile được. Sao nó lại bị thế nhỉ?
Người hỏi câu hỏi này đổ lỗi cho người khác đã làm sai. Đúng là thằng ngốc.

Hỏi hay: Code của chương trình foo không compile được trong môi trường Nulix phiên bản 6.2. Tôi đã đọc FAQ, nhưng không thấy có nhắc đến vấn đề nào liên quan tới Nulix. Đây là bản ghi lại quá trình compile của tôi, có phải tôi đã làm gì sai không?
Anh ta đã chỉ rõ môi trường làm việc, đã đọc FAQ, chỉ ra lỗi và anh ta không đổ lỗi của vấn đề của mình là do người khác. Anh chàng này cũng đáng được quan tâm đây.

Hỏi dở: Bo mạch chủ của tôi bị làm sao ấy. Ai giúp tôi với được không?
Hacker Bất Kỳ sẽ trả lời bạn như thế này: “Được rồi. Thế em có cần thay tã và bón ăn luôn thể không?” kèm theo là nút delete xoá phăng thư của bạn.

Hỏi hay: Tôi đã thử X, Y và Z trên bo mạch chủ S2464. Khi không chạy được, tôi lại thử với A, B và C. Có một triệu chứng rất lạ khi thử với C. Rõ ràng “florbish” là “grommicking”, nhưng kết quả lại không như mong đợi. Cho hỏi các nguyên nhân thường gặp gây nên “grommicking” trên bo mạch chủ Athlon MP là gì? Có ai có biết nên thử kiểm tra với cái gì nữa để tôi có thể xác định rõ hơn nguyên nhân vấn đề?

4. Ngu ngốc và thông minh

Ngu ngốc:
CỨU! Màn hình không làm việc tốt trên máy tính xách tay của tôi!

Thông minh:
XFree86 4.1, Con trỏ chuột bị méo mó, Fooware MV1005 vid. chipset

Thông minh hơn nữa:
Con trỏ chuột trong XFree86 4.1 (dùng chipset Fooware MV1005 vid.) bị méo mó

Ngu ngốc:
Tôi liên tục bị lỗi SIG11 khi biên dịch nhân, và cho rằng có một vết rạn nhỏ trên các vi mạch của bo mạch chủ. Đâu là cách tốt nhất để kiểm tra điều này?

Thông minh:
Cái máy tính tự lắp lấy của tôi dùng K6/233 trên bo mạch FIC-PA2007 (VIA Apollo VP2chipset) – với 256MB Corsair PC133 SDRAM – bắt đầu thường xuyên bị lỗi SIG11 khoảng 20 phút sau khi bật máy trong lúc đang biên dịch nhân, nhưng không bao giờ bị trong 20 phút đầu. Khởi động lại máy cũng không làm khởi động lại đồng hồ nhưng để máy tắt qua đêm thì có. Đẩy hết dữ liệu từ bộ nhớ sang phân vùng hoán đổi cũng không giúp gì. Sau đây là bản ghi của phiên biên dịch tiêu biểu.

Ngu ngốc:
Làm thế nào để có được công cụ chọn mầu trong chương trình FooDraw để lấy được giá trị thập lục phân của màu RGB?

Thông minh:
Tôi đang cố thay bảng mầu trong một hình ảnh với các giá trị khác mà tôi đã chọn. Ngay bây giờ cách duy nhất mà tôi thấy có thể làm là sửa từng bảng mầu một nhưng tôi không làm sao dùng công cụ chọn mầu trong FooDraw’s để lấy một giá trị thập lục phân của màu RGB.
————————————————————————————————————
Nguồn: Internet Wink

Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?

Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?
Vừa gà vừa chó, bó lại cho tròn, ba mươi sáu con, một trăm chân chẵn. Hỏi mấy gà, mấy chó?

Có một bài toán dân gian khá thú vị như sau:

Vừa gà vừa chó
Bó lại cho tròn
Ba mươi sáu(36) con
Một trăm(100) chân chẵn
Hỏi mấy gà, mấy chó?

Đây là bài toán vui, từ khi học tiểu học mình đã biết, lên trung học, học giải phương trình cũng gặp lại nó. Và bây giờ, làm lập trình, tự dưng nhớ tới nó, nên viết ra đây, coi như chia sẻ cho các bạn mới học lập trình có thêm hào hứng, giải quyết các bài tập nho nhỏ, vui vẻ tương tự.

Cách giải nó như sau:

Gọi x là số gà
Số chó là: 36 – x
Số chân gà: 2x
Số chân chó: 4(36-x)
theo đề bài ta có:
2x + 4(36 – x) =100
2x + 144 – 4x = 100
2x = 144 – 100
2x = 44
x = 22
Vậy số gà là 22 con
Số chó : 36 – 22 = 14

Bạn bảo mấy con chó đặt 2 chân trước lên ghế,tổng số chân dưới đất sẽ là 36 x 2  = 72 chân. Suy ra số chân trên ghế là 28 chân.
Vậy có 14 con chó ….

Dùng hệ phương trình
Gọi x là gà, y là chó
Ta có hệ pt:
x + y = 36
2x + 4y = 100
Giải hệ pt
x = 22,y = 14
Vậy gà có 22 con, chó có 14 con. Mời các bạn chia sẻ thêm cách giải hay, thú vị khác nữa nhé.

Vậy thì làm sao để giải nó bằng cách lập trình. Đây không phải vấn đề khó với nhiều bạn, tuy nhiên mình thấy vui vẻ, nên vẫn viết ra đây.

Sau đây là cách giải trong một số ngôn ngữ lập trình như Pascal, C++, C#, Java, PHP, ASP.NET, Javascript. Trường hợp máy bạn không cài sẵn IDE, bạn có thể sử dụng trang web http://ideone.com để chạy thử code.

Vì số con là 36 và số chân là 100. Giả sử tất cả là chó, thì số con tối đa là 100/4 = 25 (con). Tối thiểu là 36 / 4 = 9 (con). Như vậy chúng ta chỉ cần sử dụng vòng lặp for từ 9->25. Tối ưu hơn so với từ 0 -> 36

Pascal

program HelloWorld;
var i :Integer;
begin
  	writeln('Giai bai toan dan gian bang Pascal');
	writeln('Vua ga vua cho');
	writeln('Bo lai cho tron');
	writeln('Ba muoi sau(36) con');
	writeln('Mot tram(100) chan chan');
	writeln('Hoi may ga, may cho?');
	for i:= 9 to 25 do
		if((i * 2 + (36 - i) * 4) = 100) then
			writeln('So ga la: ', i);
			writeln('So cho la: ', 36 - i);
	
end.

C++

#include <string>
#include<iostream>;
#include<stdio.h>;
 
using namespace std;

int main(){
	cout << "Gia bai toan dan gian trong C++\n";
	cout << "Vua ga vua cho\n";
	cout << "Bo lai cho tron\n";
	cout << "Ba muoi sau(36) con\n";
	cout << "Mot tram(100) chan chan\n";
	cout << "Hoi may ga, may cho?\n";
	cout << "\n";
	for (int i = 9; i < 25; i++)
	{
		if ((i * 2 + (36 - i) * 4) == 100){
			cout << "So ga la: " << i << "\n";
			cout << "So cho la: " << (36 - i) << "\n";
                        break;
		}
	}
}

Java

public class Main {

	public Main() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("Giải bài toán dân gian trong Java");
		System.out.println("Vừa gà vừa chó");
		System.out.println("Bó lại cho tròn");
		System.out.println("Ba mươi sáu(36) con");
		System.out.println("Một trăm(100) chân chẵn");
		System.out.println("Hỏi mấy gà, mấy chó?\n");
		for(int i = 9; i < 25; i++){
			if((i*2+(36-i)*4)==100){
				System.out.println("Số gà là: " + i);
				System.out.println("Số chó là: " + i);
			}
		}
	}
}

C#

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Gia bai toan dan gian trong C#");
            Console.Write("Vua ga vua cho\n");
            Console.Write("Bo lai cho tron\n");
            Console.Write("Ba muoi sau(36) con\n");
            Console.Write("Mot tram(100) chan chan\n");
            Console.WriteLine("Hoi may ga, may cho?\n");
            for (int i = 9; i <= 25; i++)
            {
                if ((2 * i + (36 - i) * 4) == 100)
                {
                    Console.WriteLine("So ga la: " + i);
                    Console.WriteLine("So cho la: " + (36 - i));
                    break;
                }
            }

            Console.ReadKey();
        }
    }

ASP.NET

void GiaiBaiToanDanGian()
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 9; i < 25; i++)
        {
            if ((i * 2 + (36 - i) * 4) == 100)
            {
                sb.AppendLine("Số gà là: " + i);
                sb.AppendLine("Số chó là: " + (36 - i));
            }
        }
        Label1.Text = sb.ToString();
    }

PHP

<html>
	<head>
		<meta charset="UTF-8"/>
		<title>Bài toán dân gian</title>				
	</head>
	<body>
		<b>Giải bài toán dân gian trong PHP</b></br>
		Vừa gà vừa chó </br>
		Bó lại cho tròn </br>
		Ba mươi sáu(36) con </br>
		Một trăm(100) chân chẵn</br>
		Hỏi mấy gà, mấy chó?</br>
		</br>
		<?php 
			for($i = 9; $i < 25; $i ++)
			{
				if(($i * 2 + (36-$i)*4) == 100)
				{
					echo 'Số gà là: '.$i.'</br>';
					echo 'Số chó là: '.(36 - $i);
				}
			}
		?>
	</body>
</html>

Javascript

<script type="text/javascript">
	alert('Giai bai toan dan gian');
	for(i = 9; i < 25; i++)
	{
		if((i * 2 + (36-i)*4) === 100){
			alert('Số gà là: ' + i + '; Số chó là: '+(36-i));
		}
	}
</script>

Chúc các bạn học lập trình vui vẻ

Từng bước để trở thành một lập trình viên giỏi

Thời gian gần đây tôi có nhận được một số email mà về cơ bản đều hỏi rằng “làm thế nào để có thể trở thành một lập trình viên giỏi/ xuất sắc?”
Những dạng email kiểu này nói chung thường làm tôi cảm thấy buồn lòng, bởi vì tôi cảm thấy dường như khi bạn hỏi dạng câu hỏi này, thì bạn đang tìm kiếm một liều thuốc thần diệu nào đó khiến bạn có thể sẽ đột nhiên trở thành một lập trình viên tài ba.

Tôi nghi ngờ rằng có rất ít người trong số đã gửi email để hỏi tôi về câu hỏi này thực sự muốn biết làm thế nào để trở thành một lập trình viên xuất sắc, nhưng có lẽ họ đang chỉ muốn tìm kiếm cho mình một giải pháp nhanh chóng hoặc một câu trả lời dễ dàng.

Một mặt khác, tôi nghĩ rằng có thể có một số lập trình viên chân thật, và chỉ là họ không biết làm thế nào để đặt ra những câu hỏi cần thiết để định hướng cho tương lai của họ. Tôi nghĩ những lập trình viên này – đặc biệt là những người vừa mới vào nghề – có lẽ đang tìm kiếm cho mình một hướng dẫn từng bước để trở thành một lập trình viên xuất sắc.

Vì vậy, tôi cũng cố gắng từ chính kinh nghiệm của bản thân và những kiến thức tốt nhất mà mình có, để đưa ra một chỉ dẫn kiểu từng bước step-by-step dành cho bạn.

Lúc này đây, dĩ nhiên là tôi nhận ra rằng không có một công thức thần kỳ nào ở đây cả và rằng có rất nhiều con đường có thể dẫn đến thành công, nhưng tôi nghĩ rằng nếu làm theo những bước hợp lý được phác thảo ra sau đây thì một bạn trẻ mới vào nghề có thể vươn tới một mức trình độ khá cao và sẽ có khả năng trở thành một lập trình viên giỏi hoặc thậm chí là xuất sắc.

Bước 1: Hãy chọn lấy một ngôn ngữ lập trình, và học từ những thứ căn bản nhất

Trước khi có thể chạy, thì chúng ta phải học cách để đi trước đã. Bạn đi bằng cách học làm thế nào để lập trình trong một ngôn ngữ lập trình nào đó. Bạn đừng có học đi bằng cách cố gắng học 50 triệu thứ cùng một lúc, vì bạn không thể có phép phân thân ra như Tôn Ngộ Không được phải không nào.

Có rất nhiều lập trình viên bắt đầu bằng cách thử và nhảy vào tất cả mọi thứ một lần và không có đủ kiên nhẫn để học chỉ một ngôn ngữ lập trình duy nhất trước khi tiến lên phía trước. Họ nghĩ rằng họ phải biết tất cả những công nghệ mới đang “hot” thì mới có thể kiếm được một công việc lập trình. Trong khi đúng ra thì bạn cần biết nhiều hơn chỉ những kiến thức cơ bản của một ngôn ngữ lập trình duy nhất, bạn phải bắt đầu từ đây, vì như vậy thì bạn mới có thể tập trung được tốt nhất.

Chọn lấy một ngôn ngữ lập trình mà bạn nghĩ rằng sự nghiệp của mình về cơ bản sẽ xoay quanh nó. Ngôn ngữ lập trình đó tự bản thân nó thì không quan trọng nhiều lắm, nhưng bạn nên tính toán cả về lâu về dài nữa. Ý tôi muốn nói là bạn đừng nên thử và học một ngôn ngữ lập trình “dễ” khi bắt đầu. Hãy học bất cứ ngôn ngữ nào mà bạn cảm thấy thích thú và có thể nhìn thấy tương lai lập trình của mình trong một vài năm sắp tới. Bạn muốn chọn một cái gì đó mà sẽ mang lại giá trị lâu dài.

Một khi bạn đã chọn lấy ngôn ngữ lập trình nào đó thì bạn sẽ thử học và tìm một số cuốn sách hoặc bài thực hành mà chỉ liên quan đến ngôn ngữ lập trình đó thôi. Ý tôi muốn nói là bạn đừng tìm học các tài liệu mà dạy bạn quá nhiều thứ một lúc. Bạn nên tìm những tài liệu dành cho người mới bắt đầu mà chỉ tập trung vào ngôn ngữ đó, chứ không phải là rất nhiều công nghệ liên quan.

Khi bạn đọc xuyên suốt các tài liệu đó hoặc duyệt qua các bài thực hành mà bạn đã lựa chọn, thì hãy chắc chắn rằng bạn có thực hành viết code. Hãy làm thật nhiều bài tập có thể. Hãy thử nghiệm tất cả những gì bạn đã học được. Hãy thử gom các thứ lại với nhau và sử dụng tất cả các khái niệm mà bạn đã học được về nó. Vâng, điều này thì khá là “đau khổ”. Việc đọc hùng hục một cuốn sách từ trang đầu đến trang cuối thì rất dễ dàng, nhưng nếu bạn thực sự muốn học thực sự thì bạn cần phải thực hành.

Khi bạn đang viết code, hãy cố chắc chắn rằng bạn hiểu tất cả dòng code mà mình viết ra. Điều tương tự cũng cần làm cho bất kỳ dòng code nào mà bạn đọc. Khi viết ra những đoạn code, hãy làm chậm rãi và đảm bảo rằng bạn hiểu nó. Bất cứ điều gì mà bạn không hiểu, thì hãy tìm hiểu và làm rõ nó. Hãy dành thời gian làm điều này thì bạn sẽ không bị hổng kiến thức và mơ hồ về sau này.

Cuối cùng, hãy chuẩn bị tư tưởng là phải đọc qua một cuốn sách hoặc một hướng dẫn thực hành ít nhất 3 lần trước khi bạn có thể hiểu hết nó. Bạn sẽ không thu được phần “lập trình” trong lần thử đầu tiên – không ai từng làm được điều đó cả. Bạn cần lặp lại để bóc trần nó trước khi bạn bắt đầu có thể hiểu và thu nhận kiến thức từ nó và bạn hiểu được điều gì thực sự đang diễn ra. Cho tới một lúc bạn sẽ cảm thấy như bị lạc lối, điều đó là tốt, đó là một phần của quá trình phát triển. Chỉ việc chấp nhận nó và tiến lên phía trước.

Bước 2: Xây dựng một cái gì đó nhỏ thôi

Lúc này thì bạn đã có một hiểu biết cơ bản về một ngôn ngữ lập trình nào đó rồi, và đây là lúc để đưa những kiến thức đó vào làm việc và để nhận ra bạn đang thiếu hụt những gì. Cách tốt nhất để làm điều này là thử xây dựng một cái gì đó.

Đừng quá tham vọng tại thời điểm này – nhưng bạn cũng đừng quá nhút nhát. Hãy tìm kiếm ý tưởng tạo ra một ứng dụng mà đủ đơn giản để bạn có thể hoàn thành nó với một số nỗ lực, nhưng không phải là sẽ làm bạn mất vài tháng để hoàn thành. Cố gắng hạn chế nó chỉ trong ngôn ngữ lập trình bạn đã học nhiều nhất có thể. Đừng cố gắng để làm một cái gì đó mà phải áp dụng nhiều công nghệ khác nhau (nghĩa là, sử dụng tất cả những công nghệ từ giao diện người dùng cho đến database) – mặc dù bạn sẽ có thể cần sử dụng một vài framework hoặc API có sẵn.

Đối với ứng dụng đầu tay thì bạn có thể chọn giải pháp sao chép một cái gì đó đơn giản mà đã tồn tại rồi. Hãy tìm kiếm một ứng dụng đơn giản, kiểu như một ứng dụng dạng To-Do List, chương trình hẹn giờ tắt máy tính chẳng hạn và cố gắng mô phỏng nó. Đừng cho phép các kỹ năng thiết kế của bạn cản trở việc học lập trình.

Tạo ra những ứng dụng đơn giản trước.Tôi đề xuất bạn nên tạo ra một ứng dụng nào đó dành cho thiết bị di động, bởi vì hầu hết các ứng dụng di động thì thưởng nhỏ và khá dễ làm. Thêm nữa, việc học các kỹ năng phát triển cho di động thì rất có ích vì có rất nhiều các công ty đang bắt đầu cần các ứng dụng di động. Ngày nay, bạn có thể xây dựng một ứng dụng di động trong hầu như bất kỳ ngôn ngữ lập trình nào. Có rất nhiều giải pháp mà cho phép bạn xây dựng một ứng dụng cho các hệ điều hành di động khác nhau sử dụng rất nhiều các ngôn ngữ lập trình.

Bạn cũng có thể xây dựng một ứng dụng web nhỏ, nhưng cố gắng không nhảy quá sâu vào nhiều công nghệ phát triển web phức tạp. Về cơ bản tôi đề xuất bạn nên bắt đầu bằng một ứng dụng di động, bởi vì phát triển web thì có vẻ rắc rối hơn một chút cho người mới bắt đầu. Để phát triển một ứng dụng web thì bạn sẽ phải cần biết ít nhất là một số kiến thức về HTML, có thể một vài framework back-end và JavaScript.

Cho dù là bạn chọn cái gì để xây dựng, thì bạn có thể phải học chút ít về một vài framework – điều này thì rất tốt, chỉ đừng có quá sa lầy vào những chi tiết. Ví dụ, bạn có thể viết một ứng dụng Android khá đơn giản mà không cần phải thực sự biết nhiều về tất cả các hàm API của Android và làm thế nào Android hoạt động, chỉ bằng cách làm theo một số bài hướng dẫn đơn giản. Chỉ đừng tốn quá nhiều thời gian để cố gắng học mọi thứ về một framework nào đó. Hãy học cái mà bạn cần biết để phục vụ hoàn thành dự án của mình. Bạn có thể học về các chi tiết sau này.

Oh, và điều này có vẻ là hơi khó. Nhưng đó chính là cách bạn học như thế nào. Bạn phải vật lộn để nhận ra làm thế nào để làm một điều gì đó, sau đó bạn sẽ tìm thấy câu trả lời. Đừng bỏ qua bước này. Bạn sẽ chẳng bao giờ vươn tới đẳng cấp là một nhà phát triển phần mềm chuyên nghiệp nếu bạn không học những thứ khó khăn và nhận ra nhiều điều thú vị trong quá trình nghiên cứu. Đây là một khóa huấn luyện tốt cho tương lai của bạn.

Bước 3: Nghiên cứu về một framework

Lúc này là thời điểm để thực sự tập trung vào một framework. Vì lúc này bạn đã nắm được một lượng kiến thức kha khá về ít nhất là một ngôn ngữ lập trình rồi và đã có một số kinh nghiệm để có thể làm việc cùng một framework cho các ứng dụng di động hoặc web.

Hãy chọn một framework nào đó để học và nó sẽ cho phép bạn làm việc hiệu quả hơn trong một số môi trường. Dạng framework mà bạn lựa chọn để học sẽ được dựa trên kiểu nhà phát triển phần mềm nào mà bạn muốn trở thành trong tương lai. Nếu bạn muốn trở thành một nhà phát triển web, thì bạn sẽ muốn học một web framework cho bất cứ ngôn ngữ lập trình nào mà bạn đang làm việc trên nó. Nếu bạn muốn trở thành một nhà phát triển ứng dụng di động, thì bạn sẽ cần học về một hệ điều hành di động và framework đi kèm với nó.

Cố gắng đào sâu kiến thức của bạn về framework đó. Điều này sẽ khá mất thời gian, nhưng đầu tư thời gian để học bất cứ thứ gì về framework mà bạn đang sử dụng thì rất tốt. Đừng cố học nhiều framework vào lúc này – nó sẽ chỉ khiến phân tán sự tập trung của bạn mà thôi. Hãy nghĩ về việc học các kỹ năng bạn cần cho một công việc xác định mà bạn muốn nhận, có sử dụng framework và chính ngôn ngữ lập trình mà bạn đang học. Bạn có thể luôn luôn mở rộng tập kỹ năng của mình sau này.

Bước 4: Học về một công nghệ cơ sở dữ liệu

Hầu hết các nhà phát triển phần mềm sẽ cần phải biết về một số công nghệ cơ sở dữ liệu vì rất nhiều các ứng dụng phải có một database back-end. Vì vậy, hãy chắc chắn rằng bạn không bỏ bê việc đầu tư vào lĩnh vực này.

Bạn sẽ có khả năng nhìn thấy lợi ích lớn nhất nếu bạn học về SQL – thậm chí nếu bạn lên kế hoạch sẽ làm việc cùng cơ sở dữ liệu NoSQL như MongoDB hoặc Raven, thì việc học SQL sẽ mang lại cho bạn một nền tảng tốt hơn để làm việc sau này. Có rất nhiều công việc tuyển dụng ngoài kia mà yêu cầu kiến thức về SQL nhiều hơn là NoSQL.

Đừng quá lo lắng về nhiều loại cơ sở dữ liệu SQL. Những công nghệ SQL khác nhau thì thực ra chúng có rất nhiều điểm giống nhau và bạn sẽ không gặp phải vấn đề gì trong việc chuyển đổi qua lại giữa chúng nếu bạn biết những kiến thức cơ bản về một công nghệ SQL nào đó. Chỉ chắc chắn rằng bạn hãy học về những thứ căn bản như table, queries, và những thao tác phổ biến về database khác.

Tôi khuyến khích bạn nên chọn một cuốn sách tốt về công nghệ SQL phù hợp và tạo ra một vài dự án nhỏ, vì vậy bạn có thể thực hành cái mà bạn đang học – luôn luôn thực hành những kiến thức mà bạn đang học.

Bạn phải có đủ kiến thức về SQL để có thể:

  • Tạo các bảng (table)
  • Thực thi các truy vấn cơ bản
  • Join các bảng với nhau để truy xuất dữ liệu
  • Hiểu các kiến thức cơ bản về index làm việc như thế nào
  • Insert, update và delete dữ liệu

Ngoài ra, bạn sẽ muốn học một số dạng của công nghệ object relational mapping (ORM). Cái mà bạn học sẽ phụ thuộc vào công nghệ nào mà bạn đang làm việc trên đó. Tìm kiếm những công nghệ ORM phù hợp với framework mà bạn đã học. Có thể có một vài lựa chọn ở đây, vì vậy cách tốt nhất là bạn hãy chọn lấy cái phổ biến nhất.

Bước 5: Nhận một công việc hỗ trợ một hệ thống đang tồn tại

Ok, bây giờ bạn đã có đủ các kỹ năng và kiến thức để nhận được một công việc cơ bản như là một nhà phát triển phần mềm. Nếu bạn có thể chỉ cho tôi rằng bạn hiểu những kiến thức cơ bản của một ngôn ngữ lập trình, có thể làm việc cùng một framework, hiểu về cơ sở dữ liệu và đã xây dựng được ứng dụng của riêng bạn, thì tôi chắc chắn sẽ muốn thuê bạn – cũng như nhiều nhà tuyển dụng khác.

Bảo trì một hệ thống đang tồn tại.Điểm mấu chốt ở đây là không quá nhắm vào một công việc nào đó yêu cầu trình độ cao. Đừng cố thử tìm một công việc trong mơ của bạn ngay lúc này – vì bạn vẫn chưa đủ trình độ. Thay vì đó, cố gắng tìm một công việc dạng bảo trì một hệ thống phần mềm đang tồn tại mà được xây dựng sử dụng ngôn ngữ lập trình và framework mà bạn đã học.

Bạn có thể không tìm thấy chính xác một công việc như vậy, nhưng nhiều khả năng là bạn có thể tìm thấy một công việc tốt hơn. Cố gắng ứng tuyển vào những công việc phù hợp chính xác với những công nghệ mà bạn đã được học.

Thậm chí với sự thiếu hụt nhiều kinh nghiệm, nếu bạn phù hợp chính xác với một tập kỹ năng và bạn lại sẵn lòng trở thành một lập trình viên bảo trì, thì bạn sẽ có thể tìm thấy một công việc.

Vâng, dạng công việc này có thể hơi tẻ nhạt một chút. Nó không được hứng thú như là việc tạo ra một cái gì đó mới mẻ, nhưng mục đích của công việc này không phải là mang lại niềm vui hoặc để kiếm tiền, nó là để học hỏi và thu được nhiều kinh nghiệm nhiều nhất có thể.

Làm việc trên một ứng dụng đang tồn tại, cùng với một nhóm các nhà phát triển khác, sẽ giúp bạn mở rộng các kỹ năng của mình và biết được một hệ thống phần mềm lớn thường được cấu trúc như thế nào. Bạn có thể sửa các lỗi và bổ sung thêm các đặc trưng nhỏ khác, ngoài ra bạn cũng sẽ học và đưa những kỹ năng của bạn vào hành động.

Dồn hết tâm trí của bạn vào công việc này. Học mọi thứ bạn có thể. Làm công việc ở mức tốt nhất bạn có thể. Đừng nghĩ về tiền bạc, đảm nhiệm nhiều vai trò khác nhau trong dự án này – tất cả sẽ đến sau đó – còn lúc này, bạn hãy chỉ tập trung vào để làm cho công việc hoàn thành một cách hiệu quả nhất có thể và mở rộng các kỹ năng của bạn.

Bước 6: Học những bài thực hành tốt nhất về cấu trúc (structural)

Bây giờ là lúc để bạn bắt đầu nâng cao chất lượng trong việc viết code. Đừng lo lắng quá nhiều về vấn đề thiết kế phần mềm tại thời điểm này. Bạn cần học làm thế nào để viết những đoạn “code sạch” (clean code) mà dễ dàng để hiểu và bảo trì. Để làm được điều này, bạn sẽ cần phải đọc rất nhiều và xem nhiều ví dụ về một số đoạn code tốt (good code).

Hãy bổ sung vào giá sách của bạn với những cuốn sách sau đây:

Các cuốn sách về cấu trúc ngôn ngữ xác định như:

Tại thời điểm này bạn thực sự muốn tập trung việc học của mình vào xử lý cấu trúc để viết ra những đoạn code hay và làm việc trên nhiều hệ thống đang tồn tại. Bạn sẽ cố gắng để dễ dàng thực thi một thuật toán trong ngôn ngữ lập trình của bạn đã chọn và làm nó theo cách dễ dàng để đọc và hiểu nhất.

Bước 7: Học một ngôn ngữ lập trình thứ hai

Tại thời điểm này bạn nên phát triển khả năng bằng cách học một ngôn ngữ lập trình thứ hai thực sự tốt. Bạn nên chọn một ngôn ngữ lập trình mà khác hẳn ngôn ngữ mà bạn đã biết.

Điều này có vẻ như là hơi kỳ quặc, nhưng hãy để tôi giải thích lý do tại sao việc này là rất quan trọng. Khi bạn biết một ngôn ngữ lập trình thật giỏi, thì bạn chỉ hiểu các khái niệm của phát triển phần mềm trong ngôn ngữ lập trình đó, mà việc phát triển phầm mềm thì lại vượt quá một ngôn ngữ hoặc công nghệ riêng rẽ nào. Nếu bạn dành thời gian trong một môi trường hoặc ngôn ngữ lập trình mới, thì bạn sẽ bắt đầu nhìn thấy mọi thứ theo một cách mới. Bạn sẽ bắt đầu để học một cách thực tiễn hơn là theo cách bắt chước.

Là một lập trình viên mới, bạn thường rất thích làm mọi thứ theo một cách đặc biệt nào đó mà không cần biết lý do tại sao bạn lại đang làm chúng theo cách đó. Một khi bạn đã học một ngôn ngữ lập trình thứ hai và nắm vững công nghệ, thì bạn sẽ bắt đầu tìm hiểu xem về lý do tại sao. Tin tôi đi, bạn sẽ phát triển nếu bạn thực hiện điều này. Đặc biệt là nếu bạn chọn lấy một ngôn ngữ lập trình mà bạn ghét.

Chắc chắn rằng bạn xây dựng một thứ gì đó cùng với ngôn ngữ mới này. Không cần phải hoành tráng, nhưng một cái gì đó đủ phức tạp để bắt bạn phải suy nghĩ động não thật nhiều và có thể thậm chí phải đập đầu vào tường – nhè nhẹ.

Bước 8: Xây dựng một cái gì đó có giá trị

Tốt rồi, bây giờ tiến đến việc kiểm tra thực sự để chứng tỏ khả năng phát triển phần mềm của bạn. Liệu bạn có thể thực sự xây dựng một cái gì đó quan trọng cho chính mình?

Nếu bạn tiếp tục tiến lên và tự tin để nhận một công việc xây dựng một cái gì đó, và có lẽ thậm chí thiết kế một cái gì đó cho một ông chủ của mình, bạn biết là bạn có thể làm nó. Không có cách nào tốt hơn để biết nó hơn là bắt tay vào làm nó.

Chọn một dự án mà sẽ sử dụng được toàn bộ các kỹ năng của bạn. Chắc chắn rằng bạn kết hợp cả cơ sở dữ liệu, framework và mọi thứ khác mà bạn cần để xây dựng một ứng dụng hoàn chỉnh. Dự án này nên là một cái gì đó mà sẽ chiếm của bạn nhiều hơn một tuần làm việc và yêu cầu một số suy nghĩ nghiêm túc và thiết kế. Thử làm một cái gì đó mà bạn có thể kiếm được tiền từ nó để bạn có một vài động lực làm việc.

Nên chắc chắn rằng bạn không phát triển nó ra quá lớn. Bạn vẫn không muốn mang quá nhiều tham vọng vào đây. Chọn một dự án mà sẽ thách thức bạn, nhưng không phải là một dự án mà bạn sẽ chẳng bao giờ hoàn thành được. Đây là một bước ngoặt quan trọng trong sự nghiệp của bạn. Nếu bạn có sự cam kết để theo và hoàn thành dự án này, thì bạn sẽ đi được rất xa, còn nếu bạn không thể… vâng, thì tôi không thể nói trước được điều gì.

Bước 9: Kiếm một công việc tạo một hệ thống mới

Ok, bây giờ là lúc để bạn lại tiếp tục đi tìm công việc tiếp theo. Bởi vào thời điểm này, bạn đã đạt được lợi ích lớn nhất từ công việc hiện tại – đặc biệt là nếu nó vẫn chỉ là công việc bảo trì.

Tham gia tạo ra một hệ thống phần mềm mới.Đây là thời điểm để tìm kiếm một công việc mà sẽ thách thức bạn – nhưng đừng quá nhiều. Bạn vẫn sẽ phải học rất nhiều, vì vậy bạn không muốn nhận một công việc mà quá phức tạp so với bạn. Lý tưởng là bạn nên tìm một công việc nơi mà bạn sẽ có cơ hội để làm việc trong một nhóm đang xây dựng một sản phẩm gì đó mới mẻ.

Có thể bạn không phải là người kiến trúc ra hệ thống đó, nhưng việc tham gia tạo ra một ứng dụng sẽ giúp bạn mở rộng các kỹ năng của mình và thách thức bạn trong nhiều cách khác nhau hơn là chỉ ngồi bảo trì một hệ thống phần mềm đang tồn tại.

Bạn đã có một sự tự tin trong việc tạo ra một hệ thống mới rồi, bạn vừa kết thúc việc tạo ra một hệ thống quan trọng cho riêng mình, vì vậy bạn có thể bước vào buổi phỏng vấn mà không cảm thấy quá hồi hộp và cùng với niềm tin rằng bạn có thể làm được công việc đó. Sự tự tin này sẽ giúp bạn có thể nhận được bất cứ công việc nào mà bạn ứng tuyển vào.

Hãy chắc chắn rằng bạn khiến cho nhà tuyển dụng được tập trung. Hãy nêu bật lên tập các kỹ năng xác định mà bạn đã đạt được. Đừng cố gây ấn tượng với bất kỳ ai bằng một danh sách dài dằng dặc của những kỹ năng chả liên quan gì. Tập trung vào những kỹ năng quan trọng nhất và tìm kiếm những công việc mà phù hợp chính xác với chúng – hoặc ít ra thì cũng phù hợp nhất có thể.

Bước 10: Học những bài thực hành tốt nhất về thiết kế phần mềm

Bây giờ là thời điểm để bạn đi từ một junior (ít kinh nghiệm) thành một senior developer (lập trình viên lão luyện). Các junior developer thường bảo trì các hệ thống, còn senior developer thì thiết kế và xây dựng các hệ thống của họ. (Thường là vậy, dĩ nhiên là cũng có một số senior developer chuyên đi bảo trì các hệ thống.)

Bạn đã sẵn sàng để xây dựng các hệ thống ngay lúc này, nhưng bây giờ bạn cần phải học cách làm thế nào để thiết kế ra chúng.

Bạn nên tập trung vào việc nghiên cứu vào các bài thực hành thiết kế tốt nhất và một số chủ đề nâng cao kiểu như:

  • Design patterns
  • Inversion of Control (IOC)
  • Test Driven Development (TDD)
  • Behavior Driven Development (BDD)
  • Các phương pháp phát triển phần mềm như: Agile, SCRUM, v.v…
  • Message buses và integration patterns

Danh sách này có thể sẽ còn dài ra rất nhiều – bạn sẽ chẳng bao giờ có thể kết thúc việc học và phát triển các kỹ năng của bạn trong lĩnh vực này. Chỉ nên chắc chắn rằng hãy bắt đầu cùng với những thứ quan trọng nhất trước tiên – điều này sẽ phụ thuộc vào cái mà bạn cảm thấy thú vị và nơi mà bạn muốn đến trong sự nghiệp của mình.

Mục tiêu của bạn ở đây là có khả năng không chỉ là xây dựng một hệ thống mà một ai đó đã thiết kế ra, mà nó phải hình thành dựa trên quan điểm của chính bạn về phần mềm nên được thiết kế ra làm sao và những dạng kiến trúc nào thì phù hợp cho những loại vấn đề này.

Bước 11: Tiếp tục học

Tại thời điểm này thì bạn đã làm ra sản phẩm phần mềm, nhưng bạn cần phải tiếp tục phát triển để trở thành một lập trình viên giỏi, thậm chí có thể trở nên “xuất sắc”. Luôn tâm niệm rằng bạn sẽ luôn có một cái gì đó để học thêm.

Phải mất bao lâu thì bạn mới có thể tới được điểm này? Tôi cũng không biết chắc. Nó có thể mất ít nhất một số năm, nhưng có thể phải đến 10 năm hoặc hơn – nó còn tùy thuộc vào việc bạn cống hiến nhiều như thế nào và những cơ hội nào xuất hiện với bạn nữa.

Có một con đường tắt khá tốt đó là cố gắng và luôn luôn bao quanh bạn bởi những lập trình viên giởi hơn bạn để có thể học hỏi từ họ.

Một số điều cần làm trong suốt quá trình thực hiện các bước trên

Có một số điều mà bạn nên làm trong suốt quá trình mà bạn đang làm theo 10 bước nói trên. Nó sẽ rất khó để liệt kê chúng trong mỗi bước, vì vậy tôi sẽ liệt kê chúng một cách tóm tắt ở đây:

Dạy – Toàn bộ thời gian trong quá trình bạn đang học các thứ nói trên, bạn cũng nên dạy chúng cho những người khác. Không quan trọng là liệu bạn là một người mới bắt đầu hay là một chuyên gia, bạn sẽ có một cái gì đó có giá trị để dạy, dạy người khác thì cũng là một cách tốt nhất để học. Ghi lại tài liệu tất cả quá trình và chuyến hành trình của bạn, và giúp đỡ những người khác trên suốt con đường mà bạn đi.

Tiếp thị bản thân bạn – Tôi nghĩ rằng đây là một điều rất quan trọng đến mức tôi đã xây dựng một khóa học hoàn chỉnh về ý tưởng này. Học cách làm thế nào để tiếp thị bản thân và tiếp tục làm nó trong suốt sự nghiệp của bạn. Nhận ra cách làm thế nào để có thể tạo ra thương hiệu cá nhân cho chính bạn, xây dựng một danh tiếng cho riêng mình trong ngành công nghiệp phần mềm và bạn sẽ chẳng bao giờ sợ thiếu việc làm cả. Bạn sẽ quyết định về tương lai của chính mình nếu bạn học được cách tiếp thị bản thân. Có rất nhiều công việc phải làm, nhưng nó cũng mang lại giá trị xứng đáng. Bạn đang đọc bài viết này từ chính nỗ lực của tôi cho mục đích đó.

Đọc – Đừng bao giờ ngừng học. Đừng bao giờ ngừng đọc. Luôn luôn làm việc theo cách của bạn thông qua những cuốn sách. Luôn luôn phát triển bản thân. Chuyến hành trình tìm kiếm tri thức của bạn sẽ chẳng bao giờ kết thúc, vì việc học là chuyện của cả đời. Bạn có thể sẽ không biết được tất cả. Nếu bạn tiếp tục học trong suốt sự nghiệp của mình, thì bạn sẽ luôn luôn vượt trội hơn so với những đồng nghiệp khác.

Làm – Với mỗi điểm dừng chân trên chuyến hành trình đó, đừng chỉ học mà hãy làm. Hãy đặt mọi thứ mà bạn học được vào hành động. Thiết lập một quỹ thời gian bên cạnh để luyện tập các kỹ năng của bạn và viết code và xây dựng một số thứ. Cũng giống như việc bạn có thể đọc tất cả các cuốn sách về hướng dẫn chơi golf mà bạn muốn, nhưng bạn sẽ chẳng bao giờ trở thành tay golf số 1 thế giới như Tiger Woods nếu bạn không vác gậy đi đánh golf thực sự.

Nguồn bài viết: Hồ Sỹ Hùng, blog công nghệ vinacode.net. Bài viết đã được sự cho phép chia sẻ của tác giả bằng email.

Anh Hồ Sỹ Hùng, một developer thế hệ 8x, blog của anh có nhiều bài dịch từ các trang nước ngoài, rất phù hợp với những bạn khả năng Tiếng Anh còn yếu. Đây là blog hay cho các bạn là lập trình viên, các bạn quan tâm có thể đọc nhiều bài viết hay của anh tại vinacode.net

Tôi nên học ngôn ngữ lập trình nào?

Giả sử nhà bạn bị hư đường ống dẫn nước và bạn gọi thợ đến để sửa. Người thợ sửa ống nước đến nhà bạn và hỏi rằng: “Ông muốn tôi dùng dụng cụ nào để sửa?”

Bạn sẽ trả lời như thế nào? “Tôi không quan tâm! Hãy sửa cái chỗ rò rỉ chết tiệt này dùm tôi”.

Vâng, điều đó hoàn toàn đúng. Mọi người đều muốn hoàn thành công việc của họ, và các vấn đề của họ phải được giải quyết. Họ không quan tâm đến công cụ nào mà bạn sử dụng cả. Là một lập trình viên, công việc của bạn là giải quyết vấn đề của khách hàng theo một cách hiệu quả nhất có thể. Điều này có nghĩa là bạn không thể sử dụng một công cụ duy nhất để giải quyết mọi vấn đề. Bạn có thể sử dụng một cái khoan điện để sửa một lỗ rò rỉ trên ống nước không? Dĩ nhiên là không. Có thể bạn sẽ phải sử dụng một loại băng keo dán ống nước cho vấn đề đó.

Ngôn ngữ Lập trình
Ngôn ngữ lập trình nào là tốt nhất hiện nay?

Ngôn ngữ nào tôi nên học là một câu hỏi sai ngay từ đầu. Các ngôn ngữ lập trình là những công cụ trong túi của một lập trình viên phần mềm. Trước khi quyết định xem ngôn ngữ lập trình nào mà bạn muốn học, bạn nên quyết định xem dạng vấn đề nào mà bạn muốn làm việc cùng. Bạn muốn làm việc trên công nghệ Web? Bạn muốn làm việc trên hệ điều hành Linux? Hay bạn muốn làm việc trên nền tảng di động? Có hàng triệu nhánh khác nhau trong thế giới lập trình và bạn phải hỏi bản thân mình tất cả những câu hỏi đến trong đầu và sau đó quyết định xem liệu ngôn ngữ nào thì phù hợp với lựa chọn của bạn.

Điều này không có nghĩa những công cụ là kém quan trọng. Đúng hơn là; chúng không quan trọng bằng vấn đề mà bạn đang cần phải giải quyết.

Bao nhiêu ngôn ngữ lập trình bạn nên học?

Không có vấn đề gì trong việc cố gắng học được thật nhiều ngôn ngữ lập trình cả. Cái mà bạn nên làm đó là thử và học về nhiều ngôn ngữ lập trình nhất mà bạn có thể, và sau đó quyết định xem rằng ngôn ngữ nào bạn nên trở thành chuyên gia về nó.

Quay trở lại với vấn đề tương tự của chúng ta, công cụ nào bạn nghĩ rằng một người thợ sửa ống nước nên mang theo trong túi đồ nghề? Câu trả lời là: “Đủ công cụ để hoàn thành công việc.”

Đúng vậy. Nếu bạn chỉ biết sử dụng mỗi một công cụ, bạn có thể sẽ phải làm việc cùng những người có thể sử dụng những công cụ khác. Điều này xảy ra trong hầu hết mọi công ty phần mềm. Trong những công ty lớn bạn sẽ làm việc cùng những người khác là chuyên gia trong những ngôn ngữ lập trình và công cụ mà bạn không biết cách sử dụng. Điều này có một lợi điểm đó là những người này sẽ là “ngôi sao” trong những lĩnh vực hẹp của họ. Ngược lại nếu bạn muốn làm việc trong những công ty mới khởi nghiệp (hoặc bạn muốn làm việc như một freelancer), bạn có thể muốn biết mỗi thứ một chút của mọi dạng công cụ ngoài kia.

Most Popular Programming Languages of 2014

Dĩ nhiên bạn không cần phải biết sử dụng tất cả các loại tuốc-vít. Bạn chỉ cần trở thành chuyên gia trong việc sử dụng một loại tuốc-vít tốt. Tương tự như vậy, bạn không cần phải trở thành chuyên gia trong mọi ngôn ngữ lập trình web. Chỉ cần học một ngôn ngữ cho thật tốt và bạn sẽ ổn.

Mỗi lĩnh vực lập trình đều có một bộ các công cụ của riêng nó để giúp bạn phát triển các phần mềm. Nếu bạn đang phát triển một website doanh nghiệp (Enterprise), bạn có thể đang làm việc cùng những công nghệ như Core Java, Servlets, EJBs, XML, Unix Shell Scripts, Log Parsers, Databases và rất nhiều loại Web-server khác nhau… Điều này có nghĩa là ngoài các ngôn ngữ lập trình thì còn có rất nhiều các công nghệ liên quan tới lập trình mà bạn nên thành thạo để trở thành một lập trình viên giỏi.

Thêm một điều mà bạn nên biết là – tất cả các ngôn ngữ lập trình là kế thừa lẫn nhau. Một số ngôn ngữ thì rất dễ để lập trình (ví dụ: Python) trong khi một số ngôn ngữ khác thì rất khó (ví dụ: C/C++). Tôi không đề cập đến mức độ thành thạo cần thiết trong việc học các ngôn ngữ đó. Cái mà tôi đề cập là nỗ lực cần thiết trong việc viết chương trình sau khi bạn đã học xong ngôn ngữ đó. Nếu bạn làm việc như một lập trình viên trong một công ty phần mềm, bạn sẽ có thể phải học một ngôn ngữ lập trình mới (có thể là do yêu cầu của nghiệp vụ) trong một khoảng thời gian rất ngắn. Bạn sẽ bắt đầu viết những dòng mã tươm tất trong khoảng thời gian từ 1 tuần đến 3 tháng. Sau đó vấn đề duy nhất là ngôn ngữ lập trình nào bạn thật sự thích làm việc với nó hơn. Vì vậy đừng quá lo lắng về ngôn ngữ nào dễ học hơn; mà hãy lo lắng về ngôn ngữ nào thì dễ sử dụng hơn. (Có một sự tương quan ở đây. Bạn sẽ nhận ra rằng trong hầu hết các trường hợp những ngôn ngữ mà dễ học hơn thì chúng cũng dễ lập trình hơn.)

Bạn có thể học được rất nhiều về lập trình từ các diễn đàn nơi mà các lập trình viên tài năng luôn tụ họp (ví dụ: ProggitHacker News), đọc các bài viết nổi bật và đặt các câu hỏi của bạn tại đây; bạn sẽ sẽ nhận được các câu trả lời chất lượng.

Bí mật lớn nhất:

Cách duy nhất để bạn trở thành một lập trình viên giỏi — đó là lập trình thật nhiều. Nhiều sinh viên không luyện lập trình bên ngoài phòng thực hành và làm các bài tập lớn của họ, và họ sẽ chẳng bao giờ trở thành những lập trình viên giỏi cả. Hãy luyện tập lập trình trong thời gian rảnh rỗi của mình. Hãy thử giải bài toán Euler bằng ngôn ngữ lập trình ưa thích của bạn, hoặc tự xây dựng một trang web cho riêng mình.

Phải nói rằng tất cả những điều nêu ra ở đây chỉ là một số kinh nghiệm của tôi. Chúng có thể đúng hoặc cũng có thể không đúng trong trường hợp của bạn:

– Phát triển phần mềm doanh nghiệp (Enterprise): Học ngôn ngữ Java thì rất tốt. Java thường được sử dụng trong nhiều công ty phần mềm như là ngôn ngữ thứ nhất. Nó sẽ giúp bạn tiến xa hơn trong nhiều trường hợp. Tại cùng thời điểm, tôi gặp phải một số ý kiến phản đối trong việc sử dụng ngôn ngữ từ quan điểm của một lập trình viên mới vào nghề. Bạn cũng nên đọc thêm một số thảo luận ở đây.

– Phát triển Web: Hãy tránh xa ngôn ngữ PHP. Nó là một ngôn ngữ được thiết kế rất tồi. Thay vì đó, hãy học Django hoặc Ruby on Rails. Nếu bạn thích công nghệ của Microsoft thì hãy sử dụng ASP.NET MVC.

– Phát triển ứng dụng trên Windows: Hãy học C# (và có thể đừng học Visual Basic). Nếu muốn chạy các ứng dụng viết bằng C# trên môi trường Linux thì hãy sử dụng dự án Mono.

– Có rất nhiều công cụ lập trình tuyệt vời hoặc các IDE mà bạn nên cố gắng sử dụng thành thạo. Eclipse là một trình IDE nổi tiếng. Notepad++ cũng là một trình soạn thảo code khá phổ biến.

– Bạn nên học thêm về các kỹ thuật như Regular Expressions, Unicode, Information Security v.v… (rất tiếc là tôi không thể liệt kê ra tất cả tại đây.)

– Cố gắng cập nhật những công nghệ mới nhất. Bạn không phải học tất cả những ngôn ngữ mới nhất, nhưng hãy cố gắng có một sự hiểu biết về những xu hướng mới nhất trong lập trình. Ví dụ như lập trình Web, lập trình di động v.v… là những lĩnh vực có rất nhiều sáng tạo đang diễn ra. Bạn không nên bỏ lỡ bất kỳ lĩnh vực nào nếu bạn cảm thấy thích thú chúng. Ngoài ra, những diễn đàn mà tôi có đề cập ở trên sẽ vô cùng hữu ích.

– Học chỉ một ngôn ngữ lập trình thì không phải là một ý kiến hay. Học thật nhiều ngôn ngữ lập trình cũng không phải là ý kiến hay. Hãy cố gắng cân bằng giữa hai thái cực này và cố gắng thật giỏi ít nhất 2 đến 3 ngôn ngữ lập trình trong các lĩnh vực khác nhau. (Như tôi đã giải thích lúc trước, những ngôn ngữ lập trình khác nhau thì được dùng để giải quyết các dạng vấn đề khác nhau.)

Chúc bạn may mắn và chọn được ngôn ngữ lập trình phù hợp cho mình!

Sau đây là một bình luận có chất lượng:

Xin chào mọi người,

Trước tiên, bạn phải quyết định xem lĩnh vực nào trong IT mà bạn muốn theo đuổi. Có rất nhiều lĩnh vực như công nghệ Web, công nghệ di động, phát triển phần mềm, phát triển ứng dụng trên desktop v.v… Nếu bạn muốn đi theo lĩnh vực lập trình Web thì bạn có hai sự lựa chọn:

1. PHP
2. Công nghệ .NET

Hiện tại việc học PHP thì dễ hơn là học C#, nghiên cứu công nghệ .NET thường đòi hỏi nhiều công sức hơn. Vì vậy tôi thích PHP hơn, nhưng bù lại những lập trình viên .NET lại được trả lương cao hơn các đồng nghiệp làm PHP. Tôi muốn nói thêm một điều là, nếu bạn muốn trở thành một freelancer sau 2 đến 3 năm làm việc tại một công ty thì đi theo hướng PHP sẽ có nhiều cơ hội hơn, còn ngược lại thì bạn hãy đi theo công nghệ .NET.

Bạn nên nhớ rằng, công nghệ .NET thì rất lớn và các dự án của nó cũng đồ sộ. Bạn không thể thực hiện toàn bộ dự án một mình được, bạn sẽ luôn luôn cần sự giúp đỡ và Internet thì không giúp được gì nhiều ở đây. Nhưng ở PHP bạn có thể nhận được nhiều dự án nhỏ mà tự mình có thể hoàn thành được, thêm một điểm nữa là ngày càng có nhiều công việc dành cho lĩnh vực PHP hơn. Khách hàng họ chỉ cần một nền tảng độc lập, và PHP đáp ứng rất tốt nhu cầu đó. Một số người nói rằng PHP đang chết dần, điều đó thì hoàn toàn không đúng bởi vì có rất nhiều thứ đang hoạt động rất tốt:

– Các Core PHP, CMS như (WordPress,Joomla,Drupal)
– Giỏ hàng (Interspire, Os Commerce, Zen-Cart, X-cart, Virtuemart v.v…)
– Các Framework như (Symphony, Codeignitor, Cakephp, Zend)

Ai nói rằng PHP đang chết dần! Điều đó là hoàn toàn sai lầm!

Nếu bạn muốn đi theo hướng công nghệ di động, tôi khuyên bạn nên đi theo hướng Android. Nếu là lập trình phần mềm thì nên gắn với .NET hoặc Java. Nếu chuyên viết các ứng dụng desktop thì Java và .NET vẫn là hai sự lựa chọn hàng đầu.

Nhưng tôi phải nói thêm với bạn một điều rằng, hiện tại công nghệ Web và công nghệ di động đang phát triển bùng nổ. Vì vậy tôi thích làm việc với chúng hơn. Khoảng 80% thị trường IT dựa trên công nghệ Web và công nghệ di động, và điều này cũng sẽ đúng trong tương lai. Vì vậy bạn nên gắn chặt với hai công nghệ này.

Thêm một điều nữa mà tôi muốn nói là HTML5/CSS3, Javascript và JQuery. Kiến thức của những công nghệ này thì rất có ích nếu bạn lựa chọn lĩnh vực phát triển Web.

Nguồn bài viết: Hồ Sỹ Hùng, blog công nghệ vinacode.net. Bài viết đã được sự cho phép chia sẻ của tác giả bằng email.

Anh Hồ Sỹ Hùng, một developer thế hệ 8x, blog của anh có nhiều bài dịch từ các trang nước ngoài, rất phù hợp với những bạn khả năng Tiếng Anh còn yếu. Đây là blog hay cho các bạn là lập trình viên, các bạn quan tâm có thể đọc nhiều bài viết hay của anh tại vinacode.net