Những gì chúng ta đang làm, sản phẩm ta phát triển, nó có thực sự tạo ra một sự tác động tích cựcnào đó cho khách hàng tiêu thụ.. Lưu ý“Thông Tin Bảo Mật” bao gồm toàn bộ thông tin và dữ
Trang 1KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
ỨNG DỤNG HỖ TRỢ TUYỂN DỤNG TALARIA
Công ty thực tập Công ty cổ phần và công nghệ Geek Up
● Đặng Vũ Minh Hiếu
TP Hồ Chí Minh, tháng 12 năm 2021
Trang 2Lời mở đầu
Một mô hình kinh doanh, tồn tại được trên thị trường một phần không nhỏ đóng góp đến
từ tập khách hàng mục tiêu Ông bà ta hay có câu: “khách hàng là thượng đế” cho thấy
tầm quan trọng của khách hàng và việc một ý tưởng kinh doanh có thành công hay khôngđến từ việc chúng ta mang lại bao nhiêu giá trị cho khách hàng mục tiêu? Những gì
chúng ta đang làm, sản phẩm ta phát triển, nó có thực sự tạo ra một sự tác động tích cựcnào đó cho khách hàng tiêu thụ
Phần mềm là sản phẩm của sự tiến bộ, đóng vai trò ngày càng quan trọng trong đời sốngmỗi con người Mọi người thời đại này kết nối với nhau dễ dàng hơn thông qua phầnmềm Lấy ví dụ như một công ty, không cần biết vị trí địa lý xa hay gần, chỉ cần một cáiwebsite là mọi người đều có thể truy cập và cập nhật thông tin về công ty này Ở góc độmột công ty tổ chức, phần mềm mang lại giá trị cho khách hàng Giải pháp cho một vấn
đề nan giải nào đấy có thể được đóng gói chỉ bằng một phần mềm, thật là một ý tưởngtuyệt vời
Thấu hiểu được tầm quan trọng của phần mềm, em quyết định đây là thời điểm để mangnhững kiến thức đã tiếp thu trong trường áp dụng vào thực tiễn Vậy nên em chọn Geek
Up là môi trường để học hỏi và cọ xát
Trang 3Lời cảm ơn
Em xin trân trọng cảm ơn phía công ty đã tạo ra một chương trình thực tập, tạo điều kiệnhọc hỏi và cọ sát thực tế cho sinh viên Đây là một chương trình rất có ý nghĩa và emcũng hiểu rằng phía công ty đã rất nỗ lực đầu tư và duy trì một chương trình nhằm giúpcác bạn sinh viên có cơ hội phát triển và chứng tỏ năng lực
Chương trình thực tập, xây dựng product thực chiến trong 10 tuần là một trải nghiệm thật
sự rất khác, nằm ngoài mong đợi Xuyên suốt chương trình, em được tiếp xúc với nhiềuanh chị có rất nhiều kinh nghiệm trong việc phát triển sản phẩm số, tham gia workshopchia sẻ và kiến thức Sau chương trình em đã tiếp thu được những kiến thức nền tảng nhất
để phát triển và triển khai một sản phẩm phần mềm
Đặc biệt cảm ơn anh Nguyễn Minh Trung và Đặng Vũ Minh Hiếu đã luôn túc trực và tíchcực giải đáp những câu hỏi, thắc mắc Cảm ơn team GA (Geek Acquisition), đặc biệt làchị Uyên Phan đã luôn theo dõi, quan tâm và nhắc nhở team logwork mỗi ngày Cảm ơntribe Geek Up đã tạo ra một môi trường làm việc văn minh, nơi mọi người đều có tiếngnói và quyền quyết định
Trần Minh Khôi
TP Hồ Chí Minh, ngày 21 tháng 12 năm 2021
Trang 4Lưu ý
“Thông Tin Bảo Mật” bao gồm toàn bộ thông tin và dữ liệu về tổ chức, điều hành, nhân
sự, tài chính, kinh doanh, chiến lược, chính sách, khoa học, kỹ thuật, công nghệ, kinh tế,thương mại, bán hàng, và tất cả các thông tin liên quan đến hoạt động vận hàng của Công
Ty, khách hàng của Công Ty mà không được phổ biến ra công chúng một cách tự do,được lưu trữ dưới bất kỳ hình thức nào và được Công Ty cung cấp cho Thực Tập Sinhhoặc Thực Tập Sinh bằng cách khác có được trong khi thực hiện công việc, nhiệm vụ củamình cho và tại Công Ty
Em đã cam kết bảo mật các Thông Tin Bảo Mật được quy định cũng như sẽ không đề cấpđến bất kỳ chi tiết nào liên quan đến product concept
Trang 5Nhận xét của khoa
Trang 6Lời mở đầu 1
Trang 81 Giới thiệu công ty
1.1 Giới thiệu chung
● Tên đơn vị: Công ty cổ phần công nghệ Geek Up
● Trụ sở, chi nhánh
○ 244/31 Huynh Van Banh, Phu Nhuan District, Ho Chi Minh City
○ 27B/9 Nguyen Dinh Chieu, Dakao Ward, District 1, Ho Chi Minh City
● Thông tin liên hệ
Một số partner nổi bật của Geek Up có thể kể đến như: Viettel, Mobifone, FPT,
Heineken, waitrr, TPBank, TheCoffeeHouse, ACB, SSI… và nhiều hơn thế Partner vớiGeek Up sẽ là một trải nghiệm rất khác, nơi mọi người thật sự ngồi lại và cùng nhau phântích và đưa ra giải pháp có thể mang lại những giá trị thật
Trang 91.2 Văn hóa
Ở Geek Up có một nét văn hóa rất khác biệt, còn được biết đến là Flat Structure Một vănhóa phẳng với slogan là “không có sếp”, không ai có quyền độc tài đưa ra quyết định mà
đó phải là tiếng nói chung của cả team Quyết định và giải pháp được thống nhất dựa trên
sự tổng hợp quyết định của các thành viên và dựa trên những dữ liệu có thật Môi trườnglàm việc ở đây không khuyến khích cái tôi cá nhân mà đề cao những giá trị đoàn kết, đềcao tính hợp tác cùng nhau giải quyết vấn đề
Geek Up không chia theo phòng, không có phòng ban cụ thể như các cách tổ chức truyềnthống Ở đây tồn tại một cách thức tổ chức rất hiện đại và văn minh
Tribe Toàn bộ thành viên của Geek Up, gắn bó và đoàn kết nhau như
sinh sống trong bộ lạc
Guild Các thành viên trong nhóm có cùng sở thích ngoại khóa Hiện
tại em biết được có 2 guild hoạt động tích cực nhất là
Trang 10Các chapter trong geekup
Trang 11Geek Up tồn tại 4 giá trị cốt lõi, được define cụ thể và dán lên tường như là một lời nhắcnhở các thành viên trong tribe
Geeks Get It Done Hoàn tất công việc đạt tiến độ bằng mọi resource có
thể có
High Standard Tiêu chuẩn cao, luôn tìm kiếm một chuẩn mực cao
hơn trong những việc mình làm
Stay Hungry Stay Foolish Bắt đầu với mindset như một beginner, trong tâm thế
sẵn sàng học hỏi và tiếp thu tri thức
Ngoài 4 giá trị cốt lõi, còn có những giá trị khác, được xây dựng theo thời gian, xuyênsuốt quá trình deliver nhiều dự án khác nhau Có thể kể đến một số giá trị như
● Awesome Comrade: một người đồng đội tốt hơn, nỗ lực thêm một chút để cover
cho đồng đội
● Commitment: cam kết với dự án, không bỏ dở.
● Ownership: có quyền sở hữu với product đang phát triển, nghiên cứu và tìm cách
để làm product tốt hơn standard
● Contribution: đóng góp và tận tụy với dự án Ngay cả khi đó không phải trách
nhiệm của mình
Trang 12Geek Up định kỳ mỗi tuần đều host các buổi workshop, nơi mọi người chia sẻ kiến thức
và kinh nghiệm sau quá trình deliver Vào mỗi thứ 6 còn có friday meetup, nơi mọi ngườibày tỏ sự biết ơn, nói lời cảm ơn đến những đồng đội trong team Sau đây là một số hìnhảnh về những buổi workshop diễn ra tại Geek Up
Một buổi Thursday Workshop hàng tuần Đôi khi người chia sẻ là một người ngoài tribe,người có background và câu chuyện ý nghĩa muốn chia sẻ cho mọi người
Trang 13Một buổi Monday Workshop chia sẻ về tư duy phản biện Thông thường workshop thứ 2ngắn gọn và súc tích hơn, chia sẻ về một số kinh nghiệm trong quá trình làm việc cũngnhư key takeaway.
Trang 14Tuesday Workshop, nơi mọi người trong tribe chia sẻ về kiến thức chuyên môn Một dịp
để ôn lại những gì đã tiếp thu sau một khoảng thời gian
Trang 15Friday Meetup, nơi mọi người bày tỏ sự biết ơn Dành lời khen, cảm ơn đến những ngườiđồng đội của mình Cuối buổi được thoải mái uống bia ăn uống, vui chơi giải trí.
Trang 16Ở Geek Up có cơ chế lên level, mọi member sau một thời gian log work và tích điểm sẽđược thăng hạng, đánh dấu một cột mốc trong hành trình làm việc tại Geek Up.
Trang 171.3 Một số sản phẩm của công ty
Waitrr - Ứng dụng đặt đồ ăn
https://geekup.vn/works/food-beverage/mobile-payment-ordering-platform-disrupting-singapore-f-b-market
Trang 18The Coffee House - Ứng dụng chăm sóc khách hàng
https://geekup.vn/insights/casestudy-the-coffee-house
Trang 19TPBank - Ứng dụng tài chính
https://geekup.vn/insights/tpbank
Trang 202 Nội dung thực tập
Quá trình thực tập trong 10 tuần, với mục tiêu xây dựng và phát triển ứng dụng hỗ trợteam GA (team HR) tuyển dụng thành viên mới cho tribe
2.1 Tìm hiểu chuyên môn
2.1.1 Scrum & Agile
Một số lợi ích nền tảng Agile mang lại cho tổ chức, có thể kế đến như
● Đi nhanh hơn: không hẳn là áp dụng agile sẽ đi nhanh hơn Đây hoàn toàn không
phải là hiệu ứng, một trong những đặc tính của mô hình agile là cho phép chúng tathay đổi định hướng nhanh Trong một mô hình tổ chức agile được xây dựng trêntinh thần minh bạch và tiếng nói chung thì agile mang lại khả năng có thể thíchnghi với thay đổi nhanh hơn
● Năng suất cao: hiệu suất luôn là bài toán hàng đầu cần phải giải quyết trong các
mô hình quản lý dự án Khi nói về hiệu suất, ta mong chờ hoàn thành được nhiều
Trang 21thứ hơn với cùng lượng nhân sự và resource ta có Các nguyên tắc agile liên hệchặt chẽ đến việc giao tiếp và phối hợp trong một team dự án Trong rất nhiềutrường hợp, việc dev code một đằng, business goals và user needs một nẻo đãkhông mấy xa lạ và việc này làm giảm hiệu suất trong team rất nhiều Agile đòihỏi sự alignment giữa team dev và các stakeholders, đảm bảo những gì mình làmalign đúng với business goal và user needs.
4 giá trị cốt lõi của agile
● Xem trọng con người hơn các quy trình và công cụ Sự giao tiếp là điều rất quantrọng trong một team dự án
● Sản phẩm chạy được hơn là tài liệu toàn diện Trong nhiều trường hợp, đã cónhững dự án với một khối lượng tài liệu được viết rất nhiều và dày đặc Điều này
vô hình chung làm chậm tiến độ dự án Agile không bỏ việc ghi chép tài liệu,nhưng tài liệu chỉ ở mức vừa đủ, cho các developer có thể thấu hiểu user stories vàtiến hành công việc
● Hợp tác với khách hàng hơn là đàm phán hợp đồng Khách hàng là một phần trong
dự án, giao tiếp và tương tác với khách hàng giúp cho những bước phát triển đầutiên đáp ứng đúng yêu cầu
● Phản hồi với thay đổi hơn là làm theo đúng kế hoạch ban đầu Nói như vậy không
có nghĩa là agile không rũ bỏ bước lập kế hoạch, chỉ là khi có những dữ kiện,những sự thay đổi nào đó Hãy cân nhắc và xem xét, sự thay đổi này có thật sựgiúp ích cho khách hàng và khách hàng có thật sự cần nó hay không Không phải
sự thay đổi nào chúng ta cũng apply
12 nguyên tắc agile
● Sự hài lòng của khách hàng ngay cả ở những giai đoạn đầu của dự án Khách hàng
sẽ rất vui khi được cập nhật tiến độ thường xuyên
● Đáp ứng với sự thay đổi yêu cầu trong quá trình phát triển
● Thường xuyên và một cách tịnh tiến, làm cho phần mềm tốt hơn theo thời gian
● Sự phối hợp giữa stakeholder và team dev trong suốt quá trình dự án
● Hỗ trợ, tin tưởng và động viên đồng đội trong team
● Tương tác trực tiếp Sự giao tiếp sẽ tốt hơn rất nhiều nếu các thành viên có dùngđịa điểm làm việc
● Một phần mềm hoạt động tốt chính là sự đánh giá tốt nhất cho một quá trình hoạtđộng
● Giữ vững tốc độ deliver dự án
Trang 22● Chú ý đến các yếu tố chuyên môn, gần như đây là thứ quyết định tốc độ deliver dự
án Những vấn đề ta đã giải quyết, đã gặp qua một lần thì document lại cho teambiết Sau này gặp lại vấn đề này thì có nhiều materials hơn để xử lý
● Sự đơn giản, deliver đủ để hoàn thành công việc
● Các thành viên trong team có quyền quyết định lên dự án, điều này giúp thúc đẩy
sự sáng tạo Các thành viên có nhiều ownership hơn với dự án
● Review và nhận xét bản thân, làm thế nào để trở nên tốt hơn
Scrum là một framework ứng dụng agile, được phát triển đầu những năm 1990s và chođến tận ngày nay Những người góp phần tạo ra scrum vẫn liên tục cập nhật và đổi mớiframework Đây cũng là một điểm khác biệt lớn giữa scrum và những framework khác,
nó không chỉ là một cái proposal hay một presentation, framework scrum bản thân nóthay đổi và phát triển theo thời gian
Nền tảng của scrum đến từ việc chia dự án theo từng giai đoạn (sprint) với thời giantimebox (2 tuần) Để thực thi scrum, đòi hỏi người quản lý dự án phải nuôi dưỡng mộtvăn hóa, nơi mà mọi người…
● Chia vấn đề phức tạp thành các Product Backlog
● Team sẽ lựa chọn các Backlog và tiến hành thực hiện trong một sprint
● Cuối sprint, team và stakeholders ngồi lại với nhau để phân tích kết quả Địnhhướng cho sprint tiếp theo
● Lặp lại quy trình
Các scrum events xuyên suốt dự án
● Sprint Planning: team thực hiện lên kế hoạch đầu mỗi sprint Chọn ra những
backlog để process trong sprint
Trang 23● Daily Scrum: diễn ra mỗi ngày, team chọn một giờ cố định trong ngày lúc mọi
người đều available Team nhìn lại các backlog, hôm qua làm gì, hôm nay sẽ làm
gì, làm thế nào để làm tốt hơn
● Sprint Review: diễn ra vào cuối sprint, team nhìn nhận và đánh giá khách quan dự
án sau sprint vừa rồi Dự án có đạt được sự tăng trưởng nào không
● Sprint Retrospective: diễn ra vào cuối sprint, team nhìn nhận và đánh giá quy
trình làm việc, giải quyết xích mích mâu thuẫn Có thể cải thiện được gì trongnhững, làm sao để làm việc nhanh hơn trong những sprint tiếp theo
● Nắm bắt được workflow trong team
● Nâng cao hiệu quả làm việc nhóm
Trang 242.1.2 Github
Thời gian
● 1 ngày
Nội dung
Làm việc trong team dev, chúng ta luôn cần một cách thức để quản lý source code dự án
và github là một công cụ đã không mấy xa lạ với các lập trình viên Nói về quản lý sourcecode, trong lập trình đây luôn là một đề tài nóng Mỗi người trong team dev không thểcùng code trên một mã nguồn, nó phải có sự tách biệt nhất định theo một cách nào đó.Khi sử dụng git, mỗi thành viên khi implement chức năng mới đều phải tạo một nhánhriêng (branch) để code và test Sau khi implement và test đầy đủ các chức năng, ta tiếnhành merge các nhánh lại thành một nhánh chính, và các chức năng mới sau này đều sẽđược tách từ nhánh chính này
Trang 25Công việc sẽ xúc tiến nhanh hơn nếu có workflow rõ ràng Làm việc với git cũng vậy,chúng ta cũng define một workflow rõ ràng trong teams
Master Nhánh chính, dùng để kiểm thử ứng dụng Chỉ chạy trên môi
trường dev
Hotfix Nhánh được dùng khi fix bug Khi chức năng nào đấy có bug,
tiến hành tách nhánh hotfix để cài đặt vá lỗi
Feature Nhánh chức năng, tách nhánh mới mỗi khi cài đặt chức năng mới
Release Nhánh release, dùng demo ứng dụng Được setup để chạy trên
môi trường production
Trang 26Ngoài ra, github ngoài quản lý source code còn tích hợp với nhiều nền tảng như là
Jenkins, giúp tự động deploy ứng dụng mỗi khi có commit mới trên nhánh release Bêncạnh đó, còn có thể tích hợp với các platform quản lý dự án như jira, các thông tin nhưissue, conflict, sơ đồ nhánh đều được nhúng trong phần mềm quản lý Quản lý dự án trởnên dễ dàng hơn rất nhiều
Thực hiện
● Tham gia training đầy đủ
● Áp dụng git, tách nhánh mới khi code chức năng
● Xử lý conflict khi merge
● Integrate với các nền tảng nội bộ
Kết quả
● Hiểu biết và vận dụng github trong phát triển ứng dụng
Trang 27NestJS về cơ bản thực hiện các kết nối HTTP bằng một framework khác hoạt động bêndưới là ExpressJS Về cơ bản NestJS không tập trung nghiên cứu sâu tầng network màtập trung giải quyết bài toán về kiến trúc ứng dụng (Application architecture) Frameworkcung cấp nhiều mức độ trừu tượng khác nhau, cho phép các developer xây dựng ứngdụng với kiến trúc hợp lý một cách dễ dàng và mang tính mở rộng cao.
Trang 28Một số component cơ bản của NestJS
Controller
Lớp controller để expose API endpoints, dùng trong xử lý request ra vào ứng dụng Hỗtrợ cơ chế routing, khai báo chuỗi string để định tuyến đường dẫn vào các class xử lý.Ngoài ra hỗ trợ nhiều decorator rất tiện dụng cho việc lập trình như redirection, header,statuscode, wildcards (routing pattern), cast payload ra typescript interface đã được khaibáo trước
Provider
Một trong những điểm nổi bật của framework NestJS đó chính là support cơ chế
dependency injection Thay vì phải tạo thủ công instance của một class, NestJS hỗ trợmột lớp trừu tượng là provider, chỉ cần khai báo tên class vào dependency, NestJS tựđộng inspect với một instance của class đó Giữ cấu trúc code được clean và gọn gànghơn
Trang 29Đúng như tên gọi, đây là component được thực thi ở giữa, trước khi request đi vào cáccontroller Điều này rất đặc biệt hữu ích, ta có thể thoải mái cài đặt một hoặc nhiều lớpbảo mật mà không ảnh hưởng nhiều đến những đoạn mã nguồn cũ Chỉ cần cài đặt mộtlớp middleware và inspect dữ liệu từ header + cache, ta đã tích hợp được thêm 1 lớp bảomật mà không yêu cầu chỉnh sửa mã nguồn quá nhiều
Thực hiện
● Tham gia training đầy đủ
● Sử dụng NestJS, xây dựng tầng interface cho ứng dụng
● Cài đặt lớp truy vấn dữ liệu, làm provider cho các lớp trên
Thay vì phải tự viết truy vấn SQL và xử lý chuỗi để tách dữ liệu Chúng ta có một
options khác là sử dụng ORM hỗ trợ truy vấn dữ liệu từ cơ sở dữ liệu mà không cần phải
tự xử lý chuỗi Việc tích hợp một ORM vào dự án là tăng thêm một lớp trừu tượng, codeviết dễ đọc dễ hiểu hơn, chúng ta có nhiều thời gian hơn để tập trung vào product thay vìlăn tăn với mấy câu truy vấn
TypeORM là một ORM tuyệt vời cho các ứng dụng NodeJS Hỗ trợ casting dữ liệu ratypescript interface Một điểm rất mạnh của ORM này là nó có thể sync từ một schemaobject typescript sang schema cứng trong database