Thứ Hai, 24 tháng 8, 2020

Từ dép lào đến văn phòng hạng A

 

Từ dép lào đến văn phòng hạng A

Kỷ niệm một cột mốc đáng nhớ trong cuộc đời


Hôm nay ngày 10 tháng 8 năm 2020, tròn 6 tháng Bootcamp bắt đầu từ ngày 10 tháng 2 năm 2020, một ngày đáng nhớ trong cuộc đời của tôi. 

Bỏ qua chuyện vì sao tôi đã từ bỏ lập trình: 

“Bất kỳ người tốt nào cũng có một quá khứ.
Bất kỳ kẻ có tội nào cũng cần một tương lai.”

Tôi đã có một thời gian tự coi mình là kẻ có tội: có tội với bố mẹ, với bản thân, và với tương lai của mình. 

Bỏ lại Hà Nội và gần như tất cả những gì mình có sau lưng, một startup lụi tàn, dự án cá nhân không đi đến đâu, sự học dang dở, các mối quan hệ thân quen, tôi vào núi. Giống như một kẻ trốn chạy chứ không phải là một dị nhân nào đó tìm nơi ẩn giật. Tôi bắt đầu cuộc sống mới mà mình đã tạo ra. 

2014



Bắt đầu cuộc sống lao động, 100% chân tay,  tôi chán ghét những thứ liên quan đến công nghệ. Chính xác hơn là tôi sợ … Vì biết mình ham thích nhưng thực sự không có khả năng thành công với nó. Tự nhủ với lòng mình từ nay sẽ làm bất cứ việc gì chỉ cần không dùng đến đầu óc là được. Ngày ngày được lao động chân tay, hít thở khí trời trong lành, làm bạn với cỏ cây.
Và đây là hành trang của tôi mỗi ngày với công việc của một anh cạo mía thuê:


Cuộc sống an nhàn về mặt tư tưởng lâu ngày, tôi tận hưởng khoảng thời gian đó, không công nghệ, điện thoại thông mình, bạn bè, gia đình. Ngày làm đến khi mệt rã rời, lấy tiền công, đêm ngủ no giấc, vô ưu.
Nhưng bất giác một lúc nào đó, dù chỉ là khoảnh khắc, tôi thấy dòng suối đang chảy êm đềm của mình bỗng tự nhiên bị hẫng một nhịp, rồi lại tiếp tục, lại hẫng, rồi lại tiếp tục với tần suất ngày càng dày hơn. Cái cảm giác hẫng hụt khó thể diễn tả. Tôi biết, cuộc sống hiện tại, về lâu dài không dành cho mình.
Vẫn một niềm tin rằng: Với bàn tay lao động, việc gì ra tiền cũng chính đáng
Nhưng dần dần, cái vẻ ngoài đầu to mắt cận càng trở nên kệch cỡm với công việc hiện tại. Mọi người lúc đầu cứ nghĩ tôi làm cho vui, đủ thứ việc: bán nước mía,  bánh bao, bánh mỳ, bảo vệ, xe ôm.

Sau một thời gian dài, càng ngày càng có nhiều lời nói khiến bản thân mình cảm thấy không ổn và tự ti với chính công việc nuôi sống mình hằng ngày. Bắt đầu thấy ngại với câu hỏi của con trai: “Ba làm nghề gì???”. 
Cảm giác đắng ngắt cổ họng, những buổi trưa hè ngồi trông nhà vệ sinh công cộng tại một khu du lịch
Động lực thay đổi bản thân lớn dần, tôi bắt đầu tìm lại con đường.

 2016

Ở tỉnh lẻ, kiếm một công việc liên quan đến lập trình không khác gì mò kim đáy bể. Không có môi trường thực tế, tôi thử tự tạo cho mình môi trường trên mạng để có thể quay lại với lập trình, hoặc chí ít với máy tính. 
Sau giờ làm việc, tôi cố gắng tìm lại kiến thức, luyện tập kỹ năng, học lại các video trên mạng. Nhưng đều thất bại. Nguyên nhân tôi liên tiếp thất bại  các bạn có thể đọc trong blog này 
Tôi bỏ công việc cũ, xin vào làm ở một công ty có chút hoạt động mảng kỹ thuật với hy vọng mong manh có một cái nghề tử tế. Hóa ra tôi suýt có một cái nghề “tử tế” thật.
Với khả năng lĩnh hội nhanh, sử dụng phần mềm máy tính thành thạo, nhãn quan tốt. Tôi trở thành Kỹ thuật viên Ánh sáng. Ngày đêm mài đũng quần ở các quán Karaoke, Bar, Club lớn nhỏ dưới danh nghĩa “Phù thủy ánh sáng”!
Công việc mới là sự kết hợp giữa chất kỹ thuật và chất nghệ sĩ đem lại cho tôi nguồn vui mới, thu nhập tốt, những cuộc chơi, những mối quan hệ, du lịch  đây đó khắp nẻo đường đất nước. 
Cái cảm giác của người có tiếng, đi đâu cũng được anh em trong nghề nhắc tên, khách hàng săn đón, cũng phê. Nó khiến tôi dường như bị lóa mắt trong một thời gian khá dài. 
Bỏ bê gia đình, chạy theo đồng tiền, những cuộc vui thâu đêm, những mối quan hệ không rõ ràng. Hóa ra tôi lại lầm đường. Mục tiêu ban đầu đã biến mất. Tôi lạc lối trong một dòng chảy vô phương.
Bắt đầu từ đây, tự nhiên tôi lại có một sở thích mới, chẳng rõ ràng để làm gì: Chụp ảnh lại chân của mình trong những chuyến đi, những địa điểm mình đã đặt chân. Từ địa đầu Móng Cái đến Đất mũi Cà Mau, tôi cứ trôi hết chỗ này chỗ nọ mà không để ý rằng, tôi đã dần xa khỏi mục tiêu ban đầu.

Một lần sau khi suýt đánh mất mình, nghĩ nhiều về tương lai hơn, nhìn lại điều làm động lực lúc khởi đầu, nhìn lại bản thân. Tôi quyết định thay đổi bản thân một lần nữa. Rời bỏ công việc hiện tại là nguồn thu chính. Tôi bắt đầu tìm lối rẽ. Lần này phải chọn đúng đường. 
Tôi bắt đầu note lại những điểm mạnh sẵn có của bản thân để tìm hướng đi có nhiều cơ hội nhất.
Đó phải là cơ hội rõ ràng và an toàn, vì tôi bây giờ đã khác, gia đình ở trên vai. 
Rồi đi đến quyết định: “Ngã ở đâu, đứng lên ở đấy”. Tôi tìm kiếm cơ hội trở thành lập trình viên, một hướng đi thử thách nhưng rõ ràng là điều bản thân mình đang có sẵn thế mạnh. 
Tìm lại những đầu mối từ ngày còn đi học. Tôi tìm đến thầy Khoa, thầy Nhật, thầy Đới  - đầu mối duy nhất tôi còn sót lại để tìm kiếm thông tin. Và rồi đến với CodeGym - nơi tôi nghĩ rằng sẽ là chiếc thuyền tốt nhất đưa mình sang sông.

Dành dụm một khoản ngân sách đủ để đóng học phí và duy trì gia đình trong 6 tháng. Tôi đặt hết niềm tin vào khóa BootCamp, hy vọng mọi chuyện suôn sẻ để tìm được một công việc trong khoảng thời gian như kế hoạch.

Ngày 10 tháng 2 năm 2020, hôm nay tôi đi học
Quay lại môi trường “tri thức” không khỏi khiến tôi mất cân bằng một thời gian. Gần như cả thập kỷ không dùng đến “não”. Những ngày đầu khá chật vật với nhiều thứ “logic”.  May mắn được vào một tập thể tốt và đặc biệt là người bạn đồng hành vô cùng nhiệt huyết. Cô giáo Châu - một người tôi không nghĩ là sẽ ảnh hưởng đến suy nghĩ của mình nhiều đến vậy…


<Quá trình học tập> Blah Blah …..

Ngày 10 tháng 8 năm 2020 …… tròn 6 tháng khóa BootCamp. Tôi nhận được email offer từ một doanh nghiệp. Một công việc đang chờ đón. Một tương lai mới đã bắt đầu. Niềm tin đã bắt đầu trở thành hiện thực.

Ngày 12 tháng 8 năm 2020…. Bước chân đầu tiên vào văn phòng, tầng 15, tuy độ cao vật lý chẳng thể so với những nơi tôi đã đặt chân tới. Nhưng đối với tôi lúc đó, nó thực sự làm mình chóng mặt. Bản thân tôi cảm thấy mình đã ở một  độ cao hơn rất nhiều so với 6 tháng trước đấy.


  • MỌI CHUYỆN LẠI CHUẨN BỊ BẮT ĐẦU
  • NHỮNG KẾ HOẠCH VÀ MỤC TIÊU MỚI CẦN CHINH PHỤC
  • XIN CẢM ƠN NHỮNG NGƯỜI THẦY, NGƯỜI BẠN, CON THUYỀN NÂNG BƯỚC

Thứ Ba, 7 tháng 4, 2020

Câu chuyện có thể của bất kì ai!


Bỏ qua câu chuyện tôi đã biết đến máy tính và công việc lập trình như thế nào. Vì đó có lẽ là câu chuyện của riêng tôi. Nhưng có một câu chuyện chắc không hẳn chỉ mình tôi gặp phải. Đó là câu chuyện khi chúng ta bắt đầu sự “quyết tâm” làm một việc gì đó.


Tôi nhiều lần thể hiện quyết tâm tiếp tục sự học lập trình của mình, điên cuồng lao vào đăng ký các khóa học trực tuyến, subcribe bất cứ website nào tôi ghé qua đẻ đọc tài liệu, tiện tay like đến hàng trăm fanpage và follow bất cứ tài khoản twitter nào tôi nhìn thấy được liên quan đến lĩnh vực công nghệ. Hòm thư của tôi đầy ắp email đến từ các trang công nghệ và trang học liệu.


Trong những ngày đầu tiên, tôi cảm thấy mình thực sự là một con người khác, tràn đầy hứng khởi và tự tin khi mới viết được những dòng code HelloWorld đầu tiên, những kiến thức về lập trình như một liều cafein cực mạnh kích thích tôi cao độ.
Tôi giữ được tâm thế đó trong khoảng hai tuần đầu tiên. Có những khoảng thời gian buổi tối sau khi trở về từ công việc chính, học và nghiên cứu một cách nghiêm túc và chăm chỉ với hy vọng một ngày nào đó tôi có thể tự tin rời bở công việc hiện tại. Ngày nào cũng ngồi trước màn hình máy tính đến quá nửa đêm, chìm đắm trong thế giới riêng tôi tự tạo cho mình.

Thứ Năm, 5 tháng 3, 2020

10 bước để viết thuật toán giải quyết các vấn đề trong lập trình

Mẹo dành cho các lập trình viên mới vào nghề không biết bắt đầu từ đâu

Tôi nghe một số developer mới vào nghề đang xoay sở và không biết bắt đầu từ đâu rằng họ hiểu vấn đề, hiểu logic, các syntax cơ bản, etc. Lúc nhìn code của người khác thì có thể hiểu, nhưng nếu tự làm thì lại không cảm thấy chắc ăn lắm khi chuyển suy nghĩ của mình thành code ngay cả khi họ hiểu syntax hoặc logic. Đây là trình tự hoặc là các mẹo để giải quyết các vấn đề(ví dụ) đó, hy vọng sẽ có ích với bạn.

1. Đọc vấn đề ít nhất 3 lần(hoặc cho đến khi nào bạn cảm thấy thoải mái)

Bạn không thể giải quyết vấn đề nếu bạn không hiểu(đừng thử vận may bằng cách sửa hàm này, sửa biến kia). Có sự khác nhau giữa vấn đề thực sự và vấn đề mà bạn nghĩ là mình đang sửa. Đọc vài line code đầu và bạn sẽ dễ dàng lâm vào sai lầm là giả định phần còn lại của nó cũng tương tự. Nếu làm một cái game nổi tiếng như Hangman, chắc chắn rằng mình đã đọc qua tất cả các rule ngay cả khi bạn đã từng chơi nó trước đó. Một lần tôi làm game giống Hangman và nhận ra rằng mình chỉ là "Hangman Quỷ Dữ" vì chỉ đọc hướng dẫn mà không đọc tất cả các rule. Vì vậy hãy đọc nốt pần code còn lại. Đừng hiểu một nửa, sẽ khiến bạn hiểu nhầm vấn đề, bỏ thêm thời gian lúc đầu này sẽ có giá trị, càng hiểu nhiều thì sẽ càng giải quyết vấn đề dễ dàng.
Giả vờ như chúng ta đang tạo một function đơn giản selectEvenNumbers là trả về một mảng các số chẵn evenNumbers trong một mảng hỗn hợp các con số chẵn lẻ. Nếu không có số chẵn nào cả thì trả về mảng rỗng evenNumbers
function selectEvenNumbers() {
  // your code here
}
Sau đây là vài câu hỏi chạy qua trong đầu tôi:
  • Làm thế nào mà máy tính biết số nào là chẵn? Chia nó cho 2 và xem phần còn lại có là 0
  • Tôi sẽ gán cái gì vào function này? Một array
  • Mảng đó chứa cái gì? Một hoặc vài con số One or more numbers
  • Kiểu dữ liệu của từng element trong array? Các con số
  • Mục đích của function này là gì? Tôi sẽ trả về những gì vào cuối function? Mục tiêu là lướt qua các phần tử và chọn ra các số chẵn rồi cho nó vào array và trả về ở cuối function, nếu không có số chẵn nào thì trả về array rỗng.

Chủ Nhật, 23 tháng 2, 2020

Tự nghiên cứu về DOM (Document Object Model) trong HTML cơ bản

Bên cạnh những khái niệm cơ bản của HTML/CSS và JavaScript mà bất cứ newbie nào cũng làm quen và thực hành theo các đoạn code mẫu khi bước chân vào thế giới phát triển web, có một từ viết tắt mà mình đã ấn tượng và muốn biết nhiều hơn khi được nghe và giới thiệu qua nhưng chưa có thời gian, vì còn lo chạy Backlog ---> đó là DOM.

Bài viết này nhằm chia sẻ những kiến thức về DOM mà mình có buổi chiều tự trải nghiệm thực hành để hiểu sâu hơn về những dòng code đã viết.

DOM (Document Object Model): dịch ra trên Wiki thì có nghĩa là "Mô hình đối tượng tài liệu" có dạng cây cấu trúc dữ liệu. Mình bắt đầu cắt nghĩa từng từ và tra Google để có các từ khóa sau:

  • Model - Mô hình / Mẫu hình: Hiểu nôm na là từ khi xuất hiện khái niệm lập trình máy tính đến nay, có nhiều kiểu lập trình, từ trên xuống, từ dưới lên, từ trong ra từ ngoài vào ... bla ... bla ... bla... trong suốt quá trình lịch sử đó, người ta thống kê, nghiên cứu và chỉ ra một số cách tư duy và cách lập trình phổ biến, hiệu quả, khoa học và biến nó thành kiểu kinh điển, để cho con cháu đời sau cứ kiểu đó mà làm. Xuất hiện khái niệm "Mẫu hình lập trình" và theo wiki thì đó là việc cung cấp (và xác định) quan điểm mà người lập trình có về sự thực thi của chương trình. Sẽ có nhiều mẫu hình lập trình mình sẽ được tiếp cận và DOM là mẫu hình mình được biết đến đầu tiên.
  • Object - Đối tượng: Ngày trước học văn hay có kiểu "nhân hóa" tức là biến một sự vật hiện tượng vô tri có những hành động và suy nghĩ của con người. Thì nay việc "đối tượng" hóa một thành phần trên trang html có nghĩa là cung cấp cho nó những đặc tính, thuộc tính, các cách hoạt động, cách tương tác riêng. Và giờ mình không chỉ biết đến thẻ là thẻ, tag là tag nữa. Chúng nó là đối tượng để mình sử dụng rồi :D
  • Document - khỏi dịch nhé vì có nghĩa luôn là tài liệu: là trang HTML của bạn rồi.
Cứ nghĩ là: WEB = HTML + CSS + JAVASCRIPT
Nhưng WEB = DOM + JAVASCRIPT cũng đúng
Và mình bắt đầu đối xử với HTML không phải như đối xử với text nữa mà tôi sẽ xử lý nó với khái niệm DOM vừa học được.

CẤU TRÚC: CÂY DOM

Trước hết, mình bỏ qua việc coi các thành phần của trang html là các thẻ <p>, <h1>, <a>,  ... bla bla ... thay vào đó mình chỉ biết đến các nút (hay các node). Vì ông DOM này có dạng cây để quản lý, nên người ta xếp các Node này vào một hình cây và "nhân hóa" nó lên bằng việc tạo gia phả cho cả họ nhà Node.

Nhà Node có nhiều thế hệ cấp bậc, nhưng có 3 thế hệ quan trọng: node gốc (document node) là kiểu ông cố cụ - to nhất nhà; node phần tử (element node) là kiểu con cháu - rất nhiều và loằng ngoằng
; cuối cung là node văn bản (text node) là kiểu chắt chút chít - không có nhiều quyền hành, chỉ hiển thị text thôi.
Để trực quan mình sẽ viết đoạn code thể hiện để dễ nhận mặt cả họ nhà Node


Rồi bây giờ để xem mối quan hệ của nhà node ở ví dụ này thế nào nhé:

  • Node gốc - Document node là nút đầu tiên có hai ông con là element node - head; element node - body
  • Element node - Title là con của ông bố element node - head
  • Ông bố element node - body có các con là element node h1 | p | link
  • Element node - link lại có con và cháu là text node  và attribute node - href
  • Các element node -  h1 | p | a là anh em với nhau
Như vậy có thể thấy
  1. Một node không phải node gốc đều có một cha
  2. Một node cha có thể có một hoặc nhiều node con hoặc không có con
  3. Các node cùng cha thì là node anh em với nhau, mà đã là anh em thì có anh cả và em út