Saturday, September 15, 2018

toidicodedao: Sự khác biệt giữa server-side rendering và client-side rendering

Trong series Lược Sử Lập Trình Web, mình đã kể về chuyện lập trình web đang có xu hướng chuyển dần từ server-side rendering sang client-side rendering.
Trong bài này, chúng ta sẽ cùng tìm hiểu về sự khác nhau giữa hai cơ chế này, ưu nhược điểm của chúng để có thể dễ dàng lựa chọn khi sử dụng nhé! Chúng ta cũng sẽ tìm hiểu những công ty công nghệ lớn như Facebook, AirBnB sử dụng cơ chế nào luôn!

Cơ chế server-side rendering

Cơ chế server-side rendering đã được dùng từ thuở xưa ơi là xưa. Gọi nó là server-side rendering là vì phần lớn logic sẽ được xử lý ở server:
  • Khi người dùng vào một trang web, trình duyệt sẽ gửi GET request tới web server
  • Web server sẽ nhận request, đọc dữ liệu từ database.
  • Web server sẽ render HTML, trả về cho browser để hiển thị cho người dùng
Mô hình đơn giản về Server Side Rendering
Một số tính chất của cơ chế server side rendering:
  • Logic từ đơn giản (validation, đọc dữ liệu) cho đến phức tạp (phân quyền, thanh toán) đều nằm ở phía server
  • Logic để routing – chuyển trang nằm ở server
  • Logic để render – hiển thị trang web cũng nằm ở server nốt

Ưu và nhược điểm của Server Side Rendering

Ra đời đã lâu, server side rendering đã được sử dụng, cải tiến rất nhiều (Caching, CDN). Những ưu điểm của cơ chế này:
  • Initial load nhanh, dễ otpimize, vì toàn bộ dữ liệu đã được xử lý ở server. Client chỉ việc hiển thị.
  • Các web framework từ xưa đến nay đều hỗ trợ cơ chế này
  • Dễ hiểu và dễ code hơn. Developer chỉ cần code 1 project web là được, không cần phải tách ra front-end và back-end
  • SEO tốt vì khi bot của Google, Bing vào web sẽ thấy toàn bộ dữ liệu dưới dạng HTML.
  • Chạy được trên phần lớn mọi trình duyệt, kể cả disable JavaScript vẫn chạy tốt
SSR dễ code, hỗ trợ SEO cũng khá tốt
Thế nhưng, bên cạnh đó, server side rendering cũng có một số nhược điểm:
  • Mỗi lần người dùng chuyển trang là site phải load lại nhiều lần, gây khó chịu
  • Nặng server vì server phải xử lý nhiều logic và dữ liệu. Có thể sử dụng caching để giảm tải.
  • Tốn băng thông vì server phải gửi nhiều dữ liệu thừa và trùng  (HTML, header, footer). Có thể sử dụng CDN để giảm tải.
  • Tương tác không tốt như Client Side rendering vì trang phải refresh, load lại nhiều lần.
Cơ chế server side rendering vẫn còn được sử dụng ở rất rất nhiều site. Do vậy, chỉ cần hiểu rõ và nắm vững cơ chế này là bạn đã có thể làm một trang web đầy đủ tính năng rồi.
Các trang web sử dụng cơ chế này:
  • Toàn bộ những trang web được build từ CMS như Joomla, WordPress.
  • Các trang web bán hàng, web tin tức: Thegioididong, Vnexpress, Zing News
  • Các web đọc truyện và forum: Webtretho, vozforum
Các trang web lớn, web tin tức vẫn sử dụng cơ chế SSR

Cơ chế client-side rendering

Thế rồi, ở những năm 2010, với sự phát triển của JavaScript và AJAX, cơ chế client-side rendering bắt đầu được sử dụng.
Developer bắt đầu build ứng dụng dưới dạng SPA – Single Page Application. Ứng dụng nằm trong 1 page duy nhất nên được gọi là Single Page Application.
Client Side Rendering tức là việc render HTML, CSS sẽ được thực hiện ở client (Tức JavaScript ở trình duyệt)
Những logic về render dữ liệu sẽ được xử lý ở phía client thay cho server
So với Server Side Rendering (SSR) đã nhắc trong phần 1, Client Side Rendering (CSR) có những đặc điểm sau:
  • Những logic đơn giản (validation, đọc dữ liệu, sorting, filtering) nằm ở client side
  • Logic để routing (chuyển trang), render (hiển thị) dữ liệu thì 96.69% là nằm ở client side
  • Logic phức tạp (thanh toán, phân quyền) hoặc cần xử lý nhiều (data processing, report) vẫn nằm ở server side.

Ưu nhược điểm của Client-side rendering

Ra mắt sau nên Client Side Rendering giải quyết được một số vấn đề của server side rendering:
  • Page chỉ cần load một lần duy nhất. Khi user chuyển trang hoặc thêm dữ liệu, JavaScript sẽ lấy và gửi dữ liệu từ server qua AJAX. User có thể thấy dữ liệu mới mà không cần chuyển trang.
  • Chuyển logic sang client nên giảm tải được một phần cho server.
  • Giảm được băng thông do chỉ cần lấy JSON và dữ liệu cần thiết, thay vì phải lấy toàn bộ trang
  • Với các ứng dụng cần tương tác nhiều, SPA hoạt động mượt mà hơn vì code chạy trên browser, không cần load đi loại lại nhiều
Tất nhiên là client side rendering cũng có một số nhược điểm riêng:
  • Initial load sẽ chậm hơn nếu không biết optimize. Lý do là broser phải tải toàn bộ JavaScript về (khá nặng), parse và chạy JS, gọi API để lấy dữ liệu từ server (chậm), sau đó render dữ liệu
  • Đòi hỏi project phải chia làm 2 phần riêng là back-end (REST api) và front-end nên khó code hơn
  • Không chạy được nếu JavaScript bị disable, hoặc ở các trình duyệt cũ không nhận JavaScript ES6 (Có thể dùng transpiler và polyfill nhưng sẽ làm tăng kích cỡ file js)
  • SEO không tốt bằng Server Side Rendering (Do bot crawl không đọc được dữ liệu). Để giải quyết, ta phải kết hợp thêm SSR (Bot mới của Google đọc được client-side rendering rồi).
  • Nếu client sử dụng mobile, device yếu thì khi load sẽ bị chậm
Với Client Side Rendering, dự án phải chia ra làm 2 phần là front-end và back-end

Các website sử dụng Client-Side Rendering

Vì Client-side rendering rất phù hợp cho những ứng dụng cần tương tác nhiều, hầu hết web của các công ty công nghệ, công ty startup đều đùng cơ chế này:
  • Facebook (React)
  • Instagram (React)
  • Netflix (React)
  • Dropbox (React)
  • AirBnb (React)
  • Trello (Angular)
  • Paypal (Angular + React)
  • Xiaomi (VueJS)
  • Alibabe (VueJS)
  • Gitlab (VueJS)
Website của các ông lớn như Airbnb, Facebook, Netflix, Uber đều sử dụng cơ chế Client Side Rendering cả
Nói chung, client side rendering còn khá mới mẻ nên vẫn còn một số vấn đề nhỏ chưa được giải quyết tốt (tối ưu tốc độ initial load, giảm kích cỡ file JavaScript của app).
Các vấn đề này vẫn đang được giải quyết bởi các engineer trâu bò hàng đầu ở Facebook, Netflix, Instagram…

Kết

Trong bài viết này, mình đã giới thiệu sơ về 2 cơ chế client-side rendering và server-side rending. Mình cũng chia sẻ về những ưu nhược điểm của 2 cơ chế này.
Một điều mình không nhắc đến trong bài là đôi khi các website sẽ kết hợp cả server-side rending lẫn client side rendering. Ví dụ server sẽ tải trước một số dữ liệu dưới dạng JSON cho client, hoặc server sẽ render HTML khi gặp bot đễ hỗ trợ crawl tốt hơn.
Bản thân các thư viện client-side rendering như React, VueJS cũng đều hỗ trợ server rendering (React có react-dom/server, VueJS có Nuxt). Nếu có hứng thú, các bạn có thể tự tìm hiểu thêm nhé!

toidicodedao: 9 project nhỏ mà bạn có thể code để luyện tập kĩ năng lập trình

Hôm trước, mình có giới thiệu về JavaScript, đánh giá nó là một ngôn ngữ mạnh mẽ, đáng học.
Một trong những cách học nhanh nhất chính là sử dụng JavaScript để build một số pet project (dự án nhỏ) để làm quen với ngôn ngữ và công nghệ.
Mình cũng có hứa là sẽ chia sẻ một số project nhỏ mà các bạn có thể sử dụng JavaScript để build.
Do vậy, hôm nay mình viết bài này, tổng hợp 9 dự án nhỏ, đơn giản, dễ làm mà các bạn có thể tập code để nâng cao kĩ năng lập trình.
Note: Tuy nói là JavaScript nhưng các bạn có thể dùng bất cứ ngôn ngữ gì code cũng được nhé (C#, Java, PHP). Chỉ có một vài dự án sẽ cần dùng JavaScript ở front-end thôi.

Cấp độ dễ

Các dự án cấp độ dễ này chỉ cần đụng tới console/file. Thời gian code cũng khá nhanh. Hoàn thành các dự án này, bạn sẽ có nền tảng để làm những thứ phức tạp hơn.

1. Tool crawl dữ liệu từ các website

Mô tả: Viết một tool gửi HTTP Request tới một trang web tin tức bất kì như vnexpress, webtretho, kenh14, bóc tách dữ liệu từ HTML, sau đó in ra cửa sổ console.
Mình từng có 2 bài chia sẻ về cái này:
Kĩ năng học được:
  • Cách sử dụng thư viện để gọi HTTP Request
  • Cách sử dụng xpath/selector để lấy dữ liệu từ HTML
Làm một con web crawler đơn giản

2. Ứng dụng ghi chú (notes) trên console

Mô tả: Cửa sổ console sẽ hiện 1 menu bao gồm:
  1. Hiển thị toàn bộ các ghi chú
  2. Thêm một ghi chú mới
  3. Sửa một ghi chú đã code
  4. Xóa bỏ một ghi chú
Bonus: Nếu lưu toàn bộ các notes trong memory, khi tắt ứng dụng các note sẽ biến mất. Lưu toàn bộ các notes xuống file txt, khi mở ứng dụng lên ta sẽ đọc từ file này.
Kĩ năng học được:
  • Cách nhận input/output từ console
  • Cách làm việc với mảng
  • Cách làm việc với file I/O

Cấp độ trung bình

Các dự án ở cấp độ trung bình này sẽ đòi hỏi bạn biết thêm về UI, database, cron, Web API.
3. Ứng dụng ghi chú (notes) cải tiến:
Mô tả: Chức năng tương tự như ứng dụng ghi chú phía trên, nhưng có UI (Dùng Electron của JS, Winform/WPF của C#, Java Swing của Java). Note nên được lưu vào database, đọc từ database
Kĩ năng học được:
  • Cách làm việc với UI
  • Cách lưu trữ, đọc dữ liệu từ database
Các bạn có thể tìm hiểu về Electron, framework cho phép ta dùng HTML/CSS/JS để build ứng dụng chạy trên mọi hệ điều hành

4. Rest API cho VNExpress, Web Trẻ Thơ

Mô tả: Dự án gồm 2 phần:
  1. Crawler lấy dữ liệu bài viết từ VNExpress, webtretho, bao gồm: Tựa đề, nội dung, url bài viết, thời gian đăng, lưu xuống database. Crawler này sẽ chạy mỗi 60 phút. (Tìm hiểu về cron hoặc recurring task)
  2. RESTful API, cho phép người dùng lấy thông tin các bài viết đã có trong database dưới dạng JSON. API này cho phép search, filtering, paging. Có thể dùng bất kì framework nào (Express, Hapi, ASP.NET MVC) tùy thích.
Bonus: Tìm cách deploy dự án này lên heroku hoặc now.sh cho bạn bè dùng thử. Nhớ thêm swageer để người dùng biết cách gọi API nha.
Kĩ năng học được:
  • Cách viết cron job/recurring task
  • Cách viết RestfulAPI sử dụng Web Framework
RestAPI của Code Dạo viết, cho phép tìm info diễn viên và những phim họ đã đóng

5. Làm Facebook chat bot

Mô tả: Làm một con Facebook chat bot đơn giản, có khả năng nhận tin nhắn của người dùng, chat lại những thứ người dùng nói
Hướng dẫn thì các bạn xem lại series Hướng dẫn Facebook Chat Bot của mình nha.
Kĩ năng học được:
  • Hiểu về webhook, biết cách setup webhook
  • Biết message payload của Facebook webhook gồm những thành phần nào
  • Cách sử dụng RestAPI/ Facebook Graph API

Cấp độ khó

Nói là khó chứ cấp độ này cũng không quá khó đâu, chỉ có điều hơi nhiều chức năng và hơi rộng thôi.
Bạn phải hoàn thành những dự án nhỏ ở những cấp độ trước thì mới đủ khả năng hoàn thành những dự án này nhé. Đa phần các dự án này là dự án web, các bạn muốn dùng framework nào cũng được.

6. Ứng dụng ghi chú bản Web/Mobile

Mô tả: Đưa ứng dụng ghi chú của bạn lên Web/Mobile. Thêm một số tính năng như Login, cho phép người dùng chọn màu sắc, style của note.
Bạn có thể sử dụng framework gì tùy thích. Nếu làm bản mobile thì phía back-end sẽ tạo RestAPI cho mobile dùng nhé.
Kĩ năng học được:

7. App chat đơn giản realtime

Mô tả: Làm một chatroom đơn giản, ko cần đăng nhập, chỉ cần nhập username là có thể chat (Tương tự ví dụ mẫu này: Làm app chat đơn giản với Firebase)
Bạn có thể tìm hiểu về Firebase, socket.io của NodeJS hoặc SignalR của .NET
Kĩ năng học được:
  • Cách code ứng dụng realtime, dùng công nghệ hỗ trợ realtime.
Firebase dùng làm ứng dụng real-time khá là ok nha

8. Blog cá nhân

Mô tả: Tạo 1 blog cá nhân với 2 phần
  • Phần mặt tiền: hiển thị blog, paging, chia blog theo các category, comment blog
  • Phần admin: cho phép bạn tạo category, tạo bài viết, format dưới dạng HTML, sửa hoặc xóa bài viết.
Kĩ năng học được:
  • Cách thiết kế Database cho một blog
  • Cách lưu trữ hình ảnh (lưu file rồi đường dẫn xuống database nha), hiển thị hình ảnh
  • Cách làm web động và sử dụng WYSIWYG editor

9. Web bán hàng

Mô tả: Tạo một trang web bán hàng với 2 phần
  • Phần mặt tiền: Hiển thị sản phẩm theo category, tìm kiếm sản phẩm, mua hàng
  • Phần admin: Tạo category và sản phẩm, kiểm tra/thay đổi trạng thái đơn hàng.
Kĩ năng học được:
  • Cách thiết kế database cho một web bán hàng
  • Cách xử lý transaction trong Database
  • Thiết kế flow mua hàng/xử lý đơn hàng
Muốn sử dụng công nghê/ngôn ngữ gì cũng được nha

Tạm kết

Bạn có thể dùng những dự án này để luyện tập bất kì ngôn ngữ nào chứ không chỉ là  JavaScript nhé!
Đọc thì nhiều thế thôi chứ các bạn hoàn toàn có thể làm hết những dự án này trong khoảng 3-6 tuần, tùy vào ngộ tính và cần cù thôi.
Làm hết những thứ này, bạn sẽ đủ kiến thức và tự tin để đi phỏng vấn, xin việc ở những vị trí junior/fresher rồi. Chúc các bạn may mắn!
Ngoài ra, nếu có ý tưởng project nào nho nhỏ, thú vị, các bạn có thể comment bên dưới để mình bổ sung nha.

Thursday, July 19, 2018

Full-Stack Developer là gì? Có lợi ích gì cho sự nghiệp của bạn? (updated 2018)

Full-Stack Developer là người có khả năng làm cả Front-end lẫn Back-end của sản phẩm.
Nói chung, Full-Stack Developer thường chịu trách nhiệm thiết kế giao diện đến Database đằng sau cho đến khi sản phẩm vận hành trơn tru.
Đọc bài phỏng vấn của ITviec với anh Phạm Huy Hoàng, một Full-Stack Developer đang làm việc tại AlgoMerchant – công ty start-up ở Singapore chuyên cung cấp những công cụ hỗ trợ nhà đầu tư chứng khoán cá nhân mua bán chứng khoán, kiểm tra giá, v.v. để biết:
  • Công việc của một Full-Stack Developer
  • Lợi ích của việc làm Full-Stack Developer
  • Lời khuyên để bạn trở thành một Full-Stack Developer
Xem thêm việc làm Full Stack Developer trên ITviec

Tiểu sử: anh Phạm Huy Hoàng có thời gian làm việc tại FPT Software trước khi chuyển sang ASWIG Solutions với vị trí Developer ngôn ngữ C#.
Sau đó, anh theo học Thạc sĩ ngành Computer Science tại Đại học Lancaster (Vương Quốc Anh). Trong thời gian học, anh làm công việc Full-Stack Developer tại phòng IT của trường.
Sau khi tốt nghiệp vào tháng 8/2017, anh chuyển đến Singapore và làm việc cho Công ty AlgoMerchant cho đến nay.

Anh có thể mô tả công việc hằng ngày của một Full-Stack Developer?

Với công việc Full-Stack, cơ bản là bạn phải phụ trách cả Front-end lẫn Back-end của sản phẩm.
Nói chung, từ thiết kế giao diện đến Database đằng sau bạn đều phải chịu trách nhiệm cho đến khi sản phẩm vận hành trơn tru. Tuy nhiên, tùy theo mỗi công ty mà sẽ có một công việc cụ thể riêng.
Dự án anh làm cho Đại học Lancaster là một App dành cho sinh viên của trường tên là “I Love Lancaster”. App này sẽ tổng hợp toàn bộ tiện ích trong thời gian học tại trường cho sinh viên, chẳng hạn như xe buýt, thời khóa biểu… giúp các bạn học tập dễ dàng hơn.
Anh làm toàn bộ mọi việc từ nhận requirement của khách hàng là các phòng ban trong trường, thiết kế giao diện cho đến làm database đằng sau và mọi việc khác cho App chạy trơn tru.

Còn công việc mới của anh tại AlgoMerchant thì thế nào?

Tại AlgoMerchant, vị trí của anh là Senior Front-end Engineer, nhưng công việc vẫn mang tính Full-Stack như hồi xưa.
Công việc chính của anh là thảo luận với Product Manager để xác định requirement. Sau đó thảo luận với CTO để design kiến trúc cho dự án Auto Invest (Hệ thống tự động đặt lệnh mua/bán cổ phiếu dựa theo thuật toán).
Sau khi CTO review và duyệt thì anh sẽ đi từ front-end (design UX và flow) cho tới back-end (thiết kế database và viết các API cần thiết) của hệ thống.

loi-ich-full-stack-developer
Anh Hoàng đang làm việc tại Singapore.

Anh có gặp khó khăn gì khi chuyển sang làm Full-Stack trong môi trường “quốc tế” như vậy không?

Ban đầu khi mới làm tại đây, anh gặp khó khăn về khả năng giải thích. Ngày xưa ở Việt Nam giải thích bằng tiếng Việt đôi lúc khách hàng, đồng nghiệp còn không hiểu nên khi giải thích bằng Tiếng Anh lại càng khó hơn.
Thế là thay vì giải thích dài dòng, anh chia công việc ra làm và đưa khách hàng xem sau khi xong mỗi phần nhỏ. Lúc đó không cần giải thích nhiều người ta cũng hiểu mình muốn nói gì.
Chẳng hạn, anh làm trước một giao diện rồi đưa cho họ phản hồi sẽ dễ dàng hơn là chỉ nói miệng. Vả lại, mục đích giao tiếp là mình hiểu người đối diện muốn gì và ngược lại là tốt rồi, không nên nói quá nhiều.
Anh nghĩ đây là một kinh nghiệm rất hữu ích cho công việc full-time sau này vì không Developer nào không được việc cả. Vấn đề là mình có làm đúng như khách hàng muốn không và có giải thích được việc mình làm sẽ giúp ích được gì cho họ không.
Do đó, nếu dùng kĩ năng trên để giải quyết vấn đề này thì dù có bị rào cản ngôn ngữ, Developer cũng có cách vượt qua.
Việc làm Full Stack Developer tại TP HCM
Việc làm Full Stack Developer tại Hà Nội

Theo anh, Full-Stack giúp nâng cấp sự nghiệp của Developer như thế nào?

Việc làm Full-Stack này rất thú vị và anh nghĩ các Developer nên phấn đấu đạt được vị trí này vì:
  • Full Stack Developer dễ tìm được việc làm hơn do có skill set rộng.
Một Full-Stack Developer có thể chuyển sang làm Front-end Developer hoặc Back-end Developer hay làm về Database dễ dàng mà không tốn nhiều thời gian hay bị hụt kiến thức. Do đó, bạn không sợ bị thất nghiệp hay chán nghề.
Một điều nữa là các công ty Start-up và công ty nhỏ thường ưu tiên tuyển Full-Stack Developer hơn.
Ở giai đoạn đầu xây dựng sản phẩm, các công ty cần những Developer đa năng, có cái nhìn tổng thể về hệ thống. Khi sản phẩm bước vào giai đoạn hoàn thiện, phát triển thêm thì họ mới cần những người có kiến thức chuyên sâu.
  • Lương cao hơn so với các Developer khác.
Phần lớn các mẩu tin tuyển dụng có chữ “Full-Stack Web Developer” thì mức lương thường cao hơn “Web Developer” thuần với cùng cấp độ.
Chủ Blog Codeaholicguy, cũng là bạn anh, khi chuyển từ vị trí Java Senior Developer sang làm Senior Full-Stack Developer bên KMS Technology thì lương tăng khoảng 30%.
Anh ấy cũng có chia sẻ về vấn đề này tại bài viết “Giá trị của một Fullstack Developer“. Tuy nhiên, dù có theo hướng Full-Stack hay theo hướng chuyên sâu một lĩnh vực đều có thể đạt mức lương cao cả.
  • Dễ thăng tiến hơn
Bởi vì kiến thức Full-Stack giúp họ có cái nhìn tổng thể về hệ thống, rất cần thiết và được đánh giá cao nếu họ muốn phát triển lên thành Team Leader, Product Manager hay Software Architect.
Ngoài ra, do biết cả Front-end, Back-end, Design… nên họ trở thành cầu nối giữa các team với nhau, giúp giao tiếp giữa các team và các thành viên cùng team trở nên trôi chảy hơn. Điều này giúp Full-Stack Developer dễ trở thành key member trong team và dĩ nhiên dễ thăng tiến hơn.
Việc làm Senior Full Stack Developer

Những tố chất quan trọng nào để một Developer có thể đảm nhiệm vị trí Full-Stack?

3
Anh Hoàng tại trường Lancaster.
  • Ham học hỏi
Lượng kiến thức để làm Full-Stack nhiều gấp đôi, gấp ba kiến thức để làm Front-end và Back-end vì phải chịu trách nhiệm, nắm hết mọi thứ từ đầu tới cuối. Do đó, cần phải không ngừng cập nhật kiến thức mới mỗi ngày.
  • Có trách nhiệm
Full-Stack Developer  là người “đứng mũi chịu sào” cho cả một sản phẩm. Khi anh mới vào làm cho trường được 1 tháng thì chỉ được làm phần Front-end, sửa những App đã có sẵn thôi nhưng từ lúc làm Full-Stack Developer, Product Manager đã giao cho anh một ý tưởng.
Từ ý tưởng đó phải lập kế hoạch làm App đó từ đầu tới cuối, từ việc phải đi nói chuyện với khách hàng để lấy requirement, thiết kế giao diện, nhận phản hồi và thực hiện cho đến lúc nó chạy được. Do đó, tinh thần trách nhiệm trong công việc là cực kì cần thiết.
  • Năng động, giao tiếp tốt
Vì Full-Stack Developer phải cáng đáng nhiều việc, từng ngóc ngách của sản phẩm, làm việc với rất nhiều người gồm các Admin, khách hàng… nên nếu không giao tiếp tốt thì rất khó mà trụ được.
Nhiều người nghĩ rằng trong ngành lập trình chỉ cần tập trung phát triển khả năng Technical là đủ nhưng theo quan điểm của anh, điều đó chưa đủ để bạn trở thành một lập trình viên giỏi.
  • Developer còn cần kĩ năng giao tiếp, trình bày vấn đề, kĩ năng thuyết phục người khác (khi muốn thuyết phục quản lý tăng lương chẳng hạn) để làm việc trơn tru với team và các team khác.
Những kĩ năng này cũng rất cần thiết để thăng tiến đến các vị trí quản lý (Team lead, PM…) nữa.

Vậy để làm được tới vị trí Full-Stack này, các Junior Developer phải bắt đầu như thế nào?

Từ bất kì vị trí nào, bạn cũng có thể tiến lên làm Full-Stack Developer.
Nếu bạn là Front-end Developer thì có thể nghiên cứu thêm về Back-end và ngược lại. Sau đó nghiên cứu thêm về cơ sở hạ tầng, UI/UX.
Như anh ban đầu được tuyển vào phòng IT của trường là để làm Front-end. Tuy nhiên bên Back-end lại thiếu người nên anh tự đề cử mình đảm nhiệm luôn phần Back-end.
Sau đó, anh được cho đi giao tiếp với khách hàng, nhận requirement và từ đó làm Full-Stack Developer luôn.
Việc làm Back End Developer
Việc làm Front End Developer

Anh có từng mắc sai lầm gì trong công việc?

photo-3-18-16-11-50-50-am
Anh Hoàng (ngoài cùng bên trái) và bạn bè tại phòng IT trường Lancaster.
Lúc mới vào làm tại phòng IT của trường, do chưa hiểu rõ hệ thống lắm nên anh hay làm sai một số quy trình, thậm chí là hay làm những việc mà Developer không được phép làm nữa. 🙁
Khi bị khiển trách thì anh mới giải thích là “Vì không ai cấm.” Sau đó, PM mới nói lại rằng “Không cấm nhưng không có nghĩa là được phép làm.”
Thật ra vấn đề ở đây là anh rất ngại hỏi người khác, nhất là lại với người nước ngoài nữa nên càng ngại.
Lúc làm việc tại FPT Software, anh cũng từng mắc sai lầm này.
Ở vị trí Junior Developer, có rất nhiều điều anh còn chưa biết mà lại rất ngại hỏi các đàn anh và cứ thích tự tìm hiểu.
Lý do một phần là vì ngại, một phần là vì cái tôi cá nhân, sợ hỏi nhiều sẽ bị đánh giá. Khi nhận được requirement, anh bắt tay vào code theo ý mình luôn, dẫn đến việc thành phẩm làm ra không đúng như yêu cầu.
Từ đó, anh rút ra kinh nghiệm là mình phải hỏi đồng nghiệp, sếp càng nhiều càng tốt.
Để tiết kiệm thời gian cho người được hỏi, bạn nên chuẩn bị sẵn những điều muốn hỏi và tự tìm hiểu trước khi hỏi.
Ngoài ra, khi nhận được requirement không nên bắt tay vào làm ngay, mà phải xác định rõ ràng vấn đề với BA, PM trước.
Mẹo nhỏ là có thể tranh thủ lúc team cùng đi ăn nhậu để hỏi những điều muốn hỏi. Lúc này, do không phải tập trung làm việc nên không ai cảm thấy phiền khi bị hỏi đâu. 🙂

Anh có lời khuyên nào cho các bạn trẻ muốn trở thành Full-Stack Developer?

  • Full-Stack Developer là một công việc hay, thú vị nhưng không quá hay, quá thú vị như mọi người đồn đại và cũng đi kèm với nhiều áp lực , trách nhiệm. Do đó, bạn phải xác định là mình yêu thích, muốn làm thì mới theo được.
Vì nếu chỉ làm Front-end hay Back-end Developer thôi là đã phải cập nhật khối lượng kiến thức không nhỏ rồi, làm Full-Stack Developer còn phải nhân số đó lên 2, lên 3. Đừng vì ham lương cao mà chọn sai.
  • Rèn tiếng Anh thật tốt.
Developer ở Việt Nam chưa giỏi Tiếng Anh lắm. Nếu muốn học tập nhiều về công nghệ mới thì học bằng tiếng Việt thôi chưa đủ, còn phải đọc tài liệu bằng tiếng Anh nữa.
Thật ra, tiếng Anh dành cho Developer không hề “nặng”. Bạn chỉ cần đọc hiểu các hướng dẫn với các từ chuyên ngành bằng tiếng Anh là đủ rồi!
Do đó, theo anh, cách tốt nhất để các bạn rèn luyện là chăm đọc hướng dẫn, tài liệu bằng tiếng Anh và ghi nhớ những từ chuyên ngành nhiều vào là được.
  • Các bạn đừng nên làm ở công ty Outsourcing quá lâu.
Khi code cho Outsourcing, bạn sẽ nhận requirement rất rõ ràng và cứ code xong module là xong.
Khi bạn code cho công ty Product, bạn sẽ được thảo luận với nhóm để tìm ra requirement, bạn sẽ phải giao tiếp với rất nhiều người như Lead hoặc Product Manager. Nhờ đó, bạn sẽ rèn luyện được kỹ năng phân tích vấn đề và kỹ năng giao tiếp – vốn là những kỹ năng quan trọng để bạn bước lên những vị trí cao hơn.

Anh có thể chia sẻ vài resource hữu ích cho các bạn Developer muốn trở thành Full-Stack Developer?

Tiếp theo, các bạn có thể lên Codeacademy hoặc Freecodecamp để làm các Tutorial và bài tập.
Để chuyên sâu hơn về Front-end, các bạn có thể đọc JavaScript: The good part, Professional JavaScript for Web Developers.
Ngoài ra, bạn lên Medium để tham khảo các bài viết về UX.
Bạn nào chọn C# làm ngôn ngữ Back-end thì nên đọc C# In Depth và 2 khóa C# Design Strategies, C# Best Practices: Improving on the Basics trên pluralsight.
Cám ơn anh Hoàng về những chia sẻ bổ ích. Chúc anh luôn thành công trong công việc và học tập.

Friday, May 18, 2018

Phỏng vấn Dương - học viên cũ của Techmaster tại Nhật

Chào Dương, bạn có thể chia sẻ với độc giả về cuộc sống và công việc của mình tại Nhật như thế nào?
Chào các bạn độc giả TechMaster. Về cuộc sống tại Nhật cũng có nhiều điểm khá thú vị. Giờ giấc làm việc thường do nhân viện tự chọn, tùy theo công ty mà khác nhau. Như công ty của mình đang làm việc thì có 3 khung giờ làm việc là 9h, 9h30 và 10h, thời gian nghỉ trưa là 1 tiếng và ngày làm 8 tiếng.
Ở bên Nhật thì chủ yếu đi làm vẫn là tàu điện, đi lại khá là tiện lợi thời gian tàu kế tiếp nhau thường là 3-5 phút một chuyến. Nếu ra khỏi nhà đúng giờ thì không bao giờ sợ đi làm muộn. Thỉnh thoảng có thể có sự cố nên sẽ chậm nhưng không thường xuyên.
Thường thì cứ hết giờ làm việc là có thể về nhà, người Nhật cũng vậy nên mình cũng không cần ngại việc về sớm. Nhưng nếu còn việc hoặc được yêu cầu làm thêm thì có thể sẽ về muộn. Làm thêm bên này sẽ được tính lương riêng nên cũng thoải mái. Lúc mình mới sang công việc chưa có nhiều thì sáng 9h mình đến công ty và 6h30 là bắt đầu về nhà.
Theo quy định bên Nhật thì thứ 7 được nghỉ, nhưng đôi khi dự án cần gấp thì bên công ty sẽ ngỏ lời nhờ mình đi làm thêm vào thứ 7 hoặc chủ nhật, việc này không bắt buộc nên tùy theo cá nhân mà có thể đi hay không. Đi làm được tính lương OT như bình thường. Hiện tại thì tuần nào mình cũng làm thêm thứ 7, đi làm theo giờ mình chọn vẫn được tính lương. Cái này tùy thuộc theo công ty.
Học lập trình trực tuyến tại TechMaster
Dương trong thời gian ở Nhật
Người Việt Nam thường có thói quen ngủ trưa? Khi làm việc ở Nhật thì bạn có gặp khó khăn gì không?
Bên Nhật thì họ cũng có người nằm ngủ ở bàn làm việc, hoặc họ ra phòng ăn ngồi nghỉ, vì họ làm việc từ sáng đến khá muộn thường là 10-11h tối nên mệt mỏi là khó tránh khỏi. Cũng tùy theo công ty, đối với công ty mình làm việc thì khá thoải mái về vấn đề này, khi mệt quá thì mình vẫn có thể ngủ 1 lúc ở bàn vào giờ nghỉ trưa.
Thời gian di chuyển từ nhà đến công ty của bạn mất khoảng bao nhiêu phút ?
Cái này thì phụ thuộc vào nhà ở mà mình thuê có cách xa so với công ty hay không và khoảng cách từ nhà đến ga tàu điện. Mình có thể đề nghị với công ty nếu nhà xa thì có thể xin giờ làm việc muộn. Với mình thì lúc đầu mình đi làm mất khoảng 35 phút tàu điện nên phải dậy từ 8h sáng để chuẩn bị đi làm.
Theo quan sát của bạn thì làm việc với đồng nghiệp Nhật, công ty Nhật có gì khác với Việt Nam? Phương pháp, quy trình quản lý dự án ở công ty Nhật là gì? (Water Fall, Scrum, Agile, Kanban…?)
Môi trường làm việc ở đây rất thân thiện, chuyên nghiệp. Nhân viên Việt Nam cũng như nước khác đều được đối xử bình đẳng và được tôn trọng. Mỗi ngày mình đều viết báo cáo cho Project Manager để thông báo hôm nay đã làm được những gì.
Tùy từng dự án mà có cách quản lý khác nhau. Nhưng hiện tại đa số mình thấy đều làm theo phương pháp iterative. Một điểm khá thú vị là người Nhật rất thích dùng Excel để quản lý tình trạng dự án và SVN để quản lý mã nguồn.
Liệu mức lương cho lập trình viên tại Nhật nói chung có tốt hơn so với khi làm việc tại Việt Nam? Bài học gì hay nhất Dương học được từ người Nhật, công ty phần mềm Nhật?
Về mức lương thì còn tùy theo hợp đồng ký kết của người lao động với công ty mà khác nhau. Đương nhiên là mức lương sẽ cao hơn so với ở Việt Nam.
Nhưng mình thấy điều hay nhất mà mình học được đến lúc này là sự chuyên nghiệp trong công việc, và sự chịu khó của họ cùng với sự tỉ mỉ trong từng bước.
Theo bạn thì việc học tiếng Nhật đối với lập trình Việt Nam như thế nào?
Tiếng Nhật để làm việc thì khó theo mình là như vậy, không phải chỉ là nói chuyện bình thường mà còn cả nói từ chuyên nghành nên nếu không có kinh nghiệm cũng như học bài bản thì sẽ hơi khó khăn trong giao tiếp.
Mình thì có BrSE đi cùng nên đều được phiên dịch ra và làm theo nên không khó khăn lắm. Còn tiếng Anh thì mình thấy người Nhật rất ít người biết nên tiếng Anh cũng không giúp ích được nhiều, cũng tùy từng công ty.
Học lập trình online tại TechMaster
Dương trong một buổi đi dã ngoại.
Ngoài giờ làm việc ở công ty, Dương có tham gia hoạt động ngoại khoá gì khác?
Ngoài giờ làm việc thì hầu như là không còn thời gian để hoạt động ngoại khóa. Làm việc liên tục nên nhiều khi về nhà chỉ muốn ngủ. Nhưng bên này di chuyển chủ yếu là đi bộ nên cũng không oải người lắm. Cuối tuần có thể đi chơi các nơi, buổi sáng có thể đi chạy. Còn với các môn thể thao thì mình không tìm hiểu kĩ nên cũng chưa biết dõ.
Cuộc sống khi xa gia đình có gì khó khăn? Một vài kinh nghiệm sống Dương thu được khi làm việc ở Nhật?
Xa gia đình thì sẽ rất nhớ nên lúc đầu sẽ buồn chán, nhưng dần sẽ quen. Kinh nghiệm sống mình thu được ở Nhật Bản là khả năng tự lập, khả năng kiềm chế cảm xúc tốt hơn, làm quen môi trường mới, chi tiêu hợp lý, cái này khá quan trọng vì ở bên này rất có thể sẽ tiêu hoang :) v.v...
Dương có thể chia sẻ về quá trình học lập trình iOS của mình tại TechMaster? 
Lúc mới bắt đầu muốn học lập trình iOS thì mình có tìm hiểu ở một số trung tâm cũng như học viện, trong quá trình tìm kiếm thì mình thấy Techmaster là nơi có nhiều sự quan tâm, mình search google thì toàn thấy Techmaster :).
Vì vậy mình đã chọn Techmaster để bắt đầu học lập trình iOS, lúc đó mình đã lập trình Android nên học iOS tuy là nhiều thứ mới nhưng với các bài giảng của trung tâm cũng như sự hướng dẫn nhiệt tình của giảng viên nên cũng không có nhiều khó khăn đối với mình.
Ở đây mình được giảng giải rất nhiều về sự quan trọng của tinh thần làm việc, sự nghiêm túc, tỉ mỉ và tìm tòi cái mới những điều này giúp mình khá nhiều trong công việc.
Được biết hiện giờ ngoài iOS, Dương còn lập trình cả PHP. Vậy Dương có lời khuyên gì cho các bạn lập trình viên mới? Liệu có chỉ nên lập trình trên một công nghệ duy nhất?
Theo mình thì ở một công ty công nghệ lớn, sự đòi hỏi khá cao vậy nên một lập trình viên biết nhiều ngôn ngữ lập trình thì sẽ dành được nhiều sự quan tâm hơn, mình thấy khi đã có tư duy code rồi thì dù có ngôn ngữ nào thì cũng có thể lập trình được. Biết nhiều ngôn ngữ lập trình thì sẽ có nhiều cơ hội việc làm tốt hơn.
Cảm ơn Dương đã tham gia phỏng vấn. Chúc bạn nhiều sức khỏe và thành công trong cuộc sống.
Cảm ơn TechMaster

Cảm xúc của một Startup

Link nguyên gốc tại đây
Đây là bài chia sẻ về chú Thắng, học iOS Objective-C tại Techmaster chắc là sau khi nhận giải Nhân Tài Đất Việt cùng team của chú ý cho sản phẩm Money Lover.
Đã lâu lắm rồi, hôm nay uống ít rượu mới có cảm xúc viết note mà share cho mọi người.
Từ hồi rời công ty cũ mà cũng là công ty đầu tiên mình làm, đã được gần 1 năm rồi cảm xúc biến mất hẳn mà hôm nay nó mới ngoi ngóp bò lên được nên tận dụng viết nhanh cái note.
Điều đầu tiên là mình hơi thất vọng về khả năng ăn nói, nên đôi khi muốn, rất muốn truyền lửa cho lớp đàn em mà không làm được. Nên có lẽ là từ giờ phải tập nói nhiều, viết bài thảo luận nhiều hơn. Từ giờ, mỗi tháng mình sẽ viết ít nhất 1 bài về iOS (objective C), anh chị em nào thấy có chất lượng thì tham gia comment cho vui ^^.
Điều thứ 2 là ngày trước khi gắn bó với công ty cũ, mình cũng có lúc rất tủi thân vì chỉ là công nhân xếp chữ đạt chứng chỉ CC&P (Copy, Cut and Paste)  hay chụp màn hình. Nhưng giờ khi ra ngoài làm mình thấy chẳng có quãng thời gian nào vô ích cả. Mình học được code convention, design pattern... mà giờ thấy khả năng khác hẳn thời sinh viên. Bây giờ nhìn mấy chú sinh viên đang thực tập, bất kể BK hay CN code mà chỉ muốn nói cho một bài. Nhưng đôi khi cũng thông cảm vì cũng phải trải qua quãng thời gian đó :)).
Điều thứ 3 là yêu cái nghề coder. Ngày trước cứ nghĩ mục tiêu là phấn đấu lên Team Leader hay Project Manager gì đó để không phải code, chả nhẽ đến năm 30 tuổi mà vẫn ngồi code. Nhưng giờ thấy được nhiều tấm gương từ các PM ở cty cũ, hay anh Trịnh Minh Cường ở TechMaster, mình nghĩ là mình sẽ code đến khi bỏ nghề IT.
Điều thứ 4 là mình yêu startup hiện tại của mình, mình sẵn sàng làm việc không công cho nó, chỉ có mong ước là nó sẽ phát triển, đến ngày nào đó sẽ mang lại tiền, rất nhiều tiền cho mình, vì chung quy lao động là phải lấy tiền làm mục tiêu phấn đấu (cái này tuỳ người). Hôm nay nhân tiện phiên bản MoneyLover của android lên chợ, và 1 tháng sau đó sẽ là iOS mình quảng cáo tí :">.
Và điều cuối cùng, xin lỗi anh chỉ tốt nghiệp Viện Đại học Mở Hà Nội :)).

Lập trình viên nên biết cân bằng giữa công việc và cuộc sống - Phỏng vấn Nguyễn Thành Đạt

Cùng đọc bài phỏng vấn của TechMaster với bạn Nguyễn Thành Đạt, hiện đang là một lập trình viên iOS tại công ty phần mềm Atlassian; để nghe Đạt chia sẻ về:
  • Cơ duyên nào mà Đạt lại gắn bó với công nghệ lập trình iOS
  • Tầm quan trọng của các dự án thực tế đối với học viên iOS tại TechMaster
  • Giới thiệu về văn hóa của các công ty mà Đạt đã và đang làm việc như VNG và Atlassian
  • Ngôn ngữ lập trình mà các công ty phát triển ứng dụng iOS hiện đang sử dụng nhiều
  • Những bí quyết để cân bằng giữa công việc và cuộc sống của một lập trình viên
Học lập trình iOS bằng ngôn ngữ lập trình nào
 Đạt tham gia cuộc thi chạy 70km đường núi tại Sapa trong 14h
Chào Thành Đạt, bạn có thể giới thiệu với độc giả đôi chút về bản thân?
Chào các bạn độc giả, mình tên là Nguyễn Thành Đat, học viên lớp iOS khoá 4 tại TechMaster, từng làm lập trình viên tại TechMaster trong khoảng thời gian 2 năm. Cho tới nay mình đã gắn bó với công nghệ iOS được gần 4 năm, và hiện tại đang làm cho Atlassian, một công ty phần mềm của Úc. Mình đã lập gia đình và đang nuôi một chú mèo Xiêm Thái tên là Mốc (câu này vợ mình yêu cầu thêm vào ^^).
Hiện tại Đạt đang là một lập trình viên iOS. Bạn có thể chia sẻ với độc giả cơ duyên nào bạn lại gắn bó với công nghệ này?
Việc trở thành một lập trình viên iOS đến với mình một cách rất tự nhiên. Đó là một kỳ nghỉ hè của mình tại NIIT, trong thời gian rảnh rỗi mình quyết định đi tìm khoá học lập trình để “nâng cao tay nghề”. Sau một thời gian tìm kiếm thì thấy khoá học lập trình iOS của TechMaster là ưng ý nhất bởi vì trang web được thiết kế đơn giản với đầy đủ các thông tin về khoá học (học phí, lịch từng buổi, thiết bị, các bài tập của khoá trước) khiến mình có cảm giác tin tưởng về chất lượng và quyết định theo học. Sau khoá học, mình thấy còn nhiều điều muốn học hỏi thêm và nhận ra cách học tốt nhất là được làm việc, nên mình quyết định nghỉ học tại NIIT để làm lập trình viên iOS tại TechMaster. Vậy là tới nay mình đã gắn bó với iOS được gần 4 năm và thấy quyết định này rất đúng đắn.
Sau khi hoàn thành khóa học với kết quả xuất sắc Đạt đã được mời ở lại làm việc tại TechMaster. Công việc lúc đó của bạn là làm những dự án cho đối tượng khách hàng nào? Theo bạn thì những dự án thực tế đó giúp ích ra sao cho những học viên và thực tập sinh cũng như nhân viên của TechMaster?
Khi làm việc tại TechMaster, mình chủ yếu làm các dự án cho khách hàng Mỹ và Châu Âu. Một số dự án như: ứng dụng đọc sách (E-Pub, Pdf, audio book), ứng dụng kết nối với hệ điều hành Windows để đọc file, ứng dụng mô phỏng bất động sản… Theo mình những dự án này giúp cho mình có kinh nghiệm làm việc thực tế để tạo nên một sản phẩm hoàn chỉnh đáp ứng được nhu cầu của khách hàng. Việc tiếp xúc với nhiều dự án đa dạng giúp mình có kiến thức rộng ở nhiều mảng khác nhau của lập trình iOS. Đây cũng là cơ hội tốt để các học viên, nhân viên của TechMaster rèn luyện kỹ năng làm việc nhóm, trao đổi với khách hàng.
Sau khi nghỉ việc ở TechMaster thì bạn chuyển qua VNG và gần đây nhất là Atlassian. Đạt có thể giới thiệu ngắn gọn về nét văn hóa của các công ty này tới các học viên cũng như các sinh viên đang trong quá trình tìm việc?
Khi làm tại VNG mình làm ở bộ phận chuyên phát triển về mobile. VNG được biết đến là một trong những công ty có sản phẩm mobile tốt nhất ở Việt Nam như Zalo, Zing mp3, Laban key,... Môi trường làm việc ở VNG rất trẻ, năng động cùng với chính sách phúc lợi cho nhân viên rất tốt. Công ty cũng tạo cơ hội cho nhân viên thử nghiệm những ý tưởng mới. Nếu như ở TechMaster mình được làm nhiều dự án, nhiều công nghệ khác nhau thì ở VNG mình tập trung làm một sản phẩm lớn trong thời gian dài, nên từ đó học được kỹ năng tối ưu hoá và cách thức xây dựng một sản phẩm dễ bảo trì và phát triển sau này. Đồng thời, mình làm quen với việc lắng nghe phản hồi, phân tích hành vi của người dùng để tiếp tục hoàn thiện sản phẩm.
Atlassian là công ty phần mềm hàng đầu của Úc, nổi tiếng với những sản phẩm như JIRA, Confluence, Bitbucket, v.v... được dùng bởi các công ty và tổ chức lớn như Apple, NASA,... Điều mình ấn tượng nhất là văn hoá mở của Atlassian. Công ty có nhân viên đến từ nhiều quốc gia, kinh nghiệm rất đa dạng và mọi người đều sẵn sàng chia sẻ kiến thức nên mình dễ dàng học hỏi nhiều điều mới. Trải nghiệm mới nhất của mình là được tham gia ShipIt 33 - chương trình hackathon hàng quý của Atlassian. Trong vòng 24h, mỗi nhóm cần đưa ra một vấn đề liên quan đến các sản phẩm hiện tại và đưa ra ý tưởng để giải quyết vấn đề đó. Rất vui là nhóm mình đã đạt giải Founder Prize trong lần Shipit 33 này với ý tưởng về một add-in cho JIRA.
Học lập trình iOS trực tuyến xin việc làm
Đạt cùng với Atlassian JIRA Team (đứng thứ 2 từ trái sang)
Đạt là người có kinh nghiệm làm lập trình viên iOS tại nhiều công ty khác nhau. Theo quan sát của bạn thì hiện nay các công ty thường sử dụng ngôn ngữ Objective-C hay Swift để phát triển sản phẩm? Nếu một bạn trẻ bây giờ mới bắt đầu học lập trình iOS thì theo Đạt họ nên chọn ngôn ngữ nào?
Theo mình thấy các project phát triển sản phẩm mới hầu hết sẽ chuyển sang sử dụng Swift, chỉ có một số công ty đang phát triển sản phẩm đã có sẵn thì vẫn giữ Objective-C. Đặc biệt trong thời gian gần đây ngôn ngữ Swift được Apple liên tục phát triển tính năng mới và tối ưu hơn. Hiện tại, Swift 2.1 đã stable hơn trước rất nhiều.
Tài liệu học và ví dụ về Swift có đầy đủ trên mạng, cộng động sử dụng Swift lớn, ngoài ra bạn có thể sử dụng đồng thời Swift và Objective-C trong cùng một project. Hơn nữa, biết lập trình Swift cũng đang là một trong những tiêu chí được ưu tiên trong tuyển dụng lập trình viên iOS. Với những lợi thế của Swift mà mình đã kể ở trên thì không có lý do gì để những bạn mới bắt đầu lập trình iOS hay cả những bạn làm lâu năm không bắt đầu chuyển sang Swift ngay từ bây giờ.
Được biết trong thời gian rảnh rỗi Đạt cũng hay tham gia các hoạt động như chơi bóng đá nghệ thuật, đi phượt, chạy marathon, leo núi. Theo bạn thì những hoạt động thể thao này liệu có đem lại lợi ích cho những người làm nghề phát triển phần mềm?
Làm lập trình viên đồng nghĩa với việc ngồi hàng giờ liền trước máy tính nên việc chơi thể thao, đi phượt giúp mình rèn luyện sức khoẻ để đáp ứng được áp lực công việc, thoải mái đầu óc, tinh thần. Tập luyện một môn thể thao trong thời gian dài giúp mình hiểu được cách để phát triển một kỹ năng, vượt qua giới hạn của bản thân từ đó xây dựng sự tự tin. Ngoài ra, những hoạt động này giúp mình có thêm nhiều người bạn, dễ hoà nhập khi sống ở một thành phố mới như Sài Gòn và sắp tới là Sydney.
Nếu một bạn trẻ đang muốn theo đuổi con đường trở thành lập trình viên iOS thì theo Đạt ngoài kỹ năng chuyên môn ra họ nên cần trang bị thêm những kỹ năng gì?
Theo mình nghĩ, ngoài kỹ năng chuyên môn các bạn nên trau dồi tiếng Anh để phục vụ cho việc nghiên cứu và có thể có cơ hội làm việc với khách hàng quốc tế hoặc các công ty nước ngoài. Ngoài ra, như mình đã chia sẻ ở trên thì việc chơi thể thao giúp mình cân bằng cuộc sống và cũng giúp mình tạo những mối quan hệ trong cộng đồng. Nên các bạn có thể suy nghĩ lựa chọn một môn thể thao để rèn luyện, sẽ tiện cả đôi đường :D.
Cảm ơn Đạt đã tham gia phỏng vấn và cung cấp rất nhiều thông tin bổ ích cho độc giả của TechMaster. Chúc bạn nhiều sức khỏe và thành công trong các kế hoạch sắp tới.
Cảm ơn TechMaster.
Bạn là người đam mê lập trình và đang muốn theo đuổi công nghệ lập trình iOS? Bạn đang tìm kiếm một trung tâm lập trình chất lượng mà có thể học từ xa qua mạng? Hay bạn đang băn khoăn không biết nên học ngôn ngữ lập trình nào để dễ xin được việc làm? Hãy chia sẻ ý kiến trong phần bình luận phía dưới nhé!

Những kinh nghiệm về du học và làm việc tại các công ty phần mềm ở Đức - Phỏng vấn bạn Hồng Thái

Cùng đọc bài phỏng vấn của TechMaster với bạn Nguyễn Hồng Thái, hiện đang là một lập trình viên iOS tại công ty phần mềm H&R Media ở Đức; để nghe Thái chia sẻ về:
  • Cơ duyên nào mà Thái lại gắn bó với công nghệ lập trình iOS
  • Những kỷ niệm khi Thái tham gia khóa học lập trình iOS cấp tốc tại TechMaster
  • Những kinh nghiệm khi phỏng vấn xin việc làm tại công ty phần mềm ở Đức
  • So sánh về cách nghĩ và văn hóa làm việc giữa lập trình viên Việt Nam và đồng nghiệp Đức
  • Những kinh nghiệm đi du học, làm việc và định cư lâu dài tại Đức
Chào Hồng Thái, bạn có thể giới thiệu với độc giả đôi chút về bản thân?
Lập trình viên iOS Nguyễn Hồng Thái
Nguyễn Hồng Thái
Chào các bạn độc giả TechMaster, mình tên là Nguyễn Hồng Thái, tốt nghiệp ngành Khoa học Máy tính trường đại học Uni Düsseldorf ở Đức năm 2015.
Trước khi đi du học mình có học ngành Địa Chất tại trường đại học Mỏ Địa Chất. Vì gia đình có người thân ở Đức và cảm thấy việc học ở trường Mỏ không đem lại kết quả như mong muốn nên mình quyết định đi du học Đức. Mình hiện đã học xong và đang làm lập trình iOS cho một công ty của Đức. Công ty mình tự phát triển các sản phẩm riêng để đưa lên Store ví dụ như app Vigo chat là một trong số những ứng dụng đó.
Hiện tại Thái đang là một lập trình viên iOS. Bạn có thể chia sẻ với độc giả cơ duyên nào bạn lại gắn bó với công nghệ này?
Mình chọn lập trình iOS vì khi còn học ở trường đại học mình có làm chung một dự án với các bạn sinh viên khác. Dự án đấy là mở rộng và thêm một số tính năng cho một ứng dụng đã có sẵn, đó là luận văn tốt nghiệp thạc sĩ của một sinh viên đi trước. Nhóm mình được chia làm 3 team đảm nhiệm các công việc khác nhau gồm back-end, client (iOS) và thu thập dữ liệu. Vì đây là ứng dụng về chỉ đường nên cần các số liệu như về các quán ăn nhà hàng, vị trí của các địa điểm đặc biệt. Mình chọn vào team làm client vì lúc đó đang có sẵn iPhone và Mac. Trong quá trình làm dự án đó mình thấy nền tảng iOS khá hấp dẫn nên đã quyết định đi theo con đường này.
Sau khi hoàn thành dự án, vào năm 2013 mình quyết định tạm dừng việc học ở Đức để về Việt Nam tranh thủ thăm gia đình trong khoảng thời gian 3 tháng, trong kỳ nghỉ phép đó mình cũng có ý định xin đi thực tập ở một công ty nào đó để nâng cao khả năng lập trình iOS, vì mình nghĩ người Việt dạy người Việt sẽ nhanh hơn.
Lúc đó mình có tìm hiểu trên mạng và biết đến TechMaster, thấy trung tâm nhận được rất nhiều ý kiến đánh giá tích cực. Khi liên hệ với trung tâm để xin học thì mình có trình bày hoàn cảnh là muốn hoàn thành khóa học càng sớm càng tốt trong thời gian chỉ 3 tháng. Các giảng viên TechMaster đã nhiệt tình tư vấn và tạo điều kiện cho mình tham gia học một khóa cấp tốc, cuối cùng mình cũng đã kịp hoàn thành khóa học và quay trở lại Đức để đi xin việc làm.
Được biết hồi học tại TechMaster bạn đã tham gia một khóa cấp tốc, một tuần học 2 lớp để học đuổi các kiến thức trong một thời gian bằng 1/3 các học viên khác. Bạn có thể chia sẻ lại trải nghiệm này của mình?
Như đã nói ở trên, vì thời gian nghỉ phép rất ít nên mình phải học 2 khoá lập trình iOS 12 và iOS 14 đồng thời để có thể hoàn thành trọn vẹn khoá học trước khi quay lại Đức. Khi mới bắt đầu học mình cũng gặp một số khó khăn vì các bạn ở khóa lập trình iOS 12 đã đi đước một nửa chặng đường rồi, nhưng với quyết tâm nỗ lực cùng sự hỗ trợ nhiệt tình của các giảng viên TechMaster, mình cũng đã theo kịp các bạn và tiếp thu tốt nội dung khóa học.
Lúc đó mình học 4 buổi/tuần, ngoài ra buổi sáng và buổi chiều mình đến TechMaster để thực hành những kiến thức đã học được. Trong quá trình thực hành có 2 anh là Thanh Đào và Thanh Nga đã giúp đỡ mình rất nhiều. Nói chung không khí mọi người học và thực tập tại trung tâm rất nghiêm túc.
Kỉ niệm nhớ nhất ở TechMaster là nếu ai làm bài tập tốt thì sẽ được thưởng 50k để khích lệ tinh thần. Số tiền tuy nhỏ chưa đủ 2 bát phở nhưng nó tạo cảm giác được khích lệ cho người học cố gắng, đúng là tuổi nào người ta cũng thích được “phiếu bé ngoan" (cười). Sau này đi làm mình mới thấy những bài học ở TechMaster đúng là có tính thực tiễn rất cao và đã giúp ích cho mình rất nhiều trong quá trình làm việc hiện nay.
Sau khi hoàn thành khóa học lập trình iOS tại TechMaster, Thái quay trở lại Đức vừa học tập và làm việc. Được biết từ đó đến nay bạn đã chuyển qua 3 công ty phần mềm khác nhau, vậy bạn có thể chia sẻ về trải nghiệm khi phỏng vấn xin việc vào công ty Đức?
Mình chưa phỏng vấn ở công ty Việt Nam bao giờ nên cũng không rõ quá trình phỏng vấn ở Việt Nam như thế nào, nhưng ở bên Đức thì quy trình phỏng vấn thường có 3 vòng. Vòng đầu tiên là xét duyệt hồ sơ, nếu hồ sơ của bạn được xét duyệt thì sẽ đến vòng phỏng vấn về kĩ năng lập trình hoặc sẽ được mời đến công ty làm thử trong 2 ngày và họ sẽ review code của bạn.
Vòng phỏng vấn kĩ năng thì họ thường hỏi một số câu về lập trình iOS như Thread, ARC; còn nếu bạn được mời làm thử thì sẽ được giao làm một dự án nhỏ. Đối với các bạn đã có khoảng một năm kinh nghiệm lập trình iOS thì có lẽ sẽ không gặp vấn đề gì khó khăn cả. Sau khi vượt qua vòng phỏng vấn kỹ năng sẽ đến vòng cuối cùng là thỏa thuận lương, người ta sẽ hỏi bạn một số câu về cuộc sống cũng như mức lương mà bạn mong muốn.
Nhà tuyển dụng bên Đức ngoài việc xem xét những kĩ năng chuyên môn của bạn, họ còn xem liệu bạn có phù hợp và hoà nhập được vào team hay không. Nếu tính cách của bạn có phần lập dị và không hòa đồng với team thì cũng chưa chắc được tuyển dù trình độ của bạn có giỏi đến mấy.
Bản thân mình đã chứng kiến nhiều người đến xin làm, mặc dù kỹ năng của họ rất tốt nhưng do tính cách họ ít nói, hoặc không cởi mở nên đã bị loại. Nếu bạn có cơ hội xin việc ở Đức thì hãy thể hiện mình là người hoà đồng chịu khó tiếp thu, sẵn sàng chấp nhận thử thách, đừng quá rụt rè và thụ động.
Lập trình viên iOS Nguyễn Hồng Thái
Từng có cơ hội học tập và làm việc tại cả ở Việt Nam và Đức, vậy bạn có thể so sánh một chút về cách nghĩ và văn hóa làm việc giữa lập trình viên Việt Nam và đồng nghiệp Đức?
Thực ra mình chưa có thời gian làm việc ở Việt Nam, nhưng mình nghĩ ở Việt Nam chủ yếu làm gia công còn ở Đức làm sản phẩm nên lối tư duy sẽ khác nhau rất nhiều. Người Đức làm việc rất có kỷ luật và đúng giờ, ra vào đều quẹt thẻ nên ngày nào mà làm không đủ 8 tiếng thì họ phải có kế hoạch làm bù vào ngày hôm sau. Trong giờ làm có thể cũng có giải trí nhưng khi đã làm việc thì họ rất nghiêm túc, những sản phẩm trước khi bàn giao cho khách hàng thường được họ kiểm tra rất cẩn thận và kỹ lưỡng.
Mình không biết ở Việt Nam ra sao nhưng bên này họp nhóm meeting rất nhiều và mình thấy khá tốn thời gian. Thời gian họp hành đó cũng được tính vào thời gian làm ứng dụng, nên chi phí làm app ở Đức cũng khá cao. Theo đánh giá của mình thì khả năng lập trình của người Đức cũng chỉ tương đương với người Việt. Lập trình viên Việt Nam có nền tảng tư duy toán học khá tốt từ khi học ở trường nên nếu chăm chỉ hoàn toàn có khả năng vượt lên trên đồng nghiệp Đức. Nhưng về vấn đề làm việc cẩn thận và nghiêm túc thì người Việt mình cần phải học hỏi ở họ rất nhiều.
Người ta thường có câu nói đùa rằng "tiếng Pháp thì líu lo như chim hót, còn tiếng Đức khi nói lên thì giống đang cãi nhau", bạn thấy câu nói đùa này có bao nhiêu % sự thật ở trong đó? Thái có thể chia sẻ về kinh nghiệm học tiếng Đức của mình?
Tiếng Đức nói chung là khó nghe, khó học vì cấu trúc ngữ pháp của nó rất khác tiếng Anh. Lúc mới học mình cũng thấy kỹ năng nghe rất khó, nhưng nếu bạn chịu khó nghe nhiều thì sẽ quen. Mình cũng không có nhiều kinh nghiệm trong vấn đề học tiếng Đức, việc học ngoại ngữ nói chung không thể giỏi một sớm một chiều được, mà bạn cần phải kiên trì học hỏi mỗi ngày. Cũng giống việc học các ngoại ngữ khác như tiếng Anh, tiếng Pháp; bạn nên tìm cơ hội thường xuyên giao tiếp với người bản địa thì sẽ nhanh tiến bộ hơn.
Ngoài con đường du học ở Đức rồi ở lại định cư và làm việc lâu dài như Thái, thì liệu còn có con đường nào khác cho một lập trình viên Việt Nam muốn sang Đức làm việc? Họ cần phải có những điều kiện và kỹ năng gì?
Theo như mình tìm hiểu, ngoài con đường du học rồi ở lại làm việc thì các bạn có thể sang Đức theo diện học nghề, nhưng cách làm này rất khó vì phần lớn các công ty Đức đều đã tuyển đủ chỉ tiêu dạy nghề trong công ty rồi, sau khi người ta học nghề xong thì thường ở lại làm luôn cho công ty đó. Còn việc mời một người ở một nước ngoài Châu Âu vào làm cũng hết sức phức tạp. Người đó phải có bằng cấp được các nước Châu Âu công nhận hoặc ngành nghề công ty muốn tuyển dụng phải chứng minh với Sở Lao Động là không tuyển được người có khả năng chuyên môn cho vị trí nào đó mới được mời người ở ngoài Châu Âu vào làm việc.
Đối với những bạn có ý định sang Châu Âu làm việc và định cư thì mình khuyên bạn nên đi du học một vài năm. Trong quá trình học bạn vừa có cơ hội trau dồi khả năng ngoại ngữ vừa có thể làm việc như một lập trình viên parttime ở một công ty của Đức với mức lương khá cao từ 15-20 euro/giờ so với mức lương làm các công việc khác như McDonald’s là 8,5 euro/giờ.  Nếu bạn nào đã sang Đức và chưa biết cách thức xin việc ra sao hoặc có điều gì cần hỏi thì có thể liên hệ với mình qua địa chỉ email nguyenhongthai1988@gmail.com, mình sẽ trả lời và tư vấn trong khả năng có thể.
Cảm ơn Thái đã tham gia phỏng vấn và cung cấp rất nhiều thông tin bổ ích cho độc giả của TechMaster. Chúc bạn nhiều sức khỏe và thành công trong cuộc sống.
Cảm ơn TechMaster.
Bạn là người đam mê lập trình và đang muốn theo đuổi công nghệ lập trình iOS? Bạn đang có ý định du học tại các nước Châu Âu? Hay bạn muốn tìm hiểu về quy trình tuyển dụng tại các công ty phần mềm ở Đức? Hãy chia sẻ những suy nghĩ của mình trong phần bình luận phía dưới nhé!