Du ký châu Âu – Euro Trip – Phần 1: Khởi động, chuẩn bị từ nhà

Hôm trước lướt facebook ngẫu nhiên đọc được dòng: “Thanh niên Việt Nam nên đi châu Âu và Mỹ một lần trong đời để thấy nước người ta như thế nào”. Mỹ thì mình đã đi hai lần và thấy rất tuyệt, châu Âu thì mãi đến vừa rồi mới có cơ hội đi lần đầu tiên. Cảm giác thì đúng là nên đi để thấy được nước mình đang ở đâu trên bản đồ thế giới.

Hành trình ban đầu là Áo – Hungary – Bratislava – Áo, xong sau đó vì khủng hoảng nhập cư căng quá nên mình phải đổi lại thành Áo – Séc – Áo, mọi người cứ trách bảo sao có cơ hội đi châu Âu mà đi ít vậy, mình thì mình nghĩ đi ít nhưng mà thưởng thức được nhiều thì vẫn hơn là đi nhiều lấy thành tích. Nhắm mắt, bịt tai, nhấc mông lên và thông à nhầm xách ba lô và đi thôi :).

Trước khi đi mình lượn qua một lượt các trang web như http://www.hostels.com, http://www.airbnb.com để check phòng ở tại các địa điểm mình đến, lời khuyên của mình là nếu bạn đi theo nhóm từ 3 người trở lên thì airbnb quả thực rất tuyệt. Mình thuê được 1 phòng đủ cho 3 người ở Prague với giá 30 Eu/ngày với đầy đủ mạng, phòng tắm, tủ lạnh, máy giặt…, quá hợp lý đúng không? Di chuyển thì mình check eurolines.com để check xe bus, obb.com để kiểm tra vé tàu, Ryanair để check vé máy bay (vì lúc đầu định đi Pháp), Google map để xem cách đi lại giữa các trạm chung chuyển. Đánh giá chung là nếu bạn muốn vừa di chuyển vừa có thể ngắm cảnh giá lại rẻ thì xe bus là siêu hợp lý, đến cao cấp nhất như Eurolines cũng chỉ tầm hơn 20 Eu là kịch. Như mình đi từ Vienna sang Prague mua vé giờ chót ở bến tàu cũng chỉ 14 Eu, nếu đi sang Bratislava thì mất 7 Eu, ghế to xe thoáng, wifi chạy vù vù :). Một lưu ý nhỏ là tại các sân bay của châu Âu thường có các tuyến xe bus chạy thẳng đến các thành phố khác, bạn có thể vào sân bay mà bạn sẽ hạ cánh và kiểm tra thông tin về các chuyến bus này (đừng như mình rồi đứng khóc giữa sân bay). Nếu đi tàu thì đắt hơn nhưng được cái nhanh và theo mình nghĩ thì an toàn hơn (nếu không chắc giá không đắt vậy). Ăn uống, du lịch thì mình check một số trang như tripadvisor.com, visacity.com hay… vnexpress.net, đặc biệt mình ấn tượng với visacity, nhờ trang này mà mình có sẵn 1 danh sách các địa điểm hay ho của Prague và Vienna.

Lời khuyên cho khâu chuẩn bị:

  • Ở: Với hostels.com thì mình thấy nếu bạn đi lẻ thì hẵng dùng, còn theo nhóm đông người thì thật sự là mình thấy đắt hơn airbnb nhiều và mình thấy tiện ích thậm chí không bằng. Airbnb thì rất tuyệt nhưng nên để ý review và house rule trước khi đặt, kẻo đến lúc lại tốn tiền.
  • Di chuyển: Bus là phương tiện tuyệt vời để bạn thay đổi địa điểm di chuyển vào giờ phút cuối, các bus station có rất nhiều hãng xe, đa số đều rất ngon và đầy đủ tiện nghi. Như mình bắt bus phút cuối đi Prague mà được con xe vừa to vừa đẹp, rộng thênh thang (chỉ có 7 khách cho cái xe 80 chỗ), giá lại rẻ bằng 1/5 tàu hoả (14 Eu so với 75 Eu), tuyệt chưa :D. Nếu ở lại các thành phố lâu lâu thì nên mua luôn vé bus/metro theo tuần, di chuyển cho đỡ mỏi chân ( kinh nghiệm rút ra sau khi mình phải cuốc bộ 10 cây số/ngày ở Prague, về nhà đau lưng gần chết).
  • Các dịch vụ như thăm quan và ăn ở tại châu Âu khuyến cáo các bạn nên đặt trước từ ở nhà vì với một số địa điểm thăm quan sẽ có giới hạn về lượng khách tối đa cũng như đi lại thì một số tuyến xe bus luôn full, không đặt trước chắc chỉ có nước ôm nhau khóc giữa đường.
  • Nếu ở lâu hẳn, kiểu 1, 2 tuần thì nên sang đó mua sim red roaming của vodafone khá rẻ, không thì cứ bụp luôn roaming chấp nhận đau thương một chút. Tớ đi một tuần gọi roaming hết 600k nhưng tại ở nhà không biết là roaming tính theo phút nên toàn gọi nhá máy, không  đau thương chắc chỉ còn một nửa :).

Ok, tạm ổn với phần chuẩn bị, châu Âu thẳng tiến thôi…

Advertisements

Cho những ai đã chọn Công nghệ thông tin

Mở đầu

Không phải đến bây giờ cậu chuyện học sinh chọn ngành gì lúc vào đại học mới được nhắc đến, điệp khúc này được hát đi hát lại từ hồi mình còn học cấp 2, cấp 3. Nghĩa là chuyện chẳng mới tẹo nào!!!

Khổ cái ở bậc phổ thông, chẳng có ai chỉ cho các cháu hoặc đủ kiến thức, đủ tầm nhìn để chỉ cho các cháu rằng “trong tương lai cháu nên làm gì”. Đại khái là tự bơi với cái đích cuối cùng là một hai ba bốn năm sáu (một vợ hai con ba tầng bốn bánh năm châu sáu tấm). download

Mình chọn nghề cũng y như vậy, thấy thích lập trình thì chọn lập trình, nhưng thật sự đến giờ, khi có chút ít kinh nghiệm làm việc và kiến thức về nghề, mình chỉ muốn ước xưa kia có người giúp mình định hình ngành nghề của mình một cách chuẩn xác hơn.

OK, câu chuyện bắt đầu.

Mình hiện đang làm lập trình viên (Cụ thể vị trí là Software Engineering) cho một công ty nước ngoài, và đã có kinh nghiệm làm việc với các vị trí khác nhau.

  • Lập trình viên (Junior/ Senior Software Engineering)
  • Phân tích thiết kế (Business Analysis)
  • Tư vấn – thầu bè (Consultant)
  • Trưởng nhóm lập trình (Team leader)
  • Quản trị dự án (Project Manager)
  • Triển khai (không nhớ title tiếng anh là gì)
  • Quản trị cơ sở dữ liệu (Database administrator)

download

Nghĩa là mình đã vật lộn với cả một tá vị trí, từ lập trình cho tới triển khai, chỉ còn thiếu nốt vị trí QA nữa thì sẽ đủ hết các vị trí trong ngành công nghệ phần mềm. Nhưng thực tế, ngành học của mình ở Đại học là ngành… Toán Tin, nghĩa là mình không hề có tí kiến thức nào về công nghệ phần mềm, và mình đã phải bỏ 6 năm cuộc đời ra chỉ để học nhiều thứ thừa thãi, trong khi đáng lẽ ra đã có thể tập trung vào một vị trí và làm tốt nhất ở vị trí đó.

Quay lại câu chuyện ban đầu, ngành học cho học sinh lúc vào Đại học, ở đây mình sẽ nói cụ thể về

Các trường Đại học ở VN chia khoa CNTT thành nhiều ngành:

  • Công nghệ phần mềm
  • Hệ thống thông tin
  • Mạng máy tính
  • Bảo mật
  • Truyền tin
  • ….

Định nghĩa của từng ngành hẹp rất rõ ràng, tuy nhiên, để định hình và hiểu được công việc tương lai là gì thì mình thấy các bạn sinh viên cũng lơ mơ chứ chưa nói đến học sinh phổ thông. Đa số các bạn cũng sẽ giống mình, ra trường, chọn đại một ngành mình thích từ trước, làm việc, tích luỹ kiến thức, rút kinh nghiệm, chán rồi lại chọn lại, lại lao vào làm, rút kinh nghiệm, lại chán,… cứ thế và cứ thế. Cái vòng luẩn quẩn đó vui thay hoặc sẽ giúp bạn hiểu nghề hơn, hoặc giúp bạn chuyển sang nghề khác nhanh hơn!!!

Vậy con đường của các em sau khi ra trường sẽ là gì??? Thực sự thì nó phụ thuộc vào khả năng và mong muốn của từng người. Tuy nhiên, trong bài viết này, với những gì mình đang có, mình sẽ chia sẻ một số vị trí của ngành CNTT để bạn có thể phần nào mường tượng được nghề nghiệp trong tương lai của mình là gì. Từ đó có sự chuẩn bị về tâm lý, về kiến thức để sẵn sàng với những gì sắp phải đối mặt.

Lập trình viên (DEV – Developer):  

Đây là vị trí mà theo mình thấy đa số sinh viên CNTT sẽ chọn sau khi ra trường, cũng là vị trí làm ra sản phẩm một cách trực tiếp cho các doanh nghiệp phần mềm. Nhiệm vụ của LTV thì không cần phải nói nhiều nữa, viết mã để hoàn thành sản phẩm, chịu trách nhiệm về chất lượng sản phẩm trước khi bàn giao cho đội Test, sửa lỗi của sản phẩm, đôi khi LTV cũng tham gia vào quá trình phân tích thiết kế (thường là những người có nhiều kinh nghiệm) và kiểm thử (khi dự án lụt).

Khi chọn làm lập trình viên, khả năng lớn bạn sẽ là lập trình viên cho một công ty outsouce nước ngoài hoặc VN, nếu may mắn, bạn sẽ được vào làm lập trình viên ở hãng phần mềm – thường là hãng nước ngoài (cơ hội này không nhiều và thực ra là bấp bênh vì hãng có thể giải tán trung tâm phần mềm bất cứ lúc nào). Một số ít sẽ được vào các doanh nghiệp nhà nước, hoặc chuyển ngành khác vì nhiều lý do. Lập trình không phải là một nghề mà nhiều người có thể làm lâu được, đa số lập trình viên khi đến tuổi tầm 35 sẽ chuyển sang vị trí khác (thường là lên quản lý – nguyên nhân vì sao tôi sẽ viết trong một bài khác), đây cũng là vị trí mà các công ty liên tục tuyển người và quả thực, lập trình viên/QA/tester là các vị trí dễ dàng thay thế nhất trong bất cứ công ty phần mềm nào.

Lời khuyên của mình:

  • Lựa chọn các công ty outsource lớn và có tiếng, bạn vừa ra trường, và các quy trình đào tạo fresher ở các công ty này sẽ giúp bạn trưởng thành nhanh hơn, ngoài ra khi làm outsource, bạn có cơ hội để ra nước ngoài công tác. Với những người trẻ, tôi nghĩ cơ hội đi đây đi đó ở nhiều nước là một cơ hội rất tốt, đó là những trải nghiệm thật sự rất tuyệt vời. Các công ty outsource nhỏ tuy sẽ cho bạn nhiều cơ hội để làm ở nhiều vị trí khác nhau, tuy nhiên độ ổn định kém, quy trình không có sẽ là điểm trừ rất lớn cho bạn sau này. Cuối cùng, các công ty này đa số toàn người trẻ, quan hệ cũng rõ ràng và ít có trường hợp luồn lách hay đấu đá phe cánh hơn doanh nghiệp nhà nước, các bạn có thể thoải mái thể hiện khả năng của mình, cũng như ngược lại, khả năng của bạn sẽ được đánh giá chính xác nhất. Tránh xa doanh nghiệp nhà nước nếu bạn thật sự yêu công nghệ, bạn sẽ mất nghề rất nhanh với các doanh nghiệp này.

Một số công ty: FPT Software, VietSoftware, Framgia,…

  • Các môn cần quan tâm trong trường: Lập trình hướng đối tượng, cấu trúc dữ liệu và giải thuật, toán rời rạc, hệ điều hành, cơ sở dữ liệu – Thực ra thì học càng nhiều rồi thì càng thiếu, nhưng nếu bạn vững các môn vừa rồi thì sẽ có nhiều lợi thế hơn vì bản thân lập trình cũng được tách thành nhiều kiểu khác nhau và với lập trình thì biết càng nhiều càng tốt, chưa kể nếu sau này bạn có thiên hướng làm fullstack developer thì rõ ràng là học càng nhiều thứ càng tốt.
  • Chuẩn bị cho mình tiếng Anh thật tốt: làm CNTT mà không biết tiếng anh thì là một thiệt thòi cực cực lớn, tôi đã thấy rất nhiều lập trình viên rất giỏi, nhưng bỏ phí những cơ hội ngon ăn trong thăng tiến chỉ vì… không nói được tiếng Anh –> không tra đổi được với khách hàng. Đừng để mình mất những cơ hội tốt vì những thứ nằm trong tầm tay mình.
  • Nắm chắc một ngôn ngữ lập trình: cái này tuỳ vào bạn – VD: bạn có ý định tương lai làm java, vậy hãy học thật tốt Java core/Oracle và Linux. Nếu được, làm một vài cái chứng chỉ về ngôn ngữ mình học sẽ là ưu thế rất lớn.

Quản trị mạng (IT):

Vị trí sát sườn, công ty nào cũng cần, bạn sẽ có thể thoải mái chọn lựa công ty mà mình thích vì sẽ có đủ loại từ công ty môi trường đến công ty thực phẩm, ngân hàng. Thật tuyệt phải không, nhưng chờ đã, những ai đã có ý định làm về quản trị mạng thì hãy chuẩn bị tâm lý với nhứng tình huống sau:

  • Cá mập cắn đứt cáp, mạng sụt: Ối IT ơi!
  • Máy virus: Ối IT ơi!
  • Cài lại win: Ối IT ơi!
  • Bê tủ server: Ối IT ơi!
  • Bê… tủ sách cho sếp: Ối IT ơi!
  • Bê… bàn ghế: Ối IT ơi!
  • Máy chiếu hỏng: Ối IT ơi!
  • Điện thoại bàn hỏng: Ối IT ơi!
  • Quản lý kho: Ối IT ơi!

Nói chung IT là những anh chàng biết tuốt và luôn là thành phần làm đủ mọi việc, từ cu li bê tủ cho đến chui gầm ghế kiểm tra port mạng, cài lại win… Những người làm IT cũng luôn phải chuẩn bị sẵn sàng khi có những đợt update phần cứng, đây là những khoảng thời gian mà ngủ là chuyện xa xỉ với họ. Ngoài ra, với các doanh nghiệp kinh doanh dịch vụ mạng, IT sẽ kiêm luôn vị trí bảo mật hệ thống, nghĩa là nếu có trường hợp bị tấn công mạng thì hỡi thần linh ôi, IT sẽ là những anh chàng ăn dầm ở dề trong phòng server để chống đỡ. Đó, nỗi khổ của IT thì đã có, vậy còn ngược lại, quyền lợi mà họ được hưởng là gì???

  • Nhàn hạ: IT là kiểu công việc liên tục, nhưng không quá gấp gáp để lúc nào cũng phải cắm đầu vào cái máy tính làm việc, vì thế đừng ngạc nhiên khi thỉnh thoảng bạn thấy chàng IT chỗ bạn đang ung dung đọc báo.
  • Nổi tiếng: việc gì cũng nhờ IT thì nổi tiếng quá còn gì
  • Lương tốt: IT thường được phần lương khá hơn lập trình với cùng số năm kinh nghiệm, đừng ganh tỵ, đó đơn giản là phần lương trách nhiệm của họ thôi.

Tuy nhiên, theo kinh nghiệm của mình, IT cũng như DEV, rất có giá trị vì ảnh hưởng trực tiếp đến hoạt động kinh doanh của công ty, và thường sẽ gắn bó lâu dài (các công ty thường ngại thay IT) nhưng rủi ro cũng lớn và trách nhiệm cao, những ai đã làm IT sẽ phải cập nhật rất thường xuyên kiến thức của mình nếu không muốn bị tụt hậu và làm bạn với cái bơm sớm. Ngoài ra, mình thấy IT cũng là vị trí dễ dàng nhảy sang DBA, nếu cảm thấy chán nản và bế tắc với IT, bạn hoàn toàn có thể học thêm để thành DBA.

Lời khuyên của mình:

  • Hãy phấn đấu để vào hãng, IT là ngành mà mình nghĩ nên vào hãng làm nhất vì khác với các hãng khác ở VN, các hãng IT vào VN thường có đội support. Môi trường làm việc ở các hãng thì ngon hơn rất nhiều các công ty VN, mức lương tốt hơn rất nhiều và cơ hội đi nước ngoài thường xuyên, vậy tại sao không phấn đấu???
  • Kiếm chứng chỉ ngay từ khi còn đang ở trong trường tốt nhất là cứ giắt váy cái CCNA làm vốn, ít nhất là với CCNA bạn đã có một nền tảng đủ tốt để làm việc ngay rồi, sau đó hãy nghĩ tới những thứ cao hơn.
  • Các môn nên tập trung học trong trường: Hệ điều hành, mạng máy tính, cơ sở dữ liệu.
  • Tiếng Anh thật tốt vì bạn sẽ cần trao đổi với các chuyên gia nước ngoài khi cần nâng cấp hệ thống hoặc giải quyết sự cố.

Quản trị cơ sở dữ liệu (DBA – database administrator):

Đây là vị trí mình rất yêu thích và đã thử làm khi mới ra trường, tuy nhiên mình không có duyên với DBA nên đành để cơ hội đó cho người khác vậy. Về nhiệm vụ, DBA là người đảm bảo cho các hệ thống dữ liệu của toàn bộ công ty hoạt động, kiểm tra phát hiện sự cố, sao lưu và phục hồi dữ liệu khi có sự cố, ngoài ra thì cũng có trách nhiệm nâng cấp và bảo mật CSDL của công ty. Trong mọi công ty có sử dụng hệ thống CNTT, DBA là những người quan trọng thuộc vào bậc nhất và rất khó thay thế, tuy nhiên cũng là những người vất vả nhất và giữ trách nhiệm nặng nề nhất. Vì sao ư?? Hệ thống có thể sụp và khôi phục được, còn dữ liệu đã mất đi thì sẽ mãi mãi tan vào hư vô, nếu đó là dữ liệu quan trọng của KH – VD: cước cuộc gọi chẳng hạn, thì sẽ là tổn thất kinh tế khủng khiếp.

Nghe thật đã, DBA thật là oách và chắc ai cũng muốn làm DBA mất, nhưng… lại nhưng, DBA là nghề rất khó làm. Vì

  • Cần có lượng chứng chỉ nhất định để có thể làm được DBA: Như mình thấy thì KH chẳng ai chấp nhận cho một tay mơ sờ vào hệ thống CSDL của họ, bản thân khi muốn làm nghề mình cũng đã phải giắt túi ít chứng chỉ để có thể nhảy vào làm được. Và để thi được đống chứng chỉ đó thì quả thực là cũng phải ngồi học mất ít lâu, khá mệt mỏi.
  • Cần có trách nhiệm cao: Lý do thì phía trên nói mãi rồi
  • Công việc vất vả: Bạn mình làm DBA chuyên nghiệp đã từng có đợt 2 tuần liền ngồi lì trong phòng làm việc vì đúng đợt upgrade hệ thống + báo cáo cuối năm, 2 tuần nhé, và làm cả ngày lẫn đêm đó.

Khi chọn vị trí DBA, ở HN mình không thấy có nhiều công ty tuyển vị trí này, lác đác có một số công ty như Hyperlogy, VietTech hay FIS có tuyển nhưng không phải lúc nào cũng có. Thường sẽ là làm DEV một thời gian rồi kiếm cơ hội nhay sang vị trí này và nếu thật sự yêu nghề thì phải biết chờ đợi (chờ đợi là hạnh phúc mà :D)

Lời khuyên của mình:

  • Hãy yêu nghề, đừng như mình, với vị trí DBA, bạn phải dám dũng cảm, tỉnh táo và quyết tâm thì mới vượt qua những cám dỗ và thành công được
  • DBA thường sẽ gắn với 1 sản phẩm nào đó (Oracle hay MSSQL) tuy nhiên nên học thêm một số sản phẩm khác như MySQL, PostGreSQL hay biết về concept của các DB system là xu hướng hiện nay như NoSQL, Big Data,…
  • Có lượng chứng chỉ nhất định, ví dụ mình học Oracle thì bét ra phải có OCA, để yên tâm thì thi lên OCP và cố gắng có càng nhiều OCE càng tốt thì mới được.
  • Các môn nên quan tâm trong trường: Hệ điều hành, Cơ sở dữ liệu

Kiểm thử (Quality Assurance/Tester)

Hồi trong trường Đại học, có lần FSoft cho cả 1 team đến giới thiệu công việc tester, chào mời vào công ty họ, khi đó mình chỉ mường tượng công việc này thật đơn giản, nhàn hạ và nhàm chán nên không hề quan tâm. Tuy nhiên, khi đã có kinh nghiệm và thực tế làm việc, mình thấy đây hoàn toàn không phải là một vị trí nhẹ nhàng. Tester/QA có nhiệm vụ theo sau LTV, kiểm tra sản phẩm (như mình hay gọi thì là raping sản phẩm) và họ không hề kiểm tra theo kiểu ngẫu nhiên, việc kiểm thử có rất nhiều quy tắc, quy trình rõ ràng. QA/Tester giỏi phải nắm nghiệp vụ của sản phẩm rất tốt và sâu để bắt được các abnormal case và phân biệt được đâu là bug thật sự, đâu là lỗi của hệ thống. Với QA nước ngoài, mình còn thấy họ chủ động học lập trình để bắt các trường hợp code lỗi thường thấy của DEV. Nói chung QA/Tester là một vị trí rất vất vả với sức ép đến từ nhiều phía, cũng như bị đánh giá rất thấp (thậm chí còn kém hơn cả DEV), trong tương lai thì mình không rõ, nhưng với điều kiện hiện tại thì đây là một vị trí mà mình nghĩ các bạn mới ra trường nên trải nghiệm một thời gian, các bạn sẽ học được rất nhiều điều (sự cẩn thận, khả năng chịu áp lực, các trường hợp thường gây lỗi, …).

Cũng giống như DEV, QA/Tester sẽ có điểm đến là các công ty outsource, một số nhỏ sẽ vào làm cho các hãng nước ngoài.

Lời khuyên của mình:

  • Không làm thì thôi, đã làm phải tốt và hãy yêu nghề mình làm; tuy nhiên, hãy luôn đặt cho mình một khoảng thời gian cụ thể với nghề QA/Tester. Nếu bạn không phải là test lead thì dù cho các bạn biết rất nhiều phương cách để kiểm thử sản phẩm, nhưng đó là những thứ mà nhiều người biết như bạn, điều đó nghĩa là công việc của bạn có thể dễ dàng được thay thế bởi người khác, và bạn không phải là một nhân viên giá trị. Vì thế, hãy khôn ngoan, luôn sẵn sàng cho những vị trí mới quan trọng hơn và có giá trị hơn, tất nhiên là chỉ trong trường hợp bạn không thể trở thành một test lead nhé (Mình recommend nhảy sang vị trí BA nếu bạn không có ý định làm DEV)
  • Nắm nghiệp vụ của phần mềm mình làm thật tốt, đây sẽ là chìa khoá để bạn trở thành key person và là con đường đưa bạn thành test lead rất nhanh (không có nghiệp vụ, bạn chỉ là cái máy test mà thôi)
  • Tiếng Anh thật tốt, cái này thôi khỏi phải nói nhé
  • Lấy chứng chỉ về kiểm thử như ISTQB – nên có ít nhất là cái này, mình thấy ở đâu cũng yêu cầu chứng chỉ này.
  • Các bộ môn cần học trong trường: không môn nào cần học, nhưng nên biết về lập trình, hệ điều hành, cơ sở dữ liệu và biết đếm (để đếm tiền lương :V). Tester có vẻ như là nghề mà không cần kiến thực về CNTT nhiều, chỉ cần có cẩn thận và trách nhiệm là đã đủ tiêu chuẩn rồi :).

Phân tích thiết kế (BA – Business Analysis)

Phân tích thiết kế là vị trí mà theo như tôi hay đùa là vị trí lập trình Word, thực tế làm việc thì đúng như vậy BA là vị trí không làm việc gì với code, cơ bản BA là những người lắng nghe nhu cầu của khách hàng, hệ thống hoá bằng văn bản, hình ảnh, sơ đồ để DEV/Tester có thể triển khai được. Thực tế, BA không hỏi linh tinh mà có một format các câu hỏi để giúp đưa các yêu cầu trở nên rõ ràng hơn. Nói nghe có vẻ dễ, nhưng không hề đơn giản, việc phải lắng nghe ý tưởng của người khác, hỏi một cách chính xác, hiểu một cách rõ ràng, sau đó trình bày lại cho người khác hiểu chưa bao giờ là việc rất khó.  Hơn nữa, BA chính là người giao tiếp với khách hàng nhiều nhất, giống như là biểu tượng của công ty vậy, nếu được khách hàng yêu quý thì thật sự sẽ là lợi thế rất lớn. Ngược lại sẽ trở thành ác mộng với bản thân BA và đơn vị triển khai vậy. Một BA tốt sẽ là một người mà các sếp cố sống cố chết giữ lại ở công ty, có thể coi đó như một key person rất quan trọng vậy.

Vị trí BA là vị trí mà các doanh nghiệp phần mềm luôn cần, bạn có thể lên Vietnamworks và tìm kiếm vị trí này sẽ thấy đây là vị trí được tuyển rất nhiều và thường xuyên.

Lời khuyên của mình:

  • BA là vị trí rất hấp dẫn và công việc khá rõ ràng, tuy nhiên để làm một BA giỏi, bạn phải trang bị cho mình kiến thức về công nghệ cũng như các kỹ năng mềm tốt thì mới có thể hoàn thàn công việc tốt được.
  • BA cũng là vị trí rất cần chủ động, mình đã từng chứng kiến cảnh BA chầu trực KH từ sáng đến trưa chỉ để có confirm với những vấn đề rất nhỏ, đó sẽ là điểm cộng trong mắt cả KH lẫn sếp của bạn.
  • Đọc thật nhiều tài liệu của các BA đi trước sẽ giúp bạn làm quen với công việc nhanh hơn.
  • Tiếng Anh thật tốt, chắc khỏi giải thích thêm cho mỏi tay nhỉ 🙂

Nghiên cứu – Phát triển (R&D – Research and Develop):

Nghiên cứu và phát triển là một vị trí hái ra tiền cho người làm và đốt tiền của nhà đầu tư, đây là công việc theo mình thuộc loại thoả mãn nhất cho những ai yêu thích công nghệ. Lý do? Vì bạn được thoải mái sử dụng những công nghệ tân tiến nhất trong dự án, được làm những ý tưởng từ điên rồ nhất cho tới bình thường nhất và được thất bại (trong một chừng mực nào đó). Công ty cũ của mình đã từng chi 500k $ cho một dự án nghiên cứu và xác định lỗ vốn trong 5 năm đầu, nhưng theo như phân tích, nếu dự án thành công và đưa ra bán cho người dùng cuối được, doanh thu thu vào sẽ gấp 10 lần vốn bỏ ra ban đầu. Nói vậy để bạn hiểu thách thức và cơ hội của người làm R&D.

Những người có cơ hội làm ở vị trí này hiện nay theo mình thấy tập trung ở một số doanh nghiệp chấp nhận tái đầu tư để xây dựng sản phẩm. Về sản phẩm thì hiện tại đang có xu hướng lớn về Big Data, Cloud Computing và Mobility, với các sản phẩm có dạng đầu, các bạn sẽ tha hồ làm với toán lý thuyết, xác suất và tối ưu, áp dụng cả lô cả lốc thuật toán để ra được… một thuật toán mới, tốt hơn, tối ưu hơn.

Lời khuyên của mình:

  • Nếu có cơ hội làm R&D, hãy chớp lấy, đó không phải là cơ hội có nhiều trong đời đâu
  • R&D là vị trí mà người làm cần có vision, đó là khả năng của từng người và bạn phải tự đánh giá được khả năng này của mình (để tránh khổ sở sau này)
  • Nếu bạn học Computer Science và bạn yêu những gì bạn được học, R&D thật sự là một lựa chọn tuyệt vời cho bạn áp dụng những gì được học trong trường vào công việc của mình và thoải mái bay nhảy với những thứ tưởng chừng như sẽ vứt đi này.
  • Các môn học cần quan tâm trong trường: Cấu trúc dữ liệu và giải thuật, toán rời rạc, xác suất thống kê, tối ưu, đại số. Ngoài ra thì đọc sách về giải thuật và sách về toán lý thuyết càng nhiều càng tốt vì R&D sẽ cần rất nhiều các kiến thức này.
  • Hãy chuẩn bị tâm lí cho những cuộc chia tay trong bất ngờ, bạn mình đã từng đang yên đang lành bỗng nhiên thấy 3 tuần sau công ty đóng cửa và có 3 tháng lương để đi xin việc chỗ khác một cách rất bất thình lình giật mình. Vì thế hãy tin là đây là một cơ hội tuyệt vời, dồn 100% sức lực vào đó, và nhạy cảm để lắng nghe được các tình huống không ngờ và tin rằng nếu bạn là người làm R&D và bạn giỏi, sẽ chẳng sếp nào cho bạn ra đi đâu (dù cho dự án có sụp đi chăng nữa),

Lập trình viên tự do (Freelancer)

Lập trình viên tự do – Freelancer nghĩa là muốn thức dậy lúc mấy giờ cũng được, nghĩa là muốn bắt đầu công việc vào lúc nào cũng được, và muốn nghỉ lúc nào cũng được. Freelancer vừa là giám đốc, vừa là trưởng nhóm lập trình, vừa là nhân viên, vừa là bảo vệ,… đại khái rất tự do và thoải mái. Tuy nhiên đây không phải là một vị trí của các tay mơ, họ phải làm việc rất chăm chỉ và nghiêm túc (tất nhiên là rất có trách nhiệm), nghĩa là đôi khi bạn sẽ phải làm việc trong cả ngày nghỉ, ngày lễ tết, trong các khoảng thời gian đặc biệt (nửa đêm chẳng hạn) và thường là trong khoảng thời gian dài (nếu trong thời gian ngắn thì dự là tay freelancer đó sẽ đói mất). Những freelancer thành công thường có kỹ năng trải rộng trong nhiều mảng khác nhau (fullstack developer) hoặc có kỹ năng tốt về frontend, nguyên nhân vì các sản phẩm được outsource bằng freelancer thường chỉ xây dựng lớp phía trên (frontend), phần nghiệp vụ bên dưới sẽ được giấu kín vì nói gì thì nói, freelancer đâu có ràng buộc gì với người thuê đâu.

Freelancer mang đến cho người ta sự thoải mái trong giờ giấc, ăn mặc và suy nghĩ, tuy nhiên đây không phải vị trí làm lâu dài được vì

  • Thu nhập không ổn định. Trừ khi bạn đảm bảo dự án luôn luôn gối đầu hoặc bạn có quan hệ tốt để đảm bảo dự án lâu dài và ổn định, còn không thì chỉ riêng việc bidding các dự án trên freelancer thôi cũng đã tốn của bạn khá khá thời gian và bạn sẽ có những lúc ngồi chơi dài chờ việc.
  • Công việc nhiều rủi ro: Các yêu cầu của người dùng thường được truyền tải không rõ ràng, dẫn tới sản phẩm làm ra không được như họ expect. Ngoài ra cũng phải nói đến trường hợp người thuê xù tiền hoặc huỷ không lý do, vụ này mình chưa được trải nghiệm nhưng đã có nghe qua bạn bè, khá là thốn.
  • Thời gian làm việc bừa bãi: Bạn tớ đã có người phải tháo chạy khỏi freelancer vì không thể chịu được việc ban ngày thì ngủ quay ngủ quắt rồi cứ tới nửa đêm dậy làm việc (do đối tác ở US). Kiểu làm việc này thật sự ảnh hưởng tới sức khoẻ của bạn – hãy nhớ rằng tiền mất có thể kiếm lại được còn sức khoẻ mất thì không thể lấy lại được.

Tuy nhiên đây là vị trí mình nghĩ mọi người nên thử qua nếu có cơ hội vì cảm giác được quyết định tất cả thật sự rất tuyệt :).

Lời khuyên của mình:

  • Giữ thái độ làm việc nghiêm túc và chuyên nghiệp với Khách hàng: chẳng ai muốn thuê lại bạn nếu bạn bàn giao sản phẩm không đúng ý lại nhiều lỗi. Nếu bạn để điều này xảy ra, tương lai bạn sẽ chẳng còn anh khách hàng nào để kiếm tiền nữa.
  • Chịu khó lượn các trang web chuyên về freelancer như freelancer.com để tìm các cơ hội tại đây
  • Thường xuyên update công nghệ mới để tránh lạc hậu và bất ngờ trong trường hợp khách hàng có nhưngx yêu cầu mới.
  • Cân nhắc kỹ lưỡng trước khi có ý định làm việc như Freelancer, định rõ khoảng thời gian chính xác mình nên làm việc như một freelancer vì hãy nhớ bạn không thể đủ sức khoẻ để làm freelancer mãi được.

Du học – nghiên cứu (Study):

Wow, chúc mừng cho các bạn có được cơ hội để đi làm nghiên cứu sinh ở nước ngoài, đây sẽ là một trải nghiệm rất mới với các bạn. Và tin mình đi, cuộc đời này ngắn lắm, những cơ hội như này thật sự rất hiếm có và tuyệt vời.

Tuy nhiên, đây cũng sẽ là thử thách rất lớn cho các bạn vì nếu sau khi tốt nghiệp, bạn không thể xin làm nghiên cứu lâu dài và phải trở về nước thì sau 5 năm, bạn sẽ phải chạy đi xin việc từ đầu, như một fresher, lương thọt và cái bằng của bạn chẳng còn giá trị gì. Với sự thay đổi về nhận thức của các doanh nghiệp ở VN như hiện nay, các công ty lớn như FPT, VNG hay VCCorp đã bắt đầu đổ tiền đầu tư vào R&D, họ tìm kiếm các ứng viên tốt nghiệp nước ngoài trở về VN để xây dựng các hệ thống đám mây và Big Data, nhưng số lượng các công ty này không nhiều và vì thế, vẫn còn rất nhiều khó khăn cho những người trở về.

Dù gì đi chăng nữa, hãy tận hưởng khoảng thời gian mà các bạn đã phải chiến đấu rất nhiều để có được, nó sẽ rất tuyệt đấy :).

Lời khuyên của mình

Các bạn toàn người giỏi hơn mình, không dám khuyên gì 😀

  • Đùa thôi, với những ai đang có ý định du học bằng tiền nhà nước, một lời khuyên chân thành tôi dành cho các bạn là nên khởi động chiến dịch từ sớm khoảng năm thứ 2 là phải bắt đầu. Với nguồn thông tin vô tận từ Internet hiện nay, tôi nghĩ việc chuẩn bị kế hoạch từ sớm sẽ là một lợi thế rất lớn cho các bạn.
  • Tham gia hoạt động ngoại khoá thật nhiều – với rất nhiều trường ĐH ở nước ngoài, hoạt động ngoại khoá là một tiêu chí quan trọng trong quá trình xét tuyển ứng viên. Vì thế bạn hãy cố gắng tham gia các hoạt động ngoại khoá bên cạnh việc học tiếng Anh và nâng cao GPA của mình, đừng để ăn bàn thua không đáng có ở phút 89!!!

Lời kết:

Thực tế, có lẽ mình vẫn còn bỏ sót một vài vị trí như triển khai, QC, chuyên gia bảo mật… vì thực sự càng ngày càng có nhiều vị trí được chuyên môn hoá và thật sự thì mình cũng không đủ hiểu biết để nắm thông tin hay có trải nghiệm với tất cả các vị trí đó. Tuy nhiên mình vẫn mạnh dạn viết về những vị trí mà mình đã từng trải qua hoặc có hiểu biết để chia sẻ với mọi người.

Mỗi vị trí trong ngành công nghiệp phần mềm đều có những điểm thú vị riêng, có những thuận lợi và khó khăn nhất định, lựa chọn một vị trí làm mục tiêu ngay từ trong trường là điều nên làm. Tuy nhiên, xét cho cùng việc phải chạy lòng vòng qua một loạt các vị trí cũng có những điểm có lợi của nó, hiện tại mình có thể tự tin rằng với những gì mình đang có, mình đã chọn đúng đường. 6 năm làm việc với nhiều vị trí khác nhau đã cho mình những kinh nghiệm quý báu, vị trí BA giúp mình thêm nhiều kiến thức về trình bày tài liệu, văn bản kỹ thuật, vị trí DBA giúp mình có các kỹ năng cần thiết để làm việc với Database, mình hoàn toàn tự tin mỗi khi phải làm việc với các loại sản phẩm này, vị trí Team leader/PM giúp mình có kỹ năng quản lý team, phân bổ nguồn lực, nhận biết rủi ro, lập lịch và

Mình thường nghe đi nghe lại bài diễn văn của Steve Jobs đọc tại buổi lễ tốt nghiệp trường Stanford, trong đó có câu chuyện Connecting the dot, đôi khi người ta quá ích kỉ, chỉ biết ngồi một chỗ mà than trách số phận mà quên mất rằng tất cả những gì ta đang có hiện tại là do chính mình đã chọn. Câu chuyện Connecting the Dot cũng có nghĩa là những lựa chọn của bạn bây giờ có thể chẳng ra đâu vào đâu cả, nhưng biết đâu sau 10 năm nữa quay trở lại, đó sẽ là một điều tuyệt vời.

Vì thế, xét cho cùng lắng nghe con tim mình yêu thích điều gì thực sự, chấp nhận đương đầu với thử thách và kiên định với con đường mình đã chọn sẽ là chìa khoá của thành công.

Đôi điều về việc đi làm

28 tuổi, đi làm được 6 năm, nhảy 2 công ty.

Rút ra được đôi điều.

1. Ai cũng có lúc trẻ tuổi và mắc sai lầm, vấn đề là làm sao để nó ngắn ngắn thôi

Chẳng ai cho không ai cái gì cả, đơn giản là như vậy. Công ty đầu tiên của tôi là một công ty hàng đầu về phần mềm trong nước, chuyên cung cấp giải pháp trọn gói cho các doanh nghiệp trong nước. Chuyện chẳng có gì nếu không có cái yếu tố nhà nước gắn vào, công việc đơn giản nhẹ nhàng, áp lực ít, chất xám ít, nghiêm túc cũng ít. Cụ tỉ, tôi đi làm vào lúc 9 rưỡi và về nhà ăn cơm lúc 11 rưỡi, sau đó ngủ đến 2h và có mặt ở công ty vào lúc 2 rưỡi, ngày làm việc như vậy kết thúc vào lúc 5h, rất đều đặn. Đương nhiên, lương của tôi ì ạch tăng từng… trăm nghìn một và đi cùng với đó là sự ỳ trệ về đầu óc, lạc hậu về tư duy và công nghệ. Tôi vật lộn ở đó 5 năm và phải rất cố gắng để có thể chấm dứt những suy nghĩ tiêu cực đã kéo tôi ở lại  công ty đó suốt từng ấy năm trời.

Bài học rút ra: chẳng công ty nào đáp ứng được một loạt nhu cầu: lương cao, việc nhàn, ít áp lực, vấn đề là bạn không được ngủ quên trên sự sung sướng và nhàn tản, rồi bạn sẽ tiếc nuối khoảng thời gian đó khi bạn trưởng thành.

2. Hãy thông minh khi cống hiến cho công ty mà bạn được trả lương

Khi tham gia vào bất cứ công ty nào, tôi luôn quan tâm đến các vấn đề sau:

– Tôi học được gì trong thời gian làm ở đó

– Lương, đãi ngộ của công ty dành cho mình và gia đình

– Cơ hội thăng tiến

Tôi đang tham gia vào 1 dự án thuộc dạng hiếm ở miền bắc, sử dụng các công nghệ vào dạng mới nhất và hay nhất hiện nay, xử lý các vấn đề đau đầu cũng thuộc dạng nhất hiện nay. Nhưng tôi quyết định xin nghỉ việc khi phát hiện ra tôi đã chững lại trong việc học hỏi suốt 1 khoảng thời gian dài, và cùng với đó, mức lương công ty trả cho tôi không còn đáp ứng được những gì tôi phải bỏ ra trong suốt thời gian làm ở đây.

Bài học rút ra: Khi công việc còn thỏa mãn được 2/3 các vấn đề trên, hãy cố gắng làm việc thật tốt, và quyết định sớm việc chuyển công ty khi thấy không được đáp ứng các vấn đề này. Một số ngoại lệ có thể xét tới, nhưng đại để thì tôi nghĩ cứ 2/3 là có thể quyết nhanh :).

3. Mơ lớn, nghĩ lớn và không dừng học hỏi

Tôi có một người anh, xuất phát điểm như các cậu thanh niên khác ở quê lên HN học, tay trắng, đầu óc ngây thơ và trong sáng, có chăng, anh khác tôi ở những giấc mơ lớn và khả năng học hỏi không ngừng nghỉ. Anh mới nhận một công việc với mức lương mơ ước và điều kiện làm việc giúp anh được trải nghiệm nhiều vùng đất mới. Điều làm anh khác tôi và những người còn lại ở chỗ, anh xác định được giấc mơ của mình, có thể nó lớn thật nhưng chẳng có gì là “impossible”, căn bản, ngay khi ta mơ ta đã nghĩ nó chỉ là giấc mơ, vậy là đã có 1 rào cản “nho nhỏ” ngăn cách chính ta với mục đích cuối. Hãy mơ lớn, có thể sẽ viển vông, có thể sẽ thật bại, nhưng tuổi trẻ là phải mơ, và mơ thì phải đi cùng với hành động thực tế. Tất nhiên, đừng quên việc học hỏi, vắt tay lên trán mơ mãi mà không học tập, trau dồi kiến thức thì cũng chẳng để làm gì :).

Note viết vội trong lúc em gái chờ lấy máy làm việc. Hơi nhạt!

Sub version (SVN) Tofu scale

Lang thang mò lại được một bài viết có các định nghĩa cơ bản trong SVN, phải bê ngay về để lưu trữ trong blog.
Bài viết “Sub version (SVN) Tofu scale” sưu tầm từ blog của thanhnp.wordpress.com
Một số khái niệm căn bản về svn:
Repository: Là nơi lưu trữ phiên bản mới nhất của file, cùng các phiên bản trước đó, và nó thường được đặt tại server
Version : Là là một phương pháp đặt tên, hay số duy nhất mỗi trạng cho trạng thái  của cây repository tại một thời điểm. Với version đặt tên bằng số, các số này được săp xếp theo thứ tự tăng dần. Phiên bản mới hơn sẽ có số lớn hơn.
Changeset: Changeset là một tập hợp những thay đổi với một tên là duy nhất, Những thay đổi có thể là những đoạn được edit trong một file nội dung, những thay đổi trong một cấu trúc cây… Changeset không lưu lại toàn bộ file khi bạn edit , nó chỉ lưu lại những điểm thay đổi , nó là một patch với một tên riêng biệt mà bạn có thể truy cập tới.
Project Layout: Nơi tập trung code của một project, chỉ chứa các file liên quan đến project không chứa những project con.
Repository Layout: Cấu trúc các thư mục để lưu các version của project, hay thư mục lưu tài liêu liên quan tới project , cho phép ta có thể check project theo từng giai đoạn.
Example:
  • Repository Layout
  • /branches
      • dev
        • 1.1.10/code   <= Project Layout
        • 1.1.11/code   –
      • releases
  • /tags
  • /trunk
Branches: Branches là một nhánh code được copy ra từ một nguồn code (có thể là trunk hay một branch khác), và nó đươc development một cách độc lập với các thành phần khác.
Branches được tạo ra với các mục tiêu:
  • Development độc lập với các revision hiện tại, và nó sẽ xuất hiện trong release version
  • Làm việc độc lập trong thời gian dài.
  • Sử dụng source code từ các developers khác.
Tags: làm một “snapshot” của một project tại một thời điểm. Trong subversion, mỗi revision là một snapshot cùa một repository filesystem sau mỗi lần commit,
Sprint: làm một kỹ thuật quản lý thời gian trong planing projects, trong đó schedule được chia ra thành từng quãng thời gian riêng biệt, với mỗi quãng thời gian thì có một mục tiêu, deadline.
The version control pattern:
Mainline là gì ?
Một branch được gọi là một codeline, như trên hình vẽ release 2.3, 2.4 hay Project x là một codeline.
Cha của một codeline được gọi là baseline, release 2.4 là baseline của release 2.4.1.
– Mainline là một codeline không có base line, trunk là mainline, mỗi resposotory chỉ có một mainline và nó phải thỏa điều kiện
– Can release at any time: Tại mọi thời điểm khi muốn có một sản phẩm mới ta đều có thể release trực tiếp từ mainline.
Theo ví dụ trên: line màu xanh là trunk (mainline). Mỗi green ball thể hiện một lần checkin, khi hoàn thành 5 phần thì kết thúc được một Sprint.  Chúng ta có thể release từ trunk bất cứ lúc nào, khi gặp sự cố không thể finish #5 ta vẫn có thể release.
– Want to release ASAP: Khi không muốn release #3, ta có thể kill branch, và release tới #2 như ở hình trên.
Tofu scale ?
Firm codeline“: là nhánh code ổn định, đã qua test, không thường xuyên thay đổi,  và là một nhánh release đã close.
Soft codeline“: là nhánh ít ổn định hơn, vừa thực hiện test, có thể bị thay đổi thường xuyên, và chưa đưa ra release
Qua ví dụ trên ta thấy, nếu Team B làm một nhánh code khác  merge trực tiếp từ Team A, điều này có thể sẽ dẫn tới nảy sinh rất nhiều lộn xộn trong code. thay vì làm điều đó , team A sau khi kết thúc team A sẽ đưa code của mình lên mainline, và team B sẽ down từ mainline xuống làm.
Mọi nhánh nằm trên mainline được gọi là release codeline. Release codeline firmer hơn mainline.
Mọi nhánh nằm dưới mainline được gọi là development codeline.development codeline softer hơn mainline.
Với ví dụ tại hình trên ta thấy:
  • Project x là một codeline được sinh ra từ mainline. Khi project hoàn thành, thì branch đó sẽ được đóng lại.
  • Team A đang làm việc trên một codeline được sinh ra từ mainline
  • Team A cũng đang song song thực hiện module Spike, module Spike này  có thể có lỗi vì vậy nếu thực hiện chung với branch A có thể gây cho Project A bi lỗi,  khiến team A không thể thực hiện song song được vì vậy tách ra thanh một branch Team A spike khác.
  • release 2.3 branch đã được close, RULES: Không để cho hai nhánh release cùng open, muốn release 2.4 phải close branch release 2.3
Với Tofu scale, ta dễ dàng thấy được rằng
  • Release 2.3 firmer hơn mainline.
  • Team A work softer hơn mainline
  • Team a spike softer hơn Team A work
Qua hình ảnh bên trên ta thấy rằng:
  • Bất kỳ khi nào có thay đổi trên realease codeline, những thay đổi này nên lập tức được merge down (Flow down ) to baseline, tất cả nên được merge xuống mainline
    • Example: khi một bug được fix tại R2.4.2. Nó nên được merge down to R2.4, và sau đó merge từ R2.4 xuống mainline.
  • Release codeline không bao giờ được nhận thay đổi từ baseline.
    • Example: Khi một new code được check tới mainline (từ nhánh dev copy up (flow up) lên), nó không nên được truyền tới R2.3, và R2.4
  • Mọi thay đổi trên baseline nên nhanh chóng được merge down xuống development codeline.
    • Example: Mọi thay đổi từ codeline nên được nhanh chóng merge down xuống Tearm A, Team B, khi Team A merge down xong thông báo với A spike, Merge down từ Team A xuống A spike.
  • Chỉ copy up từ development codeline  lên baseline khi chắc chắn nó đã stable points.
    • Example: Team B copy up to mainline khi đã hoàn thành và qua test.
    • A spike chỉ copy up lên Team A khi đã finished và tested.
Branch owner làm gì?
  • Mỗi một branch nên có một người là owner chịu trách nhiệm về branch đó
  • Quyết định xem có nên tách một codeline từ branch này hay không.
  • Thông báo tới tất cả các codeline khác sinh ra từ branch update khi baseline thay đổi
  • Mọi người làm việc trên codeline, phải biết baseline owner của mình để merge code khi baseline owner báo baseline thay đổi.
Khi nào tôi nên add new branch ?
  • Khi phát triển những new features, nên check code từ trunk, add a new branch và develop trên đó.
  • Khi finish một task, nhưng task này chưa được test, cần một nơi để có thể check code, nơi mọi người trong cùng team có thể làm việc với code.
Khi nào nên merge code từ baseline ?
  • Nên thường xuyên merge code từ baseline, càng sớm càng tốt, hàng ngày, tìm và giải quyết các conflict xảy ra lúc đó.
  • Khi baseline owner thông báo có thay đổi trên baseline.
Resolve conflicts trên branch kém ổn định nhất
  • Nếu bạn bị confict code , bạn nên resolve nó ngay lập tức, nếu code confict được check từ một nhánh khác, nên tìm branch owner của nhánh đó giúp resolve conflict.
Khi nào tôi nên Merge code với Trunk ?
  • Nên merge code thường xuyên với Trunk, khi bạn kết thúc một phần và đã test kỹ, nên merge nó với trunk, tránh để tới cuối cùng mới merge, điều này khiến bài toán merge trở nên bớt phúc tạp và mất thời gian hơn.
Release Branches
Sau khi kết thúc sprint 1 và released version 1.0.0, và đã thực hiện xong một số phần của sprint 2,qua quá trình test phát hiện một số bug của release 1.0.0. Tôi phải làm gì ?
  • Tạo một release branch gọi là release 1.0, từ nhánh release 1.0.0
  • Fixbug trên nhánh này
  • Merge từ nhánh release xuông trunk ngay khi fix xong, và release ban 1.0.1
Làm thế nào để release code lên Trunk ?
Hiện tại bạn đã finish code tại branch Team B , tested  tại development branch và muốn merge với Trunk.
  1. Lock nhánh release 2.3 mới nhất trên Release branch để không ai commit tại thời điểm này.
  2. Check out code từ trunk về local.
  3. Merge code từ nhánh release 2.3  newest trên release branches về trunk tại local, nếu có conflict edit ngay tại đó.
  4. Merge code từ trunk về nhánh dev Team B của minh trên local, và edit ngay conflict , commit code lên nhánh dev Team B
  5. Merge code từ dev branches Team B tmới commit rên server  về trunk trên local, edit conflict nếu có.
  6. Copy up từ Trunk local lên trunk server
  7. Add branches  release 2.4 trên nhánh release branches bằng cách check code trên trunk mới lên.
 
Trunk: tương ứng với mainline trong Mainline model. Có thể release phiên bản caravat mới bất kỳ lúc nào.
branches/dev : Development  Branches: nhánh phát triển chức năng mới, tách biệt
branches/release : Release Branches: Dùng để release, hay fixbug.
Tạo một brand mới như thế nào
  1. Chọn Tag/branch => Add Branch , hay dùng phím tắt Ctrl + B
  2. Trong màn hình Add Branch
    • Name: Tên của branch sắp tạo ra, phải tuân theo quy tắc
      • Nếu nằm trên nhánh Dev phải: dev/New Name Branch.
      • Nếu nằm trên nhánh Releases phải: releases/new name branch.
      • Có thể thấy các nhánh hiện có trong Repository bằng cánh nhấn vào button “…” => ra màn hình Tag Browser.
  3. Source: Tạo branch mới với source lấy từ đâu
    • Working Copy: Lấy code từ một thư mục nằm dưới local.
    • Repository Revision: Lấy code từ một nhánh khác( thông thường từ Trunk ) chép qua nhánh đang tạo.
  4. Check out code từ nhánh đang tạo về, và sử dụng để develop.
Quy tắc đặt tên version  m.m.b.b (major.minor.bugfix.builds) trong caravat
  • Major: Tăng khi có sự thay đổi lớn trong hệ thống, như core, hay khi có một tính năng lớn, quan trọng được add thêm vào hệ thống
  • Miner: thay đổi theo tháng, hay thêm các tinh năng mới, hay fix những bug lớn và quan trọng
  • Bugfix: khi fix xong một đợt bug
  • Builds: chỉ số bản build
Example: 1.12.2.1,
Project layout phải là nốt lá
Tất cả các project layout đều phải là nôt lá, không có project nào nằm trong nó và đều chung root là “code”. Điều này giảm tối đa chi phí của bài toán merge, SVN sẽ merge đúng hơn khi hai file nằm chung một root.
Khi có project a1 là child của project a, tạo branches thế nào là đúng?
Khi có một project a1 là con của project a, ta nên tạo branch ngang hàng project a1 với project a trong repository Layout
Example: ta sẽ tạo branches/dev/a1/codecùng cấp với branches/dev/a/code
References: