Kim chỉ nam lập trình di động - Thế giới trên lòng bàn tay

Việc phát triển ứng dụng trên di động, đòi hỏi nhiều kỹ năng và kiến thức. Thoạt nhìn, ta có thể dễ bị lầm tưởng là ứng dụng trên di động đơn giản hơn dễ viết hơn trên máy tính lớn vì nó quá nhỏ bé, chắc viết ít code hơn. Nhưng trái lại, phát triển ứng dụng trên di động là cả một thế giới sáng tạo trong đó. Và tuyệt vời hơn, thế giới đó nằm gọn trên lòng bàn tay của bạn

Bài viết này nhằm chia sẻ những nội dung mang tính "cốt lõi" của việc lập trình di động, phát triển ứng dụng trên di động để các bạn có thể xem như cẩm nang, hay check-list để rèn luyện nội lực cho mình nhằm tiến tới trở thành nhà phát triển ứng dụng di động chuyên nghiệp. Nội dung bài viết mang tính khái quát hay tổng hợp cao, những phần đi sâu vào kỹ thuật sẽ không trình bày.

Trong quá trình học tập và giảng dạy, tôi may mắn được đi nhiều nước, học nhiều thầy nên mong muốn được chia sẻ kiến thức, những gì mình đã học được cho các bạn đi sau để góp phần giúp các bạn tiết kiệm được thời gian quý báu của mình.

Chụp trước tòa thánh Vatican, Italy

Chụp với Giáo sư Adrian Perrig, giám đốc ETHZ NetSec Group, Thụy Sỹ, cựu giám đốc CMU CyLab 

Chụp với GS Kueng và GS Mayerhofer, ĐH JKU, Linz 

Chụp với TS. Francesco Ciari, IVT Institute, ETHZ, Thụy Sỹ


I. Trăm hoa đua nở - Tôi phải đi đâu? Hãy về với chính mình ! 

Nếu bạn search Google từ khóa "lập trình di động", "lập trình android",  "lập trình mobile", vân vân, thì sẽ xuất hiện rất nhiều kết quả khiến các bạn hoang mang không biết phải theo cái nào cả. Thực ra vấn đề này không nằm ở bên ngoài, nó nằm trong chính các bạn. Có một trích đoạn mà tôi rất tâm đắc trong Truyện Alice lạc vào xứ sở Thần Tiên. Lúc này Alice bị lạc, may quá cô bé gặp con mèo ở bên đường và hỏi:
- Mèo ơi, làm ơn chỉ cho tớ đi đường nào đây?
Con mèo trả lời:
- Điều đó còn tùy thuộc vào việc cậu muốn đến đâu chứ?
Alice đáp lại:
- Tớ thật sự chẳng quan tâm lắm.
Con mèo đáp:
- Thế thì cậu đi đường nào cũng không quan trọng!
[Alice’s Adventures in Wonderland, Chapter 6]

Điều này mang tính triết lý rất cao: ngay cả những người thông thái nhất cũng chào thua khi phải chỉ đường cho một người mà không hề biết rõ đích đến của mình là nơi đâu.

Trong lập trình di động cũng vậy, nó là một thế giới bao la trong đó: phát triển ứng dụng tiện ích như calculator, sổ ghi chép, .. hay ứng dụng Games, hay những ứng dụng mang tính khoa học cao như: nhận dạng xử lý ảnh, hay những ứng dụng điều khiển robot bên ngoài, điều khiển smarthome,.... Nhưng đó cũng chỉ là thứ yếu. Việc đầu tiên cần xác định là Bạn muốn học lập trình di động để làm gì ?
  • Để làm đẹp cho đời.
  • Để thỏa ước mơ sáng tạo.
  • Để tìm việc với mức lương cao.
  • Để chuyển ý tưởng của mình thành ứng dụng có thể bán được.
  • Để khởi nghiệp.
  • .. và nhiều lý do khác nữa. 
Tất cả các lý do đều hợp lý các bạn à. Việc "kiếm tiền" không có gì là xấu cả, không kiếm được tiền mới là nguyên nhân nảy sinh nhiều điều xấu!  Các bạn hãy xem tiền bạc như là một phần thưởng xứng đáng cho sự phục vụ. Bạn phục vụ được càng nhiều người thì càng được tưởng thưởng. Do đó hãy tập trung tạo ra sản phẩm sao cho càng nhiều người sử dụng được thì sự tưởng thưởng đó sẽ càng lớn.

Đó là lý do vì sao tôi khuyên các bạn là "Hãy về với chính mình". Xác định mình học để làm gì? Khi đã có được mục tiêu thì tiếp theo là làm sao đạt được mục tiêu đó. Lúc đó thì các bạn sẽ thấy rõ ràng hơn con đường để đi tiếp.

Trong bài viết này, tôi tập trung vào đối tượng là các bạn muốn rèn luyện kỹ năng cho mình để có thể tìm được việc làm tốt, hoặc các bạn muốn tự sáng tạo app cho riêng mình và tốt hơn nữa thì các bạn có thể đăng lên app store đưa đến tay người dùng.

II. Kiến thức quá rộng, học bao nhiêu thì đủ ? 

Tôi cũng là một người mê truyện kiếm hiệp của Kim Dung. Trong chuỗi tiểu thuyết của ông, có một nhân vật "Mộ Dung Phục", là 1 thanh niên giỏi võ và khả năng học tập phi thường. Anh ta có năng khiếu võ học và ham muốn học hết các võ công của thiên hạ để phục quốc. Chỉ có nhược điểm là anh không biết sử dụng vào tình huống nào, nên khi đánh nhau, nếu có người chỉ điểm bên ngoài là dùng thế này thế kia để hóa giải hay tấn công thì lúc đó anh thật sự sắc bén, còn không thì anh ta rất dễ bị đánh bại.

Kiến thức cũng vậy các bạn à. Không tài nào chúng ta học hết được tri thức của nhân loại đâu. Chỉ riêng trong lĩnh vực mobile, có hàng trăm đầu sách hướng dẫn lập trình. Tài liệu hướng dẫn sử dụng được cung cấp miễn phí cũng nhiều và sẵn có nữa.

Điều các bạn cần đó là tinh thần cầu tiến, tính kỷ luật và may mắn hơn thì có được một người thầy/người bạn/người sếp/người huấn luyện viên (coach) tốt chỉ dẫn và rèn luyện cho. Vai trò của người thầy ngày nay khác xưa nhiều lắm. Ngày xưa, thầy là người nắm nhiều kiến thức và truyền lại cho học trò những điều mình biết. Ngày nay, kiến thức được cung cấp miễn phí và tràn ngập. Người học có thể tiếp cận đến kiến thức bất cứ lúc nào. Người thầy đóng vai trò người hướng dẫn và chọn lọc kiến thức nào là phù hợp cho từng người học trò. Vì mỗi người có những sở trường, sở đoản khác nhau, có những tố chất khác nhau, mức độ tiếp thu khác nhau.

Mỗi nội dung kiến thức, có những "chuẩn đầu ra" nhất định. Khi các bạn đã đạt các chuẩn đầu ra đó. Chứng tỏ là các bạn đã học đủ những gì cần thiết ở chuẩn đó và có thể bước vào những dự án thật sự của mình. Điều quan trọng nhất là hãy không ngừng rèn luyện và nâng cao kiến thức của mình. Lúc đó, bạn chính là thầy của bạn.


III. Mười một nội dung trọng yếu cho việc sáng tạo mobile app 

Đây là 11 nội dung tôi chắt lọc lại trong quá trình dạy học và huấn luyện cho nhiều nhóm sáng tạo. Cũng như các nhóm sinh viên đang làm đề tài với tôi. Có thể nó sẽ không bao phủ hết mọi lĩnh vực, nhưng nó đủ để các bạn tự tin vững bước. Hơn nữa, hãy nhớ rằng, chúng ta không thể nào học hết mọi thứ được :-)

1. Lên ý tưởng và thiết kế 

Nhiều bạn nghĩ rằng khi học lập trình di động là chúng ta bắt ta ngay vào viết mã (coding). Nhưng không, trước tiên ta nên bắt đầu bằng việc mô tả ý tưởng của mình và tưởng tượng ra cái app của mình sẽ có những tính năng gì, hình dáng như thế nào, nó sẽ làm được gì.


Một ví dụ tiêu biểu của Mockup 
Việc xây dựng Mockup có thể dùng phần mềm chuyên dụng, nhưng cũng có thể dùng tờ giấy và cây bút chì mà thôi. Tại đây, các bạn sẽ chuyển tải trí tưởng tượng của các bạn ra trang giấy, để từ đó có cái nhìn rõ hơn về dự án mình sẽ làm.

Giai đoạn này rất hào hứng và rất quan trọng. Nó chiếm đến hơn 50% sự thành công của dự án. Bởi vì bạn sẽ khó có thể phát triển cái phần mềm mà bản thân bạn không thể tưởng tượng ra nó được.

Đây là 1 bức tranh vui nói về việc phát triển phần mềm từ ý tưởng đến thực tế 


2. Hiểu và phát huy được hết tính năng của hệ thống ta đang phát triển: 

Trong binh pháp có câu, biết người biết ta, trăm trận trăm thắng. Nếu bạn biết được những ưu điểm của chiếc điện thoại bạn đang định viết app cho, hệ điều hành nó cung cấp những khả năng gì thì bạn sẽ viết app được tốt hơn. Không có một ứng dụng nào viết một lần cho tất cả điện thoại di động, kể cả ứng dụng cross-platform. Vì mỗi cấu hình điện thoại khác nhau, do những hãng khác nhau sản xuất, có những thư viện lập trình hỗ trợ khác nhau. Kể cả cùng 1 hãng, nhưng những đời khác nhau, series khác nhau cũng gây khó khăn cho việc lập trình. Ngay cả trong cùng một đời mà những phiên bản hệ điều hành khác nhau cũng có những sự khác biệt nhất định

3. Lập trình theo sự kiện & ngữ cảnh - Event & context driven programming 

Chiếc điện thoại di động là một thiết bị có môi trường làm việc cực kỳ đa dạng mà người ta hay quảng cáo "anytime, anywhere". Các sự kiện diễn ra trên chiếc điện thoại rất đa dạng: chẳng hạn như một button được click, người dùng tương tác ở các vị trí khác nhau trên điện thoại, click vào những nút khác nhau. Khi có những sự kiện đó diễn ra, chúng ta phải đáp ứng được các sự kiện đó càng nhanh càng tốt để làm cho app có sự đáp ứng tốt mới thu hút được người dùng.

Hơn thế nữa, ứng dụng của bạn có thể bị tạm dừng hay ngắt quãng bởi rất nhiều sự kiện chẳng hạn như: pin yếu, có cuộc gọi đến, có kết nối mạng hay mất kết nối mạng, người dùng xoay ngang/dọc chiếc điện thoại, người dùng đang di chuyển với tốc độ cao, hay thậm chí người dùng không thể nhìn chăm chú vào màn hình vì họ bận lái xe hay làm việc khác quan trọng hơn, và rất nhiều sự kiện khác nữa. Ứng dụng của bạn phải "để ý đến" những yếu tố đó nữa.


Điểm khác biệt lớn nhất của app trên di động là bạn có rất nhiều sensors để làm cho ứng dụng trở nên thông minh hơn: chẳng hạn như GPS sensor, nó cho bạn biết điện thoại đang ở đâu để giúp bạn tìm đường tốt hơn; hay cảm biến gia tốc accelerometer cho biết là điện thoại đang được rung lắc hay xoay theo hướng nào. Tận dụng được những thông tin dùng để mô tả trạng thái của chiếc điện thoại được gọi chung là ngữ cảnh sẽ giúp app của bạn trở nên thông minh hơn.

Với 3 nội dung trên, đến đây bạn có thể viết được những app đơn giản như: máy tính bỏ túi, trò chơi nhìn hình đoán chữ, chiếc nón kỳ diệu, học luật giao thông, ...

4. Cơ sở dữ liệu & lưu trữ file - SQLite Database, file storage, JSON  
Một nhu cầu phổ biến đó là lưu trữ, trao đổi dữ liệu và truy vấn dữ liệu. Đây là một nội dung mà lập trình viên cần phải nắm. Để lưu trữ dữ liệu lâu dài. các bạn có thể nghĩ ngay đến ghi vào 1 tập tin nào đó trên hệ thống.

Trên điện thoại Android có 2 chỗ để lưu trữ dữ liệu lâu dài đó là trên bộ nhớ trong của điện thoại, trên SDCard, còn trên điện thoại iOS thì chỉ cho phép lưu trữ trên bộ nhớ điện thoại,đây chính là sự khác biệt mà các bạn cần phải biết (trừ trường hợp điện thoại Android đã được root và điện thoại iOS đã jailbreak)



Việc lưu trữ trên file có thể được thực hiện dễ dàng. Tuy nhiên, lúc đó, việc truy xuất và truy vấn dữ liệu theo các điều kiện khác nhau sẽ rất khó khăn. Cho nên các bạn cần phải nắm kiến thức về SQLite để lưu trữ có cấu trúc và truy vấn dễ dàng hơn. SQLite là một dạng CSDL dành cho di động. Nó có rất nhiều ưu điểm cho việc lưu trữ và truy vấn trên mobile.

5. Điện toán đám mây cho di động - Mobile Cloud 

Chiếc điện thoại của chúng ta có những hạn chế rất lớn khó vượt qua đó là: dung lượng lưu trữ giới hạn, khả năng tính toán cũng hạn chế. Tuy nhiên, nó được hỗ trợ một cách tuyệt vời của sự phát triển công nghệ gần đây đó là cloud computing. Những dịch vụ máy chủ ảo, dịch vụ web - webservices, đã góp phần làm tăng cường thế mạnh của mobile.


Mobile có thể được lập trình để cung cấp dữ liệu lên trên cloud để tính toán và nhận kết quả trả về mà thôi. Chính điều này đã làm cho chiếc di động trở nên mạnh mẽ hơn bao giờ hết.

Những kiến thức các bạn cần phải nắm đó là kiến thức xây dựng và tiêu thụ 1 dịch vụ web.
Các chuẩn dữ liệu trao đổi như XML, hay JSON để giúp cho ứng dụng trao dổi thông tin giữa mobile và cloud

6. Lập trình mạng & lập trình đa luồng - Network programming & Multi-thread programming 

Các nội dung chuyên sâu này giúp cho app có thể trao đổi thông tin qua mạng nói chung. Những kiến thức cần nắm đó là lập trình socket, lập trình TCP/IP.

Ngày nay, các thiết bị di động được trang bị CPU đa nhân, việc tận dụng được nhiều nhân của CPU sẽ giúp ứng dụng của bạn trở nên mạnh mẽ hơn và đáp ứng nhanh hơn.


Hơn nữa, đối với những trường hợp muốn tăng độ đáp ứng của chương trình lên, chúng ta cần phải đưa các tác vụ có thời gian hoàn thành lâu hoặc phải chờ đợi sang 1 thread khác để cho chương trình không bị "kẹt" lại khi một tác vụ chưa hoàn tất. Kỹ thuật này gọi là multi-thread programming.

7. Lập trình đồ họa & multimedia 
Chiếc điện thoại ngày nay có khả năng đồ họa và đa phương tiện rất cao. Nếu các bạn muốn ứng dụng của mình đầy màu sắc, sinh động thì những kỹ thuật xử lý hình ảnh, âm thanh, animation, hiệu ứng, cần phải được phát huy. Điều này đặc biệt quan trọng trong ứng dụng Game, giải trí hay ứng dụng dạy học ngoại ngữ, tương tác.


8. Trải nghiệm người dùng - User Experience - UX 

Trải nghiệm người dùng UX là quá trình tăng cường sự thỏa mãn của khách hàng và độ yêu thích ứng dụng bằng cách tăng cường tính tiện dụng, dễ sử dụng và sự hài lòng mang lại khi tương tác giữa người dùng và sản phẩm. UX là một bước cao cấp hơn UI - giao diện người dùng nhiều.
Một ứng dụng thành công là một ứng dụng có UX được xây dựng tốt.

Để đạt được kỹ năng này, các bạn phải rèn luyện và học hỏi nhiều.

9. Mobile testing  & Security coding. 

Điều đặc biệt quan trọng là phải test ứng dụng của bạn trước khi đến tay người dùng. Càng test kỹ bao nhiêu, ứng dụng càng trở nên mạnh mẽ bấy nhiêu. Sẽ rất không hay nếu sản phẩm đến tay người dùng mà xuất hiện nhiều lỗi.  Việc viết test trong khi coding cũng là một kỹ năng cần phải rèn luyện.

Ngoài ra, ứng dụng nào cũng vậy, luôn tìm ẩn những lỗi khó phát hiện ra trong lúc xây dựng chương trình. Điều đó khiến ứng dụng có thể mở ra những lỗ hổng khác có thể bị khai thác. Do đó, việc tuân thủ theo những quy tắc lập trình an toàn có thể giảm thiểu phần nào những lỗi security sau này.

10. Xuất bản ứng dụng lên app-store 

Chúc mừng các bạn đã đọc đến bước này. Đây là bước cuối cùng để đưa sản phẩm đến tay người tiêu dùng. Tuy nhiên, điều này cũng không kém phần rắc rối.


Bạn phải hiểu những quy định của các appstore (Apple, Google Playstore) phải thiết kế hướng dẫn sử dụng, mô tả sản phẩm, các màn hình chụp - screenshot của ứng dụng để khách hàng có thể nhìn thấy trước. Hoặc thậm chí một video mô tả ứng dụng.


11. Nguyên tắc thứ 11: hãy quên hết các nguyên tắc trên đi và sử dụng trí tưởng tượng của bạn. 

Điều cốt lõi của nguyên tắc thứ 11 đó là khi các bạn đã thành thạo các nguyên tắc từ 1-10 thì hãy đừng bị gò bó bởi chúng nữa mà hãy sáng tạo hơn khi cần thiết. Những phép tắc, quy định đôi khi sẽ chính là rào cản sáng tạo của các bạn.



IV. Ba cây chụm lại nên hòn núi cao - Teamwork 

Con đường tự học lập trình mobile rất chông gai. Nó đòi hỏi bạn phải có quyết tâm cao độ và tinh thần chinh phục mới có thể thành công. Ngoài ra, 11 nội dung trọng yếu tôi liệt kê ra trong mục III thì hiếm có ai có thể có đầy đủ. Cho nên một app tốt thường là sản phẩm của cả một đội, một nhóm.

Người rành giao diện, người thích đồ họa thì làm đồ họa, người có kinh nghiệm trong UX thì làm UX. Do đó, tìm người đồng hành là không thể thiếu. Có người đồng hành cùng phát triển thì sẽ tiến xa hơn.

Do đó các kỹ năng mềm, kỹ năng làm việc nhóm phải được rèn luyện song song với kiến thức thì sau này bạn mới thành công được. Hiếm có công ty nào tuyển nhân viên mà người đó không làm việc được với ai hết. Việc giao tiếp, làm việc nhóm cũng là 1 kỹ năng có thể học được.

    V. Kết luận

    Trên đây chỉ vừa trình bày những điểm trọng yếu trong việc phát triển ứng dụng trên di động. Nó giúp các bạn hiểu được con đường sẽ đi qua. Những ai đã từng trải nghiệm qua, nếu thấy mình thiếu sót chỗ nào có thể từ từ bổ sung để hoàn thiện hơn nữa. Vì kỹ năng lập trình là cả một quá trình, nó cần có thời gian để rèn luyện chín muồi.

    Ngoài ra, để phục vụ cho việc giảng dạy lập trình mobile, và khảo sát nhu cầu học của mọi người, tôi có làm 1 form khảo sát.

    Các bạn có nhu cầu học lập trình di động hoặc cần tư vấn nghề nghiệp có liên quan đến mobile thì hãy tham gia khảo sát nhé: [Click here].



    Sách và tài liệu tham khảo 

    Sau đây là một số tài liệu tham khảo (tôi sẽ update liên tục) để giúp các bạn có thể tự học. Tôi chia theo các nội dung:

    Thiết kế giao diện & trải nghiệm người dùng - UI & UX


    Lập trình Android
    • Reto Meier, Professional Android 4 Application DevelopmentLink 
    • Coursera, https://www.coursera.org/learn/android-programming 
    • Và tất nhiên là trang developer của Android, developer.android.com 

    Lập trình iOS
    • CHRISTIAN KEUR and AARON HILLEGASS, iPhone Programming : The Big Nerd Ranch Guide. Link
    • Erik Buck, Donald Yacktman, Cocoa Design Patterns 1st Edition, Link 
    • Trang Developer của Apple: https://developer.apple.com/ 
    • Và nhiều sách nữa: 
      • http://www.appdesignvault.com/5-books-to-help-you-become-an-ios-app-developer/


    Nhận xét

    Đăng nhận xét