72
1

PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

Embed Size (px)

Citation preview

Page 1: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

1

Page 2: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

1

PHẠMHUYHOÀNG

CODEDẠOKÍSỰLẬPTRÌNHVIÊNĐÂUPHẢI

CHỈBIẾTCODE

Page 3: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

2

NHÀXUẤTBẢNTRITHỨC

Page 4: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

3

Page 5: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

4

LỜIGIỚITHIỆU

Chàocácbạn,mìnhlàPhạmHuyHoàng,chủmộtblogITmangtênTôiđicodedạo.

Hiệnnay,ngànhITnóichungvàlậptrìnhnóiriêngđangtrởthànhmộtngànhhot,đượckhánhiềubạnsinhviênlựachọn.Tuynhiên,sovớinướcngoài,cácbạnsinhviênViệtNamchịukhánhiềuthiệtthòivìthiếunhữngtấmgươngvàtàiliệuđểhọchỏi.Thuởcònlàsinhviên,mìnhcũngtừngcónhữngthắcmắc,trăntrởvềkĩthuật,vềconđườngnghềnghiệp,nhưngkhôngcóaigiảiđáp.

Làmộtlậptrìnhviên,cácbạncầnhọcrấtnhiều,nhưngkhôngsáchvởnàonóivềcáchtựhọcchohiệuquả.Lậptrìnhviêncầnbiếtcáchgiaotiếpvàlàmviệcnhóm,nhưngítthầycônóichocácbạnbiếtđiềunày.LậptrìnhviêncầnphảigiỏitiếngAnh,nhưnghầunhưđilàmrồicácbạnmớitựnhậnra.

Khôngbiếtnhữngđiềunày,bạnsẽphảihứngchịuvôsốgạchđátrênconđườngnghềnghiệp.Dovậy, chúng ta cầnnhữngđầusáchđịnhhướngnghềnghiệpvànhữngkĩnăngphảicócủangườilậptrìnhviên.

Tuynhiên,đaphầnsáchchodânIThiệnnayquátậptrungvàokĩthuậtvàcôngnghệ(kĩnăngcứng),quênmấtnhữngkĩnăngmềmmàlậptrìnhviênnêncó.Nhữngquyểnsáchtrêncũngkháhànlâmvàkhôcứng,khótiếpthu.

Cuốnsáchnàykhôngnhưthế!Vậynócógìhot?

Page 6: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

5

Đâylàcuốnsáchduynhấttậptrungvàophầnkĩnăngmềmmàmỗilậptrìnhviêncầncó.Đikèmvớichúngnhữngkĩnăngcứngđượcđúckếtquakinhnghiệmbaonămlàmviệccủatácgiả.Sáchđảmbảosẽđưabạnđọctừmềmđếncứng.

Thaychonhữngchươngsáchdày cộm toànchữ,nộidung sáchđượcchia làmnhiềubàiviếtngắngọn,mỗibàiviếtđềcậpđếnmộtkhíacạnhkhácnhau.Giọngvănngắngọn,hàihướcdídỏm,đọckhônghềcứngnhắcnhưsáchkĩthuậtmàlạirấtdễtiếpthu.Đoạnnàykhôngphảinhậnxétcủamìnhmàđólànhậnxétchungcủakhoảng2000bạnđọcghéthămblogmỗingày.

Ngànhlậptrìnhrấtrộnglớn,khôngthểđềcậphếttrongmộtcuốnsách.Dovậy,mìnhtậptrungnhiềuvàoviệcrènluyệnkhảnăngtựhọcvàđịnhhướngchobạnđọc.Cókĩnăngtựhọc,cóđịnhhướngtốt,bạnsẽdễdàngsốngsótvàthăngtiếntrongngànhnày.

Page 7: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

6

MỤCLỤC

TÓMTẮTNỘIDUNG

PHẦN1–KĨNĂNGMỀMMỀM

VÀILỜIKHUYÊNVÀĐỊNHHƯỚNGCHỌNTRƯỜNGCHOCÁCBẠNTRẺ

LẬPTRÌNHVIÊNCÓCẦNHỌCĐẠIHỌCHAYKHÔNG?

HAISAILẦMLỚNNHẤTTRONGQUÁTRÌNHHỌCLẬPTRÌNH

ĐƯỢCGÌMẤTGÌKHIHỌCLẬPTRÌNHBẰNGTIẾNGVIỆT

TÔIĐÃHỌCTIẾNGANHNHƯTHẾNÀO

HỌCTHUẬTTOÁNĐỂLÀMCÁIQUÁIGÌ?

NHỮNGĐIỀUTRƯỜNGĐẠIHỌCKHÔNGDẠYBẠN

TẠOĐỘNGLỰCHỌCTẬPVÀLÀMVIỆC–SỨCMẠNHCỦATHÓIQUEN

THỰCTRẠNGHỌCLẬPTRÌNHCỦAMỘTSỐTHANHNIÊNHIỆNNAY

THAYLỜIMUỐNNÓI–GỞITỚINHỮNGNGƯỜITHÂNYÊUCỦAMỖILẬP

TRÌNHVIÊN

HỌCNGÔNNGỮLẬPTRÌNHNÀOBÂYGIỜ

CÁCHTIẾPCẬN1NGÔNNGỮ/CÔNGNGHỆMỚI

TOPCÁC“TRƯỜNGDẠYCODE”ONLINECHOCÁCDEVELOPER

KĨNĂNGCẦNCÓCỦAMỘTWEBDEVELOPER

TỔNGQUANVỀLẬPTRÌNHỨNGDỤNGDIĐỘNG

MUÔNNẺOĐƯỜNGTÌMVIỆC

CONĐƯỜNGPHÁTTRIỂNSỰNGHIỆP(CAREERPATH)CHODEVELOPER

MẶTTỐICỦANGÀNHCÔNGNGHIỆPIT–PHẦN1

TOP18SAILẦMMÀCÁCLẬPTRÌNHVIÊN“NONTRẺ”HAYMẮCPHẢI

ĐỪNGCOINGÔNNGỮLẬPTRÌNHNHƯTÔNGIÁO

Page 8: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

7

LẬPTRÌNHVIÊNNÊNĐỌCNHỮNGSÁCHGÌ?

SỰTHẬTĐẮNGLÒNG:ĐÔIKHI CẮMĐẦUNGỒI CODELÀCÁCH…NGU

NHẤTĐỂGIẢIQUYẾTVẤNĐỀ

PHẦN2–KĨNĂNGCƯNGCỨNG

XÓAMÙVỀAGILEVÀSCRUM

TỔNGQUANVỀUI/UXTRONGNGÀNHLẬPTRÌNH

MỘTBUTTONTRỊGIÁ300TRIỆUĐÔ–CÁINHÌNKHÁCVỀGIAODIỆNVÀ

CHỨCNĂNG

LUẬNVỀTECHNICALDEBT–NỢKIẾPNÀY,DUYÊNKIẾPTRƯỚC

GIẢITHÍCHĐƠNGIẢNVỀCI – CONTINUOUS INTEGRATION (TÍCHHỢP

LIÊNTỤC)

SỰKHÁCBIỆTGIỮAWEBSITEVÀWEBAPPLICATION

LUẬNVỀCOMMENTCODE(PHONGCÁCHKIẾMHIỆP)

NHẬPMÔNDESIGNPATTERN(PHONGCÁCHKIẾMHIỆP)

SOLIDLÀGÌ–ÁPDỤNGCÁCNGUYÊNLÝSOLIDĐỂTRỞTHÀNHLẬPTRÌNH

VIÊNCODE“CỨNG”

SINGLERESPONSIBILITYPRINCIPLE–NGUYÊNLÝĐƠNTRÁCHNHIỆM

OPEN/CLOSEDPRINCIPLE–NGUYÊNLÝĐÓNG/MỞ

LISKOVSUBSTITUTIONPRINCIPLE–NGUYÊNLÝTHAYTHẾLISKOV

INTERFACE SEGREGATION PRINCIPLE – NGUYÊN LÝ PHÂN TÁCH

INTERFACE

DEPENDENCY INVERSION PRINCIPLE– NGUYÊN LÝ ĐẢO NGƯỢC

DEPENDENCY

DEPENDENCYINJECTIONVÀINVERSIONOFCONTROL

SAILẦMHAYGẶPCỦALẬPTRÌNHVIÊNMỚIVÀNHỮNGMÁNHKHÓECỦA

CÁCLẬPTRÌNHVIÊNVĨĐẠI

Page 9: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

8

BÍKÍPĐỂTRỞTHÀNH“CAOTHỦ”TRONGVIỆCFIXBUG

CHUYỆNVỀNHỮNG“ỔGÀ”TRÊNCONĐƯỜNGLẬPTRÌNH

ĐIỀUGÌNGĂNCẢNBẠNĐẠTCẢNHGIỚITỐICAOTRONG“CODEHỌC”?

PHẦN3–KÍSỰCODEDẠO

TẠMBIỆTASWIG–ĐÔIDÒNGTÂMSỰCỦACHÀNGJUNIORDEVELOPER

CHUYỆNĐẦUNĂM–LẦNĐẦUĐIPHỎNGVẤNXINVIỆCNƠIĐẤTKHÁCH

QUÊNGƯỜI

NGÀYĐẦUĐICODEDẠONƠIĐẤTKHÁCHQUÊNGƯỜI

TẠM BIỆT LANCASTER ISS – TẠM KẾT THÚC KIẾP CODE DẠO NƠI XỨ

NGƯỜI

LỜICUỐISÁCH

GIẢITHÍCHCÁCTHUẬTNGỮTRONGSÁCH

LINKẢNHVÀTÀILIỆUTHAMKHẢO

Page 10: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

9

TÓMTẮTNỘIDUNG

Nộidungcuốnsáchgồm3phầnchính:

• Phần1tậptrungvàonhữngkĩnăngmềmvàtháiđộmỗi lậptrìnhviêncầncótrênbaquãngđường:Thuởcònngồighếnhàtrường,khisắpratrườngvàkhibắtđầuđilàm.Tuyvậy,cácbạnsinhviêncóthểđọcphần“làmviệc”đểhiểuthêmvềcôngviệctươnglai,cũngnhưcácbạnđãđilàmcóthểđọcphần“họchành”đểbiếtvàbổsungnhữngkĩnăngmìnhcònthiếu.

• Phần2đisâuhơnvềnhữngkĩthuậtlậptrìnhtừcơbảnđếnnângcao.Đaphầnnhữngkĩthuậtnàykhôngđượcdạyhoặcchỉđượcdạykhásơsàiởnhiềutrườngđạihọc,dẫnđếnviệcsinhviênphảitựhọc,tựmòmẫmkhiđilàm.

• Phần3lànhữngmẩuchuyệnvàtrảinghiệmnhonhỏcủachínhtácgiảtrongquãngthờigianlàmlậptrìnhviênởtrongvàngoàinước.

Đốitượngchínhcủasáchlàcácemlớp12sắpchọnngànhIT,cácbạnsinhviênIT,nhữngbạnlậptrìnhviênvừaratrườngmớiđilàm,vànhữngbạn trẻmuốn tìmhiểuvềngành IT.Dovậy, sáchkhông tậptrungquánhiềuvàokĩ thuật(ngoại trừphần2nặngvềkĩnăng lậptrình).

Bàiviếttrongsáchsửdụngnhiềuvídụsinhđộng,ngôntừdễhiểu,khônghànlâmnhữngnênbạnđọckhôngcóchuyênmônvềITcũngcóthểthoảimáiđọcvàthưởngthức.NhữngtừngữthôngdụngtrongngànhITsẽđượcliệtkêphíacuốisách,giúpbạnđọcdễtìmhiểuhơn.

Page 11: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

10

PHẦN1–KĨNĂNGMỀMMỀM

Đaphầncácbạnsinhviênthườngnghĩrằngchỉcầnhọcgiỏi,vữngkĩnăngcứng(kĩnănglậptrình)thìsẽdễdàngkiếmđượcviệclàm,thăngtiến.Đâylàmộtsuynghĩkhásailầm,vìđôikhikĩnăngmềmnhiềukhicònquantrọnghơnkĩnăngcứngrấtnhiềulần.

Nếubạncodegiỏinhưngkhôngbiếtgiaotiếpvớitrưởngnhómvàcácthànhviênkhác,bạnsẽkhôngthểtruyềnđạtýkiếncủamìnhhaylãnhđạo.NếubạnlậptrìnhtốtnhưngkhôngrànhtiếngAnh,khôngbiếttựhọcthìkiếnthứccủabạnsẽrấtnhanhhếtthời, làmbạnbịtụthậu.Hoặcgiảbạncógiỏiđếnmấynhưngnếucứmangtháiđộ“mìnhlàsinhtrườngA,Bdanhgiá,giỏihơnhẳnbọnkia!”đixinviệc,bạnsẽrớtngaytừvònggửixe,àkhông,gửinón.

Dovậy,mìnhdànhraphầnđầucuốnsáchđểtậptrungvàonhữngkĩnăngmềmmàlậptrìnhviêncầncó,nêncóvàphảicóđểtrởthànhmộtlậptrìnhviên(developer)chuyênnghiệp.

Giaiđoạn1–HọchànhĐâylàgiaiđoạnbạncầntậptrunghọccáckiếnthứcnềntảngtrongtrường,rènluyệnkhảnăngtựhọc,tiếngAnhv…v.Cácbàiviếttrongphầnnàysẽmangtínhđịnhhướng,đồngthờiđềcậptớinhữngkĩnăngnóitrên.

Page 12: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

11

VÀILỜIKHUYÊNVÀĐỊNHHƯỚNGCHỌNTRƯỜNGCHOCÁCBẠNTRẺ

Chọntrườngđạihọcvàchọnngànhhọclàmộtngưỡngcửakháquantrọngcủacuộcđời.Cólẽđaphầnbạnđọccủasáchlàsinhviênđạihọc,hoặcđãđilàmnênchắcsẽkhôngcầnđọcbàinày.Tuynhiên,hãyđưanóchoem/cháubạnhoặcphụhuynhcủacácem.Bàiviếtsẽgiúphọcócáinhìnđúnghơntrongviệcchọntrường,giúpcácemhiểuhơnvềcôngviệcmìnhsẽlàmtrongtươnglại.

Lờikhuyênđầu:HọctrườngvừasứcLờikhuyênđầu tiênmìnhmuốngửi tớicácbạnvàcácem là:Chọntrườngvừasứcmình.Vừasứcởđâykhôngchỉcónghĩalàvừasứcđậu,màcòncónghĩalàvừasứchọcvàcạnhtranh.

Tại sao lại chọn trường vừa sức mà không phải là trường nổitiếng?Theo lẽ thường, chất lượngdạyvàhọcở của các trườngnổitiếngnàykhácao,tấmbằngđạihọcdanhtiếngcũngrấtcóíchkhibạnvừaratrườngxinviệchoặcmuốntiếptụchọclêncao.

Tuynhiên,ởcáctrườngnày,dochất lượngđầuvàocaonênbạnsẽphảihọchànhvàcạnhtranhvớinhữngbạnbègiỏihơn(cònđượcgọidướicáitênthiêntàihayquáivật).Nếukhôngđủgiỏi,việccạnhtranhvớinhữngthànhphầnnàydễlàmbạnnảnlòngthoáichí.Chưakể,docácgiáoviênđãquenvớiviệcdạydỗhọcsinhthôngminh,cóthểhọsẽgiảnggiảivớitốcđộnhanhhơn,khóhiểuhơn,làmbạnkhótheokịp.

Ngoàira,vàonhữngtrườnggiỏi,bạnrấtkhóđểvàotopđầulớphoặcgâyấntượngvớigiáoviên(vìhọcsinhgiỏinhiềuquárồi).Ngàyxưa,mìnhcũngđậuđạihọcBKHCMnhưngkhônghọc,mộtphầnlàdoFPTcóhọcbổng70%,mộtphầnlàdomìnhkhôngmuốnbỏquánhiềucôngsứcvàoviệccạnhtranhhọctập.VàoFPT,mìnhdễdàngđứngđầulớp,đượcnhiềugiáoviênthươngvàđểý.Nhờvậy,mìnhdễdàngxinthưgiớithiệucủahọkhilàmđơnduhọc.

Page 13: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

12

Lờikhuyênthứhai:Tựhọcđi,khôngaidạybạnđâu!Lờikhuyênthứhailà:Kiếnthứcởtrongtrườngkhôngđủđểbạnxinviệcđi làmđâu1.Dođóhãybắtđầurènluyệnkĩnăngtựhọcvàtìmhiểutừbâygiờđi.Nhữngkiếnthứcbạncóđượckhihọcđạihọcchỉlànền tảngthôi, khómà áp dụng ngay vào công việc! Nếu chỉ biếtnhữnggìđượcdạymàkhôngbiếttựmàymòhọcthêm,bạnsẽgặpkhánhiềukhókhănkhiômmớnềntảngđóđixinviệcđấy!Nhiềubạnsinhviênđihọcđượcmột,hainămthìbắtđầurơivàotìnhtrạngmất phương hướngvì cảm thấy những thứmình học quá vôdụng,chẳnglàmđượcgì.Thayvìchờđượcthầycôdạy,hãytậndụngnhữngkiếnthứcnềntảngđãcóđểtựhọc,sauđóápdụngnhữngthứvừahọcđểtạoramộtsảnphẩmgìđó,bạnsẽthấythíchhọcngaythôi.Cònnữa,nhớphảitậptrungtraudồitiếngAnhnhé2.HọcITmàkhônggiỏitiếngAnhthìkhópháttriểnlắmđấy!

HọcITxongthìralàmgì?Ở Việt Nam, hầu như mọi người chỉ biết ngành IT (InformationTechnology–Côngnghệthôngtin),chứkhôngbiếttườngtậnngànhđólàmnhữnggì.Dođó,mìnhsẽgiảithíchmộtsốchuyênngànhcủangànhIT,vềnhữngthứbạnsẽhọccũngnhưcôngviệcbạnsẽlàmsaukhiratrường.

HiệntạingànhITcómộtsốchuyênngànhsau:

• Khoahọcmáytính(ComputerScience):Bạnsẽhọccácthứliênquantớicáchthứcmáytínhhoạtđộng.Theonhưtêngọi“Khoahọc”,chuyênngànhnàythườngnặngvềnghiêncứu.

• Kĩnghệphầnmềm(SoftwareEngineering):NgànhnàycũnghọcmộtsốmôntươngtựnhưCS.Tuynhiên,chuyênngànhnàythiênvềthựctếvàxâydựngphầnmềmnênbạnđượchọcthêm1sốngànhnhư:Quitrìnhpháttriểnphầnmềm,Kiểmthửphầnmềm. Học ngành này bạn có thể viết ứng dụng,

1 Đọckĩhơntrongbàiviết:Nhữngđiềutrườngđạihọckhôngdạybạn” 2 Mình có chia sẻ kinh nghiệm học và thi trong bài “Tôi đã học tiếng Anh như thế nào”

Page 14: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

13

viếtwebsitehoặc xây dựng một hệ thống.Sinh viên tốtnghiệpcả hai ngành CS và SEđều có thể làmlập trìnhviên(developer).

• Hệthốngthôngtin(InformationSystem):Ngànhnàythiênvềphântíchthiếtkếhệthốngdựatheoyêucầucủakháchhàng.BạnsẽphảihọcmộtsốmônliênquantớiThươngmạiđiệntử,cáchthứccácdoanhnghiệphoạtđộng.KhiratrườngbạncóthểlàmởvịtríBusinessAnalyst(BA).

• Hệthốngnhúng(EmbeddedSystem):Ngànhnàytậptrungvàoviệcxửlýtínhiệusố,thiếtkếmạchđiện,chipđiệntửvàlinhkiện.Khiratrường,bạncũnglàlậptrìnhviên,nhưnglậptrìnhchocácthiếtbịhoặcmạchđiện.NgànhnàyhơikhóvàkhôkhanhơnngànhSE,nhưnglươngtrungbìnhcaohơnmộtchút.

• Lậptrìnhmạng(NetworkEngineering):Ngànhnàydạyvềcơsởhạtầngmạng,cách lắpđặthệthống,v…v.Mấybáctốtnghiệpngànhnàylànhữngngườicàiwindạo,bấmcápdạo,sửamodem,quảnlýserver,thườnggọilàITHelpdesk.Họlànhữngngườihùngthầmlặng,giúphệthốnghoạtđộngtrơntru.

• An toàn thông tin (Infomation Security): Ngành này tậptrungvềbảomật,bạnsẽđượchọcvềkiếntrúchệthống,mãhóa,bảomật,nhữngphươngthứchackvàcáchphòngchống.Ngànhnàyphùhợpvớinhữngbạnhâmmộcácanhhacker.Ratrường,bạncóthểlàmhackermũtrắnghoặcchuyênviênbảomậtchocáccôngty.

CómộtsốmônnhưHệđiềuhành,Mạngmáytính,Mãmáy,Thuậttoán,Cấutrúcdữliệu….màsinhviênchuyênngànhnàocũngphảihọc.Giữacáctrườngđạihọc,chươngtrìnhhọccủacácchuyênngànhnàysẽcóđôichútkhácbiệt.

Tómtắt:

• Nênchọntrườngvừasứcđểbạncóthểnằmtrongtốpđầulớp• Cần rèn luyện khả năng tự học. Trong ngành này, tự học là

chính,kiếnthứctrongnhàtrườnglàkhôngđủ• Tuỳvàongànhhọcmàsinhviên ITra trườngcó thể làmrất

nhiềunghề:lậptrìnhviên,quảntrịmạng,antoànthôngtin,…

Page 15: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

14

HAISAILẦMLỚNNHẤTTRONGQUÁTRÌNHHỌCLẬPTRÌNH

Bàiviếtnàynóivềhaisailầmlớnnhấttrongquátrìnhhọclậptrình.Quatraođổivớicácbạnsinhviên,mìnhnhậnthấycókhánhiềubạnsinhviênmắcphảinhữngsailầmnày(cánhânmìnhhồinămnhấtnămhaicũngthế).Dođó,bàiviếtnàysẽcảnhtỉnhmộtsốbạn,đồngthờichiasẻchútkinhnghiệmđểtránhcácbạnđitheovếtxeđổcủamìnhngàytrước.

Câunóihaygặp–trườngemkhôngdạyA,B,C…Dướiđâylàmộtmẫuđốithoạigiữamìnhvàmộtbạnsinhviên(giấutên)

• Bạn:Anhơi,họcCvớiC++ratrườngthìlàmđượcgìanh?• Mình:Làmhệ thốngnhúnghoặcgameemnhé, lươngkhủng

lắmđấy.• Bạn:EmthíchlàmWebhoặclàmappdiđộngcơ,C++làmđược

khônganh?• Mình:Khôngemnhé,muốnlàmwebthìhọcHTML/CSS/JS.Sau

đó có thể chuyển qua làm hybrid app mobile 3 , hoặc họcAndroidđểviếtapp.

• Bạn:Mấycáiđótrườngemkhôngdạyanhơi!!!• Mình:...

Mộtcâumìnhnóimìnhhayđượcnghecácbạnnóilà:trườngemchỉdạyC,trườngemchỉdạyJava,mấythầycôkhôngdạyHTMLhaylàmWeb…Mìnhđãtừngnóiởđầusách,đạihọcchỉchobạncáckiếnthứcnềntảngvềlậptrình.Họsẽkhôngdạybạncáchcodenhưthếnào,cáchlàmviệc,cáchsửdụngmộtngônngữhoặcframeworkrasao,màbạnsẽphảitựdạymình!!.

Tháiđộtrườngkhôngdạynênkhôngbiếtlàmộttháiđộhọctậpcựckỳsailầm.Vấnđềkhôngphảingườitadạychobạncáigì,màlàbạncóthểhọcđược cái gì!Tháiđộngồi chờ sung rụng, cóngườidạymớihọcnàysẽcảntrởbạntrênconđườngtìmhiểucáimới,tựcậpnhật

3 Xem thêm trong bài “Tổng quan về lập trình ứng dụng di động”

Page 16: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

15

kiến thức cho bản thân.Nếu giữ thái độ này, kiến thức của bạn sẽnhanhchónglạchậu,lỗithời,gâyranhiềukhókhăntrênconđườngthăngtiếncủabạn.

Họctậpthếnàochođúng??Việchọcphảimangtínhchấtchủđộngchứkhôngphảilàbịđộng.Bạnphảitựtìmcáicầnhọcvàtựsắpxếpthờigianđểhọc.Bạnnàokiếnthứcvững,đủkiênnhẫnđểtựhọcthìcóthểtảiebooktiếngAnhhoặctìmnguồntựhọctrênmạng.Bạnnàokiếnthứccònyếuthìcóthểratrungtâmđểcóngườikèmcặp.

Nhàtuyểndụngchỉ cầnbiết bạn có kiến thứchay không và có làmđượcviệchaykhông.Họkhôngquantâmlàkiếnthứcđóbạncóđượctừnhàtrường,từtrungtâmhaydotựhọc.Thứduynhấtbạnphảinhớlà:thầycôhaytrungtâmcũngkhôngthểválỗhổngkiếnthứchaydạychobạntườngtậnđược,màchínhbạnmớilàngườinỗlựchấpthu,biếnkiếnthứccủahọthànhkiếnthứccủamình.

Chưakể,chươngtrìnhhọcởcáctrườngbâygiờ…cũxì,quanhđiquẩnlạichỉcóWinForm,WebForm,JavaServlet….Nếucứ“hámiệngchờsung, dạy gì học nấy”, bạn sẽ không có đủ kĩ năng cần thiết đểxinviệckhiratrườngđâunhé!

Ngoàira,đừngnghĩrằngchỉhọcmộtlầnchobiếtlàxong,nguyhiểmlắm!Côngnghệliêntụcthayđổi,bạncũngphảithườngxuyêncậpnhậtkiến thức bản thân. Trước đây mình từng có khoảng 2 năm kinhnghiệmlậptrìnhC#.Đầunămnay,lúcmìnhxemlạithìcôngnghệđãđượccậpnhật,làmchokiếnthứccũcủamìnhlỗithờihếtcả!Thayvìthantrờitráchđất,mìnhđànhphảitựhọcđểcậpnhậtkiếnthứcmớithôi.

Sailầmthứhai:Cẩnthận,chưachắchọcnhiều/xemnhiềulàsẽgiỏi!!NgườiViệtchúngtacóthóiquenghétaighétcảđườngđilốivề.Khiđãtintưởnghaythầntượngaiđóthìnónóigìcũngtin;khiđãghétthằngnàothìnónóigìcũngsai,cũngnhảmnhí.Tháiđộnàydễlàmbạntiếpnhậnsaitiếpnhậnthôngtinsaicách!

Page 17: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

16

MìnhhayđọcsáchTonyBuổiSáng,cónhữngbàiviếtvềcáchnhìncuộcsốngkháhay.Thayvìhâmmộ,nuốttừngcâutừngchữcủa“dượng”,vẫncónhữngđoạnvănchémgió,nhữngcáchnhìnmàmìnhkhôngđồngtình.Tuyvậy,mìnhvẫnchắtlọcnhữngđiềuhay,nhữngđiềutácgiảmuốngửigắm,cònmấyvấnđềmìnhkhôngđồngtìnhthìbỏqua.

Tươngtự,cácbạnnênđọcsách,nghethầycôgiảngnhưngđừngnêntintưởnghoàntoànnhữnggìđượcnghe.Hãytựhỏixem:Thầycôhaysáchnóinhưvậyđúnghaysai,cóchứngcứgìkhông?Cuộcsốngcócâu“Khôngcógì làvĩnhcửu”,cóthểbâygiờmìnhchođiềuđó làđúng,nhưngtrongtươnglạiđiềuđólạisaithìsao?

Đừngtintoànbộnhữnggìsáchnói,cũngđừngnuốttừngcâutừnglờicủathầycôhaytácgiả.Nghengườikhácnóicáigìcũngphảinghingờvảkiểmchứng.Hãyxemtácgiảlàmộtthanhniênđangchémgióvớimìnhthôngquasách,cáigìđúngthìgậtgùđồngý,cáigìsaithìphảnbáclạingay.

Ngoàiviệchọcnhiều,bạncònphảibiếtcáchlọcbỏ,chọnlựanhữngthôngtincó íchchobản.Nhữnggìhaythìhãyghinhớvàhọctheo;nhữnggìnhảmnhíthìcứbỏqua,coinhưnókhôngtồntại.Nóimộtcáchdândãlàphảibiếtcách“gạnđụckhơitrong”từvôsốnguồnkiếnthức.

KếtluậnSửađượchaisailầmvềtháiđộhọctậpbịđộngvàchọnlọckiếnthức,bạnsẽthấymìnhtrởnênvôcùngtựtin.CôngnghệA/Bkhôngcótrongchươngtrìnhhọc?Chảsao,chỉcầntựhọcvàibuổilàxong!Cànghọcnhiều,bạnsẽcàngthấyviệchọccáimớitrởnênrấtdễdàngvànhanhchóng.

Hivọng,saubàiviếtnày,mìnhsẽkhôngcònphảinghecâu“emkhôngbiết cáiABCnày, trườngvới thầy côkhôngdạy”nữa.Thayvàođó,mìnhhivọngsẽđượcnghecâu:“EmđangtựtìmhiểucáiABC,anhchỉemmộtsốnguồnhọcvànhữngđiềucầnlưuýnha”.

Page 18: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

17

Tómtắt:

• Đừngtrongchờvàoviệcnhàtrườngsẽdạychobạnkiếnthứcđểlàmviệc.Chịukhótựhọccàngsớmcàngtốt.

• Đọcnhiều,họcnhiềulàtốt,nhưngphảibiếtcáchloạibỏnhữngthứvôbổ,giữlạinhữngđiềucóích.

Page 19: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

18

Giaiđoạn2–RađờiĐâylàgiaiđoạnbạngầnratrường,sắpđilàm.Ởgiaiđoạnnày,dođãcókiếnthứcnềntảngvữngtừnhữngmônhọcởtrường,bạncầntậptrungtìmhiểuthêmvềngànhnghề,đồngthời tựtrangbịnhữngkĩnăngcầncóđểxinviệc.

Page 20: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

19

HỌCNGÔNNGỮLẬPTRÌNHNÀOBÂYGIỜ? Đâymộtcâuhỏimàmìnhthườngnhậnđượctừcácemsinhviênmớiratrường,mớivàođạihọc,hoặcchưabiếtgìvềlậptrình:“Giờmìnhnênhọcngônngữlậptrìnhnàođây?”.

Ngheđơn giản, nhưngđây là một câu hỏi cóđộ khó khá cao, sánhngangvớicâu“Emnênlàmnghềgì,họcđạihọcnào?”củacácemhọcsinhcấp3.Trongphạmvibàiviếtnày,mìnhsẽđưaramộtsốdữliệuthamkhảovàlờikhuyêncánhân.

Trướckhihỏicâunày,hãytựhỏi:Mìnhmuốnhọclậptrìnhđểlàmgì?Khiđượchỏi“Giờmìnhnênhọcngônngữlậptrìnhnàođây?”,mìnhluônhỏilạicâunày“Bạn/Emmuốnhọclậptrìnhđểlàmgì?”.Trảlờiđượccâuhỏinày,bạnđãxácđịnhđược50%ngônngữmìnhcầnhọc.Dướiđâylàmộtsốcâutrảlờimìnhhaynhậnđược.

1.Emvừaratrường,trườngchỉdạyC,C++,…giờemcầnhọcngônngữgìđểdễkiếmviệclàm,lươngcao?

Thị trường việc làm IT hiện tại khá rộng, tạm chia làm 3 mảng:embedded(lậptrìnhnhúng),webvàmobile.ThịphầnmảngGamekhánhỏnênmìnhkhôngnhắcđến.

• Mảngembedded:yêucầukhácaovềtrìnhđộ,sửdụngngônngữlậptrìnhC,C++,cóthểdùngJava.NếubạnlàlậptrìnhviênC++cứng,mức lươngrấtkhávàmứcđộcạnh tranhcũngkonhiều.

• Mảngmobile:ChiếmthịphầncaonhấtvẫnlàappchoAndroidviếtbằngJava,tiếptheolàappchoIOS,viếtbằngObjective-C4.Java làmộtngônngữkhádễhọc,độphổbiếncũngcao,ứngdụngrộng.VớikiếnthứcJavabạncũngcóthểchuyểnquamảngWeb.

• Mảngweb:ĐểcóthểtrởthànhlậptrìnhviênWeb,bạnphảibiết lập trình front-end (Dùng HTML/CSS và ngôn ngữ

4 Xem kĩ hơn trong “Tổng quan về lập trình ứng dụng di động”

Page 21: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

20

JavaScript).Sauđóhọcmộtngônngữlậptrìnhbackend(C#,Java,PHP)5.

Nếumuốnhọcđểkiếmtiền,hãyxácđịnhmìnhmuốnlàmmảngcôngviệcnào,sauđótìmcáckhảosáttrênmạngvànghiêncứumứclươngtrungbìnhcủadeveloperngônngữđó.

Hiệntại,cókhánhiềuPHPdevelopernênlươngtrungbìnhcủaPHPdeveloper hơi thấp so với số còn lại. Ngoài ra, một số ngôn ngữnhưRails,Python,…ítngườihọc,developerhiếmnênbiếtcácngônngữnàysẽcóthunhậpkháhơn.

2.Mìnhmuốnlàmwebsitehoặcứngdụngchongườinhà,bảnthânv….v.

Đâylàcâutrảlờimìnhnhậnđượctừmộtsốbạnhọctàichínhngânhàng,kinhtế,…Nếubạnmuốnlàmmộtứngdụngdiđộng,Javalàlựachọn tốt nhất. Để tạowebsite, hiện tại có rất nhiều hướng dẫntạowebsitebằngJoomla,Drupal,Wix,…màkocầnkiếnthứclậptrình.CácbạncóthểhọcthêmPHPđểcóthểtùybiến,thêmtínhnăngchotrangweb.

Lựa chọn thật ra khôngquan trọng, họcmột ngônngữmới làchuyệnđơngiảnĐọctớiđây,hẳnnhiềubạnsẽbảorằngmìnhnổ,hoặcnghĩrằng“dámchắcthằngnàykhôngphảicoder,phánnhưthánh”.Trướckhinémđá,hãybìnhtĩnhnghemìnhgiảithíchvàtrìnhbày.

MìnhcũngtừnglàsinhviênITnhưcácbạn.Mônđầutiênvềlậptrìnhmìnhđượchọckhivàođạihọclà:“CơbảnlậptrìnhvớiC”.Mìnhtừngđiênđầuvớikhaibáobiến,táchhàm,điềukiện,vònglặp,IO….Môntiếptheolà“LậptrìnhhướngđốitượngvớiC++”.PhảithúthậtC++khôngphảilàngônngữphùhợpđểhọchướngđốitượng.Mìnhtừngnhầmlẫntrướccáckháiniệm“tínhbaođóng,tínhkếthừa”.

Dođó,bảnthânmìnhcũngbiếtsựkhókhăngặpphảikhihọcmộtngônngữ. Tuy vậy, mình vẫn khẳngđịnhhọc một ngôn ngữ mới làchuyệnđơngiản.

5 Xem kĩ hơn trong “Kĩ năng cần có của Web Developer”

Page 22: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

21

Vì sao? Hãy tự xem lạikiến thứclập trìnhbạn cóđược khi vừa ratrường:

• Họcqua1,2ngônngữgìđó• Cấutrúcdữliệuvàthuậttoán• Thiếtkế,truyvấncơsởdữliệu• Designpattern(Cóthể)• Khảnăngdesign

Khimới tiếpcận lậptrình,chúngtacảmthấykhókhănvìphải làmquenvớivôsốkháiniệmmới.Tuynhiên,khiđãcókiếnthứccơbản,việctiếpcậnngônngữmớitrởnênrấtdễdàng.Chúngtahọcgìkhihọcmộtngônngữlậptrìnhmới?Đâylàcâutrảlời:

• Cáchkhaibáohàm,biến• Cáchkhaibáovònglặp,điềukiệnif/else• Cáckiểucấutrúcdữliệu:list,set,tuple,…• IO,multi-thread,delegate,event• IDEphùhợp,cáchbuild,debug• Cácframework,cáchsửdụng,….

Nếubạnđãbiếtcáchviếtfor,if/else,while…trongJava,khichuyểnquahọcC#hoặcjavascript,cấutrúchàmfor,if/else…vẫngiữnguyên.Kiếnthứccủabạnđượckếthừatừngônngữ lậptrìnhtrước,dođóviệchọc sẽdiễn ranhanhhơn.Hoặckhibạnđã rõ cơ chế làmviệccủaASP.NETRestAPI,việchọccáchxâydựngRestAPIbằngSpringcủaJavacũngkhôngquákhácbiệt.

MìnhtừngtựhọcPythonmất1tuần,vàhọcframeworkDjangomấtkhoảng2tuầnnữa.Lýdomìnhhọcnhanhvậylàvì:

• Mìnhđãcókiếnthứccơbảnvềlậptrình(class,datastructure….)

• Mìnhbiếtnhữnggìmìnhcầnhọc.Khimớilậptrình,bạnkhôngbiếtmìnhcầnhọcgì.Tuynhiênnếuđãcókiếnthứcnóichungvềlậptrình,bạnsẽbiếtmìnhtậptrunghọcnhữnggì,điềunàytiếtkiệmrấtnhiềuthờigian.

• Mìnhbiếtlàmìnhlàmđược.Khimìnhhỏibạnbèchungngành“Họcmộtngônngữmớimấtbaolâu”,hầuhếtđềutrảlời“một

Page 23: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

22

thánghoặchơn”.Vìthấytốnnhiềuthờigianvàkhókhănnhưvậynênhầunhưhọrất“ngại”họcngônngữmới.

Đừngsợmìnhsẽchọnnhầmngônngữ,cứhọcđi.Việchọcmộtngônngữlậptrìnhmớikhibạnđócókiếnthứccơsởkháđơngiản,khônghềkhókhănvàmất thờigiannhưbạnnghĩ.Thêmvàođó,việcbiếtnhiềungônngữsẽgiúpbạncólợithếhơnkhixinviệc.

LờikhuyêncủabảnthânHoàngDướiđây làmột số lời khuyên củamình, dựa theokinh nghiệmcánhân (Mình chỉ có kinh nghiệm mảngweb và mobile, nên các lờikhuyêncóthểsẽkhôngápdụngđượcchomảngembeddedsystem):

Tómtắt

• Trướckhihỏi“Cầnhọcngônngữgì?”,hãytựtrảlời“Họclậptrìnhđểlàmgì?”

• Đừng lo chọn sai ngôn ngữ để học,học một ngôn ngữmớirấtđơngiản

• Đừngchạytheocôngnghệ,hãytậptrungvàokiếnthứccơbảnvànhữngthứlâubền

• Nếuquádưthờigian,hãytậptrungvàohọcJavaScript

Page 24: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

23

MUÔNNẺOĐƯỜNGTÌMVIỆC Khôngnhưcácngànhnghềkhác,ngànhlậptrìnhlàmộtngànhkhádễxinviệcởViệtNam.Chỉcầncókhảnăngcodekhakhá,cácbạnsinhviêncóthểdễdàngxinviệcvớimứclươngtạmổn,khôngcầnphảiquenbiết,lóttayhayconôngcháuchagìcả.

Bàiviếtnàychiasẻkinhnghiệmmìnhcóđượctrongquátrìnhxinviệc,từlúcviếtCVchođếnlúcphỏngvấn.Hivọngchúngsẽcóíchchobạntrênbướcđườngtìmviệc.

Phần1:TìmviệcvàviếtCVTìmviệcởđâu?CáctrangwebdướiđâylànhữngtrangwebvềviệclàmlớnnhấtViệtNamhiệntại.Đâylànhữngkênhtrunggiangiữacácnhàtuyểndụngvàngườitìmviệc,dođómìnhkhuyêncácbạnđangtìmviệchãytạomộtCVonlinechomỗitrangnày:

• ITViệc:https://itviec.com/• Linkedin:https://www.linkedin.com/• Vietnamworks:http://topit.vietnamworks.com/• Jobtown:https://jobtown.co/• Mộtsốgrouplậptrìnhtrênfacebookcũngthườngcócácmẩu

tintuyểndụng.

Lâulâuvẫncónhậnđượcđiệnthoạimờiphỏngvấncủanhânsựcáccôngty.MìnhkhôngcầnnộpCVhayứngtuyểnvìhọđãxemCVtrênmạngrồi.CánhânmìnhkhuyếnkhíchcácbạnnêntrauchuốtCVtrênLinkedIn,chứcnăngconnectcủatrangnàychophépbạnkếtnốivớinhiều người (đồng nghiệp, cấp trên), mở rộng mạng lướinghềnghiệpcủabạn.

ViếtvàgửiCV1.NộidungDođãcóvôsốcácbàiviếthướngdẫnviếtCVtrênmạngrồi,mìnhsẽkhôngnhắclại.NếubạnchưabiếttrìnhbàyCVnhưthếnào,cầnnhững

Page 25: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

24

thôngtingì,hãytìmmộtCVmẫuchovịtrícủamình(vdbạnlàjuniordeveloperhãyxemCVmẫucủa1junordev,tươngtựvớijuniorQC),chỉnhsửalạichophùhợp.FormatCVcủalinkedincũngkháổn;chỉcầnbêcácphầntừtrênlinkedinvề,chỉnhsửamộtchútlàbạnđãcómộtCVkháchuẩn.

Mộtđiềucầnlưuý:HãychỉnhsửaCVchophùhợpvớivịtríbạnứngtuyển.GiảsửbạnbiếtcảC#,Java,Python,nhưngcôngviệcbạnứngtuyểnđòihỏiC#MVC,hãyđểcáckĩnăngvàdựánliênquantớiC#lênđầutrongCV.

2.CáchtrìnhbàyCVkhôngcầnphảiđẹplộnglẫynhưngphảirõràngvàngắngọn.Cỡchữnênphùhợplà12-14,sửdụngfontcơbảnnhưTimesNewRomanhoặcArial.Cácphầnđềmụcnênviếtrõràng,inđậm,nhìnlướtquacóthểđọcđược.Thườngthườngbêntuyểndụngcũngkhôngquábắtbẻvềmặthìnhthức,nhưngcácbạnnênchịukhócanhthẳnghàngthẳnglối,đồngthờisoátkĩcáclỗichínhtả.Nhữngđiềunhỏnhặtnàysẽthểhiệntínhchuyênnghiệpvàsựcẩnthậncủabạn.

CácbạncũngnênxuấtfileCVradướidạngPDFđểmáynàocũngmởđược.CVnênđặt tên theo format “[Tênvị trí]Tênbạn“, giúpnhàtuyểndụngdễđọcvàphânloại(Hoặcbạnđặttêntheoformatmànhàtuyểndụngđưaratrongquảngcáotuyểndụng).

3.Mộtsốsailầmhaygặp

• Ảo tưởngsứcmạnh:Khôngbiếtvô tìnhhay cốýmà trongphần kĩ năng, nhiều bạn tự đánh giá trình độ của mình làIntermediate,Expert,hoặcMaster,dùchỉmới ra trường, chỉmớilàm1,2cáiđồánchứchưalàmdựánlớnnào.Nếuđãtừnglàmquamộtcôngnghệnào,cácbạnnênghithờigianđãtiếpxúcvàmứcđộnắmvữngcôngnghệđólàđủ.Trìnhđộbạnởmứcnàothìngườiphỏngvấnsẽtựxácđịnh,bạncónóimìnhlàMasterhọcũngkhôngtinđâu.

• Gâychúýkhôngđúngcách:Dùngfontmàumèlạmắtđểđậpvàomắtnhàtuyểndụng.Cáchnàythườnggâytácdụngngược.HọcóthểquăngCVcủabạnvàosọtráckhôngthươngtiếc.

Page 26: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

25

• Chémgió:MìnhtừnggặptrườnghợpcóbạnchémgióvềsốnămđilàmvàcôngnghệmìnhbiếttrongCV.Tớilúcphỏngvấn,bịvặnhỏithìbạnbảolà:mìnhlàmparttime,côngnghệABCgìđómìnhhiểunhưngchưalàmbaogiờ…Nhiêuđólàquáđủđểrớtđàirồinhỉ?HãynhớrằngmụcđíchcủaCVchỉlàgiúpbạnquađượcvòng gửi xe, đượcmờiphỏngvấnthôi, chứkhônggiúpbạncóđượcviệclàmngayđâunhé.

Phần2:Thamgiaphỏngvấn…

Tómtắt

• Ngành IT rất dễ tìm việc, một số kênh thường dùng: itviec,linkedin,vietnamwork.

• CVlàthứđầutiêngâyấntượngvớinhàtuyểndụng.Hãytrìnhbàyrõràng,nộidungchânthật,khôngthổiphổngkhảnăngcủabảnthân.

• Trướckhiphỏngvấn,hãychịukhótìmhiểucôngty,tìmhiểuthịtrườngvàônlạikiếnthức.

• Luôntỏtháiđộthânthiệnhòanhãkhiphỏngvấn.Saukhikếtthúcphỏngvấn,nhớgửiemailcảmơn.

Page 27: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

26

Phần3–LàmviệcSaukhitốtnghiệpratrườngvàvượtquavòngphỏngvấngiankhổ,bạnsẽđượcnhậnvàomộtcôngtyphầnmềm.Bắtđầutrongmộtmôitrườngmới,bạnsẽkhábỡngỡkhilầnđầutiếpxúcvớidựánthựctế,tuântheoquitrình,làmviệctheonhóm.Hẳnbạncũngsẽcóvàicâuhỏivềnghềnghiệp, về tương lai.Nhữngcâuhỏiđó sẽđược trả lờitrongphầnnày.

Page 28: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

27

CONĐƯỜNGPHÁTTRIỂNSỰNGHIỆP(CAREERPATH)CHODEVELOPER

Cácbạnsinhviêncònđanghọchoặcmớiratrườngsẽkhóhìnhdungđượcvềnhữngvịtrívàchứcdanhtrongngànhlậptrình.Bàiviếtnàysẽgiảiđápmộtsốthắcmắccủacácbạnnhư:

• Mớiđilàmemcóchứcdanhgì,côngviệcthếnào?• Codelâuthìlênđượcchứcgì,lươngcócaokhông?• Emchỉthíchcodethôi,khôngthíchlàmtrưởngnhóm,emnên

địnhhướngthếnào.

Hiểurõconđườngnghềnghiệpcủangànhdeveloper,cácbạnsẽdễđịnhhìnhpháttriểntươnglaicủabảnthân,cũngnhưdồnsứcvàoconđườngmìnhđãchọn.

Mìnhchỉliệtkêconđườngnghềnghiệpcủamộtdevelopervìbảnthânmìnhcũnglàdeveloper.Conđườngcủa1tester(QAengineer)cũngcómộtsốchứcdanhtươngtựnhưnglêncaosẽkhác.Cácchứcvụsẽđượcmiêutảtheothứtựtừthấplêncaonhé.

Lưuý:MứclươngđềcậptrongbàidựatheomứclươngvàquảngcáotuyểndụngcủacáccôngtyởTP.HCM,ởcáctỉnhthànhkhácsẽcómộtsốchênhlệch.

Fresher/JuniorDeveloperCácbạnsinhviênđithựctậphoặcmớiratrườngthườngđượcchứcdanh này. Kinh nghiệmcủa JuniorDeveloper thường vào khoảng 6tháng–1năm.Mứclươngthìtùyvàokhảnăngcủabạn,thườngdaođộngtrongkhoảng300-500$.

Dochưacókinhnghiệmnênfresher/juniorthườngđượccáccôngtyđàotạolại,vìvậykhiphỏngvấnvịtrífreshercáccôngtythườngchỉchútrọngkhảnăngsuynghĩlogic,kiếnthứclậptrìnhcơbảnvàtiềmnăng phát triển của bạn. Cá nhânmình thấy chương trình đào tạoFreshercủaFSOFTcũngkhátốt,códạynhiềuthứmàbạnsẽtiếpxúckhilàmviệc.

Dochưacókinhnghiệmnênmọingườithườngkhôngđòihỏiởbạnquácao.Côngviệccủamộtjuniorthườnglàtìmhiểudựánhiệntại,

Page 29: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

28

codecácmoduleđơngiản,fixbugvớisựtrợgiúpvàreviewcủasenior.Ởgiaiđoạnjunior,cácbạnhãycốgắngtranhthủhọccáchcode,cáchthứclàmviệcvàkinhnghiệmcủacácbácseniorđitrước.

DeveloperCode đượcmột thời gian khoảng 1-2 năm, các bạn sẽ được gọi làDeveloper(NhiềubáclênthẳngvịtríTeamLeaderhoặcSeniortùyvàocôngty).Ởgiaiđoạnnày,bạnđãlàmquamộtsốproject,khárànhvềmộtsốcôngnghệ.Mứclươngcủadevelopervàokhoảng600-900$.

Phỏngvấnchodeveloperdĩnhiênlàkhóhơnjunior.Ngườiphỏngvấnsẽhỏibạnvềnhữngdựánbạnđãlàm,cáckhókhănbạnđãgặpphảivàcáchgiảiquyết?Ngoàira,buổiphỏngvấnsẽtậptrungvàonhữngcôngnghệbạnđãghitrongCV.Vìdeveloperđãcókinhnghiệm,khiđilàmcácbạnsẽkhôngcòn“được”cácanhseniorkèmcặp,vàcũngkhómàlấydanhnghĩajuniorđểhỏi,nhờvảhaymắclỗinữa.

Ởgiaiđoạnnày,bạnđãđượccodemộtsốmodulephứctạphơn,thamgiahọp,codereview,thảoluậnvớikháchhàngv…v.Đâylàgiaiđoạnđểbạndồnnénkiếnthức,kinhnghiệmvàgâydựngdanhtiếngđểlênnấctiếptheotrongbậcthangnghềnghiệp.

Lýthuyếtlàvậynhưngthựctế,thuởlàmởFSOFTmìnhởvịtríjuniorđượckhoảngmộtthángrồinhảyvàolàmcáccôngviệccủadeveloper,nhậncảnhữngviệckhóchứkhôngđùnđẩygì,nhờvậycũngmìnhhọchỏiđượckhánhiều.

Quảnlýhaykĩthuật?Ởgiaiđoạnsau,bạnđãcóthểxácđịnhconđườngchomình.Nếumuốntập trung vào code và kĩ thuật, bạn có thể đi theo hướng kĩthuật:SeniorDeveloper=>TechnicalLead=>SoftwareArchitecture.Nếumuốnlàmviệcvớiquytrìnhvàconngười,bạnnênđitheohướngquảnlý:TeamLead=>ProjectManager=>Manager.

Ởgiaiđoạnđầu,lằnranhgiữa2conđườngnàykhámờnhạt,nhưngcànglêncaolạicàngtrởnênrõràng.Cácbạncóthểxembảngtómtắtsau:

Page 30: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

29

Hướngquảnlý(Management)

Hướngkĩthuật(Technical)

TeamLeaderBạn trở thành trưởng mộtnhóm nho nhỏ khoảng 3-6thànhviên.Ngoạitrừcode,bạncònphảihọphànhvớicấptrên,báocáovớikháchhàng,quảnlýcấpdưới.Ởgiaiđoạnnày,bạnsẽ dần học thêm một sốkĩnănglãnhđạo,kĩnăngquảnlýv…v. Ở một số cong ty nhỏ,developer lâu năm và có kinhnghiệmsẽlênteamleader.Bạnvẫn còn khá nhiều thời giancode,code giỏicó thể sẽ làmthành viên trong team tôntrọnghơn.Mứclươngchoteamleader thường vào khoảng1000-1500$

SeniorDeveloperSaumộtthờigianlàmviệc,bạnnắm vững, hiểu sâu và rộngnhiềucôngnghệvàquitrình.Ởvị trí này, ngoại trừ khả năngcode “thần thánh”, bạn cònphải biết đưa ra design vàsolution.Ngoàira,bạncònphảihướng dẫn chỉ bảo các emjuniormớivào,cũngnhưthamgia code review v…v. Đôi khiseniordevcũngkiêmluônvịtríteam leader, do đó bạn cũngcầnmộtchútkĩnăngdiễnđạtvà lãnh đạo. Mức lương choSenior Developer cũng vàokhoảng 1000-1500$ (hoặchơn).

ProjectManagerLênđếnvịtrínày,bạnsẽcórấtíthoặchầunhưkhôngcóthờigian code. Đa phần thời giancủabạndùngđểđọcbáo, lướtvoz,lướtwebtretho….Đùađấy,côngviệcchínhcủabạnbâygiờlàquảnlýcấpdưới,báocáovớikháchhàngvàcấptrênvềtiếnđộdựán,lâulâubạncònphảiđiphỏngvấnmộtsốứngviên

TechnicalLeaderBạncầnhiểubiếtvềcôngnghệsâu và rộng vì chính bạn làngườilựachọncôngnghệ,quitrình…chomộtdựán.Nhữngquyếtđịnhlớnvềthiếtkế,cấutrúc code … sẽ do bạn chịutrách nhiệm.Ở giai đoạn này,ngoài việc technical “cứng”,bạncònphảigiỏithuyếttrình,hướngdẫn, giải thích…Vì sao

Page 31: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

30

đểtuyểnthànhviênchodựánnữa. Bạn là người quyết địnhsựthànhbạicủamộtdựán,dođónếudựánthànhcôngbạnsẽđượcthưởngmộtkhoảnbonuskha khá tùy theo chính sáchcôngty.MứclươngchoPMvàokhoảng1000-2000$.

á? Khi đưa ra vấn đề thì phảigiải thích hợp lý, thành viênkhác nó mới hiểu, nể và làmtheochứ.Mứclươngchovịtrínàyvàokhoảng1500-2500$.

Manager/DirectorChúcmừng,ởvịtrínàybạnđãđượcgọi làsếp,cấptrên, lãnhđạo,…Lúcnàybạnsẽkhôngcóthờigianmàcode.Việccủabạnlà họp hành, giao việc, phỏngvấn, trao đổi với các bộ phận,phòng ban, xử lý việc hànhchính…Bạncònphảiđềrađịnhhướngphát triểncủabộphậnmình quản lý, xây dựng quitrình làm việc, tuyển dụng,…Chế độ đãi ngộ cho vị trí nàychênhlệchkhálớntùycôngtyvà cấpbậcmanagernênmìnhkhôngcóconsốcụthể.

SoftwareArchitectMuốn đạt chức danh này, ítnhất bạn phải có khá nhiềunămtrongngành.(Nhìnaimặtmũi trẻ măng mà vỗ ngực tựxưng SA thì đừng tin). Côngviệccủabạnkhágiankhổ:Từmộtyêucầu“mơhồ”củakháchhàng,bạnphảilàmviệcvớiBAđểđánhgiá solution, làmviệcvớiPMđểxâydựngmộtteam,làmviệcvớiTechnicalLeadđểthiếtkế,đưaracácquyếtđịnhquan trọng về kiến trúc hệthống.Vịtrínàymặcdùkhôngcóquyềnquảnlý,nhưnglạicókhánhiềuquyềnlựcngầm.

Ngoàinhữngconđườngtrên,cácbạncóthểđitheohướngSales,Kĩsưcầunối(BrSE),BusinessAnalyist.Bạnkhôngcầnphảiquyếtđịnhconđườngnghềnghiệptừquásớm.Saukhiđilàmmộtthờigianbạnsẽtựnhậnrađiểmmạnh,điểmyếucủamìnhvàchọnđượcconđườngphùhợpthôi.

Page 32: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

31

Tómtắt

• CókhánhiềulựachọnnghềnghiệpchocácbạnhọcngànhIT:developer,tester,BA.

• Mớiđilàm,bạnsẽđượcgọilàfresherhoặcjunior.Làmviệcmộtthờigianbạn“lênchức”developer,dĩnhiênlàcũnglênlương.

• Bạncóthểpháttriểntheohướngquảnlývàkĩthuật,tùyvàokhảnăngvàsởthíchcủabảnthân.

Page 33: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

32

LẬPTRÌNHVIÊNNÊNĐỌCNHỮNGSÁCHGÌ? Nhiềubạnthườngnghĩrằng:developerthìcầngìphảiđọcsách,codenhiều là giỏi thôi. Vâng, các cậu có cu, nhầm, các cụ đã có câu là“practicemakeperfect”,cứlàmhoàilàgiỏi.Tuynhiên,phảilàmđúngcáchthìmớigiỏiđược,codedởmàkhôngchịutìmcáchcảithiệnkĩnăngcode,cứcodehoàimỗikiểucũthìchẳngbaogiờgiỏiđược.

Mìnhđọccũngkhakhánhiềusáchkĩthuậtvàsáchvềngànhlậptrình,haycódởcó.Mỗicuốnsáchdùhayhaydởđềulàmmìnhngộrađượcvàiđiều.KhảosáttrongcuốnCodeCompletechothấytrungbìnhmộtdeveloperđọc íthơnmộtcuốnsáchmỗinăm,ởViệtNamchắccònthấphơnnữa.

Chỉcầncácbạnlàmtheomình,mỗinămđọcítnhấtmộtcuốnsách,cácbạnsẽgiỏihơnkhoảng90%developercònlạirồinhé.Bàiviếtnàysẽgiớithiệumộtsốsáchvềkĩ thuật,vềnghềnghiệpmàmỗi lậptrìnhviênnênđọc.Cácbạncóthểtìmbảnebooktrênmạng,đặtmuasáchtừamazonhoặcmộtsốtiệmsáchtiếngAnhnhé.

Sáchvềkĩthuậtlậptrình1.CodeComplete

Nếu bạn muốn theo đuổi công việc lậptrìnhmột cáchnghiêm túc,bạnnênđọccuốn sách này.Mình đượcmột ông anhgiớithiệu.Cóthểnóilàđọctớiđâungộratớiđấy.Trongquátrìnhcode,cólúcbạnsẽgặpcáctrườnghợpnhư:táchmethodthếnào,chiaclassrasao,đặttênbiếnthếnào,…

Cuốnsáchnàysẽlàngườithầy,ngườianhcủa bạn, với vô số hướng dẫn từ tổngquannhư:xâydựngkiếntrúc,liênhệgiữacác component, … cho tới chi tiết như:

cáchtổchứcfunction,cáchđọctênbiến.

Page 34: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

33

2.CleanCode:AHandbookofAgileSoftwareCraftsmanshipMìnhđọcCleanCodetrongthờigiancònlàmviệc ở FPT Software. Cuốn sách này xứngđánglàsách gốiđầu giường của mọideveloper.Mình khuyên các bạn nênmuabảngốc,vừađểđọc,vừađểphòngkhigặpđồng nghiệp code ngu, có thể cầm cuốnnàyđậpvàođầunóvàbắtnóđọc.

Nhưcáitên“CleanCode”,đâylàcuốnsáchhướngdẫncácbạndeveloperviếtra“codesạch”. Thế nào là code sạch? Theođịnhnghĩacủasách,đólàcodedễđọc,dễhiểu,dễsửachữavàbảo trì.Cóbạnsẽxìmũibảo:

Giời,cógìđâu,cáiđấyaicodechảđược.Mờibạnthửđọclạicodecủamộtdựánmìnhđã làmcáchđây3-6tháng,xemcóhiểuđượcmìnhviếtgìko?Nếukhông tức làcodecủabạnchưađượcsạch lắmđâu.Cuốnsáchsẽthayđổicáchnghĩcũngnhưcáchviếtcodecủabạn.

SáchvềthiếtkếvàUI/UX3.Don’tmakemethink

Mộtcuốnsáchrấthayvềthiếtkếgiaodiện.NóđưaramộtquitắcrấtđơngiảnvàhữudụngtrongthiếtkếUI:Ngườidùngrấtlười,hãythiếtkếsaochongườidùngítsuynghĩnhất.Cuốnsáchkhônghướngdẫncáchthiếtkếđẹpmàhướngdẫncáchthiếtkếđơngiảnnhấtvàdễsửdụngđỡtốncôngsứcngườidùngnhất.

Sách còn hướng dẫn một số control nêndùng khi thiết kế web: form, checkbox,radio,dropdown,…vàcáchsửdụngnhữngcontrolnàyhợplý.Ngoàiracòncómộtcâu

Page 35: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

34

chuyệnvề“Mộtbuttonđánggiá300triệuđô”trongsách,vềsựđắtgiácủaviệcthiếtkếgiaodiện6.

4.TheDesignofEverydayThingsCuốn sách này được viết bởiDon Norman.Ônglàmộtbậcthầyvềtâmlýhọcvàdesign.Ôngđưarakháiniệm“user-centereddesign”(Designtậptrungvàongườidùng),chútrọngvàotínhhữudụngvàdễdùngcủathiếtkế,yếutốthẩmmĩchỉlàphụ.

Ýkiếncánhânmìnhthìcuốnnàykháhay,ảnhminhhọacũngrấtnhiều.Sáchsẽlàmthayđổitưduythiếtkếcủabạn,dođódândesignhaylậptrìnhcũngđềunênđọc.Nhưtựađề,cuốnsáchphân tích thiết kếcủa các vật dụngthườngngàynhư:cánhcửa,tủlạnh,máylạnh,

…chotớiđiệnthoại,hệthốngmáytính,…đồngthờiphântíchtạisaodesignnàythànhcông,designkiathấtbại.Đảmbảocácbạnsẽnhiềulầngậtgù“àrathế”khiđọccuốnnày.

Sáchvềnghềnghiệpvàngànhlậptrình5.TheCleanCoder

CuốnsáchmangtênTheCleanCoder,đọccũnggiônggiốngCleanCode.Tuynhiên,cómộtđiềuthúvịlànộidunghaicuốnsáchlại…hoàntoàntráingượcnhau!

TrongkhiCleanCodetậptrungvàokhíacạnhkĩthuật:hướngdẫnlậptrìnhviêncáchtổchứccodevàviếtcodesạch;TheCleanCoderlạitậptrungvàokhíacạnhnghềnghiệp: tháiđộvới

6 Đọc thêm về câu chuyện này trong bài viết “Một button trị giá 300 triệu đô”

Page 36: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

35

côngviệc,cáchlàmviệcnhóm,quảnlýthờigian.

Trong The Clean Coder, Uncle Bob nói về nhiều khía cạnh: đạođứcnghềlậptrình,ứngphóvớiáplựccôngviệc,rènluyệnlàmmớikĩnăng, làm việc nhóm… Mỗi khía cạnh đềuđi kèm với những trảinghiệmquígiácủachínhtácgiảquahơn42nămtuổinghềvớiđủmọivịtrítừdev,manager,PMchotớiCEO.

6.ThePassionateProgrammerĐâylàmộtcuốnsáchviếtvềconđườngpháttriểnsựnghiệpchodevelopernóichung,cũngnhưdânITnóiriêng.TácgiảxemsựnghiệpITnhưmộtsảnphẩmhànghóa.Đểcómộtsảnphẩm thành công, các doanhnghiệp thườngthựchiện4bước:Nghiêncứuthịtrường,đầutưsảnphẩm,pháttriểnsảnphẩm,marketing.

Mộtcuốnsáchkháhayvớicáchviếtthúvịvàdễđọc.Sáchvôcùnghữudụngchonhữngbạnlập trình viênđang cảm thấy phân vân, cầnnhữnglờikhuyêntrongsựnghiệp.

7.TheHealthyProgrammerBạncóbiếtlậptrìnhlàmộttrongnhữngngànhđộc hại: Ngồi nhiều sẽ dẫn tới vô số nhữngbệnhtrầmtrọngvàmãntính;lậptrìnhviênrấtdễmắccácbệnhtimmạch,béophì,đaukhớp,…?

HãyđọcTheHealthyProgrammer–mộtcuốnsách viết về sức khỏe dành riêng chodeveloper.Cuốnnàymìnhđọctừhồiđầunămkhitìnhcờthấynótrênmộttrangebook.Nhưtựađề,đâylàmộtcuốnsáchdànhchodânlậptrình, nhưngnội dung không nói gì về lập

trìnhmàlạinóiđếnmộtvấnđềmàlậptrìnhviênnàocũngquantâm:sứckhỏe.

Page 37: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

36

PHẦN2–KĨNĂNGCƯNGCỨNG

Trongphần1,mìnhtậptrungnhiềuvàokĩnăngmềm.Điềuđókhôngcónghĩalàkĩnăngcứngkhôngquantrọng.Kĩnăngmềmcótốtđếnmấymàkĩnăngcứngkhôngổnthìbạncũngkhómàsốnglâutrongnghềvàđạtđượcsựnểtrọngcủaanhemđồngnghiệp.Vìlẽđó,phầnnàycủaquyểnsáchsẽđưabạntừmềmđếncứng,trởnênhoànthiện.

VàikháiniệmcơbảntrongngànhphầnmềmPhầnnàygiảithíchvềmộtsốkháiniệmquantrọngtrongngànhphầnmềmnhư:Scrum/Agile,UI/UX,CI,TechnicalDebt,comment,designpattern,…Mộtsốkháiniệmnàyđãđượcdạyởtrường.Tuynhiên,sáchgiảithíchthêmbằnggiọngvănhàihước,dễhiểu,đồngthờibổsungthêmcáchápdụngchúngvàothựctếquacácvídụcụthể.

Page 38: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

37

MỘTBUTTONTRỊGIÁ300TRIỆUĐÔ–CÁINHÌNKHÁCVỀGIAODIỆNVÀCHỨCNĂNG

Ngàyxửangàyxưa,cómộttrangwebbánhàng…Đâylàmộtchuyệnnhonhỏ,vềmộtbuttonnhonhỏvàmộtsốtiền…không nhỏ chút nào. Mình đọc được chuyện này được trongcuốnDon’tmakemethink–mộtcuốnsáchkháhayvềUI/UX7.

Ngàyxửangàyxưa,ởmộtđấtnướcnọ,cómộttrangwebbánhàng…Chứcnăngcơbảncủamộttrangwebbánhàngthìaicũngbiết:hiểnthịhàng,chohàngvàogiỏvàvàthanhtoán.Câuchuyệncủachúngtabắtđầuởchứcnăng“Thanhtoán”,khingườidùngđãchohếthàngvàogiỏ,một formnhonhỏxinhxinh sẽhiện ra với2 trườngTênĐăngNhậpvàMậtKhẩu,2buttonĐăngNhậpvàĐăngKý.Thếnhưng,chínhcáiformbebéxinhxinhnàyđãgâythiệthạiđến300.000.000$/nămchotrangwebbánhàng.

Vấn đề ở chỗ, người dùng phảiđăng nhập hoặc đăng ký trước khimuốnthanhtoán.Độilậptrìnhnghĩrằng“Chỉcầnđăngkýtàikhoảnlầnđầu,thôngtinngườidùngcóthểđượclưulại,ởnhữnglầnsauhọkhôngcầnnhậpđịachỉvàthôngtinthanhtoánnữa.Ngườidùngtiếtkiệmđược thời gian, cũngkhuyếnkhíchđượcngườidùngquay lạimuahàng,haibêncùngcólợicòngì?”.

LậptrìnhviênđôikhinghĩrằngmìnhhiểungườidùngĐộingũdesignerđã làmmột cuộc thửnghiệm,đưa tiền chongườidùngđểhọthựchiệnquátrìnhmuahàngvàthanhtoán.Đốivớinhữngkháchhàngmớicủatrangweb,họpháthiệnramộtđiều:ngườidùngrấtghétviệcđăngký,vớisuynghĩ“Mìnhmuốnmuahàng,chứkhôngphảimuốnđăngkýđăngkiếcgìcả”.Chưakể,ngườidùngcònsợbịmấtthôngtincánhânhoặcbịgửimailspamvàohộpthư.

Vớinhữngngườidùngquaylạilầnthứhai,thứba–đốitượngmàcácdevelopernhắmtới,tìnhcảnhcũngchẳngkhákhẩmhơn.Họkhôngnhớđượcmậtkhẩucủamình.Mặcdùchứcnăng“Quênmậtkhẩu”vẫnhoạtđộng,đếntận160.000ngườidùngchứcnăngnàymỗingày,75%

7 Đã giới thiệu trong bài “Lập trình viên thì nên đọc sách gì?”

Page 39: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

38

trongsốđókhôngtiếptụcquátrìnhthanhtoánsaukhiđãyêucầumậtkhẩu.

Chiếcformnhonhỏxinhxinhkia,hóaralạilàthứngăncảnngườidùngmuahàng,rấtnhiềungườidùng.Thếmớibiết,developernhiềukhinghĩmìnhhiểuđượcngườidùng,nhưngthậtrakhôngphảivậy.

Buttontrịgiá300triệuđôlaĐộingũdesignerđãgiảiquyếtvấnđềnàymộtcáchvôcùngđơngiản.HọbỏđinútĐăngKý,thayvàođóbằngnútTiếpTụcvàdòngchữ“Bạnkhôngcầnđăngký,hãybấmnútTiếpTụcđểthanhtoán.Đểthanhtoánnhanhhơnởnhữnglầnsau,bạncóthểđăngkýmộttàikhoảnvàolúcthanhtoán”.

Kết quả: Lượng thanh toán của khách hàng tăng lên đến 45%. Sauthángđầutiên,doanhsốtăng15.000.000$.Saunămđầutiên,thunhậpcủawebtăngđếntận300triệuđôla.Tấtcảnhữngviệcmàhọđãlàmlàgì?Chỉlàthêmmộtbuttonmàthôi.

Ảnhminhhọa

Page 40: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

39

MộtcáinhìnkhácvềUI/UXvàchứcnăngXinnhắclạimộtchútvềUIvàUX8:

• UI (User Interface)–Giaodiệnngườidùng:Đây lànhữnggìngườidùngnhìnthấyvàgiúphọtươngtácvớihệthống(Form,button,website).

• UX(UserExperience)–Trảinghiệmngườidùng:Đâylànhữnggì người dùng trải nghiệm, bao gồm cảm xúc, suy nghĩ, quátrình.UIchỉlàmộtphầncủaUX.Vídụnhưkhibạnmuahàngtrêntiki.Cáctrangwebthanhtoán,webmuahàngchínhlàUI.Quátrìnhmuahàngvànhậnhàng,sựthoảimáikhithanhtoán,sựhỗtrợcủaTikidànhchokháchhàngchínhlàUX.

Trongcâuchuyệntrên,bằngcáchthayđổiUI(Thêmmộtbutton)vàkhôngbắtđăngkí,họđãtrựctiếpcảithiệnUX(Thayđổitrảinghiệmmuahàng,muanhanhhơnmàkhôngcầnđăngký), từđó làm tăngdoanhsốbánhàng.

Hẳnnhiềubạnlậptrìnhviênvẫncònsuynghĩ:Chứcnăngmớilàquantrọng,cònmấythứruồibunhưgiaodiệnthìlàmthếnàocũngđược(MộtphầnchắclàdolúcmớihọclậptrìnhtoànphảiviếtchươngtrìnhConsole).Đâylàmộtsuynghĩhoàntoànsailầm.

Nếuchỉviếtvàitoolđơngiảnchochínhmìnhhoặcbạnbèsửdụngthìđúnglàgiaodiệnkhôngquantrọng.Nhưngnếuđãtạorasảnphẩmhướngtớingườidùng,thìUI/UXlànhữngthứquantrọngnhấtnhì,cókhicònhơncảchứcnăng.Hãynhớmộtđiềumìnhmuốnnóiquacâuchuyệnnày:Đôikhichỉmộtbuttonnhonhỏlạicógiátrịđến300triệuđôđấy.

Tómtắt

• Lậptrìnhviênthườngnghĩrằngmìnhhiểungườidùng,nhưngđôikhikhôngphảivậy

• UI/UX có tầmquan trọng không kémgì chứcnăng củamộtchươngtrình.Hãynhớ,đôikhimộtbuttonnhonhỏcũngcóthểcógiáđến300triệuđô

8 Xem lại bài viết “Tổng quát về UI và UX”

Page 41: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

40

LUẬNVỀTECHNICALDEBT–NỢKIẾPNÀY,DUYÊNKIẾPTRƯỚC

TechnicalDebt(Nợkĩthuật)làmộtmónnợmàhầunhưlậptrìnhviênnàocũngphảigánhtrongquátrìnhlàmviệc.Hẳnbạnsẽthắcmắc:Hầuhếtlậptrìnhviênchúngtađềulànhữngconngườisiêngnăngchămchỉ,khôngcờbạcgáigú,hếtgiờlàmlàđinhậurồimátxa…àkhông,vềnhàvớivợcon.Chúngtakhôngvaymượnaibaogiờthìlàmsaocónợ???

Muốn biết câu trả lời, hãy đọc kĩ bài viết này để tìm hiểu thêm vềTechnicalDebtnhé!Đâylàmộtkháiniệmkháquantrọngđấy.

TechnicalDebtlàgì?KháiniệmnàyđượcđưarabởiWardCunningham(Chađẻcủawikiđầutiên).Trongcuộcsống,đôikhibạnsẽphảimượntiềnđểxàitrước,sauđócàycuốctrả.Sốtiềnnàyđượcgọilànợ.Tronglậptrìnhcùngthế,đôikhitachọncáchgiảiquyết“mìănliền”,giảiquyếtđượcvấnđềngay,nhưngsẽgâykhókhănchoquátrìnhphát triểnvàbảotrìvềsau.Mỗilầnnhưvậy,tatạothêmmộtkhoản“nợkĩthuật”chodựán.

TechnicalDebtbanđầurấtít,nhưngtheoquátrìnhcodethìcàngngàynócàngnhiềulên,trởthànhnợnầnchồngchất.Mộtsốvídụ:

• Đểtáisửdụngcodeđãviết,tacopyvàpastecodevàsửađôichút (thay vì phải tách thành module riêng). Cách làm nàynhanh,nhưngkhicóbugthìsửa…hộcmáuvìcodeđượccopyởnhiềuchỗ.

• Khicórequirementmới,thayvớithiếtkếcodechodễmởrộng,taviếtthêmhàmif.Cáchnàynhanh,nhưngnếumởrộngnhiềuthìcodesẽcómộtđốngif.

• Cóbugkhủngliênquantớikiếntrúchệthống,thayvìfixbugvàrefactorthìtatry/catchnuốtlỗivàfixtạmởphầnngọn,gọilàhotfix.

TechnicalDebtlàđiềutấtyếutrongquátrìnhcode.Mỗiquyếtđịnhtađưa ra trong lúc codeđềulàm tăng sốnợnày lên.Điềuquan trọnglàmượnxongthìphảitrả,nếuđểlâu,techinicaldebttíchluỹsẽgâyranhiềuhậuquảnguyhiểmkhônlường.

Page 42: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

41

Táchại“khủngkhiếp”củanợNếukhôngtrảnợ,cảvốnlẫnlãisẽdầnchồngchấttrongquátrìnhpháttriển.Quánhiềutechnicaldebtlàmchậmtốcđộcủateam,đồngthờiảnhhưởngđếntinhthầnlàmviệccủacácthànhviêntrongnhóm.

Trongnhiềudựán,vìbanđầubịtrễdeadlinenênteamphảicodeẩu,sinhratechnicaldebt.Nợlàmchotốcđộpháttriểnchậmdầnlại,dẫntớitrễdealine->codeẩu->thêmnợ,tạothànhmộtvònglẩnquẩn.Mộttínhnăngbìnhthườngcóthểchỉmất1ngàyđểhoànthành,nhưngnếutechnicaldebtquánhiềusẽmấttới1tuần.

Tớimộtmứcnàođó,khikhôngtrảđượclãinữa,tasẽbị“phásản”.Lúcnày,codehiệntạiđãnáttớimứccựckìkhómởrộnghaybảotrì,phảiđậpđiviếtlại.Đâycũnglànguyênnhângâytrễdeadlinevàdẫnđếnthấtbạichonhiềudựán.

Vòngtrònlẩnquẩn:trễdeadline->nợ->codechậm->trễdeadline

Nợơiemtừđâutới?NếunhưnợcôngcủaViệtNamlàdocácbác“ởtrển”dùngvốnkhôngđúngcáchthìnợkĩ thuật(technicaldebt) lạidochínhbảnthâncácdevelopergâyra.

Córấtnhiềulýdogâyratechnicaldebt:

• Dokháchhàngthayđổirequirementliêntục,kiếntrúcdựánkhôngkịpthayđổichophùhợp

Page 43: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

42

• Dobịdeadlinedíhoặcmanagergâyáplựcnêndevelopercodeẩuđểhoànthànhcôngviệc

• Dobảnthândeveloperlàmbiếngnêncodekhôngcócommentvàkhôngviếttàiliệu

• Do team không có technical lead giỏi, hoặc các thành viênkhôngcónềntảngkĩthuậttốt

Đôikhitechnicaldebtlàdocốý:Chấpnhậnlàmnhanhđểcósảnphẩmgiaokháchhàng,giànhdựán,vấnđềtechnicaltínhsau.Hoặctrongcáccôngtystartup,ngườitaxâydựngsảnphẩmkhảthitốithiểu(MVP)nhanhnhấtcóthểđểkhảosátnhucầungườidùng.Lúcnày,chứcnăngvàtốcđộpháttriểnmớilàquantrọngnhất,codeẩuhaykiếntrúctệcũngkhôngquantrọng.

Làmsaotrảnợ?Nhưmình đã nói, code nào cũng sẽ có bug, dự án nào cũng sẽ cótechnicaldebt.Cáchđốiphóvớitechnicaldebtlàtạmngưngviệcpháttriểnvàtậptrungvàotrảnợ.Tacóthểtrảnợbằngcáchphântíchvàtái cấu trúc hệ thống hoặc viết thêm tài liệu, viết thêm testcase,refactorcodeđểcoderõrànghơn,dễcảitiếnhơn.

Đôilúc ta cũngcó thểbỏ quatechnical debt, ví dụ như khi làmprototypeđểdemochokháchhàng.Vìprototypexongrồivứtluônnêntacóthểxùnợ.Tuynhiênnêncẩnthận,córấtnhiềutrườnghợpkháchhàngđòimởrộnghoặcnângcấpprototypethànhsảnphẩmđể…tiếtkiệmthờigian.Lúcnàytaphảivắtchânlêncổmàtrảnợluôn!

Prototypebằnggiấychođỡtốncôngcode

Page 44: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

43

Hãy nhớmột điều:Mỗi lần bạn code ẩu, code đểu, bạn đang thêmnợchodựán.Nợđờicóvaycótrả,bạnkhôngtrảthìngườikháctrongteamsẽtrả.Technicaldebtphảitrảbằngthờigian,côngsứcvàmồhôinướcmắtcủalậptrìnhviênđấynhé.

À,nếusắpnghỉviệc,chuyểncôngtythìcácbạncứcodeẩuthoảimái,khôngsaođâu!Mộtlập trìnhviên“xấusố”nàokhácsẽ trảnợgiùmbạn.

Tómtắt

• TechnicalDebtlànhữngmónnợvềkĩthuật,ta“mượnnợ”đểphát triểnnhanhhơn, nhưng sẽ ảnhhưởngđến tốcđộpháttriểnvềsau

• Nếu không trả nợ kịp thời, nợ ngày càng chồng chất sẽ làmchậmtiếnđộdựánhoặc“phásản”

• Cónhiềunguyênnhângâyranợ:dokháchhàng,dodevelopercodeẩu,doquitrìnhkhôngtốt

• Đểtrảnợ,cóthểviếtthêmtàiliệu,unittest,refactorhoặctáicấutrúchệthống

Page 45: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

44

LUẬNVỀCOMMENTCODE(PHONGCÁCHKIẾMHIỆP) Commentcodeluônlàvấnđềgâytranhcãisứtđầumẻtrántronggiớivõlâm.Xưakia,thuởcònmàiđíttrênghênhàtrường,tathườngđượccácthầydặnrằng:Codenhớphảicomment.Thuởmớiđilàm,sơnhậpgianghồ,mỗikhiđọccodekhônghiểu,tacũnghayđậpbànmàchửi:“Thằngnàycodenguquáđ*ocommentgìcả”.

Thếnhưng, lưulạcgianghồbaonăm,đọccodecũngnhiều;từcodekhôngcommentchotớicodecommentđầyđủvàsạchsẽ;tavẫnbănkhoănkhôngbiếtthậtsựphảicommentthếnàomớiđúng.Thếrồi,saukhiđọcCleanCode, tanhư lượmđượcbí tịchvõcông trong truyềnthuyết.

Tangộrađượccáigọi là“đạocode”,“đạocomment”,đặtmộtbướcchânvàoconđườngvõđạođỉnhcao(Đạoởđâylàđạolý,kophảiđạonhạcnhưSơnTùng,cácđạohữuđừnghiểulầm).

LấychuyệnkiếmhiệpnóichuyệncodeThầnĐiêuĐạiHiệpcủaKimDungcóđoạn:DươngQuábịlạcvàokiếmmộcủaĐộcCôCầuBại.Thuởcònsống,ĐộcCôcầubạilàngườikiếmthuậtvôsong,danhchấnthiênhạ.Trướckhichết,ôngchôn4thanhkiếmởnơigọilàkiếmmộ.

Tạihạmuốnquývịchúýchitiếtnày:

Mộthồisau,chàngmớiđặt thanhkiếmnặngđóxuống,nhấcthanhkiếmthứbalên,lầnnàychànglạibịlầm.Chàngcứtưởngthanhkiếmnàyphảinặnghơnthanhkiếmvừarồi,nênvậnlựcracánhtay.Nàongờnónhẹtênhnhưkhông,chàngngưngthầnxemkỹ,hóarađólàmộtthanhkiếmgỗ,chôndướiđálâunăm,thânvàcánkiếmđềuđãbịmục,đọcdướimặtđácókhắcdòngchữ:

Saubốnmươituổi,khôngmangbinhkhí.

Thảomộctrúcthạchđềucóthểdùnglàmkiếm.

Cứthếtinhtu,đạttớicảnhgiớivôkiếmthắnghữukiếm.

Page 46: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

45

Tổngkếtlại,cuộcđờitukiếmcủaĐộcCôCầuBạibaogồmbagiaiđoạn:

• Lúctraitrẻ,lòngđầynhiệthuyếtmàthiếusựchínchắnthìsửdụngtửvikiếmlàthanhbảokiếmsắc,nhẹvàlinhhoạt.

• Khiđạtđộchíncủasuynghĩvàsứclực,sửdụngthanhkiếmsắtnặngnềmàkhôngsắcbén.

• Khibắtđầuvềgià,suynghĩvàkiếmthuậtđạttrìnhđộcao,vũkhíchỉcònlàthanhkiếmgỗvàđạtmứcthượngthừathìkhôngkiếmmàthắngđốithủ,bấtcứthứgìcũnglàkiếm.

Tatựthấyhầunhưlậptrìnhviênnàocũngsẽphảitrảiquabagiaiđoạnnàytrênconđường“cầuđạo”.Kẻnàongộtínhcaothìchỉcầnlàmviệcmộthainămđãđạttớicảnhgiớicuối.Kẻnàođầuócumêlạclốithìcảđờivẫncứởgiaiđoạnhaimàthôi.

Giaiđoạn trẻ trâuđầynhiệthuyết (Codekhôngcommenthoặccommentlungtung)Kẻnàosơnhậpgianghồđềutrảiquagiaiđoạnnày.Đâylàkhitacònngồi trên ghế nhà trườnghoặc vừamới đi làm. Code chạy được làmừng,đôikhicodechoxonglànộp,chảcầncomment.

Nhiềukhitacũngnghelờicácsưphụ,thêmcommentvàocode.Đốngcommentnàynhiềunhưngkhávôdụng,đọcrấtbuồncười,nhưthểmấykẻmớihọcvõcôngmàbàytròmúamáybắtchướccácchiêuthứccaosiêutrongvõhọc.//Chia đôi toàn bộ các phần tử của mảng đưa vào

public int[] half(int[] y){ //Tạo một array mới chứa kết quả

int[] x;

//Duyệt các phần tử của mảng y

for (int i = 0; i < y.length ; i++) {

x[i] = y[i]/2; //Gán trá trị vào array chứa kết quả

}; return x; //Trả kết quả ra

}

Tathấyđoạncodetrêntuycommentkháđầyđủnhưngchẳngcóýnghĩamấy, thờigianviếtcommentcònnhiềuhơnviếtcode.Mộtsốcoder thườngdùng trò: Thêm commentđểbiết ngày giờ sửa code,

Page 47: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

46

commentlạimộtsốcodekhôngdùngnữa.Mộtsốlỗikhácmàcácđạohữunàyhaymắcphảinhư:

• Commentlạicodecũđể“đềphòng”.Codekhôngdùngnữathìxóađi,đừngcomment.CóSVNrồithìkhicầncodecũchỉviệcrestorelạilàxong.

• Commentđểlàmlog.Đừngcommenttheokiểu://02/03/1992Sửatênclass.SửdụngSVNcóthểtraralogrõràngvàtiệndụnghơnnhiều.

Giaiđoạntạmchínchắntrongsuynghĩ(Biếtcáchcomment) Codemộtthờigian,hầunhưmọilậptrìnhviênsẽđạtđếngiaiđoạnnày.Ởgiaiđoạnnày,tađãcảmthụđượcmộtchânlývõhọc:Commentnênlàwhat,khôngphảihow.Commentđểnóicodelàmgì,khôngphảiđểgiảithíchviệccodelàm.

Lúcnày, lậptrìnhviênđãhiểurõhơnvềcáchcomment.Vớinhữngđoạncodephứctạp,dàidòng,1dòngcommentngắngọnsẽgiúpngườisaudễdànghiểuđoạncodelàmgì:public object DoThing() { //Lấy 1 phần tử random từ database //Một đống code phức tạp return obj; }

Tuyvậy,cácbậccaonhânxưađãrútrađượcmộtđiều:Commentlàthứdốitrá.Khisửacode,commentthườngkhôngđượcsửa,sẽdẫntớitìnhtrạngcodemộtđằng,commentmộtnẻo.Taphảiđọccảcodelẫncommentđểbiếtcodelàmgì,phígấpđôithờigian.Cáchcommenttốtnhấtchínhlàdùngcode,chínhcodesẽnóicodelàmgì.Ngộrađượcđiềunày,cácđạohữusẽđạttớicảnhgiớicuốicùngtrong“codehọc”.

Cảnh giới vô kiếm thắng hữu kiếm (Vô comment thắng hữucomment)Đâylàcảnhgiớimàtahyvọngcácđạohữucóthểđạtđược.Ởcảnhgiớinày,tacodekhôngcầncommentnhiều.GiốngnhưĐộcCôCầuBạicóthểlấykiếmgỗlàmkiếm,lấylácỏlàmkiếm,lấytaylàmkiếm;tathấybấtcứthứgìcũngcóthểlàmcomment:tênbiếncũnglàcomment,tênhàmcũnglàcomment,têndatabasecũnglàcomment.Codecũng

Page 48: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

47

nhưcomment,commentcũngnhưcode,codevàcommenttuyhaimàmột.

Tuynhiên,đôikhibắtbuộcphảidùngcomment:KhiviếtJavaDoc,APIv…v,tabắtbuộcphảicommentvàdocument,vìngườidùngAPIchỉđược đọc document chứ không đọc code. Một số trường hợpkhác:commentphảilàwhychứkhôngphảiwhat.Taviếtcommentđểngườikhác(hoặcchínhtasaunày)biếtvìsaotalạiviếtcodenhưvậy.Commentcótácdụngnóinhữngđiềubảnthâncodekhôngnóiđược.Cònviệccodelàmgì,chạynhưthếnào,chỉcầnđọccodelàhiểu.// Chỉ cần nhìn tên hàm là biết hàm làm gì public object GetRandomObjectFromDatabase() { return randomObj; } public int[] HalfAllNumbersFromInput(int[] input) { int[] output; //Nhìn tên biến là biết biến làm gì for (int i = 0; i < input.length ; i++) { output[i] = input[i]/2; // Viết để dubug, sau này phải remove // Đây là comment bắt buộc phải viết, // để giải thích lý do ta viết code Console.Write("Call this"); }; return output; } Ởđây,takhôngphủnhậnđộhữudụngcủacomment.Nhưngvấnđềlà:Nhiềugãcoderlợidụngcommentđểviếtcodekhôngrõràng,khóhiểu,sauđósửdụngcommentđểlấpliếm.Điềutamuốncácbằnghữuhiểulà:Hãycógắngviếtcodemộtcórõràngnhấtcóthể,bằngcáchđặttênbiến,tênhàm,táchcode,…Đómớilàcảnhgiớitốicaocủa“codeđạo”.Đừnghọcđòitheolũtrẻtrâumàviếtcodekiểu“càngngắncàngtốt”,càngkhóhiểucàngtốt,đóchỉlàcáidũngcủakẻthấtphumàthôi.Chúccácbằnghữusớmthànhcaothủtrênconđườngcầuđạo,nhầm,cầucodecủamình.

Tómtắt

• Đừngnghĩrằngcommentcàngnhiềucàngtốt,màhãyviếtcodesaochodễđọc,dễhiểu,khôngcầncomment.

• Commentnên làwhat(nóicode làmgì)mànên làwhy(Giảithíchtạisaolạiphảithiếtkế,viếtcodenhưvậy).

Page 49: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

48

CáckháiniệmvàkĩthuậtnângcaoPhầnnàyđềcậpđếnnhữngkháiniệmphứctạphoặcítđượcnóiđếntrong sách vởnhư:Nguyên lý SOLID,Dependency Injection, leakedabstraction…Bêncạnhđólànhữngmánhkhóe,kĩnăngcode,debugvànhữnglờikhuyênđểnângcaokhảnăngkĩthuật.Dosửdụngnhiềuthuậtngữ,kháiniệmchuyênngànhnênphầnnàysẽhơikhóhiểuvớicácbạnkhôngthuộcngànhIT.

Page 50: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

49

SOLIDLÀGÌ–ÁPDỤNGCÁCNGUYÊNLÝSOLIDĐỂTRỞTHÀNHLẬPTRÌNHVIÊNCODE“CỨNG”

Trongquátrìnhhọc,hầunhưcácbạnsinhviênđềuđượchọcmộtsốkháiniệmOOPcơbảnnhưsau:

• Abstraction(Tínhtrừutượng)• Encapsulation(Tínhbaođóng)• Inheritance(Tínhkếthừa)• Polymophirsm(Tínhđahình)

Những khái niệm nàyđãđược dạy khá rõ ràng và hầu như nhữngbuổiphỏngvấnnàocũngcónhữngcâuhỏiliênquanđếnchúng.Vì4kháiniệmnàykhácơbản,bạnnàochưavũngcóthểGoogleđểônlạithêm.

GiớithiệuchungTráingượcvới4kháiniệmnóitrên,nhữngnguyênlýđượcgiớithiệutrongbàiviếtnàylànhữngnguyênlýthiếtkếtrongOOP.Đâylànhữngnguyênlýđượcđúckếtbởimáuxươngvôsốdeveloper,rútratừhàngngàndựánthànhcôngvàthấtbại.Mộtprojectápdụngnhữngnguyênlýnàysẽcócodedễđọc,dễtest,rõrànghơn.

Chúng còn giúp việcbảo trì code và sửa chữadễ hơn rất nhiều(AicókinhnghiệmtrongngànhITđềubiếtthờigiancodechỉchiếm20-40%, còn lại là thời gian để bảo trì: thêm bớt chức năng và sửalỗi).Nắmvữngnhữngnguyênlýnày,đồngthờiápdụngchúngtrongviệc thiếtkếvàviết codesẽgiúpbạn tiến thêmmộtbước trênconđườngthànhsenior(MộtanhseniorbênFPTSoftwaretừngdạymìnhthế).

Ok,10phútquảngcáođãqua,bâygiờđếnphầngiớithiệu.SOLIDtứclà“cứng”,ápdụngnhiềuthìbạnsẽcode“cứng”.Đùathôi,nólàtậphợp5nguyêntắcsauđây:

• Singleresponsibilityprinciple• Open/closedprinciple• Liskovsubstitutionprinciple• Interfacesegregationprinciple

Page 51: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

50

• DependencyinversionprincipleTrongphạmvibàiviết,mìnhchỉgiớithiệutổngquátđểcácbạncócáinhìntổngquanvềcácnguyênlýnày.Mỗinguyênlýsẽđượcgiớithiệukĩhơnởcácbàiviếtsau.

1.SingleResponsibilityPrincipleNguyên lýđầu tiên, tươngứng với chữStrong SOLID. Nội dungnguyênlý:

Mộtclasschỉnêngiữmộttráchnhiệmduynhất(Chỉcóthểthayđổiclassvìmộtlýdoduynhất)

Đểhiểunguyênlýnày,tahãylấyvídụvới1classviphạmnguyênlý.Tacó1classReportManagernhưsau:public class ReportManager() { public void ReadDataFromDB(); public void ProcessData(); public void PrintReport(); } Classnàygiữtới3tráchnhiệm:Đọcdữliệutừdatabase,xửlýdữliệu,inkếtquả.Dođó,chỉcầntathayđổidatabasehoặcthayđổicáchxuấtkếtquả,…tasẽphảisửađổiclassnày.Càngvềsauclasssẽcàngphìnhtora.

Theođúngnguyênlý,taphảitáchclassnàyralàm3classriêng.Tuysốlượngclassnhiềuhơnnhữngviệcsửachữasẽđơngiảnhơn,classngắnhơnnêncũngítbughơn.

2.Open/ClosedPrincipleNguyênlýthứhai,tươngứngvớichữOtrongSOLID.Nộidungnguyênlý:

Cóthểthoảimáimởrộng1class,nhưngkhôngđượcsửađổibên trong class đó (open for extension but closed formodification).

Theonguyênlýnày,mỗikhitamuốnthêmchứcnăng,..chochươngtrình,chúngtanênviếtclassmớimởrộngclasscũ(bằngcáchkếthừahoặcsởhữuclasscũ)khôngnênsửađổiclasscũ.

Page 52: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

51

3.LiskovSubstitutionPrincipleNguyênlýthứba,tươngứngvớichữLtrongSOLID.Nộidungnguyênlý:

Trongmộtchươngtrình,cácobjectcủaclassconcóthểthaythếclasschamàkhônglàmthayđổitínhđúngđắncủachươngtrình

Hơikhóhiểunhỉ?Khôngsao,lúcmớiđọcmìnhcũngvậy.Hãytưởngtượngbạncó1classchatênVịt.CácclassVịtBầu,VịtXiêmcóthểkếthừaclassnày,chươngtrìnhchạybìnhthường.TuynhiênnếutaviếtclassVịtChạyPin,cầnpinmớichạyđược.KhiclassnàykếthừaclassVịt,vìkhôngcópinkhôngchạyđược,sẽgâylỗi.Đólà1trườnghợpviphạmnguyênlýnày.

4.InterfaceSegregationPrincipleNguyênlýthứtư,tươngứngvớichữItrongSOLID.Nộidungnguyênlý:

Thay vì dùng một interface lớn, ta nên tách thành nhiềuinterfacenhỏ,vớinhiềumụcđíchcụthể

Nguyênlýnàykhádễhiểu.Hãytưởngtượngchúngtacó1interfacelớnvớikhoảng100methods.Việcimplementsẽkhácựckhổ,ngoàiracòncóthểdưthừavì1classkhôngcầndùnghết100method.Khitáchinterfacerathànhnhiềuinterfacenhỏ,gồmcácmethodliênquantớinhau,việcimplementvàquảnlýsẽdễhơn.

5.DependencyInversionPrincipleNguyên lý cuối cùng, tươngứng với chữDtrong SOLID. Nội dungnguyênlý:

1.Cácmodulecấpcaokhôngnênphụthuộcvàocácmodulecấpthấp.Cả2nênphụthuộcvàoabstraction.

2.Interface(abstraction)khôngnênphụthuộcvàochitiết,màngược lại. (Các class giao tiếp với nhau thông qua interface,khôngphảithôngquaimplementation.)

Nguyênlýnàykhálắtléo,mìnhsẽlấyvídụthựctế.Chúngtađềubiết2 loạiđèn: đèn tròn vàđèn huỳnhquang. Chúng cùng cóđuôi tròn,

Page 53: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

52

dođótacóthểthaythếđèntrònbằngđènhuỳnhquangchonhaumộtcáchdễdàng.

Ởđây, interface chính làđuôitròn, implementation làbóngđèntrònvàbóngđènhuỳnhquang.Tacóthểchuyểnđổidễdànggiữa2loạibóngđènvìổđiệnchỉquantâmtớiinterface(đuôitròn),khôngquantâmtớiimplementation.

Trongcodecũngvậy,khiápdụngDependency Inversion, tachỉcầnquantâmtớiinterface.Đểkếtnốitớidatabase,tachỉcầngọihàmGet,Save…củaInterfaceIDataAccess.Khithayđổidatabase,tachỉcầnthayimplementationcủainterfacenày.

Mìnhnóikĩvềnguyênlínàyvìnókháquantrọng.NólàtiềnđềđểcácbạntìmhiểuDependencyInjectionvàInversionofControl,haikháiniệmkhóhiểunhưngđượcdùngrấtphổbiếntrongcác frameworkhiệnđại.

Page 54: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

53

DEPENDENCYINJECTIONVÀINVERSIONOFCONTROL Nhưđã nói ở bài trước, Dependency Injection (DI) và Inversion ofControl(IoC)làhaikháiniệmkhóhiểunhưngrấtphổbiếntrongcácframeworkhiệnđại.Mìnhcũngthấyvàibạnđãđilàm1,2nămmàvẫncòn“ngáongơ”vềDI,IoC,chỉbiếtsửdụngnhưngkhônghiểurõbảnchấtcủanó.

Dođó,mìnhviếtbàinàynhằmgiảithíchmộtcáchđơngiảndễhiểuvềDependencyInjection.CácbạnjuniornênđọcthửvìDIđượcápdụngrấtnhiềutrongcácứngdụngdoanhnghiệpvàrấthaygặpkhiđilàmhoặcphỏngvấn.

Phần1:ĐịnhnghĩaTrongbài,mìnhhaydùngtừmodule.Trongthựctế,modulenàycóthểlà1project,1filedll,hoặcmộtservice.Đểdễhiểu,chỉtrongbàiviếtnày,cácbạnhãyxemmỗimodulelàmộtclassnhé.

NhắclạikiếnthứcTrướckhibắtđầuvớiDependencyInjection,cácbạnhãyđọclạibàiviếtvềtrướcvềnhữngnguyênlýSOLIDthiếtkếvàviếtcode.NguyênlýcuốicùngtrongSOLIDchínhlàDependencyInversion:

1.Cácmodulecấpcaokhôngnênphụthuộcvàocácmodulescấpthấp.Cả2nênphụthuộcvàoabstraction.

2.Interface(abstraction)khôngnênphụthuộcvàochitiết,màngược lại. (Cácclassgiao tiếpvớinhau thôngqua interface,khôngphảithôngquaimplementation.)

Vớicáchcodethôngthường,cácmodulecấpcaosẽgọicácmodulecấpthấp.Modulecấpcaosẽphụthuộcvàmodulecấpthấp,điềuđótạoracácdependency.Khimodulecấpthấpthayđổi,modulecấpcaophảithayđổitheo.Mộtthayđổisẽkéotheohàngloạtthayđổi,giảmkhảnăngbảotrìcủacode.

Page 55: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

54

NếutuântheonguyênlýDependendyInversion,cácmodulecùngphụthuộcvào1interfacekhôngđổi.Tacóthểdễdàngthaythế,sửađổimodulecấpthấpmàkhôngảnhhưởnggìtớimodulecấpcao.

ĐịnhnghĩavàkháiniệmDIHiệnnay,cáclậptrìnhviênhaylẫnlộngiữacáckháiniệmDependencyInversion, InversionofControl (IoC),Dependency Injection(DI).Bakháiniệmnàytươngtựnhaunhưngkhônghoàntoàngiốngnhau.

Page 56: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

55

Sựkhácbiệtgiữa3kháiniệmtrên:

• DependencyInversion:Đâylàmộtnguyênlýđểthiếtkếvàviếtcode.

• InversionofControl:ĐâylàmộtdesignpatternđượctạorađểcodecóthểtuânthủnguyênlýDependencyInversion.Cónhiều cách hiện thực pattern này: ServiceLocator,Event,Delegate,…DependencyInjectionlàmộttrongcáccáchđó.

• Dependency Injection: Đây là một cách để hiện thựcInversion of Control Pattern (Có thể coi nó là một designpatternriêngcũngđược).Cácmodulephụthuộc(dependency)sẽđượcinjectvàomodulecấpcao.

KhinóitớiDI,đaphầnlànóitớiDepedencyInjection.Hiệnnay,mộtsốDIContainernhưUnity,StructureMap,…hỗtrợchúngtatrongviệccàiđặtvàápdụngDependencyInjectionvàocode,tuynhiênvẫncóthểgọichúnglàIoCContainer,ýnghĩatươngtựnhau.

CóthểhiểuDependencyInjectionmộtcáchđơngiảnnhưsau:

1. Cácmodulekhônggiaotiếptrựctiếpvớinhau,màthôngquainterface.Modulecấpthấpsẽimplementinterface,modulecấpcaosẽgọimodulecấpthấp.Vídụ:Đểgiaotiếpvớidatabase,tacó interfaceIDatabase, các module cấp thấplàXMLDatabase,SQLDatabase. Module cấp caolàCustomerBusinesssẽsửdụnginterfaceIDatabase.

2. ViệckhởitạocácmodulecấpthấpsẽdoDIContainerthựchiện.Ví dụ:TrongmoduleCustomerBusiness, ta sẽ khôngkhởi tạoIDatabasedb=newXMLDatabase(),việcnàysẽdoDIContainerthựchiện.ModuleCustomerBusinesssẽkhôngbiếtgìvềmoduleXMLDatabasehaySQLDatabase.

3. ViệcModulenàogắnvớiinterfacenàosẽđượcthiếtlậptrongcodehoặctrongfileXML.

4. DIđượcdùngđểlàmgiảmsựphụthuộcgiữacácmodule,dễdànghơntrongviệcthayđổimodule,bảotrìcodevàtesting.

CácdạngDI Có3dạngDependencyInjection:

Page 57: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

56

• Constructor Injection: Các dependency sẽ đượccontainertruyềnvào(injectvào)1classthôngquaconstructorcủaclassđó.Đâylàcáchthôngdụngnhất.

• SetterInjection:Cácdependencysẽđượctruyềnvào1classthôngquacáchàmSetter.

• InterfaceInjection:Classcầninjectsẽimplement1interface.Interface này chứa 1 hàm tênInject. Container sẽ injectiondependency vào 1 class thông qua việc gọi hàmInjectcủainterfaceđó.Đâylàcáchrườmràvàítđượcsửdụngnhất.

ƯuđiểmvàkhuyếtđiểmcủaDIDĩnhiên,DIkhôngphảivạnnăng,nócũngcónhữngưuđiểmvàkhuyếtđiểm,dođókhôngphảiprojectnàocũngnênápdụngDI.Vớinhữngdựánlớn,codenhiều,cầnsửdụngDIđểđảmbảocodedễbảotrì,dễthayđổi.

Vìvậy,bảnthâncácframeworknổitiếngnhưSpring,Struts2,ASP.NETMVC,…đềuhỗtrợhoặctíchhợpsẵnDI.ASP.NETMVCtừbản5trởxuốngchophéptasửdụngDIcontainertừthưviện,từbản6thìtíchhợpsẵnDIluôn,khôngcầnphảithêmthưviệngì.

Page 58: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

57

Ưuđiểm Khuyếtđiểm

Giảm sự kết dính giữa cácmodule

Code dễ bảo trì, dễ thay thếmodule

RấtdễtestvàviếtUnitTest

Dễdàng thấyquanhệgiữacácmodule(Vìcácdependencyđềuđượcinjectvàoconstructor)

KháiniệmDIkhá“khótiêu”,cácdevelopermớisẽgặpkhókhănkhihọc

Sửdụnginterfacenênđôikhisẽkhódebug,dokhôngbiếtchínhxácmodulenàođượcgọi

Các object được khởi tạo toànbộngaytừđầu,cóthểlàmgiảmperformance

Làmtăngđộphứctạpcủacode

Bàiviếtkhánặngvề lý thuyếtnênnếubạnvẫnchưamường tượngđượcsẽápdụngDInhưthếnàovàocodecũngđừnglo.Ởphần2mìnhsẽbổsungcodeminhhọa,cácbạnđọcxongquaylạiđọcbàinàysẽdễ“thông”hơn.

Page 59: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

58

BÍKÍPĐỂTRỞTHÀNH“CAOTHỦ”TRONGVIỆCFIXBUG Mìnhtừngcóbàiviếtđểthanphiềnvềsựlườibiếng,ýlạicủacácsinhviênngànhlậptrìnhhiệnnay9.Ngoạitrừmộtsốbạnhỏivềlýthuyếthoặcvấnđềcôngnghệ,phầnnhiềucácbạnsinhviênhaylênmạnghỏikhi“gặplỗikhôngbiếtsửa”.

Qua đó, có thể thấy các bạn sinh viên năm 2 năm 3 hoặc mớiratrườngvẫn còn thiếukĩ năngdebug. Bài viết này là nhữngkinhnghiệmgiúpbạndebugvàđặtcâuhỏihiệuquảhơn.Mỗikhithấyaihỏibàihaynhờsửa lỗicácbạncứđưabàiviếtnàyđểgiúp íchchongườitanhé.

Trờiđãsinhdevsaocònsinhbug?NgườitathườngbảolàdevelopervàQA(tester)làkẻthùkhôngđộitrờichung,mộtbênránggiấubugđicònmộtbênrángchạychươngtrìnhđểmoibugra.Tuynhiên,sựthậtkhôngphảivậy.CảdevvàQAđềucókẻthùchunglàbug.

Thếmớicócâuchuyệnrằng:Mộtchàngdevelopergặpphảiconbugrất khôn, lúc ẩnlúc hiện. ChàngphảiOThết cả tuần lễ để tìmbug,khôngcóthờigiandắtgấuđichơinêngấubỏđitheongườikhác.Uấthận,chàngngửamặtlêntrờithan“Trờiđãsinhdevsaocònsinhbug”,sauđóhộcmáumàchết.

Thuởmớihọclậptrình,chúngtathườngnghĩrằngcodelàchuyệnkhó,sửalỗilàchuyệndễ.Bắtđầulậptrìnhmớibiếtlàthờigiandebugđôikhicònnhiềuhơnthờigianviếtcode.Thếnhưng,trườngđạihọclạichỉhướngdẫnhọcsinhviếtcodechứkhôngbaogiờcáchdebug.Điềunàydẫntớiviệcnhiềubạngặplỗinhưngkhôngbiếtcáchtìmlỗicũngnhưkhôngbiếtcáchsửa.

Ởphầndưới,mìnhsẽchiasẻnhữngbíkíptìmlỗitừsơcấpđếncaocấp,cùngnhữngđiềucầnlưuýđểđặtcâuhỏihiệuquả.

9 Xem lại bài “thực trang học lập trình của các sinh viên”

Page 60: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

59

Bíkiếpsơcấp–LỗicúphápĐây là các lỗi hay gặp khimới học lập trình, viết sai cú pháp nênchươngtrìnhkhôngchạyđược:thiếumởđóngngoặc,nhầmdấubằng,thiếuchấmphẩy.

Cáchgiảiquyết:dùngIDExịn(VisualStudio,Eclipse,Atom).CácIDEnàyđềuhỗtrợnhắclỗicúpháp(ChỉcầncácbạnchịukhóđọcthôngbáolỗibằngtiếngAnhlàđược).Cáclỗinàychỉcầncodenhiềulàquen,hầunhưcodelâusẽhết.Bạncóthểtậpmộtsốthóiquennhư:Khimởngoặcnhớđóngngoặc,cuốicâulệnhphảithêmchấmphẩy.

Bíkiếptrungcấp–ExceptionSaukhisửacác lỗicúpháp,chươngtrìnhđãbuildđược,nhưngkhichạy lạicrash hoặc quăng Exception. Exception hay gặp nhấtlàNullPointerException,khibạnmuốntruycậpvàomộtbiếncógiátrịnull.

Các lỗinàycũngkhôngquákhóxửlý.ChỉcầnđọctênExceptionvàmessagekèmtheolàbạncóthểhiểuđượcnguyênnhângâylỗi.Tiếptheo,hãycopytênExceptionvàmessagevàoGoogleđểtìm,câutrảlờithườngsẽcóởmộtvàilinkđầutiên.

Bíkiếpcaocấp–LỗiframeworkvàlogicĐâythườnglànhữnglỗiphứctạp,chươngtrìnhchạysaimàkhôngbáolỗihayquăngExceptiongì.Vídụ,lỗimàbạnnàocũnggặpkhimớihọclàviết=thaycho==,chươngtrìnhchạysaimàkhôngrõlỗilàgì.if (x=3) { // Do something } Các lỗi này thườngkhó sửavì bạn không biết rõ nguyên nhân gâylỗi.Vớinhữnglỗidạngnày,trướctiênbạncầnxácđịnh:

1. Codecủamìnhsẽchạycácbướcnào,gọinhữnghàmnào2. Kếtquảđúngmàcáchàmnêntrảvềlàgì3. Kếtquảthựcsựcáchàmtrảvềlàgì4. Kếtquảnàobịsai?Hàmnàotrảvềkếtquảđó?Nguyênnhân

sailàgì?5. Xácđịnhhàmchạysai,lặplạibước1

Page 61: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

60

Nếuchưaquendebug,hãyinratoànbộcácgiátrịvàkiểmtraxemcógiátrịnàosaihaykhông.Khiđãquen,bạnchỉcầnđặtbreakpoint,chochươngtrìnhchạytừngdònglệnhvàkiểmtragiátrịcủatừngbiến.

Saukhilàmrõnhữngđiềunóitrên,nhiềukhảnăngbạnđãtìmđượccâutrảlờichomình.Nếukhôngtìmđượchàmgâylỗi,lụctungGooglenhưngkhôngtìmranguyênnhânhaycáchsửa,bạnsẽphảidùngđếncáchcuốicùng:Vácđihỏi.

Tànquyển–Làmsaođặtcâuhỏimộtcáchhiệuquả?Đầutiên,hãyđặtmìnhvàovịtríngườiđượchỏi,liệukhiđọccâuhỏihọcóhiểugìkhông.Nhiềubạncứhỏichungchungkiểu:Codekhôngchạy được!! Thánh cũng chả hiểu code của bạn tại sao lại khôngchạyđược.Làmrõđiềucầnhỏilàbạnđãtrảlờiđược50%câuhỏirồi.

Khi bạn hỏi một câu hỏi stackoverflow, bạn thường được yêu cầuchỉpostđoạncodegâylỗilên.Hãytậpthóiquennàytrướckhiđihỏi:Xácđịnhđoạncodegâybugrồi táchriêngnóra,cốgắng tái tạo lạibug.Việcxácđịnhđượcđoạncodegâybuglàđãgiảiquyết50%vấnđềrồi,cókhixácđịnhxonglàbạnsửađượcbugluônrồi,chẳngcầnphảiđihỏinữa.

Hãynhớmộtđiều,luônluônGooglevàtìmhiểutrướckhiđặtcâuhỏi.Ngườiđượchỏithườngrấtsẵnlònggiúpđỡ,nhưnghọsẽrấtbựcmìnhnếubạnhỏinhữngcâuđơngiảnmàchỉcần30giâytìmGooglelàra.ViệckhôngchịutìmhiểuhayGoogletrướckhihỏichứngtỏbạnlườivàkhôngtôntrọngthờigiancủangườiđượchỏi.

LờikếtKĩnăngdebugcũngnhưkĩnăngcodeđềucầncóthờigianrènluyệnmớicóthểthànhthục.Dođó,đừngbuồnhaynảnlòngkhibạntốnquánhiềuthờigianđểsửalỗi.Quamộtthờigianbạnsẽquendầnvànhanhhơnthôi.Nhớnhé,phảithườngxuyênluyệntậpcodevàtựdebugthìmớinângcaođượckhảnăngcodelẫnkĩnăngdebugnhé.

Đãnóiởphầntrênrồi,nhưngmìnhvẫnnhắclạithêmlầnnữa.Thayvìcứgặpkhókhănlàvácđihỏilungtung,nhớGoogle7lầntrướckhihỏi.Vềlâudài,việcnàysẽnângcaokhảnăngtìmlỗivàdebugcủabạnđấy.

Page 62: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

61

Đừngđểtớilúcđilàm,cứbílàphảilênFacebookhỏihoặcquaysanghỏiđồngnghiệpnhé.

Tómtắt

• Đaphầncácbạnsinhviênthườngthiếukĩnăngdebug–Tìmvàsửalỗitrongcodecủamình

• GooglevàStackoverflowlàbạnthânthiếtnhất,hãycopythôngbáolỗilên2trangnàyđểtìmlờigiảitrướckhiđihỏi

• Hãytậpcáchsửdụngdebuggertrongngônngữlậptrìnhcủamình

• Kĩnăngdebugcũngnhưkĩnăngcode,cầnthờigianrènluyệnmớigiỏiđược

Page 63: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

62

PHẦN3–KÍSỰCODEDẠO

Phầnnày lànhững câu chuyện, trải nghiệmvàbài họcmình rút rađượctrongthờigianlàmviệcởtrongvàngoàinước.

Page 64: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

63

TẠMBIỆTASWIG–ĐÔIDÒNGTÂMSỰCỦACHÀNGJUNIORDEVELOPER

Ngày 4 tháng 9 năm 2015, mình chính thức nghỉ việc tại AswigSolutionsđểbướctrênmộtconđườngmới–duhọc2nămởUKtạiđạihọcLancaster.Bàiviếtnàylàđôidòngtâmsựkểvềmộtnămlàmviệccủamìnhởđây:Buồnít,vuinhiều,họcđượcvôsốđiềubổíchvềtechnicalvàcáchhànhxửtrongcôngviệc.

Cuốitháng9/2014–BịphỏngvấnnhưsuperjuniorSaukhinộpCVvàocôngtyvớivịtríJuniorDeveloper,mình“được”2anhteamleaderphỏngvấntới tậnhơnmột tiếngrưỡi(100%tiếngAnh). Chả biết sao vị trí junior mà mình “được” hỏi đủ thứtừC#,Linq,MVC, Entity Framework, Database, Front-end (HTML,CSS,Javascript)chotớiOOP,DesignPattern,…riếtrồicứtưởngtuyểnsiêunhânluônchứkhôngphảijuniorgìhết.

Sauvòng1căngthẳng,mìnhđượcvàonóichuyệnnhẹnhàngvớianhK.Manager(Tronglòngcứchắcmẩmlàđãđậu).Đếnbâygiờmìnhvẫnấntượngvớicâuhỏi “Emnghĩ3điềugì làquantrọngnhấtđốivớideveloper?“.Saunày,mìnhmớibiếtvòng2làvòngđánhgiátháiđộlàmviệcvàtínhcáchnhânviên,suýtnữaphátbiểulungtunglàrớtrồi.

Saukhithỏathuậnlương,mìnhđượchẹnphỏngvấnthêm…lần3vớiTechnicalManagernướcngoài–miếngănđếntậnmiệngcònchưaănđược,thậtlàkhổ.Cũngmaylàcuốicùngmọichuyệnđềusuônsẻ,đầutháng10mìnhbắtđầuđilàm,vớimứclươngkhácaosovớimặtbằngjuniornóichung(8chữsố).

Côngbằngmànói,côngtykhárộngrãivớinhânviên.Trong2thángthửviệcmìnhvẫnđượctính100%lươngvàđượckhámbệnhmiễnphí.Cuốitháng12anhManagervẫnxétthưởngchomìnhtháng13,đượcgầnnửathánglươngtiềnthưởng(Làmnguyênnămlàđược2tháng).

Đầutháng10/2014–Chậpchữngvàocôngty,bịmacũ“ănhiếp”Ngàyđầutiênđilàm,mìnhđượcanhPhóng–mộtanhdevelopercùngteamhướngdẫncàiđặtmáy,chỉchỗănuống(CôngtyAswigcóhệ

Page 65: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

64

thốngbuddy,ngườimớigianhậpsẽđược“buddy”hướngdẫnvàgiớithiệu).Đếntrưa,mìnhđượcanhH.TeamLeaderdắtđiăntrưamiễnphí.Tínhmìnhdễlắm,aibaomìnhănlàmìnhthươngliềnà.

QuyđịnhcủacôngtylàphảisửdụngtiếngAnhtrongcôngviệc.Mớiđầumìnhcũnghơingộpvìthấycóvàibácduhọcvềhoặcphátâmnhưgió,lúchọphànhthìchưaquenlắm,chẳngngheđượckháchhàngnóigì.Sau2tuầnmìnhmớidầntậpthànhthóiquenvàthíchnghiđược.

MìnhlạingồingayđốidiệnanhManagernênkhôngdámhohenhiều.Ngàyxưađilàmhômnàomìnhcũngghéthămwebtretho,vozforum,kenh14… Từ hồi qua đây, sáng nào mình cũng chỉ dámvàosimpleprogrammer.com,stackoverflow.com,codeproject.com,toidicodedao.com,…

MìnhđượcvàoteamFoundation,mộtteamloviệcđăngnhậpvàphânquyềnchocácứngdụngkháccủacôngty.Phase1củadựánkhôngthànhcônglắm,vàanhH.đãphảicómộtquyếtđịnhđauthươngvàtáobạo:Đậpnguyênphase1,làmphase2lạitừđầu.Teambanđầucó3người,vềsauthêmđược1ngườinữalà4.Nhờkhảnăngkĩthuậtxuấtchúngcủacácthànhviêncộngvớikhảnăngchémgió“thầnsầu”củaanhteamleader,dựánđã“tạm”thànhcôngmĩmãn.

Giữatháng4/2015–Companytrip,TháiLanvẫygọiMỗinămcôngty tổchứccompanytripmột lầnvàhầunhư lầnnàocũngđinướcngoài.KìnàycảcôngtyđượcquaTháiLanchơi,ngắmvoisẵntiệnchuyểngiớiluônthể.ỞBangkok3ngàynênmìnhcũngkhôngđichơiđượcgìnhiều.Đếnhômcuốicùng,mấyôngtrongteamrủnhauđimuaquàchovợ,ôngnàoôngnấyxáchnguyênvalivàichụckgvề.Ngẫmlạimớithấycóvợcũngchẳngsungsướnggì.

Đầutháng5/2015–BuồnthaychuyệnkẻởngườiđiSauchuyếnđiTháiLan,nhờkhảnăngngoạigiaoxuấtchúng,anhH.đãlấymộtdựánkhábéobởvềchoteammangtênClaimbook.AnhSơn–thànhviênthứ4củateamlạiquyếtđịnhnghỉviệc,quaSingaporelàm…rửachénkiêmlậptrìnhviênchomộtphònglabởbênđó(Ngheđồnlươngcaođếnhơn4.000đôSing).

Page 66: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

65

AnhSơnlàcựusinhviênkiêmtrợgiảngtrườngBáchKhoa.Khảnăngkĩthuậtcủaanhcũngrấtkhá,nhưnglúcnàoanhcũngbảo:CỡanhchỉlàcắckéởBKthôi.Mìnhnhủthầm:CắckéởBKmàcỡnày,dânBKchắcghêgớmlắm.TớilúcthấyổngkhoebằngGiỏimìnhmớibiếtmìnhbịlừa,hóaratrênđờikhôngtinaichođược.ThiếuanhSơn,độiăn-nhậumấtđimộtthànhviêncộmcán,aicũngbuồnrườirượi….

Đầutháng6/2015–MộtthángđầybiếnđộngDựánthiếungười,mìnhbị“ép”phảidựngtoànbộwireframevàgiaodiệnchodựánClaimbook.Đúnglàlàmsuperjuniornókhổthế.Mộtlầnnữa,anhH.lạitỏasángvớikhảnăngngoạigiaocủamình.Anhđã“lôikéo”đượcmộtbácTechnicalLeadvà2developermớivàoteam.

Anhcòndụdỗđượcteamdesignerthamgiavàoquátrìnhthiếtkếchodựán.LeaderTeamDesignerlàanhSơnĐoàn–ngườiyêucủaAdrianAnhTuấn.TrônganhSơnđẹptraivàmanlyhơnôngTeamLeadercủamìnhcảchụclần.

Suốt2thángtrời,cảnhómdồnhếttâmsứclàmprototypechodựánClaimbook.Teamcũngtổnthấtkhánhiều.Anhtechnicalleaddotháiđộlàmviệckhôngtốt,khôngphùhợpvớivănhóacôngty,vàoteammìnhđượcmộtthángđãphảichuyểnquateamkhácrồinghỉviệcngaysauđóvàituần.Designcủadựáncũngbịthayđổixoànhxoạchtheoyêucầucủakháchhàng,teammìnhcũngngạikhôngdámliênhệlạivớiteamdesignervìsợbịchửidotựýsửalungtungdesigncủahọ.

ThaymặtanhH.,xingửilờicảmơnđếnanhSơnĐoànđẹptrai,cùngtoànthểcácbạntrongteamdesignerđãgópphầnvàothànhcôngcủadựán.Thấyteamemđượckhennhiềumàkhôngnhắcđếncácđónggópcủateamanhnêncũnghơicắnrứt.

Đầu tháng 8/2015 – Nghỉ việc, tăng lương và cách xử sự củangườilãnhđạoVàokhoảngtháng5,mìnhcũngđãchiasẻvớianhH.TeamLeadervềýđịnhđiduhọcvàocuốinămđểtiệnchoviệcsắpxếpnhânsự.Mặcdùkhátiếcnuốinhưnganhvẫnủnghộlựachọncủamình.

Cuốitháng7,đầutháng8,côngtybắtđầuxéttănglương.Mấyđứabạnmìnhởteamkhácđượctăngcũngkhakhá.AnhH.TeamLeaderkhá

Page 67: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

66

khóxửkhiphảigiảithíchvớimìnhrằng:Dosắpnghỉviệcnênmìnhchỉđược thăngchức từ JuniorDeveloper lênSoftwareEngineermàkhôngđượctănglương,đểphầnđólạichocácbạnkhác.

Cảmthấyvừabuồnvừahụthẫng,mìnhviếtmộtbứctâmthưgửianhManagervàanhTeamLeader(Thưdàinênmìnhtómtắtnhé):

Chào hai anh, anhH. đã có chia sẻ với em về việc em đượcpromotelênvịtríSoftwareEngineervàkhôngtănglương.

Emrấthiểuvàthôngcảmlýdomàhaianhđưaraquyếtđịnhnày:EmcũnghiểuanhH.rấtkhóxửkhiphảigiảithíchchuyệnnàychoem;anhK.chắccũngphảiđắnđokhiđưaraquyếtđịnhnày.Tuynhiên,bảnthânemcảmthấyrấtbuồnvàthấtvọngvìnhiềulýdosau:…

Vìvậy,emmonghaianhcóthểxemlạikếtquảPerformanceReviewcủaem,hoặccócáchgìhỗtrợchoemđỡcảmthấythiệtthòi.Cảmơnhaianhvìđãđọc.Chúchaianhcóngàycuốituầnvuivẻ.

Ngẫmlại,mìnhthấymìnhkiềmchếcảmxúckhátốt,khônglàmbùlubùloalên.MìnhhiểurằngởvịtríManager,cólúcphảiđưaranhữngquyếtđịnhthiệtthòichomộtcánhânđểgiữlợiíchcôngtyvàtậpthể.Dođómìnhcốgắnglịchsựkhiviếtthưkhithửđặtmìnhvàovịtrícủahọ.

Kinhnghiệmmìnhmuốn chia sẻ là:Quanhệ vàthươnghiệubảnthânlànhữngthứrấtkhóxâydựng,đừngvìcảmxúcnhấtthờimàhànhđộngnôngnổirồilàmmấtcảhai.

Ngaychiềuhômsau,mìnhđượcanhteamleadvàchịS.Managerrủđicafenóichuyệnvàchiasẻchânthành.Lầnđầumìnhđượcnhậnlờixinlỗichânthànhcủacấptrên“vìđãquênconsidersuynghĩcủaemkhiđưaraquyếtđịnh“.MìnhcũngđượcnghechịS.ManagerchiasẻvềviệccáccôngtyVNđốixửkhôngtốtvớingườisắpnghỉ.

Bảnthâncôngtycũngđãcốgắngthăngchứcchomìnhđểkhenngợinhữngđónggóp củamình.Chỉ riêngviệcTeamLeadervàManagerchịubỏthờigianragiảithích,chiasẻvớijuniornhưmìnhcũnglàmmìnhcảmthấyđượctôntrọngrấtnhiều.

Page 68: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

67

Tớihôm1/9/2015, trong cuộchọp toàn công ty,mìnhđược tuyêndươngvàtặngquàchiatay.Chưabạnnàorờicôngtylạicóđượcđãingộnhưvậy.Mìnhcũnghiểulàbudgetcủacôngtycóhạn,anhH.TeamLeadervàanhK.Managerphảitríchquỹriêngđểcóquàchomình,đểmìnhcảmthấyđượccoitrọng,cóthểngẩngcaođầutựhàokhirờikhỏicôngty.Cảmơntìnhcảmvàsựquantâmmà2anhđãdànhchoem.(TaingheAKGnghesướnglắmcácbạnạ).

KếtHơnmộtnămđãqua,buồnvuicũngnhiều.Khảnăngcode,tháiđộcủamìnhcũngtiếnbộđángkể.Mìnhcũngquansátvàhọchỏiđượcrấtnhiềuvềcungcáchlãnhđạo,quảnlýnhờquansátanhK.,anhH.vàcácanh team leader khác. Cảmơn các anh đã nâng đỡ em trên quãngđườngvừaqua.ASWIG,hẹngặplại!

Page 69: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

68

LỜICUỐISÁCH

Quyểnsáchnàylàtổnghợpvàbiêntậpcủahơn60bàiviếthaynhấtvềnghềnghiệpcũngnhưkĩthuậtlậptrìnhcủaBlogTôiĐiCodeDạo10.Nókhôngchỉlàthànhquảnỗlựccủachínhmình,màcònlàthànhquảcủanhữngbạnđọctrungthànhđãtheodõi,gópýchoblogngaytừnhữngngàyđầuthànhlập.

NgànhITnóichungvàngànhlậptrìnhnóiriênglàmộtngànhkhó,đòihỏinhiềuđammê.Kiếnthứctrongngànhvôcùngrộnglớnnênkhôngthểgóigọnhếttrongmộtcuốnsách.Dẫuvậy,mìnhvẫnmongcónhiềubạnsinhviênvàlậptrìnhviênmớiratrườngbiếttớivàđọccuốnsáchnày.Hivọngcuốnsáchsẽlàngườibạntốt,đồnghànhcùngbạntrênnhữngbướcchânđầutiêntrongsựnghiệplậptrình.

Dothờigianvàkinhnghiệmcònhạnchếnêncuốnsáchkhôngtránhkhỏisaisót,kínhmongbạnđọcđónggópýkiếnđểsáchcóthểtrởnênhoànthiệnhơn.Mọigópývềkĩthuậthaycáchtrìnhbàyxinvuilònggửivềđịachỉemail:[email protected].

LỜICẢMƠN

ChânthànhcảmơnanhĐỗKimCơvàbanbiêntậpcủaTriThứcTrẻBooksđãgiúpđỡvàtạođiềukiệnchomìnhxuấtbảncuốnsáchnày.

CảmơnthầyKiềuTrọngKhánh,bácChrisHarvey,anhLêVănSong,anhHuỳnhXuânThi,anhNguyễnCảnhHưng, anhLêAnhBảo,anhNguyễnThanhBình,anhPhạmHồngSangđãbỏchútthờigiantrongquỹthờigianbậnrộnđểđọcvàviếtđôidòngnhậnxétchocuốnsách.

Cảmơncácanh/chịđồngnghiệptạiFPTSoftware,ASWIGSolutionvàLancasterISSđãdìudắt,chomìnhnhữngbàihọcvàkinhnghiệmquígiátrongngànhlậptrình.

CảmơnnhữngbạnđọctrungthànhcủablogTôiđicodedạođãluônđộngviêngiúpđỡmìnhtrongquátrìnhviếtblog.Cảmơnhơn1300bạnđãhoànthànhkhảosátvàchomìnhgópývềsáchtrướckhinóđượcpháthành.

10 https://toidicodedao.com

Page 70: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

69

GIẢITHÍCHCÁCTHUẬTNGỮHAYDÙNG

NgànhITcókhánhiềuthuậtngữtiếngAnhphứctạp.Cácthuậtngữnàyđượcsửdụngnhiềutrongcôngviệcnênmìnhsửdụngnguyênvăntrong bài viết. Điều này có thể sẽ gây khó khăn cho bạn đọc ngoàingànhhoặccácsinhviênmới.

Dovậy,phầnnàytổnghợpvàgiảithíchmộtcáchngắngọncácthuậtngữhaydùngđểbạnđọcdễtracứu.(Nếucóthờigian,mìnhkhuyếnkhíchcácbạntracứuGoogletừngthuậtngữđểtìmhiểukĩhơn).

Thuậtngữchuyênmôn

• API: Viết tắt của Application Programming Interface. Có thểhiểuđâylàdanhsáchnhữngchứcnăng,dònglệnhcósẵnmàtacóthểsửdụng.

• Bug:Lỗicủaphầnmềm.Quátrìnhtìmlỗiđượcgọi làdebug.Sửalỗiđượcgọilàfixbug.

• Build:Quátrìnhchuyểnđổimãnguồn(code)thànhphầnmềm(software)

• Code/SourceCode:Mãnguồncủaphầnmềm.Lập trìnhviênviếtmãnguồnđểtạoraphầnmềm.

• Coder/Developer:Mộtcáchgọivuicủalậptrìnhviên• Computer Science:Khoahọcmáy tính,mộtngànhhọc trong

ngànhITthiênvềnghiêncứu.• CV:ViếttắtcủaCurriculumVitae.CVđượcsửdụngđểxinviệc,

chứacácthôngtinnhưkĩnăng,kinhnghiệmlàmviệc• Database:Cơsởdữliệu.Lànơilưutrữtoànbộcácdữliệucủa

chươngtrình• Deadline:Hạnchótđểhoànthànhmộtdựánhoặcsảnphẩm• Debug:Quátrìnhtìmlỗitrongphầnmềm• Demo:Sảnphẩmchưahoànchỉnh.Khitanói“demochokhách

hàng”nghĩalàgiớithiệumộtsốchứcnăngchokháchhàng.• Developer/Dev/Coder:Lậptrìnhviên,còngọitắtlàdev• Fixbug:Quátrìnhsửalỗitrongphầnmềm

Page 71: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

70

• Form:Biểumẫu,nơingườidùngcóthểnhậpdữliệuvàgửichohệthống

• Framework:Mộtbộkhungcósẵn,dựavàođóđểpháttriểnứngdụng

• Git:Mộthệthốngquảnlýmãnguồnphầnmềm• Library/Thư viện: Tập hợp những đoạn code, chức năng đã

đượcviếtsẵnmàtacóthểsửdụng• OT–Overtime:Chỉviệclàmthêmgiờcủalậptrìnhviên.Đôikhi

cóthểlàmthêmtới9-10htốivàcảthứ7,chủnhật.• Outsouce:Giacôngphầnmềm.Sảnxuấtphầnmềmdựatheo

thiếtkế,yêucầucủakháchhàng.• Prototype:Cóthểlàgiảlậphoặcphầnmềmchưahoànthiện,

thườngdùngđểmôtảphầnmềmchokháchhàng• Quora:Một tranghỏi đápđượckhánhiều lập trìnhviênnổi

tiếngthếgiớiưathích• Refactorcode:Quátrìnhtinhchỉnhcode,giúpcodegọnnhẹ,dễ

hiểuvàdễmởrộnghơn• Requirement:Yêucầucủakháchhàng• Server:Máychủ.VớicácứngdụngWeb,đâylànơichứaứng

dụngvàcungcấpdịchvụ• Software:Phầnmềm• SoftwareEngieering:Kĩnghệphầnmềm,mộtngànhhọctrong

ngànhITthiênvềsảnxuấtphầnmềm.• Stackoverflow: Trang web hỏi đáp lớn nhất thế giới về lập

trình.• SVN:Mộthệthốngquảnlýmãnguồnphầnmềm(tươngtựgit)• Technical: Kĩ thuật. Lập trình viên thường thích dùng từ

technicalhơntừ“kĩthuật”.• Test: Chạy thử chương trình. Các tester thường chạy thử

chươngtrìnhđểtìmrabug.

Mộtsốngônngữlậptrình

• C#:Mộtngônngữ lập trìnhđượcMicrosoftphát triển,đượcdùngđểlậptrìnhcácứngdụngtrênWindowshoặcứngdụngWeb,ứngdụngWindowPhone.

Page 72: PHẠM HUY HOÀNG - · PDF fileTẠO ĐỘNG LỰC HỌC TẬP VÀ LÀM VIỆC – SỨC MẠNH CỦA THÓI QUEN ... nâng cao. Đa phần những ... Bài viết trong sách sử

LẬPTRÌNHVIÊNĐÂUPHẢICHỈBIẾTCODE

71

• Java:MộtngônngữlậptrìnhmiễnphícủaOracle,cóthểviếtứngdụngwebtrênnhiềuhệđiềuhành.CácứngdụngAndroidcũngđượcviếtbằngngônngữnày.

• JavaScript/JS:Khởiđầu làmộtngônngữ chỉ chạyđược trêntrìnhduyệtWeb.HiệntạiJScóthểdùngđểviếtcảứngdụngwebvàứngdụngdiđộng.

• Objective-CvàSwift:NgônngữlậptrìnhdoApplepháttriển,đượcdùngđểlậptrìnhứngdụngchohệđiềuhànhMacvàiOS

• PHP:Mộtngônngữrấtphổbiến,đượcdùngđểlậptrìnhWeb.Đaphầncáctrangwebtrênmạngđượclậptrìnhbằngngônngữnày,trongđócóFacebookvàWikipedia.

• SQL:ViếttắtcủaSQLQueryLanguage:Đâylàngônngữđượcdùngđểtruycậpdữliệudướidatabase.

Vềcácvịtrítrongngànhlậptrình11

• Junior:ViếttắtcủaJuniorDeveloper,chỉcáclậptrìnhviênmớiratrường,chưacónhiềukinhnghiệm.ĐôikhicònđượcgọilàFresher.

• Senior:ViếttắtcủaSeniorDeveloper,chỉcáclậptrìnhviênlâunăm,nhiềukinhnghiệm

• TeamLeader:Lậptrìnhviênthườnglàmviệctheonhóm.TeamLeaderlàngườitrưởngnhóm,chịutráchnhiệmphânchiacôngviệc,hướngdẫn,đánhgiádevelopertrongnhóm.

• Tester/QC (Quality Control): NếuDeveloper là những ngườitạoraphầnmềmthìtesterlànhữngngườikiểmtracácphầnmềmđểtìmralỗinhằmđảmbảophầnmềmchạyđúng.

• BA-BusinessAnalyst:Tìmhiểuhệthống,lấyyêucầucủakháchhàngvàviếtthànhtàiliệu,giảithíchcholậptrìnhviên

PM-ProjectManager:Ngườiquảnlýdựán,chịutráchnhiệmgiaotiếpvớikháchhàng,ướcđoántiếnđộ,quảnlýtoànbộcácthànhviêntrongdựán.

11 Đã giải thích trong bài “Con đường phát triển nghề nghiệp của developer”