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.

Phỏng vấn anh Hoàng Hô – Chuyện chàng Phun Tắc Developer tại công ty Startup

Ở những kì trước, mình đã từng phỏng vấn anh Tiger Nguyễn – một BrSE “cứng cựa” với hơn 5 năm kinh nghiệm, anh Huy Trần (không Truồng) – kĩ sư mặt tiền tại xứ sử độn Silicon.
Kì này, chúng ta sẽ cùng trò chuyện với anh Nhật Hoàng Codeaholiguy, còn được gọi tận thương là Hoàng Hô.  Không chỉ là một bờ lốc gơ, anh còn là diễn giả kiêm streamer được mến mộ (Điểm hình là live stream hướng dẫn Git & Github với gần 20k view và hàng nghìn like từ nhiều trang).
Anh Hoàng Codeaholicguy (Hoàng Hô) đang trình bày về ReactJS
Hãy cùng lắng nghe những chia sẻ về con đường trở thành Full-Stack Developer cùng những điều hay ho khi làm việc tại công ty startup từ anh Hoàng nhé!

  1. Chào Hoàng, anh có thể giới thiệu sơ về bản thân (tên tuổi, nghề nghiệp, sở thích, nơi ở) cho bạn đọc biết được không?
Chào mọi người, mình tên Nguyễn Nhật Hoàng. Hiện tại mình đang sống ở Hồ Chí Minh và làm Software Engineer cho Kobiton, một startup về mobile device cloud platform. Ngoài ra thì mình cũng là người viết blog Codeaholicguy nếu bạn nào chưa biết.
Sở thích của mình là rượu chè, cờ bạc, mát xa gái gú. Đùa đấy, lúc rảnh rỗi mình thường hay đi phượt, chơi Dota, xem phim Mẽo dài tập, đọc sách để học công nghệ mới, rủ thằng Code Dạo làm vài cái ứng dụng nho nhỏ nữa (Ví dụ như ứng dụng Học Ngôn Ngữ Lập Trình Gì Bây Giờ)
Ứng dụng “Học Ngôn Ngữ Lập Trình Gì Bây Giờ” tại http://language.codeaholicguy.com/
  1. Anh giới thiệu đôi lời về bờ lốc Codeaholicguy của mình nha. Lý do nào khiến anh viết blog đó vậy?
Để nói về Codeaholicguy thì mình bắt đầu viết vào khoảng đầu năm 2015. Lúc đó mình bắt đầu bằng việc viết blog bằng tiếng Anh. Mục đích mình viết blog lúc đó chỉ là để mình lưu lại những thứ mình học được vì mình nghĩ cách tốt nhất để học đó là viết ra mọi thứ, ngoài ra thì mình còn muốn rèn luyện thêm khả năng viết tiếng Anh cho tốt.
Sau đó viết được khoảng 5 bài chủ yếu nội dung là về Java, thì mình ngưng viết.  Lúc đó Tôi đi code dạo cũng bắt đầu viết blog, thông qua trao đổi mình chợt nhận ra rằng rèn luyện kiến thức và kỹ năng của bản thân thì tốt nhưng nếu có thể chia sẻ nó đến với nhiều người, thì lại càng tuyệt vời hơn.
Nếu cứ giữ nội dung của Codeaholicguy như hiện tại thì thật khó mà chia sẻ vì mình nghĩ rằng cộng đồng Việt Nam cần những thứ thân thuộc hơn là việc đọc những bài viết tiếng anh với chủ đề tương tự đầy rẫy trên mạng. Cuối cùng mình quyết định xoá hết nội dung blog và viết bài lại từ đầu bằng tiếng Việt. Và như thế Codeaholicguy tồn tại đến hôm nay và thực sự mình rất vui vì đã làm được điều đó.
Blog Codeaholicguy tại https://codeaholicguy.com/
Nội dung của blog Codeaholicguy chủ yếu viết về kỹ thuật, nhưng bên cạnh đó mình cũng có những bài viết chia sẻ về kỹ năng mềm, những kinh nghiệm mà mình học được như kinh nghiệm phỏng vấn hay kỹ năng làm việc trong nhóm, hay chỉ đơn giản là chia sẻ cuộc sống hàng ngày, etc…
  1. Thông qua bờ lốc Codeaholicguy của anh, được biết anh hiện đang làm team leader tại Kobition. Anh có thể chia sẻ sơ về sản phẩm và công việc hàng ngày của mình không? Làm ở công ty startup thì có gì vui không?
Như mình đã nói, hiện tại mình đang là Software Engineer cho Kobiton, và đóng vai trò là Team Leader trong team. Đầu tiên mình sẽ trả lời câu hỏi làm trong công ty startup thì có gì vui không nhé.
Mình đã làm việc qua nhiều công ty từ outsourcing cho đến công ty làm sản phẩm, với nhiều vị trí khác nhau. Điều mình trải nghiệm được đó là tất cả lý thuyết chỉ mang tính tương đối, khi làm software chúng ta cần phải  hướng đến thực tế hơn là làm những thứ giống như sách vở. Ví dụ như phải quan tâm đến việc người dùng sử dụng một chức năng như thế nào, có hữu ích không, thay vì optimze code chạy cho thật nhanh, thật phức tạp, đúng với design pattern nhưng không ai xài, hay không ai có thể xài.
Và cũng chính vì vậy mà mình thích làm việc trong môi trường làm sản phẩm, nhất là với những công ty startup bởi vì ở đó mình sẽ có nhiều ownership hơn, tức là có cơ hội đưa ra quyết định cũng như có ảnh hưởng lên các quyết định nhiều hơn, ngoài ra đó còn là môi trường mà bản thân phải tự làm hầu hết mọi thứ.
Từ đó mình phải tự trau chuốt bản thân, học nhiều hơn, quyết định kỹ càng hơn để hoàn thiện mọi thứ một cách tốt nhất vì mỗi thứ chúng ta làm ra đều có ảnh hưởng rất lớn, và chúng ta phải chịu trách nhiệm cho những thứ chúng ta đã làm, đó cũng là cơ hội tốt để rèn luyện bản thân trở thành full-stack developer.
Bây giờ mình sẽ nói về Kobiton nhé! Kobiton là một startup về mobile device cloud platform, giúp chúng ta có thể test một website, một ứng dụng dễ dàng hơn trên nhiều thiết bị khác nhau như Samsung Galaxy S8, hay iPhone 7 Plus mà không cần phải mua các thiết bị đó.
Kobiton cung cấp cách thức để chúng ta có thể thực hiện automation test thông qua test script cũng như manual test thông qua việc remote control các thiết bị ngay trên trình duyệt web. Ngoài ra, Kobiton cũng lưu trữ lại tất cả dữ liệu như video, screenshot, log để chúng ta có thể chia sẻ cũng như debug nếu ứng dụng có vấn đề trên một thiết bị nào đó.
Anh Hoàng (hàng 1, thứ 5 từ trái sang) cùng với team lập trình tại Kobinton
  1. Tại sao anh lại đến với ngành lập trình này? Anh kể sơ về quá trình từ lúc đi học, đi làm cho tới khi ra trường, từ lúc làm dev quèn cho tới team leader được không?
Mình đến với nghành này như là định mệnh an bài vậy đó, từ nhỏ mình đã yêu thích máy tính, có thời gian rảnh là xin ba má cho chơi game rồi ngồi vọc vạch máy tính. Mình thích thú tìm hiểu cách mà người ta tạo ra những phần mềm, rồi mình tự mày mò làm game các kiểu.
Sau đó thì mình chọn FPT để học vì có nghành mình thích và cách đào tạo của trường rất khác, rất hấp dẫn. Lúc mới ra trường mình bắt đầu làm cho FPT Software, rồi sau đó mình chuyển sang làm sản phẩm cho NCT Corp, là công ty chủ quản của website nhaccuatui.com.
Đến tại thời điểm đó công việc chính của mình vẫn thiên về Java là chủ yếu, sau đó thì mình muốn thực hành những kiến thức về JavaScript, NodeJS mà mình tự học được nhưng môi trường hiện tại thì không có điều kiện để làm việc đó.
Và cũng thật may mắn khi KMS Technology tìm đến mình, giới thiệu cho mình về Kobiton, lúc đó Kobiton chỉ vừa mới định hình và thật may mắn khi mình được tham gia vào trong team phát triển sản phẩm này.
Đương sự (trái) đang vừa code vừa relax tại Kobiton, dáng ngồi đẹp nức lòng fan hâm mộ
  1. Thời đi làm, anh Hoàng từng làm ở công ty outsource (FPT), công ty product (Nhaccuatui), hiện tại là công ty startup (Kobition). Anh học được gì từ những công ty này, theo anh điểm khác nhau giữa chúng là gì, sinh viên nên chọn công ty dạng nào khi ra trường?
Đầu tiên chúng ta cùng làm rõ hai khái niệm outsourcing và làm sản phẩm.
Công ty outsourcing được những công ty khác thuê để làm phần mềm cho họ, công ty outsourcing sẽ không sở hữu hay quảng bá sản phẩm mà họ làm ra vì đơn giản nó là của công ty khác, và được trả tiền bởi công ty khác.
Công ty làm sản phẩm thì họ phải tự làm mọi thứ để quảng bá và bán sản phẩm của mình đến cho người dùng, và họ chỉ được trả tiền khi người dùng mua sản phẩm của họ. Nói như vậy cho đơn giản nhé!
Ở mỗi môi trường làm việc sẽ có những cái hay riêng, ví dụ như ở môi trường outsourcing chúng ta được làm việc ở nhiều dự án, sản phẩm, công nghệ khác nhau theo thời gian. Còn đối với môi trường làm sản phẩm thì điều tối quan trọng là việc đưa được sản phẩm tới tay người dùng, chúng ta sẽ được tận hưởng cảm giác sở hữu một sản phẩm và tham gia vào việc sản xuất nó từ đầu tới cuối.
Để thành công tại môi trường outsourcing chúng ta cần nhanh nhạy, dễ dàng thích ứng với những môi trường làm việc khác nhau. Còn để thành công ở môi trường làm sản phẩm thì chúng ta cần phải hiểu người dùng, phải take ownership khi làm bất cứ việc gì, cũng như hiểu sản phẩm.
Điều mình học được trong suốt khoảng thời gian làm việc đó là đù làm ở môi trường nào thì cũng phải luôn làm việc hết sức mình, hãy chịu trách nhiệm về những gì mình làm.
Dù làm ở môi trường nào thì cũng phải luôn làm việc hết sức mình, hãy chịu trách nhiệm về những gì mình làm…
Khi chúng ta dám chịu trách nhiệm về những gì mình làm thì chúng ta sẽ xây dựng được nền tảng lòng tin của mọi người xung quanh, cũng như để làm được chuyện đó chúng ta phải tự trau truốt bản thân để có cái nhìn bao quát hơn, suy nghĩ kĩ càng hơn. Và hơn hết, phải tìm hiểu gốc rễ của vấn đề trước khi đưa ra bất cứ kết luận nào.
  1. Được biết anh Hoàng hiện tại là full stack developer? Tại sao anh lại làm full-stack developer mà không phải là cái khác? Anh Hoàng có thể chia sẻ stack hiện tại, những công nghệ mình biết được không?
Với nhu cầu của công việc thì mình phải tiếp xúc với nhiều thứ trong quá trình phát triển sản phẩm, đến thời điểm hiện tại mình cũng không dám nhận mình là một fullstack developer mà chỉ là đang trong quá trình phát triển bản thân để có thể trở thành một full-stack developer. Đơn giản là vì mình nghĩ full-stack developer cần phải biết nhiều hơn nữa so với kiến thức của mình hiện tại.
Để nói về stack hiện tại của mình thì mình sử dụng JavaScript ở cả client side và server side thông qua NodeJS. Mình tìm hiểu nhiều nhưng để nói về những gì mình biết và hiểu rõ thì chắc có thể kể đến Java và JavaScript.
  1. Điều làm anh tự hào nhất trong suốt quãng đời đi làm là gì?
Điều mình tự hào nhất từ lúc bắt đầu đi làm cho tới bây giờ đó chính là blog Codeaholicguy, cũng như được tham gia vào team phát triển sản phẩm Kobiton – một sản phẩm cạnh tranh với khá nhiều công ty lớn trên thế giới như Amazon (Amazon device farm), Google (Firebase testlab), etc…
Hoàng và đồng đội đạt giải trong một cuộc thi Facebook Hackathon
  1. Được biết anh đã từng lead và phỏng vấn qua kha khá ứng viên, anh đánh giá thế nào về trình độ sinh viên IT Việt Nam, cũng như trình độ dev Việt Nam hiện tại.
Cũng không dám nói mình phỏng vấn qua nhiều ứng viên, nhưng để mà nói về trình độ sinh viên Việt Nam, mình thấy các bạn rất thông minh và nhanh nhạy, tuy nhiên còn thiếu sự va chạm thực tế, ngại nói ra ý kiến cá nhân và bị chi phối bởi nhiều vấn đề khác.
Đối với sinh viên mình nghĩ các bạn nên tập trung vào việc củng cố kiến thức về tiếng Anh, về Software Engineering, học tốt những thứ nền tảngđừng vội đi làm! Hãy tập trung làm thứ gì thật sự có ích trước, và tích luỹ thật nhiều kiến thức trước khi ra trường.
Về trình độ dev của Việt Nam, mình nghĩ có rất nhiều bạn xuất sắc tuy nhiên về mặt bằng chung thì còn khá thua kém so với nhiều nước khác bởi vì chúng ta bị ảnh hưởng quá nhiều bởi văn hoá gia công, làm cho developer quên mất việc phát triển bản thân.
Tuy nhiên với tình hình hiện tại, khá nhiều doanh nghiệp nước ngoài cũng như Việt Nam đang chú trọng đến vấn đề này hơn, và mình nghĩ, vấn đề này sẽ được cải thiện trong tương lai sớm thôi.
  1. (Câu hỏi bạn đọc) Nếu một bạn sinh viên năm 4/mới ra trường hoặc đã đi code được 1-2 năm, muốn đi theo hướng full-stack developer thì nên đi như thế nào ạ?
Để đi theo hướng full-stack, mình nghĩ các bạn nên phát triển bản thân theo một thế mạnh nào đó trước, và vững các kiến thức nền tảng, và đừng vội vàng trong những năm đầu làm việc.
Sau khi đã đào sâu vào thế mạnh của bản thân thì hãy mở rộng kiến thức của mình ra những phần khác, ví dụ sau khi bạn đã mạnh về backend rồi thì hãy tìm hiểu frontend, lời khuyên của mình là ít nhất mình phải mạnh một mảng nào đó rồi mới dấn thân qua mảng khác được.
  1. (Câu hỏi bạn đọc) Anh làm gì để trau dồi và làm mới kĩ năng của bản thân, giữ cho mình không lạc hậu. Anh hay đọc và kiếm tài liệu ở đâu ạ?
Mình thường lên Medium, Quora để đọc thêm, ngoài ra mình còn follow twitter của những người nổi tiếng trong nghề cũng như blog của họ để đọc thêm.
Và điều quan trọng là đọc sách, mình thường đọc sách kĩ thuật của các nhà xuất bản Oreilly, Manning và Packt.
  1. Câu cuối anh nhé! Anh có lời khuyên gì dành cho các bạn sinh viên ngành IT và các bạn dev Việt Nam hiện nay không?
Như mình đã nói ở trên, đối với sinh viên mình nghĩ các bạn nên tập trung vào việc củng cố kiến thức về tiếng Anh, về Software Engineering, về thuật toán, cấu trúc dữ liệu, etc… Học tốt những thứ nền tảng và đừng vội đi làm! Hãy tập trung làm thứ gì thật sự có ích trước, và tích luỹ thật nhiều kiến thức trước khi ra trường nhé!
Lời khuyên cuối cùng: Nhớ nắm vững kiến thức nền tảng, cũng cố kiến thức, làm gì đó có ích và đừng vội đi làm nhé!

Phỏng vấn đại ca Huy Trần – Kĩ Sư Mặt Tiền tại xứ sở độn Silicon

Có thể bạn chưa biết, nếu làm lập trình viên, bạn có rất nhiều cơ hội được phiêu diêu nơi xứ người, thông qua nhiều con đường khác nhau (đi onsite, tự xin việc làm, v…v).
Kì trước, mình đã phỏng vấn anh Tiger Nguyễn, một BrSE “cứng cựa” với hơn 5 năm kinh nghiệm. Kì này, chúng ta cùng trò chuyện với anh Huy Trần (không Truồng), tác giả của blog Phun-Sờ-Nắc Developer, hiện anh đang là một front-end engineer cho một công ty start-up ở Silicon Valley.
Hãy cùng lắng nghe những chia sẻ rất cụ thể, chi tiết và có tâm về con đường phỏng vấn, xin việc bên Mĩ, cùng những điều hay ho khi làm việc nơi xứ người từ anh Huy nhé!

Ảnh đại ca Huy ở nước ngoài
  1. Anh có thể giới thiệu sơ về bản thân (tên tuổi, nghề nghiệp, kinh nghiệm, sở thích, nơi ở) cho bạn đọc biết được không?
Chào bà con, chào Code Dạo, anh tên Huy, năm nay cũng tròn 26, nghề nghiệp thì như đã ghi trên blog, là Kĩ sư mặt tiền (Front-end Engineer) cho một startup về Health Care tại thành phố Mountain View, bang Cali. Ngoài ra thì anh cũng là admin của hội Rust Việt Nam.
Về kinh nghiệm thì cũng không có gì nhiều, trước khi bén duyên với nghề Kĩ sư mặt tiền này thì anh cũng từng trôi dạt qua nhiều công ty với đủ mọi thể loại vị trí như: Trợ lý hốt bug, chuyên viên copy paste PHP, .NET,… cũng có một thời gian anh kiếm sống bằng nghề clone dạo game và app mobile, sau khi dồn sức vào mở startup làm game và thất bại thì cả team ra đường, anh thì về trường để trả nợ môn, rồi cũng quay về với nghề code dạo.
Về sở thích thì cũng như bao anh em IT, anh thích DotA 2 (gosu 1k6 mmr đấy nhé), giờ rảnh nếu không vào game để feed thì a đọc sách và nghiên cứu linh tinh, viết blog,…
  1. Anh giới thiệu đôi lời về bờ lốc Phun Sờ Nắc của mình nha. Lý do nào khiến anh viết blog đó vậy ?
Phun Sờ Nắc là blog anh lập ra để viết về những chủ đề mà mình quan tâm như là lập trình, toán học, điện tử và sách, đôi lúc bức xúc thì cũng lên làm vài bài cảm thán.
Trước khi lập blog này thì anh cũng viết ở khá nhiều nơi khác, phần lớn là ở các diễn đàn về CNTT, nhưng về sau thì mấy forum này tỏi dần kéo luôn những bài anh viết đi về miền cực lạc, nên anh mở blog riêng để chủ động hơn trong việc lưu giữ lại những gì mình viết, và tiện chia sẽ những kinh nghiệm và đam mê của mình cho nhiều người hơn. Biết đâu sau này bài nhiều thì có thể đóng thành sách bán không chừng =))))
Blog Phun Sờ Nắc của anh Huy, với hơn vài chục bài viết: https://thefullsnack.com/
Đùa tí, thực ra động lực lớn nhất khiến anh viết nhiều là anh có thể chia sẽ những gì mình biết, nhận thấy nó giúp được cho rất nhiều người, và để viết tốt thì bản thân mình phải nghiên cứu rất nhiều nên từ đó cũng học hỏi được nhiều thứ hơn.
  1. Thông qua bờ lốc Phun Sờ Nắc của anh, được biết anh hiện đang làm “kĩ sư mặt tiền (front-end engineer) cho một startup nhỏ ở thung lũng túi nâng silicon”. Anh có thể chia sẻ sơ về công việc hàng ngày của mình không?
Công ty anh làm product cho khách hàng là các bệnh viện. Ở team Frontend thì công việc thường ngày thì cân bằng giữa việc fix bug cho các chức năng đã có, và phối hợp với các team khác (Design, Backend, Data Scientist,…) phát triển thêm các chức năng mới.
Đối với việc fix bug thì khá giống với những gì chúng ta vẫn làm trong các dự án ở nhà vẫn làm, là nhận bug từ phía tester, tìm đủ mọi cách để giấu nó đi rồi gửi lại cho tester để họ test =))
Đối với việc phát triển chức năng mới, thì rất thú vị, vì sản phẩm thay đổi gần như theo chu kì tính bằng tuần (dựa theo những biến đổi trong ngành Health Care, những động thái của công ty đối thủ, những yêu cầu mới của khách hàng,…) nên gần như là chạy không ngừng nghỉ
Vị trí Frontend đóng vai trò trung tâm (ý là trung tâm của những cuộc tra tấn ấy) vì phải làm việc với tất cả mọi team, làm việc với Designer để chắc chắn là họ không thiết kế ra những thứ gì quái đản và hoang đường về mặt kĩ thuật, cùng thảo luận. Phối hợp với team Backend và Data Scientist để đảm bảo là dữ liệu và API họ cung cấp luôn chính xác với nhu cầu bên phía Frontend, và phía Frontend cũng thể hiện đúng với những gì họ mong muốn. Cũng nhờ vậy mà học hỏi được rât nhiều thứ.
Một buổi họp team/training
  1. Tại sao anh lại đến với ngành lập trình này? Cơ duyên nào đưa anh qua đến tận trời Tây (thung lũng Silicon) để làm việc vậy nhỉ?
Lần đầu tiên anh nghĩ đến chuyện học lập trình là để làm game. Anh còn nhớ lần đầu tiên được xài máy tính thì lúc đó chỉ có giao diện dòng lệnh của DOS và sử dụng trình quản lý file là Norton Commander, với màn hình xanh lè, nhưng sau một hồi bấm bấm thì ra được rất nhiều game hay, trong đó có trò Mario cải tiến, rất lạ so với bản Mario trên các hệ máy NES/SNES ở ngoài quán.
Một thời gian sau thì mò được cả source code viết bằng Pascal của trò đó trong máy nhưng mà đọc không hiểu gì cả =))) thế là quyết tâm ngồi học lập trình, đam mê cũng từ dạo đó.
Hồi đó chưa có Internet ở nhà, cứ mỗi cuối tuần thì anh lại đạp xe ra quán net để download mã nguồn từ các trang như Platnet-Source-Code (chắc giờ nó die rồi) về rồi ngâm cứu suốt 1 tuần, hết thì tuần sau lại ra quán net download tiếp.
Rồi dần dần được tiếp xúc nhiều hơn với Internet thì cũng tiếp cận được một vài cộng đồng lập trình viên ở khắp nơi, càng học thêm được nhiều thứ mới mẻ, và lên cấp 3 thì cũng đủ trình để đi thi thố linh tinh.
Còn về cơ hội để anh đi làm ở Silicon Valley thì một phần cũng là nhờ may mắn.
Khoảng cuối năm 2015 thì gia đình anh đi định cư ở Mỹ. Trước khi ra đi thì bạn bè cũng hù dọa ghê lắm, đọc báo thì cũng thấy tả cảnh dân nhập cư thảm lắm, nào là qua đó thì bằng cấp và mọi thứ ở Việt Nam coi như vứt hết, chỉ có đi làm khuân vác mà sống thôi, phải đi học lại Đại học này kia. Nhưng đã được đi rồi thì cứ đi thôi, qua rồi tính sau.
Kết quả là qua đến nơi thì chả thấy giống những gì trên báo nó nói  đúng là cái vụ xin việc trong ngành CNTT bên này cũng khá là vất vả,  nhưng không đến nỗi bất khả thi như nhiều người vẫn nghĩ.
  1. (Câu hỏi bạn đọc) Làm sao anh tìm được công việc ở nước ngoài hay vậy? Phỏng vấn có khó không anh? Bọn Tây lông làm việc có khác gì Việt Nam không anh?
Việc tìm một công việc (ngành CNTT nhé) ở nước ngoài thật ra không hề khó. Nhân đây a cũng xin chia sẽ một tí về quá trình tìm việc của mình.
Đầu tiên đó là phải chuẩn bị hồ sơ (CV). Các yếu tố như biết nhiều ngôn ngữ hay kinh nghiệm làm việc khủng, tốt nghiệp đại học ở Việt Nam,.v..v… hầu như người ta rất ít để ý đến. Mà thay vào đó thì họ quan tâm đến việc mình làm được những gì. Làm sao để chứng minh được mình làm được những gì thông qua hồ sơ xin việc? Có 2 thứ: Github và Blog cá nhân.
Một profile Github đẹp là yếu tố then chốt, khi còn ở Việt Nam thì anh cũng làm một vài project linh tinh và quăng hết lên đấy, nhờ bạn bè vào star hộ, khi nộp hồ sơ thì để luôn cái link Github profile của mình vào và không giới thiệu gì nhiều, chỉ nói đại loại như: “Mày muốn biết tao làm được gì thì cứ vào profile của tao mà xem cho rõ” =)))
Nếu có blog cá nhân bằng tiếng Anh thì là một lợi thế nữa. Không gì chứng tỏ bản thân dễ dàng bằng 2 thứ đó.
GitHub Profile lộng lẫy nhiều sao của anh Huy: https://github.com/huytd/
Tiếp theo là tìm đến những nơi người ta hay tuyển, điển hình là AngelListStackOverflow Jobs. Tạo profile trên đó và bắt đầu quá trình apply.
Apply xong thì cứ ngồi chờ thôi =)))
À, đến đây thì cũng cần phải nói, visa là một yếu tố cũng rất quan trọng để tìm việc, ít nhất là ở Mỹ. Đa số các công ty ở Mỹ họ chuộng người đã có visa làm việc hoặc thẻ xanh hơn, vì không phải tốn tiền cho việc tài trợ visa. Không phải là không có những công ty sẵn lòng tài trợ work visa, nhưng để được tài trợ thì bản thân mình phải đáng giá đối với họ.
Nhưng tất nhiên không phải cứ đi Mỹ thì mới gọi là làm việc ở nước ngoài, các bạn ở nhà cứ thoải mái và tự tin apply vào những công ty nằm quanh khu vực như Singapore, Thái Lan, Malaysia hay Nhật Bản, Úc, hoặc những nơi có chế độ visa thoải mái hơn như Canada. Rất nhiều bạn bè anh quen đang làm việc ở các nước này và cũng đã apply trực tiếp từ Việt Nam.
Giai đoạn apply xong thì phải sẵn sang cho các cuộc phỏng vấn làm quen, thường là các cuộc gọi ngắn để giới thiệu bản thân, đôi lúc là một vài câu hỏi sơ bộ về kĩ thuật (họ sẽ hỏi kiểu: Object khác gì Array trong JavaScript, hay bind khác gì apply,…). Mục đích của các cuộc gọi này là để người ta xem khả năng ngoại ngữ (tiếng Anh) của mình như thế nào, và có vấn đề gì về giao tiếp hay không. Vì thế thứ cần chuẩn bị cho giai đoạn này là khả năng giao tiếp bằng tiếng Anh, và một chút kiến thức kĩ thuật cơ bản.
Công ty đầu tiên anh được gọi là vào lúc 4h sáng, qua Skype, vì khi đó anh vẫn đang còn ở Việt Nam.
Sau vòng đó thì sẽ đến các vòng làm bài test (gửi qua email) hoặc coding interview trực tiếp qua Skype, thường sẽ là 45 phút cho một bài kiểm tra, và nội dung được hỏi đa phần là thuật toán. Đừng tin vào cái bọn suốt ngày lên HackerNews hô hào “vì một thế giới không coding/whiteboard interview”, trong vòng 45 phút thì không có cách nào để người ta đánh giá kĩ năng (giải quyết vấn đề, tư duy, cách làm việc, giao tiếp…) của mình nhanh bằng ra các câu hỏi về thuật toán đâu.
Để hiểu thêm về góc nhìn của người phỏng vấn, họ muốn gì và tìm kiếm điều gì, các bạn có thể tham khảo bài viết của anh Đỗ Xuân Huy, kể về quá trình anh ấy làm công việc phỏng vấn ứng viên cho văn phòng LINE Corp tại Nhật Bản.
Qua được vòng đầu này thì tùy vào từng công ty mà sẽ đến các vòng coding interview trực tiếp tại công ty, rồi vào luôn màn nói chuyện với CEO để deal lương các kiểu. Đến giai đoạn này thì chắc chắn là phải xách ba lô lên và đi rồi.
Các công ty khi đã quyết định cho ứng viên đến phỏng vấn trực tiếp thì thường họ sẽ tài trợ chi phí đi lại nếu cần thiết (không phải công ty nào cũng có, nên đặt thẳng vấn đề với họ nếu có thể), cũng vì vậy mà yêu cầu của họ ở các vòng trước sẽ khắt khe hơn rất nhiều.
Nhìn chung quá trình phỏng vấn là vậy, những thay đổi sẽ tùy vào từng công ty nhưng không khác biệt nhau nhiều lắm.
Các kiến thức về kĩ thuật thì không bàn tới, thứ duy nhất cần phải có nếu muốn tìm việc ở nước ngoài (bất kể nước nào) thì là khả năng giao tiếp bằng tiếng Anh (chỉ cần nói được chứ không cần nói hay, cho nên các bạn chỉ cần tập trung luyện phản xạ tiếng Anh và khả năng phát âm, đừng cố luyện mấy cái hoa hòe như là tiếng Anh giọng Mỹ làm gì nhé J)
Khi đã vào làm việc rồi thì cũng không có gì khó khăn mấy, bọn Tây lông nó làm việc cũng như mình thôi, chỉ khác cái là đa số đều rất chủ động trong công việc và trong giao tiếp, với tinh thần trách nhiệm cực kì cao, nhưng không có gì là quá khó để chúng ta có thể bắt kịp cả. Không lo về mấy cái này!

Phèo, mệt quá, cho anh thở tí đã.
  1. Trong quá trình học tập và làm việc bên xứ người, chắc cũng có nhiều cái sướng cũng như nhiều cái vất vả nhỉ nhỉ? Anh chia sẻ thêm về những những cái sướng cái khổ nơi xứ người với các bạn sinh viên được không?
Sướng thì nhiều cái sướng lắm.
Về đời sống thì bên cạnh mấy thứ như khí hậu mát mẻ, môi trường sạch sẽ, văn hóa ứng xử lịch thiệp và mức độ an toàn khi đi ngoài đường, thì đây còn là thiên đường cho những tâm hồn ăn uống như anh. Cứ gọi là mỗi ngày ăn một món từ một nước bất kỳ luôn ấy, hôm thì ăn đồ Nhật, rồi Hàn, rồi Trung Quốc, rồi Hy Lạp, rồi Mexico,… ôi thôi không dám kể nữa :v
Đối với dân công nghệ mà nói, thì việc tiếp cận với các món đồ công nghệ cũng như sách vở chuyên ngành là chuyện cực kì dễ dàng, mà lại còn rẻ nữa. Có những quyển sách mà từ hồi mới học lập trình anh chỉ có thể tìm được bản eBook, đến khi cầm được bản cứng trên tay thì rưng rưng nước mắt =)))
Còn cái sướng nhất đó là được làm việc và học hỏi cùng với rất nhiều lập trình viên giỏi đến từ khắp nơi trên thế giới, rồi nào là meetup nè, nào là hacknite nè. Đủ mọi thể loại.
Vất vả thì cũng nhiều, nhiều nhất có lẽ là nhớ vợ nhớ con  rồi thì thời gian đầu lúc mới qua phải trải qua đủ 3 cái “thọt”:
  • Đui mù: Ra đường không biết đường đi
  • Câm điếc: Người ta nói mình không nghe được, mình nói người ta cũng không nghe được luôn :v
  • Què: Không có xe thì đi lại cực kì khó khăn, nhưng đi xe bus và tàu điện lại là một trải nghiệm khá thú vị
Nhưng 3 cái này chỉ độ tầm 4, 5 tháng là giải quyết sạch sẽ, nếu cố gắng. Chỉ có vậy thôi hà
  1. Bản thân anh thấy môi trường làm việc ở nước ngoài có gì hay và dở hơn Việt Nam không? Anh cảm thấy thích thú với điều gì nhất? (Có trải nghiệm gì hay ho thì anh chia sẻ cũng được)
Mấy cái hay thì nãy giờ cũng kể ra kha khá rồi nhỉ? Giờ nói về mấy cái dở đi:
  • Văn phòng làm việc mà để tràn ngập đồ ăn và thức uống, rất phân tâm và mất tập trung khi code.
  • Không có giờ ngủ trưa hay cà phê chém gió như ở nhà, thay vào đó phải đi ăn trưa cùng đồng nghiệp rồi về mở máy tính đọc báo đến khi nào thích làm việc thì làm.
  • Chơi thân với sếp cũng không có giúp gì được trong chuyện thăng tiến hay đảm bảo toàn mạng khi làm sai một chuyện gì đó, hở phát là bị cả team cho lên thớt ngay.
  • Bất kì một cá nhân nào cũng có quyền góp ý hay tranh luận về bất kì điều gì trong project, dù là chuyện lớn hay chuyện nhỏ, hay có đúng với chuyên môn của mình hay không thì mọi người vẫn chú ý lắng nghe, thế có loạn không cơ chứ!
  • … còn nhiều lắm …
Đại ca Huy đang “chém gió” trong một buổi meetup
  1. Anh đánh giá thế nào về trình độ sinh viên IT Việt Nam, cũng như trình độ dev Việt Nam hiện tại. Họ có gì thua kém so với các dev “Tây lông” mà anh làm việc chung không?
Nếu mà nói chính xác thì về trình độ kĩ thuật, nhiều bạn sinh viên Việt Nam không thua gì so với sinh viên nước ngoài. Nhưng về số đông thì các bạn còn khá rụt rè, quá phụ thuộc và ỷ lại vào ý kiến của người khác hoặc số đông mà quên đi là thực sự mình muốn cái gì.
Các bạn còn quá tập trung vào những vấn đề ngắn hạn và không đáng (Có nên bỏ Đại Học không? Nên học Web hay Mobile? Học ngôn ngữ X có kiếm được việc làm không?…) và bỏ qua những thứ quan trọng hơn mà đáng lẽ ra các bạn nên tập trung vào giai đoạn khi đang còn là sinh viên (học tốt các môn nền tảng như Toán, Giải thuật, Cơ sở dữ liệu, tiếng Anh…).
Có nhiều bạn quá vội đi làm và đánh giá thấp việc học, về điểm này mình cũng nói luôn, đa số các công việc ngành IT mà thuê sinh viên thì đều là những việc lương thấp, hoặc bạn đang bán sức lao động và cả tương lai của mình với giá quá thấp, và quanh đi quẩn lại cũng chỉ là làm web thuê, hoặc làm “công nhân code” cho một xí nghiệp gia công phần mềm nào đó.
Trong vòng 2, 3 năm đầu, các bạn không hề đụng phải một vấn đề gì cần vận dụng kiến thức được học ở trường cả. Điều này quá rõ ràng. Nhưng liệu đó có phải là công việc tốt không khi mà các bạn không vận dụng được kiến thức gì? 3, 4 năm sau khi các bạn đã chán công việc đấy thì các bạn còn lại cái gì khi mà kiến thức học được bằng 0, cả kiến thức phải học ở trường cũng bằng 0 nốt?
Và tất nhiên không phải là không có những bạn dev hay sinh viên “Tây lông” mắc phải những cái “hội chứng” trên, tuy nhiên đa số họ biết bản thân muốn gì và nên làm gì, với một lối suy nghĩ rất độc lập.
Anh Huy thuở còn là sinh viên
  1. (Câu hỏi bạn đọc) Nếu một bạn sinh viên năm 4/mới ra trường hoặc đã đi code được 1-2 năm, muốn đi theo hướng front-end developer thì nên đi như thế nào ạ? Liệu cơ hội làm việc và sinh sống ở nước ngoài như anh có cao không ạ?
  2. (Câu hỏi bạn đọc) Em cũng đang muốn theo front-end nhưng thấy tài liệu nhiều, framework nhiều, lắm cái cần học quá! Học những gì thì đủ hả anh? Anh học công nghệ mới như thế nào ạ?
Nếu các bạn đã code được 1, 2 năm thì có lẽ cũng đã thu được một lượng kiến thức và kinh nghiệm vừa đủ, lúc này có thể tập trung học hỏi để bắt kịp nhịp thay đổi chóng mặt của lĩnh vực Frontend. Và luôn đào sâu, học hỏi những thứ kiến thức nền tảng.
Dù là Frontend hay Backend thì cũng nên tự mình nghiên cứu build một hoặc một vài sản phẩm từ A-Z vì đây là cơ hội để học được rất nhiều thứ.
Follow các developer nổi tiếng trong lĩnh vực Frontend như Dan Abramov, TJ Holowaychuk, David Walsh,… và cũng đừng quên follow các nhân vật tầm cỡ như Dave Cheney, Uncle Bob, Martin Folwer, bạn sẽ có cơ hội học hỏi rất nhiều thứ từ họ.
Sau đó các bạn có thể thử sức với những công ty làm sản phẩm (product) nghiêm túc hoặc các công ty startup nhỏ để có nhiều cơ hội vận dụng kiến thức hơn, về điểm này thì không nhất thiết phải là Frontend mà nó cần thiết với bất kì lĩnh vực nào.
Làm product chán chê thì bạn có thể tìm đường đi ra nước ngoài để tiếp tục học hỏi và trau dồi kinh nghiệm. Không nên tốn thời gian với những công ty quá to, trừ khi bạn thực sự muốn học hỏi quy trình gì đó của họ hoặc cần sự ổn định vì lỡ tay lấy vợ rồi. :v
Ở thời điểm hiện tại thì việc dev Việt Nam đi ra nước ngoài làm việc là một việc hết sức bình thường, và hoàn toàn khả thi, cơ hội thì luôn luôn có, quan trọng là có muốn đi hay không.
  1. Câu cuối anh nhé! Anh có lời khuyên gì dành cho các bạn sinh viên ngành IT và các bạn dev Việt Nam hiện nay không?
Hồi đầu giờ thì anh cũng nói hơi nhiều rồi nên thôi dẫn link vài bài blog của anh bạn để làm lời khuyên cho các bạn:
Cám ơn anh Huy rất nhiều về cuộc phỏng vấn trao đổi vô cùng hữu ích này. Nếu có câu hỏi hay thắc mắc gì các bạn cứ qua blog anh ý comment hoặc hỏi trực tiếp anh Huy nhé.