Thứ Bảy, 27 tháng 8, 2016

Định hướng việc học cho người mới học công nghệ thông tin

Bạn mới vào học công nghệ thông tin, bạn trái ngành nhưng giờ thấy đam mê công nghệ và học, những câu hỏi bạn băn khoăn : Ban đầu mình nên chọn ngôn ngữ nào để học C/C++ hay qua thẳng Java/C# luôn ? Lộ trình học cho mình như thế nào mình nên học gì như thế nào ? ... Như ở tiêu đề bài này mình sẽ hướng dẫn cho các bạn mới học một lộ trình thích hợp.

  1. Làm quen cấu trúc cơ bản : Đây là bước đầu tiên và cũng là nền tảng cơ bản để đi những bước tiếp. Mục tiêu là làm quen với biến, với câu lệnh điều kiện và vòng lặp.
     Câu hỏi đặt ra là ngôn ngữ nào để bắt đầu cho việc lập trình ? Nói chuẩn ra là ngôn ngữ nào cũng được nó không ảnh hưởng quá nhưng mình khuyên là nên học C. Mình khuyên học C vì thứ nhất C là hướng cấu trúc mà không phải hướng đối tương (hướng đối tượng ở giai đoạn sau ).
    À thế hướng cấu trúc là gì nhỉ ? hiểu đơn giản là bạn chia nhỏ các công việc (các hàm) ra đủ nhỏ để giải quyết, ví dụ như hình bên. Thứ hai là học C bạn học được cách quản lý bộ nhớ cái này thì như ông Java có thằng JVM làm hộ. Bạn có để ý là luôn có một môn dạy bạn lập trình C hoặc Pascal không :), mục đích là để dạy cho bạn bước này. Thế nên tốt nhất là bạn nên học môn này nghiêm túc.Nếu bạn học không ổn môn này hoặc bước này không chắc thì rất khó học tiếp vì nó là bước đệm để đi tiếp. Cách học là bên cạnh học trên lớp thì về nhà cày nhiều bài tập về phần đấy. Tài liệu cho ai muốn học thêm hoặc tự học : cuấn lập trình C cơ bản và nâng cao (Phạm Văn Ất), hoặc cuấn nhập môn lập trình ngôn ngữ C (Nguyễn Thanh Thủy). Hết bước này bạn nên làm gì đấy để luyện tập những gì đã học coi như bài tập lớn của bước này. Hết bước này bạn có thể làm game tic-tac-toe hoặc quản lý sinh viên,...làm để bạn thấy thích thú hơn với việc lập trình :)
  2. Bước tiếp là cấu trúc dữ liệu và giải thuật :
     Mọi người hay ví bước này như luyện nội công với người tập võ vậy. Nói vậy để bạn thấy được tầm quan trọng và sự cần thiết của nó. Sau khi nắm được các cấu trúc cơ bản ở bước một xong bạn bắt đầu quan tâm đến một số thứ : thời gian chạy chương trình đã tối ưu chưa, có rút ngắn được không nhỉ ?, tài nguyên dùng thế có bị phí phạm không ?,..Ở bước này bạn sẽ được học các cấu trúc dữ liệu và các giải thuật phổ biến. Quan trọng hơn là khi nào thì dùng cái nào cho hiệu quả. Một số cấu trúc dữ liệu thường gặp như single linked list, double linked list, queue, stack, tree, graph,.. cùng với một số giải thuật như sắp xếp, tìm kiếm, duyệt cây,...Nhiều người đi làm rồi vẫn thấy là không cần cấu trúc dữ liệu và giải thuật vẫn làm được việc bình thường , và phủ nhận đi tầm quan trọng của nó. Nhưng thực ra họ chỉ làm chạy được chứ chưa ngon, à để mình lấy thử ví dụ để bạn thấy sự cần thiết nhé :
     Giả sử bạn phải tìm kiếm một người trong 1000 bản ghi dữ liệu có sẵn, nếu bạn dùng mảng thông thường bạn phải duyệt 1000 bước, nhưng bạn dùng cây nhị phân lưu trữ thì việc duyệt để tìm kiếm chỉ tốn khoảng 10 bước  (Ảnh bên ví dụ cây tìm kiếm). Hoặc khi bạn cần sắp xếp 1 dãy sắp xếp thông thường mất O(n^2) trong khi giải thuật nâng cao chỉ mất O(nLog(n)). bạn chưa biết O là gì đúng không ? không sao bạn đã học đâu ít học sẽ biết :p, nhưng mình muốn nói là nhanh hơn. Và khi dữ liệu càng hơn thì cái NHANH HƠN ấy càng rõ ràng. Môn này còn rèn cho các bạn khả năng tư duy và kĩ năng lập trình, thế nên mọi người nhớ để ý học CẨN THẬN MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT ở trường. Nếu không chắc thì tự ý thức được việc quan trọng của nó mà học lại cẩn thận. Cách học : học xong về cấu trúc dữ liệu hay giải thuật nào thì tìm bài tập về phần đấy làm, bên cạnh đó tập lên các diễn đàn code như : topcoder, hackerrank làm để trau dồi những gì mình đã học và áp dụng. Tài liệu thì có cuấn kinh điển là CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (Đỗ Minh Hoàng), hoặc bạn có thể tìm về tài liệu giáo khoa chuyên tin học theo. Bên cạnh đó tài liệu tiếng anh cực kì nhiều ví dụ cuấn Introduction for algorithm khá hay. Phần này ngôn ngữ cũng không quan trọng lắm nhưng mình vẫn khuyên là code bằng C.
  3. Hướng đối tượng (Object-oriented programming) :
    Lập trình hướng đối tượng hiểu đơn giản là bạn nhìn nhận và giải quyết bài toán như thế giới thực các đối tượng tương tác với nhau, khó hiểu thế nhỉ :)), ví dụ : bạn làm game bắn tăng : bạn phân tích thành các đối tượng quản lý như xe tăng, đạn, map, rồi xe tăng đạn có thể di chuyển. đạn đâm vào tăng chết,... Lập trình hướng đối tượng có hai mục đích chính là tái sử dụng code tối đa và phải sửa ít nhất có thể khi thay đổi yêu cầu. Lập trình hướng đối tượng có bốn đặc tính chính : đóng gói, kế thừa, đa hình và trừu tượng. Khi học bạn cần hiểu từng đặc tính và nhớ để áp dụng khi thiết kế sản phẩm theo hướng đối tượng. Dĩ nhiên giờ bạn chưa học thì chưa biết nó là gì rồi :). Lập trình hướng đối tượng là phương pháp được sử dụng phổ biến hiện nay nhờ vào ưu việt của nó, thế nên bạn cần chú ý để học. Phương pháp học : hiểu từng đặc điểm hướng đối tượng, làm một số bài tập trong sách vở bạn được giao. Rồi gặp gì cũng liên tưởng đến viễn cảnh hướng đối tượng và cách chúng giao tiếp với nhau, ví dụ hai xe đâm nhau à đây là 2 object kiểu xe có phương thức đâm :)). Bên cạnh đó bạn nên tập thiết kế chia module nhỏ ví dụ như game bắn tăng kia :) và nhớ áp dụng các nguyên tắc của lập trình hướng đối tượng. Tài liệu tiếng việt có cuấn lập trình hướng đối tượng (Phạm Văn Ất), lập trình hướng đổi tượng với C++ (Nguyễn Thanh Thủy), còn tài liệu tiếng anh thì bạn tìm nhiều lắm :)
=> Đến đây là bạn có trong tay công cụ cơ bản để tự học làm web, game,.. Chúc các bạn thành công !

Thứ Ba, 23 tháng 8, 2016

Việc học tiếng anh dân IT, chuyện muôn thủa

Câu hỏi  chung của nhiều bạn mới vào ngành : tiếng anh có cần thiết cho dân công nghệ thông tin không ?, em mất gốc có học lại tiếng anh được không ?,...



Hôm nay mình sẽ viết để trả lời một phần những thắc mắc của các bạn. Mình sẽ viết trên 2 mục chính :
  • Tầm quan trọng của tiếng anh với dân IT.
  • Làm thế nào để cải thiện khả năng tiếng anh

1. Tầm quan trọng của tiếng anh với dân IT.

  •  Fix bug :
            Bugs là gì nhỉ ? là lỗi khi bạn dịch hoặc chạy chương trình. Các bạn có để ý ai gặp lỗi họ đều bảo gặp bugs không. Thực ra là ngày xưa máy tính to bằng ngôi nhà và chạy dùng các bóng đèn và hộp giấy. Một ngày nọ tự nhiên máy tính không hoạt động và rồi người ta phát hiện một con bọ mắt kẹt trong đó. Sau khi bỏ con bọ ra thì máy tính chạy được. Từ đấy về sau cứ gặp lỗi thì gọi là Bug (bug tiếng anh là bọ) .
            Bugs là nỗi ám ảnh với tất cả lập trình viên, từ lúc mới học : lỗi thiếu dấu chấm phẩy, thiếu ngoặc,.. Đến lỗi không quản lý tốt bộ nhớ, đối tượng NUL,..Khi gặp lỗi IDE sẽ thông báo cho bạn bằng TIẾNG ANH, ít nhất các bạn cần phải hiểu nó thông báo gì để còn giải quyết chứ. 

Thường thì những bạn mới học gặp lỗi sẽ nhờ bạn bè, người quen giúp kiểu xem hộ em lỗi này, sửa thế nào. Cứ nhờ mãi thế không ngại à :)), cần có giải pháp gì chứ ? Các bạn nên tập đọc lỗi và tra google đơn giản là copy thẳng lỗi trình duyệt báo vào google thêm ngôn ngữ của bạn vào hoặc tên IDE. Nhưng đời không như mơ, bạn google ra cũng toàn tiếng anh. Bạn sẽ dần dần phải quen với việc tra google và đọc hiểu lỗi. Đến đây bạn đã thấy được phần nào tầm quan trọng của tiếng anh
  • Tìm tài liệu, sách và đọc một ngôn ngữ, kiến thức mới :
          Học lập trình việc gặp một công nghệ mới hay nghiên cứu một ngôn ngữ mới là khá thường xuyên. Tài liệu tiếng việt thường có nhưng ít hoặc không đầy đủ để đáp ứng việc nhu cầu của bạn. Trong khi đó bài giảng, sách, youtobe về phần đó rất nhiều và ngon hơn bằng tiếng anh. Ví dụ bạn muốn học C++ từ cơ bản đến nâng cao, bạn có thể tìm trên google, how to master c++ hay the best resource / book for c++ có rất nhiều người khuyên bạn cần học trang gì sách gì ,.. ví dụ học C++ có một trang rất hay là : http://www.learncpp.com/. Bên cạnh đó khi có tiếng anh thì bạn sẽ có khả năng tìm hiểu và học nhanh hơn.
  • Tham gia các forum nước ngoài thảo luận và nâng cao kĩ năng :
         Khi có tiếng anh tốt các bạn có thể tham gia thảo luận trên các diễn đàn nước ngoài, ví dụ http://stackoverflow.com/, chắc bạn search lỗi hay ra trang này đúng không. Không chỉ dừng lại ở tra lỗi và sửa, bạn có thể đăng kí tài khoản và trả lời như chuyên gia :)). Tất nhiên trình của bạn cũng phải đạt đến một mức nào đấy thì mới thế được. Bên cạnh đó bạn cũng có thể tham gia vào các trang thi đấu code online như https://codefights.com/ để nâng cao khả năng code.

2. Làm thế nào để cải thiện khả năng tiếng anh :

     "Em cấp ba tiếng anh không biết gì giờ học được không ?" Được nhé, mình cấp ba tiếng anh cũng không biết gì, giờ tiếng anh cũng khá ngon. Điều quan trọng là kiên trì, có câu : cần cù bù thông minh. Ở trên đã trình bày tầm quan trọng của việc học tiếng anh đối với dân IT, dưới mình sẽ đưa ra một số phương pháp cũng như lời khuyên về việc học tiếng anh cho mọi người.

  • Cải thiện khả năng tiếng anh cho việc học công nghệ thông tin : Nguyên tắc cơ bản là gặp từ mới thì tra, gặp nhiều thì sẽ nhớ. Đừng sợ gặp bug hãy giải quyết nó.
     " Nếu bạn làm một chương trình mà không gặp bug nào chạy ngon luôn thì bạn sẽ không học được cách mà giải quyết khi gặp lỗi :), thế nên có gặp thì cũng bình tĩnh xử lý mà nghĩ rằng mình may mắn để có cơ hội học không chỉ bài toán mà còn cách xử lý lỗi đấy ."
    Nhìn thấy IDE báo lỗi gì đấy thì dịch xem nó bảo gì (dịch kiểu này có phần mềm lingoes trên win hoặc stardict trên Mac hỗ trợ double-click chuột rất tiện http://hocvachiase.com/cong-nghe-thong-tin/phan-mem/huong-dan-su-dung-phan-mem-lingoes/). Sau khi hiểu IDE báo lỗi gì, bạn copy thẳng lỗi vào google mở một hai link đầu trên top google, bước này vất hơn đọc dịch và sửa lỗi mà bạn mắc (dùng cốc cốc có double-click dịch cũng khá hay không thì tiếp tục lingoes). Lúc đầu làm có thể hơi chán vì nhìn tư nào cũng mới nhưng rồi bạn sẽ quen, thực ra từ vựng IT cũng có giới hạn thôi mà, nhưng dần dần bạn sẽ quen và gặp lỗi có thể tự sửa bằng Google + kinh nghiệm mà không cần nhờ vả nữa nói thế thôi nhiều bug khó vẫn phải nhờ người có kinh nghiệm. Việc đọc tài liệu thì bạn muốn tìm hiểu vấn đề gì có thể tìm tài liệu hoặc theo bài hướng dẫn bằng tiếng việt trước để cho hiểu rồi mới tìm và đọc bằng tiếng anh cũng được như thế bạn không bị choáng ngợp vừa tiếng anh vừa kiến thức chuyên ngành. Đọc thì vẫn bài cũ, từ nào không biết thì tra để đọc nắm sơ sơ được ý nó viết đủ hiểu, không cần note lại từ nhé cứ double-click từ nào gặp nhiều sẽ nhớ.
  • Học tiếng anh một cách toàn diện : Chắc hẳn không chỉ muốn chỉ đọc được tài liệu, bạn còn muốn nghe - nói - đọc - viết đều ổn, để có cơ hội hơn cho sau này. Nhiều bạn ước mơ 500 toeic, em cần TOEIC để ra trường, nhưng lời khuyên là để toàn diện tiếng anh thay vì học TOEIC hãy học IELTS. Ielts có thể khó học hơn cần kiên trì hơn, giá khóa học cũng cao hơn,.. nhưng sau này bạn cũng cần nó hơn ví dụ muốn đi nước ngoài làm chẳng hạn. Hơn nữa, bạn học đến tầm 5.0-6.0 ielts là thi toeic 700-800 là bình thương, nhưng ngược lại thì không có nhé. Có anh Ngọc Bách có bài này hướng dẫn tự học ielts khá hay : http://www.mediafire.com/download/70b6nvm3970clgh/BI_KIP_TU_HOC_IELTS_TU_0_LEN_8.0_NGOC_BACH.pdf.
     .Ngoài ra luyện nghe nói bạn có thể học theo bộ Effortless English : http://effortlessenglish.edu.vn/bai-hoc-effortless-english/huong-dan-cach-hoc-effortless-english-a18-i35.html . Hoặc phương pháp chép chính tả : http://ngocbach.com/luyen-listening-bang-pp-nghe-chep-chinh-ta-2.html . CHỈ NÊN CHỌN MỘT PHƯƠNG PHÁP VÀ NÊN KIÊN TRÌ VỚI NÓ BẠN SẼ LÊN TRÌNH.  Chúc các bạn sớm nâng cao trình độ tiếng anh. Good luck ! Có thì thắc mắc về việc học tiếng anh hoặc định hướng lập trình cứ comment dưới mình sẽ trả lời trong khả năng 

Ngành CNTT Việt Nam hình như đang đi theo một con đường kỳ lạ, rất nóng và ít bền vững.

Ngành CNTT Việt Nam hình như đang đi theo một con đường kỳ lạ, rất nóng và ít bền vững. Từ khi còn giảng dạy, đến giờ, tôi vẫn...