Trở thành Software Engineer Từ Số 0

Mình muốn viết theo câu chuyện của mình nghĩ để kể về con đường học lập trình của cho nó sinh động tếu tếu hài hài voz voz nhưng mà thôi nay mình mới đi tiêm vaccine nên các bạn tạm đọc chia sẻ của mình bên dưới nha. Tham khảo rồi tìm tòi học thêm. Nếu các bạn mày mò có chút hứng thú với bảo mật hay học lập trình cũng như cách để tìm học công nghệ thì có thể xem qua.

Phần I – CON ĐƯỜNG MÌNH ĐI ĐẾN VỚI LẬP TRÌNH

Tìm đọc các bài viết về công nghệ, tham gia vào các cộng đồng lớn:

Nguồn mà mình biết đó là Viblo, Quora, Medium có rất nhiều bài viết công nghệ để cho bạn tìm kiếm. Cộng đồng thì có Reddit, Discord đầy ra í các bạn.

Nguồn học vừa chất vừa miễn phí và những kỹ năng tự học cũng như đặt mục tiêu:

Học lập trình thì mình biết có w3school[.]com(cơ bản), freecodecamp[.]com (lập trình cơ bản). Có hacksplaining[.]com tryhackme[.]com để học bảo mật. AI thì khó hơn có thể tìm các khóa ở Cousera Udemy nhưng mà nên là một trình viên học đến đâu thì học toán đến đấy. Chưa là lập trình viên thì cũng nên giỏi toán từ trước. Nên vừa học cày cuốc thuật toán mỗi ngày với Hackerrank hay Viblo Code. Vừa học tiếng Anh mỗi ngày(Mình thì tiếng Anh cơ bản giao tiếp cơ bản với khách hàng hay đọc tài liệu đều được). Trình độ B1 rồi từ từ học thêm. Học cách tự học, tìm kiếm là một kỹ năng quan trọng. Đọc nhanh, quản lý thời gian, lập plan, đặt mục tiêu ước mơ cho mình. Facebook mà mấy clip vớ vẫn thì ẩn hết hay tin giật gân drama ẩn hết hoặc unfollow luôn. Youtube cũng thế siêng coi tutorial lập trình.

Lập trình cơ bản

Với lập trình cơ bản thì chúng ta có thể bắt đầu với lập trình C(môn này mình làm dự án quản lý thư viện) và học lưu đồ thuật toán( mình follow thầy Nguyễn Tấn Trần Minh Khang nha ^^). Trước đó thì mình làm quen với lập trình scratch[.]mit[.]edu hoặc code[.]org để làm quen với các khối lệnh đơn giản chỉ kéo thả thôi mà cũng không kém phần phức tạp khi chúng ta tạo ra các con game ^^. “Hồi đó tôi cứ nghĩ mình sẽ làm một con game tối tân nhất mà ở Việt Nam chả thèng nào làm được.” trích dẫn lời thoại Độ Mixi From Mixi with love ^^ . Trong quá trình học thì khi mới bắt đầu mình đã gặp rất nhiều khó khăn nhưng mình không bỏ cuộc và cuối cùng thì mình cũng vượt qua. Lập trình cơ bản thì nên dùng bút dùng giấy nhiều và sau khi vẽ sơ đồ khối cho biết input và output để giải quyết một bài toán. Hoặc bạn cũng có thể viết bằng ngôn ngữ tự nhiên bằng cách scope bài toán và cụ thể từng bước một. Thường thì mấy đứa logic kiểu thông minh về ngôn ngữ thường code sai, hiểu thì hiểu đấy . Ở đây thì code bắt đầu chú ý đến cách đặt tên biến, sau này các bạn mới biết đặt tên biến khó khăn như thế nào. Cứ ngỡ hồi đấy mình code với những tên biến a, b, c, d, x, y, z là ngầu. Code phải dài, phải phức tạp mới ghê cơ nhưng nó là good grade khi còn đi học. Sau này đi làm thì code sao cho đơn giản dễ mở rộng. (1 tháng học trên code[.]org or scratch[.]mit[.]edu tạo ra vài con game, 1 tháng học lập trình C, 1 tháng làm dự án)

Ở giai đoạn tiếp theo thì mình được học database cơ bản(dự án cho môn này mình và bạn làm cơ sở dữ liệu quản lý học sinh). Đoạn này mình cũng biết chuẩn hóa dữ liệu, biết dùng các câu lệnh truy vấn bla bla. Và cũng đoạn này mình được học Algorithm & data structures. Nói chung là đến đây các bạn nên duy trì học Algorithm và tiếp tục trau dồi tiếng Anh đặc biệt là phát âm. Có phát âm tốt thì nghe tốt mà nghe với nói tốt thì có thể giao tiếp tốt mà giao tiếp tốt thì có thể làm nền móng vững chắc để học tiếng Anh lâu dài chứ không phải học lấy cái điểm writing hay gì ấy không thôi rồi về ngừng luyện nói luyện giao tiếp thì dỡ. Ở trên thì là cốt lõi rồi . Còn nếu ở trường đại học có gì nữa nhỉ những môn khó ăn như đại số tuyến tính; giải tích 1,2,3; toán rời rạc,…^^.. (3 tháng học song song cả database, algorithm & data structures )

Khi code lỗi bung ra thì cứ stackoverflow nhưng mà trước khi tìm thì hãy coi kỹ cái lỗi bạn mắc phải đọc một lần 2 lần đến 5 lần đã ko tự fix được thì mới bắt đầu tìm nha.

IT toàn tiếng Anh không à, ko có tiếng Anh thì các bạn như cưỡi ngựa xem hoa tầm đi làm 9 năm nữa vẫn là coder thì lúc ấy bạn dễ bị out nghề nếu không quan hệ làm quen với nhiều chị em từ trước. Tụi bạn hay người mình quen lên chức sau này có mà alo khi bạn lên senior rồi í hi hi.

UML, OOP, JAVA (mình cùng một bạn làm dự án quản lý học sinh). 1 tháng học 1 tháng làm.

Mình làm về phần mềm nên phần tiếp theo mình đã học đó là:

HTML, CSS, Bootstrap, JS, PHP(Hai dự án: 1 là rent buy sale real estate, 2 là quản lý học sinh 2 ^^) code thuần thôi ^^. 1 tháng học 1 tháng làm.

HTML, CSS, JS Thì nên học reponsive và design luôn. Học design xong tự thiết kế rồi cắt HTML CSS. Khuyên là xem học hỏi các tutorial reponsive í từ nước ngoài đọc cói cách tổ chức code rồi comment cũng như tên biến các kiểu. Mình thấy lấy chứng chỉ ở Freecodecamp cũng khá hợp cho các bạn ở giai đoạn này.

Git: Đến đây cá bạn nên tìm kiếm học Git nhé. Đẩy dự án lên git học từ git sẽ được rất nhiều. Tìm cách search cách đọc code. Tìm hiểu về clean code anh em đồng nghiệp sẽ đỡ khổ chứ ra làm mà code phèn tội nghiệp người sau tham gia vào dự án lắm.

Đến đây trình bạn khá oke để đi cắt html, css lương tầm 6 – 7tr. Đọc clean code tìm nguồn học reponsive tutorial chất lượng mà follow nha. Ra làm không được bị khách chửi sờ mặt đó ^^. Reponsive thì khi code bạn code từ giao diện mobile lên nha sau đó thì thêm mấy thẻ media vào để set lại giao diện cho từng màn hình.

Giờ xịn sò thì bắt đầu học thêm Framework thôi nào. Aw bạn học JS và PHP rồi thì giờ bạn có thể học back-end trước như Laravel hay Nodejs nhỉ tùy bạn chọn và bắt đầu xây dự án cho riêng mình. CRUD, SEARCH, FILTER, ADD TO CARD, PAYMENT, CHAT, … ^^Tutorial nhiều mà lên đấy mà coi. Khuyên là các bạn không nên học vẹt nhảy cóc vào học Framework mà chả hiểu cái gì về bản chất. Nên là lập trình cơ bản vẫn là cốt lõi để bạn có thể bắt đầu với hướng đi nào bạn muốn. Là Algorithm, là tiếng Anh, là kiến thức về OOP, là kiến thức về Database, ngoài ra thì kỹ năng mềm và thói quen cách ứng xử của bạn hằng ngày cũng rất quan trọng.

Bạn nào giỏi thì học thêm Frontend chọn một trong những Framework như Reactjs, Vue, Angular. Mình chọn Reactjs vì sau có thể học React Native làm moible với Facebook bảo kê nên còn lâu mới chết. Biết webpack, scss. Và nay thì viết bằng Typescript viết theo hướng functional. Hooks í ^^. Rồi thì biết về Redux để quản lý trạng thái … bla bla nó ảo diệu lắm học đã mới biết được. Nay còn có cả GraphQL nữa. Bạn có biết Progressive Web App, với cái này bạn có thể tạo một trang web và khi người dùng đăn nhập vào thì nó cho một thông báo để người dùng có thể chọn tải App về máy tuy nó không được đầy đủ tính năng như Native App nhưng phần nào ta có thể thấy Web app có thể là một phần trong tương lai của ngành làm phần mềm. Mobile thì có Flutter mới nổi ấy nhưng mà khó hi hi.

Chọn cái nào cũng được miễn là vẫn luôn giữ niềm yêu thích với code. Ngày ngày fix bug. Chú ý sức khỏe chọn một nơi yên tĩnh sống để làm ngày đêm 10h là đi ngủ để 5h sáng thức dậy. Chứ kiếm tiền nhiều để rồi chữa bệnh thì hơi toang. Ảnh hưởng gan, người yếu đi từng ngày mà không biết cứ nghĩ mình quen ai ngờ 26 tuổi trở đi nhìn lại thì mới biết. Người đi làm vì đam mê cũng nhiều. Nhưng đa số các bạn nói đi bạn đi làm vì tiền. Chính xác vì tiền nhé hehe. Fix bug lòi le khổ thây bà trừ khi bạn là thiên tài thì khác mọi chuyện nó sẽ nhanh, màu hồng nhưng mà vẫn phải học. Không chịu học thì đố mà tài đến đâu cũng thế +_-. Đi làm thì tiền dư kiếm được đó để làm những gì nhỉ theo các bạn? Mình là mình mua đất trả góp mà được của ló đất tiềm năng thì vài năm nó x lên mình lời còn đồng tiền thì chỉ có thể lạm phát nên là không nên cất quá nhiều tiền trong ngân hàng đâu hay để nó nằm im ^^. Có thể nhiều bạn bữa đói bữa no do chi tiêu trong quá trình học tập và làm việc nhưng khi đã có một công việc hay còn nhận hỗ trợ từ gia đình thì nếu bạn biết quản lý chi tiêu lại từng ngày thống kê nó ra một bảng excel tập sử dụng thành thạo các hàm trong Excel cac bạn có thể trở thành thần đồng Excel đấy ^^. Nói chung hoặc các bạn quản lý hoặc có một người nửa kia của bạn biết nghỉ cho bạn thì may ra có thể vun đắp đi cùng nhau phát triển lâu dài. Hay có những bạn đã có cơ ngơi từ trước và đi làm chỉ thỏa đam mê thì lại khác. Cuộc sống muôn màu trên đây là suy nghĩ cũng như chia sẻ của mình có những điều có thể hoặc chính xác là chưa đúng thì mong các bạn bỏ qua góp í cho mình ở dưới phần bình luận. Còn để học thì nên cứ nắm chắc đi qua phần lập trình cơ bản. Duy trì phát triển khả năng tiếng Anh và Algorithm. Sau cùng khi đã có một profile hoàn chỉnh update lên Linkedln cùng với các chứng chỉ tương ứng với từng phần như trên thì các bạn đã có thể có được công việc. Với các bạn cũng không nhất thiết là học xong lập trình cơ bản đi theo như mình mà nên tìm hiểu kỹ về ước mơ, mục đích ,khả năng, và định hướng cũng như đáp ứng được nhu cầu của thị trường bạn nhé.

Có một vài tin tức về low code mình có nghe nói một vài năm gần đây nhưng theo mình thì cứ học cho chắc lập trình cơ bản. Rồi sau đó mà đi lên. Chúc các bạn thành công.

Tác giả: Nhi Nguyễn

PHẦN II – MỘT SỐ KIẾN THỨC VỀ H*ACH WEB

(Cái dưới mình lụm chủ yếu kiến thức này các bạn có thể tìm đọc medium, quora đầy)

Các bạn theo lập trình kể từ khi thành lập bao lâu rồi. Nay mình lụm được bí kíp 300 bài h*ack web thiếu nhi. Mình muốn viết theo câu chuyện của mình nghĩ cho nó sinh động nhưng mà thôi nay tạm đọc thế này nha. Tham khảo rồi tìm tòi tự học thêm. Chủ yếu mình muốn share tips để bắt đầu với lập trình cho tới những nguồn học chất lượng mà bạn chỉ cần bỏ tiền mạng thường ngày có thể lướt facebook ra là có thể học được rồi ^^và những kỹ năng nên có khi học lập trình. Biết và có được chưa chắc đã thành công nhưng nó sẽ thành công khi bạn yêu thích và kiên trì với nó. Chúc tất cả thành công và có thêm một kiến thức mới về hack web cũng như nguồn, kỹ năng học lập trình cũng như có thể áp dụng cho mọi ngành nghề khác khi vẫn chưa biết nhé.

Internet ngày nay đã trở thành một phần không thể thiếu trong cuộc sống của mỗi chúng ta. Cùng với sự phát triển của internet, các website cũng ngày càng phức tạp hơn so với những phiên bản đầu tiên của nó vào những năm 1990. Website bao gồm 2 phần chính, là front-end (bộ mặt của website) và back-end(bộ não của website). Back-end là khu vực xử lý các thao tác với database (cơ sở dữ liệu), trả lại các giá trị dựa trên những request (yêu cầu) mà client (người dùng) gửi lên server. Vì back-end là nơi lưu trữ các dữ liệu quan trọng của người dùng một trang web như tài khoản, mật khẩu, thông tin cá nhân,… nó trở thành mục tiêu tấn công của các hacker, nhằm vào các thông tin nhạy cảm. Việc xây dựng một trang web cũng vô cùng phức tạp, nên các lỗ hổng bảo mật (vulnerability) xuất hiện là điều không thể tránh khỏi, dẫn tới sự xuất hiện của lĩnh vực “Web Exploitation” (khai thác ứng dụng web). Năm 2017, OWASP đã công bố 10 lỗ hổng nghiên trọng, phổ biến trên website như sau:

  • Injection: Hậu quả của việc server nhận dữ liệu không được kiểm chứng và được biên dịch dưới dạng các câu lệnh hoặc các query (truy vấn trong cơ sở dữ liệu). Tiêu biểu phải kể đến SQL Injection, lỗi xuất hiện trên hệ cơ sở dữ liệu SQL. Lỗi này có thể giúp hacker xem, xóa, sửa, các thông tin trên hệ cơ sở dữ liệu. Bên cạnh đó chúng ta còn có LDAP injection và HTTP header injection. Tất cả các lỗ hổng trên đều dễ gặp phải ở những trang web của những lập trình viên mới vào nghề, còn ít kinh nghiệm (ngoại trừ trang web của tập đoàn B* nào đó )
  • Cross-Site Scripting XSS: Xảy ra khi hacker chèn mã độc (thường viết bằng ngôn ngữ JavaScript) thông qua các đoạn script để thực thi ở phía client. Thông thường, một đoạn mã độc được ngụy trang dưới dạng dữ liệu xuất nhập thông thường sẽ được gửi lên server. Nếu không có các bộ lọc dữ liệu độc hại, mã độc sẽ được chèn vào mã nguồn của ứng dụng web (ta thường gọi trang web đó đã bị XSS) và bất cứ lúc nào người dùng bình thường truy cập website, các mã độc đó sẽ thực thi ngay trên trình duyệt của người dùng.
  • Broken Authentication: Ứng dụng web có thể cài đặt phần đăng nhập không chính xác, khiến cho hacker có thể chạy các trình brute-force nhằm tìm được chính xác tài khoản và mật khẩu của người dùng, dẫn tới việc chiếm tạm thời hoặc hoàn toàn tài khoản đó.
  • Sensitive Data Exposure: Rất nhiều trang web và các API thường không bảo vệ các dữ liệu nhạy cảm của người dùng như thông tin tài chính, sức khỏe,… một cách hợp lý. Ví dụ, mật khẩu, tài khoản được mã hóa sơ sài trong cookies. Điều này dẫn tới các dữ liệu ấy có thể bị lấy được trong quá trình truyền dữ liệu từ client tới server.
  • Broken Access Control: Lỗi này xảy ra khi có lỗ hổng trong việc hạn chế người dùng bình thường truy cập vào các vùng bị hạn chế. Kẻ tấn công có thể tìm thấy các lỗi này và truy cập vào các vùng bị cấm, chỉnh sửa thông tin người dùng, thay đổi quyền của admin, đánh cắp thông tin của toàn bộ hệ thống….
  • XML External Entities (XXE)): Nói đơn giản, lỗ hổng này nhằm tới file XML (một loại ngôn ngữ đánh dấu) trên các ứng dụng web. Các file XML quá cũ hoặc được cài đặt kém sẽ là đối tượng tấn công, vì đã để lộ các thông tin như port, shared file, … Hacker sẽ khai thác các thông tin này để scan port, thực thi code từ xa, hoặc thậm chí là DoS và DDoS.
  • Security Misconfiguration: Đây là lỗ hổng thường gặp nhất và là hậu quả của việc sử dụng các cài đặt mặc định, vốn không an toàn trước những cuộc tấn công. Lỗi có thể xảy ra ở các kho lưu trữ đám mây mở, việc đặt HTTP header sai, hoặc các thông báo lỗi rườm rà sẽ chứa các thông tin nhạy cảm. Vì vậy, các hệ thống không chỉ cần được cài đặt một cách an toàn, chúng còn cần được cập nhật liên tục.
  • Insecure Deserialization: Lỗ hổng này có thể dẫn tới việc thực thi các mã ở máy khách hàng. Dù việc này không dẫn tới việc thực thi mã độc từ xa, nó cũng có thể được dùng để tạo ra các cuộc tấn công, bao gồm tấn công lặp lại, tấn công kiểu injection, và tấn công leo thang đặc quyền.
  • Using Components with Known Vulnerabilities: Xây dựng 1 website cần rất nhiều thành phần, bao gồm thư viện, framework, các module phần mềm, và chúng sẽ chạy với quyền tương tự như quyền của ứng dụng web đấy. Nếu một trong các thành phần đang chạy bị hack, hacker có thể lợi dụng quyền của nó để xâm nhập vào hệ thống.
  • Insufficient Logging & Monitoring: Như tên gọi của lỗi này, ghi nhật ký và giám sát không đầy đủ, việc khai thác có thể gây nên các sự cố rất lớn. Kẻ tấn công dựa vào việc thiếu giám sát và phản ứng kịp thời để đạt được mục tiêu của chúng mà không bị phát hiện.

Nói chung, các lỗ hổng này thường được chia thành 3 mức độ nguy hiểm. Mức đầu tiên là các lỗ hổng gây ảnh hưởng tới 3 thuộc tính của dịch vụ là: Tính bảo mật, tính toàn vẹn và tính sẵn sàng. Nguy hiểm hơn là các lỗ hổng có thể gây nên việc thực thi mã từ xa. Và nguy hiểm nhất, chính là lỗ hổng gây nên các cuộc tấn công leo thang đặc quyền. Khi hacker thành công trong việc leo thang đặc quyền, hacker sẽ trở thành bố của hệ thống, có thể tùy ý tung hoành ngang dọc trong hệ thống mà không bị ai chặn lại, thậm chí có thể xóa luôn cả hệ thống ấy. Vì vậy, bên cạnh việc xây dựng giao diện thật đẹp, cũng như các tính năng hữu ích, việc bảo vệ hệ thống và tìm kiếm, nghiên cứu các lỗ hổng ứng dụng web mới luôn được đặt lên hàng đầu để tránh các hậu quả nặng nề.

Mình có tên nhưng mình không chia sẻ ^^ Và cũng đừng tìm mình vì mình đơn giản mình đã rút kinh nghiệm từ những lần chia sẻ trước. Bạn nào kiên trì đi được và cố gắng tự học trong mùa dịch này và qua tết qua hè năm sau là có thể tạo CV xịn sò rồi có việc được rồi mà không cần phải qua trường lớp. Tuy nhiên trong quá trình học thì nên tìm mentor tìm các nhóm học lập trình cũng như tìm kiếm các phương pháp học và áp dụng vào. Nhiều lúc nản dễ bỏ cuộc nên trên con đường nên có bạn. Độc lập thì sáng tạo nhưng nếu có bạn thì bạn đi được xa hơn.

Tác giả: Nhi Nguyễn – từ J2team

Previous Post Next Post