Saturday, September 15, 2018

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é!

Tuesday, February 27, 2018

A Guide to Becoming a Full-Stack Developer in 2017

Full-Stack Web Development, according to the Stack Overflow 2016 Developer Survey, is the most popular developer occupation today. It’s no wonder then that there are dozens of online and in-person programs that will help people become Full-Stack Developers and then even assist these new developers land high-paying programming jobs.
Some popular online programs can be found on Lynda, Udacity, Coursera, Thinkful, General Assembly, and so much more. Aside from these online programs, there are also in-person coding bootcamps that are teaching people the skills required to become web developers.
In this article I won’t be discussing which websites or coding bootcamps have the best web development programs, instead I will be providing a definitive guide to what I believe are the most important skills required to become a Full-Stack Web Developer today and land a job if you’ve never coded before. I will be basing the list off of three things:
  1. A combination of what most programs in 2017 are teaching students.
  2. My own personal experiences from interviewing at companies for developer positions in the past and also interviewing potential candidates for current Full-Stack Developer positions at my current company.
  3. Stories and feedback from people on Coderbyte who have been accepted to coding bootcamps and then proceeded to get programming jobs (see below).

The Definitive Guide

A Full-Stack Web Developer is someone who is able to work on both the front-end and back-end portions of an application. Front-end generally refers to the portion of an application the user will see or interact with, and the back-end is the part of the application that handles the logic, database interactions, user authentication, server configuration, etc. Being a Full-Stack Developer doesn’t mean that you have necessarily mastered everything required to work with the front-end or back-end, but it means that you are able to work on both sides and understand what is going on when building an application.
If you want to become a Full-Stack Web Developer in 2017 and land your first job, below is a reference guide with a list of things you should learn.

1. HTML/CSS

Almost every single program, whether online or in-person, that is teaching you how to be a web developer will start with HTML and CSS because they are the building blocks of the web. Simply put, HTML allows you to add content to a website and CSS is what allows you to style your content. The following topics related to HTML/CSS come up often in interviews and on the actual job when you’re working:
  • Semantic HTML.
  • Be able to explain the CSS Box Model.
  • Benefits of CSS preprocessors (you don’t necessarily need to understand how to use one on a deep level, but you should to understand what they are for and how they help with development).
  • CSS Media Queries to target different devices and write responsive CSS.
  • Bootstrap (a framework for helping design and layout content on a page and while many online programs or schools focus heavily on teaching Bootstrap, in reality it’s more important to have a deep knowledge of fundamental CSS than specific Bootstrap features and methods).

2. JavaScript

The JavaScript language is growing more popular every year and new libraries, frameworks, and tools are constantly being released. Based on the Stack Overflow 2016 Developer Survey, JavaScript is the most popular language in both Full-Stack, Front-end, and Back-end Development. It’s the only language that runs natively in the browser, and can double up as a server-side language as well (as you’ll see below with Node.js). Below are some topics you need to understand as a Full-Stack Developer:
  • Understand how to work with the DOM. Also know what JSON is and how to manipulate it.
  • Important language features such as functional composition, prototypal inheritance, closures, event delegation, scope, higher-order functions.
  • Asynchronous control flow, promises, and callbacks.
  • Learn how to properly structure your code and modularize parts of it, things like webpack, browserify, or build tools like gulp will definitely be helpful to know.
  • Know how to use at least one popular framework (many programs will focus heavily on teaching you a library or framework like React or AngularJS, but in reality it’s much more important to have a deep understanding of the JavaScript language and not focus so much on framework-specific features. Once you have a good understanding of JavaScript, picking up a framework that sits on top of it won’t be too hard anyway).
  • Although some may argue that you should be using this less or that it’s slowly dying, jQuery code still exists in most applications and a solid understanding of it will be helpful.
  • Some knowledge on testing frameworks and why they’re important (some may even claim that this topic should be optional).
  • Learn about some important new ES6 features (optional).

3. Back-End Language

Once you feel you’ve gotten a good grasp on HTML/CSS and JavaScript, you’ll want to move on to a back-end language that will handle things like database operations, user authentication, and application logic. All online programs and bootcamps usually focus on a specific back-end language, and in reality in doesn’t matter which one you learn so much as long as you understand what is going on and you learn the nuances of your chosen language. You’ll get a ton of different responses if you ask someone which back-end language is the best to learn, so below I’ve listed a few popular combinations. An important note: whichever you decide to learn, just stick with it and learn as much as you can about it — there are jobs out there for all the languages listed below.
  • Node.js: This is a great option because Node.js is itself just a JavaScript environment which means you don’t need to learn a new language. This is a big reason why a lot of online programs and bootcamps choose to teach Node.js. The most popular framework you’d most likely learn to aid you in developing web applications is Express.
  • Ruby: Some popular frameworks for developing in Ruby are Rails and Sinatra. Plenty of programs teach Ruby as a first back-end language.
  • Python: Some popular frameworks for developing in Python are Django and Flask.
  • Java: The Java language isn’t taught so much these days when it comes to Full-Stack Web Development, but some companies do use Java as their back-end and it is still a very in-demand language (see image above).
  • PHP: PHP is rarely taught in programs these days, but just like with Java, it is still very in-demand and it is a cornerstone of the web today.

4. Databases & Web Storage

When learning to build web applications, at some point you’ll probably want to store data somewhere and then access it later. You should have a good grasp on the following topics related to databases and storage.

5. HTTP & REST

HTTP is a stateless application protocol on the Internet — it’s what allows clients to communicate with servers (e.g. your JavaScript code can make an AJAX request to some back-end code you have running on a server which will happen via HTTP). Some important topics you should learn about are listed below:

6. Web Application Architecture

Once you think you have a grasp on HTML/CSS, JavaScript, back-end programming, databases, and HTTP/REST, then comes the tricky part. At this point if you want to create a somewhat complex web application, you’ll need to know how to structure your code, how to separate your files, where to host your large media files, how to structure the data in your database, where to perform certain computational tasks (client-side vs server-side), and much more.
There are best practices that you can read about online on, but the best way to actually learn about application architecture is by working on a large application yourself that contains several moving parts — or even better, working on a team and together developing a somewhat large/complex application.
This is why, for example, someone with 7+ years of experience may not necessarily know CSS or JavaScript better than someone with 2 years of experience, but over all of those years they’ve presumably worked with all sorts of different applications and websites and have learned how to architect and design applications (among learning other important things) to be most efficient and can see the “big picture” when it comes to development. Below are some things you can read that will help you learn how to architect your web applications efficiently:
  • Learn about common platforms as a service, e.g. Heroku and AWS. Heroku allows you to easily upload your code and have an application up and running with very little configuration or server maintenance and AWS offers dozens of products and services to help with storage, video processing, load balancing, and much more.
  • Performance optimization for applications and modern browsers.
  • Some opinions on what a web application architecture should include.
  • Designing Web Applications by Microsoft.
  • MVC.
  • Most importantly though you should try to work on projects with people, look at codebases of popular projects on GitHub, and learn as much as you can from senior developers.

7. Git

Git is a version control system that allows developers working on a team to keep track of all the changes being made to a codebase. It’s important to know a few important things related to Git so that you understand how to properly get the latest code that you’ve missed, update parts of the code, make fixes, and change other people’s code without breaking things. You should definitely learn the concept behind Git and play around with it yourself.
  • Here’s a reference list of some common git commands you’ll likely use.
  • Here’s a tutorial on using Git and GitHub for beginners.

8. Basic Algorithms & Data Structures

This topic is somewhat polarizing in the development world because there are developers who don’t think there should be such a heavy focus on computer science topics like tree traversal, sorting, algorithm analysis, matrix manipulation, etc. in web development. However, there are companies like Google that are notorious for asking these types of questions in their interviews. As someone said about the Front-End engineering interview at Google:
That said, as Ryan McGrath mentions, our front-end (FE) engineers are expected to have a solid CS background, like all our engineers.
While there are companies that practically require applicants to have a computer science degree or equivalent, there are plenty of companies that will hire people without this technical qualification if they can prove that they know how to develop applications and show an understanding of the whole domain. But part of being a competent developer and not writing inefficient code or using the wrong tools is an understanding of some basic algorithms and data structures and being able to analyze trade-offs. So here are some things you should definitely learn:

It’ll be hard work learning all of this, but it’s rewarding in the end and Full-Stack Development is fun! Leave your comments below, and check out Coderbyte for some algorithm practice.