Thứ Hai, 7 tháng 9, 2015

IntelliJ IDEA Default Keymap

today I want to give for you resouce usefull when you using Android Studio.
Do you want to you short key for fast action but you don't remember or don't know it.
You can download the guide in the link:
https://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard.pdf

Thứ Năm, 6 tháng 8, 2015

Cùng học corona - Download và cài đặt

Bài 1: Hướng dẫn download, cài đặt SDK, IDE lập trình sử dụng Corona SDK và Lua language.
 Đầu tiên các bạn vào trang chủ của Corona để đăng kí 1 account, sau đó download SDK về.
https://developer.coronalabs.com/downloads/coronasdk

Các bài hướng dẫn học:
https://coronalabs.com/resources/tutorials/getting-started-with-corona/

Download IDE dùng để code, lập trình ngôn ngữ Lua.
Ở đây mình sử dụng Zero Brane.
https://studio.zerobrane.com/download.html
Ngoài ra nguồn học lập trình Lua:
http://www.tutorialspoint.com/lua/index.htm

Thứ Tư, 5 tháng 8, 2015

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

Như trong bài viết “Tự học lập trình trong 10 năm” của Giáo sư Norvig thì chúng ta đã biết rằng để trở nên tinh thông bất cứ lĩnh vực gì thì ai cũng phải cần tối thiểu 10,000 giờ tập luyện (tương đương khoảng 10 năm). Nhưng bạn có thể nói rằng điều đó chẳng cần kết quả nghiên cứu của các nhà khoa học thì bạn cũng biết. Vấn đề ở đây là 10 năm là một quãng thời gian rất dài, và với 10 năm đó thì có thể đã “vật đổi sao dời” hay người còn kẻ mất. Điều quan trọng là làm sao duy trì được động lực làm việc và học tập trong một quãng thời gian dài như vậy?
Đúng vậy, để có thể duy trì được động lực trong một quãng thời gian dài như vậy thì bạn phải hình dung ra được một big picture (tạm gọi là bức tranh lớn) của mình trong tương lai. Liệu bạn sẽ làm gì và ở đâu trong 10 năm tới? Hay còn gọi là phải đặt ra được mục tiêu cụ thể.
Về phương pháp đặt mục tiêu thì trước đây blog Vinacode cũng đã có một bài viết về vấn đề này, mục tiêu đặt ra đừng cao quá đâm ra viển vông (kiểu như bay lên mặt trăng hay đại loại gì đó ^^), nhưng mục tiêu cũng đừng tầm thường quá. Người ta nói rằng “mục tiêu nên ở ngoài tầm với nhưng phải ở trong tầm nhìn”. Cụ thể về cách đặt mục tiêu thì bạn nên đọc thêm bài viết này.
ly-tieu-longHôm nay chúng ta sẽ đọc một bài viết của tác giả John Sonmez về cách từng bước làm thế nào để trở thành một lập trình viên giỏi. Hy vọng với một hướng dẫn từng bước kiểu step-by-step này sẽ giúp một số bạn newbie có thể áp dụng và định hướng tương lai sau này.
“Tôi không sợ những kẻ tập một lần 10.000 cú đá, tôi chỉ sợ những kẻ tập 10.000 lần một cú đá.” ~ Huyền thoại võ thuật Lý Tiểu Long
Tôi phải làm thế nào để từng bước trở thành một lập trình viên xuất sắc?Tôi phải làm thế nào để từng bước trở thành một lập trình viên xuất sắc?

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 list nhắc việc To-Do 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ự.
Các bài viết liên quan:
Về tác giả bài viết:
johnJohn Sonmez là một lập trình viên, người lập ra trang web Simple Programmer, đồng thời anh là tác giả có nhiều giáo trình học trực tuyến tại Pluralsight. Anh đã xuất bản hơn 50 khóa học trực tuyến về các chủ đề như iOS, Android, .NET, Java và phát triển Games. Bạn có thể liên hệ với anh qua Twitter.
Sưu tầm:
http://vinacode.net/2014/10/31/tro-thanh-mot-lap-trinh-vien-gioi/

Thứ Tư, 8 tháng 4, 2015

Hướng dẫn sử dụng Retrofit trong Android

Bài viết sau đây tôi sẽ hướng dẫn các bạn tích hợp Retrofit vào trong ứng dụng Android.
Retrofit là thư viện giúp chúng ta kết nối và lấy dữ liệu từ trên Server, xây dựng hệ thống REST
ở phía Client là Android hay Java.

Đầu tiên các bạn tải Retrofit tại đây. Phiên bản mới nhất mà tôi dùng là 1.9.0.
Tiếp đó các bạn tải Gson tại đây. Lý do tải Gson là vì Restrofit sử dụng Gson là lõi.

Demo tích hợp trong project Java ( IDE tôi chọn là Eclipse).
Step1: Các bạn tạo mới dự án Java, sau đó tạo 1 folder là lib và copy 2 file .jar thư viện download
ở trên và copy vào. Add 2 lib này vào java build path.
Step2: Code
Tạo mới class GithubClient ( Hoặc copy file sample của Restrofit) cho vào project. Ở đây tôi copy từ sample của Restrofit.

[CODE]
import java.util.List;

import retrofit.RestAdapter;
import retrofit.http.GET;
import retrofit.http.Path;

public class GitHubClient {
    private static final String API_URL = "https://api.github.com";

    static class Contributor {
        String login;
        int contributions;
    }

    interface GitHub {
        @GET("/repos/{owner}/{repo}/contributors")
        List<Contributor> contributors(@Path("owner") String owner,
                @Path("repo") String repo);
    }

    public static void main(String... args) {
        // Create a very simple REST adapter which points the GitHub API
        // endpoint.
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(API_URL).build();

        // Create an instance of our GitHub API interface.
        GitHub github = restAdapter.create(GitHub.class);

        // Fetch and print a list of the contributors to this library.
        List<Contributor> contributors = github.contributors("square",
                "retrofit");
        for (Contributor contributor : contributors) {
            System.out.println(contributor.login + " ("
                    + contributor.contributions + ")");
        }
    }
}
[/CODE]

Ví dụ : tích hợp vào Android:
Step1: Tạo mới project Android.
Copy 2 file thư viện vào thư mục libs.
Ở đây tôi sẽ demo dùng API của It-ebooks.Link: http://it-ebooks-api.info/
 Chúng ta sẽ tạo ra 3 class:
1: Class Book.java:
Class này là đối tượng sẽ lưu trữ thông tin của 1 quyển sách.

import com.google.gson.annotations.SerializedName;

public class Book {
    @SerializedName(value = "ID")
    private String ID;

    @SerializedName(value = "Title")
    private String Title;

    @SerializedName(value = "Description")
    private String Description;

    @SerializedName(value = "Image")
    private String Image;

    @SerializedName(value = "isbn")
    private String isbn;

    public String getID() {
        return ID;
    }

    public void setID(String iD) {
        ID = iD;
    }

    public String getTitle() {
        return Title;
    }

    public void setTitle(String title) {
        Title = title;
    }

    public String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        Description = description;
    }

    public String getImage() {
        return Image;
    }

    public void setImage(String image) {
        Image = image;
    }

    public String getIsbn() {
        return isbn;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

}

Note: Ở trên các bạn thấy có các thuộc tính:
Ví dụ:
@SerializedName(value = "ID")
Nó sẽ tương ứng với tag Json trả về từ server.
Link lấy: http://it-ebooks-api.info/v1/search/php%20mysql
Các bạn cần phải viết đúng( kể cả in hoa) thì mới merge được kết quả vào đối tượng.

2: Class:RestClien.java
Class này sẽ giúp chúng ta cấu trúc code tốt hơn thôi, cũng không có gì ghê gớm cả.

package com.vinilearning.itebooks.bean;

import retrofit.RequestInterceptor;
import retrofit.RestAdapter;
import retrofit.converter.GsonConverter;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class RestClient {
    public static final String BASE_URL = "http://it-ebooks-api.info/v1";

    private ApiService apiService;

    public RestClient() {
        RequestInterceptor requestInterceptor = new RequestInterceptor() {
            @Override
            public void intercept(RequestFacade request) {
                request.addHeader("User-Agent", "Retrofit-Sample-App");
            }
        };

        Gson gson = new GsonBuilder()
                .registerTypeAdapterFactory(new ItemTypeAdapterFactory())
                .setDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSS'Z'")
                .create();

        RestAdapter restAdapter = new RestAdapter.Builder()
                .setLogLevel(RestAdapter.LogLevel.NONE).setEndpoint(BASE_URL)
                .setRequestInterceptor(requestInterceptor)
                .setConverter(new GsonConverter(gson)).build();

        apiService = restAdapter.create(ApiService.class);
    }

    public ApiService getApiService() {
        return apiService;
    }
}

3: Class ApiService.java
Class này sẽ tập hợp các method để query dữ liệu.
Hiện tại chỉ có 1 method để query dữ liệu theo mẫu:
API: /search/{query}

Trong đó query là tham số.

package com.vinilearning.itebooks.bean;

import java.util.ArrayList;

import retrofit.http.GET;
import retrofit.http.Path;

public interface ApiService {
    @GET("/search/{query}")
    ArrayList<Book> getBook(@Path("query") String query);
}












4: Class ItemTypeAdapterFactory.java
 Class này giúp chúng ta parse dữ liệu, bởi lẽ Restrofit sẽ chỉ parse array, mà như kết quả
ở link trên chúng ta có 1 jsonObject, trong đó có chứa jsonArray mà chúng ta cần lấy kết quả.
Ở đây là mảng "Books".

package com.vinilearning.itebooks.bean;

import java.io.IOException;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

public class ItemTypeAdapterFactory implements TypeAdapterFactory {

    @Override
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
        final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, type);
        final TypeAdapter<JsonElement> elementAdapter = gson
                .getAdapter(JsonElement.class);

        return new TypeAdapter<T>() {

            public void write(JsonWriter out, T value) throws IOException {
                delegate.write(out, value);
            }

            public T read(JsonReader in) throws IOException {

                JsonElement jsonElement = elementAdapter.read(in);
                if (jsonElement.isJsonObject()) {
                    JsonObject jsonObject = jsonElement.getAsJsonObject();
                    if (jsonObject.has("Books")
                            && jsonObject.get("Books").isJsonArray()) {
                        jsonElement = jsonObject.get("Books");
                    }
                }

                return delegate.fromJsonTree(jsonElement);
            }
        }.nullSafe();
    }

}

Thực thi:
Các bạn sử dụng AsyncTask để lấy dữ liệu nhé, tránh bị block main thread.

class LoadData extends AsyncTask<Void, Void, ArrayList<Book>> {
        private ArrayList<Book> books;

        @Override
        protected ArrayList<Book> doInBackground(Void... params) {
            RestClient restClient = new RestClient();
            // Demo: http://it-ebooks-api.info/v1/search/php%20mysql
            books = restClient.getApiService().getBook("php mysql");
            return books;
        }

        @Override
        protected void onPostExecute(ArrayList<Book> result) {
            if (books != null && books.size() > 0) {
                Toast.makeText(getBaseContext(), "" + books.size(),
                        Toast.LENGTH_SHORT).show();

                for (Book item : books) {
                    Log.i("ITEbooks", item.getTitle() + " (" + item.getIsbn()
                            + ")");
                }
            }
            super.onPostExecute(result);
        }
    }

Trên đây là hướng dẫn cơ bản để các bạn có thể tích hợp Retrofit vào trong project Java và Android.
Các hướng dẫn chi tiết về tham số của Restrofit các bạn tham khảo tại đây
http://square.github.io/retrofit/



Thứ Bảy, 4 tháng 4, 2015

Time Save - Management your time use apps Android

https://play.google.com/store/apps/details?id=com.vinilearning.appmonitor&hl=en

* Helps you keep track of time using the existing applications in the machine, including the application system!
to display the basic information of each application,
you absolutely can view information quickly, remove the application,
information on Google Play (if any) ...
* Especially useful features prominent warning given
access to applications, using threshold limits set.
You're a smartphone addict? or who have access routines
Social networking applications such as Facebook, LINE, WhatsApp,Zalo ... and felt lost too much
time for these applications, but it is impossible not to use them?
Time Save you can completely change the routine use
your phone, giving you more time to work
Other useful.
* Statistical functions monthly, quarterly and year to help you

Thứ Ba, 3 tháng 3, 2015

Học Java hay .NET? Một bài toán nan giải của nhiều Newbie

Có rất nhiều bạn đang rất phân vân khi không biết chọn hướng nào, có bạn đã định hướng trước là chọn Java nhưng nghe nói .NET hay quá cũng phân vân, có bạn chọn .NET rồi nhưng lại thấy tiếc, có bạn muốn chọn cả hai thì sợ mình kham không nổi. Chính chủ nhân blog này đã từng gặp phải hoàn cảnh như vậy, nhưng khi đọc qua một số bài viết trên một diễn đàn IT thì tôi mới ngộ ra được nhiều điều. Tôi nghĩ bài viết này cũng rất có ích cho nhiều bạn trẻ khi mới tập tành học lập trình ... Cám ơn các tác giả có nickname YHT và davidex về bài phân tích khá chi tiết này.

Bài viết này không nhằm vào mục đích so sánh khía cạnh kỹ thuật giữa hai công nghệ J2EE và .NET mà sẽ đi vào phân tích xem bạn nên chọn hướng nào và tại sao.

Khi so sánh giữa sinh viên đại học và sinh viên ở các trung tâm đào tạo (điển hình là ở Đại học Bách khoa Tp.HCM và học viện CNTT NIIT Vietnam) chúng ta thường hay nhắc sinh viên đại học được học nhiều kiến thức nền tảng trong khi sinh viên NIIT lại học chuyên về những công nghệ mới. Sinh viên NIIT khi ra trường có khả năng đáp ứng yêu cầu công việc nhanh nhưng lại chậm thích ứng với những công nghệ mới trong khi sinh viên đại học thì đa phần là ngược lại (dùng từ đa phần vì trong môi trường nào cũng có kẻ mạnh kẻ yếu cả). Sở dĩ có chuyện này vì các bạn ở NIIT quen cách học 1+1=2 nên khi ra trường có người bảo 1+1=0 nhớ 1 thì các bạn ú ớ không làm việc được và phải mất một khoảng thời gian khá lâu để có thể thích nghi. Các bạn quen với lối mòn là dạy gì học đấy, không dạy không học, quen với cách học là thầy dạy phải theo sách, phải gạch gạch tô tô trong sách mới được, khi giảng một phần nào ngoài sách lúc đó không chịu ngồi nghe để hiểu mà loay hoay tìm coi nó nằm ở phần nào trong sách để gạch. Khi giảng viên cung cấp tài liệu đọc thêm có nghĩa là những tài liệu đó đã được sàng lọc cẩn thận thế mà tỉ lệ các bạn đọc nó là rất ít (đọc thôi chứ chưa quan tâm đến chuyện hiểu nó).

Có một lần tôi tình cờ đọc được câu “chúng ta học cách chạy xe chứ không phải học cách chạy cái xe cụ thể nào cả” ở một blog của ai đó, suy nghĩ lại cũng hay. SV đại học họ được học quá nhiều môn nền tảng cần thiết như Cấu trúc dữ liệu, Phân tích thiết kế giải thuật, Phân tích thiết kế hệ thống,…trong khi SV NIIT cứ mải mê chạy theo công nghệ mới. Thế giới công nghệ đâu chỉ có Java hay .NET, nó còn có PHP, còn có Python, Perl, Ruby rồi còn cả C, C++ , Assembly nữa cơ, nếu bạn học chạy chiếc xe Java sau này có chiếc xe “tay ga” JaJava thì bạn có tự tin là mình chạy tốt không? SV Đại học giống như họ học nguyên tắc chung để chạy xe sau đó họ TỰ tìm cho mình một chiếc xe phù hợp với mình nhất và họ chạy, sau này thế giới có ra đời loại xe mới thì anh ta có thể điều khiển nó một cách không quá khó khăn. Thế còn trong NIIT thì sao? Trong NIIT các bạn lại an tâm rằng mình chỉ cần học cách chạy chiếc Java cá tính hay chiếc .NET sang trọng là được rồi, mấy xe khác không quan tâm.

Quay lại vấn đề chọn hướng nào, tôi xin đưa ra một vài quan điểm chủ quan của mình về hai công nghệ này. Công nghệ nào cũng có cái hay của nó cả, người mạnh mặt này, kẻ mạnh mặt kia, đối với ứng dụng này thì công nghệ này là phù hợp, ứng dụng khác lại khác, đối với khách hàng này thì nên chọn cái này trong khi khách hàng khác thì ngược lại. Thế nếu tôi chỉ biết về một công nghệ thì tôi làm sao có khả năng chọn lựa đây? Bạn sẽ hỏi ngược lại, nếu cái gì tôi cũng học hết thì làm sao tôi chịu nổi đây (không xét trên khía cạnh tài chính)? Cái quan trọng là sức bạn đến mức nào thôi!

Nếu bạn chật vật với những bài project cuối mỗi học kỳ, bạn phải chạy xin người này xin người kia, bạn rất yếu trong việc tìm hiểu một cái mới thì tôi nghĩ .NET là sự chọn tốt nhất. Bởi vì theo quan điểm của “dân .NET”, theo Microsoft (MS) cái gì cũng dễ cả, có sẵn hết rồi, kéo kéo 1 tí cũng ra cái ứng dụng, thậm chí làm cái Outlook không quá 3 ngày mà (nếu biết kết hợp các component có sẵn). Không phải không có lý khi nói như vậy vì công nghệ của MS là công nghệ “đóng” nên tất cả đều theo chuẩn của MS, mà cái Windows thì đi đâu cũng thấy nên dễ dàng tiếp cận cũng đúng. Làm việc thì bám theo một IDE (Visual Studio), theo đúng một mô hình MS đưa ra nên học sao làm vậy, nhanh ơi là nhanh. .NET cũng có những công nghệ, framework khác tuy nhiên chúng ít được ưa chuộng, ví dụ NHibernate, NStruts… Đã chọn .NET thì đừng hỏi tôi là chọn VB.NET hay C#, cái nào cũng được cả và NIIT dùng VB.NET để dạy phần đầu của .NET.

Thế theo Java (J2EE) thì sao? Nếu bạn yêu thích đam mê tìm tòi, bạn có khả năng tìm hiểu tốt một kỹ thuật mới, bạn không ngại gian khổ ở bước đầu tiên thì bạn hãy chọn hướng Java. Nói gian khổ có quá không? Cái chính là công nghệ Java có một lô các công nghệ khác đi theo nó mà bạn phải tìm hiểu như là JSP, Servlet, EJB, JDBC, JNDI, JMX, RMI… rồi lại đi đâu cũng nghe framework này framework kia như Struts 1, Struts 2, Spring, WebWork, JSF, Hibernate, TopLink, …tiếp đến là chọn tool nào phát triển đây: Eclipse, Netbeans, JBuilder, IDEA, Sun Java Studio, Oracle JDeveloper… rồi chọn web server nào để triển khai đây Websphere, WebLogic, JBoss, Tomcat…. Bạn bảo .NET design giao diện nhanh nhưng bạn có biết thế giới Java còn có WindowBuilder, có Visual Editor, có Swing Designer, có Matisse? Bạn bảo tool .NET làm web nhanh thế bạn đã dùng MyEclipse chưa? Bạn bảo .NET nhiều thư viện thế bạn dùng Commons chưa? Bạn cho rằng ứng dụng Java chạy chậm thế bạn có biết Java 6 đã cải tiến nhiều về tốc độ không?bạn có biết rằng thế giới Java đâu chỉ có AWT, Swing mà còn có SWT không? Thế giới Java có một rừng công nghệ con trong đó, nên để tìm hiểu cho vững Java thôi bạn có thể tốn cả cuộc-đời-lập-trình của mình rồi đấy!

Nếu bạn đang phân vân không biết chọn hướng nào và bạn thật sự giỏi thì tôi khuyên bạn hãy chọn cả hai hướng. Nghiên cứu nhiều hướng không bao giờ thừa cả. Tuy nhiên cùng một lúc bạn không thể học hai hay nhiều hướng vì dễ dẫn đến “tẩu hoả” bạn hãy chọn cho mình một hướng đi và hãy tìm hiểu nó cho thật thật kỹ vào, khi đã vững một công nghệ rồi thì bạn có thể bay sang những công nghệ khác để tìm hiểu. Nếu bạn cứ mải mê chạy theo công nghệ mới thì chắc bạn sẽ phải chạy suốt đời mà chẳng làm được gì cho ra hồn cả. Công nghệ thay đổi hàng ngày, hàng giờ nên bạn đang học 1 thế giới đã ra đời 100 cái mới rồi. Bạn chỉ cần nắm những cái cốt lõi nhất sau đó tha hồ mà bay nhảy, dù có cho ra JaJava hay dotdotNet bạn cũng không sợ vì bạn đã xây cái móng vững chắc rồi! Ví dụ tôi chưa từng được học VB6 nhưng khi có một chương trình nào đó bắt buộc làm bằng VB6 tôi chỉ cần tìm vài tài liệu về nó sau đó làm vài demo nho nhỏ là có thể bắt tay vào làm chương trình được rồi. Đương nhiên trình độ về VB6 của tôi không bằng những người đã nghiên cứu nó từ lâu nhưng những gì tôi học được ở công nghệ khác sẽ giúp tôi tiếp cận và làm việc được trên VB6 dễ dàng.

Có ý kiến cho rằng Java bảo mật hơn .NET, tôi không bàn về khía cạnh sâu bên trong kiến trúc mà tôi muốn triển khai ý bảo mật ở đây là thế nào. Nói đến bảo mật có nhiều dạng, nhiều lớp, bạn nói Java bảo mật hơn là muốn đề cập ở mức nào? Nếu ngôn ngữ đó bảo mật nhưng người lập trình code ẩu thì liệu nó có bảo mật không? Bạn đừng nói với tôi là hệ thống bạn có một Firewall tốt, một IDS thông minh, một con PIX của Cisco mới mua hàng ngàn đô là bảo mật hơn hệ thống của tôi, bảo mật hay không do tài của bạn điều khiển các công cụ của hệ thống bạn kìa! Bạn có biết hệ thống có thể bị tấn công ở nhiều lớp khác nhau?nếu bạn bảo mật được lớp ứng dụng liệu các lớp khác có an toàn không?

Nhiều người có quan điểm rất cực đoan, theo .NET là chê thậm tệ Java, không thèm tìm hiểu gì về nó hoặc ngược lại. Tôi thì không đồng tình với quan điểm này, đã là dân kỹ thuật thì không từ bỏ một công nghệ nào hay cả, mình không học nổi hết thì cũng nên xem coi nó là cái gì để mở mang tầm mắt của mình. Một quan điểm cực đoan như vậy sẽ chẳng có gì gọi là hay cả và nó chỉ có hại cho bạn mà thôi.

Nếu xét về cơ hội việc làm thì sao? .NET dễ kiếm việc hơn Java hay ngược lại? bạn có biết vừa rồi PSV có đợt tuyển ào ạt các chuyên viên J2EE không? .NET cũng vậy, cơ hội có việc làm là ngang nhau, cái chính vẫn là khả năng của bạn. Bạn giỏi rồi thì dù là Assembly bạn cũng có đất dụng võ!

Trong chương trình J2EE ở NIIT không thể dạy được tất cả, khi bạn học theo hướng này thì giảng viên sẽ cố gắng chỉ các bạn những phần cốt lõi nhất sau đó sẽ phụ đạo thêm về các công nghệ như JSF, Struts, JPA, Hibernate,… để bạn có thể thích ứng nhanh với công việc sau này.

Nếu quyết định chọn J2EE hay .NET rồi thì các bạn cũng nên tìm các tài liệu về các môn cơ sở ở đại học để tìm hiểu nhằm nâng cao kiến thức của mình. Hãy biết quý trọng khoảng thời gian bạn đi học để đầu tư nghiên cứu cho tốt. Thời điểm này chưa phải là lúc bạn phải chạy tới chạy lui tìm việc làm thêm nếu như gia đình bạn có khả năng tài chính đủ để nuôi bạn ăn học, hãy tập trung vào việc học 100%.

Hy vọng qua bài viết này bạn sẽ chọn được cho mình một định hướng phù hợp. Dù bạn chọn hướng nào tôi cũng xin lưu ý bạn là hãy theo hướng đó tới cùng, đừng chạy qua chạy lại cuối cùng sẽ không được gì đâu. Chúc các bạn thành công!

(Theo YHT - Forums.2it.in)



Làm một cái so sánh nho nhỏ giữa Java và .NET:

Ưu điểm:
.NET:
- Dễ phát triển, tools hỗ trợ cực tốt (Visual Studio)
- Phát triển giao diện rất dễ dàng trên Windows.
- Làm việc tốt với tất cả các công nghệ khác của Microsoft (COM, DCOM)
JAVA:
- Kiến trúc thiết kế rất tốt.
- Cộng đồng mạnh, do là công nghệ mở -> nhiều công nghệ hay ho xuất hiện từ cộng đồng (Vd: Hibernate, Spring...)
- Chạy tốt trên nhiều platform khác nhau (nhất là trên linux).

Nhược điểm:
.NET:
- Chỉ chơi tốt với "hàng" của Microsoft.
- Mã nguồn đóng, tuy các thiết kế, specification là mở (nên mới có cái Mono)
- "Làm giùm" người lập trình quá nhiều -> tạo ra những lập trình viên theo đúng "chuẩn" của Microsoft (thông thường sẽ khác chỗ này, chỗ kia so với chuẩn còn lại của thế giới).
- Muốn can thiệp sâu vào kiến trúc bên dưới hơi bị khó.
- Tuy đã có Mono Project cho Linux, nhưng các application viết bằng .NET hầu như chỉ chạy tốt trên hệ điều hành của Microsoft.
- Phải trả tiền cho Microsoft để phát triển (cái này có lẽ ko phải là một nhược điểm ở Việt Nam
JAVA:
- Khó phát triển hơn, nhất là việc debug.
- Tools hỗ trợ không mạnh bằng, đơn giản, miễn phí thì chẳng ai lo chăm chút tất cả cho bạn được.
- Có vẻ như tốc độ chậm hơn các chương trình .NET
- Bảo mật source code không tốt bằng .NET.

Nói chung theo kinh nghiệm cá nhân, khi cần phát triển một phần mềm chủ yếu chạy trên hệ điều hành Windows, tui sẽ sử dụng .NET, vì việc phát triển sẽ rất nhanh và dễ dàng. Ngược lại, nếu phát triển một ứng dụng lớn (cỡ Enterprise) và cần hoạt động trên nhiều platform khác nhau thì sẽ sử dụng Java. Tuy khó phát triển hơn, nhưng nhờ kiến trúc thiết kế rất tốt, sẽ làm cho khả năng hoạt động ổn định và khả năng mở rộng cao hơn.

Một người lập trình giỏi sẽ ko thiên về hẳn một công nghệ nào, mà biết hài hòa tận dụng theo nhu cầu của mình.

(Theo davidex - www.ddth.com)

Thứ Tư, 21 tháng 1, 2015