<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Grokking Newsletter]]></title><description><![CDATA[Tuyển tập các bài viết hay chọn lọc về công nghệ mỗi tuần.]]></description><link>https://newsletter.grokking.org</link><image><url>https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png</url><title>Grokking Newsletter</title><link>https://newsletter.grokking.org</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 13:11:37 GMT</lastBuildDate><atom:link href="https://newsletter.grokking.org/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Grokking Vietnam]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[grokkingnewsletter@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[grokkingnewsletter@substack.com]]></itunes:email><itunes:name><![CDATA[Grokking Vietnam]]></itunes:name></itunes:owner><itunes:author><![CDATA[Grokking Vietnam]]></itunes:author><googleplay:owner><![CDATA[grokkingnewsletter@substack.com]]></googleplay:owner><googleplay:email><![CDATA[grokkingnewsletter@substack.com]]></googleplay:email><googleplay:author><![CDATA[Grokking Vietnam]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[#272 - Tư duy chiến lược]]></title><description><![CDATA[Ch&#250;c m&#7915;ng n&#259;m m&#7899;i c&#225;c b&#7841;n &#273;&#7897;c gi&#7843;!]]></description><link>https://newsletter.grokking.org/p/272-tu-duy-chien-luoc</link><guid isPermaLink="false">https://newsletter.grokking.org/p/272-tu-duy-chien-luoc</guid><pubDate>Tue, 03 Mar 2026 12:01:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ch&#250;c m&#7915;ng n&#259;m m&#7899;i c&#225;c b&#7841;n &#273;&#7897;c gi&#7843;!</p><p>Hy v&#7885;ng b&#7841;n &#273;&#227; c&#243; m&#7897;t k&#7923; ngh&#7881; l&#7877; n&#7841;p &#273;&#7847;y n&#259;ng l&#432;&#7907;ng. Trong s&#7889; newsletter khai xu&#226;n k&#7923; n&#224;y, ch&#250;ng ta s&#7869; c&#249;ng th&#7843;o lu&#7853;n v&#7873; m&#7897;t ch&#7911; &#273;&#7873; mang t&#237;nh b&#432;&#7899;c ngo&#7863;t trong l&#7897; tr&#236;nh ph&#225;t tri&#7875;n c&#7911;a m&#7897;t k&#7929; s&#432;: <strong>&#8220;T&#432; duy chi&#7871;n l&#432;&#7907;c&#8221; (Strategic Thinking) </strong>th&#244;ng qua b&#224;i chia s&#7867; c&#7911;a b&#7841;n N^4.</p><div><hr></div><p><strong>T&#432; duy chi&#7871;n l&#432;&#7907;c l&#224; g&#236;?</strong></p><p>Khi nh&#7855;c &#273;&#7871;n &#8220;chi&#7871;n l&#432;&#7907;c&#8221;, ch&#250;ng ta th&#432;&#7901;ng h&#236;nh dung &#273;&#7871;n c&#225;c CEO trong ph&#242;ng k&#237;nh b&#224;n v&#7873; t&#7847;m nh&#236;n th&#7853;p k&#7927; hay nh&#7919;ng th&#432;&#417;ng v&#7909; tri&#7879;u &#273;&#244;. V&#7899;i m&#7897;t k&#7929; s&#432; &#273;ang h&#7857;ng ng&#224;y v&#7853;t l&#7897;n v&#7899;i bug v&#224; deadline, kh&#225;i ni&#7879;m n&#224;y nghe c&#243; v&#7867; &#8220;&#273;ao to b&#250;a l&#7899;n&#8221;.</p><p>Nh&#432;ng th&#7921;c t&#7871; ho&#224;n to&#224;n ng&#432;&#7907;c l&#7841;i. T&#432; duy chi&#7871;n l&#432;&#7907;c ch&#237;nh l&#224; n&#7873;n t&#7843;ng &#273;&#7875; b&#7841;n &#273;&#7843;m nh&#7853;n nh&#7919;ng tr&#7885;ng tr&#225;ch l&#7899;n h&#417;n. D&#249; b&#7841;n ch&#7885;n con &#273;&#432;&#7901;ng chuy&#234;n gia (IC) hay qu&#7843;n l&#253; (Manager), kh&#7843; n&#259;ng nh&#236;n ra &#8220;b&#7913;c tranh l&#7899;n&#8221; l&#224; th&#432;&#7899;c &#273;o ph&#226;n bi&#7879;t gi&#7919;a m&#7897;t ng&#432;&#7901;i th&#7921;c thi thu&#7847;n t&#250;y v&#224; m&#7897;t k&#7929; s&#432; c&#243; t&#7847;m v&#243;c.</p><h3>Chuy&#7879;n v&#7873; K&#7929; s&#432; A v&#224; K&#7929; s&#432; B</h3><p>H&#227;y t&#432;&#7903;ng t&#432;&#7907;ng hai k&#7929; s&#432; c&#249;ng nh&#7853;n nhi&#7879;m v&#7909;: <em>&#8220;Gi&#7843;m s&#7889; l&#432;&#7907;ng c&#7845;u h&#236;nh (config) r&#225;c trong h&#7879; th&#7889;ng&#8221;</em>.</p><ul><li><p><strong>K&#7929; s&#432; A (T&#7853;p trung v&#224;o &#8220;How&#8221; - C&#225;ch l&#224;m):</strong> Ngay l&#7853;p t&#7913;c vi&#7871;t RFC &#273;&#7875; d&#7885;n d&#7865;p. B&#7841;n &#273;&#7873; xu&#7845;t x&#243;a code th&#7915;a, g&#7897;p file, vi&#7871;t script automation &#273;&#7875; d&#7885;n d&#7865;p nhanh h&#417;n. C&#225;ch ti&#7871;p c&#7853;n n&#224;y gi&#7843;i quy&#7871;t &#273;&#432;&#7907;c <strong>ph&#7847;n ng&#7885;n</strong> c&#7911;a v&#7845;n &#273;&#7873;.</p></li><li><p><strong>K&#7929; s&#432; B (T&#7853;p trung v&#224;o &#8220;Why&#8221; - T&#7841;i sao):</strong> B&#7841;n d&#224;nh th&#7901;i gian &#273;&#7863;t c&#226;u h&#7887;i: <em>&#8220;T&#7841;i sao h&#7879; th&#7889;ng l&#7841;i sinh ra nhi&#7873;u config r&#225;c? T&#7841;i sao quy tr&#236;nh hi&#7879;n t&#7841;i kh&#244;ng ng&#259;n ch&#7863;n &#273;&#432;&#7907;c vi&#7879;c n&#224;y? &#272;i&#7873;u g&#236; x&#7843;y ra n&#7871;u ch&#250;ng ta kh&#244;ng d&#7885;n d&#7865;p th&#432;&#7901;ng xuy&#234;n?&#8221;</em>.</p></li></ul><p><strong>K&#7871;t qu&#7843;:</strong> K&#7929; s&#432; B nh&#7853;n ra v&#7845;n &#273;&#7873; n&#7857;m &#7903; vi&#7879;c thi&#7871;u c&#417; ch&#7871; Monitoring v&#224; KPI c&#7909; th&#7875;. Thay v&#236; ch&#7881; &#273;i d&#7885;n r&#225;c, b&#7841;n thi&#7871;t l&#7853;p m&#7897;t h&#7879; th&#7889;ng c&#7843;nh b&#225;o v&#224; bi&#7871;n n&#243; th&#224;nh ch&#7881; s&#7889; &#273;&#7875; to&#224;n team t&#7921; theo d&#245;i. K&#7929; s&#432; B &#273;&#227; chuy&#7875;n b&#224;i to&#225;n t&#7915; &#8220;&#272;i d&#7885;n d&#7865;p&#8221; sang &#8220;X&#226;y d&#7921;ng h&#7879; th&#7889;ng t&#7921; v&#7853;n h&#224;nh&#8221;.</p><p>B&#224;i h&#7885;c r&#250;t ra<strong>:</strong> K&#7929; s&#432; B kh&#244;ng ch&#7881; gi&#7843;i quy&#7871;t task, b&#7841;n &#7845;y gi&#7843;i quy&#7871;t nguy&#234;n nh&#226;n g&#7889;c r&#7877;. &#272;&#243; ch&#237;nh l&#224; t&#432; duy chi&#7871;n l&#432;&#7907;c.</p><p><strong>T&#432; duy chi&#7871;n l&#432;&#7907;c trong t&#7893; ch&#7913;c</strong></p><p>Trong m&#7897;t t&#7893; ch&#7913;c, s&#7921; th&#259;ng ti&#7871;n t&#7927; l&#7879; thu&#7853;n v&#7899;i kh&#7843; n&#259;ng x&#7917; l&#253; c&#225;c c&#226;u h&#7887;i ph&#7913;c t&#7841;p:</p><ul><li><p><strong>Junior/Senior:</strong> T&#7853;p trung nhi&#7873;u v&#224;o <strong>How</strong> (L&#224;m th&#7871; n&#224;o &#273;&#7875; th&#7921;c thi t&#7889;t nh&#7845;t?).</p></li><li><p><strong>Staff/Principal/Manager:</strong> Ph&#7843;i tr&#7843; l&#7901;i &#273;&#432;&#7907;c c&#226;u h&#7887;i <strong>Why</strong> (T&#7841;i sao l&#224;m c&#225;i n&#224;y m&#224; kh&#244;ng l&#224;m c&#225;i kia?) v&#224; <strong>What</strong> (C&#225;i g&#236; mang l&#7841;i gi&#225; tr&#7883; l&#7899;n nh&#7845;t cho t&#7893; ch&#7913;c?).</p></li></ul><p>Vi&#7879;c r&#232;n luy&#7879;n kh&#7843; n&#259;ng tr&#7843; l&#7901;i c&#226;u h&#7887;i &#8220;Why/What&#8221; c&#224;ng nhi&#7873;u, b&#7841;n s&#7869; hi&#7875;u r&#245; h&#417;n t&#7841;i sao c&#225;c c&#7845;p b&#7853;c l&#227;nh &#273;&#7841;o c&#7911;a m&#236;nh l&#7841;i &#273;&#432;a ra chi&#7871;n l&#432;&#7907;c n&#224;y, chi&#7871;n l&#432;&#7907;c kia. Khi b&#7841;n b&#7855;t &#273;&#7847;u t&#7921; t&#7841;o ra &#273;&#432;&#7907;c c&#225;i &#8220;Why&#8221; cho team c&#7911;a m&#236;nh, &#273;&#243; l&#224; l&#250;c b&#7841;n &#273;&#227; s&#7861;n s&#224;ng b&#432;&#7899;c l&#234;n nh&#7919;ng n&#7845;c thang cao h&#417;n trong s&#7921; nghi&#7879;p.</p><p><strong>R&#232;n luy&#7879;n T&#432; duy Chi&#7871;n l&#432;&#7907;c</strong></p><p>M&#7897;t v&#224;i g&#7907;i &#253; d&#224;nh cho c&#225;c b&#7841;n n&#224;o &#273;ang mu&#7889;n r&#232;n luy&#7879;n t&#432; duy chi&#7871;n l&#432;&#7907;c:</p><ol><li><p><strong>X&#225;c &#273;&#7883;nh t&#7847;m nh&#236;n v&#224; l&#253; do (Vision &amp; Why):</strong> Nh&#236;n xa v&#7873; t&#432;&#417;ng lai &#273;&#7875; bi&#7871;t team v&#224; t&#7893; ch&#7913;c &#273;ang h&#432;&#7899;ng v&#7873; &#273;&#226;u. B&#7841;n kh&#244;ng ch&#7881; l&#224;m task, b&#7841;n &#273;ang x&#226;y d&#7921;ng m&#7897;t ph&#7847;n c&#7911;a h&#7879; th&#7889;ng. N&#7871;u kh&#244;ng bi&#7871;t &#8220;t&#7841;i sao&#8221; ph&#7843;i &#273;i &#273;&#7871;n &#273;&#243;, b&#7841;n s&#7869; r&#7845;t d&#7877; t&#7889;i &#432;u h&#243;a nh&#7919;ng th&#7913; kh&#244;ng c&#7847;n thi&#7871;t.</p></li><li><p><strong>&#272;&#7915;ng &#8220;y&#234;u&#8221; ph&#432;&#417;ng &#225;n &#273;&#7847;u ti&#234;n:</strong> Lu&#244;n kh&#7843;o s&#225;t nhi&#7873;u k&#7883;ch b&#7843;n kh&#225;c nhau &#273;&#7875; &#273;&#7841;t &#273;&#432;&#7907;c m&#7909;c ti&#234;u. Thay v&#236; b&#225;m v&#237;u v&#224;o m&#7897;t c&#244;ng ngh&#7879; hay m&#7897;t pattern duy nh&#7845;t, h&#227;y &#273;&#7863;t ch&#250;ng l&#234;n b&#224;n c&#226;n so s&#225;nh v&#7873; chi ph&#237;, th&#7901;i gian v&#224; ngu&#7891;n l&#7921;c.</p></li><li><p><strong>D&#7921; b&#225;o h&#7879; qu&#7843; (Second-order Thinking):</strong> Tr&#432;&#7899;c khi th&#7921;c thi, h&#227;y t&#7921; h&#7887;i: &#8220;V&#224; sau &#273;&#243; th&#236; sao?&#8221;. M&#7897;t thay &#273;&#7893;i nh&#7887; h&#244;m nay c&#243; th&#7875; mang l&#7841;i &#8220;hi&#7879;u &#7913;ng c&#225;nh b&#432;&#7899;m&#8221; g&#226;y ra th&#7843;m h&#7885;a v&#7853;n h&#224;nh sau 6 th&#225;ng. T&#432; duy v&#7873; t&#225;c &#273;&#7897;ng t&#7847;ng th&#7913; hai gi&#250;p b&#7841;n b&#7873;n b&#7881; h&#417;n v&#7899;i c&#225;c quy&#7871;t &#273;&#7883;nh c&#7911;a m&#236;nh.</p></li></ol><p><strong>L&#7901;i k&#7871;t</strong></p><p>Trong k&#7927; nguy&#234;n AI ng&#224;y nay, khi c&#225;c Agent c&#243; th&#7875; vi&#7871;t code v&#224; th&#7921;c thi c&#225;c b&#224;i to&#225;n k&#7929; thu&#7853;t v&#7899;i t&#7889;c &#273;&#7897; ch&#243;ng m&#7863;t, gi&#225; tr&#7883; c&#7911;a m&#7897;t k&#7929; s&#432; kh&#244;ng c&#242;n n&#7857;m &#7903; vi&#7879;c &#8220;vi&#7871;t script nhanh h&#417;n&#8221;.</p><p>&#272;i&#7875;m c&#7841;nh tranh c&#7889;t l&#245;i c&#7911;a con ng&#432;&#7901;i ch&#237;nh l&#224; kh&#7843; n&#259;ng x&#225;c &#273;&#7883;nh c&#225;i Why. Gi&#7889;ng nh&#432; K&#7929; s&#432; B, m&#7897;t khi b&#7841;n &#273;&#227; &#273;&#7883;nh v&#7883; &#273;&#250;ng v&#7845;n &#273;&#7873; v&#224; chi&#7871;n l&#432;&#7907;c, b&#7841;n ho&#224;n to&#224;n c&#243; th&#7875; s&#7917; d&#7909;ng AI nh&#432; m&#7897;t c&#244;ng c&#7909; &#273;&#7855;c l&#7921;c &#273;&#7875; hi&#7879;n th&#7921;c h&#243;a c&#225;c k&#7871; ho&#7841;ch.</p><p>H&#227;y b&#7855;t &#273;&#7847;u n&#259;m m&#7899;i b&#7857;ng c&#225;ch t&#7921; h&#7887;i m&#236;nh nhi&#7873;u h&#417;n c&#226;u h&#7887;i &#8220;T&#7841;i sao&#8221; tr&#432;&#7899;c khi b&#7855;t tay v&#224;o g&#245; d&#242;ng code &#273;&#7847;u ti&#234;n. &#272;&#243; ch&#237;nh l&#224; kh&#7903;i &#273;&#7847;u c&#7911;a m&#7897;t n&#259;m &#273;&#7897;t ph&#225;!</p><p>Ch&#250;c c&#225;c b&#7841;n m&#7897;t n&#259;m m&#7899;i l&#224;m vi&#7879;c &#273;&#7847;y c&#7843;m h&#7913;ng v&#224; chi&#7871;n l&#432;&#7907;c!</p><p></p>]]></content:encoded></item><item><title><![CDATA[#271 - 2026 Voice AI sẽ bùng nổ ? Xu hướng bảo mật và công nghệ sẽ ra sao trong kỷ nguyên AI lên ngôi?]]></title><description><![CDATA[T&#7893;ng h&#7907;p d&#7921; b&#225;o v&#7873; c&#225;c khuynh h&#432;&#7899;ng n&#7893;i b&#7853;t cho n&#259;m 2026]]></description><link>https://newsletter.grokking.org/p/271-2026-voice-ai-se-bung-no-xu-huong</link><guid isPermaLink="false">https://newsletter.grokking.org/p/271-2026-voice-ai-se-bung-no-xu-huong</guid><dc:creator><![CDATA[Steven Do]]></dc:creator><pubDate>Sun, 25 Jan 2026 11:02:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YRBH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>V&#7853;y l&#224; &#273;&#227; k&#7871;t th&#250;c m&#7897;t n&#259;m 2025 v&#7899;i nhi&#7873;u bi&#7871;n &#273;&#7897;ng to l&#7899;n trong l&#224;ng c&#244;ng ngh&#7879;, c&#249;ng v&#7899;i s&#7921; ra &#273;&#7901;i c&#7911;a c&#225;c m&#244; h&#236;nh LLM v&#224; AI Agent &#273;&#227; t&#7841;o ra nh&#7919;ng thay &#273;&#7893;i mang t&#237;ch c&#225;ch m&#7841;ng v&#7873; c&#225;ch th&#7913;c l&#224;m vi&#7879;c, c&#249;ng s&#7921; gia t&#259;ng &#225;p l&#7921;c li&#7879;u AI c&#243; thay th&#7871; d&#7847;n c&#244;ng vi&#7879;c c&#7911;a con ng&#432;&#7901;i v&#224; c&#7843; k&#7923; v&#7885;ng c&#7911;a m&#7885;i ng&#432;&#7901;i v&#7873; n&#259;ng l&#7921;c AI mang l&#7841;i qua c&#225;c <a href="https://newsletter.grokking.org/p/270-su-dich-chuyen-ve-ky-vong">s&#7889; tr&#432;&#7899;c</a>. B&#224;i vi&#7871;t k&#7923; n&#224;y mong mu&#7889;n &#273;em l&#7841;i g&#243;c nh&#236;n v&#7873; c&#225;c xu h&#432;&#7899;ng c&#244;ng ngh&#7879; m&#7899;i trong n&#259;m 2026 c&#249;ng nh&#7919;ng c&#417; h&#7897;i v&#224; th&#225;ch th&#7913;c trong k&#7927; nguy&#234;n AI s&#7855;p &#273;&#7871;n.</p><h1><strong><a href="https://newsletter.grokking.org/i/183429879/tech-trends">Tech Trends 2026</a></strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YRBH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YRBH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 424w, https://substackcdn.com/image/fetch/$s_!YRBH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 848w, https://substackcdn.com/image/fetch/$s_!YRBH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 1272w, https://substackcdn.com/image/fetch/$s_!YRBH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YRBH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png" width="1456" height="1072" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1072,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304279,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.grokking.org/i/183429879?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YRBH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 424w, https://substackcdn.com/image/fetch/$s_!YRBH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 848w, https://substackcdn.com/image/fetch/$s_!YRBH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 1272w, https://substackcdn.com/image/fetch/$s_!YRBH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F346b9d01-90e7-47e5-a99b-0285853d163f_2175x1602.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://www.deloitte.com/content/dam/insights/articles/2025/us188546_tt-26/pdf/DI_Tech-trends-2026.pdf">B&#225;o c&#225;o t&#7915; Deloitte</a> &#273;&#7873; c&#7853;p v&#7873; xu h&#432;&#7899;ng ph&#225;t tri&#7875;n c&#7911;a c&#244;ng ngh&#7879; trong n&#259;m 2026 &#273;&#432;&#7907;c d&#7921; &#273;o&#225;n s&#7869; t&#7853;p trung v&#224;o c&#225;c xu h&#432;&#7899;ng ch&#237;nh:</p><ul><li><p><strong>S&#7921; tr&#7895;i d&#7853;y c&#7911;a Robot c&#243; kh&#7843; n&#259;ng th&#237;ch &#7913;ng:</strong> AI &#273;ang &#273;&#432;&#7907;c t&#237;ch h&#7907;p s&#226;u v&#224;o c&#225;c thi&#7871;t b&#7883; v&#7853;t l&#253;, bi&#7871;n nh&#7919;ng robot truy&#7873;n th&#7889;ng th&#224;nh nh&#7919;ng c&#7895; m&#225;y c&#243; kh&#7843; n&#259;ng th&#237;ch &#7913;ng cao. Ch&#250;ng kh&#244;ng ch&#7881; v&#7853;n h&#224;nh m&#224; c&#242;n t&#7921; h&#7885;c h&#7887;i t&#7915; m&#244;i tr&#432;&#7901;ng ph&#7913;c t&#7841;p &#273;&#7875; &#273;&#7841;t &#273;&#432;&#7907;c &#273;&#7897; an to&#224;n v&#224; ch&#237;nh x&#225;c v&#432;&#7907;t tr&#7897;i.</p></li><li><p><strong>T&#225;i thi&#7871;t k&#7871; quy tr&#236;nh cho Agentic AI</strong>: Vi&#7879;c v&#7897;i v&#224;ng &#273;&#432;a Agentic AI v&#224;o c&#225;c quy tr&#236;nh c&#361; v&#7889;n thi&#7871;t k&#7871; cho con ng&#432;&#7901;i &#273;&#227; d&#7851;n &#273;&#7871;n nhi&#7873;u th&#7845;t b&#7841;i &#273;&#225;ng ti&#7871;c. C&#225;c t&#7893; ch&#7913;c h&#224;ng &#273;&#7847;u nh&#7853;n ra r&#7857;ng gi&#225; tr&#7883; th&#7921;c kh&#244;ng n&#7857;m &#7903; vi&#7879;c &#8220;l&#7855;p gh&#233;p&#8221; AI v&#224;o m&#244; h&#236;nh c&#361;, m&#224; &#7903; vi&#7879;c t&#225;i thi&#7871;t k&#7871; to&#224;n b&#7897; ho&#7841;t &#273;&#7897;ng, x&#226;y d&#7921;ng ki&#7871;n tr&#250;c t&#432;&#417;ng th&#237;ch v&#224; thi&#7871;t l&#7853;p khung qu&#7843;n tr&#7883; m&#7899;i cho &#8220;nh&#226;n s&#7921; s&#7889;&#8221;.</p></li><li><p><strong>Chi&#7871;n l&#432;&#7907;c h&#7841; t&#7847;ng &#273;i&#7879;n to&#225;n linh ho&#7841;t</strong>: Khi AI &#273;i v&#224;o th&#7921;c ti&#7877;n, h&#7841; t&#7847;ng c&#361; b&#7897;c l&#7897; nhi&#7873;u b&#7845;t c&#7853;p. V&#7845;n &#273;&#7873; kh&#244;ng ch&#7881; l&#224; chi ph&#237;, m&#224; c&#242;n l&#224; quy&#7873;n s&#7903; h&#7919;u d&#7919; li&#7879;u, &#273;&#7897; tr&#7877; v&#224; b&#7843;o m&#7853;t tr&#237; tu&#7879; nh&#226;n t&#7841;o. Thay v&#236; ch&#7885;n l&#7921;a c&#7921;c &#273;oan gi&#7919;a Cloud hay On-premise, doanh nghi&#7879;p c&#7847;n m&#7897;t h&#7879; sinh th&#225;i &#273;i&#7879;n to&#225;n linh ho&#7841;t, t&#7889;i &#432;u h&#243;a cho t&#7915;ng lo&#7841;i t&#7843;i c&#244;ng vi&#7879;c c&#7909; th&#7875;.</p></li><li><p><strong>T&#225;i c&#7845;u tr&#250;c b&#7897; m&#225;y nh&#226;n s&#7921; c&#244;ng ngh&#7879;</strong>: AI &#273;ang &#273;&#7883;nh h&#236;nh l&#7841;i c&#225;ch t&#7893; ch&#7913;c v&#224; l&#227;nh &#273;&#7841;o c&#225;c &#273;&#7897;i ng&#361; k&#7929; thu&#7853;t. M&#244; h&#236;nh t&#432;&#417;ng lai s&#7869; tinh g&#7885;n v&#224; n&#259;ng &#273;&#7897;ng h&#417;n khi AI hi&#7879;n di&#7879;n trong m&#7885;i l&#7899;p v&#7853;n h&#224;nh - t&#7915; ki&#7871;n tr&#250;c &#273;&#7871;n tri&#7875;n khai. Th&#225;ch th&#7913;c l&#7899;n nh&#7845;t c&#7911;a c&#225;c nh&#224; l&#227;nh &#273;&#7841;o l&#224; t&#7889;c &#273;&#7897; khai th&#225;c ti&#7873;m n&#259;ng AI &#273;&#7875; bi&#7871;n t&#7893; ch&#7913;c th&#224;nh m&#7897;t c&#7895; m&#225;y t&#7921; h&#7885;c h&#7887;i li&#234;n t&#7909;c.</p></li><li><p><strong>Ngh&#7883;ch l&#253; b&#7843;o m&#7853;t trong k&#7927; nguy&#234;n AI</strong>: Vi&#7879;c tri&#7875;n khai AI quy m&#244; l&#7899;n t&#7841;o ra m&#7897;t ngh&#7883;ch l&#253;: AI gi&#250;p doanh nghi&#7879;p c&#7841;nh tranh h&#417;n nh&#432;ng c&#361;ng m&#7903; ra nh&#7919;ng l&#7895; h&#7893;ng m&#7899;i. C&#225;c t&#7893; ch&#7913;c ph&#7843;i &#273;&#7889;i m&#7863;t v&#7899;i r&#7911;i ro t&#7915; <a href="https://www.ibm.com/think/topics/shadow-ai">Shadow AI</a> (AI t&#7921; ph&#225;t kh&#244;ng ki&#7875;m so&#225;t), c&#225;c cu&#7897;c t&#7845;n c&#244;ng m&#7841;ng do AI d&#7851;n d&#7855;t v&#224; nh&#7919;ng r&#7911;i ro n&#7897;i t&#7841;i t&#7915; ch&#237;nh h&#7879; th&#7889;ng thu&#7853;t to&#225;n.</p></li></ul><h1><strong><a href="https://techcrunch.com/2026/01/01/openai-bets-big-on-audio-as-silicon-valley-declares-war-on-screens/">OpenAI bets big on audio as Silicon Valley declares war on screens</a></strong></h1><p>N&#259;m 2026, <strong>Audio AI &#273;ang &#273;&#432;&#7907;c k&#7923; v&#7885;ng s&#7869; b&#249;ng n&#7893; nh&#7901; xu h&#432;&#7899;ng l&#7899;n mang t&#234;n &#8220;War on Screens&#8221; </strong>&#7903; Silicon Valley. C&#225;c c&#244;ng ty c&#244;ng ngh&#7879; l&#7899;n tin r&#7857;ng t&#432;&#417;ng lai t&#432;&#417;ng t&#225;c v&#7899;i AI s&#7869; ch&#7911; y&#7871;u qua gi&#7885;ng n&#243;i, gi&#7843;m ph&#7909; thu&#7897;c v&#224;o m&#224;n h&#236;nh &#273;&#7875; tr&#225;nh v&#7845;n &#273;&#7873; nghi&#7879;n thi&#7871;t b&#7883;, m&#7887;i m&#7855;t v&#224; t&#259;ng t&#237;nh ti&#7879;n l&#7907;i (v&#237; d&#7909;: khi l&#225;i xe, n&#7845;u &#259;n hay &#273;i b&#7897;). </p><p>Xu h&#432;&#7899;ng Audio AI trong n&#259;m 2026 kh&#244;ng ch&#7881; l&#224; &#8220;n&#226;ng c&#7845;p gi&#7885;ng n&#243;i c&#7911;a ChatGPT&#8221; m&#224; l&#224;<strong> b&#432;&#7899;c ngo&#7863;t chuy&#7875;n giao di&#7879;n t&#7915; visual sang audio, m&#7903; ra k&#7927; nguy&#234;n m&#7899;i khi AI s&#7869; &#273;&#243;ng vai tr&#242; m&#7897;t &#8220;ng&#432;&#7901;i b&#7841;n &#273;&#7891;ng h&#224;nh&#8221; th&#7921;c th&#7909;</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S-Q7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S-Q7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 424w, https://substackcdn.com/image/fetch/$s_!S-Q7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 848w, https://substackcdn.com/image/fetch/$s_!S-Q7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 1272w, https://substackcdn.com/image/fetch/$s_!S-Q7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S-Q7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp" width="1247" height="702" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:702,&quot;width&quot;:1247,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.grokking.org/i/183429879?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S-Q7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 424w, https://substackcdn.com/image/fetch/$s_!S-Q7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 848w, https://substackcdn.com/image/fetch/$s_!S-Q7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 1272w, https://substackcdn.com/image/fetch/$s_!S-Q7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a12f4bd-66a6-4414-a766-9b0c4e62a1ab_1247x702.webp 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#272;&#7897;ng th&#225;i n&#224;y ph&#7843;n &#225;nh h&#432;&#7899;ng &#273;i c&#7911;a to&#224;n b&#7897; ng&#224;nh c&#244;ng ngh&#7879; - h&#432;&#7899;ng t&#7899;i m&#7897;t t&#432;&#417;ng lai n&#417;i m&#224;n h&#236;nh tr&#7903; th&#224;nh &#8220;background noise&#8221; v&#224; &#226;m thanh chi&#7871;m v&#7883; tr&#237; trung t&#226;m. S&#7921; b&#249;ng n&#7893; c&#7911;a c&#225;c thi&#7871;t b&#7883; ph&#7909; ki&#7879;n c&#244;ng ngh&#7879; t&#237;ch h&#7907;p AI nh&#432; k&#237;nh th&#244;ng minh, v&#242;ng tay th&#244;ng minh ho&#7863;c nh&#7851;n th&#244;ng minh nh&#432; m&#7897;t minh ch&#7913;ng cho s&#7921; &#273;&#7883;nh h&#236;nh m&#7897;t cu&#7897;c d&#7883;ch chuy&#7875;n l&#7899;n trong ph&#432;&#417;ng th&#7913;c giao ti&#7871;p v&#224; t&#432;&#417;ng t&#225;c v&#7899;i AI v&#224; c&#7843; xu h&#432;&#7899;ng ph&#225;t tri&#7875;n c&#225;c &#7913;ng d&#7909;ng t&#432;&#417;ng t&#225;c v&#7899;i ng&#432;&#7901;i d&#249;ng trong t&#432;&#417;ng lai.</p><h1><strong><a href="https://www.infoq.com/news/2025/12/ai-in-sdlc-webster/?topicPageSponsorship=5ffb3f81-b96b-449f-a1cd-a12e1e054154">AI Works, PRs Don&#8217;t: How AI is Breaking the SDLC and What to Do about it</a></strong></h1><p>Vi&#7879;c t&#237;ch h&#7907;p tr&#237; tu&#7879; nh&#226;n t&#7841;o v&#224;o quy tr&#236;nh ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m &#273;ang t&#7841;o ra m&#7897;t l&#224;n s&#243;ng b&#249;ng n&#7893; v&#7873; m&#227; ngu&#7891;n, nh&#432;ng c&#361;ng &#273;i k&#232;m v&#7899;i nh&#7919;ng th&#225;ch th&#7913;c m&#7899;i v&#7873; qu&#7843;n tr&#7883;. Theo m&#7897;t nghi&#234;n c&#7913;u c&#7911;a Hao He t&#7915; &#272;&#7841;i h&#7885;c Carnegie Mellon tr&#234;n h&#417;n 2.000 d&#7921; &#225;n m&#227; ngu&#7891;n m&#7903;, c&#225;c c&#244;ng c&#7909; nh&#432; Cursor AI c&#243; th&#7875; th&#250;c &#273;&#7849;y t&#7889;c &#273;&#7897; ph&#225;t tri&#7875;n v&#224; ch&#7845;t l&#432;&#7907;ng m&#227; l&#234;n g&#7845;p ba &#273;&#7871;n n&#259;m l&#7847;n trong giai &#273;o&#7841;n &#273;&#7847;u. Tuy nhi&#234;n, s&#7921; t&#259;ng tr&#432;&#7903;ng n&#224;y ch&#7881; mang t&#237;nh t&#7841;m th&#7901;i v&#236; sau kho&#7843;ng m&#7897;t th&#225;ng, c&#225;c d&#7921; &#225;n b&#7855;t &#273;&#7847;u &#273;&#7889;i m&#7863;t v&#7899;i t&#236;nh tr&#7841;ng t&#237;ch l&#361;y n&#7907; k&#7929; thu&#7853;t k&#233;o d&#224;i do l&#432;&#7907;ng m&#227; &#273;&#432;&#7907;c t&#7841;o ra qu&#225; nhanh.</p><p>Tr&#432;&#7899;c th&#7921;c tr&#7841;ng &#273;&#243;, Michael Webster t&#7915; CircleCI cho r&#7857;ng c&#7847;n ph&#7843;i c&#7843;i ti&#7871;n quy tr&#236;nh T&#237;ch h&#7907;p v&#224; Ph&#226;n ph&#7889;i li&#234;n t&#7909;c &#273;&#7875; th&#237;ch &#7913;ng v&#7899;i t&#7889;c &#273;&#7897; c&#7911;a AI. &#212;ng &#273;&#7873; xu&#7845;t &#225;p d&#7909;ng k&#7929; thu&#7853;t Ph&#226;n t&#237;ch T&#225;c &#273;&#7897;ng Ki&#7875;m th&#7917; &#273;&#7875; ch&#7881; t&#7853;p trung ki&#7875;m tra nh&#7919;ng ph&#7847;n m&#227; ngu&#7891;n th&#7921;c s&#7921; b&#7883; &#7843;nh h&#432;&#7903;ng thay v&#236; ch&#7841;y l&#7841;i to&#224;n b&#7897; h&#7879; th&#7889;ng, t&#7915; &#273;&#243; t&#7889;i &#432;u h&#243;a chi ph&#237; v&#224; hi&#7879;u su&#7845;t. &#272;&#7891;ng th&#7901;i, s&#7913;c m&#7841;nh t&#237;nh to&#225;n v&#432;&#7907;t tr&#7897;i c&#7911;a AI cho ph&#233;p ch&#250;ng ta ki&#7875;m tra v&#244; s&#7889; gi&#7843; thuy&#7871;t thay v&#236; b&#7883; gi&#7899;i h&#7841;n b&#7903;i n&#259;ng l&#7921;c con ng&#432;&#7901;i nh&#432; ph&#432;&#417;ng ph&#225;p truy&#7873;n th&#7889;ng. &#272;i&#7873;u n&#224;y &#273;&#242;i h&#7887;i c&#225;c k&#7929; s&#432; ph&#7843;i &#273;&#417;n gi&#7843;n h&#243;a v&#224; &#273;i&#7873;u ch&#7881;nh l&#7841;i h&#7879; th&#7889;ng &#273;o l&#432;&#7901;ng c&#361;ng nh&#432; c&#225;c v&#242;ng l&#7863;p ph&#7843;n h&#7891;i. Cu&#7889;i c&#249;ng, th&#244;ng &#273;i&#7879;p c&#7889;t l&#245;i l&#224; c&#7897;ng &#273;&#7891;ng ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m c&#7847;n thay &#273;&#7893;i t&#432; duy v&#224; xem x&#233;t l&#7841;i c&#225;c ph&#432;&#417;ng ph&#225;p c&#361; &#273;&#7875; x&#226;y d&#7921;ng nh&#7919;ng quy tr&#236;nh m&#7899;i ph&#249; h&#7907;p h&#417;n v&#7899;i quy m&#244; v&#224; t&#7889;c &#273;&#7897; ch&#432;a t&#7915;ng c&#243; c&#7911;a k&#7927; nguy&#234;n AI.</p><h1><strong><a href="https://hbr.org/sponsored/2025/12/6-cybersecurity-predictions-for-the-ai-economy-in-2026">6 Cybersecurity Predictions for the AI Economy in 2026</a></strong></h1><p>S&#7921; xu&#7845;t hi&#7879;n c&#7911;a Agenetic AI, c&#249;ng s&#7921; thay &#273;&#7893;i c&#7843; v&#7873; h&#236;nh th&#7913;c l&#224;m vi&#7879;c t&#7915; t&#7841;i v&#259;n ph&#242;ng sang l&#224;m vi&#7879;c t&#7915; xa (remote), &#273;&#227; t&#7841;o n&#234;n nh&#7919;ng b&#432;&#7899;c ti&#7871;n to l&#7899;n v&#7873; n&#259;ng su&#7845;t c&#244;ng vi&#7879;c. Nh&#7919;ng thay &#273;&#7893;i v&#7873; n&#259;ng su&#7845;t n&#224;y c&#361;ng m&#7903; ra nhi&#7873;u r&#7911;i ro m&#7899;i k&#232;m theo.</p><p>M&#7897;t s&#7921; ki&#7879;n thu h&#250;t s&#7921; quan t&#226;m c&#7911;a gi&#7899;i b&#7843;o m&#7853;t v&#224;o th&#225;ng 9 n&#259;m 2025, m&#7897;t <a href="https://www.anthropic.com/news/disrupting-AI-espionage">chi&#7871;n d&#7883;ch do th&#225;m do AI t&#7921; v&#7853;n h&#224;nh</a> &#273;&#7847;u ti&#234;n tr&#234;n th&#7871; gi&#7899;i &#273;&#227; &#273;&#432;&#7907;c ph&#225;t hi&#7879;n b&#7903;i C&#244;ng ty Anthropic, nh&#224; ph&#225;t tri&#7875;n chatbot AI Claude. Anthropic &#273;&#227; ng&#259;n ch&#7863;n k&#7883;p th&#7901;i chi&#7871;n d&#7883;ch n&#224;y, &#273;&#7891;ng th&#7901;i h&#7885; c&#361;ng &#273;&#227; g&#7917;i &#273;i th&#244;ng tin c&#7843;nh b&#225;o cho kho&#7843;ng 30 n&#7841;n nh&#226;n ti&#7873;m t&#224;ng bao g&#7891;m c&#225;c c&#244;ng ty c&#244;ng ngh&#7879;, t&#7893; ch&#7913;c t&#224;i ch&#237;nh v&#224; c&#417; quan ch&#237;nh ph&#7911;.</p><p>B&#432;&#7899;c sang n&#259;m 2026, d&#432;&#7899;i &#273;&#226;y l&#224;<strong> 06 xu h&#432;&#7899;ng d&#7921; b&#225;o v&#7873; l&#297;nh v&#7921;c b&#7843;o m&#7853;t </strong>trong k&#7927; nguy&#234;n kinh t&#7871; AI l&#234;n ng&#244;i.</p><p><em><strong>D&#7921; b&#225;o 01: </strong></em><strong>M&#7897;t k&#7927; nguy&#234;n v&#7899;i nh&#7919;ng h&#236;nh th&#7913;c l&#7915;a &#273;&#7843;o m&#7899;i &#7913;ng d&#7909;ng c&#225;c c&#244;ng ngh&#7879; AI h&#7895; tr&#7907; gi&#7843; m&#7841;o danh t&#237;nh</strong>. Tr&#237; tu&#7879; nh&#226;n t&#7841;o t&#7841;o sinh (GenAI) &#273;ang &#273;&#7841;t &#273;&#7871;n tr&#7841;ng th&#225;i sao ch&#233;p th&#7901;i gian th&#7921;c ho&#224;n h&#7843;o, khi&#7871;n cho c&#225;c n&#7897;i dung deepfake ng&#224;y c&#224;ng kh&#243; ph&#226;n bi&#7879;t v&#7899;i n&#7897;i dung th&#7921;c t&#7871;. B&#234;n c&#7841;nh &#273;&#243;, s&#7921; tr&#7895;i d&#7853;y c&#7911;a c&#225;c Agents t&#7921; &#273;&#7897;ng &#273;&#227; t&#7841;o ra l&#7895; h&#7893;ng quan tr&#7885;ng: M&#7897;t danh t&#237;nh gi&#7843; m&#7841;o gi&#7901; &#273;&#226;y c&#243; th&#7875; k&#237;ch ho&#7841;t m&#7897;t lo&#7841;t c&#225;c h&#224;nh &#273;&#7897;ng t&#7921; &#273;&#7897;ng.</p><div id="youtube2-IjDD64t9Plg" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;IjDD64t9Plg&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/IjDD64t9Plg?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p><em><strong>D&#7921; b&#225;o 02:</strong></em> <strong>C&#225;c AI Agents c&#243; r&#7911;i ro b&#7883; l&#7841;m d&#7909;ng tr&#7903; th&#224;nh c&#225;c gi&#225;n &#273;i&#7879;p ng&#7847;m trong t&#7893; ch&#7913;c</strong>. M&#7863;c d&#249; AI Agent t&#7921; &#273;&#7897;ng l&#224; m&#7897;t nh&#226;n vi&#234;n k&#7929; thu&#7853;t s&#7889; kh&#244;ng bi&#7871;t m&#7879;t m&#7887;i, nh&#432;ng n&#243; c&#361;ng l&#224; m&#7897;t m&#7889;i &#273;e d&#7885;a n&#7897;i b&#7897; nguy hi&#7875;m. M&#7897;t Agents lu&#244;n ho&#7841;t &#273;&#7897;ng, kh&#244;ng bao gi&#7901; ng&#7915;ng ngh&#7881;; v&#224; n&#7871;u nh&#432; &#273;&#432;&#7907;c c&#7845;u h&#236;nh kh&#244;ng &#273;&#250;ng c&#225;ch, n&#243; c&#243; th&#7875; truy c&#7853;p v&#224;o c&#225;c t&#224;i nguy&#234;n d&#7919; li&#7879;u quan tr&#7885;ng c&#7911;a to&#224;n b&#7897; h&#7879; th&#7889;ng &#8211; quy&#7873;n truy c&#7853;p &#273;&#7863;c quy&#7873;n v&#224;o c&#225;c API, d&#7919; li&#7879;u v&#224; h&#7879; th&#7889;ng quan tr&#7885;ng &#8211; n&#417;i n&#243; &#273;&#432;&#7907;c tin t&#432;&#7903;ng m&#7897;t c&#225;ch ng&#7847;m &#273;&#7883;nh. N&#7871;u c&#225;c doanh nghi&#7879;p kh&#244;ng ch&#250; tr&#7885;ng &#273;&#7871;n vi&#7879;c b&#7843;o m&#7853;t c&#225;c Agents n&#224;y nh&#432; c&#225;ch h&#7885; tri&#7875;n khai ch&#250;ng, h&#7885; &#273;ang t&#7841;o ra m&#7897;t l&#7895; h&#7893;ng b&#7843;o m&#7853;t ti&#7873;m t&#224;ng kh&#243; ki&#7875;m so&#225;t.</p><p><em><strong>D&#7921; b&#225;o 03: </strong></em>K&#7927; nguy&#234;n t&#7899;i s&#7869; c&#243; nhi&#7873;u th&#225;ch th&#7913;c v&#7873; &#273;&#7897; tin c&#7853;y c&#7911;a d&#7919; li&#7879;u, c&#7911;a t&#224;i nguy&#234;n  &#273;&#432;&#7907;c d&#249;ng &#273;&#7875; training cho c&#225;c Model AI. <strong>M&#7897;t h&#236;nh th&#7913;c t&#7845;n c&#244;ng m&#7899;i &#273;&#243; ch&#237;nh l&#224; &#8220;&#273;&#7847;u &#273;&#7897;c&#8221; d&#7919; li&#7879;u: l&#224;m sai l&#7879;ch c&#243; ch&#7911; &#273;&#237;ch m&#7897;t l&#432;&#7907;ng d&#7919; li&#7879;u kh&#7893;ng l&#7891; &#273;&#432;&#7907;c s&#7917; d&#7909;ng &#273;&#7875; hu&#7845;n luy&#7879;n c&#225;c m&#244; h&#236;nh AI</strong> c&#7889;t l&#245;i ch&#7841;y tr&#234;n c&#417; s&#7903; h&#7841; t&#7847;ng &#273;i&#7879;n to&#225;n &#273;&#225;m m&#226;y ph&#7913;c t&#7841;p, v&#7889;n l&#224; n&#7873;n t&#7843;ng c&#7911;a trung t&#226;m d&#7919; li&#7879;u AI hi&#7879;n &#273;&#7841;i. Ch&#250;ng ta &#273;&#417;n gi&#7843;n l&#224; kh&#244;ng th&#7875; b&#7843;o m&#7853;t nh&#7919;ng g&#236; ch&#250;ng ta kh&#244;ng th&#7875; nh&#236;n th&#7845;y. Trong khi &#273;&#243;, c&#225;c nh&#243;m x&#7917; l&#253; d&#7919; li&#7879;u hi&#7875;u r&#245; d&#7919; li&#7879;u c&#243; th&#7875; kh&#244;ng &#273;&#432;&#7907;c &#273;&#224;o t&#7841;o &#273;&#7875; ph&#225;t hi&#7879;n ra nh&#7919;ng thao t&#225;c thao t&#250;ng &#7849;n &#273;&#7897;c h&#7841;i.</p><p><em><strong>D&#7921; b&#225;o 04:</strong></em> Cu&#7897;c &#273;ua gi&#224;nh l&#7907;i th&#7871; nh&#7901; AI s&#7869; v&#7845;p ph&#7843;i c&#225;c r&#224;o c&#7843;n ph&#225;p l&#253;. <strong>V&#7845;n &#273;&#7873; ai ch&#7883;u tr&#225;ch nhi&#7879;m khi tr&#237; tu&#7879; nh&#226;n t&#7841;o (AI) g&#7863;p s&#7921; c&#7889; s&#7869; chuy&#7875;n t&#7915; cu&#7897;c tranh lu&#7853;n tri&#7871;t h&#7885;c sang v&#7845;n &#273;&#7873; ti&#7873;n l&#7879; ph&#225;p l&#253;,</strong> t&#7841;o ra m&#7897;t ti&#234;u chu&#7849;n m&#7899;i v&#7873; tr&#225;ch nhi&#7879;m ph&#225;p l&#253; tr&#7921;c ti&#7871;p c&#7911;a c&#225;c nh&#224; &#273;i&#7873;u h&#224;nh trong vi&#7879;c qu&#7843;n l&#253; doanh nghi&#7879;p tr&#237; tu&#7879; nh&#226;n t&#7841;o.</p><p><em><strong>D&#7921; b&#225;o 05:</strong></em> N&#259;m 2026 s&#7869; l&#224; giai &#273;o&#7841;n ch&#226;m ng&#242;i cho <strong>cu&#7897;c chuy&#7875;n &#273;&#7893;i m&#7853;t m&#227; l&#7899;n nh&#7845;t v&#224; ph&#7913;c t&#7841;p nh&#7845;t trong l&#7883;ch s&#7917;</strong>, khi c&#225;c qu&#7889;c gia &#273;ang th&#250;c &#273;&#7849;y chuy&#7875;n &#273;&#7893;i c&#417; s&#7903; h&#7841; t&#7847;ng quan tr&#7885;ng v&#224; chu&#7895;i cung &#7913;ng, b&#7855;t &#273;&#7847;u h&#224;nh tr&#236;nh h&#432;&#7899;ng t&#7899;i m&#7853;t m&#227; h&#7853;u l&#432;&#7907;ng t&#7917; (PQC).</p><p><em><strong>D&#7921; b&#225;o 06:</strong></em> <strong>Tr&#236;nh duy&#7879;t &#273;ang ph&#225;t tri&#7875;n t&#7915; m&#7897;t c&#244;ng c&#7909; t&#7893;ng h&#7907;p th&#244;ng tin th&#224;nh m&#7897;t n&#7873;n t&#7843;ng Agentic c&#243; kh&#7843; n&#259;ng th&#7921;c thi c&#225;c t&#225;c v&#7909; ph&#7913;c t&#7841;p thay cho ng&#432;&#7901;i d&#249;ng</strong>. Khi c&#225;c t&#7893; ch&#7913;c ch&#7841;y &#273;ua &#273;&#7875; tri&#7875;n khai c&#225;c tr&#236;nh duy&#7879;t n&#224;y nh&#7857;m th&#250;c &#273;&#7849;y n&#259;ng su&#7845;t th&#236; h&#7885; c&#361;ng ph&#7843;i &#273;&#7889;i m&#7863;t v&#7899;i m&#7897;t t&#236;nh th&#7871; kh&#243; x&#7917;: l&#224;m th&#7871; n&#224;o &#273;&#7875; t&#7841;o &#273;i&#7873;u ki&#7879;n cho s&#7921; chuy&#7875;n &#273;&#7893;i n&#224;y trong khi v&#7851;n &#273;&#7843;m b&#7843;o an ninh cho to&#224;n b&#7897; doanh nghi&#7879;p.</p><h2><strong>G&#243;c nh&#236;n t&#225;c gi&#7843;</strong></h2><p>Trong k&#7927; nguy&#234;n AI &#273;ang len l&#7887;i v&#224;o m&#7885;i ng&#243;c ng&#225;ch c&#7911;a &#273;&#7901;i s&#7889;ng, ch&#250;ng ta bu&#7897;c ph&#7843;i th&#237;ch nghi v&#7899;i nh&#7919;ng d&#7883;ch chuy&#7875;n v&#7873; k&#7923; v&#7885;ng c&#249;ng n&#7895;i quan ng&#7841;i v&#7873; vi&#7879;c c&#225;c m&#244; h&#236;nh tr&#237; tu&#7879; nh&#226;n t&#7841;o s&#7869; thay th&#7871; con ng&#432;&#7901;i. Khi m&#225;y m&#243;c &#273;ang d&#7847;n t&#7921; t&#7889;i &#432;u kh&#7843; n&#259;ng c&#7911;a ch&#237;nh m&#236;nh, &#273;&#226;y c&#361;ng l&#224; l&#250;c ch&#250;ng ta c&#7847;n t&#7853;p trung l&#224;m t&#7889;t nh&#7919;ng gi&#225; tr&#7883; c&#7889;t l&#245;i c&#7911;a con ng&#432;&#7901;i.</p><p>K&#7927; nguy&#234;n AI kh&#244;ng ch&#7881; mang &#273;&#7871;n th&#225;ch th&#7913;c m&#224; c&#242;n m&#7903; ra nh&#7919;ng chuy&#7875;n bi&#7871;n t&#237;ch c&#7921;c, t&#7841;o ra nh&#7919;ng ph&#432;&#417;ng th&#7913;c m&#7899;i gi&#250;p s&#7921; ph&#7889;i h&#7907;p gi&#7919;a ng&#432;&#7901;i v&#224; m&#225;y tr&#7903; n&#234;n hi&#7879;u qu&#7843; h&#417;n. H&#417;n l&#250;c n&#224;o h&#7871;t, vi&#7879;c n&#7855;m v&#7919;ng ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng, ph&#225;t tri&#7875;n t&#432; duy h&#7879; th&#7889;ng v&#224; n&#259;ng l&#7921;c ph&#7843;n bi&#7879;n &#273;&#227; tr&#7903; n&#234;n t&#7889;i quan tr&#7885;ng. B&#234;n c&#7841;nh &#273;&#243;, m&#7897;t ch&#250;t ho&#224;i nghi l&#224;nh m&#7841;nh c&#249;ng s&#7921; ki&#234;n nh&#7851;n trong vi&#7879;c ki&#7875;m ch&#7913;ng th&#244;ng tin d&#7921;a tr&#234;n c&#225;c nguy&#234;n t&#7855;c c&#7889;t l&#245;i v&#224; kinh nghi&#7879;m th&#7921;c t&#7871; s&#7869; l&#224; ch&#236;a kh&#243;a &#273;&#7875; ta t&#7853;n d&#7909;ng n&#259;ng l&#7921;c c&#7911;a AI m&#7897;t c&#225;ch ch&#237;nh x&#225;c nh&#7845;t.</p><p>Sau t&#7845;t c&#7843;, AI c&#243; th&#7875; v&#432;&#7907;t tr&#7897;i trong nh&#7919;ng nhi&#7879;m v&#7909; nh&#7845;t &#273;&#7883;nh, nh&#432;ng c&#243; m&#7897;t &#273;i&#7873;u n&#243; kh&#244;ng bao gi&#7901; c&#243; th&#7875; thay th&#7871; &#273;&#432;&#7907;c: <strong>&#272;&#243; ch&#237;nh l&#224; nh&#7919;ng gi&#225; tr&#7883; ri&#234;ng bi&#7879;t t&#7841;o n&#234;n b&#7843;n s&#7855;c con ng&#432;&#7901;i b&#7841;n.</strong></p>]]></content:encoded></item><item><title><![CDATA[#270 - Sự dịch chuyển về kỳ vọng]]></title><description><![CDATA[Th&#237;ch nghi v&#7899;i AI kh&#244;ng d&#7915;ng l&#7841;i &#7903; vi&#7879;c l&#224;m ch&#7911; c&#244;ng c&#7909;, m&#224; l&#224; n&#226;ng c&#7845;p ti&#234;u chu&#7849;n &#273;&#7847;u ra c&#7911;a ch&#237;nh m&#236;nh. B&#224;i vi&#7871;t ph&#226;n t&#237;ch nh&#7919;ng 'k&#7923; v&#7885;ng' &#273;ang d&#7883;ch chuy&#7875;n &#226;m th&#7847;m t&#225;c &#273;&#7897;ng l&#234;n m&#7885;i v&#224;i tr&#242; kh&#225;c nhau]]></description><link>https://newsletter.grokking.org/p/270-su-dich-chuyen-ve-ky-vong</link><guid isPermaLink="false">https://newsletter.grokking.org/p/270-su-dich-chuyen-ve-ky-vong</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 28 Dec 2025 06:00:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ch&#224;o c&#225;c b&#7841;n, ti&#7871;p n&#7889;i <a href="https://newsletter.grokking.org/p/oc-bao-gium-ban-1312-dev-co-so-mat">s&#7889; tr&#432;&#7899;c</a> Grokking ch&#250;ng m&#236;nh &#273;&#227; &#273;&#7873; c&#7853;p &#273;&#7871;n c&#225;c g&#243;c nh&#236;n v&#224; v&#7873; vi&#7879;c AI &#7843;nh h&#432;&#7903;ng chung &#273;&#7871;n c&#225;c l&#297;nh v&#7921;c, c&#361;ng nh&#432; gi&#7899;i c&#244;ng ngh&#7879; n&#243;i ri&#234;ng, n&#417;i &#225;p d&#7909;ng AI ch&#7911; &#273;&#7897;ng v&#224; t&#237;ch c&#7921;c nh&#7845;t nh&#432;ng c&#361;ng l&#224; n&#417;i &#273;ang ch&#7883;u &#7843;nh h&#432;&#7903;ng &#273;&#7847;u ti&#234;n v&#224; m&#7841;nh m&#7869; nh&#7845;t.</p><p>Trong s&#7889; n&#224;y, ch&#250;ng m&#236;nh mong mu&#7889;n &#273;&#432;a th&#234;m m&#7897;t g&#243;c nh&#236;n xoay quanh vi&#7879;c &#7843;nh h&#432;&#7903;ng c&#7909; th&#7875; v&#224;o y&#7871;u t&#7889; n&#224;o v&#224; &#7843;nh h&#432;&#7903;ng ra sao &#273;&#7889;i v&#7899;i nh&#7919;ng vai tr&#242; kh&#225;c nhau trong gi&#7899;i c&#244;ng ngh&#7879;. Khi AI tr&#7903; th&#224;nh c&#244;ng c&#7909; &#273;&#7875; khu&#7871;ch &#273;&#7841;i kh&#7843; n&#259;ng c&#7911;a k&#297; s&#432;, &#273;&#225;nh &#273;&#7893;i l&#224; &#273;i&#7873;u kh&#244;ng tr&#225;nh kh&#7887;i.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fVLq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fVLq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fVLq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fVLq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fVLq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fVLq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg" width="510" height="278" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:278,&quot;width&quot;:510,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;In Spider-man (2002), Uncle Ben says the mythical phrase \&quot;With great power  comes great responsibility\&quot;, since that moment, that phrase has been  interpreted as \&quot;If you have powers you must have a&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="In Spider-man (2002), Uncle Ben says the mythical phrase &quot;With great power  comes great responsibility&quot;, since that moment, that phrase has been  interpreted as &quot;If you have powers you must have a" title="In Spider-man (2002), Uncle Ben says the mythical phrase &quot;With great power  comes great responsibility&quot;, since that moment, that phrase has been  interpreted as &quot;If you have powers you must have a" srcset="https://substackcdn.com/image/fetch/$s_!fVLq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fVLq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fVLq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fVLq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae6383b4-8918-478f-8a7c-dc879f5aed0c_510x278.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Infamous quote from Spider-man movies</figcaption></figure></div><p>C&#7909; th&#7875; h&#417;n, trong m&#7897;t b&#225;o c&#225;o t&#7893;ng h&#7907;p b&#7903;i AppKnox g&#7847;n &#273;&#226;y - <a href="https://www.appknox.com/resources/reports/ai-and-developer-burnout-report-2025">AI and Developer Burnout Report 2025</a>, b&#225;o c&#225;o &#273;&#7873; c&#7853;p t&#7899;i vi&#7879;c AI t&#225;i &#273;&#7883;nh h&#236;nh (reshape) t&#237;nh ch&#7845;t c&#244;ng vi&#7879;c, v&#224; c&#361;ng nh&#432; c&#7843; &#273;&#7883;nh ngh&#297;a v&#7873; qu&#225; t&#7843;i (burnout) k&#232;m theo s&#7921; xu&#7845;t hi&#7879;n m&#7897;t d&#7841;ng c&#259;ng th&#7859;ng m&#7899;i - cognitive and emotional burnout.</p><p>T&#7915; vi&#7879;c &#273;&#432;&#7907;c s&#7903; h&#7919;u c&#244;ng c&#7909; m&#7899;i, t&#7889;t h&#417;n, nhanh h&#417;n, &#273;&#7871;n vi&#7879;c xu&#7845;t hi&#7879;n d&#7841;ng c&#259;ng th&#7859;ng m&#7899;i, li&#7879;u anh em k&#297; s&#432; &#273;&#227; c&#243; d&#7883;p nh&#236;n l&#7841;i y&#7871;u t&#7889; g&#236; &#273;ang thay &#273;&#7893;i th&#7847;m l&#7863;ng nh&#432; con s&#243;ng ng&#7847;m? Thay v&#236; m&#7843;i c&#7889; g&#7855;ng theo &#273;u&#7893;i &#273;&#7875; l&#224;m ch&#7911;/&#273;i&#7873;u khi&#7875;n c&#244;ng c&#7909; m&#7899;i n&#224;y?</p><p>Theo g&#243;c nh&#236;n c&#7911;a m&#236;nh, <strong>s&#7921; k&#7923; v&#7885;ng</strong> - s&#7921; k&#7923; v&#7885;ng gi&#7919;a stakeholders v&#7899;i k&#297; s&#432;, gi&#7919;a s&#7871;p v&#224; team, c&#361;ng nh&#432; gi&#7919;a c&#225;c th&#224;nh vi&#234;n trong team - l&#224; t&#225;c nh&#226;n ch&#237;nh, g&#7889;c r&#7877; &#273;ang t&#225;i &#273;&#7883;nh h&#236;nh ng&#224;nh c&#244;ng nghi&#7879;p ph&#7847;n m&#7873;m, &#273;&#7875; d&#226;n c&#244;ng ngh&#7879; th&#237;ch nghi v&#224; ph&#225;t tri&#7875;n nh&#432; &#273;&#7873; c&#7853;p &#7903; c&#225;c s&#7889; tr&#432;&#7899;c. D&#432;&#7899;i &#273;&#226;y l&#224; m&#7897;t s&#7889; b&#224;i vi&#7871;t v&#224; b&#225;o c&#225;o c&#243; li&#234;n quan, &#273;&#7875; l&#224;m r&#245; k&#7923; v&#7885;ng &#273;&#227; v&#224; &#273;ang d&#7883;ch chuy&#7875;n ra sao.</p><div><hr></div><h2><a href="https://www.hackerrank.com/blog/the-productivity-paradox-of-ai/">The Productivity Paradox of AI</a></h2><p><strong>1. Ngh&#7883;ch l&#253; Jevons: C&#224;ng hi&#7879;u qu&#7843;, c&#224;ng... t&#7889;n k&#233;m</strong></p><blockquote><p><em>A look at how Jevons&#8217; 19th-century paradox is playing out in modern code &#8212; where every leap in efficiency creates more developers, not fewer.</em></p></blockquote><p>B&#224;i vi&#7871;t v&#7853;n d&#7909;ng &#8220;Ngh&#7883;ch l&#253; Jevons&#8221; &#273;&#7875; ph&#7843;n bi&#7879;n n&#7895;i lo AI s&#7869; thay th&#7871; l&#7853;p tr&#236;nh vi&#234;n. L&#7883;ch s&#7917; cho th&#7845;y khi c&#244;ng ngh&#7879; gi&#250;p t&#259;ng n&#259;ng su&#7845;t v&#224; gi&#7843;m chi ph&#237; (nh&#432; &#273;&#7897;ng c&#417; h&#417;i n&#432;&#7899;c hay Cloud computing), nhu c&#7847;u ti&#234;u th&#7909; l&#7841;i b&#249;ng n&#7893;. T&#432;&#417;ng t&#7921;, khi AI gi&#250;p vi&#7871;t code nhanh v&#224; r&#7867; h&#417;n, th&#7871; gi&#7899;i s&#7869; kh&#244;ng c&#7855;t gi&#7843;m nh&#226;n s&#7921;, m&#224; s&#7869; x&#226;y d&#7921;ng s&#7889; l&#432;&#7907;ng ph&#7847;n m&#7873;m kh&#7893;ng l&#7891; h&#417;n bao gi&#7901; h&#7871;t.</p><p><strong>2. S&#7921; ti&#7871;n h&#243;a: T&#7915; "Vi&#7871;t code" sang "&#272;i&#7873;u ph&#7889;i"</strong></p><blockquote><p>Atlassian&#8217;s internal data shows engineers spend only 16% of their week actually coding. The rest goes to coordination, debugging, testing, deployment, and documentation &#8212; areas now ripe for AI augmentation.</p></blockquote><p>AI &#273;ang &#8220;d&#226;n ch&#7911; h&#243;a&#8221; vi&#7879;c l&#7853;p tr&#236;nh: n&#243; h&#7841; th&#7845;p r&#224;o c&#7843;n gia nh&#7853;p nh&#432;ng l&#7841;i n&#226;ng cao ti&#234;u chu&#7849;n v&#7873; s&#7921; xu&#7845;t s&#7855;c. S&#7869; kh&#244;ng m&#7845;t nhi&#7873;u th&#7901;i gian &#273;&#7875; m&#7897;t ng&#432;&#7901;i m&#7899;i gia nh&#7853;p th&#7883; tr&#432;&#7901;ng nh&#7901; &#273;&#432;&#7907;c h&#7895; tr&#7907; lo&#7841;i b&#7887; c&#225;c &#8220;overhead&#8221; trong ng&#224;nh (v&#237; d&#7909; ki&#7871;n th&#7913;c ng&#244;n ng&#7919; l&#7853;p tr&#236;nh, v&#7853;n h&#224;nh h&#7879; th&#7889;ng, deploy &#7913;ng d&#7909;ng,&#8230;) nh&#432;ng s&#7869; c&#7847;n l&#224;m quen v&#7899;i t&#432; duy &#8220;nh&#7841;c tr&#432;&#7903;ng&#8221; s&#7899;m h&#417;n bao gi&#7901; h&#7871;t.</p><p><strong>3. T&#432;&#417;ng lai c&#7911;a tuy&#7875;n d&#7909;ng</strong></p><blockquote><p>According to LinkedIn&#8217;s 2025 Emerging Jobs Report, demand for AI-fluent software engineers has surged nearly 60% year-over-year, and Glassdoor data shows compensation premiums of 15&#8211;25% for developers proficient in AI frameworks and orchestration tools. The emergence of this new breed of engineer reflects a profound shift in leverage: the ability to command AI as an extension of one&#8217;s own reasoning.</p></blockquote><p>C&#225;c b&#224;i ph&#7887;ng v&#7845;n thu&#7853;t to&#225;n truy&#7873;n th&#7889;ng s&#7869; d&#7847;n l&#7895;i th&#7901;i. Thay v&#224;o &#273;&#243;, th&#7883; tr&#432;&#7901;ng s&#7869; t&#236;m ki&#7871;m nh&#7919;ng k&#7929; s&#432; bi&#7871;t c&#225;ch t&#7853;n d&#7909;ng AI l&#224;m &#273;&#242;n b&#7849;y &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n th&#7921;c t&#7871; hi&#7879;u qu&#7843;. V&#7873; v&#7845;n &#273;&#7873; n&#224;y ch&#250;ng m&#236;nh c&#361;ng &#273;&#227; c&#243; &#273;&#7873; c&#7853;p chi ti&#7871;t h&#417;n <a href="https://newsletter.grokking.org/p/grokking-is-back">t&#7841;i &#273;&#226;y</a>.</p><p>T&#243;m l&#7841;i, v&#7851;n l&#224; &#273;i&#7873;u anh em k&#297; s&#432; &#8220;&#273;&#7897;ng vi&#234;n nhau&#8221;, AI &#273;ang m&#7903; ra m&#7897;t k&#7927; nguy&#234;n m&#7899;i n&#417;i t&#432; duy h&#7879; th&#7889;ng v&#224; kh&#7843; n&#259;ng th&#237;ch &#7913;ng quan tr&#7885;ng h&#417;n k&#7929; n&#259;ng g&#245; code &#273;&#417;n thu&#7847;n.</p><div><hr></div><h2><a href="https://www.infoq.com/articles/architects-ai-era/">Where Architects Sit in the Era of AI</a></h2><p>B&#224;i vi&#7871;t &#273;&#432;a ra g&#243;c nh&#236;n c&#7909; th&#7875; h&#417;n cho m&#7897;t v&#7883; tr&#237;, m&#224; &#273;&#7889;i v&#7899;i c&#225; nh&#226;n m&#236;nh, t&#432;&#7903;ng ch&#7915;ng l&#224; ng&#432;&#7901;i &#237;t b&#7883; &#7843;nh h&#432;&#7903;ng, th&#7853;m ch&#237; c&#242;n gi&#225; tr&#7883; c&#242;n &#273;&#432;&#7907;c t&#259;ng l&#234;n cao - Architects.</p><blockquote><p>What does it mean to be an architect when architectural thinking can be automated?</p></blockquote><p>M&#7897;t c&#226;u h&#7887;i n&#234;u ra trong b&#224;i &#273;&#227; khi&#7871;n m&#236;nh &#8220;goosebumped&#8221;, &#273;i&#7873;u ch&#7881; 5-6 th&#225;ng tr&#432;&#7899;c c&#242;n l&#224; kho&#7843;ng gap gi&#7919;a senior engineers/architects v&#7899;i AI gi&#7901; &#273;&#227; &#273;&#432;&#7907;c b&#7855;t k&#7883;p v&#7899;i c&#225;c m&#244; h&#236;nh thinking m&#7841;nh m&#7869; t&#7915; c&#225;c &#244;ng l&#7899;n c&#244;ng ngh&#7879;.</p><p><strong>1. S&#7921; chuy&#7875;n d&#7883;ch: t&#225;i &#273;&#7883;nh ngh&#297;a nh&#432; l&#224; m&#7897;t &#8220;Meta-designer&#8221;</strong></p><p>Thay v&#236; tr&#7921;c ti&#7871;p thi&#7871;t k&#7871; m&#7885;i th&#7913; nh&#432; tr&#432;&#7899;c &#273;&#226;y, th&#244;ng qua c&#225;c cu&#7897;c h&#7885;p v&#224; bu&#7893;i brainstorm c&#249;ng c&#7897;ng s&#7921;, Architect s&#7869; chuy&#7875;n sang vai tr&#242; &#273;i&#7873;u ph&#7889;i c&#225;c AI agents th&#244;ng qua m&#244; h&#236;nh &#8220;3 V&#242;ng l&#7863;p&#8221;:</p><ul><li><p><strong>In the Loop:</strong> C&#7897;ng t&#225;c song song. AI &#273;&#432;a ra c&#225;c ph&#432;&#417;ng &#225;n, con ng&#432;&#7901;i ra quy&#7871;t &#273;&#7883;nh cu&#7889;i c&#249;ng.</p></li><li><p><strong>On the Loop:</strong> AI t&#7921; v&#7853;n h&#224;nh trong gi&#7899;i h&#7841;n cho ph&#233;p. Architect &#273;&#243;ng vai tr&#242; gi&#225;m s&#225;t v&#224; can thi&#7879;p khi c&#7847;n thi&#7871;t.</p></li><li><p><strong>Out of the Loop:</strong> AI t&#7921; ch&#7911; ho&#224;n to&#224;n. Architect t&#7853;p trung thi&#7871;t k&#7871; c&#225;c c&#417; ch&#7871; qu&#7843;n tr&#7883; v&#224; an to&#224;n.</p></li></ul><p><strong>2. Nh&#7919;ng c&#225;i b&#7851;y m&#7899;i: S&#7921; thui ch&#7897;t v&#224; &#7842;o gi&#225;c</strong></p><p>Quy&#7873;n n&#259;ng c&#7911;a AI &#273;i k&#232;m v&#7899;i nh&#7919;ng r&#7911;i ro ch&#237; m&#7841;ng cho ngh&#7873; nghi&#7879;p:</p><ul><li><p><strong>Skill Atrophy:</strong> Qu&#225; ph&#7909; thu&#7897;c v&#224;o AI s&#7869; l&#224;m m&#242;n &#8220;tr&#7921;c gi&#225;c&#8221; v&#224; &#8220;ki&#7871;n th&#7913;c ng&#7847;m&#8221; &#8211; nh&#7919;ng kinh nghi&#7879;m x&#432;&#417;ng m&#225;u kh&#244;ng c&#243; trong s&#225;ch v&#7903;, &#273;&#432;&#7907;c t&#237;ch lu&#7929; b&#417;i qu&#225; tr&#236;nh l&#224;m vi&#7879;c l&#226;u n&#259;m t&#7915; nh&#7919;ng Architects d&#224;y d&#7863;n.</p></li><li><p><strong>S&#7921; t&#7921; tin gi&#7843; t&#7841;o:</strong> AI c&#243; th&#7875; &#273;&#432;a ra thi&#7871;t k&#7871; sai l&#7847;m v&#7899;i gi&#7885;ng &#273;i&#7879;u v&#244; c&#249;ng ch&#7855;c ch&#7855;n. V&#259;n h&#243;a l&#224;m vi&#7879;c c&#7847;n chuy&#7875;n t&#7915; &#8220;tin t&#432;&#7903;ng&#8221; sang &#8220;th&#7849;m &#273;&#7883;nh&#8221; (verification).</p></li></ul><p>D&#249; b&#224;i vi&#7871;t &#273;&#7873; c&#7853;p ph&#7847;n l&#7899;n &#273;&#7871;n level Architects, d&#432;&#7899;i g&#243;c nh&#236;n l&#224; m&#7897;t k&#297; s&#432; Senior-level, m&#236;nh th&#7845;y c&#243; m&#7897;t s&#7921; li&#234;n h&#7879; m&#7853;t thi&#7871;t &#273;&#7871;n c&#244;ng vi&#7879;c h&#7857;ng ng&#224;y, n&#417;i &#273;&#227; c&#243; nhi&#7873;u l&#250;c tr&#7921;c gi&#225;c ph&#225;t huy hi&#7879;u qu&#7843; &#7903; nh&#7919;ng th&#7901;i &#273;i&#7875;m m&#236;nh nghi ng&#7901; &#253; ki&#7871;n c&#7911;a AI d&#249; ch&#432;a &#273;&#7911; kinh nghi&#7879;m &#273;&#7875; ch&#7881; m&#7863;t &#273;&#7863;t t&#234;n s&#7921; nghi ng&#7901; &#273;&#243;.</p><div><hr></div><h2><a href="https://services.google.com/fh/files/misc/2025_state_of_ai_assisted_software_development.pdf">DORA Report 2024/2025 (Google Cloud)</a></h2><p>B&#234;n c&#7841;nh c&#225;c th&#7889;ng k&#234; v&#7873; s&#7921; &#225;p d&#7909;ng (adoption) v&#224; hi&#7879;u su&#7845;t l&#224;m vi&#7879;c (productivity), b&#225;o c&#225;o &#273;&#7873; c&#7853;p t&#7899;i 3 ki&#7875;u &#8220;k&#7923; v&#7885;ng&#8221; m&#7899;i:</p><p><strong>1. AI c&#7843;i thi&#7879;n t&#7889;c &#273;&#7897; (throughput) nh&#432;ng l&#224;m t&#259;ng s&#7921; b&#7845;t &#7893;n (instability)</strong></p><p>So v&#7899;i b&#225;o c&#225;o n&#259;m tr&#432;&#7899;c, AI &#273;&#227; b&#7855;t &#273;&#7847;u gi&#250;p t&#259;ng t&#7889;c &#273;&#7897; ph&#226;n ph&#7889;i ph&#7847;n m&#7873;m, nh&#432;ng n&#243; c&#361;ng &#273;i k&#232;m v&#7899;i vi&#7879;c gia t&#259;ng t&#7927; l&#7879; l&#7895;i ho&#7863;c s&#7921; c&#7889; khi tri&#7875;n khai, cho th&#7845;y c&#225;c h&#7879; th&#7889;ng c&#417; b&#7843;n ch&#432;a k&#7883;p th&#237;ch nghi.</p><blockquote><p>AI adoption now improves software delivery throughput, a key shift from last year. However, it still increases delivery instability. This suggests that while teams are adapting for speed, their underlying systems have not yet evolved to safely manage AI-accelerated development.</p></blockquote><p><strong>2. C&#7847;n &#273;&#7847;u t&#432; v&#224;o h&#7879; th&#7889;ng t&#7893; ch&#7913;c &#273;&#7875; g&#7863;t h&#225;i th&#224;nh qu&#7843; t&#7915; AI</strong></p><p>L&#7907;i nhu&#7853;n t&#7915; &#273;&#7847;u t&#432; AI kh&#244;ng &#273;&#7871;n t&#7915; b&#7843;n th&#226;n c&#244;ng c&#7909;, m&#224; t&#7915; vi&#7879;c c&#7843;i thi&#7879;n h&#7879; th&#7889;ng n&#7873;n t&#7843;ng, quy tr&#236;nh v&#224; s&#7921; li&#234;n k&#7871;t c&#7911;a &#273;&#7897;i ng&#361;.</p><blockquote><p>&#8220;The greatest returns on AI investment come not from the tools themselves, but from a strategic focus on the underlying organizational system: the quality of the internal platform, the clarity of workflows, and the alignment of teams.&#8221;</p></blockquote><p><strong>3. AI ch&#432;a gi&#250;p gi&#7843;m &#225;p l&#7921;c (Burnout) hay s&#7921; ma s&#225;t (Friction) trong c&#244;ng vi&#7879;c</strong></p><p>M&#7863;c d&#249; AI t&#259;ng n&#259;ng su&#7845;t c&#225; nh&#226;n, nh&#432;ng n&#243; kh&#244;ng (ho&#7863;c ch&#432;a) gi&#250;p gi&#7843;m b&#7899;t s&#7921; ki&#7879;t s&#7913;c hay nh&#7919;ng r&#224;o c&#7843;n trong quy tr&#236;nh l&#224;m vi&#7879;c n&#7871;u v&#259;n h&#243;a v&#224; h&#7879; th&#7889;ng kh&#244;ng thay &#273;&#7893;i.</p><blockquote><p>&#8220;Despite all the benefits, friction remains unaffected, burnout stays flat, and delivery instability rises&#8212;unless the surrounding system and culture changes.&#8221;</p></blockquote><div><hr></div><h2>G&#243;c nh&#236;n t&#225;c gi&#7843;</h2><p>T&#7915; nh&#7919;ng b&#224;i vi&#7871;t v&#224; th&#7889;ng k&#234;, ta c&#243; th&#7875; th&#7845;y r&#7857;ng vi&#7879;c th&#237;ch nghi trong th&#7901;i gian t&#7899;i kh&#244;ng ch&#7881; v&#7873; th&#237;ch nghi v&#7899;i c&#244;ng ngh&#7879;, c&#244;ng c&#7909; m&#7899;i m&#224; c&#242;n &#273;&#7875; th&#237;ch nghi v&#7899;i k&#7923; v&#7885;ng m&#7899;i. Th&#237;ch nghi l&#224; hi&#7875;u r&#7857;ng &#8220;lu&#7853;t ch&#417;i&#8221; &#273;&#227; thay &#273;&#7893;i. S&#7871;p c&#7911;a b&#7841;n, kh&#225;ch h&#224;ng c&#7911;a b&#7841;n, v&#224; c&#7843; team c&#7911;a b&#7841;n &#273;ang &#226;m th&#7847;m thay &#273;&#7893;i ti&#234;u chu&#7849;n &#273;&#225;nh gi&#225; v&#7873; m&#7897;t vi&#7879;c l&#224;m &#8220;xong&#8221; (definition of done).</p><p>K&#7871;t h&#7907;p v&#7899;i quan s&#225;t c&#225; nh&#226;n v&#224; v&#7889;n kinh nghi&#7879;m &#237;t &#7887;i &#273;ang c&#243;, m&#236;nh c&#243; th&#7875; g&#243;i g&#7885;n m&#7897;t s&#7889; &#8220;lu&#7853;t ch&#417;i&#8221; &#273;&#227; v&#224; &#273;ang d&#7883;ch chuy&#7875;n &#273;&#7889;i v&#7899;i:</p><h4>1. Interns/Junior</h4><p>Tr&#432;&#7899;c &#273;&#226;y, Junior &#273;&#432;&#7907;c ph&#233;p sai s&#243;t c&#250; ph&#225;p, &#273;&#432;&#7907;c ph&#233;p ch&#7853;m &#273;&#7875; nghi&#234;n c&#7913;u, &#273;&#7875; l&#224;m quen c&#244;ng c&#7909;. &#272;&#243; l&#224; nh&#7919;ng gi&#225; tr&#7883; b&#7873; n&#7893;i (explicit) m&#224; t&#7893; ch&#7913;c t&#7915;ng ch&#7845;p nh&#7853;n tr&#7843; ph&#237; &#273;&#7875; b&#7841;n h&#7885;c.</p><p>Nh&#432;ng nay, AI &#273;&#227; l&#224;m nh&#7919;ng vi&#7879;c &#273;&#243; t&#7889;t h&#417;n, nhanh h&#417;n v&#224; r&#7867; h&#417;n b&#7845;t k&#7923; Junior n&#224;o. AI c&#243; th&#7875; gi&#250;p tri&#7875;n khai m&#7897;t t&#237;nh n&#259;ng hay th&#7853;m ch&#7881; c&#7843; m&#7897;t framework trong 30 ph&#250;t, nh&#432;ng li&#7879;u nh&#7919;ng d&#242;ng code &#273;&#243; c&#243; ch&#7913;a l&#7895; h&#7893;ng logic n&#224;o kh&#244;ng? C&#243; d&#7877; maintain hay kh&#244;ng? Hay ch&#250;ng &#273;ang tr&#7903; th&#224;nh tech debt t&#7915; khi v&#7915;a &#273;&#432;&#7907;c commit?</p><p>K&#7923; v&#7885;ng c&#7911;a Seniors d&#224;nh cho b&#7841;n &#273;&#227; thay &#273;&#7893;i:</p><ul><li><p><strong>Tr&#432;&#7899;c &#273;&#226;y:</strong> &#8220;Em implement t&#237;nh n&#259;ng n&#224;y ch&#432;a? C&#243; kh&#243; kh&#259;n n&#224;o trong l&#250;c tri&#7875;n khai kh&#244;ng?&#8221;</p></li><li><p><strong>B&#226;y gi&#7901;:</strong> &#8220;Em c&#243; hi&#7875;u t&#7841;i sao AI l&#7841;i ch&#7885;n th&#432; vi&#7879;n n&#224;y thay v&#236; th&#432; vi&#7879;n kia kh&#244;ng? &#8220;Em c&#243; tin n&#243; kh&#244;ng hallucinate h&#224;m n&#224;y kh&#244;ng?&#8221; Hay: &#8220;M&#236;nh c&#242;n c&#225;ch n&#224;o kh&#225;c t&#7889;t h&#417;n kh&#244;ng?&#8221;</p></li></ul><p>M&#7845;u ch&#7889;t n&#7857;m &#7903; ch&#7895;, Juniors th&#432;&#7901;ng v&#7851;n s&#7869; kh&#244;ng &#273;&#432;&#7907;c k&#7923; v&#7885;ng l&#224;m nhanh h&#417;n, tr&#432;&#7899;c &#273;&#226;y c&#243; 4 ti&#7871;ng bao g&#7891;m 3 ti&#7871;ng &#273;&#7875; code v&#224; 1 ti&#7871;ng test - b&#226;y gi&#7901; v&#7851;n 4 ti&#7871;ng: 30 ph&#250;t code, 30 ph&#250;t test th&#236; d&#249;ng 3 ti&#7871;ng c&#242;n l&#7841;i nh&#432; th&#7871; n&#224;o, ng&#7891;i ch&#417;i hay t&#7921; ph&#7843;n bi&#7879;n?</p><h4>2. Senior Engineers</h4><p>Khi kho&#7843;ng c&#225;ch v&#7873; t&#7889;c &#273;&#7897; vi&#7871;t code gi&#7919;a Senior v&#224; Junior &#273;ang thu h&#7865;p l&#7841;i, t&#7841;i sao c&#244;ng ty v&#7851;n c&#7847;n tr&#7843; l&#432;&#417;ng cao cho Senior?</p><p>Senior kh&#244;ng c&#242;n &#273;&#432;&#7907;c tr&#7843; l&#432;&#417;ng &#273;&#7875; th&#7875; hi&#7879;n k&#7929; n&#259;ng gi&#7843;i thu&#7853;t hay tri&#7875;n khai h&#7879; th&#7889;ng ph&#7913;c t&#7841;p. H&#7885; &#273;&#432;&#7907;c k&#7923; v&#7885;ng &#273;&#7875; n&#243;i <strong>"KH&#212;NG"</strong>.</p><p>N&#243;i kh&#244;ng khi &#273;&#432;&#7907;c y&#234;u c&#7847;u m&#7897;t lo&#7841;t thay &#273;&#7893;i trong th&#7901;i gian ng&#7855;n, v&#236; h&#7885; c&#7847;n bi&#7871;t h&#7885; c&#243; th&#7875; v&#224; kh&#244;ng th&#7875; ki&#7875;m so&#225;t &#273;&#432;&#7907;c nh&#7919;ng chuy&#7879;n g&#236; s&#7869; x&#7843;y ra.</p><p>N&#243;i kh&#244;ng khi c&#243; m&#7897;t thay &#273;&#7893;i c&#7847;n &#273;&#432;&#7907;c x&#225;c nh&#7853;n y&#7871;u t&#7889; l&#7883;ch s&#7917; hay ng&#7919; c&#7843;nh, v&#236; khi AI &#273;&#227; c&#243; s&#7913;c m&#7841;nh thu th&#7853;p nh&#7919;ng th&#244;ng tin b&#7873; n&#7893;i (explicit), th&#236; ng&#7919; c&#7843;nh l&#7883;ch s&#7917; (implicit) l&#224; nh&#7919;ng th&#7913; s&#7869; &#273;&#432;&#7907;c Seniors n&#7855;m r&#245; nh&#7845;t.</p><p>Hay, nh&#432; &#7903; b&#224;i vi&#7871;t v&#7873; Architects &#7903; tr&#234;n, n&#243;i kh&#244;ng khi tr&#7921;c gi&#225;c c&#7911;a ng&#432;&#7901;i l&#224;m trong ng&#224;nh &#8220;m&#225;ch b&#7843;o&#8221;.</p><p><em>L&#432;u &#253;: vi&#7879;c n&#243;i kh&#244;ng m&#7897;t c&#225;ch kh&#233;o l&#233;o kh&#244;ng &#273;&#417;n gi&#7843;n, hi v&#7885;ng ch&#250;ng m&#236;nh s&#7869; c&#243; d&#7883;p &#273;&#7873; c&#7853;p t&#7899;i &#7903; c&#225;c s&#7889; sau.</em></p><h4>3. Managers</h4><p>C&#243; l&#7869; &#273;&#226;y l&#224; ph&#7847;n kh&#243; nh&#7845;t, khi nh&#7919;ng g&#236; m&#236;nh quan s&#225;t hay nghe v&#224; &#273;&#7885;c &#273;&#432;&#7907;c c&#361;ng v&#7851;n ch&#7881; l&#224; b&#7873; n&#7893;i, v&#224; c&#361;ng ch&#432;a &#273;&#7911; kinh nghi&#7879;m &#273;&#7875; &#273;&#225;nh gi&#225; to&#224;n b&#7897; b&#7913;c tranh hay ph&#7847;n t&#7843;ng b&#259;ng ch&#236;m. Do &#273;&#243;, c&#243; th&#7875; s&#7869; nghe kh&#225; chung chung v&#224; m&#236;nh ch&#7845;p nh&#7853;n &#273;i&#7873;u &#273;&#243;.</p><p>&#272;&#226;y l&#224; v&#7883; tr&#237; ch&#7883;u &#225;p l&#7921;c g&#7885;ng k&#236;m, t&#7915; s&#7921; thay &#273;&#7893;i ch&#243;ng m&#7863;t v&#7873; c&#244;ng ngh&#7879;, t&#7889;c &#273;&#7897; deliver c&#7911;a &#273;&#7897;i ng&#361;, &#273;&#7871;n k&#7923; v&#7885;ng v&#7873; ch&#7845;t l&#432;&#7907;ng v&#224; th&#7901;i gian &#273;&#7871;n t&#7915; b&#234;n ngo&#224;i. S&#7921; chuy&#7875;n d&#7883;ch v&#7873; k&#7923; v&#7885;ng k&#233;o theo m&#7889;i quan t&#226;m kh&#244;ng c&#242;n nhi&#7873;u v&#7873; ti&#7871;n &#273;&#7897;, m&#224; v&#7873; r&#7911;i ro &#273;&#7889;i v&#7899;i c&#244;ng ngh&#7879; v&#224; con ng&#432;&#7901;i.</p><p>K&#7923; v&#7885;ng n&#7873;n (baseline) v&#7873; ch&#7845;t l&#432;&#7907;ng s&#7843;n ph&#7849;m c&#7911;a team &#273;&#432;&#7907;c n&#226;ng l&#234;n, code &#273;&#432;&#7907;c commit v&#224; deploy li&#234;n t&#7909;c, AI c&#243; th&#7875; &#273;&#432;a ra quy&#7871;t &#273;&#7883;nh v&#7873; m&#7863;t ki&#7871;n tr&#250;c, v&#7853;y l&#224;m sao &#273;&#7875; thi&#7871;t l&#7853;p c&#225;c "Guardrails" (h&#224;ng r&#224;o b&#7843;o v&#7879;) &#273;&#7875; &#273;&#7843;m b&#7843;o team kh&#244;ng bi&#7871;n th&#224;nh nh&#7919;ng c&#244;ng nh&#226;n &#273;i d&#7885;n r&#225;c cho AI v&#7873; sau?</p><p>Khi k&#7923; v&#7885;ng v&#7873; work rate (l&#432;&#7907;ng c&#244;ng vi&#7879;c c&#7911;a team trong &#273;&#417;n v&#7883; th&#7901;i gian) c&#361;ng &#273;&#432;&#7907;c n&#226;ng l&#234;n nh&#7901; c&#243; AI h&#7895; tr&#7907;, l&#250;c n&#224;y li&#7879;u &#8220;&#273;&#7843;m b&#7843;o k&#7883;p ti&#7871;n &#273;&#7897;&#8221; c&#243; c&#242;n t&#7853;p trung ch&#237;nh c&#7911;a Manager? Hay gi&#7901; &#273;&#226;y k&#7923; v&#7885;ng l&#234;n ng&#432;&#7901;i qu&#7843;n l&#253; d&#7883;ch chuy&#7875;n th&#224;nh ng&#432;&#7901;i gi&#7919; nh&#7883;p &#273;&#7897;, &#273;&#7843;m b&#7843;o c&#225;c m&#7855;t x&#237;ch v&#7873; con ng&#432;&#7901;i v&#7853;n h&#224;nh b&#7873;n b&#7881;, ch&#237;nh x&#225;c, kh&#244;ng b&#7883; ki&#7879;t qu&#7879;?</p><p>(tr&#432;&#7899;c &#273;&#226;y Grokking c&#361;ng &#273;&#227; c&#243; m&#7897;t b&#224;i vi&#7871;t v&#7873; <strong><a href="https://newsletter.grokking.org/p/261-mot-tuan-lam-viec-cua-engineering">M&#7897;t tu&#7847;n l&#224;m vi&#7879;c c&#7911;a Engineering Manager</a></strong>, m&#236;nh c&#361;ng t&#7921; h&#7887;i li&#7879;u sau nh&#7919;ng bi&#7871;n &#273;&#7897;ng t&#7915; AI, c&#226;u chuy&#7879;n &#273;&#227; kh&#225;c h&#417;n bao nhi&#234;u ph&#7847;n tr&#259;m?)</p><p><strong>K&#7871;t</strong>: c&#243; v&#7867; khi m&#225;y m&#243;c &#273;ang t&#7921; l&#224;m t&#7889;t d&#7847;n kh&#7843; n&#259;ng c&#7911;a ch&#237;nh n&#243;, ch&#250;ng ta c&#361;ng c&#7847;n l&#224;m t&#7889;t nh&#7919;ng g&#236; m&#7863;t con ng&#432;&#7901;i c&#7847;n l&#224;m? c&#244; &#273;&#7885;ng t&#7915; v&#237; d&#7909; tr&#234;n: s&#7921; ho&#224;i nghi (junior), th&#7845;u hi&#7875;u ng&#7919; c&#7843;nh (senior) v&#224; qu&#7843;n tr&#7883; r&#7911;i ro (manager).</p><p>&#8212; sudo &#8212; <em>ng&#7891;i nh&#236;n SQL h&#7857;ng ng&#224;y</em></p><div><hr></div><p>M&#7897;t b&#224;i vi&#7871;t d&#224;i cho s&#7889; #270 &#273;&#7875; k&#7871;t l&#7841;i n&#259;m 2025, &#273;&#7875; c&#243; m&#7897;t g&#243;c nh&#236;n tr&#7921;c di&#7879;n v&#7873; k&#7923; v&#7885;ng &#273;&#227; thay &#273;&#7893;i m&#224; c&#243; th&#7875; h&#7857;ng ng&#224;y m&#236;nh v&#244; t&#236;nh ch&#432;a &#273;&#7873; c&#7853;p th&#7859;ng th&#7855;ng v&#7899;i nhau. </p><p>C&#7843;m &#417;n m&#7885;i ng&#432;&#7901;i &#273;&#227; &#273;&#7885;c &#273;&#7871;n &#273;&#226;y.</p><p>Ch&#250;c m&#7885;i ng&#432;&#7901;i c&#243; m&#7897;t k&#236; ngh&#7881; gi&#225;ng sinh t&#297;nh l&#7863;ng cho m&#7897;t n&#259;m m&#7899;i s&#7861;n s&#224;ng.</p><div class="pullquote"><p>What is essential is invisible to the eye</p><p><a href="https://www.google.com/search?q=Antoine+de+Saint-Exup%C3%A9ry%27s&amp;sourceid=chrome&amp;ie=UTF-8&amp;ved=2ahUKEwilh6aCxdiRAxUQ8DQHHaZtElcQgK4QegYIAQgAEAU">Antoine de Saint-Exup&#233;ry's</a> - <em><a href="https://www.google.com/search?q=The+Little+Prince&amp;sourceid=chrome&amp;ie=UTF-8&amp;ved=2ahUKEwilh6aCxdiRAxUQ8DQHHaZtElcQgK4QegYIAQgAEAY">The Little Prince</a></em></p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Đọc báo giùm bạn 13/12: Dev có sợ mất việc vì AI?]]></title><description><![CDATA[Ch&#224;o m&#7915;ng c&#225;c b&#7841;n &#273;&#7871;n v&#7899;i chuy&#234;n m&#7909;c &#272;&#7885;c b&#225;o gi&#249;m b&#7841;n ng&#224;y 13/12 - k&#236; &#273;&#7847;u ti&#234;n.]]></description><link>https://newsletter.grokking.org/p/oc-bao-gium-ban-1312-dev-co-so-mat</link><guid isPermaLink="false">https://newsletter.grokking.org/p/oc-bao-gium-ban-1312-dev-co-so-mat</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 14 Dec 2025 14:04:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9O_-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ch&#224;o m&#7915;ng c&#225;c b&#7841;n &#273;&#7871;n v&#7899;i chuy&#234;n m&#7909;c &#272;&#7885;c b&#225;o gi&#249;m b&#7841;n ng&#224;y 13/12 - k&#236; &#273;&#7847;u ti&#234;n. &#7902; k&#236; n&#224;y, m&#236;nh xin t&#243;m t&#7855;t v&#224; l&#432;&#7907;c d&#7883;ch qua b&#224;i vi&#7871;t c&#7911;a t&#225;c gi&#7843; Jeffrey Funk - <a href="https://www.fastcompany.com/91435192/chatgpt-llm-openai-jobs-amazon">AI isn&#8217;t replacing jobs</a>. L&#432;u &#253; l&#224; s&#7889; li&#7879;u v&#224; nh&#7853;n &#273;&#7883;nh c&#7911;a b&#224;i vi&#7871;t l&#224; &#7903; th&#7883; tr&#432;&#7901;ng M&#7929;.</p><p>D&#7841;o g&#7847;n &#273;&#226;y trong n&#259;m 2025, ch&#250;ng ta &#273;&#227; ch&#7913;ng ki&#7871;n &#273;&#432;&#7907;c s&#7921; ti&#7871;n b&#7897; v&#432;&#7907;t tr&#7897;i c&#7911;a c&#225;c m&#244; h&#236;nh ng&#244;n ng&#7919; l&#7899;n (LLM) - t&#7915; l&#7853;p tr&#236;nh cho &#273;&#7871;n gi&#7843;i quy&#7871;t c&#225;c v&#7845;n &#273;&#7873; khoa h&#7885;c - kh&#244;ng c&#242;n &#273;&#417;n thu&#7847;n l&#224; nh&#7901; vi&#7871;t email hay t&#7841;o report n&#7919;a. &#272;i&#7873;u n&#224;y d&#7845;y l&#234;n s&#7921; lo ng&#7841;i c&#7911;a m&#7897;t b&#7897; ph&#7853;n l&#7853;p tr&#236;nh vi&#234;n tin r&#7857;ng s&#7899;m mu&#7897;n g&#236; AI s&#7869; thay th&#7871; &#273;&#432;&#7907;c c&#225;c developer - &#237;t nh&#7845;t l&#224; trong c&#225;c t&#225;c v&#7909; c&#7911;a junior dev. &#272;&#226;y kh&#244;ng ph&#7843;i l&#224; s&#7921; lo ng&#7841;i v&#244; c&#259;n c&#7913;, theo <a href="https://www.wsj.com/economy/jobs/white-collar-jobs-ai-324b749c?mod=tech_feat1_ai_pos5">WJS</a>, nh&#7919;ng &#273;&#7907;t sa th&#7843;i n&#224;y &#273;&#432;&#7907;c cho c&#243; &#273;&#243;ng g&#243;p c&#7911;a AI:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><blockquote><p>Amazon s&#7869; c&#7855;t 14,000 corporate jobs. United Parcel Service (UPS) - c&#244;ng ty giao h&#224;ng &#7903; M&#7929; - &#273;&#227; gi&#7843;m g&#7847;n 14,000 v&#7883; tr&#237; trong l&#7921;c l&#432;&#7907;ng qu&#7843;n l&#253; trong v&#242;ng 22 th&#225;ng v&#7915;a qua. T&#7853;p &#273;o&#224;n b&#225;n l&#7867; Target c&#361;ng s&#7869; c&#7855;t gi&#7843;m 1800 nh&#226;n s&#7921;.</p></blockquote><p>C&#225;c nh&#224; kinh t&#7871; h&#7885;c t&#7915; ng&#226;n h&#224;ng d&#7921; tr&#7919; li&#234;n bang &#7903; St. Louis c&#361;ng c&#243; <a href="https://www.stlouisfed.org/on-the-economy/2025/aug/is-ai-contributing-unemployment-evidence-occupational-variation">b&#224;i nghi&#234;n c&#7913;u</a> ch&#7881; ra s&#7921; t&#432;&#417;ng quan (ch&#432;a r&#245; r&#224;ng) gi&#7919;a m&#7913;c &#273;&#7897; ph&#417;i nhi&#7877;m t&#7915; AI trong vi&#7879;c l&#224;m v&#7899;i m&#7913;c &#273;&#7897; &#273;&#243;n nh&#7853;n AI th&#7921;c t&#7871;.</p><h4>Bi&#7875;u &#273;&#7891; t&#432;&#417;ng quan gi&#7919;a m&#7913;c &#273;&#7897; ph&#417;i nhi&#7877;m AI v&#224; m&#7913;c thay &#273;&#7893;i c&#7911;a t&#7881; l&#7879; th&#7845;t nghi&#7879;p t&#7915; 2022-2025</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9O_-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9O_-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 424w, https://substackcdn.com/image/fetch/$s_!9O_-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 848w, https://substackcdn.com/image/fetch/$s_!9O_-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 1272w, https://substackcdn.com/image/fetch/$s_!9O_-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9O_-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png" width="909" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:909,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20269,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.grokking.org/i/179102666?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9O_-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 424w, https://substackcdn.com/image/fetch/$s_!9O_-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 848w, https://substackcdn.com/image/fetch/$s_!9O_-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 1272w, https://substackcdn.com/image/fetch/$s_!9O_-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3006053-9c3f-45e3-a8a5-cd887bee51ab_909x660.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>C&#225;c nh&#243;m ng&#224;nh ngh&#7873; c&#243; m&#7913;c &#273;&#7897; ph&#417;i nhi&#7877;m AI cao nh&#432; Engineering, Computers and Math (80%) c&#243; s&#7921; thay &#273;&#7893;i cao trong t&#7881; l&#7879; th&#7845;t nghi&#7879;p.</p><h4>Bi&#7875;u &#273;&#7891; t&#432;&#417;ng quan gi&#7919;a m&#7913;c &#273;&#7897; &#273;&#243;n nh&#7853;n AI v&#224; m&#7913;c thay &#273;&#7893;i c&#7911;a t&#7881; l&#7879; th&#7845;t nghi&#7879;p t&#7915; 2022-2025</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7uv1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7uv1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 424w, https://substackcdn.com/image/fetch/$s_!7uv1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 848w, https://substackcdn.com/image/fetch/$s_!7uv1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 1272w, https://substackcdn.com/image/fetch/$s_!7uv1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7uv1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png" width="909" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:909,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20394,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.grokking.org/i/179102666?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7uv1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 424w, https://substackcdn.com/image/fetch/$s_!7uv1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 848w, https://substackcdn.com/image/fetch/$s_!7uv1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 1272w, https://substackcdn.com/image/fetch/$s_!7uv1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9c4ca8a-7897-47b4-982e-f1d5436ee251_909x660.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>M&#7897;t l&#7847;n n&#7919;a c&#225;c nh&#243;m ng&#224;nh Computers - n&#417;i m&#224; c&#243; s&#7921; &#273;&#243;n nh&#7853;n AI cao l&#7841;i c&#243; m&#7913;c t&#259;ng t&#7881; l&#7879; th&#7845;t nghi&#7879;p cao trong c&#225;c nh&#243;m ng&#224;nh ngh&#7873;.</p><p>Tuy nhi&#234;n th&#7921;c t&#7871; c&#243; v&#7867; kh&#244;ng &#273;&#225;ng s&#7907; nh&#432; ch&#250;ng ta th&#7845;y nh&#432; t&#7915; nh&#7919;ng con s&#7889; tr&#234;n, &#237;t nh&#7845;t l&#224; nh&#7919;ng ng&#432;&#7901;i b&#7841;n xung quanh m&#236;nh (names here) v&#7851;n c&#242;n &#273;i l&#224;m b&#236;nh th&#432;&#7901;ng. Li&#7879;u ch&#250;ng ta c&#243; n&#234;n ho&#224;i nghi v&#7873; nh&#7853;n &#273;&#7883;nh AI ch&#7883;u tr&#225;ch nhi&#7879;m cho nh&#7919;ng &#273;&#7907;t sa th&#7843;i g&#7847;n &#273;&#226;y?</p><p>M&#7897;t b&#224;i nghi&#234;n c&#7913;u g&#7847;n &#273;&#226;y t&#7915; <a href="https://fortune.com/2025/08/18/mit-report-95-percent-generative-ai-pilots-at-companies-failing-cfo">MIT Media Lab</a> ch&#7881; ra r&#7857;ng</p><blockquote><p>95% of generative AI pilot business project - t&#7841;m hi&#7875;u l&#224; nh&#7919;ng d&#7921; &#225;n l&#7845;y generative AI l&#224;m tr&#7885;ng &#273;i&#7875;m - &#273;ang th&#7845;t b&#7841;i (failing).</p></blockquote><p><a href="https://www.zdnet.com/article/ai-use-is-up-but-organizations-still-arent-seeing-gains-atlassian-study-finds">Kh&#7843;o s&#225;t c&#7911;a Atlassian</a> k&#7871;t lu&#7853;n r&#7857;ng</p><blockquote><p>96% doanh nghi&#7879;p ch&#432;a th&#7845;y r&#245; s&#7921; c&#7843;i thi&#7879;n m&#7841;nh m&#7869; trong t&#7893; ch&#7913;c hi&#7879;u qu&#7843; (organizational efficiency), s&#7921; &#273;&#7893;i m&#7899;i ho&#7863;c ch&#7845;t l&#432;&#7907;ng c&#244;ng vi&#7879;c. </p></blockquote><p>C&#361;ng c&#243; th&#234;m <a href="https://hbr.org/2025/09/ai-generated-workslop-is-destroying-productivity">nghi&#234;n c&#7913;u t&#7915; HBR</a> cho th&#7845;y ng&#432;&#7901;i d&#249;ng kh&#244;ng ho&#224;n to&#224;n h&#224;i l&#242;ng v&#7899;i AI.</p><blockquote><p>40% ng&#432;&#7901;i d&#249;ng doanh nghi&#7879;p tham gia kh&#7843;o s&#225;t nh&#7853;n &#273;&#432;&#7907;c &#8220;<a href="https://en.wikipedia.org/wiki/AI_slop">AI slop</a>&#8221; (n&#7897;i dung AI ch&#7845;t l&#432;&#7907;ng th&#7845;p) trong c&#244;ng vi&#7879;c t&#7915; th&#225;ng tr&#432;&#7899;c v&#224; t&#7889;n trung b&#236;nh g&#7847;n 2 ti&#7871;ng &#273;&#7875; s&#7917;a ch&#7919;a cho m&#7895;i slop. Th&#234;m v&#224;o &#273;&#243;, h&#7885;  kh&#244;ng c&#242;n tin t&#432;&#7903;ng v&#224;o c&#225;c &#273;&#7891;ng nghi&#7879;p hay tr&#7907; l&#253; AI, kh&#244;ng th&#7921;c s&#7921; s&#225;ng t&#7841;o, th&#244;ng minh v&#224; &#273;&#7911; kh&#7843; n&#259;ng.</p></blockquote><p>M&#236;nh th&#7845;y c&#225;c &#273;&#7891;ng nghi&#7879;p ho&#7863;c ng&#432;&#7901;i d&#249;ng non-tech c&#243; s&#7921; ki&#234;n nh&#7851;n kh&#244;ng cao v&#7899;i AI. &#272;i&#7873;u n&#224;y d&#7845;y l&#234;n m&#7897;t ngh&#7883;ch l&#237; l&#224; ch&#250;ng ta (developer) hay technical person c&#243; s&#7921; ki&#234;n nh&#7851;n v&#224; ti&#7871;p x&#250;c nhi&#7873;u v&#7899;i AI nh&#7845;t l&#7841;i l&#224; nh&#243;m ng&#432;&#7901;i b&#7883; AI t&#225;c &#273;&#7897;ng nhi&#7873;u nh&#7845;t.</p><p>Th&#244;ng qua c&#225;c b&#224;i nghi&#234;n c&#7913;u v&#224; kh&#7843;o s&#225;t &#7903; tr&#234;n: AI ch&#432;a th&#7921;c s&#7921; l&#224;m &#273;&#432;&#7907;c nhi&#7873;u vi&#7879;c, th&#236; AI kh&#244;ng ch&#7855;c l&#224; ch&#7883;u tr&#225;ch nhi&#7879;m ch&#237;nh cho c&#225;c cu&#7897;c sa th&#7843;i g&#7847;n &#273;&#226;y. V&#7853;y nguy&#234;n nh&#226;n c&#243; th&#7875; &#273;&#7871;n t&#7915; &#273;&#226;u?</p><p>M&#7897;t nguy&#234;n nh&#226;n r&#245; r&#224;ng &#273;&#432;&#7907;c nh&#7855;c nhi&#7873;u l&#224; s&#7921; tuy&#7875;n d&#7909;ng qu&#225; m&#7913;c trong v&#224; sau &#273;&#7841;i d&#7883;ch khi m&#224; c&#7909;c d&#7921; tr&#7919; li&#234;n bang M&#7929; &#273;&#7863;t l&#227;i su&#7845;t c&#7921;c th&#7845;p (g&#7847;n 0), t&#7915; &#273;&#243; c&#225;c c&#244;ng ty ph&#7843;i t&#225;i c&#7845;u tr&#250;c l&#7841;i l&#7921;c l&#432;&#7907;ng lao &#273;&#7897;ng. C&#243; ngh&#297;a l&#224; c&#225;c c&#244;ng ty c&#7847;n tinh gi&#7843;m l&#7841;i chi ph&#237; v&#7853;n h&#224;nh. N&#243;i t&#7899;i &#273;&#226;y th&#236; ai c&#361;ng bi&#7871;t chi ph&#237; cho h&#7841; t&#7847;ng AI l&#224; c&#7921;c k&#236; to l&#7899;n.</p><blockquote><p>Amazon &#273;&#227; t&#259;ng t&#7893;ng chi ph&#237; v&#7889;n (CapEx) t&#7915; 54 t&#7881; USD trong n&#259;m 2023 l&#234;n $84 t&#7881; USD trong 2024, d&#7921; &#273;o&#225;n l&#224; 118 t&#7881; USD trong 2025. Meta &#273;ang b&#7843;o &#273;&#7843;m 1 h&#7841;n m&#7913;c t&#237;n d&#7909;ng (line of credit) 27 t&#7881; USD &#273;&#7875; t&#224;i tr&#7907; cho c&#225;c trung t&#226;m d&#7919; li&#7879;u c&#7911;a h&#227;ng. Oracle l&#234;n k&#7871; ho&#7841;ch vay t&#7899;i 25 t&#7881; USD m&#7895;i n&#259;m trong nh&#7919;ng n&#259;m t&#7899;i &#273;&#7875; ho&#224;n th&#224;nh c&#225;c h&#7907;p &#273;&#7891;ng v&#7873; AI.</p></blockquote><p>&#272;&#226;y l&#224; &#273;i&#7873;u t&#7915;ng &#273;&#432;&#7907;c th&#7845;y, khi m&#224; c&#225;c c&#244;ng ty trong giai &#273;o&#7841;n c&#259;ng th&#7859;ng t&#224;i ch&#237;nh, bi&#7879;n ph&#225;p t&#432;&#417;ng &#273;&#7889;i &#273;&#417;n gi&#7843;n l&#224; ch&#7881; c&#7847;n sa th&#7843;i b&#7899;t ng&#432;&#7901;i lao &#273;&#7897;ng v&#224; k&#234;u g&#7885;i nh&#7919;ng ng&#432;&#7901;i kh&#225;c l&#224;m vi&#7879;c ch&#259;m ch&#7881; v&#224; n&#234;n bi&#7871;t &#417;n v&#236; v&#7851;n gi&#7919; &#273;&#432;&#7907;c c&#244;ng vi&#7879;c hi&#7879;n t&#7841;i. AI ch&#7881; &#273;&#417;n gi&#7843;n l&#224; m&#7897;t l&#7901;i bi&#7879;n minh cho vi&#7879;c c&#7855;t gi&#7843;m chi ph&#237; n&#224;y.</p><p>Ch&#250;ng ta c&#243; &#273;&#7841;i di&#7879;n t&#7915; Amazon th&#250; nh&#7853;n v&#7899;i NBC r&#7857;ng l&#224; AI <a href="https://www.nbcnews.com/business/business-news/tens-thousands-layoffs-are-blamed-ai-are-companies-actually-getting-rcna240221">kh&#244;ng ph&#7843;i l&#224; nguy&#234;n nh&#226;n ch&#237;nh c&#7911;a h&#7847;u h&#7871;t &#273;&#7907;t c&#7855;t gi&#7843;m bi&#234;n ch&#7871;</a>. CEO c&#7911;a Amazon c&#361;ng <a href="https://gizmodo.com/amazon-ceo-now-says-ai-is-not-responsible-for-recent-layoffs-2000679893">x&#225;c nh&#7853;n &#273;i&#7873;u t&#432;&#417;ng t&#7921;</a> trong cu&#7897;c g&#7885;i nh&#224; &#273;&#7847;u t&#432;.</p><p>T&#259;ng tr&#432;&#7903;ng ch&#7853;m ch&#7841;p t&#7915; doanh thu c&#7911;a m&#7843;ng generative AI trong nh&#7919;ng n&#259;m g&#7847;n &#273;&#226;y kh&#244;ng &#7911;ng h&#7897; quan &#273;i&#7875;m c&#225;c &#273;&#7907;t sa th&#7843;i g&#7847;n &#273;&#226;y l&#224; do AI. Chi ph&#237; cho h&#7841; t&#7847;ng AI c&#243; l&#7869; s&#7869; &#273;&#7841;t 1 ng&#224;n t&#7881; USD trong 2025 nh&#432;ng doanh thu l&#7841;i ch&#432;a &#273;&#7871;n 30 t&#7881;. &#7902; &#273;&#226;y c&#243; ai tin l&#224; v&#7899;i doanh thu nh&#7887; h&#417;n nhi&#7873;u so v&#7899;i chi ph&#237;, AI c&#243; &#273;ang th&#7921;c s&#7921; hi&#7879;u qu&#7843; &#273;&#7871;n m&#7913;c &#273;&#7875; c&#225;c c&#244;ng ty thay th&#7871; con ng&#432;&#7901;i?</p><p>Trong khi &#273;&#243;, sinh vi&#234;n m&#7899;i ra tr&#432;&#7901;ng &#273;ang g&#7863;p kh&#243; kh&#259;n khi t&#236;m vi&#7879;c, r&#7845;t nhi&#7873;u b&#7841;n tr&#7867; b&#7883; thuy&#7871;t ph&#7909;c b&#7903;i c&#226;u chuy&#7879;n c&#244;ng vi&#7879;c trong t&#432;&#417;ng lai s&#7869; s&#7899;m b&#7883; thay th&#7871; b&#7903;i AI v&#224; Robot. T&#7915; &#273;&#243; c&#243; ng&#432;&#7901;i khuy&#234;n r&#7857;ng sinh vi&#234;n chu&#7849;n b&#7883; ki&#7871;m vi&#7879;c l&#224;m tr&#432;&#7899;c khi t&#7889;t nghi&#7879;p l&#224; chuy&#7879;n v&#244; &#237;ch sau n&#224;y. Tr&#7899; tr&#234;u thay, nh&#7919;ng ai &#273;&#7847;u h&#224;ng v&#236; nghe ph&#7843;i nh&#7919;ng l&#7901;i khuy&#234;n nh&#432; v&#7853;y l&#224; nh&#7919;ng ng&#432;&#7901;i s&#7869; kh&#244;ng ki&#7871;m &#273;&#432;&#7907;c vi&#7879;c.</p><p>V&#7853;y ch&#250;ng ta c&#243; n&#234;n lo s&#7907; AI? Quan &#273;i&#7875;m c&#7911;a m&#236;nh, l&#224; m&#7897;t full stack developer &#273;ang ph&#225;t tri&#7875;n c&#225;c s&#7843;n ph&#7849;m &#7913;ng d&#7909;ng AI, m&#236;nh khuy&#234;n c&#225;c b&#7841;n tr&#7867; &#273;&#7915;ng s&#7907; AI c&#432;&#7899;p m&#7845;t vi&#7879;c l&#224;m m&#224; ph&#7843;i t&#236;m c&#225;ch th&#237;ch nghi, s&#7889;ng chung v&#224; t&#7853;n d&#7909;ng AI &#273;&#7875; h&#7885;c v&#224; ph&#225;t tri&#7875;n nhanh h&#417;n.</p><p>V&#7853;y l&#224;m sao &#273;&#7875; s&#7889;ng chung v&#7899;i AI? C&#226;u h&#7887;i n&#224;y m&#236;nh xin tham kh&#7843;o &#253; ki&#7871;n qu&#253; gi&#225; t&#7915; c&#225;c b&#7841;n &#273;&#7885;c.</p><p>-Boreal-</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#268 - Khi nào việc viết code là hạnh phúc nhất?]]></title><description><![CDATA[C&#226;u tr&#7843; l&#7901;i c&#7911;a t&#244;i r&#7845;t &#273;&#417;n gi&#7843;n: tr&#432;&#7899;c khi s&#7843;n ph&#7849;m c&#243; ng&#432;&#7901;i d&#249;ng]]></description><link>https://newsletter.grokking.org/p/268-khi-nao-viec-viet-code-la-hanh</link><guid isPermaLink="false">https://newsletter.grokking.org/p/268-khi-nao-viec-viet-code-la-hanh</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 16 Nov 2025 11:01:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Trong l&#250;c d&#7841;o tr&#234;n m&#7841;ng t&#236;m c&#225;c b&#224;i vi&#7871;t hay &#273;&#7875; so&#7841;n Grokking Newsletter k&#7923; n&#224;y, t&#244;i t&#236;nh c&#7901; &#273;&#7885;c &#273;&#432;&#7907;c m&#7897;t &#273;o&#7841;n kh&#225; l&#224; h&#224;i m&#224; t&#244;i mu&#7889;n chia s&#7867; c&#249;ng m&#7885;i ng&#432;&#7901;i:</p><blockquote><p>Programmers often ask: &#8220;When is coding the happiest?&#8221;</p><p>My answer is simple: <strong>before the product has users.</strong></p><p>Before customers show up, you can just write code. No angry calls, no urgent tickets, no midnight firefights. Pure joy.</p><p>But products are for users. That happy time can&#8217;t last forever.</p></blockquote><p>T&#244;i th&#7845;y n&#243; h&#224;i v&#236; n&#243; kh&#225; l&#224; ph&#249; h&#7907;p v&#7899;i nh&#7919;ng g&#236; t&#244;i &#273;&#227; tr&#7843;i nghi&#7879;m nh&#7919;ng n&#259;m qua khi l&#224;m c&#225;c d&#7921; &#225;n trong c&#244;ng ty. M&#7897;t n&#7895;i ni&#7873;m m&#224; t&#244;i ngh&#297; nh&#7919;ng b&#7841;n coder kh&#225;c c&#243; th&#7875; &#273;&#7873;u &#273;&#227; tr&#7843;i qua m&#7897;t l&#7847;n.</p><p>&#8212; CuriousTien &#8212;</p><div><hr></div><h2><a href="https://medium.com/@siddontang/ten-years-starting-again-my-journey-with-tidb-d017139331a3">Ten Years, Starting Again: My Journey with TiDB</a></h2><p>B&#224;i vi&#7871;t n&#224;y n&#243;i v&#7873; h&#224;nh tr&#236;nh c&#7911;a Liu Tang trong su&#7889;t 10 n&#259;m l&#224;m vi&#7879;c &#7903; TiDB t&#7915; ng&#224;y d&#7921; &#225;n &#273;&#432;&#7907;c s&#225;ng l&#7853;p. Nh&#236;n l&#7841;i ch&#7863;ng &#273;&#432;&#7901;ng &#273;&#227; qua, t&#225;c gi&#7843; &#273;&#227; c&#243; g&#7863;p nhi&#7873;u b&#7845;t ng&#7901; v&#224; th&#7917; th&#225;ch &#273;&#7875; m&#224; tr&#432;&#7903;ng th&#224;nh h&#417;n trong con &#273;&#432;&#7901;ng s&#7921; nghi&#7879;p c&#7911;a h&#7885; t&#7915; m&#7897;t ng&#432;&#7901;i coder.</p><p>T&#7915; tin nh&#7855;n C&#225; Th&#225;ng T&#432; c&#7911;a Max, ng&#432;&#7901;i th&#224;nh l&#7853;p TiDB, cho &#273;&#7871;n ng&#224;y h&#244;m nay khi m&#224; TiDB tr&#7903; th&#224;nh m&#7897;t c&#417; s&#7903; d&#7919; li&#7879;u ph&#226;n t&#225;n m&#227; ngu&#7891;n m&#7903; &#273;&#432;&#7907;c bi&#7871;t &#273;&#7871;n to&#224;n c&#7847;u. T&#7915; vi&#7879;c ch&#7841;y theo s&#7921; ho&#224;n h&#7843;o v&#7873; k&#7929; thu&#7853;t &#273;&#7871;n vi&#7879;c &#273;&#7863;t th&#224;nh c&#244;ng c&#7911;a kh&#225;ch h&#224;ng nh&#432; c&#7889;t l&#245;i. T&#7915; m&#7897;t &#432;&#7899;c m&#417; kh&#7903;i nghi&#7879;p &#273;&#417;n gi&#7843;n &#273;&#7871;n m&#7897;t s&#7843;n ph&#7849;m mang t&#7847;m v&#243;c to&#224;n c&#7847;u trong k&#7927; nguy&#234;n &#273;i&#7879;n to&#225;n &#273;&#225;m m&#226;y. H&#224;nh tr&#236;nh n&#224;y &#273;&#227; mang l&#7841;i cho t&#225;c gi&#7843; nhi&#7873;u h&#417;n nh&#7919;ng g&#236; m&#224; t&#225;c gi&#7843; c&#243; th&#7875; t&#432;&#7903;ng t&#432;&#7907;ng.</p><p>M&#7863;c d&#249; b&#224;i vi&#7871;t n&#224;y &#273;&#432;&#7907;c vi&#7871;t v&#224; th&#244;ng d&#7883;ch qua t&#7915; l&#7901;i t&#225;c gi&#7843; b&#7857;ng ChatGPT-5, nh&#7919;ng tr&#7843;i nghi&#7879;m v&#224; ph&#226;n t&#237;ch c&#7911;a t&#225;c gi&#7843; trong c&#225;c t&#236;nh hu&#7889;ng v&#224; quy&#7871;t &#273;&#7883;nh c&#7911;a TiDB &#273;&#7875; c&#243; &#273;&#432;&#7907;c nh&#432; ng&#224;y h&#244;m nay kh&#225; l&#224; &#273;&#225;ng suy ngh&#297;.</p><h2><a href="https://www.dremio.com/resources/guides/apache-iceberg-an-architectural-look-under-the-covers/">Apache Iceberg: An Architectural Look Under the Covers</a></h2><p>B&#224;i vi&#7871;t n&#224;y c&#7911;a Dremio n&#243;i v&#7873; Apache Iceberg v&#224; ki&#7871;n tr&#250;c c&#7911;a &#273;&#7883;nh d&#7841;ng b&#7843;ng (table format) n&#224;y nh&#432; th&#7871; n&#224;o. B&#224;i vi&#7871;t m&#7903; &#273;&#7847;u n&#243;i v&#7873; nh&#7919;ng gi&#7899;i h&#7841;n c&#7911;a &#273;&#7883;nh d&#7841;ng b&#7843;ng truy&#7873;n th&#7889;ng nh&#432; Hive table format v&#224; l&#253; do t&#7841;i sao Iceberg table format &#273;&#432;&#7907;c ra &#273;&#7901;i.</p><p>Apache Iceberg &#273;&#432;&#7907;c gi&#7899;i thi&#7879;u nh&#432; m&#7897;t &#273;&#7883;nh d&#7841;ng b&#7843;ng m&#7899;i, t&#7889;i &#432;u cho m&#244;i tr&#432;&#7901;ng data lake l&#7899;n, v&#7899;i ki&#7871;n tr&#250;c g&#7891;m 3 ph&#7847;n ch&#237;nh l&#224;: catalog, metadata (g&#7891;m manifest v&#224; snapshot) v&#224; data. Ph&#7847;n catalog l&#432;u tr&#7919; snapshot metadata hi&#7879;n t&#7841;i, c&#242;n ph&#7847;n metadata th&#236; l&#432;u tr&#7919; manifest list v&#224; manifest file &#273;&#7875; theo d&#245;i data file c&#7911;a ph&#7847;n data. Khi th&#7921;c hi&#7879;n c&#225;c thao t&#225;c nh&#432; t&#7841;o b&#7843;ng, ghi (insert), c&#7853;p nh&#7853;t (merge/upsert), ho&#7863;c truy v&#7845;n (select), Iceberg s&#7869; qu&#7843;n l&#253; c&#225;c snapshot n&#224;y m&#7897;t c&#225;ch atomic, &#273;&#7843;m b&#7843;o t&#237;nh nh&#7845;t qu&#225;n v&#224; kh&#7843; n&#259;ng m&#7903; r&#7897;ng, &#273;&#7891;ng th&#7901;i h&#7895; tr&#7907; t&#237;nh n&#259;ng partition &#7849;n (hidden partitioning) gi&#250;p truy v&#7845;n hi&#7879;u qu&#7843; h&#417;n.</p><p>Trong b&#224;i vi&#7871;t, t&#225;c gi&#7843; c&#361;ng n&#234;u r&#245; h&#417;n nh&#7919;ng ph&#7847;n n&#224;y ho&#7841;t &#273;&#7897;ng nh&#432; th&#7871; n&#224;o, v&#224; uy &#273;i&#7875;m nh&#432;&#7907;c &#273;i&#7875;m c&#7911;a &#273;&#7883;nh d&#7841;ng b&#7843;ng m&#7899;i n&#224;y so v&#7899;i c&#225;c c&#244;ng ngh&#7879; c&#361;.</p><h2><a href="https://engineering.fb.com/2022/06/08/developer-tools/zelos/">Introducing Zelos: A ZooKeeper API leveraging Delos</a></h2><p>Meta tr&#432;&#7899;c &#273;&#226;y ch&#7911; y&#7871;u d&#249;ng Apache ZooKeeper &#273;&#7875; qu&#7843;n l&#253; c&#225;c primitives ph&#226;n t&#225;n nh&#432; kh&#243;a (locks), semaphore, &#8230; Tuy nhi&#234;n, khi quy m&#244; t&#259;ng l&#234;n, ZooKeeper ng&#224;y c&#224;ng kh&#243; m&#7903; r&#7897;ng v&#224; ch&#7881;nh s&#7917;a, &#273;a ph&#7847;n l&#224; do c&#225;ch Zookeeper t&#237;ch h&#7907;p ch&#7863;t ch&#7869; gi&#7919;a logic giao th&#7913;c &#273;&#7891;ng thu&#7853;n v&#224; logic &#7913;ng d&#7909;ng. &#272;i&#7873;u n&#224;y d&#7851;n &#273;&#7871;n vi&#7879;c Meta quy&#7871;t &#273;&#7883;nh t&#7841;o ra m&#7897;t phi&#234;n b&#7843;n m&#244;-&#273;un, linh ho&#7841;t v&#224; hi&#7879;u su&#7845;t cao h&#417;n: Zelos, x&#226;y d&#7921;ng l&#7841;i API ZooKeeper tr&#234;n n&#7873;n t&#7843;ng Delos n&#7897;i b&#7897;.</p><p>B&#224;i vi&#7871;t n&#224;y n&#243;i v&#7873; c&#225;ch Meta x&#226;y d&#7921;ng h&#7879; th&#7889;ng n&#224;y v&#224; c&#225;ch h&#7885; migrate t&#7915; ZooKeeper sang Zelos nh&#432; th&#7871; n&#224;o &#273;&#7875; kh&#244;ng g&#226;y downtime cho client nhi&#7873;u nh&#7845;t c&#243; th&#7875;. &#272;&#7891;ng th&#7901;i, t&#225;c gi&#7843; c&#361;ng n&#234;u l&#234;n nh&#7919;ng th&#7917; th&#225;ch trong vi&#7879;c x&#226;y d&#7921;ng Zelos &#273;&#7875; thay th&#7871; ZooKeeper ho&#224;n to&#224;n trong Meta nh&#432; th&#7871; n&#224;o.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#267 - Lãnh đạo: Tốt có đủ chưa?]]></title><description><![CDATA[&#272;i&#7873;u kh&#243; nh&#7845;t khi l&#224;m s&#7871;p kh&#244;ng ph&#7843;i l&#224; l&#224;m ng&#432;&#7901;i t&#7889;t]]></description><link>https://newsletter.grokking.org/p/267-lanh-ao-tot-co-u-chua</link><guid isPermaLink="false">https://newsletter.grokking.org/p/267-lanh-ao-tot-co-u-chua</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 02 Nov 2025 12:43:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>G&#7847;n &#273;&#226;y, t&#244;i c&#243; d&#7883;p n&#243;i chuy&#7879;n v&#7899;i m&#7897;t ng&#432;&#7901;i &#273;&#224;n anh trong ng&#224;nh. </p><p>Ch&#250;ng t&#244;i b&#224;n &#273;&#7911; th&#7913; t&#7915; &#273;&#7883;nh h&#432;&#7899;ng c&#7911;a c&#244;ng ty, l&#224;n s&#243;ng AI, &#273;&#7871;n c&#226;u chuy&#7879;n ph&#225;t tri&#7875;n s&#7921; nghi&#7879;p. Nh&#432;ng c&#243; m&#7897;t ch&#7911; &#273;&#7873; khi&#7871;n t&#244;i nh&#7899; m&#227;i: <strong>&#8220;Nh&#432; th&#7871; n&#224;o l&#224; m&#7897;t l&#227;nh &#273;&#7841;o t&#7889;t?&#8221;</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Anh n&#243;i m&#7897;t c&#226;u r&#7845;t &#273;&#225;ng suy ng&#7851;m:</p><blockquote><p>&#8220;M&#7897;t ng&#432;&#7901;i l&#227;nh &#273;&#7841;o, hay m&#7897;t ng&#432;&#7901;i s&#7871;p, kh&#244;ng nh&#7845;t thi&#7871;t ph&#7843;i l&#224; m&#7897;t ng&#432;&#7901;i t&#7889;t,<br>nh&#432;ng n&#234;n l&#224; m&#7897;t ng&#432;&#7901;i c&#244;ng b&#7857;ng.&#8221;</p></blockquote><p>C&#226;u n&#243;i &#273;&#243; khi&#7871;n t&#244;i suy ngh&#297; r&#7845;t nhi&#7873;u. Li&#7879;u m&#236;nh &#273;&#227; l&#224; m&#7897;t ng&#432;&#7901;i s&#7871;p &#8220;c&#244;ng b&#7857;ng&#8221; hay ch&#432;a?</p><p>Kh&#225;i ni&#7879;m &#8220;t&#7889;t&#8221; c&#7911;a m&#7895;i ng&#432;&#7901;i v&#7889;n kh&#225;c nhau. N&#7871;u m&#7897;t ng&#432;&#7901;i s&#7871;p h&#417;i thi&#234;n v&#7883; ta m&#7897;t ch&#250;t, ta c&#243; th&#7875; th&#7845;y h&#7885; &#8220;t&#7889;t&#8221; v&#7899;i ta. Nh&#432;ng &#273;i&#7873;u &#273;&#243; ch&#432;a ch&#7855;c &#273;&#227; t&#7889;t cho c&#7843; t&#7853;p th&#7875;.</p><p>C&#243; l&#7869;, c&#225;i kh&#243; nh&#7845;t khi l&#224;m l&#227;nh &#273;&#7841;o kh&#244;ng ph&#7843;i l&#224; <strong>l&#224;m ng&#432;&#7901;i t&#7889;t</strong>, m&#224; l&#224; <strong>&#273;&#7911; b&#7843;n l&#297;nh &#273;&#7875; c&#244;ng b&#7857;ng</strong> - &#273;&#7875; khen, ph&#234; b&#236;nh, hay &#273;&#432;a ra quy&#7871;t &#273;&#7883;nh m&#224; v&#7851;n gi&#7919; &#273;&#432;&#7907;c s&#7921; c&#226;n b&#7857;ng gi&#7919;a c&#7843;m x&#250;c v&#224; l&#253; tr&#237;.</p><p>&#8212; LPV &#8212;</p><div><hr></div><h2><a href="https://www.dataengineeringweekly.com/p/thinking-like-a-data-engineer">Thinking like a data engineer</a></h2><p>T&#225;c gi&#7843; b&#7855;t &#273;&#7847;u b&#224;i vi&#7871;t b&#7857;ng m&#7897;t suy ngh&#297; r&#7845;t th&#7853;t: nhi&#7873;u ng&#432;&#7901;i cho r&#7857;ng tr&#7903; th&#224;nh k&#7929; s&#432; d&#7919; li&#7879;u l&#224; ph&#7843;i th&#224;nh th&#7841;o h&#224;ng lo&#7841;t c&#244;ng c&#7909;, t&#7915; Hadoop, Spark, t&#7889;i &#432;u SQL cho &#273;&#7871;n x&#7917; l&#253; ph&#226;n t&#225;n.<br>Nh&#432;ng v&#7899;i anh, h&#224;nh tr&#236;nh &#273;&#243; d&#7847;n tr&#7903; th&#224;nh m&#7897;t &#273;i&#7873;u kh&#225;c: <strong>h&#7885;c c&#225;ch t&#432; duy</strong>.</p><p>B&#224;i vi&#7871;t sau k&#7875; l&#7841;i qu&#225; tr&#236;nh t&#225;c gi&#7843; nh&#7853;n ra r&#7857;ng, th&#7917; th&#225;ch l&#7899;n nh&#7845;t trong ngh&#7873; kh&#244;ng n&#7857;m &#7903; k&#7929; thu&#7853;t, m&#224; &#7903; vi&#7879;c h&#7885;c c&#225;ch nh&#236;n th&#7845;y <strong>khu&#244;n m&#7851;u trong h&#7895;n lo&#7841;n</strong>, k&#7871;t n&#7889;i <strong>h&#7879; th&#7889;ng v&#7899;i h&#224;nh vi con ng&#432;&#7901;i</strong>, v&#224; <strong>c&#226;n b&#7857;ng gi&#7919;a s&#7921; &#273;&#417;n gi&#7843;n v&#224; quy m&#244;</strong>.</p><p>&#272;i&#7873;u th&#250; v&#7883; l&#224;, anh kh&#244;ng h&#7885;c &#273;&#432;&#7907;c &#273;i&#7873;u n&#224;y qua kh&#243;a h&#7885;c hay ch&#7913;ng ch&#7881; n&#224;o,<br>m&#224; qua <strong>b&#7889;n ng&#432;&#7901;i c&#7889; v&#7845;n</strong>, &#7903; <strong>b&#7889;n giai &#273;o&#7841;n kh&#225;c nhau c&#7911;a cu&#7897;c &#273;&#7901;i</strong> - nh&#7919;ng ng&#432;&#7901;i &#273;&#227; &#273;&#7883;nh h&#236;nh c&#225;ch anh ti&#7871;p c&#7853;n k&#7929; thu&#7853;t, l&#227;nh &#273;&#7841;o, v&#224; c&#7843; cu&#7897;c s&#7889;ng.</p><blockquote><p>&#272;&#226;y kh&#244;ng ph&#7843;i l&#224; m&#7897;t h&#432;&#7899;ng d&#7851;n k&#7929; thu&#7853;t, m&#224; l&#224; <strong>m&#7897;t b&#7843;n &#273;&#7891; v&#7873; t&#432; duy</strong>, v&#7873; c&#225;ch con ng&#432;&#7901;i v&#224; tr&#7843;i nghi&#7879;m c&#243; th&#7875; thay &#273;&#7893;i c&#225;ch ta nh&#236;n v&#7873; ngh&#7873; d&#7919; li&#7879;u.</p></blockquote><h2><a href="https://greenido.wordpress.com/2025/09/25/scaling-engineering-teams-lessons-from-google-facebook-and-netflix/">Scaling Engineering Teams: Lessons from Google, Facebook, and Netflix</a></h2><p>Trong b&#224;i vi&#7871;t sau l&#224; nh&#7919;ng b&#224;i h&#7885;c t&#7915; c&#225;c Big Tech v&#7873; c&#225;ch l&#224;m th&#7871; n&#224;o &#273;&#7875; x&#226;y d&#7921;ng m&#7897;t &#273;&#7897;i ng&#361; k&#7929; s&#432;, t&#7915; 10, 100 cho t&#7899;i h&#224;ng ng&#224;n nh&#226;n vi&#234;n. Nh&#7919;ng framework, metrics, c&#244;ng c&#7909; ph&#249; h&#7907;p c&#243; th&#7875; gi&#250;p b&#7841;n nu&#244;i d&#7841;y nh&#7919;ng &#273;&#7913;a tr&#7867; m&#224; kh&#244;ng c&#7847;n lo b&#7883; ch&#250;ng &#273;&#7889;t nh&#224; l&#250;c 3h s&#225;ng.</p><p>V&#237; d&#7909; Google OKR v&#224; quy t&#7855;c 70%. N&#7871;u b&#7841;n &#273;&#7841;t 100% OKR, c&#243; ngh&#297;a l&#224; b&#7841;n ch&#432;a &#273;&#7911; tham v&#7885;ng. M&#7913;c OKR l&#253; t&#432;&#7903;ng l&#224; kho&#7843;ng 70%. Th&#7921;c hi&#7879;n OKR h&#224;ng qu&#253; cho team, v&#7899;i kho&#7843;ng 3-5 m&#7909;c ti&#234;u, m&#7895;i m&#7909;c ti&#234;u c&#243; 2-4 key result c&#243; th&#7875; &#273;o &#273;&#7841;c &#273;&#432;&#7907;c.</p><h2><a href="https://dpereira.substack.com/p/the-trap-of-excessive-ai-use">The Trap of Excessive AI Use</a></h2><p>Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; chia s&#7867; m&#7897;t s&#7889; quan &#273;i&#7875;m v&#7873; vi&#7879;c l&#7841;m d&#7909;ng AI qu&#225; m&#7913;c. Trong b&#7889;i c&#7843;nh c&#225;c c&#244;ng c&#7909; AI, vibe coding &#273;ang d&#7847;n tr&#7903; n&#234;n ph&#7893; bi&#7871;n &#273;&#7889;i v&#7899;i c&#225;c k&#7929; s&#432; ph&#7847;n m&#7873;m. Th&#236; c&#243; l&#7869; ch&#250;ng ta c&#361;ng c&#7847;n nh&#236;n l&#7841;i m&#7897;t ch&#250;t v&#7873; c&#225;ch th&#7913;c s&#7917; d&#7909;ng c&#225;c c&#244;ng c&#7909; n&#224;y nh&#432; th&#7871; n&#224;o. C&#243; l&#7869; c&#225;ch s&#7917; d&#7909;ng AI nh&#432; th&#7871; n&#224;o kh&#244;ng kh&#243;, m&#224; c&#225;i kh&#243; l&#224; bi&#7871;t khi n&#224;o th&#236; n&#234;n s&#7917; d&#7909;ng AI.</p><h2><a href="https://newsletter.techworld-with-milan.com/p/how-google-amazon-and-crowdstrike">How Google, Amazon and CrowStrike broke millions of systems</a></h2><p>C&#225;c c&#244;ng ty l&#7899;n nh&#432; Google, Amazon &#273;ang control ph&#7847;n l&#7899;n internet. V&#224; khi h&#7879; th&#7889;ng x&#7843;y ra v&#7845;n &#273;&#7873;, d&#249; l&#224; 1 tr&#7909;c tr&#7863;c nh&#7887; c&#361;ng khi&#7871;n 1 ph&#7847;n th&#7871; gi&#7899;i b&#7883; &#7843;nh h&#432;&#7903;ng.</p><p>Trong b&#224;i vi&#7871;t sau t&#225;c gi&#7843; &#273;&#227; t&#243;m t&#7855;t l&#7841;i m&#7897;t s&#7889; s&#7921; c&#7889; nh&#432; th&#7871;, t&#7915; nguy&#234;n nh&#226;n x&#7843;y ra, v&#224; c&#225;ch &#273;&#7897;i ng&#361; k&#7929; s&#432; &#273;&#227; kh&#7855;c ph&#7909;c nh&#432; th&#7871; n&#224;o. M&#7901;i c&#225;c b&#7841;n c&#249;ng &#273;&#7885;c nh&#233;.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:176989738,&quot;url&quot;:&quot;https://newsletter.techworld-with-milan.com/p/how-google-amazon-and-crowdstrike&quot;,&quot;publication_id&quot;:1219834,&quot;publication_name&quot;:&quot;Tech World With Milan Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Bimu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd6c17b-1bdf-4b80-a7cc-bd216bbe8edb_653x653.png&quot;,&quot;title&quot;:&quot;How Google, Amazon, and CrowdStrike broke millions of systems&quot;,&quot;truncated_body_text&quot;:&quot;Three companies control most of the internet. When they break, millions of systems fail at once.&quot;,&quot;date&quot;:&quot;2025-10-30T16:02:34.295Z&quot;,&quot;like_count&quot;:16,&quot;comment_count&quot;:1,&quot;bylines&quot;:[{&quot;id&quot;:24455408,&quot;name&quot;:&quot;Dr Milan Milanovi&#263;&quot;,&quot;handle&quot;:&quot;techworldwithmilan&quot;,&quot;previous_name&quot;:&quot;Dr. Milan Milanovi&#263;&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b88c8b56-6239-4f64-b118-d81cc2cc1271_612x612.png&quot;,&quot;bio&quot;:&quot;I&#8217;m Milan, a startup CTO, author &amp; coach. I share practical insights on software, leadership &amp; careers with 48K+ readers, drawn from 20+ years building products, teams &amp; systems that last. I hold a PhD in Computer Science and AI.&quot;,&quot;profile_set_up_at&quot;:&quot;2022-11-30T13:30:12.729Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-12-17T22:31:30.501Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1175459,&quot;user_id&quot;:24455408,&quot;publication_id&quot;:1219834,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1219834,&quot;name&quot;:&quot;Tech World With Milan Newsletter&quot;,&quot;subdomain&quot;:&quot;techworldwithmilan&quot;,&quot;custom_domain&quot;:&quot;newsletter.techworld-with-milan.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Clear, actionable insights on software engineering and leadership. Trusted by engineers at Amazon, Microsoft, and Google, and students at MIT and Stanford.&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/afd6c17b-1bdf-4b80-a7cc-bd216bbe8edb_653x653.png&quot;,&quot;author_id&quot;:24455408,&quot;primary_user_id&quot;:24455408,&quot;theme_var_background_pop&quot;:&quot;#D10000&quot;,&quot;created_at&quot;:&quot;2022-11-30T20:12:15.007Z&quot;,&quot;email_from_name&quot;:&quot;Dr Milan Milanovi&#263;&quot;,&quot;copyright&quot;:&quot;Dr Milan Milanovi&#263;&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;milan_milanovic&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[64099,458709],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://newsletter.techworld-with-milan.com/p/how-google-amazon-and-crowdstrike?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!Bimu!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fafd6c17b-1bdf-4b80-a7cc-bd216bbe8edb_653x653.png" loading="lazy"><span class="embedded-post-publication-name">Tech World With Milan Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">How Google, Amazon, and CrowdStrike broke millions of systems</div></div><div class="embedded-post-body">Three companies control most of the internet. When they break, millions of systems fail at once&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">6 months ago &#183; 16 likes &#183; 1 comment &#183; Dr Milan Milanovi&#263;</div></a></div><div><hr></div><p>Trong s&#7889; ti&#7871;p theo, t&#244;i xin ph&#233;p d&#224;nh m&#7897;t ch&#250;t th&#7901;i gian &#273;&#7875; chia s&#7867; v&#7899;i c&#225;c b&#7841;n &#273;&#7885;c v&#7873; qu&#225; tr&#236;nh h&#417;n 5 n&#259;m l&#224;m Newsletter. Qu&#225; tr&#236;nh n&#224;y &#273;&#227; mang l&#7841;i nh&#7919;ng thay &#273;&#7893;i n&#224;o &#273;&#7889;i v&#7899;i c&#225; nh&#226;n t&#244;i, c&#361;ng nh&#432; v&#7899;i nhi&#7873;u th&#224;nh vi&#234;n kh&#225;c c&#7911;a Grokking. Ch&#250;c c&#225;c b&#7841;n m&#7897;t bu&#7893;i t&#7889;i cu&#7889;i tu&#7847;n vui v&#7867; nh&#233;.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Grokking is back!]]></title><description><![CDATA[Grokking &#273;&#227; tr&#7903; l&#7841;i - c&#249;ng b&#224;n chuy&#7879;n tech, chuy&#7879;n &#273;&#7901;i, v&#224; chuy&#7879;n hi&#7875;u s&#226;u h&#417;n]]></description><link>https://newsletter.grokking.org/p/grokking-is-back</link><guid isPermaLink="false">https://newsletter.grokking.org/p/grokking-is-back</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Thu, 16 Oct 2025 05:01:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ch&#224;o b&#7841;n,</p><p><strong>Grokking Newsletter</strong> &#273;&#227; tr&#7903; l&#7841;i, sau m&#7897;t kho&#7843;ng th&#7901;i gian t&#7841;m l&#7855;ng &#273;&#7875; suy ng&#7851;m v&#224; t&#236;m ki&#7871;m &#273;&#7883;nh h&#432;&#7899;ng n&#7897;i dung m&#7899;i. Trong c&#225;c s&#7889; newsletter s&#7855;p t&#7899;i c&#7911;a Grokking, b&#7841;n s&#7869; th&#7845;y c&#7845;u tr&#250;c n&#7897;i dung thay &#273;&#7893;i nhi&#7873;u. N&#7897;i dung c&#7911;a newsletter s&#7869; kh&#244;ng ph&#226;n m&#7909;c qu&#225; r&#245; r&#224;ng ho&#7863;c ch&#7881; c&#243; b&#224;i vi&#7871;t hay nh&#432; tr&#432;&#7899;c &#273;&#226;y, m&#224; s&#7869; mang t&#237;nh ch&#7845;t chia s&#7867; g&#243;c nh&#236;n, th&#7843;o lu&#7853;n nhi&#7873;u h&#417;n. </p><p>Ch&#250;ng t&#244;i mong &#273;&#226;y kh&#244;ng ch&#7881; l&#224; newsletter, m&#224; l&#224; m&#7897;t cu&#7897;c tr&#242; chuy&#7879;n - n&#417;i b&#7841;n t&#236;m th&#7845;y c&#7843;m h&#7913;ng v&#224; nh&#7919;ng g&#243;c nh&#236;n ri&#234;ng cho h&#224;nh tr&#236;nh c&#7911;a m&#236;nh. C&#225;c b&#7841;n c&#243; nhu c&#7847;u th&#7843;o lu&#7853;n, ho&#7863;c mu&#7889;n &#273;&#243;ng g&#243;p &#253; ki&#7871;n c&#7911;a m&#236;nh &#273;&#7871;n b&#7841;n &#273;&#7885;c Grokking Newsletter, c&#243; th&#7875; g&#7917;i n&#7897;i dung &#273;&#7871;n cho b&#7885;n m&#236;nh nh&#233;.</p><div><hr></div><h2>B&#224;n chuy&#7879;n System Design th&#7901;i AI: Khi &#8220;bi&#7871;t tu&#7889;t&#8221; kh&#244;ng b&#7857;ng &#8220;hi&#7875;u s&#226;u&#8221;</h2><p>D&#7841;o n&#224;y l&#432;&#7899;t m&#7841;ng, th&#7845;y c&#225;c b&#7841;n khoe x&#224;i Copilot, ChatGPT generate code ph&#224; ph&#224;, th&#7853;m ch&#237; c&#242;n h&#7887;i n&#243; &#8220;design cho tao m&#7897;t c&#225;i h&#7879; th&#7889;ng gi&#7889;ng Twitter&#8221;. N&#243; tr&#7843; l&#7901;i vanh v&#225;ch, nh&#236;n c&#243; v&#7867; ngon l&#224;nh. Nh&#432;ng &#273;&#226;y ch&#237;nh l&#224; c&#225;i b&#7851;y nguy hi&#7875;m nh&#7845;t.</p><p>Theo quan s&#225;t c&#7911;a b&#7885;n m&#236;nh, AI &#273;ang d&#7847;n thay th&#7871; c&#225;c task entry-level. M&#7897;t b&#7841;n junior gi&#7901; c&#243; th&#7875; d&#249;ng AI &#273;&#7875; fix bug, vi&#7871;t unit test, hay vi&#7871;t m&#7897;t &#273;o&#7841;n code CRUD &#273;&#417;n gi&#7843;n nhanh g&#7845;p m&#7845;y l&#7847;n tr&#432;&#7899;c &#273;&#226;y. Nh&#432;ng vi&#7879;c &#8220;design m&#7897;t h&#7879; th&#7889;ng&#8221; l&#7841;i l&#224; chuy&#7879;n ho&#224;n to&#224;n kh&#225;c.</p><p>C&#225;i h&#7879; th&#7889;ng m&#224; AI &#8220;v&#7869;&#8221; ra cho b&#7841;n, b&#7841;n c&#243; th&#7853;t s&#7921; hi&#7875;u c&#225;c trade-offs &#273;&#7857;ng sau kh&#244;ng? V&#236; sao ch&#7895; n&#224;y l&#7841;i d&#249;ng message queue thay v&#236; g&#7885;i API tr&#7921;c ti&#7871;p? V&#236; sao l&#7841;i ch&#7885;n Cassandra ch&#7913; kh&#244;ng ph&#7843;i PostgreSQL? Khi b&#7883; h&#7887;i v&#7863;n l&#7841;i, li&#7879;u c&#243; im l&#7863;ng r&#7891;i s&#7845;p m&#7863;t nh&#432; m&#7845;y em sinh vi&#234;n ch&#7841;y model m&#224; kh&#244;ng bi&#7871;t v&#236; sao kh&#244;ng d&#249;ng XGBoost kh&#244;ng?</p><p>Tr&#432;&#7899;c &#273;&#226;y, &#273;&#7875; h&#7885;c v&#7873; h&#7879; th&#7889;ng l&#7899;n, c&#225;c b&#7841;n ph&#7843;i c&#224;y cu&#7889;c, &#273;&#7885;c c&#7843; ch&#7909;c c&#225;i paper, m&#242; m&#7851;m code c&#7911;a c&#225;c b&#7853;c ti&#7873;n b&#7889;i. Gi&#7901; AI n&#243; t&#243;m t&#7855;t l&#7841;i cho b&#7841;n trong 3 n&#7889;t nh&#7841;c. Nh&#432;ng s&#7921; ti&#7879;n l&#7907;i n&#224;y l&#7841;i l&#7845;y &#273;i c&#225;i c&#7889;t l&#245;i: qu&#225; tr&#236;nh t&#432; duy v&#224; &#273;&#224;o s&#226;u &#273;&#7875; hi&#7875;u t&#7853;n g&#7889;c r&#7877; v&#7845;n &#273;&#7873;. AI n&#226;ng productivity c&#7911;a ng&#432;&#7901;i c&#243; kinh nghi&#7879;m l&#234;n r&#7845;t nhanh, nh&#432;ng n&#243; c&#361;ng c&#243; th&#7875; t&#7841;o ra m&#7897;t th&#7871; h&#7879; k&#7929; s&#432; &#8220;h&#7885;c m&#7865;o&#8221;, ch&#7881; bi&#7871;t &#8220;x&#224;i&#8221; m&#224; kh&#244;ng &#8220;hi&#7875;u&#8221;.</p><p>V&#7853;y c&#225;c b&#7841;n tr&#7867; (v&#224; c&#7843; kh&#244;ng tr&#7867; nh&#432;ng skillset v&#7851;n entry-level) c&#7847;n l&#224;m g&#236;? C&#226;u tr&#7843; l&#7901;i mu&#244;n thu&#7903;: quay v&#7873; v&#7899;i ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng. Ph&#7843;i hi&#7875;u &#8220;domain knowledge&#8221; c&#7911;a ng&#224;nh m&#236;nh th&#7853;t ch&#7855;c.</p><p>M&#7897;t v&#224;i b&#224;i vi&#7871;t v&#224; paper v&#237; d&#7909; minh h&#7885;a cho vi&#7879;c hi&#7875;u v&#224; &#273;&#7885;c s&#226;u:</p><ul><li><p>M&#7897;t b&#224;i r&#7845;t &#273;&#225;ng &#273;&#7885;c &#273;&#7871;n t&#7915; Uber: <strong>&#8220;<a href="https://www.uber.com/blog/reliable-reprocessing/">Building Reliable Reprocessing for Critical Datasets at Scale</a>&#8221;</strong></p><ul><li><p><strong>V&#236; sao ph&#7843;i &#273;&#7885;c?</strong> H&#227;y t&#432;&#7903;ng t&#432;&#7907;ng ch&#7881; m&#7897;t bug nh&#7887; c&#361;ng c&#243; th&#7875; khi&#7871;n h&#224;ng terabyte d&#7919; li&#7879;u b&#7883; t&#237;nh sai - &#7843;nh h&#432;&#7903;ng &#273;&#7871;n thanh to&#225;n cho t&#224;i x&#7871;, hay th&#7853;m ch&#237; c&#7843; b&#225;o c&#225;o t&#224;i ch&#237;nh. Trong b&#224;i vi&#7871;t n&#224;y, Uber chia s&#7867; c&#225;ch h&#7885; x&#226;y d&#7921;ng <strong>m&#7897;t h&#7879; th&#7889;ng &#8220;s&#7917;a sai&#8221; t&#7921; &#273;&#7897;ng v&#224; &#273;&#7911; tin c&#7853;y &#273;&#7875; v&#7853;n h&#224;nh &#7903; quy m&#244; kh&#7893;ng l&#7891;</strong> - m&#224; kh&#244;ng l&#224;m s&#7853;p c&#7843; c&#244;ng ty. &#272;&#7885;c &#273;&#7875; th&#7845;y h&#7885; ph&#7843;i &#273;&#225;nh &#273;&#7893;i nh&#7919;ng g&#236;, v&#224; v&#236; sao &#273;&#244;i khi, nh&#7919;ng gi&#7843;i ph&#225;p c&#243; s&#7861;n l&#7841;i kh&#244;ng th&#7875; &#8220;v&#225;&#8221; &#273;&#432;&#7907;c v&#7845;n &#273;&#7873; th&#7853;t s&#7921;.</p></li></ul></li><li><p>T&#7915; th&#7921;c t&#7871; c&#7911;a Netflix:<strong> &#8220;<a href="https://netflixtechblog.com/scaling-time-series-data-storage-part-i-ec2b6d44ba39">Scaling Time Series Data Storage at Netflix</a>&#8220;</strong></p><ul><li><p><strong>V&#236; sao ph&#7843;i &#273;&#7885;c?</strong> Ai c&#361;ng bi&#7871;t Netflix c&#243; h&#7879; th&#7889;ng observability kinh kh&#7911;ng &#273;&#7875; theo d&#245;i s&#7913;c kh&#7887;e h&#7879; th&#7889;ng. B&#224;i vi&#7871;t n&#224;y &#273;&#224;o s&#226;u v&#224;o m&#7897;t g&#243;c nh&#7887; nh&#432;ng c&#7921;c k&#7923; quan tr&#7885;ng: h&#7885; &#273;&#227; l&#432;u tr&#7919; v&#224; x&#7917; l&#253; d&#7919; li&#7879;u d&#7841;ng chu&#7895;i th&#7901;i gian (time series) nh&#432; th&#7871; n&#224;o &#7903; quy m&#244; h&#224;ng petabyte. N&#243; l&#224; m&#7897;t case study th&#7921;c t&#7871; v&#7873; vi&#7879;c &#8220;build vs. buy&#8221; (t&#7921; x&#226;y hay mua), nh&#7919;ng gi&#7899;i h&#7841;n c&#7911;a c&#225;c gi&#7843;i ph&#225;p hi&#7879;n c&#243; v&#224; c&#225;ch h&#7885; t&#7921; x&#226;y m&#7897;t h&#7879; th&#7889;ng t&#234;n l&#224; Atlas Telemetry Platform &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n c&#7911;a ri&#234;ng m&#236;nh. &#272;&#226;y l&#224; minh ch&#7913;ng cho vi&#7879;c &#7903; quy m&#244; l&#7899;n, kh&#244;ng c&#243; gi&#7843;i ph&#225;p &#8220;m&#7897;t k&#237;ch c&#7905; cho t&#7845;t c&#7843;&#8221;.</p></li></ul></li><li><p><strong>Kinh &#273;i&#7875;n v&#7873; Trade-offs: &#8220;CAP Theorem: Two Decades Later&#8221; c&#7911;a Eric Brewer</strong></p><ul><li><p><strong>V&#236; sao ph&#7843;i &#273;&#7885;c?</strong> H&#7847;u h&#7871;t c&#225;c h&#7879; th&#7889;ng ph&#226;n t&#225;n &#273;&#7873;u ph&#7843;i &#273;&#225;nh &#273;&#7893;i gi&#7919;a Consistency, Availability, v&#224; Partition Tolerance. B&#224;i vi&#7871;t n&#224;y, t&#7915; ch&#237;nh cha &#273;&#7867; c&#7911;a &#273;&#7883;nh l&#253; CAP, s&#7869; cho b&#7841;n th&#7845;y &#273;&#7883;nh l&#253; n&#224;y kh&#244;ng ph&#7843;i l&#224; &#8220;ch&#7885;n 2 trong 3&#8221; m&#7897;t c&#225;ch c&#7913;ng nh&#7855;c, m&#224; l&#224; m&#7897;t chu&#7895;i c&#225;c trade-offs tinh vi h&#417;n nhi&#7873;u. Hi&#7875;u &#273;&#432;&#7907;c n&#243;, b&#7841;n s&#7869; c&#243; c&#225;i nh&#236;n th&#7921;c t&#7871; h&#417;n khi thi&#7871;t k&#7871; h&#7879; th&#7889;ng.</p></li></ul></li><li><p><strong>Kinh &#273;i&#7875;n v&#7873; NoSQL: &#8220;Amazon&#8217;s Dynamo: A Highly Available Key-value Store&#8221;</strong></p><ul><li><p><strong>V&#236; sao ph&#7843;i &#273;&#7885;c?</strong> C&#225;i paper n&#224;y l&#224; n&#7873;n m&#243;ng cho c&#7843; m&#7897;t th&#7871; h&#7879; database NoSQL sau n&#224;y, bao g&#7891;m c&#7843; DynamoDB c&#7911;a AWS. &#272;&#7885;c n&#243; &#273;&#7875; hi&#7875;u v&#7873; eventual consistency, sharding, a &#8220;gossip&#8221; protocol... &#272;&#226;y l&#224; ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng gi&#250;p b&#7841;n kh&#244;ng b&#7883; ng&#7907;p khi l&#224;m vi&#7879;c v&#7899;i c&#225;c h&#7879; th&#7889;ng cloud-native hi&#7879;n &#273;&#7841;i.</p></li></ul></li></ul><p>Hay n&#243;i c&#225;ch kh&#225;c, &#273;&#7875; th&#237;ch nghi v&#7899;i th&#7901;i &#273;&#7841;i AI n&#224;y, c&#225;c b&#7841;n c&#7847;n l&#224;m g&#236;?</p><ol><li><p><strong>&#272;&#7915;ng &#273;&#7875; AI l&#224;m thay b&#7841;n trong vi&#7879;c suy ngh&#297;. </strong>H&#227;y coi n&#243; l&#224; m&#7897;t tr&#7907; l&#253; si&#234;u nhanh &#273;&#7875; x&#7917; m&#7845;y vi&#7879;c tay ch&#226;n - c&#242;n ph&#7847;n quan tr&#7885;ng nh&#7845;t: t&#432; duy v&#7873; ki&#7871;n tr&#250;c, &#273;&#225;nh &#273;&#7893;i, v&#224; quy&#7871;t &#273;&#7883;nh thi&#7871;t k&#7871; - v&#7851;n l&#224; vi&#7879;c c&#7911;a b&#7841;n.</p></li><li><p><strong>&#272;&#7847;u t&#432; v&#224;o n&#7873;n t&#7843;ng. </strong>Nh&#7919;ng kh&#225;i ni&#7879;m c&#7889;t l&#245;i nh&#432; &#273;&#7883;nh l&#253; CAP, c&#225;c ki&#7875;u d&#7919; li&#7879;u, hay thu&#7853;t to&#225;n &#273;&#7891;ng thu&#7853;n kh&#244;ng bao gi&#7901; l&#7895;i th&#7901;i. C&#244;ng ngh&#7879; thay &#273;&#7893;i, nh&#432;ng nguy&#234;n l&#253; th&#236; &#7903; &#273;&#243;.</p></li><li><p><strong>H&#7885;c t&#7915; th&#7921;c t&#7871;.</strong> &#272;&#7885;c engineering blog c&#7911;a c&#225;c c&#244;ng ty l&#7899;n - v&#237; d&#7909; nh&#7919;ng case study nh&#432; Uber hay Netflix - &#273;&#7875; th&#7845;y h&#7885; &#273;&#227; v&#7845;p ng&#227; th&#7871; n&#224;o v&#224; l&#224;m sao &#273;&#7913;ng d&#7853;y. Nh&#7919;ng b&#224;i h&#7885;c &#273;&#243; gi&#225; tr&#7883; h&#417;n m&#7885;i &#8220;hack&#8221; ng&#7855;n h&#7841;n.</p></li><li><p><strong>Lu&#244;n h&#7887;i &#8220;T&#7841;i sao?&#8221;.</strong> &#272;&#7915;ng ch&#7845;p nh&#7853;n m&#7897;t gi&#7843;i ph&#225;p ch&#7881; v&#236; AI g&#7907;i &#253; hay v&#236; n&#243; &#273;ang l&#224; trend. &#272;&#224;o s&#226;u &#273;&#7911; &#273;&#7875; hi&#7875;u r&#245; c&#225;i gi&#225; ph&#7843;i tr&#7843; (trade-offs) - tr&#432;&#7899;c khi b&#7841;n b&#7845;m deploy.</p></li></ol><p>Th&#7883; tr&#432;&#7901;ng lao &#273;&#7897;ng s&#7869; ng&#224;y c&#224;ng kh&#7855;c nghi&#7879;t. Nh&#7919;ng k&#7929; n&#259;ng m&#224; b&#7841;n c&#243; th&#7875; h&#7885;c trong 3 ph&#250;t tr&#234;n m&#7841;ng s&#7869; nhanh ch&#243;ng b&#7883; thay th&#7871;. Ch&#7881; c&#243; ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng v&#224; kh&#7843; n&#259;ng t&#432; duy s&#226;u m&#7899;i gi&#250;p b&#7841;n &#273;&#7913;ng v&#7919;ng. &#272;&#7915;ng &#273;&#7875; m&#236;nh tr&#7903; th&#224;nh m&#7897;t k&#7929; s&#432; &#8220;entry-level&#8221; d&#249; &#273;&#227; &#273;i l&#224;m nhi&#7873;u n&#259;m.</p><p>P/S: b&#224;i vi&#7871;t n&#224;y &#273;&#432;&#7907;c t&#7841;o ra v&#7899;i s&#7921; h&#7895; tr&#7907; c&#7911;a AI, b&#7841;n ngh&#297; AI &#273;&#243;ng g&#243;p cho b&#224;i vi&#7871;t tr&#234;n bao nhi&#234;u ph&#7847;n tr&#259;m? :)</p><div><hr></div><h1>Ph&#7887;ng v&#7845;n th&#7901;i AI</h1><p><em>(chia s&#7867; b&#7903;i b&#7841;n &#273;&#7885;c n^4)</em></p><p>Ch&#7911; &#273;&#7873; c&#243; n&#234;n cho ph&#233;p &#7913;ng vi&#234;n s&#7917; d&#7909;ng AI trong qu&#225; tr&#236;nh ph&#7887;ng v&#7845;n hay kh&#244;ng l&#224; m&#7897;t c&#226;u h&#7887;i th&#432;&#7901;ng &#273;&#432;&#7907;c &#273;&#7863;t ra trong th&#7901;i gian g&#7847;n &#273;&#226;y. V&#7915;a r&#7891;i, trong qu&#225; tr&#236;nh ph&#7887;ng v&#7845;n, b&#7843;n th&#226;n m&#236;nh c&#361;ng &#273;&#227; th&#7917; &#273;&#7893;i c&#225;ch ti&#7871;p c&#7853;n m&#7897;t t&#237;, cho ph&#233;p &#7913;ng vi&#234;n c&#243; th&#7875; d&#249;ng AI tho&#7843;i m&#225;i trong qu&#225; tr&#236;nh ph&#7887;ng v&#7845;n, &#273;&#7863;c bi&#7879;t l&#224; coding interview, xem k&#7871;t qu&#7843; nh&#432; th&#7871; n&#224;o.</p><p>D&#297; nhi&#234;n, &#273;&#7873; b&#224;i &#273;&#7863;t ra c&#361;ng thay &#273;&#7893;i m&#7897;t t&#237;. Thay v&#236; &#273;&#7863;t ra m&#7897;t &#273;&#7873; b&#224;i &#273;&#243;ng, y&#234;u c&#7847;u &#7913;ng vi&#234;n hi&#7879;n th&#7921;c h&#243;a m&#7897;t thu&#7853;t to&#225;n ho&#7863;c m&#7897;t component c&#7909; th&#7875;, m&#236;nh &#273;&#7863;t ra &#273;&#7873; b&#224;i l&#224; y&#234;u c&#7847;u &#7913;ng vi&#234;n x&#226;y d&#7921;ng m&#7897;t ch&#432;&#417;ng tr&#236;nh nh&#7857;m gi&#250;p minh h&#7885;a/gi&#7843; l&#7853;p m&#7897;t v&#7845;n &#273;&#7873; g&#236; &#273;&#243;. V&#224; &#7913;ng vi&#234;n c&#243; th&#7875; to&#224;n quy&#7873;n s&#7917; d&#7909;ng AI, l&#7921;a ch&#7885;n c&#244;ng ngh&#7879;, h&#236;nh th&#7913;c tri&#7875;n khai, &#8230;</p><p>So s&#225;nh gi&#7919;a hai &#7913;ng vi&#234;n c&#243; c&#225;ch ti&#7871;p c&#7853;n kh&#225;c nhau.</p><p>&#7912;ng vi&#234;n A c&#361;ng c&#243; &#273;&#7863;t ra 1-2 c&#226;u h&#7887;i &#273;&#7875; l&#224;m r&#245; ch&#432;&#417;ng tr&#236;nh, nh&#432;ng sau &#273;&#243; s&#7869; d&#249;ng ngay &#273;&#7873; b&#224;i &#273;&#7875; prompt &#8220;H&#227;y x&#226;y d&#7921;ng ch&#432;&#417;ng tr&#236;nh &#273;&#7875; minh h&#7885;a xxx / yyy&#8221;, &#8230; Sau khi AI vi&#7871;t ra ch&#432;&#417;ng tr&#236;nh, b&#7841;n ch&#7841;y th&#7917; r&#7891;i b&#7855;t &#273;&#7847;u &#273;&#7885;c code xem AI implement nh&#432; th&#7871; n&#224;o. Tuy nhi&#234;n, code AI vi&#7871;t ra l&#7841;i h&#417;i ph&#7913;c t&#7841;p v&#224; b&#7841;n ho&#224;n to&#224;n kh&#244;ng gi&#7843;i th&#237;ch &#273;&#432;&#7907;c xem thu&#7853;t to&#225;n ho&#7841;t &#273;&#7897;ng nh&#432; th&#7871; n&#224;o. D&#297; nhi&#234;n, vi&#7879;c th&#7901;i gian b&#7883; gi&#7899;i h&#7841;n c&#249;ng &#225;p l&#7921;c ph&#7887;ng v&#7845;n c&#361;ng l&#224; m&#7897;t nh&#226;n t&#7889; l&#224;m cho b&#7841;n kh&#244;ng tr&#7843; l&#7901;i &#273;&#432;&#7907;c. Tuy nhi&#234;n, c&#225;ch ti&#7871;p c&#7853;n n&#224;y r&#245; r&#224;ng kh&#244;ng ph&#249; h&#7907;p trong m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n coding.</p><p>&#7912;ng vi&#234;n B c&#243; c&#225;ch ti&#7871;p c&#7853;n kh&#225;c. B&#7841;n s&#7869; ph&#226;n t&#237;ch coi l&#224; n&#234;n minh h&#7885;a v&#7845;n &#273;&#7873;/thu&#7853;t to&#225;n n&#224;y th&#7871; n&#224;o, b&#7841;n s&#7869; h&#7887;i c&#243; c&#7847;n UI hay kh&#244;ng, n&#234;n scope down th&#224;nh v&#224;i tr&#432;&#7901;ng h&#7907;p c&#7909; th&#7875; h&#417;n, &#8230; Sau &#273;&#243;, b&#7841;n b&#7855;t &#273;&#7847;u ph&#226;n t&#237;ch v&#7873; c&#7845;u tr&#250;c d&#7919; li&#7879;u c&#7847;n thi&#7871;t &#273;&#7875; minh h&#7885;a thu&#7853;t to&#225;n n&#224;y, ti&#7871;p theo l&#224; b&#7841;n b&#7855;t &#273;&#7847;u m&#244; t&#7843; c&#225;ch ti&#7871;p c&#7853;n. Cu&#7889;i c&#249;ng, b&#7841;n s&#7917; d&#7909;ng AI &#273;&#7875; y&#234;u c&#7847;u implement thu&#7853;t to&#225;n &#273;&#7875; gi&#7843;i quy&#7871;t &#273;&#7873; b&#224;i. &#272;&#7889;i v&#7899;i &#7913;ng vi&#234;n n&#224;y, thu&#7853;t to&#225;n ch&#7841;y ra v&#7851;n kh&#244;ng ho&#224;n to&#224;n &#273;&#250;ng, nh&#432;ng b&#7841;n c&#243; th&#7875; gi&#7843;i th&#237;ch v&#224; debug xem t&#7915;ng b&#432;&#7899;c thu&#7853;t to&#225;n ho&#7841;t &#273;&#7897;ng nh&#432; th&#7871; n&#224;o.</p><p>Nh&#236;n chung, d&#7921;a v&#224;o tr&#7843;i nghi&#7879;m c&#225; nh&#226;n th&#236; ph&#7887;ng v&#7845;n c&#243; hay kh&#244;ng c&#243; AI v&#7851;n kh&#244;ng thay &#273;&#7893;i qu&#225; nhi&#7873;u nh&#432; m&#236;nh ngh&#297; ban &#273;&#7847;u. Vi&#7879;c &#7913;ng vi&#234;n c&#243; ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng ho&#7863;c k&#7929; n&#259;ng t&#7889;t v&#7851;n s&#7869; &#273;&#432;&#7907;c bi&#7875;u hi&#7879;n r&#245;. N&#234;n thay v&#236; c&#7845;m d&#249;ng AI khi ph&#7887;ng v&#7845;n, th&#236; vi&#7879;c cho ph&#233;p v&#224; khuy&#7871;n kh&#237;ch d&#249;ng c&#243; khi l&#7841;i l&#224;m cho qu&#225; tr&#236;nh ph&#7887;ng v&#7845;n &#273;&#432;&#7907;c t&#7889;t h&#417;n.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/p/grokking-is-back?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.grokking.org/p/grokking-is-back?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><p><em>C&#243; l&#7869; &#273;i&#7873;u tuy&#7879;t nh&#7845;t khi l&#224;m k&#7929; s&#432; kh&#244;ng ph&#7843;i l&#224; vi&#7871;t ra d&#242;ng code ho&#224;n h&#7843;o, m&#224; l&#224; hi&#7875;u v&#236; sao m&#236;nh vi&#7871;t nh&#432; th&#7871;.</em></p><p><em>C&#7843;m &#417;n b&#7841;n &#273;&#227; &#273;&#7885;c &#273;&#7871;n &#273;&#226;y - mong r&#7857;ng Grokking s&#7869; lu&#244;n l&#224; n&#417;i b&#7841;n t&#236;m th&#7845;y ch&#250;t c&#7843;m h&#7913;ng gi&#7919;a nh&#7919;ng ng&#224;y &#273;&#7847;y deadline v&#224; release.</em></p><p></p>]]></content:encoded></item><item><title><![CDATA[#265 - You Are Not Google]]></title><description><![CDATA[&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay]]></description><link>https://newsletter.grokking.org/p/265-you-are-not-google</link><guid isPermaLink="false">https://newsletter.grokking.org/p/265-you-are-not-google</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Tue, 03 Oct 2023 12:30:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><strong><a href="https://blog.bradfieldcs.com/you-are-not-google-84912cf44afb">You Are Not Google</a></strong></h4><p><em>(quangle80)</em></p><p>L&#224; m&#7897;t k&#7929; s&#432; ph&#7847;n m&#7873;m, ch&#250;ng ta lu&#244;n mong mu&#7889;n &#225;p d&#7909;ng nh&#7919;ng c&#244;ng ngh&#7879; t&#7889;i t&#226;n, t&#7889;t nh&#7845;t khi b&#7855;t tay v&#224;o x&#226;y d&#7921;ng m&#7897;t h&#7879; th&#7889;ng. Nh&#432;ng ch&#7853;m l&#7841;i m&#7897;t nh&#7883;p, li&#7879;u c&#225;c c&#244;ng ngh&#7879; m&#224; b&#7841;n d&#7921; &#273;&#7883;nh &#225;p d&#7909;ng (v&#237; d&#7909; nh&#432; MapReduce, Kafka h&#7885;c t&#7915; c&#225;c Big Tech Google, LinkedIn, v.v&#8230;) c&#243; th&#7921;c s&#7921; ph&#249; h&#7907;p v&#7899;i use-case c&#7911;a b&#7841;n.</p><p>V&#7899;i g&#243;c nh&#236;n &#8220;don&#8217;t cargo cult&#8221; (kh&#244;ng t&#244;n s&#249;ng b&#7845;t k&#236; c&#244;ng ngh&#7879; n&#224;o), t&#225;c gi&#7843; <strong>Oz Nova</strong> mu&#7889;n ch&#7881; ra c&#225;c b&#432;&#7899;c &#273;&#225;nh gi&#225; <strong>UNPHAT</strong> &#273;&#7875; gi&#250;p b&#7841;n &#273;&#7885;c &#273;&#432;a ra quy&#7871;t &#273;&#7883;nh t&#7889;t h&#417;n:</p><ul><li><p><em><strong>U</strong></em><strong>nderstand</strong> the problem: Hi&#7875;u v&#7845;n &#273;&#7873; m&#224; h&#7879; th&#7889;ng &#273;ang g&#7863;p ph&#7843;i</p></li><li><p><em><strong>N</strong></em><strong>umerate</strong> multiple candidate solutions: &#272;&#225;nh gi&#225; nhi&#7873;u gi&#7843;i ph&#225;p ch&#7913; kh&#244;ng ch&#7885;n theo s&#7903; th&#237;ch</p></li><li><p>Read the <em><strong>P</strong></em><strong>aper:</strong> sau khi ch&#7885;n &#273;&#432;&#7907;c gi&#7843;i ph&#225;p ph&#249; h&#7907;p, nghi&#234;n c&#7913;u th&#234;m c&#225;c paper, document c&#7911;a c&#244;ng ngh&#7879;, gi&#7843;i ph&#225;p &#273;&#227; ch&#7885;n.</p></li><li><p>Determine the <em><strong>H</strong></em><strong>istorical</strong> context: &#273;&#225;nh gi&#225; c&#244;ng ngh&#7879; n&#224;y sinh ra &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n g&#236; cho doanh nghi&#7879;p (V&#237; d&#7909; LinkedIn x&#226;y d&#7921;ng Kafka &#273;&#7875; gi&#7843;i quy&#7871;t h&#224;ng t&#7927; events 1 ng&#224;y, ch&#7909;c tri&#7879;u messages 1 gi&#226;y, li&#7879;u doanh nghi&#7879;p c&#7911;a ch&#250;ng ta c&#243; c&#7847;n thi&#7871;t ph&#7843;i &#225;p d&#7909;ng Kafka hay ch&#7881; c&#7847;n s&#7917; d&#7909;ng c&#244;ng ngh&#7879; n&#224;o kh&#225;c)</p></li><li><p>Weigh <em><strong>A</strong></em><strong>dvantages</strong> against disadvantages: C&#226;n nh&#7855;c &#432;u v&#224; nh&#432;&#7907;c &#273;i&#7875;m c&#7911;a c&#244;ng ngh&#7879;</p></li><li><p><em><strong>T</strong></em><strong>hink!</strong>: cu&#7889;i c&#249;ng t&#225;c gi&#7843; v&#7851;n l&#7863;p l&#7841;i ti&#234;u ch&#237; khuy&#234;n b&#7841;n &#273;&#7885;c h&#227;y t&#7881;nh t&#225;o v&#224; suy ng&#7851;m kh&#225;ch quan xem gi&#7843;i ph&#225;p n&#224;y ph&#249; h&#7907;p v&#7899;i v&#7845;n &#273;&#7873; m&#224; b&#7841;n &#273;ang g&#7863;p ph&#7843;i nh&#432; th&#7871; n&#224;o</p></li></ul><p>C&#249;ng v&#7899;i m&#7897;t lo&#7841;t nh&#7919;ng ph&#226;n t&#237;ch c&#7909; th&#7875; v&#7899;i c&#225;c use-case t&#7841;i Amazon, LinkedIn, m&#7901;i b&#7841;n &#273;&#7885;c c&#249;ng tham kh&#7843;o chi ti&#7871;t t&#7841;i <a href="https://blog.bradfieldcs.com/you-are-not-google-84912cf44afb">b&#224;i vi&#7871;t</a>.</p><h4><strong><a href="https://www.reddit.com/r/RedditEng/comments/16m3t7m/protecting_reddit_users_in_real_time_at_scale/">Protecting Reddit Users in Real Time at Scale</a></strong></h4><p><em>(Steven.do87)</em></p><p>Reddit l&#224; m&#7897;t c&#7897;ng &#273;&#7891;ng m&#7841;ng x&#227; h&#7897;i v&#7899;i h&#417;n 57 tri&#7879;u ng&#432;&#7901;i d&#249;ng t&#432;&#417;ng t&#225;c, &#273;&#259;ng t&#7843;i n&#7897;i dung v&#224; tr&#242; chuy&#7879;n v&#7899;i nhau m&#7895;i ng&#224;y. Vi&#7879;c gi&#7919; cho n&#7873;n t&#7843;ng ho&#7841;t &#273;&#7897;ng an to&#224;n, &#7893;n &#273;&#7883;nh v&#224; v&#7851;n c&#243; th&#7875; ki&#7875;m so&#225;t m&#7897;t l&#432;&#7907;ng l&#7899;n n&#7897;i dung &#273;&#259;ng t&#7843;i l&#224; m&#7897;t th&#225;ch th&#7913;c &#273;&#7889;i v&#7899;i &#273;&#7897;i ng&#361; k&#7929; s&#432; t&#7841;i Reddit nh&#7857;m ng&#259;n ch&#7863;n, ph&#225;t hi&#7879;n v&#224; h&#224;nh &#273;&#7897;ng &#273;&#7889;i v&#7899;i n&#7897;i dung &#273;&#259;ng t&#7843;i vi ph&#7841;m ch&#237;nh s&#225;ch theo th&#7901;i gian th&#7921;c.</p><p>V&#224;o n&#259;m 2016, Reddit &#273;&#227; ph&#225;t tri&#7875;n m&#7897;t b&#7897; quy t&#7855;c (Rule-engine) v&#7899;i t&#234;n g&#7885;i , Rule-Executor-V1 (REV1), &#273;&#7875; h&#7841;n ch&#7871; n&#7897;i dung vi ph&#7841;m ch&#237;nh s&#225;ch &#273;&#259;ng t&#7843;i tr&#234;n n&#7873;n t&#7843;ng Reddit theo th&#7901;i gian th&#7921;c. &#7902; c&#7845;p &#273;&#7897; qu&#7843;n l&#253;, REV1 cho ph&#233;p nh&#243;m &#273;i&#7873;u h&#224;nh Ho&#7841;t &#273;&#7897;ng An to&#224;n c&#7911;a Reddit d&#7877; d&#224;ng kh&#7903;i ch&#7841;y c&#225;c quy t&#7855;c th&#7921;c thi &#225;p d&#7909;ng cho c&#225;c lu&#7891;ng s&#7921; ki&#7879;n ph&#225;t sinh tr&#234;n Reddit, ch&#7859;ng h&#7841;n nh&#432; khi ng&#432;&#7901;i d&#249;ng t&#7841;o b&#224;i &#273;&#259;ng ho&#7863;c nh&#7853;n x&#233;t. V&#7899;i ti&#234;u ch&#237; quan tr&#7885;ng nh&#7845;t l&#224; ph&#7843;i lo&#7841;i b&#7887; s&#7921; ph&#7913;c t&#7841;p v&#7873; k&#7929; thu&#7853;t &#273;&#7875; ng&#432;&#7901;i d&#249;ng cu&#7889;i c&#243; th&#7875; t&#7853;p trung v&#224;o vi&#7879;c x&#226;y d&#7921;ng quy t&#7855;c. M&#7863;c d&#249; REV1 &#273;&#227; ch&#7913;ng minh hi&#7879;u qu&#7843; trong m&#7897;t kho&#7843;ng th&#7901;i gian ho&#7841;t &#273;&#7897;ng, tuy nhi&#234;n theo th&#7901;i gian d&#7847;n ph&#225;t sinh m&#7897;t v&#224;i v&#7845;n &#273;&#7873; m&#224; &#273;&#7897;i ng&#361; k&#7929; s&#432; t&#7841;i Reddit mu&#7889;n c&#7843;i thi&#7879;n nh&#432;:</p><ul><li><p>Ch&#7841;y tr&#234;n c&#417; s&#7903; h&#7841; t&#7847;ng k&#7871; th&#7915;a c&#7911;a c&#225;c phi&#234;n b&#7843;n EC2 raw thay v&#236; Kubernetes (K8s) v&#7889;n &#273;&#227; &#273;&#432;&#7907;c &#225;p d&#7909;ng tri&#7875;n khai l&#224;m n&#7873;n t&#7843;ng ho&#7841;t &#273;&#7897;ng cho c&#225;c d&#7883;ch v&#7909; hi&#7879;n t&#7841;i c&#7911;a Reddit.</p></li><li><p>M&#7895;i quy t&#7855;c ch&#7841;y nh&#432; m&#7897;t quy tr&#236;nh ri&#234;ng bi&#7879;t trong m&#7897;t node REV1, d&#7851;n &#273;&#7871;n c&#7847;n ph&#7843;i m&#7903; r&#7897;ng theo chi&#7873;u d&#7885;c (vertical scaling) khi nhi&#7873;u quy t&#7855;c &#273;&#432;&#7907;c &#273;&#432;a ra, &#273;i&#7873;u n&#224;y h&#243;a ra l&#224; t&#7889;n k&#233;m v&#224; thi&#7871;u &#7893;n &#273;&#7883;nh.</p></li><li><p>Ch&#7841;y tr&#234;n Python 2.7, m&#7897;t phi&#234;n b&#7843;n Python &#273;&#227; l&#7895;i th&#7901;i.</p></li><li><p>L&#7883;ch s&#7917; thay &#273;&#7893;i c&#7911;a m&#7897;t quy t&#7855;c r&#7845;t kh&#243; hi&#7875;n th&#7883; v&#236; c&#225;c quy t&#7855;c kh&#244;ng &#273;&#432;&#7907;c ki&#7875;m so&#225;t phi&#234;n b&#7843;n.</p></li><li><p>Thi&#7871;u m&#244;i tr&#432;&#7901;ng th&#7917; nghi&#7879;m (staging) trong &#273;&#243; c&#225;c quy t&#7855;c c&#243; th&#7875; &#273;&#432;&#7907;c ch&#7841;y th&#7917; nghi&#7879;m tr&#234;n d&#7919; li&#7879;u th&#7921;c t&#7871; tr&#234;n m&#244;i tr&#432;&#7901;ng product m&#224; kh&#244;ng &#7843;nh h&#432;&#7903;ng &#273;&#7871;n ng&#432;&#7901;i d&#249;ng th&#7921;c t&#7871;.</p></li></ul><p>N&#259;m 2021, c&#225;c k&#7929; s&#432; t&#7841;i Reddit &#273;&#227; ph&#225;t tri&#7875;n m&#7897;t c&#417; s&#7903; h&#7841; t&#7847;ng streaming m&#7899;i, v&#7899;i t&#234;n g&#7885;i l&#224; Snooron, &#273;&#432;&#7907;c x&#226;y d&#7921;ng d&#7921;a tr&#234;n Flink Stateful Functions &#273;&#7875; hi&#7879;n &#273;&#7841;i h&#243;a ki&#7871;n tr&#250;c c&#7911;a REV1 c&#361;ng nh&#432; h&#7895; tr&#7907; s&#7889; l&#432;&#7907;ng ng&#224;y c&#224;ng t&#259;ng c&#225;c nhu c&#7847;u &#273;&#7843;m b&#7843;o &#273;&#225;p &#7913;ng  y&#234;u c&#7847;u x&#7917; l&#253; lu&#7891;ng d&#7919; li&#7879;u. C&#249;ng tham kh&#7843;o ph&#432;&#417;ng &#225;n k&#7929; thu&#7853;t m&#224; c&#225;c k&#7929; s&#432; t&#7841;i Reddit &#273;&#227; &#225;p d&#7909;ng t&#7841;i <a href="https://www.reddit.com/r/RedditEng/comments/16m3t7m/protecting_reddit_users_in_real_time_at_scale/">b&#224;i vi&#7871;t</a>.</p><h4><strong><a href="https://www.youtube.com/watch?v=Dbr8jmtfZ7Q">Designing &amp; Building Metrics</a></strong></h4><p><em>(n^4)</em></p><p>Metric l&#224; m&#7897;t trong c&#225;c kh&#225;i ni&#7879;m quan tr&#7885;ng Business Intelligent. Gi&#7889;ng nh&#432; con ng&#432;&#7901;i c&#243; kh&#7887;e m&#7841;nh hay kh&#244;ng c&#243; th&#7875; &#273;&#432;&#7907;c ph&#7843;n &#225;nh th&#244;ng qua nhi&#7873;u ch&#7881; s&#7889; nh&#432; huy&#7871;t &#225;p, nh&#7883;p tim, &#273;&#432;&#7901;ng huy&#7871;t, oxy, ... M&#7897;t c&#244;ng ty c&#243; ph&#225;t tri&#7875;n t&#7889;t hay kh&#244;ng c&#361;ng s&#7869; &#273;&#432;&#7907;c th&#7875; hi&#7879;n th&#244;ng qua nh&#7919;ng ch&#7881; s&#7889; &#273;o l&#432;&#7901;ng (metric). </p><p>Trong th&#7901;i &#273;&#7841;i Big data ng&#224;y nay, vi&#7879;c t&#237;nh to&#225;n v&#224; t&#7893; ch&#7913;c metric c&#361;ng s&#7869; c&#224;ng ng&#224;y c&#224;ng ph&#7913;c t&#7841;p khi quy m&#244; c&#244;ng ty v&#224; th&#7883; tr&#432;&#7901;ng ng&#224;y c&#224;ng l&#7899;n. Nhi&#7873;u d&#7919; li&#7879;u, nhi&#7873;u ch&#7881; s&#7889; ph&#225;t sinh, v&#7853;y th&#236; n&#234;n t&#7893; ch&#7913;c v&#224; thi&#7871;t k&#7871; h&#7879; th&#7889;ng metrics n&#224;y nh&#432; th&#7871; n&#224;o &#273;&#7875; gi&#250;p tr&#7843; l&#7901;i &#273;&#432;&#7907;c nh&#7919;ng c&#226;u h&#7887;i n&#7873;n t&#7843;ng xoay quanh ho&#7841;t &#273;&#7897;ng doanh nghi&#7879;p m&#7897;t c&#225;ch nhanh ch&#243;ng v&#224; hi&#7879;u qu&#7843;? </p><p>Trong b&#224;i techtalk n&#224;y, ch&#250;ng ta s&#7869; c&#249;ng t&#236;m hi&#7875;u c&#225;ch c&#225;c nh&#243;m d&#7919; li&#7879;u c&#243; th&#7875; h&#7895; tr&#7907; t&#7889;t nh&#7845;t cho v&#242;ng &#273;&#7901;i c&#7911;a metrics t&#7915; &#273;&#7847;u &#273;&#7871;n cu&#7889;i:</p><p>1. Thi&#7871;t k&#7871; c&#225;c metrics h&#7919;u &#237;ch nh&#432; m&#7897;t ph&#7847;n c&#7911;a c&#226;y metrics.</p><p>2. Ph&#225;t tri&#7875;n c&#225;c metrics n&#224;y d&#7921;a tr&#234;n h&#7907;p &#273;&#7891;ng d&#7919; li&#7879;u ti&#234;u chu&#7849;n v&#224; &#7893;n &#273;&#7883;nh.</p><p>3. V&#7853;n h&#224;nh c&#225;c metrics &#273;&#7875; th&#250;c &#273;&#7849;y gi&#225; tr&#7883;.</p><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c- </strong>M&#7897;t tu&#7847;n l&#224;m vi&#7879;c c&#7911;a EM (p5)</h3><blockquote><h4><strong>Th&#7913; n&#259;m </strong>- OKR v&#224; l&#7889;i t&#432; duy impact-oriented</h4><p>M&#7897;t ho&#7841;t &#273;&#7897;ng kh&#225;c c&#361;ng hay di&#7877;n ra trong ng&#224;y th&#7913; 5 l&#224; h&#7885;p cross platform v&#224; OKR review. </p><p>Team m&#236;nh &#273;ang ph&#7909; tr&#225;ch &#273;ang ph&#225;t tri&#7875;n v&#224; v&#7853;n h&#224;nh m&#7897;t platform n&#7897;i b&#7897;. Trong c&#244;ng ty m&#236;nh c&#243; kh&#225; nhi&#7873;u platform nh&#432; v&#7853;y, m&#7895;i platform s&#7869; ch&#7883;u tr&#225;ch nhi&#7879;m gi&#7843;i quy&#7871;t m&#7897;t b&#224;i to&#225;n n&#224;o &#273;&#243; cho ng&#432;&#7901;i d&#249;ng n&#7897;i b&#7897; nh&#432; g&#7917;i message, t&#7841;o campaign, t&#7841;o data pipeline, ... M&#7897;t s&#7889; team platform c&#243; li&#234;n quan v&#7899;i nhau s&#7869; gom l&#7841;i th&#224;nh m&#7897;t t&#7893; ch&#7913;c l&#7899;n h&#417;n. L&#224;m sao &#273;&#7875; c&#225;c platform n&#224;y planning t&#7889;t v&#7899;i nhau? </p><p>&#272;&#7889;i v&#7899;i t&#7915;ng platform th&#236; m&#7895;i 6 th&#225;ng, platform &#273;&#243; s&#7869; ph&#7843;i t&#7921; review v&#224; &#273;&#7863;t ra OKR cho platform c&#7911;a m&#236;nh &#273;&#7875; &#273;&#7883;nh h&#236;nh nh&#7919;ng th&#7913; &#432;u ti&#234;n m&#224; platform mu&#7889;n x&#226;y d&#7921;ng v&#224; &#273;&#7841;t &#273;&#432;&#7907;c trong 6 th&#225;ng t&#7899;i. OKR l&#224; vi&#7871;t t&#7855;t cho Objective-Key Result. Vi&#7879;c l&#7853;p k&#7871; ho&#7841;ch s&#7917; d&#7909;ng OKR thay v&#236; &#8220;danh s&#225;ch t&#237;nh n&#259;ng&#8221; s&#7869; gi&#250;p platform t&#7853;p trung v&#224;o kh&#237;a c&#7841;nh impact h&#417;n l&#224; output c&#7911;a nh&#7919;ng th&#7913; team platform l&#224;m trong 6 th&#225;ng t&#7899;i. M&#7897;t v&#237; d&#7909; v&#7873; s&#7921; kh&#225;c bi&#7879;t n&#224;y: </p><ul><li><p>Platform A, theo m&#244; h&#236;nh t&#237;nh n&#259;ng, s&#7869; plan l&#224; trong 6 th&#225;ng t&#7899;i s&#7869; ph&#225;t tri&#7875;n t&#237;nh n&#259;ng cho ng&#432;&#7901;i d&#249;ng schedule nh&#7919;ng campaign A/B testing song song thay v&#236; tu&#7847;n t&#7921;. </p></li><li><p>Nh&#432;ng khi plan b&#7857;ng OKR, team platform A s&#7869; &#273;&#7863;t ra m&#7909;c ti&#234;u l&#224; l&#224;m sao &#273;&#7875; t&#259;ng &#273;&#432;&#7907;c l&#432;&#7907;ng A/B testing campaign di&#7877;n ra trong 1 th&#225;ng t&#7915; 8 campaign l&#234;n &#273;&#7871;n 40 campaign. Key result l&#250;c n&#224;y l&#224; t&#7881; l&#7879; campaign th&#7921;c hi&#7879;n t&#259;ng l&#234;n 500%. V&#224; gi&#7843;i ph&#225;p l&#224; x&#226;y d&#7921;ng t&#237;nh n&#259;ng nh&#432; &#273;&#227; n&#243;i &#7903; tr&#234;n.</p></li></ul><p>Vi&#7879;c planning theo OKR nh&#432; th&#7871; n&#224;y s&#7869; mang &#273;&#7871;n nhi&#7873;u s&#7921; thay &#273;&#7893;i v&#7873; m&#7863;t t&#432; duy:</p><ul><li><p><strong>Team t&#7853;p trung v&#224;o impact v&#224; problem statement h&#417;n.</strong> Tr&#225;nh t&#236;nh tr&#7841;ng ph&#225;t tri&#7875;n nhi&#7873;u t&#237;nh n&#259;ng hay, nh&#432;ng h&#243;a ra l&#7841;i kh&#244;ng gi&#7843;i quy&#7871;t &#273;&#432;&#7907;c v&#7845;n &#273;&#7873; c&#7847;n gi&#7843;i quy&#7871;t.</p></li><li><p><strong>C&#244;ng ngh&#7879; &#273;&#243;ng vai tr&#242; c&#244;ng c&#7909;.</strong> N&#7871;u trong qu&#225; tr&#236;nh planning team t&#236;m ra &#273;&#432;&#7907;c gi&#7843;i ph&#225;p kh&#225;c &#273;&#7875; &#273;&#7841;t &#273;&#432;&#7907;c c&#249;ng m&#7909;c ti&#234;u k&#7875; tr&#234;n th&#236; team s&#7869; c&#226;n nh&#7855;c thay &#273;&#7893;i ph&#432;&#417;ng &#225;n thay v&#236; b&#225;m v&#224;o solution ban &#273;&#7847;u. Quan tr&#7885;ng l&#224; m&#7909;c ti&#234;u v&#224; problem ko &#273;&#7893;i, solution c&#243; th&#7875; &#273;&#7893;i. Gi&#7889;ng v&#237; d&#7909; tr&#234;n, n&#7871;u team thay &#273;&#7893;i g&#243;c nh&#236;n, thay v&#236; x&#226;y d&#7921;ng t&#237;nh n&#259;ng m&#7899;i th&#236; l&#7841;i t&#236;m c&#225;ch &#273;i&#7873;u ch&#7881;nh thi&#7871;t k&#7871; &#273;&#7875; m&#7895;i campaign A/B testing ch&#7841;y ng&#7855;n h&#417;n ch&#7859;ng h&#7841;n. </p></li></ul><p>Gi&#7919;a c&#225;c platform c&#243; th&#7875; c&#243; joint-OKR, g&#7885;i l&#224; m&#7909;c ti&#234;u chung c&#7847;n s&#7921; c&#7897;ng t&#225;c c&#7911;a nhi&#7873;u team. &#272;&#7863;t ra joint-OKR n&#224;y l&#224; m&#7897;t c&#225;ch &#273;&#7875; c&#225;c team commit th&#7901;i gian v&#224; c&#243; s&#7921; th&#7887;a hi&#7879;p t&#432;&#417;ng &#7913;ng.</p><h4><strong>Th&#7913; s&#225;u </strong>- Growth day</h4><p>C&#244;ng vi&#7879;c h&#224;ng ng&#224;y c&#7911;a m&#7897;t b&#7841;n k&#7929; s&#432; ph&#7847;n m&#7873;m c&#243; th&#7875; chia th&#224;nh hai nh&#243;m ch&#237;nh sau:</p><p>- X&#226;y d&#7921;ng ph&#7847;n m&#7873;m</p><p>- V&#7853;n h&#224;nh ph&#7847;n m&#7873;m</p><p> X&#226;y d&#7921;ng ph&#7847;n m&#7873;m, b&#7843;n ch&#7845;t l&#224; s&#7917; d&#7909;ng ki&#7871;n th&#7913;c v&#224; k&#7929; n&#259;ng l&#7853;p tr&#236;nh &#273;&#7875; t&#7841;o ra nh&#7919;ng d&#242;ng m&#227; gi&#250;p gi&#7843;i quy&#7871;t m&#7897;t v&#7845;n &#273;&#7873; n&#224;o &#273;&#243; c&#243; trong t&#7893; ch&#7913;c. V&#7845;n &#273;&#7873; &#273;&#243; c&#243; th&#7875; l&#224; v&#7845;n &#273;&#7873; thi&#234;n v&#7873; h&#432;&#7899;ng business v&#237; d&#7909; nh&#432; x&#226;y d&#7921;ng m&#7897;t t&#237;nh n&#259;ng tr&#234;n app gi&#250;p &#273;&#7883;nh h&#432;&#7899;ng ng&#432;&#7901;i d&#249;ng, ho&#7863;c m&#7897;t v&#7845;n &#273;&#7873; v&#7873; v&#7853;n h&#224;nh h&#7879; th&#7889;ng v&#237; d&#7909; nh&#432; x&#226;y d&#7921;ng thu&#7853;t to&#225;n &#273;i&#7873;u h&#432;&#7899;ng background job &#273;&#7875; t&#259;ng throughput....</p><p>&#272;&#7875; t&#7841;o ra &#273;&#432;&#7907;c ph&#7847;n m&#7873;m &#273;&#250;ng th&#236; ph&#7843;i hi&#7875;u b&#7843;n ch&#7845;t nhu c&#7847;u t&#7841;i sao l&#7841;i c&#7847;n ph&#7847;n m&#7873;m &#273;&#243; &#273;&#7875; t&#7915; &#273;&#243; &#273;&#432;a ra &#273;&#432;&#7907;c gi&#7843;i ph&#225;p ph&#249; h&#7907;p. V&#224; &#273;&#7875; hi&#7875;u b&#7843;n ch&#7845;t c&#7911;a v&#7845;n &#273;&#7873; m&#224; b&#7843;n th&#226;n &#273;ang c&#7847;n gi&#7843;i quy&#7871;t, ng&#432;&#7901;i k&#7929; s&#432; c&#7847;n c&#243; m&#7897;t l&#432;&#7907;ng ki&#7871;n th&#7913;c nh&#7845;t &#273;&#7883;nh trong l&#297;nh v&#7921;c t&#432;&#417;ng &#7913;ng. T&#7915; &#273;&#243; s&#7869; ph&#225;t sinh nhu c&#7847;u h&#7885;c h&#7887;i th&#234;m v&#7873; l&#297;nh v&#7921;c m&#224; b&#7843;n th&#226;n &#273;ang l&#224;m. V&#237; d&#7909; nh&#432; l&#224;m m&#7897;t h&#7879; th&#7889;ng thi&#234;n v&#7873; marketing th&#236; c&#361;ng c&#7847;n b&#7893; sung ki&#7871;n th&#7913;c v&#7873; marketing &#273;&#7875; c&#243; th&#7875; hi&#7875;u r&#245; h&#417;n ng&#432;&#7901;i d&#249;ng v&#224; x&#226;y ph&#7847;n m&#7873;m h&#7919;u &#237;ch h&#417;n. </p><p>V&#7853;n h&#224;nh ph&#7847;n m&#7873;m, l&#224; theo d&#245;i, ki&#7875;m tra, gi&#225;m s&#225;t ph&#7847;n m&#7873;m m&#224; b&#7843;n th&#226;n x&#226;y d&#7921;ng &#273;&#7875; c&#243; nh&#7919;ng can thi&#7879;p c&#7847;n thi&#7871;t, &#273;&#7843;m b&#7843;o h&#7879; th&#7889;ng v&#7853;n h&#224;nh &#273;&#432;&#7907;c th&#244;ng su&#7889;t. Gi&#7889;ng nh&#432; m&#7897;t ng&#432;&#7901;i k&#7929; s&#432; &#273;i&#7879;n c&#243; th&#7875; tham gia thi&#7871;t k&#7871; h&#7879; th&#7889;ng &#273;i&#7879;n trong m&#7897;t t&#242;a nh&#224;, h&#7885; c&#361;ng c&#243; th&#7875; tham gia v&#224;o qu&#225; tr&#236;nh b&#7843;o tr&#236;, ki&#7875;m tra &#273;&#7875; &#273;&#7843;m b&#7843;o kh&#244;ng c&#243; s&#7921; c&#7889; &#273;i&#7879;n x&#7843;y ra.</p><p>C&#244;ng vi&#7879;c h&#224;ng ng&#224;y c&#7911;a software engineer l&#224; ph&#7843;i ra quy&#7871;t &#273;&#7883;nh r&#7845;t nhi&#7873;u. T&#7915; nh&#7919;ng quy&#7871;t &#273;&#7883;nh c&#417; b&#7843;n t&#7915; vi&#7879;c ch&#7885;n c&#7845;u tr&#250;c d&#7919; li&#7879;u n&#224;o, thi&#7871;t k&#7871; model nh&#432; th&#7871; n&#224;o, d&#249;ng while hay d&#249;ng for, &#8230; &#273;&#7871;n nh&#7919;ng quy&#7871;t &#273;&#7883;nh d&#7847;n l&#7899;n h&#417;n nh&#432; ph&#7843;i thi&#7871;t k&#7871; h&#7879; th&#7889;ng g&#7891;m nh&#7919;ng th&#224;nh ph&#7847;n n&#224;o, ph&#7843;i tri&#7875;n khai th&#224;nh ph&#7847;n n&#224;o tr&#432;&#7899;c n&#224;o sau, &#8230; cho &#273;&#7871;n nh&#7919;ng quy&#7871;t &#273;&#7883;nh mang t&#237;nh chi&#7871;n l&#432;&#7907;c h&#417;n n&#7919;a nh&#432; n&#234;n thay &#273;&#7893;i nh&#7919;ng platform n&#224;o, nh&#7919;ng platform n&#224;o n&#234;n x&#243;a b&#7887;, nh&#7919;ng platform n&#224;o c&#7847;n x&#226;y m&#7899;i, &#8230; C&#7845;p b&#7853;c c&#224;ng cao trong t&#7893; ch&#7913;c, d&#249; l&#224; IC hay manager th&#236; vi&#7879;c ra quy&#7871;t &#273;&#7883;nh c&#224;ng kh&#243; v&#224; ph&#7913;c t&#7841;p. T&#432;&#417;ng &#7913;ng v&#7899;i vi&#7879;c &#273;&#243; l&#224; chi ph&#237; ph&#7843;i b&#7887; ra cho m&#7895;i sai l&#7847;m c&#361;ng l&#7899;n h&#417;n. </p><p>T&#7893;ng h&#7907;p c&#7843; ba t&#236;nh hu&#7889;ng tr&#234;n l&#7841;i, theo m&#236;nh ng&#432;&#7901;i k&#7929; s&#432; c&#7847;n kh&#244;ng ng&#7915;ng h&#7885;c h&#7887;i v&#7873; chuy&#234;n m&#244;n k&#7929; thu&#7853;t, v&#7873; ki&#7871;n th&#7913;c domain c&#7911;a l&#297;nh v&#7921;c &#273;ang l&#224;m, k&#7929; n&#259;ng m&#7873;m nh&#432; ra quy&#7871;t &#273;&#7883;nh, ... &#273;&#7875; ho&#224;n thi&#7879;n m&#236;nh h&#417;n. V&#224; ng&#224;y th&#7913; 6 s&#7869; t&#7841;m g&#7885;i l&#224; ng&#224;y growth day &#273;&#7875; b&#7843;n th&#226;n v&#224; team c&#243; th&#7875; d&#224;nh th&#234;m th&#7901;i gian &#273;&#7875; &#273;&#7885;c t&#224;i li&#7879;u n&#7897;i b&#7897;, post mortem, wiki, product design docs, ... </p></blockquote><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/rotate-image/">Rotate Image</a></h4><p>Cho m&#7843;ng 2 chi&#7873;u n x n. Th&#7921;c hi&#7879;n xoay m&#7843;ng n&#224;y 90 &#273;&#7897; theo chi&#7873;u kim &#273;&#7891;ng h&#7891; m&#224; kh&#244;ng s&#7917; d&#7909;ng m&#7843;ng ph&#7909;.</p><p>V&#237; d&#7909;:</p><ul><li><p>Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]</p></li><li><p>Output: [[7,4,1],[8,5,2],[9,6,3]]</p></li></ul><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/split-array-largest-sum/description/">Split Array Largest Sum</a></h4><p>G&#7885;i <strong>f(i,j)</strong> l&#224; gi&#225; tr&#7883; t&#7889;i &#432;u th&#7887;a m&#227;n &#273;&#7873; b&#224;i khi chia m&#7843;ng con t&#7915; v&#7883; tr&#237; <strong>`i`</strong> &#273;&#7871;n cu&#7889;i m&#7843;ng th&#224;nh <strong>`j`</strong> ph&#7847;n.</p><p>S&#7917; d&#7909;ng &#273;&#7879; quy &#273;&#7875; t&#237;nh to&#225;n c&#225;c gi&#225; tr&#7883; n&#224;y b&#7857;ng c&#225;ch th&#7917; t&#7845;t c&#7843; c&#225;c kh&#7843; n&#259;ng chia m&#7843;ng con, t&#236;m gi&#225; tr&#7883; t&#7889;i &#432;u nh&#7845;t sao cho t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; nh&#7887; nh&#7845;t khi chia m&#7843;ng con b&#7855;t &#273;&#7847;u t&#7915; i th&#224;nh j ph&#7847;n.</p><p>Sau &#273;&#243; l&#432;u tr&#7919; c&#225;c gi&#225; tr&#7883; t&#7889;i &#432;u &#273;&#227; t&#237;nh tr&#432;&#7899;c &#273;&#243; &#273;&#7875; tr&#225;nh t&#237;nh to&#225;n l&#7863;p l&#7841;i trong c&#225;c l&#7847;n g&#7885;i &#273;&#7879; quy sau. (k&#7929; thu&#7853;t n&#224;y g&#7885;i l&#224; memoization, th&#432;&#7901;ng s&#7917; d&#7909;ng &#273;&#7875; t&#7889;i &#432;u m&#7897;t gi&#7843;i thu&#7853;t &#273;&#7879; quy th&#224;nh gi&#7843;i thu&#7853;t quy ho&#7841;ch &#273;&#7897;ng top down).</p><p>Gi&#7843;i thu&#7853;t c&#7909; th&#7875; m&#7901;i b&#7841;n &#273;&#7885;c tham kh&#7843;o l&#7901;i gi&#7843;i b&#7857;ng b&#7857;ng ng&#244;n ng&#7919; Java sau &#273;&#226;y.</p><pre><code><code>class Solution {
    public int splitArray(int[] nums, int m) {
        int n = nums.length;
        int[][] memo = new int[n][m + 1];

        for (int i = 0; i &lt; n; i++) {
            Arrays.fill(memo[i], -1);
        }

        return splitArrayHelper(nums, 0, m, memo);
    }

    private int splitArrayHelper(int[] nums, int i, int j, int[][] memo) {
        if (j == 1) { // N&#7871;u j = 1, tr&#7843; v&#7873; t&#7893;ng c&#7911;a m&#7843;ng con &#273;&#243;
            int sum = 0;
            for (int k = i; k &lt; nums.length; k++) {
                sum += nums[k];
            }
            return sum;
        }

        if (memo[i][j] != -1) { // Tr&#7843; v&#7873; gi&#225; tr&#7883; t&#7889;i &#432;u &#273;&#227; t&#237;nh to&#225;n tr&#432;&#7899;c &#273;&#243;
            return memo[i][j];
        }

        int minMaxSum = Integer.MAX_VALUE;

        int currentSum = 0;
        for (int k = i; k &lt;= nums.length - j; k++) {
            // T&#237;nh to&#225;n gi&#225; tr&#7883; currentSum cho c&#225;ch chia hi&#7879;n t&#7841;i
            currentSum += nums[k];
            // G&#7885;i &#273;&#7879; quy cho c&#225;ch chia m&#7843;ng ti&#7871;p theo
            int maxSumInPartition = Math.max(currentSum, splitArrayHelper(nums, k+1, j-1, memo));
            // Tr&#7843; v&#7873; gi&#225; tr&#7883; t&#7889;i &#432;u nh&#7845;t (t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; nh&#7887; nh&#7845;t khi chia m&#7843;ng con b&#7855;t &#273;&#7847;u t&#7915; i th&#224;nh j ph&#7847;n)
            minMaxSum = Math.min(minMaxSum, maxSumInPartition);
        }

        memo[i][j] = minMaxSum;
        return minMaxSum;
    }
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p thu&#7853;t to&#225;n c&#7911;a l&#7901;i gi&#7843;i tr&#234;n l&#224; <em>O(n^2</em>  m)*, trong &#273;&#243;:</p><ul><li><p>n l&#224; s&#7889; l&#432;&#7907;ng ph&#7847;n t&#7917; trong m&#7843;ng nums.</p></li><li><p>m l&#224; s&#7889; l&#432;&#7907;ng ph&#226;n &#273;o&#7841;n c&#7847;n t&#7841;o.</p></li></ul><p>Trong h&#224;m <strong>splitArrayHelper</strong>, ch&#250;ng ta duy&#7879;t qua t&#7845;t c&#7843; c&#225;c v&#7883; tr&#237; c&#243; th&#7875; &#273;&#7875; chia m&#7843;ng con v&#224; g&#7885;i &#273;&#7879; quy cho t&#7915;ng tr&#432;&#7901;ng h&#7907;p. Do &#273;&#243;, ch&#250;ng ta c&#243; <strong>O(n)</strong> l&#7847;n l&#7863;p, v&#224; trong m&#7895;i l&#7847;n l&#7863;p, ch&#250;ng ta th&#7921;c hi&#7879;n <strong>O(n)</strong> l&#7847;n &#273;&#7879; quy (v&#236; trong tr&#432;&#7901;ng h&#7907;p x&#7845;u nh&#7845;t, c&#243; th&#7875; ph&#7843;i chia m&#7843;ng con t&#7915; i &#273;&#7871;n n). Ngo&#224;i ra, ch&#250;ng ta c&#361;ng c&#243; O(m) m&#7843;ng con c&#7847;n t&#7841;o. V&#236; v&#7853;y, t&#7893;ng &#273;&#7897; ph&#7913;c t&#7841;p l&#224; O(n^2 * m).</p><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>"Science is a way of thinking more clearly about the world around us." </p><p>- Carl Sagan, astronomer and cosmologist -</p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#264 - Why We Killed Our End-to-End Test Suite]]></title><description><![CDATA[Ch&#250;c c&#225;c b&#7841;n c&#243; m&#7897;t k&#7923; ngh&#7881; l&#7877; vui v&#7867; b&#234;n gia &#273;&#236;nh nh&#233;!]]></description><link>https://newsletter.grokking.org/p/264-why-we-killed-our-end-to-end</link><guid isPermaLink="false">https://newsletter.grokking.org/p/264-why-we-killed-our-end-to-end</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 03 Sep 2023 09:36:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oaPu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>&#128478;&#65039;<strong>News</strong></h3><ul><li><p><a href="https://devblogs.microsoft.com/visualstudio/visual-studio-for-mac-retirement-announcement/">Visual Studio for Mac Retirement Announcement</a></p></li><li><p><a href="https://openai.com/blog/introducing-chatgpt-enterprise">Introducing ChatGPT Enterprise</a></p></li><li><p><a href="https://ai.meta.com/blog/code-llama-large-language-model-coding/">Introducing Code Llama, a state-of-the-art large language model for coding</a></p></li></ul><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://building.nubank.com.br/why-we-killed-our-end-to-end-test-suite/">Why We Killed Our End-to-End Test Suite</a></h4><p><em>(by lpv)</em></p><p>Tr&#432;&#7899;c &#273;&#226;y, t&#7841;i Nubank s&#7917; d&#7909;ng <strong>End-to-End test</strong> &#273;&#7875; t&#236;m ra nh&#7919;ng v&#7845;n &#273;&#7873; trong m&#7897;t ki&#7871;n tr&#250;c microservices trong m&#244;i tr&#432;&#7901;ng staging. End-to-End test c&#243; ngh&#297;a l&#224; k&#237;ch ho&#7841;t m&#7897;t trong c&#225;c &#273;&#7847;u v&#224;o c&#7911;a h&#7879; th&#7889;ng (b&#7857;ng c&#225;ch s&#7917; d&#7909;ng HTTP request ho&#7863;c t&#7841;o m&#7897;t message asynchronous t&#7899;i m&#7897;t topic). Khi &#273;&#243;, h&#7879; th&#7889;ng th&#432;&#7901;ng s&#7869; th&#7921;c hi&#7879;n m&#7897;t v&#224;i t&#432;&#417;ng t&#225;c gi&#7919;a c&#225;c th&#224;nh ph&#7847;n th&#244;ng qua Http request ho&#7863;c nh&#7919;ng message asynchronous kh&#225;c v.v... T&#237;nh h&#7907;p l&#7879; c&#7911;a c&#225;c t&#432;&#417;ng t&#225;c n&#224;y c&#243; th&#7875; &#273;&#432;&#7907;c ki&#7875;m tra b&#7857;ng c&#225;ch ki&#7875;m tra c&#225;c k&#7871;t qu&#7843; &#273;&#7847;u ra c&#7909; th&#7875;.</p><p>Tuy nhi&#234;n c&#225;ch l&#224;m n&#224;y c&#243; r&#7845;t nhi&#7873;u nh&#432;&#7907;c &#273;i&#7875;m m&#7863;c d&#249; h&#7847;u h&#7871;t c&#225;c c&#244;ng ty v&#7851;n tin r&#7857;ng E2E Testing l&#224; c&#225;ch t&#7889;t nh&#7845;t &#273;&#7875; ph&#225;t hi&#7879;n l&#7895;i, tuy nhi&#234;n l&#7841;i khi&#7871;n cho qu&#225; tr&#236;nh delivery di&#7877;n ra c&#224;ng ng&#224;y c&#224;ng ch&#7853;m.</p><p>- Nh&#7919;ng thay &#273;&#7893;i manually tr&#234;n staging g&#226;y &#7843;nh h&#432;&#7903;ng t&#7899;i test data v&#224; vi&#7879;c ph&#7843;i maintain &#273;&#7875; &#273;&#7843;m b&#7843;o m&#244;i tr&#432;&#7901;ng clean tr&#7903; th&#224;nh 1 v&#7845;n &#273;&#7873;.</p><p>- Ch&#7853;m tr&#7877; trong vi&#7879;c delivery.</p><p>- &#205;t bug &#273;&#432;&#7907;c ph&#225;t hi&#7879;n tr&#234;n staging. M&#7897;t th&#7917; nghi&#7879;m cho th&#7845;y v&#7899;i h&#417;n 1000 l&#7847;n ch&#7841;y, ch&#7881; c&#243; 42 l&#7847;n ch&#7841;y th&#7845;t b&#7841;i v&#224; 1 bug &#273;&#432;&#7907;c ph&#225;t hi&#7879;n.</p><p>- K&#233;m hi&#7879;u qu&#7843;, bug v&#7851;n th&#432;&#7901;ng xuy&#234;n &#273;&#432;&#7907;c t&#236;m th&#7845;y tr&#234;n production.</p><p>V&#7853;y n&#7871;u &#273;i&#7873;u n&#224;y ti&#7871;p t&#7909;c di&#7877;n ra, ch&#250;ng ta s&#7869; m&#7845;t nhi&#7873;u th&#7901;i gian h&#417;n trong qu&#225; tr&#236;nh CI/CD. M&#7885;i ng&#432;&#7901;i s&#7869; th&#7921;c hi&#7879;n c&#225;c &#273;&#7907;t commit v&#7899;i nhi&#7873;u thay &#273;&#7893;i h&#417;n v&#224; m&#7845;t nhi&#7873;u th&#7901;i gian h&#417;n &#273;&#7875; tri&#7875;n khai, &#273;&#7891;ng th&#7901;i v&#7851;n c&#243; th&#7875; x&#7843;y ra l&#7895;i tr&#234;n production. T&#236;nh hu&#7889;ng t&#432;&#417;ng t&#7921; c&#361;ng x&#7843;y ra t&#7841;i nhi&#7873;u c&#244;ng ty kh&#225;c trong qu&#225; tr&#236;nh th&#7921;c hi&#7879;n E2E Test.</p><p>T&#7915; &#273;&#243; t&#7841;i Nubank &#273;&#227; s&#7917; d&#7909;ng <strong>Consumer Driven Contract (CDC) testing</strong> &#273;&#7875; thay th&#7871; E2E Test. CDC Testing cho ph&#233;p m&#244; t&#7843; s&#7921; t&#432;&#417;ng t&#225;c gi&#7919;a c&#225;c d&#7883;ch v&#7909; th&#244;ng qua nh&#7919;ng k&#7923; v&#7885;ng input/output m&#224; ch&#250;ng &#273;&#225;p &#7913;ng. CDC cho ph&#233;p c&#225;c team c&#243; th&#7875; ho&#7841;t &#273;&#7897;ng m&#7897;t c&#225;ch &#273;&#7897;c l&#7853;p v&#7899;i nhau, &#273;&#242;i h&#7887;i &#237;t s&#7921; ph&#7889;i h&#7907;p c&#361;ng nh&#432; c&#417; s&#7903; h&#7841; t&#7847;ng h&#417;n.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/split-array-largest-sum/description/">Split Array Largest Sum</a></h4><p>Cho m&#7897;t m&#7843;ng s&#7889; nguy&#234;n kh&#244;ng &#226;m nums v&#224; m&#7897;t s&#7889; nguy&#234;n d&#432;&#417;ng k, h&#227;y chia m&#7843;ng nums th&#224;nh k m&#7843;ng con (kh&#244;ng r&#7895;ng) sao cho ta thu &#273;&#432;&#7907;c nh&#7919;ng m&#7843;ng con v&#7899;i t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; nh&#7887; nh&#7845;t. H&#227;y tr&#7843; l&#7841;i t&#7893;ng l&#7899;n nh&#7845;t m&#224; ta c&#243; th&#7875; thu &#273;&#432;&#7907;c.</p><p>V&#237; d&#7909;:</p><p>Input: nums = [7,2,5,10,8], k = 2</p><p>Output: 18</p><p>Gi&#7843;i th&#237;ch: Ta c&#243; 4 c&#225;ch &#273;&#7875; chia m&#7843;ng nums th&#224;nh 2 m&#7843;ng con nh&#432; sau:</p><p>C&#225;ch 1, ta c&#243; [7] v&#224; [2,5,10,8], v&#7899;i t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; 25.</p><p>C&#225;ch 2, ta c&#243; [7,2] v&#224; [5,10,8], v&#7899;i t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; 23.</p><p>C&#225;ch 3, ta c&#243; [7,2,5] v&#224; [10,8], v&#7899;i t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; 18.</p><p>C&#225;ch 4, ta c&#243; [7,2,5,10] v&#224; [8], v&#7899;i t&#7893;ng l&#7899;n nh&#7845;t trong s&#7889; c&#225;c m&#7843;ng con l&#224; 24.</p><p>Nh&#432; v&#7853;y, c&#225;ch chia t&#7889;t nh&#7845;t l&#224; chia th&#224;nh hai m&#7843;ng con [7,2,5] v&#224; [10,8], v&#7899;i t&#7893;ng l&#7899;n nh&#7845;t l&#224; 18.</p><blockquote><p><strong>&#7912;ng d&#7909;ng c&#7911;a thu&#7853;t to&#225;n n&#224;y?</strong></p><p>H&#227;y t&#432;&#7903;ng t&#432;&#7907;ng b&#7841;n &#273;ang qu&#7843;n l&#253; m&#7897;t &#273;&#7897;i xe giao h&#224;ng c&#243; <strong>nTrucks </strong>chi&#7871;c xe cho m&#7897;t c&#244;ng ty logistics. B&#7841;n c&#243; m&#7897;t danh s&#225;ch c&#225;c &#273;&#417;n &#273;&#7863;t h&#224;ng &#273;&#432;&#7907;c bi&#7875;u th&#7883; d&#432;&#7899;i d&#7841;ng m&#7897;t m&#7843;ng s&#7889; nguy&#234;n <strong>orderWeights</strong>, trong &#273;&#243; m&#7895;i ph&#7847;n t&#7917; &#273;&#7841;i di&#7879;n cho tr&#7885;ng l&#432;&#7907;ng c&#7911;a m&#7897;t &#273;&#417;n &#273;&#7863;t h&#224;ng t&#237;nh b&#7857;ng kilogram. M&#7909;c ti&#234;u c&#7911;a b&#7841;n l&#224; chia c&#225;c &#273;&#417;n h&#224;ng n&#224;y cho c&#225;c xe trong &#273;&#7897;i giao h&#224;ng, sao cho tr&#7885;ng l&#432;&#7907;ng t&#7889;i &#273;a m&#224; b&#7845;t k&#7923; xe giao h&#224;ng n&#224;o mang l&#224; t&#7889;i thi&#7875;u. Trong t&#236;nh hu&#7889;ng n&#224;y:</p><ul><li><p><strong>orderWeights</strong> t&#432;&#417;ng &#7913;ng v&#7899;i tr&#7885;ng l&#432;&#7907;ng c&#7911;a c&#225;c &#273;&#417;n &#273;&#7863;t h&#224;ng kh&#225;c nhau c&#7847;n &#273;&#432;&#7907;c giao h&#224;ng.</p></li><li><p><strong>nTrucks</strong> l&#224; s&#7889; l&#432;&#7907;ng xe b&#7841;n c&#243; trong &#273;&#7897;i giao h&#224;ng.</p></li></ul><p>Nhi&#7879;m v&#7909; c&#7911;a b&#7841;n l&#224; t&#236;m c&#225;ch ph&#226;n c&#244;ng &#273;&#417;n &#273;&#7863;t h&#224;ng v&#224;o c&#225;c l&#7897; tr&#236;nh m&#7897;t c&#225;ch t&#7889;i &#432;u, &#273;&#7843;m b&#7843;o r&#7857;ng kh&#244;ng c&#243; xe n&#224;o b&#7883; qu&#225; t&#7843;i v&#224; tr&#7885;ng l&#432;&#7907;ng &#273;&#432;&#7907;c mang b&#7903;i xe n&#7863;ng nh&#7845;t l&#224; th&#7845;p nh&#7845;t c&#243; th&#7875;. Tr&#7885;ng l&#432;&#7907;ng t&#7889;i &#273;a &#273;&#432;&#7907;c gi&#7843;m xu&#7889;ng tr&#234;n b&#7845;t k&#7923; xe n&#224;o &#273;&#7841;i di&#7879;n cho hi&#7879;u su&#7845;t c&#7911;a ho&#7841;t &#273;&#7897;ng giao h&#224;ng c&#7911;a b&#7841;n.</p><div class="poll-embed" data-attrs="{&quot;id&quot;:98958}" data-component-name="PollToDOM"></div></blockquote><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/minimum-number-of-people-to-teach/">Minimum Number of People to Teach</a></h4><p>Do &#273;&#7873; b&#224;i ch&#7881; cho ph&#233;p ta d&#7841;y m&#7897;t ng&#244;n ng&#7919;, n&#234;n ta c&#243; th&#7875; t&#236;m ng&#244;n ng&#7919; tho&#7843; m&#227;n &#273;i&#7873;u ki&#7879;n &#273;&#7873; b&#224;i b&#7857;ng c&#225;ch th&#7917; d&#7841;y t&#7915;ng ng&#244;n ng&#7919; r&#7891;i ch&#7885;n ng&#244;n ng&#7919; c&#7847;n &#237;t s&#7889; ng&#432;&#7901;i h&#7885;c nh&#7845;t. Ta th&#7921;c hi&#7879;n gi&#7843;i thu&#7853;t tr&#234;n theo c&#225;c b&#432;&#7899;c nh&#432; sau:</p><ol><li><p>T&#236;m nh&#7919;ng c&#7863;p kh&#244;ng th&#7875; giao ti&#7871;p v&#7899;i nhau</p></li><li><p>Th&#7917; d&#7841;y t&#7915;ng ng&#244;n ng&#7919; cho c&#225;c c&#7863;p kh&#244;ng th&#7875; giao ti&#7871;p v&#7899;i nhau &#273;&#7875; t&#236;m ra s&#7889; ng&#432;&#7901;i h&#7885;c nh&#7887; nh&#7845;t</p></li></ol><p>&#8204;Gi&#7843;i thu&#7853;t &#273;&#432;&#7907;c th&#7921;c hi&#7879;n nh&#432; sau:</p><pre><code><code>class Solution {
    public int minimumTeachings(int n, int[][] languages, int[][] friendships) {
        // map of user and speakable languages
        Map&lt;Integer, Set&lt;Integer&gt;&gt; userLanguages = new HashMap&lt;&gt;();
        for (int i = 0; i &lt; languages.length; i++) {
            userLanguages.put(i + 1, new HashSet&lt;&gt;());
            for (int l : languages[i]) {
                userLanguages.get(i + 1).add(l);
            }
        }

        // find the friendships w/o common language
        boolean[] canCommunicate = new boolean[friendships.length];
        for (int l = 1; l &lt;= n; l++) {
            for (int i = 0; i &lt; friendships.length; i++) {
                if (userLanguages.get(friendships[i][0]).contains(l) &amp;&amp;
                    userLanguages.get(friendships[i][1]).contains(l)) {
                    canCommunicate[i] = true;
                }
            }
        }

        // find language that can be taught to min users
        int ans = 500; // maximum of number of users is 500
        for (int l = 1; l &lt;= n; l++) {
            Set&lt;Integer&gt; countUsersToTeach = new HashSet&lt;&gt;();

            for (int i = 0; i &lt; friendships.length; i++) {
                int u1 = friendships[i][0];
                int u2 = friendships[i][1];
                if (canCommunicate[i]) {
                    continue;
                }
                if (!userLanguages.get(u1).contains(l)) {
                    countUsersToTeach.add(u1);
                }
                if (!userLanguages.get(u2).contains(l)) {
                    countUsersToTeach.add(u2);
                }
            }
            ans = Math.min(ans, countUsersToTeach.size());
        }
        return ans;
    }
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p v&#7873; th&#7901;i gian (time complexity) c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(m*n), trong &#273;&#243; m l&#224; s&#7889; ng&#432;&#7901;i, n l&#224; s&#7889; ng&#244;n ng&#7919;.</p><p>&#8204;Ngo&#224;i c&#225;ch ti&#7871;p c&#7853;n tr&#234;n, ta c&#361;ng c&#243; th&#7875; t&#236;m ng&#244;n ng&#7919; tho&#7843; m&#227;n &#273;i&#7873;u ki&#7879;n &#273;&#7873; b&#224;i nh&#432; sau:</p><ol><li><p>T&#236;m nh&#7919;ng c&#7863;p kh&#244;ng th&#7875; giao ti&#7871;p &#273;&#432;&#7907;c v&#7899;i nhau</p></li><li><p>T&#236;m ng&#244;n ng&#7919; &#273;&#432;&#7907;c nhi&#7873;u ng&#432;&#7901;i bi&#7871;t nh&#7845;t, v&#224; d&#7841;y l&#7841;i cho nh&#7919;ng ng&#432;&#7901;i c&#242;n l&#7841;i</p></li></ol><p>Ngo&#224;i ra, c&#242;n m&#7897;t c&#225;ch gi&#7843;i kh&#225;c d&#249;ng binary search. Xin d&#224;nh l&#7841;i cho c&#225;c b&#7841;n &#273;&#7885;c c&#249;ng kh&#225;m ph&#225;.</p><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c- </strong>M&#7897;t tu&#7847;n l&#224;m vi&#7879;c c&#7911;a EM (p4)</h3><blockquote><h4><strong>Th&#7913; n&#259;m </strong>- ph&#7887;ng v&#7845;n v&#224; high-level org coordination</h4><p>D&#7841;o g&#7847;n &#273;&#226;y hay c&#243; ph&#7887;ng v&#7845;n &#273;&#7875; m&#7903; r&#7897;ng team. B&#7843;n th&#226;n m&#236;nh sau g&#7847;n 1 n&#259;m kh&#244;ng tuy&#7875;n ng&#432;&#7901;i c&#361;ng b&#7855;t &#273;&#7847;u l&#224;m quen l&#7841;i v&#7899;i c&#225;c quy tr&#236;nh t&#7915; vi&#7871;t JD, &#273;&#259;ng tuy&#7875;n, l&#7885;c CV, ph&#7887;ng v&#7845;n, offer, &#8230; v&#224; ph&#225;t hi&#7879;n ra sau g&#7847;n 1 n&#259;m quan &#273;i&#7875;m c&#361;ng &#237;t nhi&#7873;u thay &#273;&#7893;i v&#7873; quy tr&#236;nh n&#224;y.</p><p><strong>Vi&#7871;t JD</strong>. Sau m&#7897;t th&#7901;i gian d&#224;i ch&#7881; d&#249;ng nh&#7919;ng m&#7851;u JD tr&#234;n m&#7841;ng ho&#7863;c vi&#7871;t nh&#7919;ng c&#226;u chung chung, m&#236;nh b&#7855;t &#273;&#7847;u ph&#225;t hi&#7879;n ra l&#224; &#273;&#7875; vi&#7871;t JD &#273;&#432;&#7907;c t&#7889;t th&#236; b&#7843;n th&#226;n ng&#432;&#7901;i manager ph&#7843;i th&#7921;c s&#7921; hi&#7875;u nhu c&#7847;u c&#7911;a m&#236;nh. Vi&#7879;c vi&#7871;t JD chi ti&#7871;t v&#224; th&#7921;c t&#7871; s&#7869; gi&#250;p cho &#7913;ng vi&#234;n t&#7921; x&#225;c &#273;&#7883;nh b&#7843;n th&#226;n c&#243; ph&#249; h&#7907;p kh&#244;ng, ho&#7863;c c&#225;c b&#7841;n talent acquisition, headhunter c&#243; th&#7875; d&#7921;a v&#224;o &#273;&#243; &#273;&#7875; s&#224;ng l&#7885;c ng&#432;&#7901;i ph&#249; h&#7907;p. Chi ti&#7871;t &#7903; &#273;&#226;y l&#224; c&#7847;n m&#244; t&#7843;:</p><ul><li><p>Gi&#7899;i thi&#7879;u t&#7893;ng quan ng&#7855;n g&#7885;n v&#7873; d&#7921; &#225;n v&#224; team &#273;ang tuy&#7875;n</p></li><li><p>T&#7893;ng quan v&#7873; vai tr&#242; &#273;ang &#273;&#259;ng tuy&#7875;n</p></li><li><p>Tr&#225;ch nhi&#7879;m c&#7909; th&#7875; c&#7911;a vai tr&#242; n&#224;y</p></li><li><p>Y&#234;u c&#7847;u </p><ul><li><p>K&#7929; n&#259;ng m&#7873;m</p></li><li><p>Kinh nghi&#7879;m &#7903; v&#7883; tr&#237; li&#234;n quan </p></li><li><p>H&#7885;c v&#7845;n</p></li></ul></li></ul><p><strong>Ph&#7887;ng v&#7845;n. </strong>Khi &#273;&#227; hi&#7875;u nhu c&#7847;u c&#7911;a m&#236;nh th&#236; vi&#7879;c ph&#7887;ng v&#7845;n c&#361;ng c&#7847;n &#273;&#432;&#7907;c s&#7855;p x&#7871;p d&#7921;a theo nhu c&#7847;u th&#7921;c t&#7871;. C&#243; m&#7897;t cu&#7897;c tranh lu&#7853;n l&#226;u &#273;&#7901;i trong ng&#224;nh l&#224; ph&#7887;ng v&#7845;n developer/engineer th&#236; c&#243; c&#7847;n ph&#7887;ng v&#7845;n thu&#7853;t to&#225;n s&#226;u ho&#7863;c h&#7887;i xo&#225;y &#273;&#225;p xoay ki&#7875;u &#8220;Google&#8221; hay kh&#244;ng? Ph&#7887;ng v&#7845;n th&#236; s&#7869; c&#7847;n bao nhi&#234;u v&#242;ng l&#224; &#273;&#7911;, &#8230; </p><p>Kh&#243; c&#243; th&#7875; n&#243;i &#273;&#226;u l&#224; c&#225;ch t&#7889;t nh&#7845;t. Tuy nhi&#234;n g&#7847;n &#273;&#226;y team m&#236;nh c&#361;ng b&#7855;t &#273;&#7847;u b&#7887; c&#225;c b&#224;i ph&#7887;ng v&#7845;n theo h&#432;&#7899;ng competitive programming, ho&#7863;c ph&#7887;ng v&#7845;n nh&#7919;ng th&#7913; s&#7869; kh&#244;ng th&#7921;c s&#7921; &#273;&#432;&#7907;c d&#249;ng trong c&#244;ng vi&#7879;c h&#7857;ng ng&#224;y &#7903; c&#244;ng ty. Suy cho c&#249;ng, ph&#7887;ng v&#7845;n l&#224; &#273;&#7875; tuy&#7875;n ng&#432;&#7901;i v&#224;o l&#224;m nh&#7919;ng c&#244;ng vi&#7879;c h&#224;ng ng&#224;y, n&#7871;u qu&#225; tr&#236;nh ph&#7887;ng v&#7845;n t&#7853;p trung qu&#225; nhi&#7873;u v&#224;o competitive programming ho&#7863;c h&#7887;i nh&#7919;ng th&#7913; m&#224; c&#244;ng vi&#7879;c h&#224;ng ng&#224;y kh&#244;ng c&#7847;n th&#236; th&#7913; nh&#7845;t l&#224; ng&#432;&#7901;i tuy&#7875;n ch&#432;a ch&#7855;c &#273;&#227; ph&#249; h&#7907;p m&#224; c&#243; khi l&#7841;i v&#432;&#7907;t qu&#225; y&#234;u c&#7847;u, th&#7913; hai l&#224; ng&#432;&#7901;i ph&#7887;ng v&#7845;n &#273;&#7853;u s&#7869; c&#243; &#8220;expectation&#8221; sai v&#7873; c&#244;ng vi&#7879;c h&#7885; ph&#7843;i l&#224;m h&#7857;ng ng&#224;y. Ph&#7887;ng v&#7845;n qu&#225; kh&#243; ho&#7863;c cao si&#234;u m&#224; c&#244;ng vi&#7879;c h&#224;ng ng&#224;y kh&#244;ng c&#7847;n c&#243; th&#7875; g&#226;y m&#7845;t tinh th&#7847;n v&#7873; l&#226;u v&#7873; d&#224;i.</p><p><strong>Offer. </strong>Ph&#7887;ng v&#7845;n xong r&#7891;i, offer ai c&#361;ng l&#224; m&#7897;t v&#7845;n &#273;&#7873;. Nh&#7919;ng c&#226;u h&#7887;i c&#7847;n ph&#7843;i tr&#7843; l&#7901;i khi ch&#7885;n ng&#432;&#7901;i &#273;&#7875; offer c&#361;ng nh&#432; m&#7913;c offer c&#243; th&#7875; bao g&#7891;m: </p><ul><li><p>Ph&#7887;ng v&#7845;n &#273;&#7853;u l&#224; offer ngay? T&#249;y v&#224;o t&#236;nh h&#236;nh th&#7883; tr&#432;&#7901;ng v&#224; l&#432;&#7907;ng &#7913;ng vi&#234;n c&#361;ng nh&#432; nhu c&#7847;u th&#7921;c t&#7871; m&#224; ng&#432;&#7901;i manager c&#243; th&#7875; ch&#7885;n offer ngay khi g&#7863;p &#7913;ng vi&#234;n ph&#249; h&#7907;p hay s&#7869; ch&#7901; c&#225;c &#7913;ng vi&#234;n trong c&#249;ng batch ph&#7887;ng v&#7845;n &#273;&#432;&#7907;c ph&#7887;ng v&#7845;n h&#7871;t.</p></li><li><p>Offer n&#234;n &#7903; m&#7913;c n&#224;o? C&#225;c c&#244;ng ty l&#7899;n th&#432;&#7901;ng s&#7869; c&#243; range l&#432;&#417;ng v&#224; c&#243; policy v&#7873; vi&#7879;c t&#259;ng l&#432;&#417;ng &#273;&#7883;nh k&#7923;. Nh&#432;ng s&#7869; hi&#7871;m khi b&#7841;n offer &#7903; m&#7913;c t&#7889;i &#273;a &#7903; range l&#432;&#417;ng v&#236; n&#7871;u l&#224;m v&#7853;y s&#7869; kh&#243; t&#259;ng l&#432;&#417;ng &#273;&#7883;nh k&#7923; cho &#7913;ng vi&#234;n n&#234;n th&#432;&#7901;ng m&#7913;c offer s&#7869; &#7903; m&#7913;c v&#7915;a ph&#7843;i.</p></li><li><p>&#7912;ng vi&#234;n n&#224;y s&#7869; &#273;&#243;ng g&#243;p cho team nh&#432; th&#7871; n&#224;o? Tu&#7923; v&#224;o t&#236;nh h&#236;nh c&#7909; th&#7875; c&#7911;a team m&#224; c&#243; khi ng&#432;&#7901;i manager s&#7869; c&#7847;n ng&#432;&#7901;i n&#259;ng n&#7893; &#273;&#7875; giao ti&#7871;p, ho&#7863;c ng&#432;&#7901;i thi&#234;n v&#7873; h&#7841; t&#7847;ng &#273;&#7875; x&#7917; l&#253; c&#225;c tasks h&#7841; t&#7847;ng, ho&#7863;c ng&#432;&#7901;i c&#243; chuy&#234;n m&#244;n v&#7873; AI &#273;&#7875; l&#225;i &#273;&#7883;nh h&#432;&#7899;ng c&#7911;a team sang h&#432;&#7899;ng AI, ho&#7863;c c&#243; khi c&#7847;n m&#7897;t b&#7841;n tr&#7867; nh&#432;ng n&#259;ng n&#7893; v&#224; h&#7885;c h&#7887;i nhanh &#273;&#7875; &#273;&#7849;y nhanh t&#7889;c &#273;&#7897; th&#7917; nghi&#7879;m c&#244;ng ngh&#7879; m&#7899;i, &#8230;</p></li></ul><p><strong>Kinh nghi&#7879;m d&#224;nh cho c&#225;c b&#7841;n &#7913;ng vi&#234;n</strong>: </p><ul><li><p>Project, team, qu&#7843;n l&#253; c&#7911;a b&#7841;n r&#7845;t quan tr&#7885;ng, &#273;&#7863;c bi&#7879;t l&#224; trong m&#244;i tr&#432;&#7901;ng c&#244;ng ty l&#7899;n n&#417;i c&#243; nhi&#7873;u team v&#224; nhi&#7873;u projects kh&#225;c nhau. H&#227;y t&#236;m hi&#7875;u v&#7873; project b&#7841;n s&#7869; l&#224;m v&#236; trong m&#244;i tr&#432;&#7901;ng quy m&#244; l&#7899;n, vi&#7879;c &#273;&#7893;i project s&#7869; kh&#244;ng d&#7877;. H&#227;y h&#7887;i nh&#7919;ng c&#226;u h&#7887;i c&#7909; th&#7875; nh&#432; stack c&#244;ng ngh&#7879; l&#224; g&#236;, b&#224;i to&#225;n ho&#7863;c project m&#224; b&#7841;n &#273;ang ph&#7887;ng v&#7845;n l&#224; g&#236;, c&#243; nh&#7919;ng challenge g&#236;, &#8230;</p></li><li><p>H&#227;y &#273;&#7863;t c&#226;u h&#7887;i kh&#244;n ngoan &#273;&#7875; l&#7921;a ch&#7885;n m&#244;i tr&#432;&#7901;ng ph&#249; h&#7907;p. Ph&#7887;ng v&#7845;n l&#224; m&#7897;t qu&#225; tr&#236;nh hai chi&#7873;u trong &#273;&#243; c&#244;ng ty t&#236;m ng&#432;&#7901;i ph&#249; h&#7907;p v&#224; &#7903; chi&#7873;u ng&#432;&#7907;c l&#7841;i b&#7841;n c&#361;ng mu&#7889;n t&#236;m m&#244;i tr&#432;&#7901;ng ph&#249; h&#7907;p cho m&#236;nh. H&#227;y h&#7887;i nh&#7919;ng c&#226;u h&#7887;i d&#7841;ng STAR v&#7899;i nh&#7919;ng t&#236;nh hu&#7889;ng c&#7909; th&#7875; cho ng&#432;&#7901;i ph&#7887;ng v&#7845;n &#273;&#7875; khai th&#225;c th&#244;ng tin t&#7889;t h&#417;n. V&#237; d&#7909; nh&#432;:</p><ul><li><p>&#272;&#7915;ng h&#7887;i: anh/ch&#7883; c&#243; th&#7875; chia s&#7867; th&#234;m v&#7873; v&#259;n ho&#225; c&#244;ng ty kh&#244;ng?</p></li><li><p>H&#227;y h&#7887;i: c&#244;ng ty c&#243; OT nhi&#7873;u kh&#244;ng? C&#244;ng ty c&#243; nh&#7919;ng lo&#7841;i h&#236;nh training n&#224;o? M&#7897;t ng&#224;y l&#224;m vi&#7879;c &#273;i&#7875;n h&#236;nh c&#7911;a m&#7897;t b&#7841;n c&#243; vai tr&#242; t&#432;&#417;ng t&#7921; trong team anh/ch&#7883;?</p></li></ul></li><li><p>Quan tr&#7885;ng l&#224; h&#7907;p t&#237;nh. B&#7841;n kh&#244;ng &#273;&#7853;u ph&#7887;ng v&#7845;n team n&#224;y ch&#432;a ch&#7855;c &#273;&#227; l&#224; do b&#7841;n k&#233;m m&#224; c&#243; khi l&#224; do kh&#244;ng h&#7907;p v&#7899;i team ho&#7863;c kh&#244;ng h&#7907;p th&#7901;i &#273;i&#7875;m, b&#7841;n v&#7851;n c&#243; th&#7875; th&#7917; &#273;&#7873; xu&#7845;t ph&#7887;ng v&#7845;n v&#7899;i team kh&#225;c.</p></li><li><p>C&#225;c lo&#7841;i benefit ngo&#224;i l&#432;&#417;ng nh&#432; th&#432;&#7903;ng, stock, &#8230; c&#361;ng r&#7845;t quan tr&#7885;ng. Khi th&#432;&#417;ng l&#432;&#7907;ng n&#234;n c&#226;n nh&#7855;c t&#7893;ng thu nh&#7853;p n&#259;m thay v&#236; ch&#7881; &#432;u ti&#234;n l&#432;&#417;ng c&#7913;ng. M&#7897;t s&#7889; c&#244;ng ty c&#243; th&#7875; offer l&#432;&#417;ng c&#7913;ng th&#7845;p nh&#432;ng b&#249; l&#7841;i t&#7893;ng thu nh&#7853;p n&#259;m l&#7841;i cao do c&#225;c ph&#7847;n kh&#225;c nh&#432; stock v&#224; bonus nhi&#7873;u. C&#243; m&#7897;t s&#7889; c&#244;ng ty th&#236; ng&#432;&#7907;c l&#7841;i.</p></li></ul></blockquote><div class="poll-embed" data-attrs="{&quot;id&quot;:98952}" data-component-name="PollToDOM"></div><div><hr></div><h3>&#128220;History</h3><p><em>(by lpv)</em></p><p>V&#224;o ng&#224;y 25/8/1991, Linus &#273;&#227; <a href="https://groups.google.com/g/comp.os.minix/c/dlNtH7RRrGA/m/ru3QgAOM-7UJ">gi&#7899;i thi&#7879;u trong m&#7897;t group</a> r&#7857;ng &#244;ng &#273;ang x&#226;y d&#7921;ng m&#7897;t h&#7879; &#273;i&#7873;u h&#224;nh m&#7903; m&#224; sau n&#224;y &#273;&#227; &#273;&#432;&#7907;c bi&#7871;t &#273;&#7871;n v&#7899;i c&#225;i t&#234;n Linux.</p><blockquote><p>Hello everybody out there using minix -</p><p>I'm doing a (free) operating system (just a hobby, won't be big and<br>professional like gnu) for 386(486) AT clones. This has been brewing<br>since april, and is starting to get ready. I'd like any feedback on<br>things people like/dislike in minix, as my OS resembles it somewhat<br>(same physical layout of the file-system (due to practical reasons)<br>among other things).</p><p>I've currently ported bash(1.08) and gcc(1.40), and things seem to work.<br>This implies that I'll get something practical within a few months, and<br>I'd like to know what features most people would want. Any suggestions<br>are welcome, but I won't promise I'll implement them :-)</p><p>Linus (<a href="https://groups.google.com/">torv...@kruuna.helsinki.fi</a>)</p><p>PS. Yes - it's free of any minix code, and it has a multi-threaded fs.<br>It is NOT protable (uses 386 task switching etc), and it probably never<br>will support anything other than AT-harddisks, as that's all I have :-(.</p></blockquote><div><hr></div><h3><strong>&#128736;&#65039;Code &amp; Tools</strong></h3><ul><li><p><strong><a href="https://github.com/novuhq/novu">Novu</a></strong>: The open-source notification infrastructure with fully functional embedded notification center.</p></li><li><p><strong><a href="https://github.com/antonmedv/walk">Walk</a></strong>: Walk is a Terminal file manager with preview mode, icons support, and image preview.</p></li><li><p><strong>Python Debugging Cheat Sheet</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oaPu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oaPu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oaPu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oaPu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oaPu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oaPu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg" width="696" height="534.9065934065934" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1119,&quot;width&quot;:1456,&quot;resizeWidth&quot;:696,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;CDN media&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="CDN media" title="CDN media" srcset="https://substackcdn.com/image/fetch/$s_!oaPu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oaPu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oaPu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oaPu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0630ffd7-5a76-4771-8203-7bb22eb735a6_2560x1968.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ul><div class="pullquote"><h3>&#128173;Quotes</h3><p>Coding like poetry should be short and concise. &#8213; Santosh Kalwar</p></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#263 - Building and operating a pretty big storage system called S3]]></title><description><![CDATA[&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay]]></description><link>https://newsletter.grokking.org/p/263-building-and-operating-a-pretty</link><guid isPermaLink="false">https://newsletter.grokking.org/p/263-building-and-operating-a-pretty</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 13 Aug 2023 08:00:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://theengineeringmanager.substack.com/p/should-i-change-job">Should I change job?</a></h4><p><em>(by nhij)</em></p><p><em>&#8220;&#7902; b&#7845;t c&#7913; c&#244;ng vi&#7879;c n&#224;o, b&#7841;n n&#234;n ho&#7863;c c&#243; th&#7875; h&#7885;c h&#7887;i &#273;&#432;&#7907;c &#273;i&#7873;u g&#236; &#273;&#243; ho&#7863;c ki&#7871;m &#273;&#432;&#7907;c ti&#7873;n. B&#7845;t c&#7913; &#273;i&#7873;u n&#224;o c&#361;ng &#7893;n. T&#7889;t nh&#7845;t l&#224; c&#243; c&#7843; hai. Nh&#432;ng n&#7871;u kh&#244;ng c&#243; b&#7845;t c&#7913; &#273;i&#7873;u n&#224;o, h&#227;y ngh&#7881; vi&#7879;c.&#8221;</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>B&#224;i vi&#7871;t n&#224;y x&#226;y d&#7921;ng d&#7921;a tr&#234;n &#253; t&#432;&#7903;ng c&#7911;a c&#226;u n&#243;i tr&#234;n v&#224; gi&#7843;i th&#237;ch m&#7889;i li&#234;n h&#7879; gi&#7919;a h&#7885;c h&#7887;i v&#224; ki&#7871;m ti&#7873;n. H&#7885;c h&#7887;i s&#7869; gi&#250;p b&#7841;n gia t&#259;ng kh&#7843; n&#259;ng ki&#7871;m ti&#7873;n trong t&#432;&#417;ng lai b&#7857;ng c&#225;ch m&#7903; c&#225;nh c&#7917;a &#273;&#432;a b&#7841;n t&#7899;i m&#7897;t v&#7883; tr&#237; cao h&#417;n v&#224; c&#417; h&#7897;i t&#7889;t h&#417;n. Trong khi &#273;&#243;, ki&#7871;m &#273;&#432;&#7907;c nhi&#7873;u ti&#7873;n h&#417;n c&#243; th&#7875; gi&#250;p b&#7841;n &#273;&#7843;m b&#7843;o &#273;&#432;&#7907;c ngu&#7891;n t&#224;i ch&#237;nh b&#7873;n v&#7919;ng t&#7915; s&#7899;m, cho ph&#233;p b&#7841;n c&#243; th&#7875; m&#7841;o hi&#7875;m ch&#7883;u r&#7911;i ro t&#224;i ch&#237;nh &#273;&#7875; &#273;&#7893;i l&#7841;i c&#417; h&#7897;i h&#7885;c h&#7887;i, nh&#432; ch&#7845;p nh&#7853;n gi&#7843;m l&#432;&#417;ng &#273;&#7875; l&#224;m &#7903; m&#7897;t v&#7883; tr&#237; cao h&#417;n t&#7841;i m&#7897;t startup. T&#225;c gi&#7843; kh&#244;ng th&#7875; gi&#250;p b&#7841;n tr&#7843; l&#7901;i c&#226;u h&#7887;i tr&#234;n t&#7921;a &#273;&#7873;, m&#224; ch&#7881; c&#243; b&#7841;n c&#243; th&#7875; tr&#7843; l&#7901;i c&#226;u h&#7887;i &#273;&#243; cho b&#7843;n th&#226;n. B&#7841;n &#273;&#7885;c c&#243; th&#7875; &#273;&#7885;c t&#7841;i b&#224;i vi&#7871;t g&#7889;c &#273;&#7875; hi&#7875;u s&#226;u h&#417;n g&#243;c nh&#236;n c&#7911;a t&#225;c gi&#7843; v&#7873; v&#7845;n &#273;&#7873; n&#224;y.</p><h4><a href="https://www.allthingsdistributed.com/2023/07/building-and-operating-a-pretty-big-storage-system.html">Building and operating a pretty big storage system called S3</a></h4><p><em>(by nhij)</em></p><p>B&#224;i vi&#7871;t &#273;&#259;ng l&#7841;i nh&#7919;ng chia s&#7867; c&#7911;a Andy Warfield, VP c&#7911;a Amazon S3, nh&#236;n l&#7841;i s&#7921; ph&#7913;c t&#7841;p v&#224; quy m&#244; ho&#7841;t &#273;&#7897;ng l&#7899;n c&#7911;a h&#7879; th&#7889;ng ph&#7847;n m&#7873;m l&#432;u tr&#7919; c&#7911;a Amazon (Amazon&#8217;s Storage Software System). Andy b&#224;n v&#7873; s&#7921; quan tr&#7885;ng c&#7911;a vi&#7879;c nh&#7853;n bi&#7871;t v&#224; gi&#7843;m thi&#7875;u c&#225;c v&#7845;n &#273;&#7873; v&#7873; quy m&#244; t&#7893; ch&#7913;c, t&#432;&#417;ng &#273;&#7891;ng v&#7899;i vi&#7879;c t&#7889;i &#432;u h&#243;a h&#7879; th&#7889;ng. &#212;ng c&#361;ng b&#224;n v&#7873; c&#225;ch ti&#7871;p c&#7853;n c&#7911;a qu&#7843;n l&#253; &#273;&#7875; th&#250;c &#273;&#7849;y s&#7921; t&#7921; ch&#7911; c&#7911;a nh&#243;m trong vi&#7879;c gi&#7843;i quy&#7871;t v&#7845;n &#273;&#7873; thay v&#236; ch&#7881; th&#7921;c thi c&#225;c gi&#7843;i ph&#225;p c&#243; s&#7861;n, &#273;i&#7873;u n&#224;y &#273;&#227; &#273;em l&#7841;i nh&#7919;ng k&#7871;t qu&#7843; k&#7929; thu&#7853;t hi&#7879;u qu&#7843; h&#417;n. B&#7841;n &#273;&#7885;c c&#243; th&#7875; &#273;&#7885;c t&#7841;i b&#224;i vi&#7871;t g&#7889;c &#273;&#7875; hi&#7875;u s&#226;u h&#417;n v&#7873; nh&#7919;ng chia s&#7867; c&#7911;a Andy Warfield v&#7873; nh&#7919;ng c&#226;u chuy&#7879;n xung quanh S3.</p><h4><a href="https://www.datadoghq.com/blog/2023-03-08-multiregion-infrastructure-connectivity-issue/">Incident at DataDog: Infrastructure connectivity issue affecting multiple regions</a></h4><p><em>(by n^4)</em></p><p>V&#224;o ng&#224;y 8/3/2023, DataDog - m&#7897;t cloud service d&#249;ng &#273;&#7875; monitor v&#224; theo d&#245;i &#273;&#7897; &#7893;n &#273;&#7883;nh c&#7911;a c&#225;c h&#7879; th&#7889;ng, g&#7863;p s&#7921; c&#7889; &#7903; di&#7879;n r&#7897;ng khi&#7871;n ch&#7845;t l&#432;&#7907;ng d&#7883;ch v&#7909; &#7843;nh h&#432;&#7903;ng nghi&#234;m tr&#7885;ng trong kho&#7843;ng th&#7901;i gian t&#7915; 06:03 UTC &#273;&#7871;n 06:25 UTC 10/3/2023 m&#7899;i ch&#237;nh th&#7913;c h&#7891;i ph&#7909;c. L&#224; m&#7897;t trong c&#225;c nh&#224; cung c&#7845;p d&#7883;ch v&#7909; monitoring l&#7899;n v&#7899;i h&#224;ng ch&#7909;c ngh&#236;n server (x0.000 servers) v&#7853;n h&#224;nh &#273;&#7891;ng th&#7901;i, team DataDog &#273;&#227; c&#243; nhi&#7873;u c&#417; ch&#7871; &#273;&#7875; &#273;&#7843;m b&#7843;o h&#7879; th&#7889;ng v&#7853;n h&#224;nh th&#244;ng su&#7889;t th&#244;ng qua nhi&#7873;u c&#417; ch&#7871; nh&#432; blue/green deployment, roll-over deployment cho tu&#7847;n t&#7921; t&#7915;ng node, cluster, region, &#8230; nh&#432;ng v&#7851;n &#273;&#7873; v&#7851;n ph&#225;t sinh. V&#7853;y nguy&#234;n nh&#226;n do &#273;&#226;u? L&#224;m th&#7871; n&#224;o &#273;&#7875; ng&#259;n ch&#7863;n v&#7845;n &#273;&#7873; t&#432;&#417;ng t&#7921; trong t&#432;&#417;ng lai?</p><p>B&#7841;n c&#243; th&#7875; &#273;&#7885;c b&#224;i vi&#7871;t &#273;&#7875; hi&#7875;u r&#245; th&#234;m chi ti&#7871;t v&#7873; s&#7921; c&#7889; n&#224;y c&#361;ng nh&#432; c&#225;ch team DataDog ph&#226;n t&#237;ch v&#224; gi&#7843;i quy&#7871;t s&#7921; c&#7889; nh&#233;.</p><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c - </strong>M&#7897;t tu&#7847;n l&#224;m vi&#7879;c c&#7911;a EM (p3)</h3><blockquote><h4><strong>Th&#7913; t&#432;</strong> - ng&#224;y kh&#244;ng h&#7885;p h&#224;nh</h4><p>Qua hai ng&#224;y &#273;&#7847;u tu&#7847;n th&#236; h&#7859;n c&#225;c b&#7841;n s&#7869; &#273;&#7863;t d&#7845;u h&#7887;i, &#7911;a, v&#7853;y EM th&#7845;y h&#7885;p su&#7889;t ng&#224;y v&#7853;y th&#236; c&#242;n l&#224;m g&#236; kh&#225;c kh&#244;ng? Th&#7853;t ra th&#236; c&#361;ng c&#243; &#273;&#7845;y. Ngo&#224;i c&#225;c kho&#7843;ng ngh&#7881; gi&#7919;a c&#225;c cu&#7897;c h&#7885;p th&#236; EM s&#7869; c&#243; nh&#7919;ng tasks c&#7911;a ri&#234;ng m&#236;nh, v&#224; nh&#7919;ng tasks n&#224;y th&#432;&#7901;ng s&#7869; t&#7853;n d&#7909;ng c&#225;c kho&#7843;ng th&#7901;i gian r&#7843;nh gi&#7919;a c&#225;c meeting, ho&#7863;c l&#224; t&#7853;n d&#7909;ng no-meeting day &#273;&#7875; ho&#224;n th&#224;nh.</p><p><strong>(1) L&#224;m c&#225;c tasks li&#234;n quan &#273;&#7871;n engineering. </strong>C&#7909; th&#7875; l&#224; vi&#7871;t thinking document ho&#7863;c design document &#273;&#7875; n&#234;u ho&#7863;c ph&#226;n t&#237;ch m&#7897;t v&#7845;n &#273;&#7873; n&#224;o &#273;&#243;.<strong> </strong>C&#225;c v&#7845;n &#273;&#7873; ph&#226;n t&#237;ch m&#224; vai tr&#242; EM ph&#7909; tr&#225;ch th&#432;&#7901;ng s&#7869; mang t&#237;nh t&#7893;ng quan ho&#7863;c chi&#7871;n l&#432;&#7907;c h&#417;n so v&#7899;i c&#225;c b&#224;i to&#225;n v&#7853;n h&#224;nh h&#224;ng ng&#224;y. V&#237; d&#7909; nh&#432; m&#7897;t v&#224;i v&#7845;n &#273;&#7873; m&#236;nh s&#7869; ph&#7843;i vi&#7871;t g&#7847;n &#273;&#226;y:</p><ul><li><p>Chia s&#7867; quan &#273;i&#7875;m v&#7873; vai tr&#242; c&#7911;a low-code platform trong t&#7893; ch&#7913;c? C&#243; n&#234;n d&#249;ng hay kh&#244;ng? N&#7871;u d&#249;ng th&#236; n&#234;n d&#249;ng nh&#432; th&#7871; n&#224;o?</p></li><li><p>B&#224;i to&#225;n workflow automation l&#224; b&#224;i to&#225;n c&#7911;a ai (trong t&#7893; ch&#7913;c l&#7899;n h&#417;n), n&#234;n &#273;&#432;&#7907;c giao cho ai?</p></li><li><p>&#272;&#7873; xu&#7845;t cho m&#7897;t platform kh&#225;c c&#243; li&#234;n quan &#273;&#7873; platform c&#7911;a m&#236;nh</p></li></ul><p><strong>(2) Th&#7921;c hi&#7879;n vai tr&#242; gi&#225;m s&#225;t v&#224; coaching</strong>. M&#7897;t trong nh&#7919;ng tr&#225;ch nhi&#7879;m l&#7899;n nh&#7845;t c&#7911;a EM l&#224; ph&#7843;i gi&#225;m s&#225;t v&#224; ch&#7883;u tr&#225;ch nhi&#7879;m cho s&#7921; ph&#225;t tri&#7875;n c&#7911;a team m&#236;nh. &#272;&#7875; th&#7921;c hi&#7879;n vai tr&#242; n&#224;y th&#236; b&#7843;n th&#226;n c&#7847;n li&#234;n t&#7909;c theo d&#245;i c&#225;c k&#234;nh th&#244;ng tin c&#7911;a team m&#236;nh tr&#234;n Slack &#273;&#7875; xem c&#225;c th&#224;nh vi&#234;n &#273;ang trao &#273;&#7893;i v&#7873; v&#7845;n &#273;&#7873; g&#236;, c&#243; th&#7875; nh&#7843;y v&#224;o c&#249;ng trao &#273;&#7893;i v&#224; t&#236;m c&#225;ch &#273;&#432;a cu&#7897;c th&#7843;o lu&#7853;n theo &#273;&#250;ng h&#432;&#7899;ng (n&#7871;u b&#7843;n th&#226;n th&#7845;y ch&#432;a &#273;&#250;ng h&#432;&#7899;ng).</p><p>Ngo&#224;i ra c&#361;ng s&#7869; d&#249;ng c&#225;c n&#7897;i dung trao &#273;&#7893;i n&#224;y &#273;&#7875; mang ra th&#7843;o lu&#7853;n v&#7899;i t&#7915;ng c&#225; nh&#226;n trong qu&#225; tr&#236;nh 1:1 &#273;&#7875; g&#243;p &#253; v&#224; chia s&#7867; quan &#273;i&#7875;m c&#7911;a m&#236;nh. S&#7869; c&#243; nh&#7919;ng t&#236;nh hu&#7889;ng b&#7843;n th&#226;n th&#7845;y m&#7897;t th&#224;nh vi&#234;n A n&#224;o &#273;&#243; ph&#7843;n h&#7891;i ch&#432;a h&#7907;p l&#253;, ho&#7863;c ch&#432;a tr&#7885;n v&#7865;n, v&#237; d&#7909; nh&#432; b&#7841;n &#7845;y &#273;ang gi&#7843;i th&#237;ch v&#7873; m&#7897;t v&#7845;n &#273;&#7873; cho m&#7897;t ng&#432;&#7901;i d&#249;ng non-tech nh&#432;ng l&#7841;i d&#249;ng qu&#225; nhi&#7873;u thu&#7853;t ng&#7919; k&#7929; thu&#7853;t. Trong nh&#7919;ng t&#236;nh hu&#7889;ng nh&#432; v&#7853;y th&#236; m&#236;nh s&#7869; c&#7847;n ghi nh&#7853;n v&#224; th&#7843;o lu&#7853;n v&#7899;i b&#7841;n &#7845;y trong nh&#7919;ng bu&#7893;i g&#7863;p m&#7863;t &#273;&#7875; b&#7841;n l&#432;u &#253; h&#417;n.</p><p>B&#234;n c&#7841;nh &#273;&#243;, EM c&#361;ng s&#7869; c&#7847;n ph&#7843;i gi&#250;p c&#225;c th&#224;nh vi&#234;n ph&#225;t tri&#7875;n th&#244;ng qua vi&#7879;c th&#7843;o lu&#7853;n v&#7873; career path, c&#361;ng nh&#432; x&#225;c &#273;&#7883;nh &#273;&#7897; &#432;u ti&#234;n cho c&#225;c th&#224;nh vi&#234;n v&#224; c&#226;n b&#7857;ng gi&#7919;a nhu c&#7847;u ph&#225;t tri&#7875;n b&#7843;n th&#226;n v&#224; nhu c&#7847;u c&#7911;a c&#244;ng ty. B&#234;n c&#244;ng ty m&#236;nh th&#236; trong th&#7901;i gian g&#7847;n &#273;&#226;y c&#243; tri&#7875;n khai m&#7897;t ho&#7841;t &#273;&#7897;ng g&#7885;i l&#224; Plan &amp; Priority, trong &#273;&#243; m&#7895;i th&#224;nh vi&#234;n s&#7869; c&#7847;n t&#7921; &#273;&#7863;t ra c&#225;c m&#7909;c ti&#234;u ph&#225;t tri&#7875;n b&#7843;n th&#226;n c&#361;ng nh&#432; c&#225;c &#432;u ti&#234;n trong s&#7921; nghi&#7879;p hi&#7879;n t&#7841;i. EM s&#7869; d&#7921;a v&#224;o nhu c&#7847;u c&#7911;a t&#7915;ng th&#224;nh vi&#234;n &#273;&#7875; t&#7915; &#273;&#243; c&#243; s&#7921; ph&#226;n c&#244;ng c&#225;c tasks ph&#249; h&#7907;p. </p><p>V&#237; d&#7909; nh&#432; n&#7871;u m&#7897;t b&#7841;n trong 6 th&#225;ng t&#7899;i mu&#7889;n &#273;&#7847;u t&#432; nhi&#7873;u quanh h&#7879; th&#7889;ng Data, v&#7853;y th&#236; EM c&#7847;n t&#236;m c&#225;ch &#273;&#7875; &#273;&#432;a b&#7841;n v&#224;o nh&#243;m l&#224;m task li&#234;n quan &#273;&#7871;n Data nhi&#7873;u h&#417;n. Ho&#7863;c m&#7897;t b&#7841;n quan t&#226;m &#273;&#7871;n DevOps th&#236; EM c&#7847;n t&#236;m c&#225;ch ph&#226;n c&#225;c tasks li&#234;n quan &#273;&#7871;n DevOps nhi&#7873;u h&#417;n cho b&#7841;n, &#8230;</p><p><strong>(3) Th&#7921;c hi&#7879;n vai tr&#242; l&#234;n k&#7871; ho&#7841;ch</strong>. L&#7853;p v&#224; th&#7921;c thi k&#7871; ho&#7841;ch l&#224; m&#7897;t trong nh&#7919;ng vai tr&#242; quan tr&#7885;ng m&#224; EM c&#7847;n ph&#7843;i &#273;&#7843;m &#273;&#432;&#417;ng, &#273;&#7863;c bi&#7879;t l&#224; vi&#7879;c l&#234;n k&#7871; ho&#7841;ch d&#224;i h&#7841;n v&#7899;i chu k&#7923; 3-6 th&#225;ng tr&#7903; l&#234;n. Trong m&#7897;t t&#7893; ch&#7913;c l&#7899;n nh&#432; n&#417;i b&#7843;n th&#226;n &#273;ang l&#224;m vi&#7879;c, vi&#7879;c c&#243; nh&#7919;ng chi&#7871;n l&#432;&#7907;c v&#224; k&#7871; ho&#7841;ch d&#224;i h&#7841;n 2-3 n&#259;m l&#224; c&#7847;n thi&#7871;t v&#236; nhi&#7873;u l&#253; do. Nhi&#7879;m v&#7909; c&#7911;a EM l&#250;c n&#224;y l&#224; ph&#7843;i hi&#7875;u &#273;&#432;&#7907;c platform ho&#7863;c team m&#236;nh &#273;ang ph&#7909; tr&#225;ch &#273;ang &#273;&#7913;ng &#7903; &#273;&#226;u trong b&#7913;c tranh to&#224;n c&#7843;nh c&#7911;a c&#244;ng ty, ph&#242;ng ban c&#7911;a m&#236;nh &#273;&#7875; t&#7921; &#273;&#243; &#273;&#432;a ra &#273;&#432;&#7907;c c&#225;c k&#7871; ho&#7841;ch ph&#249; h&#7907;p.</p><p>Trong vai tr&#242; n&#224;y, b&#7843;n th&#226;n s&#7869; c&#7847;n ph&#7843;i tham gia chu&#7849;n b&#7883; nh&#7919;ng th&#7913; nh&#432;</p><ul><li><p>Budget planning. D&#7921; to&#225;n xem h&#7841; t&#7847;ng c&#7911;a team &#273;ang qu&#7843;n l&#253; c&#7847;n kinh ph&#237; bao nhi&#234;u trong 6 th&#225;ng - 1 n&#259;m t&#7899;i.</p></li><li><p>OKR planning. M&#7895;i 6 th&#225;ng m&#7897;t l&#7847;n, s&#7869; ph&#7843;i th&#7889;ng nh&#7845;t OKR c&#7911;a team &#273;&#7875; review v&#7899;i c&#225;c manager c&#249;ng c&#225;c stakeholders li&#234;n quan.</p></li><li><p>Vision and Strategy docs. 1 n&#259;m m&#7897;t l&#7847;n s&#7869; c&#7847;n ph&#7843;i review l&#7841;i v&#7873; chi&#7871;n l&#432;&#7907;c d&#224;i h&#417;i c&#7911;a team, platform &#273;&#7875; coi team &#273;ang &#7903; &#273;&#226;u v&#224; c&#7847;n ph&#225;t tri&#7875;n theo h&#432;&#7899;ng n&#224;o.</p></li><li><p>Execution plan. Tham gia v&#224;o so&#7841;n th&#7843;o c&#225;c k&#7871; ho&#7841;ch th&#7921;c thi &#7903; ph&#237;a engineering t&#7915; m&#7897;t k&#7871; ho&#7841;ch l&#7899;n &#7843;nh h&#432;&#7903;ng &#273;&#7871;n nhi&#7873;u b&#7897; ph&#7853;n kh&#225;c nhau.</p></li></ul><p><strong>(4) C&#225;c task kh&#225;c l&#7863;t v&#7863;t kh&#244;ng t&#234;n. </strong>T&#249;y v&#224;o quy m&#244; v&#224; quy tr&#236;nh c&#7911;a t&#7893; ch&#7913;c m&#224; s&#7889; l&#432;&#7907;ng task l&#7863;t v&#7863;t c&#243; th&#7875; nhi&#7873;u ho&#7863;c &#237;t, nh&#432;ng s&#7869; c&#243; kha kh&#225; c&#225;c tasks c&#243; th&#7875; k&#7875; t&#234;n nh&#432;: review v&#224; approve request xin quy&#7873;n t&#7915; team, support m&#7897;t b&#7841;n user c&#7911;a platform, xin budget engagement, &#8230;</p><p>(c&#242;n ti&#7871;p)</p></blockquote><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4><strong>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/minimum-number-of-people-to-teach/">Minimum Number of People to Teach</a></strong></h4><p>Tr&#234;n m&#7897;t m&#7841;ng x&#227; h&#7897;i c&#243; <strong>m</strong> ng&#432;&#7901;i d&#249;ng, hai ng&#432;&#7901;i d&#249;ng c&#243; th&#7875; giao ti&#7871;p v&#7899;i nhau n&#7871;u h&#7885; bi&#7871;t m&#7897;t ng&#244;n ng&#7919; chung.</p><p>Cho tr&#432;&#7899;c m&#7897;t s&#7889; nguy&#234;n <strong>n</strong>, m&#7897;t m&#7843;ng <strong>languages</strong>, v&#224; m&#7897;t m&#7843;ng <strong>friendships</strong>, c&#7909; th&#7875; l&#224;:</p><ul><li><p>C&#243; <strong>n</strong> ng&#244;n ng&#7919; &#273;&#225;nh s&#7889; t&#7915; <strong>1</strong> &#273;&#7871;n <strong>n</strong>.</p></li><li><p><strong>languages[i]</strong> l&#224; t&#7853;p c&#225;c ng&#244;n ng&#7919; m&#224; ng&#432;&#7901;i d&#249;ng th&#7913; <strong>i</strong> bi&#7871;t.</p></li><li><p><strong>friendships[i]</strong> = <strong>[u_i, v_i]</strong> bi&#7875;u di&#7877;n m&#7897;t m&#7889;i quan h&#7879; b&#7841;n b&#232; gi&#7919;a ng&#432;&#7901;i d&#249;ng <strong>u_i</strong> v&#224; <strong>v_i.</strong></p></li></ul><p>B&#7841;n c&#243; th&#7875; ch&#7885;n <strong>m&#7897;t</strong> ng&#244;n ng&#7919; v&#224; d&#7841;y n&#243; cho m&#7897;t s&#7889; ng&#432;&#7901;i &#273;&#7875; t&#7915; &#273;&#243; t&#7845;t c&#7843; <strong>m&#7885;i ng&#432;&#7901;i</strong> c&#243; th&#7875; li&#234;n l&#7841;c v&#7899;i nhau. Tr&#7843; v&#7873; <strong>s&#7889; ng&#432;&#7901;i d&#249;ng &#237;t nh&#7845;t</strong> m&#224; b&#7841;n ph&#7843;i d&#7841;y.</p><p>L&#432;u &#253; <strong>friendships</strong> kh&#244;ng mang t&#237;nh b&#7855;c c&#7847;u, t&#7913;c l&#224; x l&#224; b&#7841;n c&#7911;a y, y l&#224; b&#7841;n c&#7911;a z kh&#244;ng c&#243; ngh&#297;a l&#224; x l&#224; b&#7841;n c&#7911;a z.</p><p>V&#237; d&#7909;:</p><p>Input: <strong>n</strong> = 2, <strong>languages</strong> = [[1],[2],[1,2]], <strong>friendships</strong> = [[1,2],[1,3],[2,3]]</p><p>Output: 1</p><p>Gi&#7843;i th&#237;ch: B&#7841;n c&#243; th&#7875; ch&#7885;n d&#7841;y ng&#432;&#7901;i d&#249;ng 1 ng&#244;n ng&#7919; s&#7889; 2, ho&#7863;c ng&#432;&#7901;i d&#249;ng 2 ng&#244;n ng&#7919; s&#7889; 1.</p><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <strong><a href="https://leetcode.com/problems/queue-reconstruction-by-height/">Queue Reconstruction by Height</a></strong></h4><h4><strong>&#272;&#7873; b&#224;i</strong></h4><p>Cho m&#7897;t m&#7843;ng <strong>people</strong> bi&#7875;u di&#7877;n m&#7897;t h&#224;ng ng&#432;&#7901;i, v&#7899;i people[i] = [hi, ki], trong &#273;&#243; ng&#432;&#7901;i &#7903; v&#7883; tr&#237; th&#7913; i c&#243; chi&#7873;u cao hi, v&#224; c&#243; ch&#237;nh x&#225;c ki ng&#432;&#7901;i &#273;&#7913;ng ph&#237;a tr&#432;&#7899;c v&#7899;i chi&#7873;u cao b&#7857;ng ho&#7863;c cao h&#417;n hi.</p><p>V&#237; d&#7909;: people[1] = [5, 2] ngh&#297;a l&#224; ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 1 c&#243; chi&#7873;u cao l&#224; 5, v&#224; c&#243; 2 ng&#432;&#7901;i &#273;&#7913;ng ph&#237;a tr&#432;&#7899;c.</p><p>Hi&#7879;n nay c&#225;c ph&#7847;n t&#7917; trong m&#7843;ng <strong>people</strong> &#273;ang b&#7883; x&#225;o tr&#7897;n, b&#7841;n &#273;&#7885;c h&#227;y s&#7855;p x&#7871;p l&#7841;i m&#7843;ng <strong>people</strong> sao cho gi&#225; tr&#7883; c&#7911;a c&#225;c ph&#7847;n t&#7917; l&#224; &#273;&#250;ng v&#7899;i y&#234;u c&#7847;u tr&#234;n.</p><p>V&#237; d&#7909;:</p><p>Input: people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]</p><p>Output: [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]</p><p>Gi&#7843;i th&#237;ch:</p><ul><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 0 c&#243; chi&#7873;u cao 5, v&#224; c&#243; 0 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 5.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 1 c&#243; chi&#7873;u cao 7, v&#224; c&#243; 0 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 7.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 2 c&#243; chi&#7873;u cao 5, v&#224; c&#243; 2 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 5.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 3 c&#243; chi&#7873;u cao 6, v&#224; c&#243; 1 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 6.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 4 c&#243; chi&#7873;u cao 4, v&#224; c&#243; 4 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 4.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 5 c&#243; chi&#7873;u cao 7, v&#224; c&#243; 1 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 7.</p></li></ul><h4>L&#7901;i gi&#7843;i</h4><p>&#272;&#7847;u ti&#234;n ta xem x&#233;t c&#225;ch s&#7855;p x&#7871;p cho tr&#432;&#7901;ng h&#7907;p t&#7915;ng nh&#243;m ng&#432;&#7901;i c&#243; chi&#7873;u cao b&#7857;ng nhau. D&#7877; th&#7845;y r&#7857;ng ph&#7843;i s&#7855;p x&#7871;p hai ng&#432;&#7901;i c&#243; c&#249;ng chi&#7873;u cao theo th&#7913; t&#7921; gi&#225; tr&#7883; k t&#259;ng d&#7847;n.</p><p>V&#7899;i v&#237; d&#7909; &#273;&#7873; b&#224;i &#273;&#227; cho, ta c&#243; c&#225;c nh&#243;m: [5,0], [5,2]; [7,0], [7,1]; [4,4]; [6,1];</p><p>Ti&#7871;p theo c&#7847;n t&#236;m c&#225;ch &#273;&#7875; g&#7897;p c&#225;c nh&#243;m tr&#234;n l&#7841;i v&#7899;i nhau th&#7887;a m&#227;n &#273;&#7873; b&#224;i.</p><p>V&#237; d&#7909;, v&#7899;i nh&#243;m ng&#432;&#7901;i cao nh&#7845;t [7,0], [7,1], nh&#7853;n th&#7845;y ta c&#243; th&#7875; ch&#232;n b&#7845;t k&#236; ng&#432;&#7901;i n&#224;o v&#224;o v&#7883; tr&#237; gi&#7919;a hai ng&#432;&#7901;i n&#224;y m&#224; v&#7851;n th&#7887;a m&#227;n &#273;&#7873; b&#224;i. T&#7913;c l&#224; nh&#7919;ng ng&#432;&#7901;i cao h&#417;n sau khi &#273;&#227; &#273;&#432;&#7907;c s&#7855;p x&#7871;p v&#224;o &#273;&#250;ng v&#7883; tr&#237; th&#236; kh&#244;ng c&#7847;n quan t&#226;m &#273;&#7871;n h&#7885; n&#7919;a.</p><p>T&#7915; &#273;&#243; &#253; t&#432;&#7903;ng gi&#7843;i quy&#7871;t b&#224;i to&#225;n n&#224;y l&#224;</p><p>+ Ch&#7885;n t&#7915;ng ng&#432;&#7901;i &#273;&#7875; s&#7855;p x&#7871;p, theo th&#7913; t&#7921; chi&#7873;u cao gi&#7843;m d&#7847;n, v&#7899;i hai ng&#432;&#7901;i c&#243; c&#249;ng chi&#7873;u cao th&#236; ta ch&#7885;n theo th&#7913; t&#7921; t&#259;ng d&#7847;n c&#7911;a k.</p><p>+ &#272;&#7863;t ng&#432;&#7901;i &#273;&#243; v&#224;o v&#7883; tr&#237; c&#243; gi&#225; tr&#7883; &#273;&#250;ng b&#7857;ng gi&#225; tr&#7883; k c&#7911;a h&#7885;.</p><p>V&#7899;i v&#237; d&#7909; &#273;&#7873; b&#224;i cho:</p><ul><li><p>S&#7855;p x&#7871;p danh s&#225;ch c&#225;c c&#7863;p (h_i, k_i) theo th&#7913; t&#7921; gi&#7843;m d&#7847;n c&#7911;a h v&#224; t&#259;ng d&#7847;n c&#7911;a k.</p></li></ul><p>Ta c&#243; [[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]</p><ul><li><p>Duy&#7879;t qua m&#7843;ng &#273;&#227; s&#7855;p x&#7871;p, l&#7847;n l&#432;&#7907;t ch&#232;n t&#7915;ng ng&#432;&#7901;i v&#224;o m&#7843;ng m&#7899;i (c&#361;ng l&#224; m&#7843;ng k&#7871;t qu&#7843;) t&#7841;i v&#7883; tr&#237; b&#7857;ng gi&#225; tr&#7883; k c&#7911;a ng&#432;&#7901;i &#273;&#243;.</p></li></ul><p>[7,0] -&gt; Ch&#232;n v&#224;o v&#7883; tr&#237; 0 trong danh s&#225;ch k&#7871;t qu&#7843;: [[7,0]]</p><p>[7,1] -&gt; Ch&#232;n v&#224;o v&#7883; tr&#237; 1 trong danh s&#225;ch k&#7871;t qu&#7843;: [[7,0], [7,1]]</p><p>[6,1] -&gt; Ch&#232;n v&#224;o v&#7883; tr&#237; 1 trong danh s&#225;ch k&#7871;t qu&#7843;: [[7,0], [6,1], [7,1]]</p><p>[5,0] -&gt; Ch&#232;n v&#224;o v&#7883; tr&#237; 0 trong danh s&#225;ch k&#7871;t qu&#7843;: [[5,0], [7,0], [6,1], [7,1]]</p><p>[5,2] -&gt; Ch&#232;n v&#224;o v&#7883; tr&#237; 2 trong danh s&#225;ch k&#7871;t qu&#7843;: [[5,0], [7,0], [5,2], [6,1], [7,1]]</p><p>[4,4] -&gt; Ch&#232;n v&#224;o v&#7883; tr&#237; 4 trong danh s&#225;ch k&#7871;t qu&#7843;: [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]</p><pre><code><code>class Solution {
  public int[][] reconstructQueue(int[][] people) {
    Arrays.sort(people, (o1, o2) -&gt; o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]);

    List&lt;int[]&gt; reconstructedQueue = new ArrayList&lt;&gt;();
    for(int[] p : people){
      reconstructedQueue.add(p[1], p);
    }

    return reconstructedQueue.toArray(new int[people.length][2]);
  }
}</code></code></pre><p>Thu&#7853;t to&#225;n s&#7855;p x&#7871;p c&#243; &#273;&#7897; ph&#7913;c t&#7841;p O(NlogN), tuy nhi&#234;n v&#242;ng l&#7863;p for &#273;&#7875; ch&#232;n v&#7899;i h&#224;m add c&#243; t&#7893;ng &#273;&#7897; ph&#7913;c t&#7841;p O(N^2) n&#234;n &#273;&#7897; ph&#7913;c t&#7841;p th&#7901;i gian c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(N^2), v&#7899;i N l&#224; &#273;&#7897; d&#224;i m&#7843;ng <strong>people</strong> &#273;&#227; cho tr&#432;&#7899;c.</p><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>&#8220;The only thing that stands between you and your dream is the will to try and the belief that it is actually possible.&#8221;</p></div><p></p><div class="poll-embed" data-attrs="{&quot;id&quot;:93173}" data-component-name="PollToDOM"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#262 - 5 ways to review code without wasting everyone’s time]]></title><description><![CDATA[&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay]]></description><link>https://newsletter.grokking.org/p/262-5-ways-to-review-code-without</link><guid isPermaLink="false">https://newsletter.grokking.org/p/262-5-ways-to-review-code-without</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Tue, 01 Aug 2023 12:01:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h3><a href="https://medium.com/volvo-cars-engineering/5-ways-to-review-code-without-wasting-everyones-time-aedeecc51094">5 ways to review code without wasting everyone&#8217;s time</a></h3><p><em>(by quangle)</em></p><p>L&#224; m&#7897;t developer, ch&#7855;c h&#7859;n review code l&#224; c&#244;ng vi&#7879;c m&#224; ch&#250;ng ta s&#7869; g&#7863;p h&#7857;ng ng&#224;y. Sau &#273;&#226;y l&#224; 5 g&#7907;i &#253; m&#224; t&#225;c gi&#7843; - k&#7929; s&#432; t&#7841;i Volvo Cars &#273;&#250;c k&#7871;t trong qu&#225; tr&#236;nh l&#224;m vi&#7879;c &#273;&#7875; c&#243; th&#7875; review code m&#7897;t c&#225;ch hi&#7879;u qu&#7843;:</p><ul><li><p>Ki&#7875;m tra pull requests c&#243; &#273;&#225;p &#7913;ng &#273;&#432;&#7907;c c&#225;c y&#234;u c&#7847;u &#273;&#7863;t ra c&#7911;a team (v&#237; d&#7909;: c&#243; unit tests ch&#432;a, c&#243; documentation ch&#432;a, v.v)</p></li><li><p>Cung c&#7845;p th&#234;m nhi&#7873;u g&#243;c nh&#236;n m&#7899;i v&#7873; pull request c&#7911;a ng&#432;&#7901;i kh&#225;c (v&#237; d&#7909;: c&#225;c v&#7845;n &#273;&#7873; v&#7873; l&#7895;i ch&#237;nh t&#7843;, &#273;&#7863;t t&#234;n bi&#7871;n, khoanh v&#249;ng nh&#7919;ng context kh&#243; hi&#7875;u, v.v)</p></li><li><p>Kh&#244;ng ng&#7841;i &#273;&#7863;t c&#226;u h&#7887;i v&#224; cung c&#7845;p feedbacks cho ng&#432;&#7901;i &#273;&#432;&#7907;c review code</p></li><li><p>N&#243;i &#8220;kh&#244;ng&#8221; v&#7899;i nh&#7919;ng pull requests ch&#432;a r&#245; r&#224;ng (v&#237; d&#7909;: pull request c&#243; h&#417;n 5,000 file changes, v.v)</p></li><li><p>Vi&#7871;t comment code &#8220;nh&#7865; nh&#224;ng&#8221;, mang t&#237;nh x&#226;y d&#7921;ng v&#224; &#273;&#243;ng g&#243;p &#273;&#7875; ng&#432;&#7901;i &#273;&#432;&#7907;c review code c&#243; th&#7875; c&#7843;i thi&#7879;n</p></li></ul><p>&#272;&#7875; t&#236;m hi&#7875;u chi ti&#7871;t h&#417;n v&#7873; t&#7915;ng key point, m&#7901;i b&#7841;n &#273;&#7885;c c&#249;ng tham kh&#7843;o b&#224;i vi&#7871;t</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><a href="https://engineering.atspotify.com/2023/03/getting-more-from-your-team-health-checks/">Getting More from Your Team Health Checks</a></h3><p><em>(by steven.do)</em></p><p>T&#7841;i Spotify vi&#7879;c theo d&#245;i v&#224; ki&#7875;m tra t&#237;nh hi&#7879;u qu&#7843; (health-check) trong c&#225;c &#273;&#7897;i nh&#243;m &#273;&#227; &#273;&#432;&#7907;c tri&#7875;n khai &#225;p d&#7909;ng trong m&#7897;t th&#7901;i gian d&#224;i. C&#225;c team &#273;&#7897;i s&#7869; t&#7841;m d&#7915;ng c&#225;c ho&#7841;t &#273;&#7897;ng h&#224;ng ng&#224;y c&#7911;a &#273;&#7875; ti&#7871;n h&#224;nh  vi&#7879;c &#273;&#225;nh gi&#225; hi&#7879;u qu&#7843; nh&#7857;m gi&#250;p c&#225;c &#273;&#7897;i c&#243; c&#225;i nh&#236;n bao qu&#225;t h&#417;n v&#7873; c&#225;ch c&#225;c th&#224;nh vi&#234;n trong m&#7895;i &#273;&#7897;i nh&#243;m &#273;ang l&#224;m vi&#7879;c. V&#7899;i m&#7909;c &#273;&#237;ch c&#7843;i thi&#7879;n s&#7921; t&#7921; nh&#7853;n th&#7913;c c&#7911;a m&#7895;i th&#224;nh vi&#234;n &#273;&#7891;ng th&#7901;i cho ph&#233;p h&#7885; nh&#236;n th&#7845;y r&#245; h&#417;n c&#225;c c&#417; h&#7897;i c&#7843;i thi&#7879;n, ph&#225;t tri&#7875;n c&#225;c k&#7929; n&#259;ng c&#225; nh&#226;n v&#224; ph&#7889;i h&#7907;p l&#224;m vi&#7879;c v&#7899;i &#273;&#7897;i nh&#243;m hi&#7879;u qu&#7843; v&#224; gi&#7843;i to&#7843; c&#225;c m&#226;u thu&#7851;n b&#7845;t &#273;&#7891;ng n&#7843;y sinh trong qu&#225; tr&#236;nh l&#224;m vi&#7879;c. C&#225;c k&#7871;t qu&#7843; t&#7893;ng h&#7907;p t&#7915; c&#225;c ki&#7875;m tra &#273;&#225;nh gi&#225; t&#236;nh tr&#7841;ng d&#7897;i nh&#243;m n&#224;y c&#361;ng cung c&#7845;p cho tr&#432;&#7903;ng b&#7897; ph&#7853;n qu&#7843;n l&#253; c&#225;c &#273;&#7897;i m&#7897;t c&#225;ch &#273;&#7875; theo d&#245;i c&#225;c m&#244; h&#236;nh v&#224; xu h&#432;&#7899;ng ph&#225;t  tri&#7875;n tr&#234;n nhi&#7873;u &#273;&#7897;i nh&#243;m theo th&#7901;i gian &#273;&#7875; c&#243; th&#234;m d&#7919; li&#7879;u nh&#7857;m h&#7895; tr&#7907; c&#225;c ho&#7841;t &#273;&#7897;ng c&#7911;a c&#225;c &#273;&#7897;i nh&#243;m k&#7883;p th&#7901;i.</p><p>Nh&#236;n chung, ho&#7841;t &#273;&#7897;ng &#273;&#225;nh gi&#225; s&#7913;c kh&#7887;e &#273;&#7897;i nh&#243;m t&#7841;i Spotify bao g&#7891;m c&#225;c b&#432;&#7899;c nh&#432; sau:</p><ul><li><p>Kh&#7843;o s&#225;t d&#7921;a tr&#234;n m&#7897;t b&#7843;ng c&#226;u h&#7887;i v&#7873; tech &#273;&#7897;i nh&#243;m &#273;ang s&#7917; d&#7909;ng, &#273;&#225;nh gi&#225; t&#236;nh h&#236;nh ho&#7841;t &#273;&#7897;ng c&#7911;a &#273;&#7897;i nh&#243;m, &#273;&#225;nh gi&#225; t&#236;nh tr&#7841;ng c&#7911;a s&#7843;n ph&#7849;m c&#7911;a &#273;&#7897;i nh&#243;m.</p></li><li><p>T&#7893; ch&#7913;c bu&#7893;i th&#7843;o lu&#7853;n v&#7873; k&#7871;t qu&#7843; c&#7911;a b&#7843;n kh&#7843;o s&#225;t gi&#7919;a c&#225;c th&#224;nh vi&#234;n trong &#273;&#7897;i nh&#243;m v&#224; th&#7843;o lu&#7853;n &#273;&#432;a ra h&#432;&#7899;ng x&#7917; l&#253; kh&#7855;c ph&#7909;c.</p></li><li><p>T&#7893;ng h&#7907;p k&#7871;t qu&#7843; c&#225;c &#253; ki&#7871;n &#273;&#243;ng g&#243;p v&#224; kh&#7843;o s&#225;t t&#7915; nhi&#7873;u &#273;&#7897;i nh&#243;m nh&#7857;m x&#225;c &#273;&#7883;nh c&#225;c &#273;&#7863;c tr&#432;ng v&#224; &#273;i&#7875;m t&#432;&#417;ng &#273;&#7891;ng gi&#7919;a c&#225;c v&#7845;n &#273;&#7873; c&#225;c &#273;&#7897;i nh&#243;m &#273;ang g&#7863;p ph&#7843;i &#7903; m&#7913;c &#273;&#7897; t&#7893;ng quan.</p></li></ul><p>B&#224;i vi&#7871;t c&#361;ng cung c&#7845;p th&#234;m nhi&#7873;u th&#244;ng tin v&#224; ph&#432;&#417;ng ph&#225;p gi&#250;p vi&#7879;c trao &#273;&#7893;i v&#224; khuy&#7871;n kh&#237;ch c&#225;c th&#224;nh vi&#234;n trong m&#7895;i &#273;&#7897;i nh&#243;m n&#234;u l&#234;n &#253; ki&#7871;n v&#224; quan &#273;i&#7875;m nh&#7853;n &#273;&#7883;nh c&#225; nh&#226;n nh&#7857;m gi&#250;p cho c&#225;c nh&#224; qu&#7843;n l&#253; n&#7855;m b&#7855;t &#273;&#432;&#7907;c r&#245; r&#224;ng h&#417;n v&#7873; c&#225;c v&#7845;n &#273;&#7873; &#273;ang t&#7891;n t&#7841;i v&#224; g&#226;y &#7843;nh h&#432;&#7903;ng &#273;&#7871;n hi&#7879;u qu&#7843; ho&#7841;t &#273;&#7897;ng c&#7911;a &#273;&#7897;i nh&#243;m.</p><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c</strong></h3><p>Nh&#243;m bi&#234;n t&#7853;p c&#243; nh&#7853;n &#273;&#432;&#7907;c n&#7897;i dung chia s&#7867; t&#7915; b&#7841;n &#273;&#7885;c T &#273;ang l&#224;m vi&#7879;c &#7903; m&#7897;t c&#244;ng ty c&#244;ng ngh&#7879; v&#7899;i quy m&#244; tr&#234;n 1000 nh&#226;n s&#7921; d&#432;&#7899;i vai tr&#242; Engineer Manager. Nh&#243;m s&#7869; b&#7855;t &#273;&#7847;u tr&#237;ch &#273;&#259;ng n&#7897;i dung chia s&#7867; c&#7911;a b&#7841;n vi&#7871;t v&#7873; c&#244;ng vi&#7879;c h&#224;ng ng&#224;y c&#7911;a m&#236;nh trong c&#225;c s&#7889; newsletter t&#7899;i.</p><p>Ngo&#224;i ra, &#273;&#7875; n&#7897;i dung th&#234;m phong ph&#250; nh&#243;m c&#361;ng hy v&#7885;ng c&#243; d&#7883;p ph&#7887;ng v&#7845;n c&#225;c b&#7841;n &#273;ang l&#224;m vi&#7879;c &#7903; c&#225;c c&#244;ng ty c&#244;ng ngh&#7879; v&#7899;i c&#225;c vai tr&#242; kh&#225;c nhau nh&#432; Software Engineer, QA, Manager, Product Owner, ML Ops, DevOps&#8230; chia s&#7867; th&#234;m v&#7873; c&#244;ng vi&#7879;c h&#7857;ng ng&#224;y v&#224; nh&#7919;ng th&#225;ch th&#7913;c trong c&#244;ng vi&#7879;c c&#7911;a m&#236;nh. B&#7841;n n&#224;o s&#7861;n l&#242;ng chia s&#7867; vui l&#242;ng reply email n&#224;y, nh&#243;m s&#7869; s&#7855;p x&#7871;p m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n &#273;&#7875; t&#236;m hi&#7875;u v&#7873; c&#244;ng vi&#7879;c c&#7911;a b&#7841;n &#273;&#7875; vi&#7871;t l&#7841;i v&#224; g&#7917;i &#273;&#7871;n cho c&#7897;ng &#273;&#7891;ng.</p><blockquote><h4>M&#7897;t tu&#7847;n l&#224;m vi&#7879;c c&#7911;a Engineer manager ra sao? (p2)</h4><h5>Th&#7913; ba</h5><p>S&#225;ng th&#7913; ba th&#432;&#7901;ng s&#7869; b&#7855;t &#273;&#7847;u b&#7857;ng h&#7885;p stand-up online v&#7899;i team nh&#7887; &#273;ang tr&#7921;c ti&#7871;p ph&#7909; tr&#225;ch. Trong bu&#7893;i stand up c&#225;c th&#224;nh vi&#234;n s&#7869; m&#7903; tasks board ra, sau &#273;&#243; t&#7915;ng th&#224;nh vi&#234;n s&#7869; l&#7847;n l&#432;&#7907;t &#273;i&#7875;m qua c&#225;c vi&#7879;c &#273;&#227; l&#224;m ng&#224;y h&#244;m tr&#432;&#7899;c c&#361;ng nh&#432; n&#234;u ra c&#225;c v&#7845;n &#273;&#7873; c&#7847;n x&#7917; l&#253;. N&#7871;u c&#243; v&#7845;n &#273;&#7873; c&#7847;n th&#7843;o lu&#7853;n th&#236; c&#225;c th&#224;nh vi&#234;n c&#243; th&#7875; t&#7921; h&#7865;n &#273;&#7875; th&#7843;o lu&#7853;n ri&#234;ng sau &#273;&#243;. Trong ho&#7841;t &#273;&#7897;ng n&#224;y th&#236; v&#7899;i vai tr&#242; EM, b&#7843;n th&#226;n ch&#7881; tham gia &#273;&#7875; c&#7853;p nh&#7853;t th&#244;ng tin l&#224; ch&#7911; y&#7871;u, ho&#7863;c th&#7881;nh tho&#7843;ng c&#243; th&#7875; &#273;&#432;a ra g&#243;p &#253; v&#7873; h&#432;&#7899;ng x&#7917; l&#253; m&#7897;t ticket l&#224; tho&#7843; &#273;&#225;ng hay ch&#432;a.</p><p>Ph&#7847;n c&#242;n l&#7841;i c&#7911;a bu&#7893;i s&#225;ng s&#7869; l&#224; h&#7885;p Operational Excellent c&#7911;a to&#224;n c&#244;ng ty. Trong bu&#7893;i h&#7885;p n&#224;y, c&#225;c team ph&#7909; tr&#225;ch v&#7873; v&#7853;n h&#224;ng s&#7869; &#273;i&#7875;m qua nhi&#7873;u v&#7845;n &#273;&#7873; nh&#432; t&#236;nh h&#236;nh cost, c&#225;c incidents, c&#225;c v&#7845;n &#273;&#7873; v&#7873; security, c&#225;c v&#7845;n &#273;&#7873; v&#7873; &#273;&#7897; &#7893;n &#273;&#7883;nh chung c&#7911;a to&#224;n h&#7879; th&#7889;ng theo c&#225;c nh&#243;m service kh&#225;c nhau.  Ngo&#224;i ra, c&#225;c team n&#224;o c&#243; s&#7921; c&#7889; s&#7869; tr&#236;nh b&#224;y Post Mortem c&#7911;a team m&#236;nh. </p><p>N&#243;i th&#234;m m&#7897;t t&#237; v&#7873; Post-Mortem (PM), c&#7845;u tr&#250;c th&#432;&#7901;ng c&#243; c&#7911;a m&#7897;t PM th&#432;&#7901;ng bao g&#7891;m:</p><ul><li><p>Gi&#7899;i thi&#7879;u t&#7893;ng quan v&#7873; s&#7921; c&#7889;</p></li><li><p>Timestamp c&#225;c s&#7921; ki&#7879;n di&#7877;n ra tr&#432;&#7899;c, trong v&#224; sau khi s&#7921; c&#7889;</p></li><li><p>Ph&#226;n t&#237;ch s&#226;u v&#7873; nguy&#234;n nh&#226;n g&#7889;c r&#7877; d&#7851;n &#273;&#7871;n s&#7921; c&#7889; </p></li><li><p>C&#225;c h&#224;nh &#273;&#7897;ng &#273;&#227; l&#224;m &#273;&#7875; ph&#7909;c h&#7891;i h&#7879; th&#7889;ng c&#361;ng nh&#432; gi&#7843;m thi&#7875;u thi&#7879;t h&#7841;i (mitigate)</p></li><li><p>B&#224;i h&#7885;c kinh nghi&#7879;m c&#7847;n r&#250;t ra.</p></li></ul><p>&#272;&#7889;i v&#7899;i m&#7897;t t&#7893; ch&#7913;c l&#7899;n v&#7853;n h&#224;nh nhi&#7873;u service ph&#7913;c t&#7841;p th&#236; c&#225;c PM l&#224; m&#7897;t ho&#7841;t &#273;&#7897;ng r&#7845;t quan tr&#7885;ng v&#236; n&#243; s&#7869; gi&#250;p ch&#250;ng ta r&#250;t kinh nghi&#7879;m m&#7895;i khi c&#243; s&#7921; c&#7889; x&#7843;y ra. M&#7897;t PM t&#7889;t c&#7847;n ph&#226;n t&#237;ch s&#226;u v&#224; &#273;&#7871;n g&#7889;c r&#7877; v&#7845;n &#273;&#7873; (Root-cause) &#273;&#7875; t&#7915; &#273;&#243; c&#243; th&#7875; r&#250;t ra b&#224;i h&#7885;c cho c&#225;c service kh&#225;c c&#243; th&#7875; &#225;p d&#7909;ng. Qu&#225; tr&#236;nh ph&#226;n t&#237;ch c&#361;ng c&#243; th&#7875; &#225;p d&#7909;ng nhi&#7873;u k&#7929; thu&#7853;t nh&#432;ng ph&#7893; bi&#7871;n nh&#7845;t l&#224; 5-whys: &#273;&#7863;t li&#234;n t&#7909;c 5+ c&#226;u h&#7887;i t&#7841;i sao cho &#273;&#7871;n khi c&#243; th&#7875; ch&#7841;m &#273;&#7871;n g&#7889;c r&#7877;.</p><p>V&#237; d&#7909; v&#7873; qu&#225; tr&#236;nh &#273;&#7863;t c&#226;u h&#7887;i 5-whys &#273;&#432;&#7907;c &#273;&#417;n gi&#7843;n ho&#225; &#273;&#7875; c&#243; th&#7875; d&#7877; h&#236;nh dung:</p><ul><li><p><em>T&#7841;i sao l&#7841;i service A l&#7841;i c&#243; g&#7863;p l&#7895;i 500 li&#234;n t&#7909;c trong khung th&#7901;i gian 15 ph&#250;t t&#7915; th&#7901;i &#273;i&#7875;m 11:00am &#273;&#7871;n 11:15am? &#8594; T&#7841;i v&#236; service A g&#7885;i &#273;&#7871;n service B, service B tr&#7843; v&#7873; k&#7871;t qu&#7843; v&#7899;i &#273;&#7897; tr&#7877; p99=800ms trong khi y&#234;u c&#7847;u t&#7915; service A l&#224; 150ms.</em></p></li><li><p><em>T&#7841;i sao service B l&#7841;i tr&#7843; v&#7873; k&#7871;t qu&#7843; v&#7899;i &#273;&#7897; tr&#7877; p99=800ms trong khung th&#7901;i gian &#273;&#243;? &#8594; T&#7841;i v&#236; database service B &#273;ang d&#249;ng tr&#7843; v&#7873; k&#7871;t qu&#7843; cho endpoint XX v&#7899;i &#273;&#7897; tr&#7877; p99=700ms, cao h&#417;n th&#432;&#7901;ng l&#7879;.</em></p></li><li><p><em>T&#7841;i sao database service B &#273;ang d&#249;ng l&#7841;i tr&#7843; v&#7873; k&#7871;t qu&#7843; c&#243; &#273;&#7897; tr&#7877; cao p99=700ms v&#224; cao h&#417;n th&#432;&#7901;ng l&#7879;? &#8594; T&#7841;i v&#236; m&#7897;t partition c&#7911;a database &#273;ang d&#249;ng b&#7883; overload d&#7851;n &#273;&#7871;n c&#225;c request &#273;&#7871;n partition n&#224;y c&#243; &#273;&#7897; tr&#7877; cao h&#417;n.</em></p></li><li><p><em>T&#7841;i sao partition l&#7841;i b&#7883; overload? &#8594; T&#7841;i v&#236; c&#243; m&#7897;t l&#432;&#7907;ng request t&#259;ng &#273;&#7897;t bi&#7871;n &#273;&#7871;n t&#7915; service C c&#361;ng g&#7885;i qua service B, trong l&#432;&#7907;ng request n&#224;y c&#243; k&#232;m m&#7897;t s&#7889; l&#7879;nh update &#273;&#7871;n t&#7915; partition t&#432;&#417;ng &#7913;ng d&#7851;n &#273;&#7871;n overload partition n&#224;y.</em></p></li><li><p><em>T&#7841;i sao l&#7841;i c&#243; m&#7897;t l&#432;&#7907;ng request t&#259;ng &#273;&#7897;t bi&#7871;n &#273;&#7871;n t&#7915; service C? &#8594; T&#7841;i v&#236; redis cluster c&#7911;a service C b&#7883; down d&#7851;n &#273;&#7871;n m&#7897;t l&#432;&#7907;ng l&#7899;n request v&#7889;n n&#234;n &#273;&#432;&#7907;c cache b&#7903;i service C b&#7883; &#273;&#7849;y sang service B.</em></p></li></ul><p>Trong th&#7921;c t&#7871;, vi&#7879;c &#273;&#7863;t c&#226;u h&#7887;i c&#243; th&#7875; nhi&#7873;u h&#417;n ho&#7863;c &#237;t h&#417;n. Nh&#432;ng nh&#236;n chung khi ph&#226;n t&#237;ch, &#273;&#7863;t c&#226;u h&#7887;i &#273;&#250;ng th&#236; s&#7869; d&#7851;n &#273;&#7871;n c&#225;c b&#224;i h&#7885;c kinh nghi&#7879;m ph&#249; h&#7907;p &#273;&#7875; t&#7915; &#273;&#243; ng&#259;n ch&#7863;n c&#225;c v&#7845;n &#273;&#7873; ph&#225;t sinh trong t&#432;&#417;ng lai.</p><p>K&#7871;t th&#250;c bu&#7893;i s&#225;ng th&#7913; ba, bu&#7893;i chi&#7873;u th&#432;&#7901;ng s&#7869; b&#7855;t &#273;&#7847;u b&#7857;ng bu&#7893;i h&#7885;p Operational Excellent c&#7911;a platform &#273;ang ph&#7909; tr&#225;ch. Trong &#273;&#243;, c&#225;c th&#224;nh vi&#234;n s&#7869; review c&#225;c th&#244;ng s&#7889; v&#7853;n h&#224;nh nh&#432; SLI, SLO, c&#225;c v&#7845;n &#273;&#7873; m&#7899;i ph&#225;t sinh c&#7847;n &#273;&#224;o s&#226;u, &#8230; N&#7871;u ch&#7881; s&#7889; n&#224;o kh&#244;ng &#273;&#7841;t SLO th&#236; s&#7869; c&#7847;n &#273;i&#7873;u tra nguy&#234;n nh&#226;n.&nbsp;</p><p>Ti&#7871;p &#273;&#7871;n s&#7869; l&#224; h&#7885;p d&#224;nh cho leader c&#7911;a platform &#273;ang ph&#7909; tr&#225;ch trong &#273;&#243; s&#7869; &#273;i&#7875;m qua c&#225;c ch&#7911; &#273;&#7873; t&#7893;ng quan c&#7911;a platform nh&#432; c&#225;c use-case m&#7899;i c&#7847;n x&#7917; l&#253;, th&#244;ng tin t&#7915; c&#225;c platform li&#234;n quan, ch&#7889;t OKR, th&#7843;o lu&#7853;n milestone ti&#7871;p theo c&#7911;a c&#225;c d&#7921; &#225;n &#273;ang tri&#7875;n khai, &#8230;</p><p>Ph&#7847;n c&#242;n l&#7841;i c&#7911;a bu&#7893;i chi&#7873;u l&#224; xen k&#7869; 1:1 v&#7899;i leader ho&#7863;c coordinator c&#249;ng team, team kh&#225;c &#273;&#7875; c&#7853;p nh&#7853;t t&#236;nh h&#236;nh l&#7851;n nhau c&#361;ng nh&#432; th&#7843;o lu&#7853;n v&#7873; c&#225;c d&#7921; &#225;n &#273;ang ph&#7909; tr&#225;ch c&#7911;a nhau. &#272;&#7889;i v&#7899;i b&#7843;n th&#226;n th&#236; c&#225;c bu&#7893;i 1:1 l&#224; m&#7897;t ho&#7841;t &#273;&#7897;ng kh&#244;ng th&#7875; thi&#7871;u &#273;&#7863;c bi&#7879;t l&#224; &#273;&#7889;i v&#7899;i c&#225;c team li&#234;n quan &#273;&#7875; c&#243; th&#7875; t&#7853;p trung th&#7843;o lu&#7853;n c&#225;c ch&#7911; &#273;&#7873; t&#7893;ng quan v&#7873; problem space c&#7911;a t&#7915;ng team, ho&#7863;c c&#225;c v&#7845;n &#273;&#7873; mang t&#237;nh ch&#7845;t d&#224;i h&#7841;n h&#417;n (3-6 th&#225;ng) thay v&#236; c&#225;c ho&#7841;t &#273;&#7897;ng h&#224;ng ng&#224;y v&#7889;n &#273;&#227; c&#243; quy tr&#236;nh t&#432;&#417;ng &#7913;ng &#273;&#7875; x&#7917; l&#253;.</p><p>(c&#242;n ti&#7871;p)</p></blockquote><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>&#8220;Measure. Don&#8217;t tune for speed until you&#8217;ve measured.&#8221;</p></div><p></p><div class="poll-embed" data-attrs="{&quot;id&quot;:86533}" data-component-name="PollToDOM"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#261 - Một tuần làm việc của Engineering Manager]]></title><description><![CDATA[Nh&#243;m bi&#234;n t&#7853;p c&#243; nh&#7853;n &#273;&#432;&#7907;c n&#7897;i dung chia s&#7867; t&#7915; b&#7841;n &#273;&#7885;c T &#273;ang l&#224;m vi&#7879;c &#7903; m&#7897;t c&#244;ng ty c&#244;ng ngh&#7879; v&#7899;i quy m&#244; tr&#234;n 1000 nh&#226;n s&#7921; v&#7899;i vai tr&#242; Engineering Manager.]]></description><link>https://newsletter.grokking.org/p/261-mot-tuan-lam-viec-cua-engineering</link><guid isPermaLink="false">https://newsletter.grokking.org/p/261-mot-tuan-lam-viec-cua-engineering</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Mon, 10 Jul 2023 11:27:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Nh&#243;m bi&#234;n t&#7853;p c&#243; nh&#7853;n &#273;&#432;&#7907;c n&#7897;i dung chia s&#7867; t&#7915; b&#7841;n &#273;&#7885;c T &#273;ang l&#224;m vi&#7879;c &#7903; m&#7897;t c&#244;ng ty c&#244;ng ngh&#7879; v&#7899;i quy m&#244; tr&#234;n 1000 nh&#226;n s&#7921; v&#7899;i vai tr&#242; Engineering Manager. Nh&#243;m s&#7869; b&#7855;t &#273;&#7847;u tr&#237;ch &#273;&#259;ng n&#7897;i dung chia s&#7867; c&#7911;a b&#7841;n vi&#7871;t v&#7873; c&#244;ng vi&#7879;c h&#224;ng ng&#224;y c&#7911;a m&#236;nh trong c&#225;c s&#7889; newsletter t&#7899;i.</p><p>Ngo&#224;i ra, &#273;&#7875; n&#7897;i dung th&#234;m phong ph&#250; nh&#243;m c&#361;ng hy v&#7885;ng c&#243; d&#7883;p ph&#7887;ng v&#7845;n c&#225;c b&#7841;n &#273;ang l&#224;m vi&#7879;c &#7903; c&#225;c c&#244;ng ty c&#244;ng ngh&#7879; v&#7899;i c&#225;c vai tr&#242; kh&#225;c nhau nh&#432; Software Engineer, QA, Manager, Product Owner, ML Ops, DevOps&#8230; chia s&#7867; th&#234;m v&#7873; c&#244;ng vi&#7879;c h&#7857;ng ng&#224;y v&#224; nh&#7919;ng th&#225;ch th&#7913;c trong c&#244;ng vi&#7879;c c&#7911;a m&#236;nh. B&#7841;n n&#224;o s&#7861;n l&#242;ng chia s&#7867; vui l&#242;ng reply email n&#224;y, nh&#243;m s&#7869; s&#7855;p x&#7871;p m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n &#273;&#7875; t&#236;m hi&#7875;u v&#7873; c&#244;ng vi&#7879;c c&#7911;a b&#7841;n &#273;&#7875; vi&#7871;t l&#7841;i v&#224; g&#7917;i &#273;&#7871;n cho c&#7897;ng &#273;&#7891;ng.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://www.infoq.com/news/2023/07/linkedin-member-profile-caching/">How LinkedIn Serves over 4.8 Million Member Profiles per Second</a></h4><p>(by quangle80)</p><p><strong>LinkedIn</strong> v&#7915;a gi&#7899;i thi&#7879;u m&#7897;t k&#7929; thu&#7853;t c&#243; t&#234;n g&#7885;i <strong>Couchbase as a centralized caching</strong> <strong>tier</strong> (t&#7853;n d&#7909;ng Couchbase cho &#273;&#7875; l&#224;m t&#7847;ng b&#7897; nh&#7899; cache t&#7853;p trung) &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n scaling cho t&#237;nh n&#259;ng &#273;&#7885;c member profile, nh&#7857;m &#273;&#225;p &#7913;ng vi&#7879;c x&#7917; l&#253; l&#432;u l&#432;&#7907;ng truy c&#7853;p ng&#224;y c&#224;ng t&#259;ng &#273;&#7871;n c&#225;c c&#7909;m database cluster c&#7911;a h&#7879; th&#7889;ng.</p><p>Nhi&#7873;u n&#259;m qua, <strong>LinkedIn</strong> x&#226;y d&#7921;ng t&#237;nh n&#259;ng member profiles b&#7857;ng c&#225;ch truy v&#7845;n tr&#7921;c ti&#7871;p v&#224;o Espresso document platform - m&#7897;t n&#7873;n t&#7843;ng &#273;&#432;&#7907;c x&#226;y d&#7921;ng tr&#234;n MySQL, Apache Helix, Databus (LinkedIn&#8217;s change capture system) v&#224; s&#7917; d&#7909;ng Avro &#273;&#7875; chu&#7849;n h&#243;a d&#7919; li&#7879;u. Espresso routers s&#7869; &#273;i&#7873;u ph&#7889;i c&#225;c requests read/write &#273;&#7871;n &#273;&#250;ng c&#225;c c&#7909;m l&#432;u tr&#7919; v&#224; s&#7917; d&#7909;ng off-heap cache (OHC) cho c&#225;c hot keys.</p><p>Th&#7917; th&#225;ch &#273;&#7863;t ra l&#224; v&#224;o l&#250;c cao &#273;i&#7875;m, h&#7879; th&#7889;ng ph&#7843;i x&#7917; l&#253; h&#417;n 4,8 tri&#7879;u RPS, h&#7879; th&#7889;ng Espresso th&#236; &#273;&#227; &#273;&#7841;t &#273;&#7871;n gi&#7899;i h&#7841;n v&#7873; kh&#7843; n&#259;ng m&#7903; r&#7897;ng. Thay v&#236; l&#224;m l&#7841;i c&#225;c th&#224;nh ph&#7847;n c&#7889;t l&#245;i c&#7911;a n&#7873;n t&#7843;ng Espresso, nh&#243;m &#273;&#227; ch&#7885;n gi&#7843;i ph&#225;p x&#226;y d&#7921;ng m&#7897;t t&#7847;ng caching m&#7899;i. T&#7847;ng caching m&#7899;i n&#224;y &#273;&#432;&#7907;c t&#237;ch h&#7907;p v&#224;o Espresso, k&#7871;t h&#7907;p OHC hi&#7879;n c&#243; v&#224; t&#7853;n d&#7909;ng c&#225;c s&#7913;c m&#7841;nh c&#7911;a Couchbase nh&#432; kh&#7843; n&#259;ng ch&#7883;u l&#7895;i, cache data availability v&#224; ng&#259;n ch&#7863;n t&#236;nh tr&#7841;ng data divergence. L&#250;c n&#224;y, t&#7845;t c&#7843; d&#7919; li&#7879;u member profiles &#273;&#432;&#7907;c l&#432;u v&#224;o b&#7897; nh&#7899; cache &#7903; m&#7885;i data-center v&#224; &#273;&#432;&#7907;c c&#7853;p nh&#7853;t b&#7903;i c&#225;c Apache Samza jobs. C&#225;c thay &#273;&#7893;i v&#7873; d&#7919; li&#7879;u &#273;&#7871;n t&#7915; thao t&#225;c ghi &#273;&#432;&#7907;c captured b&#7903;i c&#225;c c&#7909;m Espresso Storage, hay c&#225;c database snapshots &#273;&#7883;nh k&#7923; s&#7869; &#273;&#432;&#7907;c C&#417; ch&#7871; Couchbase Compare-And-Swap (CAS) ghi nh&#7853;n v&#224; &#273;i update l&#7841;i cache n&#7871;u c&#7847;n.</p><p>Theo s&#7889; li&#7879;u th&#7889;ng k&#234; t&#7915; &#273;&#7897;i ng&#361;, gi&#7843;i ph&#225;p m&#7899;i n&#224;y &#273;&#7841;t t&#7881; l&#7879; th&#224;nh c&#244;ng h&#417;n 99%, c&#7855;t gi&#7843;m h&#417;n 60% &#273;&#7897; tr&#7877; v&#224; ti&#7871;t ki&#7879;m 10% chi ph&#237; h&#7841; t&#7847;ng h&#7857;ng n&#259;m. &#272;&#7875; t&#236;m hi&#7875;u chi ti&#7871;t h&#417;n v&#7873; b&#224;i vi&#7871;t c&#361;ng nh&#432; l&#253; do ch&#7885;n Couchbase cho t&#7847;ng Caching, m&#7901;i b&#7841;n &#273;&#7885;c tham kh&#7843;o b&#224;i vi&#7871;t.</p><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c</strong></h3><blockquote><h4><strong>Th&#7913; hai </strong>- ng&#224;y c&#7911;a planning</h4><p>S&#225;ng &#273;&#7847;u tu&#7847;n kh&#7903;i &#273;&#7897;ng b&#7857;ng hai cu&#7897;c h&#7885;p sprint planning cho hai team &#273;ang ph&#7909; tr&#225;ch. Th&#432;&#7901;ng th&#7913; hai s&#7869; &#273;&#432;&#7907;c d&#249;ng cho sprint planning ho&#7863;c backlog grooming, xen k&#7869; m&#7895;i tu&#7847;n. Tu&#7923; v&#224;o l&#432;&#7907;ng c&#244;ng vi&#7879;c m&#224; c&#243; th&#7875; m&#236;nh s&#7869; b&#7887; qua cu&#7897;c h&#7885;p n&#224;y m&#224; ch&#7881; theo d&#245;i t&#236;nh tr&#7841;ng backlog sau khi m&#7885;i ng&#432;&#7901;i trong team &#273;&#227; h&#7885;p xong.</p><p>&#7902; team m&#236;nh, m&#7897;t sprint s&#7869; k&#233;o d&#224;i hai tu&#7847;n. &#272;&#7847;u sprint m&#7885;i ng&#432;&#7901;i s&#7869; c&#249;ng duy&#7879;t qua backlog &#273;&#7875; ch&#7885;n ra c&#225;c task quan tr&#7885;ng c&#7847;n ph&#7843;i ho&#224;n th&#224;nh trong sprint n&#224;y. Sau &#273;&#243; m&#7885;i ng&#432;&#7901;i c&#361;ng s&#7869; duy&#7879;t qua c&#225;c project quan tr&#7885;ng v&#224; &#273;i&#7873;u ch&#7881;nh l&#7883;ch release d&#7921; ki&#7871;n n&#7871;u c&#7847;n thi&#7871;t. Th&#244;ng th&#432;&#7901;ng, backlog kh&#225; d&#224;i n&#234;n vi&#7879;c review c&#225;c task v&#224; &#273;&#7897; &#432;u ti&#234;n s&#7869; &#273;&#432;&#7907;c l&#224;m tr&#432;&#7899;c trong c&#225;c bu&#7893;i backlog grooming c&#7911;a tu&#7847;n tr&#432;&#7899;c &#273;&#243; &#273;&#7875; khi l&#224;m sprint planning th&#236; s&#7869; kh&#244;ng t&#7889;n th&#7901;i gian review &#273;&#7897; &#432;u ti&#234;n l&#7841;i.</p><p>Chi&#7873;u th&#7913; hai th&#432;&#7901;ng s&#7869; c&#243; cu&#7897;c h&#7885;p giao ban ng&#7855;n gi&#7919;a oncall tu&#7847;n tr&#432;&#7899;c v&#224; oncall tu&#7847;n n&#224;y. &#7902; c&#244;ng ty m&#236;nh, t&#7841;i m&#7897;t th&#7901;i &#273;i&#7875;m s&#7869; lu&#244;n c&#243; ng&#432;&#7901;i ph&#7909; tr&#225;ch tr&#7921;c cho m&#7897;t service ho&#7863;c m&#7897;t platform, ng&#432;&#7901;i n&#224;y s&#7869; &#273;&#432;&#7907;c g&#7885;i l&#224; oncall. Tu&#7923; team m&#224; ca tr&#7921;c oncall theo ng&#224;y ho&#7863;c theo tu&#7847;n. Nhi&#7879;m v&#7909; c&#7911;a oncall s&#7869; l&#224; theo d&#245;i t&#236;nh h&#236;nh h&#7879; th&#7889;ng, ph&#7843;n &#7913;ng khi c&#243; c&#225;c c&#7843;nh b&#225;o s&#7921; c&#7889; ho&#7863;c v&#7845;n &#273;&#7873; x&#7843;y ra, tr&#7843; l&#7901;i c&#225;c c&#226;u h&#7887;i c&#7911;a team kh&#225;c li&#234;n quan &#273;&#7871;n c&#225;c ph&#7847;n h&#7879; th&#7889;ng c&#7911;a team m&#236;nh. Trong bu&#7893;i h&#7885;p giao ban n&#224;y, ng&#432;&#7901;i ph&#7909; tr&#225;ch oncall tu&#7847;n tr&#432;&#7899;c s&#7869; &#273;i&#7875;m qua nh&#7919;ng v&#7845;n &#273;&#7873; ph&#225;t sinh c&#7911;a tu&#7847;n r&#7891;i v&#224; c&#225;c &#273;i&#7873;u c&#7847;n l&#432;u &#253; ti&#7871;p.</p><p>Trong chi&#7873;u th&#7913; hai n&#224;y team m&#236;nh c&#243; m&#7897;t bu&#7893;i h&#7885;p &#273;&#7897;t xu&#7845;t &#273;&#7875; review m&#7897;t Post-mortem &#273;&#432;&#7907;c vi&#7871;t b&#7903;i m&#7897;t b&#7841;n trong team, tr&#236;nh b&#224;y v&#7873; nguy&#234;n nh&#226;n d&#7851;n &#273;&#7871;n s&#7921; c&#7889; service b&#7883; ngh&#7869;n trong 2 ng&#224;y li&#234;n t&#7909;c, m&#7895;i l&#7847;n ngh&#7869;n di&#7877;n ra trong 5 ph&#250;t d&#7851;n &#273;&#7871;n m&#7897;t lo&#7841;t c&#225;c service li&#234;n quan c&#361;ng b&#7883; ngh&#7869;n theo. M&#7885;i ng&#432;&#7901;i s&#7869; c&#249;ng review Post-mortem c&#7911;a b&#7841;n ph&#7909; tr&#225;ch v&#224; &#273;&#432;a ra g&#243;p &#253;, ph&#7843;n bi&#7879;n c&#361;ng nh&#432; &#273;&#7863;t c&#225;c c&#226;u h&#7887;i &#273;&#7875; l&#224;m r&#245; h&#417;n v&#7873; nguy&#234;n nh&#226;n s&#7921; c&#7889;. </p><p>S&#7921; c&#7889; n&#224;y th&#250; v&#7883; v&#236; sau khi &#273;i&#7873;u tra c&#7909; th&#7875; th&#236; ph&#225;t hi&#7879;n ra m&#7863;t d&#249; d&#7845;u hi&#7879;u ban &#273;&#7847;u c&#7911;a vi&#7879;c b&#7883; ngh&#7869;n trong 2 ng&#224;y l&#224; gi&#7889;ng nhau, nh&#432;ng nguy&#234;n nh&#226;n s&#226;u xa g&#226;y ra l&#7841;i ho&#224;n to&#224;n kh&#225;c nhau. &#7902; ng&#224;y &#273;&#7847;u ti&#234;n, service b&#7883; ngh&#7869;n v&#236; m&#7897;t node trong c&#7909;m server kh&#244;ng ph&#7909;c v&#7909; &#273;&#432;&#7907;c traffic cho c&#225;c service kh&#225;c d&#7851;n &#273;&#7871;n m&#7845;t c&#226;n b&#7857;ng t&#7843;i. L&#253; do l&#224; trong qu&#225; tr&#236;nh node n&#224;y kh&#7903;i &#273;&#7897;ng th&#236; qu&#225; tr&#236;nh &#273;&#259;ng k&#253; node n&#224;y v&#224;o danh m&#7909;c service discovery b&#7883; l&#7895;i, d&#7851;n &#273;&#7871;n c&#7909;m server c&#243; 3 servers nh&#432;ng ch&#7881; c&#243; 2 servers ph&#7909;c v&#7909; &#273;&#432;&#7907;c traffic th&#244;ng qua service discovery. &#272;i&#7873;u n&#224;y d&#7851;n &#273;&#7871;n thu&#7853;t to&#225;n auto-scaling c&#7911;a c&#7909;m server v&#7889;n d&#7921;a v&#224;o CPU trung b&#236;nh kh&#244;ng ho&#7841;t &#273;&#7897;ng &#273;&#250;ng.</p><p>&#7902; ng&#224;y th&#7913; hai, service b&#7883; ngh&#7869;n c&#361;ng v&#236; m&#7897;t node trong c&#7909;m kh&#244;ng ph&#7909;c v&#7909; &#273;&#432;&#7907;c traffic cho c&#225;c service kh&#225;c th&#244;ng qua ELB nh&#432;ng do qu&#225; tr&#236;nh kh&#7903;i t&#7841;o v&#224; &#273;&#225;nh nh&#227;n b&#7883; l&#7895;i n&#234;n kh&#244;ng b&#7883; thay th&#7871; k&#7883;p l&#250;c. Qu&#225; tr&#236;nh n&#224;y c&#361;ng d&#7851;n &#273;&#7871;n m&#7845;t c&#226;n b&#7857;ng t&#7843;i.</p><p>Th&#7901;i gian c&#242;n l&#7841;i c&#7911;a bu&#7893;i chi&#7873;u c&#243; th&#7875; xen k&#7869; c&#225;c session 1:1 ng&#7855;n v&#7899;i c&#225;c th&#224;nh vi&#234;n &#273;ang qu&#7843;n l&#253; tr&#7921;c ti&#7871;p, gi&#225;n ti&#7871;p ho&#7863;c &#273;ang mentor.</p><p>(c&#242;n ti&#7871;p)</p></blockquote><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4><strong>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/queue-reconstruction-by-height/">Queue Reconstruction by Height</a></strong></h4><p>Cho m&#7897;t m&#7843;ng <strong>people</strong> bi&#7875;u di&#7877;n m&#7897;t h&#224;ng ng&#432;&#7901;i, v&#7899;i people[i] = [h_i, k_i], trong &#273;&#243; ng&#432;&#7901;i &#7903; v&#7883; tr&#237; th&#7913; i c&#243; chi&#7873;u cao h_i, v&#224; c&#243; ch&#237;nh x&#225;c k_i ng&#432;&#7901;i &#273;&#7913;ng ph&#237;a tr&#432;&#7899;c v&#7899;i chi&#7873;u cao b&#7857;ng ho&#7863;c cao h&#417;n h_i.</p><p>V&#237; d&#7909;: people[1] = [5, 2] ngh&#297;a l&#224; ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 1 c&#243; chi&#7873;u cao l&#224; 5, v&#224; c&#243; 2 ng&#432;&#7901;i &#273;&#7913;ng ph&#237;a tr&#432;&#7899;c.</p><p>Hi&#7879;n nay c&#225;c ph&#7847;n t&#7917; trong m&#7843;ng <strong>people</strong> &#273;ang b&#7883; x&#225;o tr&#7897;n, h&#227;y s&#7855;p x&#7871;p l&#7841;i m&#7843;ng <strong>people</strong> sao cho gi&#225; tr&#7883; c&#7911;a c&#225;c ph&#7847;n t&#7917; l&#224; &#273;&#250;ng v&#7899;i y&#234;u c&#7847;u tr&#234;n.</p><p>V&#237; d&#7909;:</p><ul><li><p>Input: people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]</p></li><li><p>Output: [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]</p></li></ul><p>Gi&#7843;i th&#237;ch:</p><ul><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 0 c&#243; chi&#7873;u cao 5, v&#224; c&#243; 0 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 5.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 1 c&#243; chi&#7873;u cao 7, v&#224; c&#243; 0 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 7.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 2 c&#243; chi&#7873;u cao 5, v&#224; c&#243; 2 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 5.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 3 c&#243; chi&#7873;u cao 6, v&#224; c&#243; 1 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 6.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 4 c&#243; chi&#7873;u cao 4, v&#224; c&#243; 4 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 4.</p></li><li><p>Ng&#432;&#7901;i &#7903; v&#7883; tr&#237; s&#7889; 5 c&#243; chi&#7873;u cao 7, v&#224; c&#243; 1 ng&#432;&#7901;i &#273;&#7913;ng tr&#432;&#7899;c c&#243; chi&#7873;u cao &gt;= 7.</p></li></ul><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/find-the-divisibility-array-of-a-string/description/">Find the Divisibility Array of a String</a></h4><h4><strong>&#272;&#7873; b&#224;i</strong></h4><p>Do s&#417; su&#7845;t trong qu&#225; tr&#236;nh bi&#234;n t&#7853;p, n&#7897;i dung &#273;&#7873; b&#224;i &#273;&#432;&#7907;c gi&#7899;i thi&#7879;u &#7903; s&#7889; newsletter k&#7923; tr&#432;&#7899;c ch&#432;a ch&#237;nh x&#225;c, c&#225;c b&#7841;n c&#243; th&#7875; tham kh&#7843;o l&#7841;i &#273;&#7873; b&#224;i &#273;&#227; &#273;&#432;&#7907;c &#273;i&#7873;u ch&#7881;nh l&#7841;i &#7903; &#273;&#226;y (<em>thay n s&#7889; t&#7921; nhi&#234;n th&#224;nh n ch&#7919; s&#7889;</em>)</p><blockquote><p>Cho m&#7897;t chu&#7895;i <strong>word</strong> bao g&#7891;m <strong>n</strong> ch&#7919; s&#7889; v&#224; m&#7897;t s&#7889; t&#7921; nhi&#234;n <strong>m</strong>.</p><p>Tr&#7843; v&#7873; k&#7871;t qu&#7843; l&#224; m&#7843;ng <strong>div</strong> v&#7899;i t&#237;nh ch&#7845;t nh&#432; sau:</p><ul><li><p>div[i] = 1 n&#7871;u gi&#225; tr&#7883; s&#7889; h&#7885;c c&#7911;a chu&#7895;i <strong>word</strong>[0&#8230;i] chia h&#7871;t cho m</p></li><li><p>div[i] = 0 n&#7871;u ng&#432;&#7907;c l&#7841;i.</p></li></ul><p>V&#237; d&#7909;:</p><ul><li><p>Input: word = "998244353", m = 3</p></li><li><p>Output: [1,1,0,0,0,1,1,0,0]</p></li><li><p>Gi&#7843;i th&#237;ch: c&#243; 4 chu&#7895;i con: "9", "99", "998244", and "9982443" th&#7887;a m&#227;n &#273;&#7873; b&#224;i.</p></li></ul></blockquote><h4><strong>L&#7901;i gi&#7843;i</strong></h4><p>&#272;&#7873; b&#224;i y&#234;u c&#7847;u ki&#7875;m tra t&#7845;t c&#7843; c&#225;c ti&#7873;n t&#7889; xem c&#243; chia h&#7871;t cho s&#7889; m hay kh&#244;ng, v&#236; v&#7853;y ta c&#7847;n t&#236;m t&#7845;t c&#7843; c&#225;c ti&#7873;n t&#7889;, t&#7841;m g&#7885;i l&#224; prefix trong chu&#7895;i <code>word</code><strong>,</strong> v&#224; l&#7847;n l&#432;&#7907;t ki&#7875;m tra xem prefix c&#243; chia h&#7871;t cho s&#7889; <code>m</code> hay kh&#244;ng b&#7857;ng ph&#233;p to&#225;n module: prefix mod m == 0.</p><p>Do &#273;&#7897; d&#224;i c&#7911;a chu&#7895;i <strong>word</strong> &lt;= 10^5, chu&#7895;i ti&#7873;n t&#7889; s&#7869; v&#432;&#7907;t qu&#225; ph&#7841;m vi bi&#7875;u di&#7877;n c&#7911;a m&#225;y t&#237;nh.</p><p>M&#7863;c d&#249; nhi&#7873;u ng&#244;n ng&#7919; l&#7853;p tr&#236;nh cung c&#7845;p th&#432; vi&#7879;n &#273;&#7875; bi&#7875;u di&#7877;n s&#7889; nguy&#234;n l&#7899;n nh&#432; BigInteger trong Java, vi&#7879;c kh&#7903;i t&#7841;o v&#224; t&#237;nh to&#225;n v&#7899;i s&#7889; nguy&#234;n l&#7899;n &#273;&#242;i h&#7887;i nhi&#7873;u t&#224;i nguy&#234;n.</p><p>&#272;&#7875; t&#7889;i &#432;u b&#224;i n&#224;y, ta c&#243; th&#7875; ph&#226;n t&#237;ch nh&#432; sau:</p><p>G&#7885;i s&#7889; <code>n</code> l&#224; s&#7889; chia, <code>m</code> l&#224; s&#7889; b&#7883; chia, <code>r</code> l&#224; s&#7889; d&#432;. Nh&#432; v&#7853;y <code>n = k*m + r</code>, v&#7899;i <code>k</code> l&#224; k&#7871;t qu&#7843; c&#7911;a ph&#233;p chia l&#7845;y ph&#7847;n nguy&#234;n c&#7911;a <code>n</code> v&#224; <code>m</code>.</p><p>Ta mu&#7889;n th&#234;m ch&#7919; s&#7889; <code>d</code> v&#224;o sau s&#7889; <code>n</code>, v&#224; ki&#7875;m tra xem s&#7889; m&#7899;i c&#243; chia h&#7871;t cho <code>m</code> hay kh&#244;ng? Ta c&#243;:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;10\\times n + d = 10\\times(k\\times m + r) + d = 10\\times k \\times m + 10\\times r + d&quot;,&quot;id&quot;:&quot;EOFZJORZGM&quot;}" data-component-name="LatexBlockToDOM"></div><p>V&#236; <code>10*k*m</code> lu&#244;n lu&#244;n chia h&#7871;t cho <code>m</code>, ta ch&#7881; c&#7847;n ki&#7875;m tra <code>10*r + d</code>.</p><p>Ta th&#7921;c hi&#7879;n gi&#7843;i thu&#7853;t nh&#432; sau:</p><pre><code><code>import java.math.BigInteger;

class Solution {
    public int[] divisibilityArray(String word, int m) {
        int n = word.length();
        int[] ans = new int[n];

        long rem = 0;
        for (int i = 0; i &lt; n; i++) {
            rem = (rem * 10 + word.charAt(i) - '0') % m;
            if (rem == 0) {
                ans[i] = 1;
            }
        }
        return ans;
    }
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p v&#7873; th&#7901;i gian c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(n) v&#7899;i n l&#224; &#273;&#7897; d&#224;i c&#7911;a chu&#7895;i <strong>word</strong>.</p><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>&#8220;Wonder is the beginning of wisdom.&#8221; - <strong>Socrates</strong></p></div><div class="poll-embed" data-attrs="{&quot;id&quot;:84754}" data-component-name="PollToDOM"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#260 - How to make difficult technical decisions you and your team won't regret]]></title><description><![CDATA[&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay]]></description><link>https://newsletter.grokking.org/p/260-how-to-make-difficult-technical</link><guid isPermaLink="false">https://newsletter.grokking.org/p/260-how-to-make-difficult-technical</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Wed, 28 Jun 2023 12:51:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><strong><a href="https://bytes.swiggy.com/optimizing-batch-writes-to-redis-using-pipelining-d480ebaf4653">Optimizing batch writes to Redis using Pipelining</a></strong></h4><p><em>(by quangle80)</em></p><p>T&#7841;i <strong>Swiggy</strong> (m&#7897;t n&#7873;n t&#7843;ng food delivery l&#7899;n &#7903; &#7844;n &#272;&#7897;), m&#7895;i ng&#224;y h&#7879; th&#7889;ng DSP (Data Science Platform - m&#7897;t trong nh&#7919;ng core platform) c&#7911;a h&#7885; s&#7869; c&#243; c&#225;c scheduled ETL jobs c&#7847;n ch&#7841;y &#273;&#7875; x&#7917; l&#253; c&#225;c c&#7853;p nh&#7853;t d&#7919; li&#7879;u t&#7915; danh s&#225;ch c&#7917;a h&#224;ng. Ri&#234;ng &#273;&#7889;i v&#7899;i nh&#7919;ng t&#225;c v&#7909; y&#234;u c&#7847;u &#273;&#7897; tr&#7877; th&#7845;p, &#273;&#7897;i ng&#361; s&#7869; d&#249;ng AWS ElastiCache (Redis) &#273;&#7875; x&#7917; l&#253;.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Song &#273;&#7875; &#273;&#225;p &#7913;ng k&#7871; ho&#7841;ch v&#7873; c&#7855;t gi&#7843;m chi ph&#237; h&#7841; t&#7847;ng c&#7911;a c&#244;ng ty, &#273;&#7897;i ng&#361; b&#7855;t &#273;&#7847;u ph&#226;n t&#237;ch v&#224; &#273;&#7863;t ra m&#7909;c ti&#234;u &#273;&#7847;u ti&#234;n c&#7911;a h&#7885; ch&#237;nh l&#224; c&#7843;i thi&#7879;n th&#7901;i gian ghi d&#7919; li&#7879;u v&#224;o Redis c&#7911;a c&#225;c scheduled-jobs tr&#234;n.</p><p>Redis ho&#7841;t &#273;&#7897;ng theo m&#244; h&#236;nh client-server (client g&#7917;i y&#234;u c&#7847;u &#273;&#7871;n server, server x&#7917; l&#253; v&#224; tr&#7843; v&#7873; k&#7871;t qu&#7843;) m&#7897;t c&#225;ch tu&#7847;n t&#7921;. V&#7899;i c&#225;ch ti&#7871;p c&#7853;n &#273;&#243;, m&#7897;t request t&#7889;n 100ms &#273;&#7875; th&#7921;c thi th&#236; trong 1s c&#243; th&#7875; x&#7917; l&#253; &#273;&#432;&#7907;c 10 requests. V&#236; v&#7853;y, &#273;&#7875; c&#243; th&#7875; c&#7843;i thi&#7879;n hi&#7879;u su&#7845;t x&#7917; l&#253;, nh&#243;m &#273;&#227; t&#7853;n d&#7909;ng k&#7929; thu&#7853;t pipeline c&#7911;a Redis b&#7857;ng c&#225;ch g&#7917;i m&#7897;t batch requests c&#249;ng m&#7897;t l&#250;c, kh&#244;ng c&#7847;n &#273;&#7907;i ph&#7843;n h&#7891;i c&#7911;a t&#7915;ng request. V&#7899;i Pipeline, h&#7885; c&#243; th&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n v&#7873; c&#7843;i thi&#7879;n throughput cho h&#7879; th&#7889;ng, nh&#432;ng c&#7847;n l&#432;u &#253; v&#7845;n &#273;&#7873; v&#7873; batch size c&#7911;a requests. S&#7917; d&#7909;ng batch size pipeline c&#224;ng l&#7899;n s&#7869; g&#226;y ra c&#225;c blocker kh&#225;c &#7903; ph&#237;a server cho &#273;&#7871;n khi request cu&#7889;i c&#249;ng trong batch &#273;&#432;&#7907;c th&#7921;c thi xong v&#236; v&#7873; l&#253; thuy&#7871;t Redis l&#224; m&#7897;t single-thread server.</p><p>&#272;&#7875; t&#236;m hi&#7875;u chi ti&#7871;t h&#417;n v&#7873; k&#7929; thu&#7853;t pipeline c&#361;ng nh&#432; k&#7871;t qu&#7843; benchmark &#273;&#432;&#7907;c c&#7843;i thi&#7879;n nh&#432; th&#7871; n&#224;o khi h&#7885; &#225;p d&#7909;ng pipeline cho c&#225;c feature jobs, m&#7901;i b&#7841;n &#273;&#7885;c c&#249;ng tham kh&#7843;o b&#224;i vi&#7871;t g&#7889;c.</p><h4><a href="https://careercutler.substack.com/p/how-to-make-difficult-technical-decisions">How to make difficult technical decisions you and your team won't regret</a></h4><p><em>(by nhij)</em></p><p>C&#244;ng vi&#7879;c c&#7911;a m&#7897;t k&#7929; s&#432; ph&#7847;n m&#7873;m &#273;&#242;i h&#7887;i ch&#250;ng ta ph&#7843;i &#273;&#432;a ra c&#225;c l&#7921;a ch&#7885;n v&#7873; m&#7863;t k&#297; thu&#7853;t h&#224;ng ng&#224;y. M&#7897;t s&#7889; quy&#7871;t &#273;&#7883;nh &#273;&#417;n gi&#7843;n v&#224; r&#245; r&#224;ng, nh&#432;ng c&#361;ng c&#243; nh&#7919;ng quy&#7871;t &#273;&#7883;nh kh&#243; kh&#259;n, y&#234;u c&#7847;u ph&#7843;i suy ngh&#297; v&#224; c&#226;n nh&#7855;c k&#7929; l&#432;&#7905;ng. Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; chia s&#7867; m&#7897;t s&#7889; kinh nghi&#7879;m trong qu&#225; tr&#236;nh &#273;&#432;a ra quy&#7871;t &#273;&#7883;nh v&#7899;i c&#225;c b&#432;&#7899;c nh&#432; sau:</p><ul><li><p>Li&#7879;t k&#234; t&#7845;t c&#7843; c&#225;c l&#7921;a ch&#7885;n c&#243; th&#7875;.</p></li><li><p>Lo&#7841;i b&#7887; c&#225;c l&#7921;a ch&#7885;n kh&#244;ng ph&#249; h&#7907;p v&#224; ghi ch&#250; l&#7841;i.</p></li><li><p>&#272;&#7889;i v&#7899;i c&#225;c l&#7921;a ch&#7885;n c&#242;n l&#7841;i, &#273;&#432;a ra c&#225;c &#432;u v&#224; nh&#432;&#7907;c &#273;i&#7875;m c&#7911;a m&#7895;i l&#7921;a ch&#7885;n v&#224; th&#7843;o lu&#7853;n v&#7899;i team.</p></li></ul><p>N&#7871;u b&#7841;n v&#7851;n ch&#432;a ch&#7855;c ch&#7855;n v&#7899;i quy&#7871;t &#273;&#7883;nh c&#7911;a m&#236;nh, b&#7841;n c&#243; th&#7875;:</p><ul><li><p>&#272;&#7863;t m&#236;nh v&#224;o v&#7883; tr&#237; c&#7911;a ng&#432;&#7901;i d&#249;ng v&#224; &#273;&#225;nh gi&#225; m&#7895;i l&#7921;a ch&#7885;n d&#7921;a tr&#234;n g&#243;c nh&#236;n c&#7911;a ng&#432;&#7901;i d&#249;ng.</p></li><li><p>Th&#7843;o lu&#7853;n ri&#234;ng v&#7899;i &#273;&#7891;ng nghi&#7879;p &#237;t kinh nghi&#7879;m h&#417;n v&#224; &#273;&#7891;ng nghi&#7879;p nhi&#7873;u kinh nghi&#7879;m h&#417;n.</p></li><li><p>C&#226;n nh&#7855;c c&#225;c y&#7871;u t&#7889; sau: kh&#7843; n&#259;ng &#273;i&#7873;u ch&#7881;nh v&#224; thu h&#7891;i quy&#7871;t &#273;&#7883;nh; gi&#225; ph&#7843;i tr&#7843; n&#7871;u l&#7921;a ch&#7885;n &#273;&#243; kh&#244;ng ph&#249; h&#7907;p v&#224; kh&#7843; n&#259;ng m&#7903; r&#7897;ng trong t&#432;&#417;ng lai.</p></li></ul><h4><strong><a href="https://www.instacart.com/company/how-its-made/lessons-learned-the-journey-to-real-time-machine-learning-at-instacart/">Lessons Learned: The Journey to Real-Time Machine Learning at Instacart</a></strong></h4><p><em>(by dinhnguyen)</em></p><p>T&#7841;i Instacart, vi&#7879;c &#225;p d&#7909;ng m&#244; h&#236;nh m&#225;y h&#7885;c (ML)  &#273;&#243;ng vai tr&#242; quan tr&#7885;ng trong vi&#7879;c n&#226;ng cao tr&#7843;i nghi&#7879;m ng&#432;&#7901;i d&#249;ng tr&#234;n nhi&#7873;u b&#234;n li&#234;n quan, t&#7915; kh&#225;ch h&#224;ng, ng&#432;&#7901;i b&#225;n h&#224;ng, nh&#224; b&#225;n l&#7867; &#273;&#7871;n &#273;&#7889;i t&#225;c th&#432;&#417;ng hi&#7879;u.</p><p>Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; &#273;&#227; ch&#7881; ra:</p><ul><li><p>M&#7897;t s&#7889; h&#7841;n ch&#7871; khi s&#7917; d&#7909;ng batch-oriented ML.</p></li><li><p>M&#7897;t v&#224;i th&#225;ch th&#7913;c v&#224; nh&#7919;ng quy&#7871;t &#273;&#7883;nh quan tr&#7885;ng khi chuy&#7875;n t&#7915; batch &#273;&#7871;n real-time ML.</p></li><li><p>M&#7897;t s&#7889; b&#224;i h&#7885;c t&#7915; vi&#7879;c chuy&#7875;n &#273;&#7893;i n&#224;y.</p><p></p></li></ul><p>M&#7897;t s&#7889; h&#7841;n ch&#7871; trong c&#225;c h&#7879; th&#7889;ng batch-oriented ML:</p><ul><li><p><strong>Stale Predictions</strong>: Vi&#7879;c d&#7921; &#273;o&#225;n &#273;&#227; &#273;&#432;&#7907;c t&#237;nh to&#225;n tr&#432;&#7899;c g&#226;y ra tr&#7843;i nghi&#7879;m ng&#432;&#7901;i d&#249;ng k&#233;m v&#236; ch&#250;ng cung c&#7845;p ph&#7843;n h&#7891;i l&#7895;i th&#7901;i d&#7921;a tr&#234;n s&#7921; ki&#7879;n qu&#225; kh&#7913;.</p></li><li><p><strong>Inefficient Resource Usage</strong>: Vi&#7879;c t&#7841;o d&#7921; b&#225;o cho t&#7845;t c&#7843; kh&#225;ch h&#224;ng h&#224;ng ng&#224;y d&#7851;n &#273;&#7871;n l&#227;ng ph&#237; t&#224;i nguy&#234;n, v&#236; nhi&#7873;u kh&#225;ch h&#224;ng kh&#244;ng t&#432;&#417;ng t&#225;c h&#224;ng ng&#224;y v&#7899;i n&#7873;n t&#7843;ng.</p></li><li><p><strong>Limited Coverage</strong>: T&#237;nh ch&#7845;t theo batch c&#7911;a quy tr&#236;nh h&#7841;n ch&#7871; kh&#7843; n&#259;ng cung c&#7845;p d&#7921; &#273;o&#225;n th&#7901;i gian th&#7921;c cho t&#7845;t c&#7843; c&#225;c t&#236;nh hu&#7889;ng.</p></li><li><p><strong>Response Lag</strong>: C&#225;c m&#244; h&#236;nh &#237;t ph&#7843;n &#7913;ng h&#417;n v&#7899;i nh&#7919;ng thay &#273;&#7893;i g&#7847;n &#273;&#226;y do c&#225;c t&#237;nh n&#259;ng th&#7901;i gian th&#7921;c</p></li><li><p><strong>Suboptimal</strong>: Ch&#7845;t l&#432;&#7907;ng &#273;&#7847;u ra m&#244; h&#236;nh b&#7883; &#7843;nh h&#432;&#7903;ng b&#7903;i &#273;&#7897; t&#432;&#417;i (<em>freshness</em>) c&#7911;a d&#7919; li&#7879;u.</p></li></ul><p>H&#7885; &#273;&#227; &#225;p d&#7909;ng 2 chuy&#7875;n &#273;&#7893;i quan tr&#7885;ng &#273;&#7875; k&#237;ch ho&#7841;t real-time ML</p><ul><li><p><strong>Real-time serving</strong>: chuy&#7875;n &#273;&#7893;i t&#7915; c&#417; ch&#7871; t&#237;nh to&#225;n tr&#432;&#7899;c k&#7871;t qu&#7843; d&#7921; &#273;o&#225;n (precomputed prediction) sang c&#417; ch&#7871; real-time &#273;&#7875; c&#7843;i thi&#7879;n ph&#7841;m vi bao ph&#7911;, t&#7889;i &#432;u h&#243;a vi&#7879;c s&#7917; d&#7909;ng t&#224;i nguy&#234;n c&#361;ng nh&#432; gi&#250;p k&#7871;t qu&#7843; d&#7921; &#273;o&#225;n &#237;t b&#7883; l&#7841;c h&#7853;u.</p></li><li><p><strong>Real-time features</strong>: T&#7915; c&#225;c t&#237;nh n&#259;ng batch &#273;&#7871;n c&#225;c t&#237;nh n&#259;ng real-time &#273;&#7875; &#273;&#7843;m b&#7843;o d&#7919; li&#7879;u lu&#244;n m&#7899;i v&#224; cho ph&#233;p c&#225;c m&#244; h&#236;nh m&#225;y h&#7885;c &#273;&#432;a ra &#273;&#432;&#7907;c c&#225;c ph&#225;n &#273;o&#225;n d&#7921;a tr&#234;n c&#225;c d&#7919; li&#7879;u &#273;&#432;&#7907;c c&#7853;p nh&#7853;t m&#7899;i nh&#7845;t c&#243; th&#7875;.</p></li></ul><p>Chuy&#7875;n &#273;&#7893;i th&#7913; nh&#7845;t: T&#7915; vi&#7879;c ph&#7909;c v&#7909; d&#7921; &#273;o&#225;n &#273;&#432;&#7907;c t&#237;nh to&#225;n tr&#432;&#7899;c &#273;&#7871;n real-time</p><ul><li><p>Nh&#7919;ng th&#225;ch th&#7913;c bao g&#7891;m qu&#7843;n l&#253; &#273;&#7897; tr&#7877;, &#273;&#7843;m b&#7843;o t&#237;nh s&#7861;n c&#243; c&#7911;a h&#7879; th&#7889;ng v&#224; v&#432;&#7907;t qua Steep Learning Curve.</p></li><li><p>Nh&#7919;ng quy&#7871;t &#273;&#7883;nh quan tr&#7885;ng bao g&#7891;m &#225;p d&#7909;ng m&#7897;t giao di&#7879;n th&#7889;ng nh&#7845;t cho ki&#7875;m tra v&#224; tri&#7875;n khai, v&#224; s&#7917; d&#7909;ng RPC framework &#273;&#7875; giao ti&#7871;p gi&#7919;a c&#225;c d&#7883;ch v&#7909; trong Instacart.</p></li></ul><p>Chuy&#7875;n &#273;&#7893;i th&#7913; hai: Ph&#7909;c v&#7909; t&#7915; batch features &#273;&#7871;n real-time features</p><ul><li><p>Nh&#7919;ng th&#225;ch th&#7913;c bao g&#7891;m l&#224;m vi&#7879;c v&#7899;i c&#225;c c&#244;ng ngh&#7879; streaming ph&#226;n t&#225;n trong nh&#7919;ng t&#7893; ch&#7913;c kh&#225;c nhau, &#273;&#7843;m b&#7843;o nh&#7919;ng events c&#243; t&#237;nh ch&#7845;t nh&#7845;t qu&#225;n v&#224; ch&#7845;t l&#432;&#7907;ng v&#224; x&#226;y d&#7921;ng nh&#7919;ng pipeline ph&#7913;c t&#7841;p v&#7899;i quy tr&#236;nh ph&#225;t tri&#7875;n m&#7899;i.</p></li><li><p>Nh&#7919;ng quy&#7871;t &#273;&#7883;nh quan tr&#7885;ng bao g&#7891;m tri&#7875;n khai l&#432;u tr&#7919; s&#7921; ki&#7879;n t&#7853;p trung b&#7857;ng c&#225;ch s&#7917; d&#7909;ng Kafka v&#224; t&#225;ch bi&#7879;t event cho l&#432;u tr&#7919; v&#224; t&#237;nh to&#225;n &#273;&#7875; tu&#226;n th&#7911; nguy&#234;n t&#7855;c ph&#226;n t&#225;ch m&#7889;i quan t&#226;m, th&#224;nh l&#7853;p 1 nh&#243;m l&#224;m vi&#7879;c &#273;&#7871;n t&#7915; nh&#7919;ng team kh&#225;c nhau.</p></li></ul><p>B&#224;i h&#7885;c t&#7915; vi&#7879;c chuy&#7875;n &#273;&#7893;i:</p><ul><li><p>H&#7841; t&#7847;ng &#273;&#243;ng vai tr&#242; quan tr&#7885;ng trong real-time ML.</p></li><li><p>Vi&#7879;c c&#7843;i ti&#7871;n n&#234;n &#273;&#7841;t &#273;&#432;&#7907;c t&#7915;ng b&#432;&#7899;c m&#7897;t.</p></li><li><p>&#193;p d&#7909;ng gi&#7843;i ph&#225;p t&#7893;ng th&#7875; v&#224; chuy&#234;n bi&#7879;t.</p></li><li><p>Ph&#225;t tri&#7875;n h&#7841; t&#7847;ng song song v&#7899;i ph&#225;t tri&#7875;n s&#7843;n ph&#7849;m.</p></li></ul><p>&#272;&#7875; c&#243; th&#234;m th&#244;ng tin chi ti&#7871;t h&#417;n, m&#7901;i b&#7841;n &#273;&#7885;c tham kh&#7843;o th&#234;m t&#7841;i b&#224;i vi&#7871;t g&#7889;c.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/find-the-divisibility-array-of-a-string/description/">Find the Divisibility Array of a String</a></h4><p>Cho m&#7897;t chu&#7895;i <code>word</code> bao g&#7891;m <code>n</code> s&#7889; t&#7921; nhi&#234;n v&#224; m&#7897;t s&#7889; t&#7921; nhi&#234;n <code>m</code>.</p><p>Tr&#7843; v&#7873; k&#7871;t qu&#7843; l&#224; m&#7843;ng <code>div</code> v&#7899;i t&#237;nh ch&#7845;t nh&#432; sau:</p><ul><li><p><code>div[i] = 1</code> n&#7871;u gi&#225; tr&#7883; s&#7889; h&#7885;c c&#7911;a chu&#7895;i <code>word[0...i]</code> chia h&#7871;t cho <code>m.</code></p></li><li><p><code>div[i] = 0</code> n&#7871;u ng&#432;&#7907;c l&#7841;i.</p></li></ul><p>V&#237; d&#7909;:</p><p>Input: <code>word = "998244353"</code>,  <code>m = 3</code></p><p>Output: <code>div = [1,1,0,0,0,1,1,0,0]</code></p><p>Gi&#7843;i th&#237;ch: c&#243; 4 chu&#7895;i con: <code>"9"</code>, <code>"99"</code>, <code>"998244"</code> v&#224; <code>"9982443"</code> th&#7887;a m&#227;n &#273;&#7873; b&#224;i.</p><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/maximize-distance-to-closest-person/">Maximize Distance to Closest Person</a></h4><p>G&#7885;i K l&#224; kho&#7843;ng c&#225;ch gi&#7919;a 2 gh&#7871; &#273;&#227; c&#243; ng&#432;&#7901;i ng&#7891;i, ta th&#7845;y kho&#7843;ng c&#225;ch m&#224; &#273;&#7873; b&#224;i y&#234;u c&#7847;u t&#236;m &#273;&#243; l&#224; (K + 1) / 2.</p><p>T&#7915; &#273;&#243;, &#253; t&#432;&#7903;ng &#273;&#7875; gi&#7843;i b&#224;i to&#225;n &#273;&#243; l&#224; duy&#7879;t m&#7843;ng <code>seats</code> &#273;&#7875; t&#236;m t&#7845;t c&#7843; c&#225;c kho&#7843;ng K gi&#7919;a c&#225;c v&#7883; tr&#237; &#273;&#227; c&#243; ng&#432;&#7901;i ng&#7891;i, t&#237;nh to&#225;n c&#225;c gi&#225; tr&#7883; (K + 1) / 2 v&#224; tr&#7843; v&#7873; gi&#225; tr&#7883; l&#7899;n nh&#7845;t t&#236;m &#273;&#432;&#7907;c.</p><p>Sau &#273;&#226;y l&#224; c&#224;i &#273;&#7863;t tham kh&#7843;o b&#7857;ng ng&#244;n ng&#7919; Java.</p><pre><code><code>public class Solution {
    public int maxDistToClosest(int[] seats) {
        int maxDistance = 0;
        int distance = 0;
        int n = seats.length;

        // Tr&#432;&#7901;ng h&#7907;p t&#7915; &#273;&#7847;u h&#224;ng &#273;&#7871;n gh&#7871; &#273;&#7847;u ti&#234;n c&#243; ng&#432;&#7901;i ng&#7891;i
        int i = 0;
        while (seats[i] == 0) {
            distance++;
            i++;
        }
        maxDistance = distance;

        // T&#236;m kho&#7843;ng c&#225;ch gi&#7919;a c&#225;c gh&#7871; tr&#7889;ng
        while (i &lt; n) {
            if (seats[i] == 0) {
                distance++;
            } else {
                maxDistance = Math.max(maxDistance, (distance + 1) / 2);
                distance = 0;
            }
            i++;
        }

        // Tr&#432;&#7901;ng h&#7907;p t&#7915; gh&#7871; cu&#7889;i c&#243; ng&#432;&#7901;i ng&#7891;i &#273;&#7871;n cu&#7889;i h&#224;ng
        maxDistance = Math.max(maxDistance, distance);

        return maxDistance;
    }
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p thu&#7853;t to&#225;n c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(N), v&#7899;i N l&#224; &#273;&#7897; d&#224;i h&#224;ng gh&#7871; &#273;&#227; cho.</p><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning.</p><p><strong>Albert Einstein</strong></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#259 - Ten years of AI in review]]></title><description><![CDATA[C&#249;ng ng&#432;&#7907;c l&#7841;i d&#242;ng th&#7901;i gian v&#224; quan s&#225;t v&#7873; qu&#225; tr&#236;nh ph&#225;t tri&#7875;n c&#7911;a c&#225;c &#7913;ng d&#7909;ng AI trong su&#7889;t 10 n&#259;m v&#7915;a qua.]]></description><link>https://newsletter.grokking.org/p/259-ten-years-of-ai-in-review</link><guid isPermaLink="false">https://newsletter.grokking.org/p/259-ten-years-of-ai-in-review</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Fri, 16 Jun 2023 12:31:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TQyc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128251;News</strong></h3><p><em>(by lpv)</em></p><h4><a href="https://www.theregister.com/2023/05/09/blackbird_github_search/">Blackbird - search engine m&#7899;i c&#7911;a Github</a></h4><p>Blackbird l&#224; m&#7897;t search engine v&#7915;a m&#7899;i &#273;&#432;&#7907;c ph&#225;t tri&#7875;n b&#7903;i Github. B&#234;n c&#7841;nh vi&#7879;c cho ph&#233;p t&#236;m ki&#7871;m code m&#7897;t c&#225;ch nhanh ch&#243;ng (&#273;&#432;&#7907;c cho l&#224; nhanh h&#417;n g&#7845;p 2 so v&#7899;i c&#244;ng c&#7909; c&#361;), Blackbird &#273;&#7891;ng th&#7901;i c&#361;ng h&#7895; tr&#7907; nhi&#7873;u t&#237;nh n&#259;ng h&#417;n. Ngo&#224;i ra Blackbird &#273;&#432;&#7907;c vi&#7871;t ho&#224;n to&#224;n b&#7857;ng Rust.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h4><a href="https://www.reversinglabs.com/blog/when-python-bytecode-bites-back-who-checks-the-contents-of-compiled-python-files">When byte code bites: Who checks the contents of compiled Python files?</a></h4><p>Nh&#243;m nghi&#234;n c&#7913;u ReversingLabs &#273;&#227; x&#225;c &#273;&#7883;nh &#273;&#432;&#7907;c m&#7897;t cu&#7897;c t&#7845;n c&#244;ng m&#7899;i v&#224;o PyPI b&#7857;ng c&#225;ch s&#7917; d&#7909;ng m&#227; Python &#273;&#227; bi&#234;n d&#7883;ch &#273;&#7875; tr&#225;nh b&#7883; ph&#225;t hi&#7879;n - &#273;&#226;y c&#243; th&#7875; l&#224; cu&#7897;c t&#7845;n c&#244;ng &#273;&#7847;u ti&#234;n l&#7907;i d&#7909;ng vi&#7879;c th&#7921;c thi tr&#7921;c ti&#7871;p file Python Byte Code. Tr&#432;&#7899;c &#273;&#243;, v&#224;o ng&#224;y 20/5, PyPI &#273;&#227;<a href="https://status.python.org/incidents/qy2t9mjjcc7g"> t&#7841;m ng&#432;ng vi&#7879;c &#273;&#259;ng k&#253; th&#224;nh vi&#234;n</a> v&#224; d&#7921; &#225;n m&#7899;i do s&#7921; gia t&#259;ng c&#225;c g&#243;i ph&#7847;n m&#7873;m &#273;&#7897;c h&#7841;i.</p><h4><a href="https://www.tomshardware.com/news/openai-sends-shutdown-letter-to-gpt4free">OpenAI Threatens Popular GitHub Project With Lawsuit Over API Use</a></h4><p>D&#7921; &#225;n GitHub c&#243; t&#234;n l&#224; <a href="https://github.com/xtekky/gpt4free">GPT4free</a> cho ph&#233;p b&#7841;n truy c&#7853;p mi&#7877;n ph&#237; v&#224;o c&#225;c m&#244; h&#236;nh GPT4 v&#224; GPT3.5 b&#7857;ng c&#225;ch chuy&#7875;n c&#225;c truy v&#7845;n &#273;&#243; qua c&#225;c trang web nh&#432; You.com , Quora v&#224; CoCalc v&#224; tr&#7843; l&#7841;i cho b&#7841;n c&#226;u tr&#7843; l&#7901;i. Tuy ch&#7881; l&#224; m&#7897;t d&#7921; &#225;n m&#7899;i nh&#432;ng &#273;&#227; nhanh ch&#243;ng nh&#7853;n &#273;&#432;&#7907;c r&#7845;t nhi&#7873;u s&#7921; quan t&#226;m.</p><p>Tuy nhi&#234;n theo Xtekky, OpenAI &#273;&#227; g&#7917;i m&#7897;t l&#225; th&#432; y&#234;u c&#7847;u anh ta g&#7905; b&#7887; to&#224;n b&#7897; d&#7921; &#225;n trong v&#242;ng n&#259;m ng&#224;y n&#7871;u kh&#244;ng s&#7869; ph&#7843;i &#273;&#7889;i m&#7863;t v&#7899;i m&#7897;t v&#7909; ki&#7879;n.</p><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://en.oceanbase.com/blog/2597074688">Vectorized query engine for distributed database</a></h4><p><em>(by vinhdp)</em></p><p>C&#225;c c&#417; s&#7903; d&#7919; li&#7879;u quan h&#7879; (CSDL) th&#432;&#7901;ng &#273;&#432;&#7907;c implement theo Volcano model - t&#7915;ng data row s&#7869; &#273;&#432;&#7907;c l&#7847;n l&#432;&#7907;t x&#7917; l&#253; - ph&#249; h&#7907;p v&#7899;i c&#225;c OLTP query (ho&#7863;c t&#7841;i th&#7901;i &#273;i&#7875;m ng&#224;y x&#432;a khi m&#224; RAM v&#224; CPU c&#242;n nh&#7887; v&#224; kh&#225; &#273;&#7855;t). Nh&#432;ng v&#236; nhi&#7873;u l&#253; do, ng&#432;&#7901;i s&#7917; d&#7909;ng th&#432;&#7901;ng mong mu&#7889;n th&#7921;c thi c&#7843; nh&#7919;ng c&#226;u query thu&#7897;c d&#7841;ng OLAP nh&#432; join v&#224; aggregate khi x&#7917; l&#253; transactional data, &#273;&#7875; l&#224;m &#273;&#432;&#7907;c &#273;i&#7873;u n&#224;y, c&#225;c CSDL th&#432;&#7901;ng t&#236;m c&#225;ch ph&#226;n chia workload n&#224;y tr&#234;n nhi&#7873;u CPU core &#273;&#7875; gi&#7843;m s&#7889; l&#432;&#7907;ng data m&#224; m&#7895;i CPU c&#7847;n x&#7917; l&#253;, qua &#273;&#243; g&#243;p ph&#7847;n l&#224;m gi&#7843;m response time c&#7911;a query. Nh&#432;ng v&#7899;i c&#225;ch ti&#7871;p c&#7853;n n&#224;y v&#7851;n ch&#432;a th&#7875; gi&#7843;i quy&#7871;t tri&#7879;t &#273;&#7875; v&#7845;n &#273;&#7873;, khi c&#243; c&#224;ng nhi&#7873;u data &#273;&#432;a v&#224;o, c&#224;ng nhi&#7873;u CPU core c&#7847;n th&#234;m v&#224;o &#273;&#7875; x&#7917; l&#253;.</p><p>B&#234;n c&#7841;nh vi&#7879;c th&#234;m nhi&#7873;u CPU v&#224;o &#273;&#7875; x&#7917; l&#253;, c&#225;c CSDL hi&#7879;n &#273;&#7841;i ng&#224;y nay c&#242;n &#273;i theo m&#7897;t h&#432;&#7899;ng ti&#7871;p c&#7853;n kh&#225;c l&#224; l&#224;m sao &#273;&#7875; c&#249;ng m&#7897;t CPU core nh&#432;ng c&#243; th&#7875; x&#7917; l&#253; nhi&#7873;u data c&#249;ng m&#7897;t l&#250;c h&#417;n, t&#7853;n d&#7909;ng &#273;&#432;&#7907;c s&#7913;c m&#7841;nh c&#7911;a SIMD instruction trong nhi&#7873;u th&#7871; h&#7879; CPU m&#7899;i, &#273;&#226;y g&#7885;i l&#224; Vectorized Engine &#273;&#227; &#273;&#432;&#7907;c gi&#7899;i thi&#7879;u l&#7847;n &#273;&#7847;u v&#224;o n&#259;m 2005 b&#7903;i paper &#8220;MonetDB/X100: Hyper-Pipelining Query Execution&#8221;.</p><p>V&#7853;y Vectorized Engine l&#224; g&#236;? T&#7841;i sao n&#243; l&#7841;i nhanh? M&#7901;i c&#225;c b&#7841;n t&#236;m hi&#7875;u th&#244;ng qua b&#224;i vi&#7871;t<a href="https://en.oceanbase.com/blog/2597074688"> Implementing a Vectorized Engine in a Distributed Database c&#7911;a OceanBase </a>nh&#233;!</p><h4><a href="https://www.infoq.com/news/2023/05/software-developers-learn/">What Software Developers Can Do to Learn Effectively</a></h4><p><em>(by quangle80)</em></p><p>L&#224;m vi&#7879;c trong b&#7845;t k&#7923; l&#297;nh v&#7921;c n&#224;o, ch&#250;ng ta ph&#7843;i lu&#244;n kh&#244;ng ng&#7915;ng h&#7885;c h&#7887;i &#273;&#7875; c&#7843;i thi&#7879;n m&#236;nh, d&#7841;o g&#7847;n &#273;&#226;y, cu&#7897;c c&#225;ch m&#7841;ng AI ng&#224;y c&#224;ng tr&#7895;i d&#7853;y khi&#7871;n cho c&#225;c anh em k&#7929; s&#432; ph&#7847;n m&#7873;m ph&#7843;i tr&#259;n tr&#7903; v&#7873; &#8220;ch&#233;n c&#417;m&#8221; c&#7911;a m&#236;nh. &#272;i&#7873;u n&#224;y v&#7915;a t&#7841;o ra nh&#7919;ng th&#225;ch th&#7913;c, v&#7915;a l&#224; nh&#7919;ng &#273;&#7897;ng l&#7921;c khi&#7871;n anh em ph&#7843;i suy ngh&#297;, t&#236;m ra nh&#7919;ng ch&#7911; &#273;&#7873; n&#224;o &#273;&#225;ng d&#224;nh th&#7901;i gian &#273;&#7875; nghi&#234;n c&#7913;u, n&#226;ng cao b&#7843;n th&#226;n m&#236;nh.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TQyc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TQyc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TQyc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TQyc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TQyc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TQyc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:820566,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TQyc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TQyc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TQyc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TQyc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff91237da-7440-41f1-8ba2-a97cf8858d42_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>M&#7897;t lo&#7841;t nh&#7919;ng c&#226;u h&#7887;i &#273;&#432;&#7907;c InfoQ &#273;&#7863;t ra cho k&#7929; s&#432; <strong>Tav</strong> <strong>Herzlich</strong> t&#7841;i H&#7897;i ngh&#7883; <a href="https://ndcoslo.com/">NDC Oslo 2023</a> (di&#7877;n ra t&#7915; 22-26/5 t&#7841;i Oslo, Norway) nh&#432;:</p><ul><li><p>L&#224;m th&#7871; n&#224;o &#273;&#7875; m&#7897;t k&#7929; s&#432; ph&#7847;n m&#7873;m c&#243; th&#7875; x&#225;c &#273;&#7883;nh m&#7913;c &#273;&#7897; hi&#7875;u bi&#7871;t c&#7911;a m&#236;nh v&#7873; m&#7897;t ch&#7911; &#273;&#7873; ho&#7863;c c&#244;ng ngh&#7879;?</p></li><li><p>L&#224;m th&#7871; n&#224;o &#273;&#7875; tr&#225;nh b&#7883; qu&#225; t&#7843;i v&#7873; kh&#7889;i l&#432;&#7907;ng ki&#7871;n th&#7913;c c&#244;ng ngh&#7879; qu&#225; nhi&#7873;u?</p></li><li><p>C&#225;ch qu&#7843;n l&#253;, ph&#226;n b&#7893; th&#7901;i gian &#273;&#7875; ti&#7871;p c&#7853;n, h&#7885;c t&#7853;p m&#7897;t c&#244;ng ngh&#7879; m&#7899;i?</p></li></ul><p>M&#7901;i b&#7841;n &#273;&#7885;c c&#249;ng &#273;i t&#236;m chi ti&#7871;t c&#226;u tr&#7843; l&#7901;i qua <a href="https://www.infoq.com/news/2023/05/software-developers-learn/">b&#224;i vi&#7871;t</a></p><h4><a href="https://towardsdatascience.com/ten-years-of-ai-in-review-85decdb2a540">Ten years of AI in review</a></h4><p><em>(by steven.do87)</em></p><p>M&#7897;t th&#7853;p k&#7927; v&#7915;a qua l&#224; m&#7897;t ch&#7863;ng &#273;&#432;&#7901;ng s&#244;i &#273;&#7897;ng v&#224; &#273;&#7847;y ly k&#7923; &#273;&#7889;i v&#7899;i l&#297;nh v&#7921;c AI, nh&#7919;ng ph&#225;t ki&#7871;n gi&#250;p khai ph&#225; c&#225;c ti&#7873;m n&#259;ng c&#7911;a Deep Learning &#273;&#227; t&#7841;o ra nhi&#7873;u c&#417; h&#7897;i ph&#225;t tri&#7875;n b&#249;ng n&#7893; tr&#234;n nhi&#7873;u l&#297;nh v&#7921;c, &#273;&#417;n c&#7917; m&#7897;t v&#224;i v&#237; d&#7909; &#273;i&#7875;n h&#236;nh nh&#432;, xe t&#7921; h&#224;nh, h&#7879; th&#7889;ng th&#432;&#417;ng m&#7841;i &#273;i&#7879;n t&#7917;,...</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fIH0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fIH0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 424w, https://substackcdn.com/image/fetch/$s_!fIH0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 848w, https://substackcdn.com/image/fetch/$s_!fIH0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 1272w, https://substackcdn.com/image/fetch/$s_!fIH0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fIH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp" width="828" height="459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:828,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30790,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fIH0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 424w, https://substackcdn.com/image/fetch/$s_!fIH0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 848w, https://substackcdn.com/image/fetch/$s_!fIH0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 1272w, https://substackcdn.com/image/fetch/$s_!fIH0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf1a22cc-2204-4802-a16d-b85284953c1d_828x459.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br>B&#224;i vi&#7871;t c&#7911;a t&#225;c gi&#7843; Thomas A Dorfer, hi&#7879;n l&#224; DS t&#7841;i Microsoft s&#7869; &#273;&#432;a m&#7885;i ng&#432;&#7901;i ng&#432;&#7907;c l&#7841;i d&#242;ng th&#7901;i gian c&#249;ng quan s&#225;t v&#7873; qu&#225; tr&#236;nh ph&#225;t tri&#7875;n c&#7911;a c&#225;c &#7913;ng d&#7909;ng AI trong su&#7889;t 10 n&#259;m v&#7915;a qua, theo &#273;&#243; l&#224; nh&#7919;ng c&#225;i t&#234;n &#273;&#7841;i di&#7879;n n&#7893;i b&#7853;t cho m&#7895;i giai &#273;o&#7841;n nh&#432; AlexNet(2013) cho &#273;&#7871;n &#7913;ng d&#7909;ng chat GTP (2022) v&#7851;n &#273;ang g&#226;y s&#7889;t trong c&#7897;ng &#273;&#7891;ng c&#244;ng ngh&#7879; th&#7901;i gian g&#7847;n &#273;&#226;y. V&#7899;i mong mu&#7889;n cung c&#7845;p cho &#273;&#7897;c gi&#7843; m&#7897;t g&#243;c nh&#236;n to&#224;n c&#7843;nh v&#7873; nh&#7919;ng ti&#7871;n b&#7897; v&#432;&#7907;t b&#7853;c trong l&#297;nh v&#7921;c AI t&#7915; qu&#225; kh&#7913; s&#417; khai cho &#273;&#7871;n khi tr&#7903; n&#234;n quen thu&#7897;c v&#224; &#273;i v&#224;o cu&#7897;c s&#7889;ng h&#224;ng ng&#224;y hi&#7879;n t&#7841;i. </p><p>Th&#244;ng qua <a href="https://towardsdatascience.com/ten-years-of-ai-in-review-85decdb2a540">b&#224;i vi&#7871;t</a> t&#225;c gi&#7843; s&#7869; cho ch&#250;ng ta c&#7843;m nh&#7853;n &#273;&#432;&#7907;c s&#7921; thay &#273;&#7893;i s&#226;u s&#7855;c c&#7911;a c&#225;c &#7913;ng d&#7909;ng AI &#273;&#7871;n cu&#7897;c s&#7889;ng hi&#7879;n &#273;&#7841;i v&#224; c&#225;ch th&#7913;c ch&#250;ng ta s&#7869; l&#224;m vi&#7879;c v&#224; t&#432;&#417;ng t&#225;c v&#7899;i nhau trong t&#432;&#417;ng lai c&#249;ng v&#7899;i nh&#7919;ng quan ng&#7841;i v&#7873; vi&#7879;c l&#7841;m d&#7909;ng v&#224; l&#7879; thu&#7897;c v&#224;o AI khi m&#224; c&#225;c &#7913;ng d&#7909;ng AI c&#224;ng ng&#224;y c&#224;ng tr&#7903; n&#234;n th&#244;ng minh h&#417;n v&#224; ch&#250;ng ta c&#7847;n th&#7853;n tr&#7885;ng h&#417;n v&#7899;i ch&#250;ng.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/maximize-distance-to-closest-person/">Maximize Distance to Closest Person</a></h4><p>Cho m&#7843;ng seats bi&#7875;u th&#7883; m&#7897;t d&#227;y h&#224;ng gh&#7871;, m&#7895;i ph&#7847;n t&#7917; trong m&#7843;ng seats c&#243; 1 trong 2 gi&#225; tr&#7883; nh&#432; sau:</p><ul><li><p>seats[i] = 1 ngh&#297;a l&#224; &#273;&#227; c&#243; ng&#432;&#7901;i ng&#7891;i t&#7841;i gh&#7871; th&#7913; i.</p></li><li><p>seats[i] = 0 ngh&#297;a l&#224; gh&#7871; th&#7913; i &#273;ang tr&#7889;ng.</p></li></ul><p><em><strong>L&#432;u &#253;</strong>: v&#7883; tr&#237; c&#7911;a gh&#7871; b&#7855;t &#273;&#7847;u t&#7915; 0</em></p><p>V&#224; tr&#234;n d&#227;y h&#224;ng gh&#7871;, lu&#244;n lu&#244;n t&#7891;n t&#7841;i &#237;t nh&#7845;t m&#7897;t gh&#7871; tr&#7889;ng. Alex mu&#7889;n ch&#7885;n gh&#7871; sao cho kho&#7843;ng c&#225;ch t&#7899;i ng&#432;&#7901;i g&#7847;n nh&#7845;t l&#224; l&#7899;n nh&#7845;t c&#243; th&#7875;. H&#227;y t&#236;m kho&#7843;ng c&#225;ch l&#7899;n nh&#7845;t &#273;&#243;.</p><p>V&#237; d&#7909;:</p><ul><li><p>Input: seats = [1,0,0,0,1,0,1]</p></li><li><p>Output: 2</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yu9t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yu9t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 424w, https://substackcdn.com/image/fetch/$s_!yu9t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 848w, https://substackcdn.com/image/fetch/$s_!yu9t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 1272w, https://substackcdn.com/image/fetch/$s_!yu9t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yu9t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png" width="841" height="332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:332,&quot;width&quot;:841,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;t7HYxdii0GMTY6j5wzeX3izlzNN7fuactvn1WOXpY3awXMAXgk75Pc5REB-WGRoErU4tLd\\_gPsSKmBgUVP7eQHD\\_fNBI31HIbiGts9yawCPYzEjl9z-qYndB1hH91h8Xbvlm\\_XeUpnV94AMr9OcJs8A&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="t7HYxdii0GMTY6j5wzeX3izlzNN7fuactvn1WOXpY3awXMAXgk75Pc5REB-WGRoErU4tLd\_gPsSKmBgUVP7eQHD\_fNBI31HIbiGts9yawCPYzEjl9z-qYndB1hH91h8Xbvlm\_XeUpnV94AMr9OcJs8A" title="t7HYxdii0GMTY6j5wzeX3izlzNN7fuactvn1WOXpY3awXMAXgk75Pc5REB-WGRoErU4tLd\_gPsSKmBgUVP7eQHD\_fNBI31HIbiGts9yawCPYzEjl9z-qYndB1hH91h8Xbvlm\_XeUpnV94AMr9OcJs8A" srcset="https://substackcdn.com/image/fetch/$s_!yu9t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 424w, https://substackcdn.com/image/fetch/$s_!yu9t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 848w, https://substackcdn.com/image/fetch/$s_!yu9t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 1272w, https://substackcdn.com/image/fetch/$s_!yu9t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5f3d048-0a9f-436f-b606-46cf50b12088_841x332.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>V&#7899;i gh&#7871; &#7903; v&#7883; tr&#237; 2, kho&#7843;ng c&#225;ch t&#7915; Alex &#273;&#7871;n ng&#432;&#7901;i g&#7847;n nh&#7845;t l&#224; 2.</p><p>V&#7899;i c&#225;c v&#7883; tr&#237; kh&#225;c ngo&#224;i 2, kho&#7843;ng c&#225;ch t&#7915; Alex &#273;&#7871;n ng&#432;&#7901;i g&#7847;n nh&#7845;t l&#224; 1.</p><p>V&#236; v&#7853;y, kho&#7843;ng c&#225;ch l&#7899;n nh&#7845;t t&#7899;i ng&#432;&#7901;i g&#7847;n Alex nh&#7845;t l&#224; <strong>"2"</strong>.</p><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/divide-intervals-into-minimum-number-of-groups/description/">Divide Intervals Into Minimum Number of Groups</a></h4><p>&#272;&#7875; b&#7841;n &#273;&#7885;c d&#7877; h&#236;nh dung, ta c&#243; th&#7875; m&#244; t&#7843; l&#7841;i b&#224;i to&#225;n b&#7857;ng vi&#7879;c s&#7855;p x&#7871;p ph&#242;ng h&#7885;p, trong &#273;&#243; m&#7895;i c&#7863;p s&#7889; t&#7921; nhi&#234;n [left, right] &#273;&#7841;i di&#7879;n cho th&#7901;i gian b&#7855;t &#273;&#7847;u v&#224; k&#7871;t th&#250;c bu&#7893;i h&#7885;p. Ta s&#7869; &#273;i t&#236;m s&#7889; ph&#242;ng h&#7885;p t&#7889;i thi&#7875;u &#273;&#7875; t&#7845;t c&#7843; c&#225;c bu&#7893;i h&#7885;p c&#243; th&#7875; di&#7877;n ra.</p><p>Gi&#7843; s&#7917; cu&#7897;c h&#7885;p [1, 5] &#273;ang di&#7877;n ra, cu&#7897;c h&#7885;p ti&#7871;p theo l&#224; [3, 6], ta nh&#7853;n th&#7845;y r&#7857;ng c&#7847;n &#237;t nh&#7845;t 2 ph&#242;ng h&#7885;p b&#7903;i [1, 5] v&#224; [3, 6] tr&#249;ng nhau &#7903; kho&#7843;ng [3, 5].</p><p>Gi&#7843; s&#7917; cu&#7897;c h&#7885;p [1, 5] v&#224; [3, 6] &#273;ang di&#7877;n ra, cu&#7897;c h&#7885;p ti&#7871;p theo l&#224; [6, 8], ta c&#361;ng ch&#7881; c&#7847;n &#237;t nh&#7845;t 2 ph&#242;ng h&#7885;p, b&#7903;i t&#7841;i m&#7889;c th&#7901;i gian 6, cu&#7897;c h&#7885;p [1, 5] &#273;&#227; k&#7871;t th&#250;c.</p><p>&#221; t&#432;&#7903;ng &#7903; &#273;&#226;y l&#224; m&#7895;i khi ta s&#7855;p x&#7871;p ph&#242;ng cho cu&#7897;c h&#7885;p ti&#7871;p theo, ta ki&#7875;m tra cu&#7897;c h&#7885;p tr&#432;&#7899;c &#273;&#243; v&#7899;i th&#7901;i gian k&#7871;t th&#250;c nh&#7887; nh&#7845;t, ta g&#7885;i &#273;&#226;y l&#224; minEndInterval.</p><p>N&#7871;u minEndInterval nh&#7887; h&#417;n th&#7901;i gian b&#7855;t &#273;&#7847;u c&#7911;a cu&#7897;c h&#7885;p ti&#7871;p theo, ta t&#225;i s&#7917; d&#7909;ng l&#7841;i ph&#242;ng h&#7885;p tr&#432;&#7899;c &#273;&#243;. N&#7871;u kh&#244;ng, ta c&#7847;n m&#7897;t ph&#242;ng h&#7885;p m&#7899;i.</p><p>&#221; t&#432;&#7903;ng tr&#234;n &#273;&#432;&#7907;c th&#7921;c hi&#7879;n v&#7899;i gi&#7843;i thu&#7853;t nh&#432; sau:</p><pre><code><code>class Solution {
   public int minGroups(int[][] intervals) {
       // Sort the interval by start time
       Arrays.sort(intervals, Comparator.comparingInt(interval -&gt; interval[0]));
       PriorityQueue&lt;Integer&gt; endTimes = new PriorityQueue&lt;&gt;();

       for (int[] interval : intervals) {
           // Remove the ended interval
           if (!endTimes.isEmpty() &amp;&amp; endTimes.peek() &lt; interval[0]) {
               endTimes.poll();
           }
           endTimes.offer(interval[1]);
       }

       return endTimes.size();
   }
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p v&#7873; th&#7901;i gian c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(nlogn), v&#7899;i n l&#224; &#273;&#7897; d&#224;i c&#7911;a chu&#7895;i &#273;&#7847;u v&#224;o.</p><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>&#8220;The best code is no code at all.&#8221; - Jeff Atwood</p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#258 - Học Rust trong 3 ngày!]]></title><description><![CDATA[&#128251;News (by lpv)]]></description><link>https://newsletter.grokking.org/p/258-hoc-rust-trong-3-ngay</link><guid isPermaLink="false">https://newsletter.grokking.org/p/258-hoc-rust-trong-3-ngay</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 04 Jun 2023 05:26:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aRdA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128251;News</strong></h3><p><em>(by lpv)</em></p><h4><strong><a href="https://www.postgresql.org/about/news/postgresql-16-beta-1-released-2643/">PostgreSQL 16 Beta 1 Released!</a></strong></h4><p>Phi&#234;n b&#7843;n m&#7899;i c&#7911;a PostgreSQL ch&#7913;a c&#225;c t&#237;nh n&#259;ng m&#7899;i v&#224; c&#7843;i ti&#7871;n hi&#7879;u su&#7845;t trong th&#7921;c thi truy v&#7845;n, t&#259;ng kh&#7843; n&#259;ng x&#7917; l&#253; song song cho c&#225;c truy v&#7845;n FULL v&#224; RIGHT JOIN, t&#7889;i &#432;u h&#243;a cho windows query v&#224; nhi&#7873;u c&#7843;i ti&#7871;n kh&#225;c.</p><h4><a href="https://www.databricks.com/sites/default/files/2023-05/databricks-2023-state-of-data-report.pdf">2023 State Of Data + AI</a></h4><p>Nh&#7919;ng xu h&#432;&#7899;ng v&#7873; Data v&#224; AI &#273;&#432;&#7907;c th&#7921;c hi&#7879;n b&#7903;i DataBrick.</p><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><p><em>(by lpv)</em></p><h4><strong><a href="https://stackoverflow.blog/2023/02/20/are-companies-shifting-away-from-public-clouds">Are clouds having their on-prem moment?</a></strong></h4><p>M&#7863;c d&#249; public cloud v&#7851;n &#273;ang ph&#225;t tri&#7875;n m&#7841;nh m&#7869; nh&#432;ng hi&#7879;n c&#361;ng c&#243; m&#7897;t s&#7889; c&#244;ng ty &#273;ang d&#7847;n chuy&#7875;n sang m&#244; h&#236;nh on-prem private clouds (<a href="https://www.bvp.com/atlas/state-of-the-cloud-2022">ngu&#7891;n</a>). M&#244; h&#236;nh n&#224;y &#273;&#432;&#7907;c tri&#7875;n khai d&#7921;a tr&#234;n c&#417; s&#7903; h&#7841; t&#7847;ng c&#7911;a doanh nghi&#7879;p, cho ph&#233;p c&#225;c doanh nghi&#7879;p t&#7921; qu&#7843;n l&#253; v&#224; v&#7853;n h&#224;nh c&#225;c &#7913;ng d&#7909;ng v&#224; d&#7919; li&#7879;u c&#7911;a m&#236;nh tr&#234;n n&#7873;n t&#7843;ng &#273;&#225;m m&#226;y c&#7911;a ri&#234;ng m&#236;nh. Qua &#273;&#243; gi&#250;p doanh nghi&#7879;p gi&#7843;m thi&#7875;u chi ph&#237; v&#224; t&#259;ng t&#237;nh linh ho&#7841;t trong vi&#7879;c qu&#7843;n l&#253; &#7913;ng d&#7909;ng v&#224; d&#7919; li&#7879;u.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aRdA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aRdA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 424w, https://substackcdn.com/image/fetch/$s_!aRdA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 848w, https://substackcdn.com/image/fetch/$s_!aRdA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 1272w, https://substackcdn.com/image/fetch/$s_!aRdA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aRdA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png" width="604" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:604,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aRdA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 424w, https://substackcdn.com/image/fetch/$s_!aRdA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 848w, https://substackcdn.com/image/fetch/$s_!aRdA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 1272w, https://substackcdn.com/image/fetch/$s_!aRdA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367b854a-6cb7-4eb8-8009-b10afe043e80_604x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; &#273;&#227; gi&#7899;i thi&#7879;u v&#7873; xu h&#432;&#7899;ng d&#7883;ch chuy&#7875;n sang s&#7917; d&#7909;ng on-prem private clouds c&#7911;a c&#225;c c&#244;ng ty hi&#7879;n nay v&#224; nh&#7919;ng l&#7907;i &#237;ch c&#7911;a vi&#7879;c tri&#7875;n khai m&#244; h&#236;nh n&#224;y. &#272;&#7891;ng th&#7901;i Kubernetes c&#361;ng &#273;&#243;ng vai tr&#242; quan tr&#7885;ng trong vi&#7879;c ki&#7875;m so&#225;t m&#244; h&#236;nh on-prem private clouds.</p><p>Sau h&#417;n 1 th&#7853;p k&#7927; xa r&#7901;i nh&#7919;ng gi&#225; &#273;&#7905; m&#225;y ch&#7911;, c&#225;c c&#244;ng ty d&#7847;n nh&#7853;n th&#7845;y c&#243; nh&#7919;ng l&#7907;i th&#7871; nh&#7845;t &#273;&#7883;nh khi tri&#7875;n khai h&#7879; th&#7889;ng c&#417; s&#7903; h&#7841; t&#7847;ng c&#7909;c b&#7897; cho m&#7897;t s&#7889; m&#7909;c ti&#234;u nh&#7845;t &#273;&#7883;nh. Nh&#7919;ng g&#236; c&#361;, l&#7841;i tr&#7903; n&#234;n m&#7899;i, nh&#432;ng l&#250;c n&#224;y ch&#250;ng ta &#273;&#227; c&#243; th&#234;m nhi&#7873;u h&#432;&#417;ng v&#7883; &#273;&#7875; l&#7921;a ch&#7885;n.</p><p>M&#7901;i c&#225;c b&#7841;n &#273;&#7885;c th&#234;m b&#224;i vi&#7871;t t&#7841;i <a href="https://stackoverflow.blog/2023/02/20/are-companies-shifting-away-from-public-clouds/">&#273;&#226;y</a>.</p><h4><a href="https://mastermind.dev/indexes-in-postgresql">Indexes in PostgreSQL</a></h4><p>B&#224;i vi&#7871;t n&#224;y nh&#7857;m m&#7909;c &#273;&#237;ch cung c&#7845;p c&#225;i nh&#236;n s&#226;u s&#7855;c v&#7873; index trong PostgreSQL, nh&#7919;ng &#432;u &#273;i&#7875;m v&#224; nh&#432;&#7907;c &#273;i&#7875;m c&#7911;a c&#225;c lo&#7841;i index kh&#225;c nhau. B&#234;n c&#7841;nh &#273;&#243;, t&#225;c gi&#7843; c&#361;ng gi&#7899;i thi&#7879;u m&#7897;t s&#7889; c&#225;ch t&#7889;i &#432;u tr&#234;n index nh&#432;: C&#225;ch x&#225;c &#273;&#7883;nh nh&#7919;ng index kh&#244;ng c&#7847;n thi&#7871;t, index tr&#249;ng l&#7863;p, v.v&#8230;</p><p>Chi ti&#7871;t b&#224;i vi&#7871;t t&#7841;i <a href="https://mastermind.dev/indexes-in-postgresql">&#273;&#226;y</a>.</p><h4><a href="https://artem.krylysov.com/blog/2023/04/19/how-rocksdb-works/">How RocksDB Works</a></h4><p>Trong nhi&#7873;u n&#259;m qua, RocksDB &#273;ang &#273;&#432;&#7907;c s&#7917; d&#7909;ng r&#7897;ng r&#227;i t&#7841;i nhi&#7873;u n&#417;i. RocksDB &#273;ang ch&#7841;y tr&#234;n production t&#7841;i Meta, Microsoft, Netflix v.v&#8230; T&#7841;i Meta, RocksDB ho&#7841;t &#273;&#7897;ng nh&#432; m&#7897;t storage engine cho MySQL. Ngo&#224;i ra, m&#7897;t s&#7889; startup c&#361;ng &#273;&#432;&#7907;c x&#226;y d&#7921;ng t&#7915; RocksDB nh&#432; PingCAP, Rockset, v.v&#8230;</p><p>Trong b&#224;i vi&#7871;t n&#224;y, ch&#250;ng ta c&#249;ng t&#236;m hi&#7875;u v&#7873; ki&#7871;n tr&#250;c t&#7893;ng qua c&#7911;a RocksDB. Ph&#7847;n c&#7845;u tr&#250;c d&#7919; li&#7879;u c&#7889;t l&#245;i c&#7911;a RocksDB l&#224; <em>Log-structured merge-tree</em> (LSM-Tree). &#272;&#226;y l&#224; 1 c&#226;y d&#7919; li&#7879;u d&#7841;ng c&#226;y &#273;&#432;&#7907;c t&#7893; ch&#7913;c theo nhi&#7873;u c&#7845;p &#273;&#7897; ( multiple levels), trong &#273;&#243; d&#7919; li&#7879;u &#7903; m&#7895;i c&#7845;p s&#7869; &#273;&#432;&#7907;c s&#7855;p x&#7871;p theo kho&#225; (keys). C&#7845;p cao nh&#7845;t c&#7911;a c&#226;y LSM &#273;&#432;&#7907;c g&#7885;i l&#224; MemTable. &#272;&#243; l&#224; m&#7897;t b&#7897; &#273;&#7879;m (in-memory buffer) ch&#7913;a c&#225;c kh&#243;a v&#224; gi&#225; tr&#7883; tr&#432;&#7899;c khi ch&#250;ng &#273;&#432;&#7907;c ghi v&#224;o &#273;&#297;a. T&#7845;t c&#7843; c&#225;c thao t&#225;c insert v&#224; update s&#7869; lu&#244;n &#273;i qua memtable. Trong tr&#432;&#7901;ng h&#7907;p x&#7843;y ra s&#7921; c&#7889; quy tr&#236;nh ho&#7863;c kh&#7903;i &#273;&#7897;ng l&#7841;i &#7913;ng d&#7909;ng, d&#7919; li&#7879;u &#273;&#432;&#7907;c l&#432;u tr&#7919; trong b&#7897; nh&#7899; s&#7869; b&#7883; m&#7845;t. &#272;&#7875; tr&#225;nh m&#7845;t d&#7919; li&#7879;u, RocksDB ghi t&#7845;t c&#7843; c&#225;c b&#7843;n c&#7853;p nh&#7853;t v&#224;o Write-ahead Log (WAL) tr&#234;n disk. B&#7857;ng c&#225;ch n&#224;y, c&#417; s&#7903; d&#7919; li&#7879;u c&#243; th&#7875; kh&#244;i ph&#7909;c tr&#7841;ng th&#225;i ban &#273;&#7847;u c&#7911;a memtable khi kh&#7903;i &#273;&#7897;ng.</p><p>Ngo&#224;i ra, c&#242;n nhi&#7873;u k&#7929; thu&#7853;t kh&#225;c m&#224; c&#225;c b&#7841;n c&#243; th&#7875; &#273;&#7885;c t&#7841;i <a href="https://artem.krylysov.com/blog/2023/04/19/how-rocksdb-works/">&#273;&#226;y</a>.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/divide-intervals-into-minimum-number-of-groups/description/">Divide Intervals Into Minimum Number of Groups</a></h4><p>Cho danh s&#225;ch c&#225;c &#273;o&#7841;n <code>intervals</code>, m&#7895;i &#273;o&#7841;n bi&#7875;u di&#7877;n b&#7903;i c&#7863;p s&#7889; <code>[left, right]</code>. T&#236;m c&#225;ch chia t&#7889;i thi&#7875;u c&#225;c &#273;o&#7841;n trong danh s&#225;ch th&#224;nh c&#225;c nh&#243;m sao cho c&#225;c nh&#243;m kh&#244;ng ch&#7913;a c&#225;c &#273;o&#7841;n giao nhau.</p><p>V&#237; d&#7909;:</p><p>Input: <code>intervals = [[5,10],[6,8],[1,5],[2,3],[1,10]]</code></p><p>Output: <code>3</code></p><p>Gi&#7843;i th&#237;ch:</p><ul><li><p>Nh&#243;m 1: [1, 5], [6, 8].</p></li><li><p>Nh&#243;m 2: [2, 3], [5, 10].</p></li><li><p>Nh&#243;m 3: [1, 10].</p></li></ul><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/remove-all-occurrences-of-a-substring/">Remove All Occurrences of a Substring</a></h4><p>M&#7897;t h&#432;&#7899;ng gi&#7843;i quy&#7871;t &#273;&#417;n gi&#7843;n cho b&#224;i to&#225;n &#273;&#243; l&#224; l&#7863;p &#273;i l&#7863;p l&#7841;i vi&#7879;c t&#236;m ki&#7871;m l&#7847;n xu&#7845;t hi&#7879;n &#273;&#7847;u ti&#234;n c&#7911;a chu&#7895;i con <code>part</code> v&#224; xo&#225; n&#243; kh&#7887;i chu&#7895;i ban &#273;&#7847;u cho &#273;&#7871;n khi chu&#7895;i con kh&#244;ng c&#242;n xu&#7845;t hi&#7879;n n&#7919;a. C&#224;i &#273;&#7863;t tham kh&#7843;o b&#7857;ng ng&#244;n ng&#7919; Java nh&#432; sau:</p><pre><code><code>public class Solution {
   public String removeOccurrences(String s, String part) {
       StringBuilder sb = new StringBuilder(s);
       while (true) {
           int index = sb.indexOf(part);
           if (index == -1) {
               break;
           }
           sb.delete(index, index + part.length());
       }
       return sb.toString();
   }
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(N^2) v&#7899;i <code>N</code> l&#224; &#273;&#7897; d&#224;i chu&#7895;i <code>s</code>.</p><div><hr></div><h3><a href="https://emojipedia.org/open-book/">&#128214;</a>Learning</h3><p><em>(by lpv)</em></p><p><strong>Rust</strong> l&#224; m&#7897;t ng&#244;n ng&#7919; &#273;ang b&#7855;t &#273;&#7847;u nh&#7853;n &#273;&#432;&#7907;c s&#7921; quan t&#226;m t&#7915; c&#7897;ng &#273;&#7891;ng l&#7853;p tr&#236;nh vi&#234;n th&#7901;i gian g&#7847;n &#273;&#226;y. B&#7841;n &#273;&#227; c&#243; th&#7875; s&#7917; d&#7909;ng Rust &#273;&#7875; x&#226;y d&#7921;ng th&#432; vi&#7879;n cho kernel Linux, hay vi&#7871;t m&#7897;t extension cho PostgreSQL. V&#224; n&#7871;u b&#7841;n ch&#432;a bi&#7871;t b&#7855;t &#273;&#7847;u t&#7915; &#273;&#226;u, th&#236; Android Team v&#7915;a cho ra m&#7855;t m&#7897;t kh&#243;a h&#7885;c Rust trong &#8230; 3 ng&#224;y ;) </p><p>Trong kh&#243;a h&#7885;c n&#224;y s&#7869; cover nh&#7919;ng n&#7897;i dung c&#417; b&#7843;n v&#224; c&#7847;n thi&#7871;t &#273;&#7875; b&#7855;t &#273;&#7847;u l&#7853;p tr&#236;nh nh&#432; c&#250; ph&#225;p, concurrency, error handling, v.v&#8230; V&#224; t&#7845;t nhi&#234;n l&#224; &#273;i k&#232;m m&#7897;t s&#7889; n&#7897;i dung li&#234;n quan t&#7899;i Android.</p><p>C&#225;c b&#7841;n c&#243; th&#7875; th&#7917; d&#224;nh v&#224;i ng&#224;y cu&#7889;i tu&#7847;n &#273;&#7875; tr&#7843;i nghi&#7879;m kh&#243;a h&#7885;c n&#224;y t&#7841;i: <a href="https://google.github.io/comprehensive-rust/">Comprehensive Rust</a>.</p><h3><strong>&#128736;&#65039;Code &amp; Tools</strong></h3><ul><li><p><a href="https://pkolaczk.github.io/memory-consumption-of-async/">How Much Memory Do You Need to Run 1 Million Concurrent Tasks?</a></p></li><li><p><a href="https://the-guild.dev/blog/judging-open-source-by-github-stars">How Much Are GitHub Stars Worth to You?</a></p></li></ul><div class="pullquote"><p>&#8220;Measuring programming progress by lines of code is like measuring aircraft building progress by weight.&#8221; - Bill Gates</p></div>]]></content:encoded></item><item><title><![CDATA[#257 - The Part of PostgreSQL We Hate the Most]]></title><description><![CDATA[&#7902; k&#7923; tr&#432;&#7899;c, nh&#243;m bi&#234;n t&#7853;p c&#243; &#273;&#7863;t ra c&#226;u h&#7887;i &#8220;Theo b&#7841;n trong 3-4 n&#259;m n&#7919;a, m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n Software Engineer s&#7869; di&#7877;n ra nh&#432; th&#7871; n&#224;o?]]></description><link>https://newsletter.grokking.org/p/257-the-part-of-postgresql-we-hate</link><guid isPermaLink="false">https://newsletter.grokking.org/p/257-the-part-of-postgresql-we-hate</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 21 May 2023 07:01:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tAto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#7902; k&#7923; tr&#432;&#7899;c, nh&#243;m bi&#234;n t&#7853;p c&#243; &#273;&#7863;t ra c&#226;u h&#7887;i &#8220;<strong>Theo b&#7841;n trong 3-4 n&#259;m n&#7919;a, m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n Software Engineer s&#7869; di&#7877;n ra nh&#432; th&#7871; n&#224;o? N&#243; s&#7869; kh&#225;c g&#236; v&#7899;i c&#225;ch ch&#250;ng ta &#273;ang ph&#7887;ng v&#7845;n hi&#7879;n t&#7841;i?</strong>&#8221; v&#224; nh&#7853;n &#273;&#432;&#7907;c m&#7897;t c&#226;u tr&#7843; l&#7901;i t&#7915; m&#7897;t b&#7841;n &#273;&#7885;c. C&#225;c b&#7841;n c&#243; th&#7875; tham kh&#7843;o &#7903; m&#7909;c G&#243;c b&#7841;n &#273;&#7885;c b&#234;n d&#432;&#7899;i. </p><p>H&#227;y reply email n&#224;y (ho&#7863;c g&#7917;i c&#226;u tr&#7843; l&#7901;i &#273;&#7871;n <em><strong>newsletter@grokking.org</strong></em>) &#273;&#7875; chia s&#7867; &#253; ki&#7871;n c&#7911;a m&#236;nh nh&#233;! Ban bi&#234;n t&#7853;p s&#7869; ch&#7885;n ra nh&#7919;ng c&#226;u tr&#7843; l&#7901;i hay nh&#7845;t &#273;&#7875; trao t&#7863;ng ph&#7847;n qu&#224; l&#224; m&#7897;t quy&#7875;n Dijkstra t&#7853;p 2 (b&#7843;n in).</p><p>Mong nh&#7853;n &#273;&#432;&#7907;c nhi&#7873;u g&#243;p &#253; t&#7915; c&#225;c b&#7841;n.</p><p>P/S: C&#225;c b&#7841;n nh&#7899; g&#7917;i k&#232;m theo th&#244;ng tin li&#234;n h&#7879; &#273;&#7875; Ban bi&#234;n t&#7853;p c&#243; th&#7875; ti&#7879;n g&#7917;i qu&#224; nh&#233;.</p><div><hr></div><h3><strong>&#128251;News</strong></h3><p><em>(by lpv)</em></p><h4><a href="https://go.dev/blog/survey2023-q1-results">Go Developer Survey 2023 Q1 Results</a></h4><p>M&#7897;t kh&#7843;o s&#225;t &#273;&#432;&#7907;c th&#7921;c hi&#7879;n tr&#234;n g&#7847;n 6000 l&#7853;p tr&#236;nh vi&#234;n v&#7873; Golang. K&#7871;t qu&#7843; n&#224;y s&#7869; gi&#250;p Go team c&#243; th&#7875; t&#7853;p trung h&#417;n v&#224;o nh&#7919;ng ph&#7847;n quan tr&#7885;ng.</p><h4><strong><a href="https://newsletter.pragmaticengineer.com/p/inside-the-datadog-outage">DataDog v&#224; s&#7921; c&#7889; 5 tri&#7879;u $</a></strong></h4><p>C&#249;ng t&#236;m hi&#7875;u v&#7873; s&#7921; c&#7889; x&#7843;y ra g&#7847;n &#273;&#226;y tr&#234;n DataDog.</p><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://ottertune.com/blog/the-part-of-postgresql-we-hate-the-most/">The Part of PostgreSQL We Hate the Most</a></h4><p><em>(by lpv)</em></p><p>Trong nhi&#7873;u n&#259;m g&#7847;n &#273;&#226;y, <strong>PostgreSQL</strong> &#273;ang tr&#7903; th&#224;nh m&#7897;t DBMS &#273;&#432;&#7907;c s&#7917; d&#7909;ng kh&#225; r&#7897;ng r&#227;i. Tuy nhi&#234;n b&#234;n c&#7841;nh nh&#7919;ng &#432;u &#273;i&#7875;m c&#7911;a m&#236;nh, PostgreSQL c&#361;ng c&#243; nh&#7919;ng nh&#432;&#7907;c &#273;i&#7875;m k&#232;m theo &#273;&#243;. Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; gi&#7843;i th&#237;ch v&#7873; MVCC (<strong>Multi Version Concurrency Control) </strong>trong Database ho&#7841;t &#273;&#7897;ng nh&#432; th&#7871; n&#224;o, v&#224; so s&#225;nh c&#7909; th&#7875; c&#225;ch c&#224;i &#273;&#7863;t gi&#7919;a PostgreSQL v&#224; c&#225;c DBMS kh&#225;c. </p><p>M&#7909;c ti&#234;u c&#7911;a MVCC trong DBMS l&#224; cho ph&#233;p <strong>nhi&#7873;u truy v&#7845;n &#273;&#7885;c v&#224; ghi v&#224;o c&#417; s&#7903; d&#7919; li&#7879;u &#273;&#7891;ng th&#7901;i m&#224; kh&#244;ng can thi&#7879;p l&#7851;n nhau khi c&#243; th&#7875;</strong>. &#221; t&#432;&#7903;ng c&#417; b&#7843;n c&#7911;a MVCC l&#224; DBMS kh&#244;ng bao gi&#7901; ghi &#273;&#232; l&#234;n c&#225;c h&#224;ng (row) hi&#7879;n c&#243;. Thay v&#224;o &#273;&#243;, &#273;&#7889;i v&#7899;i m&#7895;i h&#224;ng (logic), DBMS duy tr&#236; nhi&#7873;u phi&#234;n b&#7843;n (v&#7853;t l&#253;). Khi &#7913;ng d&#7909;ng th&#7921;c hi&#7879;n m&#7897;t truy v&#7845;n, DBMS s&#7869; x&#225;c &#273;&#7883;nh phi&#234;n b&#7843;n n&#224;o c&#7847;n truy xu&#7845;t &#273;&#7875; &#273;&#225;p &#7913;ng y&#234;u c&#7847;u theo m&#7897;t s&#7889; th&#7913; t&#7921; phi&#234;n b&#7843;n (v&#237; d&#7909;: timestamp). L&#7907;i &#237;ch c&#7911;a ph&#432;&#417;ng ph&#225;p n&#224;y l&#224; nhi&#7873;u truy v&#7845;n c&#243; th&#7875; &#273;&#7885;c c&#225;c phi&#234;n b&#7843;n c&#361; h&#417;n c&#7911;a c&#225;c h&#224;ng m&#224; kh&#244;ng b&#7883; ch&#7863;n b&#7903;i m&#7897;t truy v&#7845;n kh&#225;c &#273;ang c&#7853;p nh&#7853;t n&#243;. Ngo&#224;i ra lo&#7841;i b&#7887; nhu c&#7847;u lock record, ng&#259;n ng&#432;&#7901;i &#273;&#7885;c truy c&#7853;p d&#7919; li&#7879;u trong khi ng&#432;&#7901;i vi&#7871;t s&#7917;a &#273;&#7893;i c&#249;ng m&#7897;t item.</p><p>M&#7897;t s&#7889; v&#7845;n &#273;&#7873; x&#7843;y ra &#273;&#7889;i v&#7899;i PostgreSQL MVCC &#273;&#432;&#7907;c t&#225;c gi&#7843;i li&#7879;t k&#234; v&#224; gi&#7843;i th&#237;ch c&#7909; th&#7875; nh&#432;: Version Copying, Table Bloat, Secondary Index Maintenance, Vacuum Management. M&#7901;i c&#225;c b&#7841;n c&#249;ng <a href="https://ottertune.com/blog/the-part-of-postgresql-we-hate-the-most/">&#273;&#7885;c v&#224; t&#236;m hi&#7875;u chi ti&#7871;t</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tAto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tAto!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 424w, https://substackcdn.com/image/fetch/$s_!tAto!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 848w, https://substackcdn.com/image/fetch/$s_!tAto!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 1272w, https://substackcdn.com/image/fetch/$s_!tAto!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tAto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8282577-f905-430a-800e-10057f2f691f_1056x500.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tAto!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 424w, https://substackcdn.com/image/fetch/$s_!tAto!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 848w, https://substackcdn.com/image/fetch/$s_!tAto!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 1272w, https://substackcdn.com/image/fetch/$s_!tAto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8282577-f905-430a-800e-10057f2f691f_1056x500.svg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Example of PostgreSQL index maintenance operations with a non-HOT update</em></p><h3><a href="https://hackernoon.com/how-to-measure-your-technical-debt-8-metrics-to-consider">How to measure your technical debt</a></h3><p><em>(by steven.do87)</em></p><p>N&#7907; k&#7929; thu&#7853;t (technical debt) &#273;&#432;&#7907;c hi&#7875;u nh&#432; s&#7921; &#273;&#225;nh &#273;&#7893;i gi&#7919;a vi&#7879;c r&#250;t ng&#7855;n th&#7901;i gian ph&#225;t tri&#7875;n v&#224; cho ra &#273;&#7901;i m&#7897;t ch&#7913;c n&#259;ng m&#7899;i m&#7897;t s&#7843;n ph&#7849;m ph&#7847;n m&#7873;m m&#7899;i v&#7899;i vi&#7879;c &#273;&#7843;m b&#7843;o m&#7897;t h&#7879; th&#7889;ng ho&#7841;t &#273;&#7897;ng &#7893;n &#273;&#7883;nh v&#224; &#273;&#225;ng tin c&#7853;y, v&#224; &#273;&#226;y l&#224; m&#7897;t th&#224;nh ph&#7847;n kh&#244;ng th&#7875; thi&#7871;u trong quy tr&#236;nh ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m.<br>Ng&#224;y nay, c&#225;c ch&#7881; s&#7889; technical debt ng&#224;y c&#224;ng &#273;&#432;&#7907;c c&#225;c &#273;&#417;n v&#7883; v&#224; doanh nghi&#7879;p ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m quan t&#226;m v&#224; c&#224;ng ph&#7893; bi&#7871;n, ch&#250;ng &#273;&#432;&#7907;c thi&#7871;t k&#7871; nh&#7857;m gi&#250;p cho c&#225;c doanh nghi&#7879;p c&#243; th&#7875; hi&#7875;u v&#224; &#273;&#225;nh gi&#225; &#273;&#432;&#7907;c d&#7919; li&#7879;u li&#234;n quan &#273;&#7871;n r&#7911;i ro v&#7873; m&#7863;t k&#7929; thu&#7853;t &#273;&#7889;i v&#7899;i c&#225;c h&#7879; th&#7889;ng ph&#7847;n m&#7873;m tr&#432;&#7899;c khi c&#225;c v&#7845;n &#273;&#7873; nghi&#234;m tr&#7885;ng th&#7921;c s&#7921; xu&#7845;t hi&#7879;n.<br>Technical debt c&#243; th&#7875; &#273;&#432;&#7907;c ph&#226;n l&#224;m 04 lo&#7841;i bao g&#7891;m: code debt (quan tr&#7885;ng nh&#7845;t), qu&#7843;n l&#253; t&#224;i li&#7879;u (documentation), b&#7843;o m&#7853;t (security), v&#224; c&#225;c c&#244;ng c&#7909; ho&#7863;c c&#244;ng ngh&#7879; &#273;&#432;&#7907;c s&#7917; d&#7909;ng b&#7903;i &#273;&#7897;i ng&#361; ph&#225;t tri&#7875;n (Engineering tooling).<br>Th&#244;ng qua b&#224;i vi&#7871;t, t&#225;c gi&#7843; Alex Omeyer t&#7841;i stepsize &#273;&#227; g&#7907;i &#253; 08 ch&#7881; s&#7889; gi&#250;p &#273;o l&#432;&#7901;ng v&#224; &#273;&#225;nh gi&#225; &#273;&#432;&#7907;c c&#225;c m&#7913;c &#273;&#7897; r&#7911;i ro v&#7873; technical debt nh&#432; sau:<br>+ T&#7927; l&#7879; New Bugs vs Closed Bugs<br>+ Debt Index: t&#7927; l&#7879; issues &#273;&#227; resolved tr&#234;n t&#7893;ng s&#7889; issues<br>+ Code Quality: ch&#7845;t l&#432;&#7907;ng m&#227; ngu&#7891;n<br>+ Cycle Time: th&#7901;i gian x&#7917; l&#253; v&#7845;n &#273;&#7873;<br>+ Code Churn: s&#7889; li&#7879;u &#273;&#7871;m s&#7889; l&#7847;n m&#7897;t line code b&#7883; xo&#225;, thay th&#7871; ho&#7863;c vi&#7871;t l&#7841;i.<br>+ Code Coverage: &#273;&#7897; bao ph&#7911; khi th&#7921;c thi c&#7911;a m&#227; ngu&#7891;n.<br>+ Code Ownership: m&#7913;c &#273;&#7897; hi&#7875;u &#273;&#432;&#7907;c m&#227; ngu&#7891;n<br>+ Technical Debt Ratio (TDR): t&#7927; l&#7879; n&#7907; k&#7929; thu&#7853;t</p><p>&#272;&#7875; c&#243; th&#7875; hi&#7875;u th&#234;m v&#7873; c&#225;c ch&#7881; s&#7889; &#273;o l&#432;&#7901;ng tr&#234;n, c&#225;c b&#7841;n c&#243; th&#7875; tham kh&#7843;o th&#244;ng tin chi ti&#7871;t t&#7841;i <a href="https://hackernoon.com/how-to-measure-your-technical-debt-8-metrics-to-consider">b&#224;i vi&#7871;t g&#7889;c</a>.</p><h3><a href="https://hackernoon.com/modern-approaches-to-complex-it-development-sorting-out-team-communications">Modern Approaches to Complex IT Development: Sorting Out Team Communications</a></h3><p><em>(by steven.do87)</em></p><p>Trong b&#7889;i c&#7843;nh ng&#224;nh CNTT &#273;ang c&#243; nh&#7919;ng thay &#273;&#7893;i nhanh ch&#243;ng, c&#225;c &#273;&#7897;i ph&#225;t tri&#7875;n ng&#224;y c&#224;ng &#273;&#7889;i m&#7863;t v&#7899;i c&#225;c v&#7845;n &#273;&#7873; kh&#243; kh&#259;n trong qu&#225; tr&#236;nh ph&#225;t tri&#7875;n c&#225;c d&#7921; &#225;n ph&#7847;n m&#7873;m, &#273;i&#7875;n h&#236;nh nh&#432; v&#7845;n &#273;&#7873; v&#7873; ng&#226;n s&#225;ch, th&#7901;i gian c&#361;ng nh&#432; giao ti&#7871;p trao &#273;&#7893;i th&#244;ng tin thi&#7871;u hi&#7879;u qu&#7843; trong khi v&#7851;n ph&#7843;i c&#7889; g&#7855;ng b&#7855;t k&#7883;p ti&#7871;n &#273;&#7897; v&#224; c&#225;c y&#234;u c&#7847;u nghi&#7879;p v&#7909; thay &#273;&#7893;i li&#234;n t&#7909;c.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jaqf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jaqf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 424w, https://substackcdn.com/image/fetch/$s_!jaqf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 848w, https://substackcdn.com/image/fetch/$s_!jaqf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 1272w, https://substackcdn.com/image/fetch/$s_!jaqf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jaqf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png" width="1079" height="473" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:473,&quot;width&quot;:1079,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:507756,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jaqf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 424w, https://substackcdn.com/image/fetch/$s_!jaqf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 848w, https://substackcdn.com/image/fetch/$s_!jaqf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 1272w, https://substackcdn.com/image/fetch/$s_!jaqf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21c292be-aca8-4f4c-8324-33a4a83e9592_1079x473.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Th&#244;ng qua kinh nghi&#7879;m l&#224;m vi&#7879;c v&#224; tham gia c&#225;c d&#7921; &#225;n ph&#7847;n m&#7873;m, v&#224; qu&#225; tr&#236;nh &#225;p d&#7909;ng c&#225;c c&#244;ng c&#7909;, c&#244;ng ngh&#7879; m&#7899;i cho &#273;&#7871;n qu&#225; tr&#236;nh chuy&#7875;n &#273;&#7893;i cho doanh nghi&#7879;p, t&#225;c gi&#7843; &#273;&#227; nh&#7853;n &#273;&#7883;nh ra 03 v&#7845;n &#273;&#7873; m&#224; c&#225;c nh&#243;m ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m ng&#224;y nay th&#432;&#7901;ng xuy&#234;n g&#7863;p ph&#7843;i.</p><p>Trong s&#7889; &#273;&#243; v&#7845;n &#273;&#7873; th&#432;&#7901;ng xuy&#234;n v&#7845;p ph&#7843;i &#273;&#7847;u ti&#234;n &#273;&#243; l&#224; vi&#7879;c giao ti&#7871;p v&#224; c&#7897;ng t&#225;c thi&#7871;u hi&#7879;u qu&#7843; gi&#7919;a c&#225;c b&#7897; ph&#7853;n v&#224; th&#224;nh vi&#234;n trong m&#7895;i b&#7897; ph&#7853;n, v&#224; v&#7845;n &#273;&#7873; n&#224;y b&#7855;t ngu&#7891;n t&#7915; s&#7921; thi&#7871;u minh b&#7841;ch ho&#7863;c truy&#7873;n &#273;&#7841;t th&#244;ng tin sai l&#7879;ch do c&#417; c&#7845;u t&#7893; ch&#7913;c ch&#432;a t&#7889;i &#432;u.</p><p>Y&#7871;u t&#7889; ti&#7871;p theo t&#225;c gi&#7843; xem x&#233;t &#273;&#7871;n &#273;&#243; l&#224; s&#7921; ph&#7913;c t&#7841;p ng&#224;y c&#224;ng t&#259;ng c&#7911;a c&#225;c quy tr&#236;nh ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m c&#361;ng nh&#432; h&#7841; t&#7847;ng CNTT.</p><p>Cu&#7889;i c&#249;ng &#273;&#243; l&#224; vi&#7879;c c&#225;c m&#7909;c ti&#234;u v&#224; y&#234;u c&#7847;u d&#7921; &#225;n kh&#244;ng &#273;&#432;&#7907;c c&#7853;p nh&#7853;t li&#234;n t&#7909;c d&#7851;n &#273;&#7871;n nh&#7847;m l&#7851;n, thi&#7871;u s&#243;t v&#224; ph&#225;t sinh th&#234;m nhi&#7873;u v&#7845;n &#273;&#7873; g&#226;y &#7843;nh h&#432;&#7903;ng &#273;&#7871;n ti&#7871;n &#273;&#7897; v&#224; k&#7871;t qu&#7843; c&#7911;a d&#7921; &#225;n.</p><p>&#272;&#226;y l&#224; b&#224;i vi&#7871;t kh&#7903;i &#273;&#7847;u cho lo&#7841;t b&#224;i c&#7911;a t&#225;c gi&#7843; Alex Lashkov v&#7873; vi&#7879;c &#273;&#7873; xu&#7845;t m&#7897;t ph&#432;&#417;ng ph&#225;p ti&#7871;p c&#7853;n m&#7899;i ph&#249; h&#7907;p h&#417;n v&#7899;i quy tr&#236;nh ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m ph&#7913;c t&#7841;p ng&#224;y nay.</p><h3><a href="https://doordash.engineering/2023/03/21/using-cockroachdb-to-reduce-feature-store-costs-by-75/">Using CockroachDB to Reduce Feature Store Costs by 75%</a></h3><p><em>(by steven.do87)</em></p><p>Trong qu&#225; tr&#236;nh x&#226;y d&#7921;ng c&#225;c n&#7873;n t&#7843;ng m&#225;y h&#7885;c Machine Learning, c&#225;c k&#7929; s&#432; t&#7841;i DoorDash &#273;&#227; nh&#7853;n &#273;&#7883;nh r&#7857;ng vi&#7879;c s&#7917; d&#7909;ng k&#7871;t h&#7907;p nhi&#7873;u c&#417; s&#7903; d&#7919; li&#7879;u kh&#225;c nhau c&#243; th&#7875; gi&#250;p &#273;&#417;n gi&#7843;n h&#243;a qu&#225; tr&#236;nh v&#7853;n h&#224;nh c&#361;ng nh&#432; &#273;em l&#7841;i hi&#7879;u qu&#7843; &#273;&#225;ng k&#7875;.</p><p>V&#7899;i n&#7895; l&#7921;c t&#236;m ki&#7871;m m&#7897;t ph&#432;&#417;ng &#225;n hi&#7879;u qu&#7843; h&#417;n nh&#7857;m &#273;&#225;p &#7913;ng nhu c&#7847;u th&#7921;c thi c&#225;c t&#225;c v&#7909; Machine Learning, c&#225;c k&#7929; s&#432; t&#7841;i DoorDash &#273;&#227; quy&#7871;t &#273;&#7883;nh th&#7917; nghi&#7879;m s&#7917; d&#7909;ng m&#7897;t c&#417; s&#7903; d&#7919; li&#7879;u kh&#225;c &#273;&#7875; b&#7893; sung cho Redis hi&#7879;n t&#7841;i &#273;ang &#273;&#243;ng vai tr&#242; l&#224; l&#432;u tr&#7919; c&#225;c online feature ph&#237;a backend v&#224; h&#7885; &#273;&#227; quy&#7871;t &#273;&#7883;nh s&#7917; d&#7909;ng CockroachDB l&#224;m kho l&#432;u tr&#7919; c&#225;c feature. </p><p>Sau khi th&#7917; nghi&#7879;m v&#224; &#273;&#225;nh gi&#225; hi&#7879;u qu&#7843; gi&#250;p gi&#7843;m trung b&#236;nh &#273;&#432;&#7907;c 75% m&#7913;c chi ph&#237;  tr&#234;n m&#7895;i &#273;&#417;n v&#7883; l&#432;u tr&#7919; n&#7871;u t&#7893; ch&#7913;c l&#432;u tr&#7919; tr&#234;n c&#225;c n&#7873;n t&#7843;ng Cloud, v&#224; v&#7851;n &#273;&#7843;m b&#7843;o &#273;&#432;&#7907;c &#273;&#7897; tr&#7877; t&#7889;i thi&#7875;u.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T5iE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T5iE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 424w, https://substackcdn.com/image/fetch/$s_!T5iE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 848w, https://substackcdn.com/image/fetch/$s_!T5iE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 1272w, https://substackcdn.com/image/fetch/$s_!T5iE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T5iE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png" width="866" height="645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f89afb55-4887-4264-93af-299b34334e4d_866x645.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:645,&quot;width&quot;:866,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:250334,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T5iE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 424w, https://substackcdn.com/image/fetch/$s_!T5iE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 848w, https://substackcdn.com/image/fetch/$s_!T5iE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 1272w, https://substackcdn.com/image/fetch/$s_!T5iE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff89afb55-4887-4264-93af-299b34334e4d_866x645.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://doordash.engineering/2023/03/21/using-cockroachdb-to-reduce-feature-store-costs-by-75/">B&#224;i vi&#7871;t</a> m&#244; t&#7843; qu&#225; tr&#236;nh c&#225;c k&#7929; s&#432; DoorDash ti&#7871;n h&#224;nh th&#7917; nghi&#7879;m v&#224; c&#225;c b&#224;i h&#7885;c &#273;&#227; &#273;&#432;&#7907;c r&#250;t ra v&#7873; c&#225;ch th&#7913;c v&#7853;n h&#224;nh c&#225;c cluster Redis tr&#234;n quy m&#244; l&#7899;n v&#224; khi &#225;p d&#7909;ng Cockroach &#273;&#7875; h&#7895; tr&#7907; cho n&#7873;n t&#7843;ng serving online c&#7911;a DoorDash.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/remove-all-occurrences-of-a-substring/">Remove All Occurrences of a Substring</a></h4><p>Cho 2 chu&#7895;i "s" v&#224; "part", h&#227;y th&#7921;c hi&#7879;n bi&#7871;n &#273;&#7893;i chu&#7895;i "s" cho t&#7899;i khi s&#7921; xu&#7845;t hi&#7879;n c&#7911;a t&#7845;t c&#7843; c&#225;c chu&#7895;i con tr&#249;ng v&#7899;i "part" &#273;&#432;&#7907;c lo&#7841;i b&#7887;.</p><p>Ph&#233;p bi&#7871;n &#273;&#7893;i &#273;&#432;&#7907;c th&#7921;c hi&#7879;n nh&#432; sau:</p><ul><li><p>T&#236;m chu&#7895;i con tr&#225;i nh&#7845;t trong "s" tr&#249;ng v&#7899;i "part" v&#224; lo&#7841;i b&#7887; kh&#7887;i "s"</p></li><li><p>L&#7863;p l&#7841;i b&#432;&#7899;c tr&#234;n cho t&#7899;i khi kh&#244;ng c&#242;n s&#7921; xu&#7845;t hi&#7879;n c&#7911;a chu&#7895;i con "part" trong "s"</p></li></ul><p>&#272;i&#7873;u ki&#7879;n c&#7911;a &#273;&#7847;u v&#224;o:</p><ul><li><p>1 &lt;= s.length &lt;= 1000</p></li><li><p>1 &lt;= part.length &lt;= 1000</p></li><li><p>"s" v&#224; "part" ch&#7881; ch&#7913;a 26 k&#253; t&#7921; ch&#7919; th&#432;&#7901;ng trong ti&#7871;ng Anh</p></li></ul><p><strong>V&#237; d&#7909;:</strong></p><ul><li><p>Input: s = "daabcbaabcbc", part = "abc"</p></li><li><p>Output: "dab"</p></li><li><p>Gi&#7843;i th&#237;ch:</p><ul><li><p>s = "daabcbaabcbc", lo&#7841;i b&#7887; "abc" t&#7915; v&#7883; tr&#237; th&#7913; 2, ta thu &#273;&#432;&#7907;c s = "dabaabcbc".</p></li><li><p>s = "dabaabcbc", lo&#7841;i b&#7887; "abc" t&#7915; v&#7883; tr&#237; th&#7913; 4, ta thu &#273;&#432;&#7907;c s = "dababc".</p></li><li><p>s = "dababc", lo&#7841;i b&#7887; "abc" t&#7915; v&#7883; tr&#237; th&#7913; 3, ta thu &#273;&#432;&#7907;c s = "dab".</p></li></ul></li></ul><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/jump-game">Jump Game</a></h4><p><strong>H&#432;&#7899;ng ti&#7871;p c&#7853;n 1: gi&#7843;i thu&#7853;t quay lui</strong></p><p>B&#7855;t &#273;&#7847;u t&#7915; v&#7883; tr&#237; xu&#7845;t ph&#225;t t&#7841;i &#244; th&#7913; 0, ta th&#7921;c hi&#7879;n nh&#432; sau:</p><ol><li><p>l&#7847;n l&#432;&#7907;t nh&#7843;y &#273;&#7871;n nh&#7919;ng &#244; cho ph&#233;p</p></li><li><p>t&#7841;i m&#7895;i &#244; &#273;&#237;ch ta l&#7863;p l&#7841;i b&#432;&#7899;c 1</p></li></ol><p>N&#7871;u &#7903; m&#7897;t l&#7847;n nh&#7843;y b&#7845;t k&#7923;, ta t&#7899;i &#273;&#432;&#7907;c v&#7883; tr&#237; cu&#7889;i c&#249;ng n - 1, v&#7899;i n l&#224; &#273;&#7897; d&#224;i c&#7911;a m&#7843;ng &#273;&#7847;u v&#224;o, ta tr&#7843; l&#7841;i k&#7871;t qu&#7843; l&#224; true.</p><p>Gi&#7843;i thu&#7853;t quay lui s&#7869; c&#243; &#273;&#7897; ph&#7913;c t&#7841;p th&#7901;i gian l&#224; O(2^n).</p><p><strong>H&#432;&#7899;ng ti&#7871;p c&#7853;n 2: quy ho&#7841;ch &#273;&#7897;ng</strong></p><p>N&#7871;u ta bi&#7871;t t&#7841;i v&#7883; tr&#237; A ta c&#243; th&#7875; nh&#7843;y t&#7899;i &#244; cu&#7889;i c&#249;ng, v&#224; t&#7841;i v&#7883; tr&#237; B ta c&#243; th&#7875; nh&#7843;y t&#7899;i v&#7883; tr&#237; A, ta c&#243; k&#7871;t lu&#7853;n t&#7915; v&#7883; tr&#237; B ta c&#243; th&#7875; nh&#7843;y t&#7899;i &#244; cu&#7889;i c&#249;ng.</p><p>D&#7921;a tr&#234;n nh&#7853;n x&#233;t n&#224;y, ta ch&#7881; c&#7847;n duy&#7879;t m&#7843;ng &#273;&#7847;u v&#224;o v&#224; &#273;&#225;nh d&#7845;u nh&#7919;ng &#244; c&#243; th&#7875; nh&#7843;y &#273;&#432;&#7907;c t&#7899;i v&#7883; tr&#237; cu&#7889;i c&#249;ng b&#7857;ng gi&#7843;i thu&#7853;t nh&#432; sau:</p><pre><code><code>class Solution {
&nbsp;&nbsp;&nbsp;public boolean canJump(int[] nums) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int n = nums.length;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boolean[] memo = new boolean[n];

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// from n - 1 index, always can jump to n - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memo[n - 1] = true;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = n - 2; i &gt;= 0; i--) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int s = 1; s &lt;= nums[i]; s++) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (i + s &gt;= n - 1 || memo[i + s]) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// can jump to n - 1 from index i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memo[i] = true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return memo[0];
&nbsp;&nbsp;&nbsp;}
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p th&#7901;i gian c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(n^2)</p><p><strong>H&#432;&#7899;ng ti&#7871;p c&#7853;n 3: t&#7889;i &#432;u gi&#7843;i thu&#7853;t quy ho&#7841;ch &#273;&#7897;ng</strong></p><p>T&#432;&#417;ng t&#7921; nh&#432; gi&#7843;i thu&#7853;t &#7903; h&#432;&#7899;ng ti&#7871;p c&#7853;n quy ho&#7841;ch &#273;&#7897;ng, nh&#432;ng thay v&#236; s&#7917; d&#7909;ng m&#7843;ng memo &#273;&#7875; &#273;&#225;nh d&#7845;u nh&#7919;ng v&#7883; tr&#237; c&#243; th&#7875; nh&#7843;y t&#7899;i &#244; cu&#7889;i c&#249;ng, ta th&#7921;c ra ch&#7881; c&#7847;n bi&#7871;t v&#7883; tr&#237; b&#234;n tr&#225;i nh&#7845;t m&#224; ta c&#243; th&#7875; nh&#7843;y t&#7899;i v&#7883; tr&#237; cu&#7889;i c&#249;ng, ta g&#7885;i &#273;&#226;y l&#224; "leftmostReachToEndIndex". </p><p>N&#7871;u &#7903; v&#7883; tr&#237; hi&#7879;n t&#7841;i, ta c&#243; th&#7875; nh&#7843;y t&#7899;i "leftmostReachToEndIndex", ta c&#361;ng c&#243; th&#7875; nh&#7843;y t&#7899;i v&#7883; tr&#237; cu&#7889;i c&#249;ng.</p><p>Gi&#7843;i thu&#7853;t &#273;&#432;&#7907;c th&#7921;c hi&#7879;n nh&#432; sau:</p><pre><code><code>class Solution {
&nbsp;&nbsp;&nbsp;public boolean canJump(int[] nums) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// from n - 1 index, always can jump to n - 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int leftmostReachToEndIndex = nums.length - 1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = nums.length - 1; i &gt;= 0; i--) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// if from i, we can jump to leftmostReachToEndIndex, we can reach to end from i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// thus, update leftmostReachToEndIndex = i
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (i + nums[i] &gt;= leftmostReachToEndIndex) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leftmostReachToEndIndex = i;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return leftmostReachToEndIndex == 0;
&nbsp;&nbsp;&nbsp;}
}</code></code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p th&#7901;i gian c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(n), &#273;&#7897; ph&#7913;c t&#7841;p v&#7873; kh&#244;ng gian l&#224; O(1).</p><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c</strong></h3><p>B&#7841;n &#273;&#7885;c T.L chia s&#7867; c&#226;u tr&#7843; l&#7901;i cho c&#226;u h&#7887;i <strong>&#8220;Theo b&#7841;n trong 3-4 n&#259;m n&#7919;a, m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n Software Engineer s&#7869; di&#7877;n ra nh&#432; th&#7871; n&#224;o? N&#243; s&#7869; kh&#225;c g&#236; v&#7899;i c&#225;ch ch&#250;ng ta &#273;ang ph&#7887;ng v&#7845;n hi&#7879;n t&#7841;i?&#8221;</strong></p><blockquote><p>Theo m&#236;nh th&#7845;y nhi&#7873;u c&#244;ng ty hay c&#243; quy tr&#236;nh ph&#7887;ng v&#7845;n nh&#432; sau:</p><ul><li><p>Screening test </p></li><li><p>B&#224;i assignment take home </p></li><li><p>Ph&#7887;ng v&#7845;n tr&#7921;c ti&#7871;p th&#236; hay h&#7887;i v&#7873; thu&#7853;t to&#225;n, ki&#7871;n th&#7913;c v&#7873; c&#225;c lo&#7841;i ng&#244;n ng&#7919; l&#7853;p tr&#236;nh, &#8230;</p></li></ul><p>Theo m&#236;nh, v&#7899;i s&#7921; ph&#225;t tri&#7875;n c&#7911;a c&#225;c c&#244;ng c&#7909; AI, Copilot nh&#432; hi&#7879;n t&#7841;i th&#236; c&#225;c b&#224;i screening test d&#7841;ng tr&#7855;c nghi&#7879;m c&#243; kh&#7843; n&#259;ng s&#7869; b&#7887;. H&#7891;i x&#432;a m&#7845;y b&#224;i screening test t&#7889;t v&#236; c&#243; th&#7875; h&#7887;i m&#7897;t s&#7889; c&#226;u mang t&#237;nh nh&#7853;n &#273;&#7883;nh, ho&#7863;c c&#243; gi&#7899;i h&#7841;n th&#7901;i gian th&#236; c&#242;n &#273;&#432;&#7907;c, gi&#7901; th&#236; c&#226;u h&#7887;i nh&#7853;n &#273;&#7883;nh c&#361;ng b&#7883; bot tr&#7843; l&#7901;i r&#7891;i n&#234;n c&#361;ng kh&#244;ng c&#242;n hi&#7879;u qu&#7843; n&#7919;a. </p><p>Ph&#7887;ng v&#7845;n tr&#7921;c ti&#7871;p th&#236; ch&#7855;c s&#7869; l&#224; h&#236;nh th&#7913;c t&#7889;t nh&#7845;t v&#236; l&#250;c &#273;&#243; &#7913;ng vi&#234;n s&#7869; ph&#7843;n &#7913;ng d&#7921;a tr&#234;n ki&#7871;n th&#7913;c th&#7853;t c&#7911;a m&#236;nh n&#234;n vi&#7879;c d&#7921;a v&#224;o bot nhi&#7873;u c&#361;ng kh&#244;ng hi&#7879;u qu&#7843;. Tuy nhi&#234;n, m&#236;nh th&#236; th&#7845;y ph&#7887;ng v&#7845;n t&#432;&#417;ng lai ch&#7855;c s&#7869; thi&#234;n v&#7873; t&#236;nh hu&#7889;ng v&#224; x&#7917; l&#253; v&#7845;n &#273;&#7873; nhi&#7873;u h&#417;n, v&#236; c&#225;c thu&#7853;t to&#225;n b&#226;y gi&#7901; &#237;t quan tr&#7885;ng. Ch&#7881; c&#7847;n m&#244; t&#7843; y&#234;u c&#7847;u k&#232;m theo input/output &#273;&#250;ng l&#224; c&#243; khi c&#225;c &#7913;ng d&#7909;ng Copilot &#273;&#227; sinh ra code k&#232;m test case cho m&#236;nh lu&#244;n r&#7891;i.</p></blockquote><p>Ngo&#224;i ra, b&#7841;n &#273;&#7885;c Th&#7883;nh c&#243; g&#7917;i &#273;&#7871;n th&#7855;c m&#7855;c, mong c&#225;c b&#7841;n c&#243; th&#7875; chia s&#7867; g&#243;p &#253; cho b&#7841;n &#7845;y. Nh&#432; th&#432;&#7901;ng l&#7879;, c&#225;c c&#226;u tr&#7843; l&#7901;i hay s&#7869; nh&#7853;n &#273;&#432;&#7907;c m&#7897;t ph&#7847;n qu&#224; l&#224; m&#7897;t quy&#7875;n Dijkstra t&#7853;p 2 b&#7843;n in.</p><blockquote><p>C&#244;ng vi&#7879;c c&#7911;a Software Engineer li&#7879;u c&#243; ph&#7843;i ch&#7881; c&#243; code kh&#244;ng &#7841;? Em &#273;ang l&#224;m Software Engineer &#7903; m&#7897;t c&#244;ng ty c&#244;ng ngh&#7879; c&#361;ng l&#7899;n, nh&#432;ng c&#244;ng vi&#7879;c h&#224;ng ng&#224;y c&#7911;a em th&#236; l&#7841;i xoay quanh c&#7845;u h&#236;nh Kafka Connect, c&#7845;u h&#236;nh github repo, n&#226;ng c&#7845;p c&#225;c phi&#234;n b&#7843;n ph&#7847;n m&#7873;m c&#225;c team kh&#225;c &#273;ang d&#249;ng, &#8230; v&#224; r&#7845;t &#237;t code. N&#234;n em kh&#244;ng bi&#7871;t l&#224; nh&#432; v&#7853;y th&#236; c&#243; g&#7885;i l&#224; software engineer kh&#244;ng, v&#224; em c&#243; &#273;ang &#273;i &#273;&#250;ng h&#432;&#7899;ng kh&#244;ng?</p></blockquote><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>&#8220;We can only see a short distance ahead, but we can see plenty there that needs to be done.&#8221;</p><p><strong>Alan Turing</strong></p></div>]]></content:encoded></item><item><title><![CDATA[#256 - Hãy đặt câu hỏi đúng]]></title><description><![CDATA[N&#7871;u b&#7841;n &#273;&#7863;t ra &#273;&#250;ng c&#226;u h&#7887;i, vi&#7879;c gi&#7843;i quy&#7871;t v&#7845;n &#273;&#7873; s&#7869; d&#7877; d&#224;ng h&#417;n nhi&#7873;u]]></description><link>https://newsletter.grokking.org/p/256-hay-at-cau-hoi-ung</link><guid isPermaLink="false">https://newsletter.grokking.org/p/256-hay-at-cau-hoi-ung</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Tue, 09 May 2023 14:10:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p>&#7902; k&#7923; tr&#432;&#7899;c, nh&#243;m bi&#234;n t&#7853;p c&#243; &#273;&#7863;t ra c&#226;u h&#7887;i &#8220;<strong>B&#7841;n ngh&#297; c&#244;ng vi&#7879;c c&#7911;a Software Engineer s&#7869; thay &#273;&#7893;i nh&#432; th&#7871; n&#224;o sau 3-4 n&#259;m n&#7919;a?</strong>&#8220; v&#224; nh&#7853;n &#273;&#432;&#7907;c m&#7897;t s&#7889; &#253; tr&#7843; l&#7901;i t&#7915; c&#225;c b&#7841;n &#273;&#7885;c. C&#225;c b&#7841;n c&#243; th&#7875; tham kh&#7843;o &#7903; m&#7909;c G&#243;c b&#7841;n &#273;&#7885;c b&#234;n d&#432;&#7899;i. Xin c&#7843;m &#417;n c&#225;c b&#7841;n &#273;&#227; nhi&#7879;t t&#236;nh &#273;&#243;ng g&#243;p &#253; t&#432;&#7903;ng.</p><p>Trong newsletter k&#7923; n&#224;y, nh&#243;m bi&#234;n t&#7853;p xin &#273;&#7863;t ra c&#226;u h&#7887;i kh&#225;c: &#8220;<strong>Theo b&#7841;n trong 3-4 n&#259;m n&#7919;a, m&#7897;t bu&#7893;i ph&#7887;ng v&#7845;n Software Engineer s&#7869; di&#7877;n ra nh&#432; th&#7871; n&#224;o? N&#243; s&#7869; kh&#225;c g&#236; v&#7899;i c&#225;ch ch&#250;ng ta &#273;ang ph&#7887;ng v&#7845;n hi&#7879;n t&#7841;i?</strong>&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>H&#227;y reply email n&#224;y tr&#432;&#7899;c khi s&#7889; newsletter ti&#7871;p theo &#273;&#432;&#7907;c g&#7917;i &#273;i (ho&#7863;c g&#7917;i c&#226;u tr&#7843; l&#7901;i &#273;&#7871;n <em><strong>newsletter@grokking.org</strong></em>) &#273;&#7875; chia s&#7867; &#253; ki&#7871;n c&#7911;a m&#236;nh nh&#233;! Ban bi&#234;n t&#7853;p s&#7869; ch&#7885;n ra nh&#7919;ng c&#226;u tr&#7843; l&#7901;i hay nh&#7845;t &#273;&#7875; trao t&#7863;ng ph&#7847;n qu&#224; l&#224; m&#7897;t quy&#7875;n Dijkstra t&#7853;p 2 (b&#7843;n in). Mong nh&#7853;n &#273;&#432;&#7907;c nhi&#7873;u g&#243;p &#253; t&#7915; c&#225;c b&#7841;n.</p><p>P/S: C&#225;c b&#7841;n nh&#7899; g&#7917;i k&#232;m theo th&#244;ng tin li&#234;n h&#7879; &#273;&#7875; Ban bi&#234;n t&#7853;p c&#243; th&#7875; ti&#7879;n g&#7917;i qu&#224; nh&#233;.</p><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://www.infoq.com/presentations/data-versioning-scale/">Data versioning at scale</a></h4><p><em>(by Bing and n^4)</em> </p><p>Einat Orr, m&#7897;t trong nh&#7919;ng th&#224;nh vi&#234;n s&#225;ng l&#7853;p c&#7911;a Treeverse, &#273;&#227; c&#243; m&#7897;t b&#224;i thuy&#7871;t tr&#236;nh mang t&#234;n &#8220;Data Versioning at Scale: Chaos and Chaos Management&#8221; t&#7841;i QCon New York. </p><p>Trong b&#224;i thuy&#7871;t tr&#236;nh n&#224;y, Einat th&#7843;o lu&#7853;n v&#7873; c&#225;ch d&#7919; li&#7879;u thay &#273;&#7893;i theo th&#7901;i gian do c&#225;c y&#7871;u t&#7889; kh&#225;c nhau, ch&#7859;ng h&#7841;n nh&#432; l&#7895;i, c&#7853;p nh&#7853;t, &#432;&#7899;c t&#237;nh v&#224; ngu&#7891;n m&#7899;i. S&#7921; thay &#273;&#7893;i n&#224;y s&#7869; &#7843;nh h&#432;&#7903;ng &#273;&#7871;n ch&#7845;t l&#432;&#7907;ng, &#273;&#7897; tin c&#7853;y v&#224; t&#237;nh nh&#7845;t qu&#225;n c&#7911;a c&#225;c quy&#7871;t &#273;&#7883;nh d&#7921;a tr&#234;n d&#7919; li&#7879;u. Einat c&#361;ng gi&#7843;i th&#237;ch c&#225;c th&#225;ch th&#7913;c trong vi&#7879;c qu&#7843;n l&#253; phi&#234;n b&#7843;n d&#7919; li&#7879;u (version control), ch&#7859;ng h&#7841;n nh&#432; s&#7921; h&#7907;p t&#225;c, k&#7871; th&#7915;a d&#7919; li&#7879;u (lineage), kh&#7843; n&#259;ng t&#225;i s&#7843;n xu&#7845;t (reproducibility), t&#237;nh nh&#7845;t qu&#225;n gi&#7919;a c&#225;c b&#7843;ng (cross-collection consistency), v&#224; s&#7921; c&#7847;n thi&#7871;t ph&#7843;i c&#243; h&#7841; t&#7847;ng c&#243; th&#7875; x&#7917; l&#253; &#273;&#432;&#7907;c s&#7921; ph&#7913;c t&#7841;p v&#224; h&#7895;n lo&#7841;n c&#7911;a d&#7919; li&#7879;u. </p><p>B&#234;n c&#7841;nh &#273;&#243;, Einat xem x&#233;t m&#7897;t s&#7889; gi&#7843;i ph&#225;p hi&#7879;n c&#243; cung c&#7845;p version control v&#224; l&#224;m n&#7893;i b&#7853;t c&#225;c &#432;u nh&#432;&#7907;c &#273;i&#7875;m c&#7911;a m&#7895;i ph&#432;&#417;ng ph&#225;p. </p><ul><li><p>Git l&#224; gi&#7843;i ph&#225;p versioning ph&#7893; bi&#7871;n &#273;&#432;&#7907;c s&#7917; d&#7909;ng trong l&#297;nh v&#7921;c ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m. Tuy nhi&#234;n, Git kh&#244;ng &#273;&#432;&#7907;c thi&#7871;t k&#7871; &#273;&#7875; qu&#7843;n l&#253; d&#7919; li&#7879;u l&#7899;n v&#224; ph&#226;n t&#225;n. &#272;i&#7873;u n&#224;y c&#243; th&#7875; g&#226;y ra nh&#7919;ng v&#7845;n &#273;&#7873; v&#7873; hi&#7879;u su&#7845;t v&#224; kh&#7843; n&#259;ng m&#7903; r&#7897;ng khi s&#7917; d&#7909;ng Git &#273;&#7875; qu&#7843;n l&#253; d&#7919; li&#7879;u l&#7899;n.</p></li><li><p>M&#7897;t gi&#7843;i ph&#225;p kh&#225;c l&#224; DVC (Data Version Control), m&#7897;t c&#244;ng c&#7909; versioning m&#227; ngu&#7891;n m&#7903; &#273;&#432;&#7907;c thi&#7871;t k&#7871; &#273;&#7863;c bi&#7879;t cho vi&#7879;c qu&#7843;n l&#253; d&#7919; li&#7879;u l&#7899;n v&#224; ph&#226;n t&#225;n. DVC cung c&#7845;p c&#225;c t&#237;nh n&#259;ng nh&#432; versioning, lineage tracking v&#224; data sharing. Tuy nhi&#234;n, DVC kh&#244;ng h&#7895; tr&#7907; c&#225;c t&#237;nh n&#259;ng nh&#432; merge v&#224; conflict resolution.</p></li><li><p>Ngo&#224;i ra, LakeFS l&#224; m&#7897;t gi&#7843;i ph&#225;p versioning d&#7919; li&#7879;u m&#7899;i nh&#7845;t &#273;&#432;&#7907;c thi&#7871;t k&#7871; &#273;&#7875; qu&#7843;n l&#253; c&#225;c data lake tr&#234;n c&#225;c h&#7879; th&#7889;ng &#273;&#225;m m&#226;y. LakeFS cung c&#7845;p c&#225;c t&#237;nh n&#259;ng nh&#432; versioning, lineage tracking v&#224; data sharing. N&#243; c&#361;ng h&#7895; tr&#7907; c&#225;c t&#237;nh n&#259;ng nh&#432; merge v&#224; conflict resolution.</p></li></ul><h4><a href="https://engineering.zalopay.vn/understand-linux-namespace-by-creating-a-docker-like-engine/">Understand Linux namespace by creating a docker like engine</a></h4><p><em>(by n^4)</em></p><p>Trong kh&#7843;o s&#225;t StackOverflow n&#259;m 2022, Docker &#273;&#227; tr&#7903; th&#224;nh m&#7897;t c&#244;ng c&#7909; quan tr&#7885;ng cho c&#225;c nh&#224; ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m v&#224; &#273;&#227; tr&#7903; n&#234;n r&#7845;t ph&#7893; bi&#7871;n. &#272;&#227; c&#243; nhi&#7873;u b&#224;i vi&#7871;t gi&#7899;i thi&#7879;u v&#7873; c&#417; ch&#7871; ho&#7841;t &#273;&#7897;ng c&#7911;a Docker r&#7891;i, nh&#432;ng trong b&#224;i vi&#7871;t n&#224;y, m&#7897;t b&#7841;n k&#7929; s&#432; &#7903; Zalopay chia s&#7867; c&#225;ch &#273;&#7875; hi&#7875;u c&#417; ch&#7871; ho&#7841;t &#273;&#7897;ng th&#244;ng qua qu&#225; tr&#236;nh t&#7841;o ra m&#7897;t h&#7879; th&#7889;ng qu&#7843;n l&#253; container m&#7899;i. Hy v&#7885;ng b&#224;i vi&#7871;t s&#7869; h&#7919;u &#237;ch cho c&#225;c b&#7841;n m&#7899;i b&#7855;t &#273;&#7847;u l&#224;m quen v&#7899;i docker n&#243;i ri&#234;ng v&#224; linux n&#243;i chung.</p><h4><a href="https://www.youtube.com/watch?v=KClAPipnKqw">Technical leadership and gluework</a></h4><p><em>(by Bing + n^4)</em></p><p>B&#7841;n &#273;&#227; l&#224;m senior trong 4-5 n&#259;m, s&#7855;p t&#7899;i b&#7841;n &#273;&#432;&#7907;c th&#259;ng ch&#7913;c tr&#7903; th&#224;nh tr&#432;&#7903;ng nh&#243;m. Tuy nhi&#234;n, b&#7841;n nh&#7853;n ra c&#244;ng vi&#7879;c tr&#432;&#7903;ng nh&#243;m kh&#244;ng gi&#7889;ng nh&#432; b&#7841;n ngh&#297; v&#236; h&#243;a ra b&#7841;n ph&#7843;i l&#224;m nh&#7919;ng vi&#7879;c kh&#244;ng t&#234;n t&#432;&#7903;ng ch&#7915;ng ch&#7859;ng li&#234;n quan &#273;&#7871;n coding nh&#432; t&#7841;o t&#224;i li&#7879;u quy tr&#236;nh, vi&#7871;t b&#225;o c&#225;o, gi&#7899;i thi&#7879;u cho c&#225;c th&#224;nh vi&#234;n m&#7899;i trong nh&#243;m&#8230;</p><p>Tuy nhi&#234;n, h&#243;a ra nh&#7919;ng c&#244;ng vi&#7879;c &#237;t li&#234;n quan n&#224;y l&#7841;i g&#243;p ph&#7847;n quan tr&#7885;ng trong vi&#7879;c th&#224;nh b&#7841;i c&#7911;a m&#7897;t d&#7921; &#225;n ph&#7847;n m&#7873;m, v&#224; c&#361;ng l&#224; &#273;&#242;i h&#7887;i kh&#244;ng th&#7875; thi&#7871;u c&#7911;a m&#7897;t ng&#432;&#7901;i leader/manager. Thay v&#236; n&#233; tr&#225;nh, ch&#250;ng ta s&#7869; c&#7847;n ph&#7843;i h&#7885;c c&#225;ch l&#224;m nh&#7919;ng c&#244;ng vi&#7879;c n&#224;y m&#7897;t c&#225;ch hi&#7879;u qu&#7843;.</p><p>B&#224;i thuy&#7871;t tr&#236;nh n&#224;y s&#7869; gi&#250;p b&#7841;n hi&#7875;u r&#245; h&#417;n v&#7873; nh&#7919;ng c&#244;ng vi&#7879;c mang b&#7843;n ch&#7845;t gi&#250;p &#8220;k&#7871;t d&#237;nh&#8221; (glue work) v&#224; c&#225;ch ph&#226;n b&#7893; c&#244;ng vi&#7879;c n&#224;y m&#7897;t c&#225;ch h&#7907;p l&#253; &#273;&#7875; &#273;&#7843;m b&#7843;o s&#7921; th&#224;nh c&#244;ng c&#7911;a nh&#243;m. Di&#7877;n gi&#7843; l&#224; Tanya Reilly, m&#7897;t k&#7929; s&#432; ph&#7847;n m&#7873;m ch&#237;nh t&#7841;i Squarespace v&#224; t&#7915;ng l&#224;m vi&#7879;c t&#7841;i Google trong 12 n&#259;m.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/jump-game">Jump Game</a></h4><p>Cho tr&#432;&#7899;c m&#7897;t m&#7843;ng s&#7889; nguy&#234;n <code>nums</code>. B&#7855;t &#273;&#7847;u t&#7915; v&#7883; tr&#237; &#273;&#7847;u ti&#234;n, x&#225;c &#273;&#7883;nh xem c&#243; th&#7875; di chuy&#7875;n &#273;&#7871;n v&#7883; tr&#237; cu&#7889;i c&#249;ng hay kh&#244;ng, bi&#7871;t t&#7841;i m&#7895;i v&#7883; tr&#237; <code>i</code>, kho&#7843;ng c&#225;ch xa nh&#7845;t c&#243; th&#7875; di chuy&#7875;n l&#224; <code>nums[i]</code></p><p>V&#237; d&#7909;:</p><ul><li><p>Input: nums = [2,3,1,1,4]</p></li><li><p>Output: true</p></li><li><p>Gi&#7843;i th&#237;ch: Nh&#7843;y t&#7915; v&#7883; tr&#237; &#273;&#7847;u ti&#234;n &#273;&#7871;n v&#7883; tr&#237; th&#7913; hai (gi&#225; tr&#7883; 3), sau &#273;&#243; nh&#7843;y t&#7915; v&#7883; tr&#237; th&#7913; hai &#273;&#7871;n v&#7883; tr&#237; cu&#7889;i c&#249;ng (gi&#225; tr&#7883; 4).</p></li></ul><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/find-the-duplicate-number/">Find the duplicate number</a></h4><p>M&#7897;t c&#225;ch ti&#7871;p c&#7853;n &#273;&#417;n gi&#7843;n &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n n&#224;y l&#224; s&#7917; d&#7909;ng m&#7897;t b&#7843;ng &#273;&#225;nh d&#7845;u &#273;&#7875; l&#432;u l&#7841;i vi&#7879;c xu&#7845;t hi&#7879;n c&#7911;a c&#225;c s&#7889;. V&#7899;i ng&#244;n ng&#7919; Java th&#236; ta c&#243; th&#7875; s&#7917; d&#7909;ng Map ho&#7863;c Set. Tuy nhi&#234;n, gi&#7843;i ph&#225;p n&#224;y y&#234;u c&#7847;u s&#7917; d&#7909;ng th&#234;m O(n) kh&#244;ng gian v&#224; kh&#244;ng &#273;&#225;p &#7913;ng &#273;&#432;&#7907;c y&#234;u c&#7847;u c&#7911;a b&#224;i to&#225;n.</p><p>Thay v&#224;o &#273;&#243;, ch&#250;ng ta c&#243; th&#7875; s&#7917; d&#7909;ng thu&#7853;t to&#225;n Floyd (hay c&#242;n g&#7885;i l&#224; thu&#7853;t to&#225;n "th&#7887; v&#224; r&#249;a") &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n n&#224;y.</p><p>Thu&#7853;t to&#225;n Floyd l&#224; m&#7897;t thu&#7853;t to&#225;n &#273;&#432;&#7907;c s&#7917; d&#7909;ng &#273;&#7875; t&#236;m ki&#7871;m chu k&#7923; trong m&#7897;t danh s&#225;ch li&#234;n k&#7871;t, v&#224; n&#243; c&#361;ng c&#243; th&#7875; &#273;&#432;&#7907;c s&#7917; d&#7909;ng &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n n&#224;y.</p><p>C&#225;c b&#432;&#7899;c gi&#7843;i quy&#7871;t b&#224;i to&#225;n "find-the-duplicate-number" b&#7857;ng thu&#7853;t to&#225;n Floyd nh&#432; sau:</p><ol><li><p>Kh&#7903;i t&#7841;o hai bi&#7871;n "tortoise" v&#224; "hare" ban &#273;&#7847;u tr&#7887; &#273;&#7871;n ph&#7847;n t&#7917; &#273;&#7847;u ti&#234;n trong m&#7843;ng.</p></li><li><p>V&#7899;i m&#7895;i b&#432;&#7899;c, "tortoise" &#273;i m&#7897;t b&#432;&#7899;c v&#224; "hare" &#273;i hai b&#432;&#7899;c.</p></li><li><p>N&#7871;u "tortoise" v&#224; "hare" g&#7863;p nhau, ch&#250;ng ta &#273;&#227; t&#236;m th&#7845;y m&#7897;t chu k&#7923; trong m&#7843;ng</p></li><li><p>Ti&#7871;p theo, ta s&#7869; kh&#7903;i t&#7841;o m&#7897;t con tr&#7887; "ptr" tr&#7887; &#273;&#7871;n ph&#7847;n t&#7917; &#273;&#7847;u ti&#234;n trong m&#7843;ng v&#224; di chuy&#7875;n con tr&#7887; "tortoise" v&#224; "ptr" c&#249;ng m&#7897;t b&#432;&#7899;c m&#7895;i l&#7847;n cho &#273;&#7871;n khi ch&#250;ng g&#7863;p nhau.</p></li></ol><p>Ph&#7847;n t&#7917; m&#224; ch&#250;ng ta g&#7863;p l&#7841;i trong qu&#225; tr&#236;nh di chuy&#7875;n "tortoise" v&#224; "ptr" ch&#237;nh l&#224; ph&#7847;n t&#7917; tr&#249;ng l&#7863;p.</p><p>&#272;&#7897; ph&#7913;c t&#7841;p c&#7911;a thu&#7853;t to&#225;n n&#224;y l&#224; O(n), trong &#273;&#243; n l&#224; k&#237;ch th&#432;&#7899;c c&#7911;a m&#7843;ng. D&#432;&#7899;i &#273;&#226;y l&#224; c&#224;i &#273;&#7863;t tham kh&#7843;o c&#7911;a b&#224;i to&#225;n n&#224;y s&#7917; d&#7909;ng thu&#7853;t to&#225;n Floyd b&#7857;ng ng&#244;n ng&#7919; Java.</p><pre><code><code>class Solution {
    public int findDuplicate(int[] nums) {
        int tortoise = nums[0];
        int hare = nums[0];
        while (true) {
            tortoise = nums[tortoise];
            hare = nums[nums[hare]];
            if (tortoise == hare) {
                break;
            }
        }
        int ptr = nums[0];

        while (tortoise != ptr) {
            tortoise = nums[tortoise];
            ptr = nums[ptr];
        }
        return ptr;
    }
}</code></code></pre><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c</strong></h3><p>G&#243;c b&#7841;n &#273;&#7885;c k&#7923; n&#224;y c&#243; m&#7897;t chia s&#7867; t&#7915; m&#7897;t b&#7841;n &#273;&#7885;c g&#7917;i &#273;&#7871;n nh&#243;m bi&#234;n t&#7853;p. R&#7845;t c&#7843;m &#417;n b&#7841;n Q.H&#432;&#417;ng &#273;&#227; &#273;&#243;ng g&#243;p, mong nh&#7853;n &#273;&#432;&#7907;c nhi&#7873;u s&#7921; &#273;&#243;ng g&#243;p h&#417;n t&#7915; ph&#237;a b&#7841;n. </p><blockquote><p><strong>B&#7841;n ngh&#297; c&#244;ng vi&#7879;c c&#7911;a Software Engineer s&#7869; thay &#273;&#7893;i nh&#432; th&#7871; n&#224;o sau 3-4 n&#259;m n&#7919;a?</strong></p><p>C&#244;ng vi&#7879;c c&#7911;a k&#7929; s&#432; ph&#7847;n m&#7873;m s&#7869; ti&#7871;p t&#7909;c thay &#273;&#7893;i trong t&#432;&#417;ng lai v&#7899;i s&#7921; ph&#225;t tri&#7875;n c&#7911;a tr&#237; tu&#7879; nh&#226;n t&#7841;o (AI) v&#224; c&#225;c c&#244;ng ngh&#7879; li&#234;n quan. M&#7897;t s&#7889; thay &#273;&#7893;i c&#243; th&#7875; bao g&#7891;m:<br>1/ <strong>T&#259;ng c&#432;&#7901;ng s&#7917; d&#7909;ng tr&#237; tu&#7879; nh&#226;n t&#7841;o</strong>: V&#7899;i s&#7921; ra &#273;&#7901;i c&#7911;a c&#225;c c&#244;ng ngh&#7879; AI nh&#432; chatbot, image recognition, v&#224; natural language processing, k&#7929; s&#432; ph&#7847;n m&#7873;m s&#7869; c&#7847;n ph&#7843;i trang b&#7883; k&#7929; n&#259;ng v&#224; ki&#7871;n th&#7913;c m&#7899;i &#273;&#7875; ph&#225;t tri&#7875;n, tri&#7875;n khai v&#224; t&#7889;i &#432;u h&#243;a c&#225;c &#7913;ng d&#7909;ng s&#7917; d&#7909;ng tr&#237; tu&#7879; nh&#226;n t&#7841;o.<br>2/ <strong>S&#7921; ph&#225;t tri&#7875;n c&#7911;a c&#225;c n&#7873;n t&#7843;ng ph&#225;t tri&#7875;n low-code v&#224; no-code</strong>: C&#225;c c&#244;ng c&#7909; n&#224;y &#273;ang ng&#224;y c&#224;ng tr&#7903; n&#234;n ph&#7893; bi&#7871;n, gi&#250;p cho nh&#7919;ng ng&#432;&#7901;i kh&#244;ng c&#243; kinh nghi&#7879;m l&#7853;p tr&#236;nh c&#361;ng c&#243; th&#7875; t&#7841;o ra c&#225;c &#7913;ng d&#7909;ng ph&#7847;n m&#7873;m. &#272;i&#7873;u n&#224;y c&#243; th&#7875; &#7843;nh h&#432;&#7903;ng &#273;&#7871;n vi&#7879;c c&#7847;n thi&#7871;t c&#7911;a k&#7929; s&#432; ph&#7847;n m&#7873;m trong c&#225;c c&#244;ng ty v&#224; t&#7893; ch&#7913;c.<br>3/ <strong>T&#259;ng c&#432;&#7901;ng qu&#7843;n l&#253; d&#7919; li&#7879;u</strong>: S&#7921; ph&#225;t tri&#7875;n c&#7911;a c&#244;ng ngh&#7879; &#273;&#225;m m&#226;y v&#224; big data s&#7869; t&#7841;o ra nhi&#7873;u c&#417; h&#7897;i cho k&#7929; s&#432; ph&#7847;n m&#7873;m ph&#225;t tri&#7875;n c&#225;c &#7913;ng d&#7909;ng d&#7921;a tr&#234;n d&#7919; li&#7879;u. Tuy nhi&#234;n, &#273;&#7891;ng th&#7901;i c&#361;ng &#273;&#7863;t ra th&#225;ch th&#7913;c v&#7873; qu&#7843;n l&#253;, an to&#224;n v&#224; b&#7843;o m&#7853;t d&#7919; li&#7879;u.<br>4/ <strong>S&#7921; t&#259;ng c&#432;&#7901;ng v&#7873; b&#7843;o m&#7853;t v&#224; an ninh m&#7841;ng</strong>: Khi c&#225;c m&#7889;i &#273;e d&#7885;a m&#7841;ng ng&#224;y c&#224;ng ph&#7913;c t&#7841;p h&#417;n, k&#7929; s&#432; ph&#7847;n m&#7873;m s&#7869; ph&#7843;i tr&#7903; th&#224;nh chuy&#234;n gia v&#7873; b&#7843;o m&#7853;t v&#224; an ninh m&#7841;ng. C&#225;c c&#244;ng ngh&#7879; b&#7843;o m&#7853;t m&#7899;i s&#7869; c&#7847;n &#273;&#432;&#7907;c ph&#225;t tri&#7875;n v&#224; tri&#7875;n khai &#273;&#7875; b&#7843;o v&#7879; c&#225;c &#7913;ng d&#7909;ng ph&#7847;n m&#7873;m.<br>T&#7893;ng th&#7875;, c&#244;ng vi&#7879;c c&#7911;a k&#7929; s&#432; ph&#7847;n m&#7873;m s&#7869; ti&#7871;p t&#7909;c thay &#273;&#7893;i &#273;&#7875; &#273;&#225;p &#7913;ng v&#7899;i s&#7921; ph&#225;t tri&#7875;n c&#7911;a c&#244;ng ngh&#7879;. K&#7929; s&#432; ph&#7847;n m&#7873;m c&#7847;n ph&#7843;i t&#7853;p trung v&#224;o c&#225;c k&#7929; n&#259;ng v&#224; ki&#7871;n th&#7913;c m&#7899;i &#273;&#7875; tr&#7903; th&#224;nh ng&#432;&#7901;i ch&#7911; ch&#7889;t trong vi&#7879;c ph&#225;t tri&#7875;n c&#225;c &#7913;ng d&#7909;ng ph&#7847;n m&#7873;m th&#244;ng minh, an to&#224;n v&#224; hi&#7879;u qu&#7843;.</p><p>-Q.H-</p></blockquote><p>B&#234;n c&#7841;nh nh&#7919;ng &#253; b&#7841;n H&#432;&#417;ng &#273;&#227; n&#234;u ra, m&#7897;t b&#7841;n &#273;&#7885;c t&#234;n L c&#361;ng c&#243; b&#7893; sung th&#234;m m&#7897;t s&#7889; &#253; t&#432;&#7903;ng sau:</p><blockquote><p>1/ <strong>N&#226;ng cao</strong> <strong>kh&#7843; n&#259;ng &#273;&#7863;t c&#226;u h&#7887;i v&#224; m&#244; t&#7843; y&#234;u c&#7847;u.</strong> T&#244;i tin v&#224;o quan &#273;i&#7875;m &#273;&#432;&#7907;c nhi&#7873;u ng&#432;&#7901;i &#273;&#7873; c&#7853;p &#273;&#243; l&#224; &#273;&#7863;t ra &#273;&#250;ng c&#226;u h&#7887;i s&#7869; kh&#243; h&#417;n l&#224; t&#236;m ki&#7871;m c&#226;u tr&#7843; l&#7901;i. Vi&#7879;c ph&#7893; bi&#7871;n c&#7911;a c&#225;c LLM c&#249;ng c&#225;c &#7913;ng d&#7909;ng generation s&#7869; khi&#7871;n cho c&#244;ng vi&#7879;c c&#7911;a k&#7929; s&#432; ph&#7847;n m&#7873;m t&#7853;p trung v&#224;o kh&#237;a c&#7841;nh problem solving v&#224; &#273;&#7863;t ra v&#7845;n &#273;&#7873; nhi&#7873;u h&#417;n. T&#244;i tin l&#224; khi b&#7841;n &#273;&#7863;t ra &#273;&#250;ng c&#226;u h&#7887;i, c&#225;c h&#7879; th&#7889;ng AI v&#224; assistant c&#7911;a t&#432;&#417;ng lai s&#7869; gi&#7843;i quy&#7871;t v&#7845;n &#273;&#7873; gi&#250;p b&#7841;n m&#7897;t c&#225;ch d&#7877; d&#224;ng.</p><p>2/ <strong>Ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng chuy&#234;n s&#226;u v&#224; kh&#7843; n&#259;ng ra quy&#7871;t &#273;&#7883;nh. </strong>Vi&#7879;c c&#225;c h&#7879; th&#7889;ng AI th&#244;ng minh h&#417;n s&#7869; khi&#7871;n cho vi&#7879;c x&#226;y d&#7921;ng ph&#7847;n m&#7873;m m&#7899;i v&#224; v&#7853;n h&#224;nh &#237;t t&#7889;n nh&#226;n l&#7921;c h&#417;n. Tuy nhi&#234;n, d&#7921;a tr&#234;n kinh nghi&#7879;m b&#7843;n th&#226;n l&#224;m oncall cho c&#225;c h&#7879; th&#7889;ng th&#236; t&#244;i th&#7845;y con ng&#432;&#7901;i v&#7851;n n&#234;n l&#224; nh&#7919;ng l&#250;c ra quy&#7871;t &#273;&#7883;nh l&#250;c kh&#7849;n c&#7845;p. V&#237; d&#7909; nh&#432; khi m&#7897;t h&#7879; th&#7889;ng quan tr&#7885;ng trong c&#244;ng ty b&#7883; l&#7895;i nghi&#234;m tr&#7885;ng d&#7851;n &#273;&#7871;n th&#7845;t tho&#225;t doanh thu, AI s&#7869; gi&#250;p ch&#250;ng ta c&#243; &#273;&#432;&#7907;c th&#244;ng tin nhanh v&#224; k&#7883;p th&#7901;i nh&#7845;t. Nh&#432;ng l&#224;m sao &#273;&#7875; x&#7917; l&#253; v&#7845;n &#273;&#7873; tr&#432;&#7899;c m&#7855;t v&#7851;n l&#224; th&#7913; c&#7847;n con ng&#432;&#7901;i ra quy&#7871;t &#273;&#7883;nh. V&#224; trong nh&#7919;ng l&#250;c kh&#7849;n c&#7845;p nh&#432; th&#7871; n&#224;y, b&#7841;n c&#7847;n ph&#7843;i c&#243; ki&#7871;n th&#7913;c n&#7873;n t&#7843;ng v&#224; l&#432;&#7907;ng kinh nghi&#7879;m s&#226;u &#273;&#7875; hi&#7875;u r&#245; b&#7843;n ch&#7845;t s&#7921; c&#7889; v&#224; ra quy&#7871;t &#273;&#7883;nh c&#224;ng nhanh c&#224;ng t&#7889;t ch&#7913; kh&#244;ng th&#7875; ng&#7891;i h&#7887;i AI t&#7899;i lui &#273;&#432;&#7907;c.</p></blockquote><p>R&#7845;t c&#7843;m &#417;n hai b&#7841;n &#273;&#227; &#273;&#243;ng g&#243;p &#253; t&#432;&#7903;ng. C&#225;c b&#7841;n &#273;&#7885;c kh&#225;c c&#243; &#253; t&#432;&#7903;ng b&#7893; sung v&#7851;n c&#7913; tham gia &#273;&#243;ng g&#243;p nh&#233;.</p><div><hr></div><h3><strong>&#128161;Quotes</strong></h3><div class="pullquote"><p>&#8220;A lot of times the question is harder than the answer. If you can properly phrase the question, then the answer is the easy part.&#8221; </p><p>&#8211; <strong><a href="https://www.inc.com/lisa-calhoun/elon-musk-on-the-1-creative-skill-every-founder-needs-now.html">Elon Musk</a></strong></p></div><h3><strong>&#128129;&#127995;&#272;&#243;ng g&#243;p n&#7897;i cho Grokking Newsletter</strong></h3><p>B&#7841;n c&#243; th&#7875; g&#7917;i n&#7897;i dung &#273;&#243;ng g&#243;p &#273;&#7871;n nh&#243;m bi&#234;n t&#7853;p newsletter th&#244;ng qua email <a href="mailto:newsletter@grokking.org">newsletter@grokking.org</a>. C&#225;c n&#7897;i dung c&#225;c b&#7841;n c&#243; th&#7875; &#273;&#243;ng g&#243;p:</p><ul><li><p>N&#7871;u b&#7841;n c&#243; m&#7897;t b&#224;i vi&#7871;t mu&#7889;n chia s&#7867;, b&#7841;n c&#243; th&#7875; g&#7917;i link b&#224;i vi&#7871;t k&#232;m m&#7897;t &#273;o&#7841;n gi&#7899;i thi&#7879;u ng&#7855;n b&#7857;ng ti&#7871;ng Vi&#7879;t.</p></li><li><p>N&#7871;u b&#7841;n c&#243; v&#224;i suy ngh&#297; mu&#7889;n chia s&#7867; &#273;&#7871;n c&#7897;ng &#273;&#7891;ng, b&#7841;n c&#243; th&#7875; g&#7917;i n&#7897;i dung tr&#7921;c ti&#7871;p &#273;&#7871;n chuy&#234;n m&#7909;c G&#243;c d&#224;nh cho b&#7841;n &#273;&#7885;c.</p></li><li><p>N&#7871;u b&#7841;n c&#243; c&#226;u h&#7887;i v&#224; mu&#7889;n c&#225;c b&#7841;n &#273;&#7885;c c&#7911;a Grokking c&#249;ng tham gia g&#243;p &#253;, b&#7841;n c&#361;ng c&#243; th&#7875; g&#7917;i &#273;&#7871;n Grokking nh&#233;. C&#226;u h&#7887;i c&#7911;a b&#7841;n c&#243; th&#7875; &#273;&#432;&#7907;c &#273;&#259;ng d&#432;&#7899;i d&#7841;ng &#7849;n danh.</p></li><li><p>N&#7871;u c&#244;ng ty b&#7841;n c&#243; t&#7893; ch&#7913;c s&#7921; ki&#7879;n techtalk v&#224; mu&#7889;n gi&#7899;i thi&#7879;u r&#7897;ng r&#227;i h&#417;n &#273;&#7871;n c&#7897;ng &#273;&#7891;ng, c&#225;c b&#7841;n g&#7917;i link s&#7921; ki&#7879;n c&#249;ng h&#236;nh &#7843;nh banner v&#224; n&#7897;i dung chia s&#7867;. Nh&#243;m s&#7869; gi&#250;p chia s&#7867; l&#234;n newsletter v&#224; fanpage n&#7871;u n&#7897;i dung ph&#249; h&#7907;p.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#255 - Attention is all you need]]></title><description><![CDATA[C&#244;ng vi&#7879;c Software Engineer s&#7869; thay &#273;&#7893;i th&#7871; n&#224;o sau 3-4 n&#259;m n&#7919;a?]]></description><link>https://newsletter.grokking.org/p/255-attention-is-all-you-need</link><guid isPermaLink="false">https://newsletter.grokking.org/p/255-attention-is-all-you-need</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 30 Apr 2023 11:52:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6df08bb9-19ce-49e1-a20f-3a79e1b81297_6000x3376.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Trong v&#224;i n&#259;m g&#7847;n &#273;&#226;y, s&#7921; xu&#7845;t hi&#7879;n c&#7911;a nh&#7919;ng ph&#7847;n m&#7873;m nh&#432; StableDiffusion, Dall-E, Copilot v&#224; &#273;&#7863;c bi&#7879;t l&#224; ChatGPT &#273;&#227; mang &#273;&#7871;n nhi&#7873;u &#273;&#7897;t bi&#7871;n cho gi&#7899;i c&#244;ng ngh&#7879; - m&#7897;t l&#297;nh v&#7921;c v&#7889;n d&#297; &#273;&#227; r&#7845;t bi&#7871;n &#273;&#7897;ng. H&#224;ng tr&#259;m, h&#224;ng ngh&#236;n ph&#7847;n m&#7873;m AI &#273;&#432;&#7907;c t&#7841;o ra ch&#7881; trong m&#7897;t th&#7901;i gian ng&#7855;n khi&#7871;n ai c&#361;ng th&#7845;y h&#225;o h&#7913;c v&#7873; vi&#7879;c t&#259;ng n&#259;ng su&#7845;t lao &#273;&#7897;ng&#8212;nh&#432;ng &#273;i k&#232;m v&#7899;i n&#243; l&#224; n&#7895;i lo ng&#7841;i r&#7857;ng nhi&#7873;u lo&#7841;i c&#244;ng vi&#7879;c s&#7869; b&#7883; AI thay th&#7871;.</p><p>Trong newsletter k&#7923; n&#224;y, ban bi&#234;n t&#7853;p Grokking mu&#7889;n &#273;&#7863;t ra m&#7897;t c&#226;u h&#7887;i: &#8220;<strong>B&#7841;n ngh&#297; c&#244;ng vi&#7879;c c&#7911;a Software Engineer s&#7869; thay &#273;&#7893;i nh&#432; th&#7871; n&#224;o sau 3-4 n&#259;m n&#7919;a?</strong>&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>H&#227;y reply email n&#224;y (ho&#7863;c g&#7917;i c&#226;u tr&#7843; l&#7901;i &#273;&#7871;n <em><strong>newsletter@grokking.org</strong></em>) &#273;&#7875; chia s&#7867; &#253; ki&#7871;n c&#7911;a m&#236;nh nh&#233;! Ban bi&#234;n t&#7853;p s&#7869; ch&#7885;n ra nh&#7919;ng c&#226;u tr&#7843; l&#7901;i hay nh&#7845;t &#273;&#7875; trao t&#7863;ng ph&#7847;n qu&#224; l&#224; m&#7897;t quy&#7875;n Dijkstra t&#7853;p 2 (b&#7843;n in).</p><p>Mong nh&#7853;n &#273;&#432;&#7907;c nhi&#7873;u g&#243;p &#253; t&#7915; c&#225;c b&#7841;n.</p><p>P/S: C&#225;c b&#7841;n nh&#7899; g&#7917;i k&#232;m theo th&#244;ng tin li&#234;n h&#7879; &#273;&#7875; Ban bi&#234;n t&#7853;p c&#243; th&#7875; ti&#7879;n g&#7917;i qu&#224; nh&#233;.</p><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://medium.engineering/fixing-duplicate-stories-in-mediums-for-you-feed-48e6d4e2b80d">Fixing duplicate stories in Medium&#8217;s For You feed</a></h4><p><em>(by quangle)</em></p><p>V&#224;i th&#225;ng tr&#432;&#7899;c, &#273;&#7897;i ng&#361; k&#7929; s&#432; t&#7841;i <strong>Medium</strong> nh&#7853;n &#273;&#432;&#7907;c nhi&#7873;u b&#225;o c&#225;o (3-4k l&#432;&#7907;t/ng&#224;y) li&#234;n quan &#273;&#7871;n v&#7845;n &#273;&#7873; tr&#249;ng l&#7863;p b&#224;i vi&#7871;t &#7903; chuy&#234;n m&#7909;c For You feed tr&#234;n c&#225;c thi&#7871;t b&#7883; mobile apps bao g&#7891;m iOS v&#224; Android.</p><p>Gi&#7843;i th&#237;ch ng&#7855;n g&#7885;n th&#236; &#273;&#7875; truy xu&#7845;t c&#225;c b&#224;i vi&#7871;t &#7903; For You feed, h&#7879; th&#7889;ng s&#7869; chuy&#7875;n ti&#7871;p c&#225;c requests c&#7911;a users t&#7915; Medium&#8217;s GraphQL API &#273;&#7871;n <strong>rex service</strong> (recommendation - service &#273;&#432;&#7907;c x&#226;y d&#7921;ng b&#7857;ng Go, &#273;&#225;p &#7913;ng vi&#7879;c t&#237;nh to&#225;n, truy v&#7845;n c&#225;c b&#224;i vi&#7871;t) v&#224; tr&#7843; k&#7871;t qu&#7843; v&#7873; cho users. Trong &#273;&#243; <strong>rex service</strong> c&#243; &#225;p d&#7909;ng m&#7897;t s&#7889; k&#7929; thu&#7853;t nh&#432; ph&#226;n trang, caching &#7903; redis theo key <strong>`$userId:HOMEPAGE`</strong> v&#7899;i TTL 30 ph&#250;t.</p><p>Qua qu&#225; tr&#236;nh r&#224; so&#225;t, c&#225;c k&#7929; s&#432; ph&#225;t hi&#7879;n hai v&#7845;n &#273;&#7873; d&#7851;n &#273;&#7871;n l&#7895;i tr&#234;n v&#224; kh&#7855;c ph&#7909;c nh&#432; sau:</p><p><strong>1</strong>- <strong>Kh&#7855;c ph&#7909;c tr&#236;nh tr&#7841;ng context b&#7883; h&#7911;y tr&#432;&#7899;c khi d&#7919; li&#7879;u &#273;&#432;&#7907;c l&#432;u v&#224;o cache</strong></p><p>Khi user request feed, rex service t&#7841;o m&#7897;t b&#7843;n feed cho ng&#432;&#7901;i d&#249;ng (g&#7885;i l&#224; b&#7843;n A) v&#224; l&#432;u v&#224;o cache th&#244;ng qua c&#417; ch&#7871; background goroutine.. Nh&#432;ng vi&#7879;c s&#7917; d&#7909;ng chung request context &#273;&#227; ph&#225;t sinh v&#7845;n &#273;&#7873;, ngay khi request &#273;&#432;&#7907;c ho&#224;n th&#224;nh th&#236; request context c&#361;ng s&#7869; b&#7883; h&#7911;y.&nbsp;</p><p>N&#7871;u ti&#7871;n tr&#236;nh h&#7911;y context x&#7843;y ra tr&#432;&#7899;c ti&#7871;n tr&#236;nh l&#432;u v&#224;o cache s&#7869; khi&#7871;n cho vi&#7879;c l&#432;u b&#7843;n feed v&#224;o cache kh&#244;ng &#273;&#432;&#7907;c ho&#224;n th&#224;nh, b&#7843;n A s&#7869; kh&#244;ng &#273;&#432;&#7907;c l&#432;u v&#224;o cache. Sau &#273;&#243;, n&#7871;u ng&#432;&#7901;i d&#249;ng ti&#7871;p t&#7909;c request feed, do b&#7843;n feed tr&#432;&#7899;c &#273;&#243; kh&#244;ng &#273;&#432;&#7907;c l&#432;u v&#224;o cache, n&#234;n rex service ti&#7871;n h&#224;nh t&#7841;o m&#7897;t b&#7843;n feed m&#7899;i (g&#7885;i l&#224; b&#7843;n B) v&#224; g&#7917;i v&#7873; cho ng&#432;&#7901;i d&#249;ng. Do b&#7843;n A v&#224; b&#7843;n B c&#243; kh&#7843; n&#259;ng c&#243; b&#224;i tr&#249;ng nhau n&#234;n ng&#432;&#7901;i d&#249;ng s&#7869; th&#7845;y tr&#249;ng l&#7863;p b&#224;i vi&#7871;t tr&#234;n feed c&#7911;a h&#7885;.</p><p><strong>2 - &#272;&#7843;m b&#7843;o d&#7919; li&#7879;u cache &#273;&#432;&#7907;c t&#225;i s&#7917; d&#7909;ng</strong></p><p>N&#7871;u tr&#432;&#7899;c &#273;&#226;y, khi user request m&#7897;t page t&#7915; For You feed, h&#7879; th&#7889;ng s&#7869; nh&#7853;n hai tham s&#7889;: limit (b&#7855;t bu&#7897;c) v&#224; cursor (kh&#244;ng b&#7855;t bu&#7897;c) v&#224; lu&#244;n tr&#7843; v&#7873; k&#7871;t qu&#7843; c&#7911;a current feed instance th&#236; gi&#7901; &#273;&#226;y, nh&#243;m c&#7843;i ti&#7871;n b&#7857;ng c&#225;ch s&#7917; d&#7909;ng th&#234;m m&#7897;t t&#7847;ng caching qua feedId v&#7899;i key&nbsp; <strong>`$userId:HOMEPAGE:$feedId`</strong> v&#224; &#273;i&#7873;u ch&#7881;nh TTL cho c&#225;c cached key n&#224;y.&nbsp;</p><p>&#272;i&#7873;u ch&#7881;nh n&#224;y gi&#250;p &#273;&#7843;m b&#7843;o c&#7863;p gi&#225; tr&#7883; feed InstanceID v&#224; feed value ph&#7843;i &#273;i c&#249;ng nhau, n&#7871;u kh&#244;ng th&#7887;a ph&#7843;i generate feed instance m&#7899;i &#273;&#7875; caching c&#249;ng feed value, h&#432;&#7899;ng ti&#7871;p c&#7853;n gi&#250;p gi&#7843;i quy&#7871;t b&#224;i to&#225;n duplicate feed.</p><p>&#272;&#7875; t&#236;m hi&#7875;u chi ti&#7871;t h&#417;n v&#7873; t&#7915;ng c&#225;ch gi&#7843;i quy&#7871;t b&#224;i to&#225;n c&#361;ng nh&#432; nh&#7919;ng trade-off m&#224; team Medium g&#7863;p ph&#7843;i, m&#7901;i b&#7841;n &#273;&#7885;c c&#249;ng tham kh&#7843;o b&#224;i vi&#7871;t.</p><h4><a href="https://fs.blog/deliberate-practice-guide/">The Ultimate Deliberate Practice Guide</a></h4><p><em>(by chatGPT + n^4) </em></p><p>Th&#7921;c h&#224;nh c&#243; ch&#7911; &#273;&#237;ch (deliberate practice) l&#224; c&#225;ch &#273;&#7875; c&#7843;i thi&#7879;n m&#236;nh &#7903; m&#7885;i m&#7863;t trong cu&#7897;c s&#7889;ng b&#7857;ng c&#225;ch li&#234;n t&#7909;c r&#232;n luy&#7879;n v&#224; nh&#7853;n ph&#7843;n h&#7891;i. C&#225;c chuy&#234;n gia trong m&#7885;i l&#297;nh v&#7921;c &#273;&#7873;u bi&#7871;t r&#245; &#273;i&#7873;u n&#224;y v&#224; s&#7917; d&#7909;ng n&#243; &#273;&#7875; x&#226;y d&#7921;ng ki&#7871;n th&#7913;c chuy&#234;n m&#244;n c&#7911;a m&#236;nh.</p><p>B&#224;i b&#225;o n&#224;y gi&#7843;i th&#237;ch r&#7857;ng th&#7921;c h&#224;nh c&#243; ch&#7911; &#273;&#237;ch &#273;&#242;i h&#7887;i m&#7897;t m&#7909;c ti&#234;u c&#7909; th&#7875; v&#224; ph&#7843;n h&#7891;i li&#234;n t&#7909;c &#273;&#7875; b&#7841;n bi&#7871;t m&#236;nh &#273;ang l&#224;m g&#236; v&#224; &#273;ang ti&#7871;n b&#7897; nh&#432; th&#7871; n&#224;o. Kh&#244;ng ch&#7881; l&#224;m vi&#7879;c m&#7897;t c&#225;ch si&#234;ng n&#259;ng m&#224; c&#242;n c&#7847;n t&#7853;p trung v&#224;o nh&#7919;ng &#273;i&#7875;m y&#7871;u c&#7847;n c&#7843;i thi&#7879;n. &#272;&#243; l&#224; c&#225;ch l&#224;m th&#244;ng minh v&#224; hi&#7879;u qu&#7843; h&#417;n. M&#7901;i c&#225;c b&#7841;n c&#249;ng tham kh&#7843;o b&#224;i b&#225;o &#273;&#7875; hi&#7875;u th&#234;m v&#7873; Th&#7921;c h&#224;nh c&#243; ch&#7911; &#273;&#237;ch c&#361;ng nh&#432; &#7913;ng d&#7909;ng n&#243; &#273;&#7875; h&#7885;c h&#7887;i v&#224; r&#232;n luy&#7879;n k&#7929; n&#259;ng hi&#7879;u qu&#7843; h&#417;n.</p><h4><a href="https://arxiv.org/abs/1706.03762">Attention is all you need</a></h4><p><em>(by chatGPT + n^4) </em></p><p>Trong th&#7871; gi&#7899;i hi&#7879;n &#273;&#7841;i c&#7911;a ch&#250;ng ta, c&#244;ng ngh&#7879; tr&#237; tu&#7879; nh&#226;n t&#7841;o n&#243;i chung v&#224; l&#297;nh v&#7921;c ng&#244;n ng&#7919; t&#7921; nhi&#234;n (NLP) n&#243;i ri&#234;ng &#273;ang ph&#225;t tri&#7875;n v&#7899;i t&#7889;c &#273;&#7897; nhanh ch&#243;ng v&#224; nhi&#7873;u c&#225;ch ti&#7871;p c&#7853;n m&#7899;i li&#234;n t&#7909;c &#273;&#432;&#7907;c ph&#225;t minh ra. Trong b&#224;i vi&#7871;t n&#224;y, ch&#250;ng ta s&#7869; t&#236;m hi&#7875;u th&#234;m m&#7897;t ki&#7871;n tr&#250;c m&#7899;i Transformer &#273;ang &#273;&#432;&#7907;c &#7913;ng d&#7909;ng ng&#224;y c&#224;ng r&#7897;ng r&#227;i trong 4-5 n&#259;m tr&#7903; l&#7841;i &#273;&#226;y. Ki&#7871;n tr&#250;c n&#224;y &#273;&#432;&#7907;c gi&#7899;i thi&#7879;u trong b&#224;i b&#225;o "Attention Is All You Need" c&#7911;a nh&#243;m t&#225;c gi&#7843; t&#7841;i Google Brain &#273;&#432;&#7907;c xu&#7845;t b&#7843;n tr&#234;n trang arXiv v&#224;o th&#225;ng 6 n&#259;m 2017. </p><p>Trong b&#224;i b&#225;o, c&#225;c t&#225;c gi&#7843; gi&#7899;i thi&#7879;u m&#7897;t m&#244; h&#236;nh NLP t&#225;i c&#7845;u tr&#250;c m&#7899;i g&#7885;i l&#224; Transformer. Ki&#7871;n tr&#250;c Transformer &#273;&#227; &#273;&#7841;t &#273;&#432;&#7907;c k&#7871;t qu&#7843; t&#7889;t h&#417;n so v&#7899;i c&#225;c ph&#432;&#417;ng ph&#225;p tr&#432;&#7899;c &#273;&#226;y trong nhi&#7873;u t&#225;c v&#7909; NLP quan tr&#7885;ng nh&#432; d&#7883;ch m&#225;y v&#224; sinh v&#259;n b&#7843;n.</p><p>Ki&#7871;n tr&#250;c Transformer &#273;&#432;&#7907;c thi&#7871;t k&#7871; d&#7921;a tr&#234;n c&#417; ch&#7871; attention, m&#7897;t k&#7929; thu&#7853;t trong NLP cho ph&#233;p m&#244; h&#236;nh t&#7853;p trung v&#224;o c&#225;c ph&#7847;n quan tr&#7885;ng c&#7911;a c&#226;u &#273;&#7875; ph&#226;n t&#237;ch. &#272;i&#7875;m &#273;&#225;ng ch&#250; &#253; c&#7911;a Transformer l&#224; n&#243; kh&#244;ng s&#7917; d&#7909;ng c&#225;c l&#7899;p RNN (m&#7841;ng n&#417;-ron t&#225;i c&#7845;u tr&#250;c) nh&#432; c&#225;c m&#244; h&#236;nh NLP tr&#432;&#7899;c &#273;&#226;y, m&#224; thay v&#224;o &#273;&#243; s&#7917; d&#7909;ng c&#225;c l&#7899;p attention &#273;&#7875; t&#7853;p trung v&#224;o c&#225;c ph&#7847;n quan tr&#7885;ng c&#7911;a d&#7919; li&#7879;u &#273;&#7847;u v&#224;o. Ki&#7871;n tr&#250;c Transformer bao g&#7891;m hai ph&#7847;n ch&#237;nh: encoder v&#224; decoder. M&#7895;i ph&#7847;n s&#7917; d&#7909;ng nhi&#7873;u l&#7899;p attention v&#224; c&#225;c l&#7899;p k&#7871;t n&#7889;i &#273;&#7847;y &#273;&#7911; &#273;&#7875; h&#7885;c c&#225;ch m&#227; h&#243;a v&#224; gi&#7843;i m&#227; th&#244;ng tin trong c&#225;c t&#225;c v&#7909; NLP.</p><p>C&#225;c m&#244; h&#236;nh d&#7921;a tr&#234;n ki&#7871;n tr&#250;c Transformer &#273;&#227; &#273;&#7841;t &#273;&#432;&#7907;c nhi&#7873;u k&#7871;t qu&#7843; &#7845;n t&#432;&#7907;ng trong nhi&#7873;u l&#297;nh v&#7921;c. M&#7897;t s&#7889; m&#244; h&#236;nh n&#7893;i b&#7853;t bao g&#7891;m: BERT c&#7911;a Google, GPT-4 c&#7911;a OpenAI, RoBERTa c&#7911;a Facebook.</p><p>M&#7901;i c&#225;c b&#7841;n c&#249;ng &#273;&#7885;c l&#7841;i b&#224;i b&#225;o &#8220;Attention Is All You Need&#8221; &#273;&#7875; hi&#7875;u th&#234;m v&#7873; ki&#7871;n tr&#250;c n&#224;y. </p><p><em>P/S</em>: <em>Ch&#7919; GPT trong ph&#7847;n m&#7873;m ChatGPT ph&#7893; bi&#7871;n hi&#7879;n n&#224;y l&#224; vi&#7871;t t&#7855;t c&#7911;a Generative Pre-training Transformer.</em></p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/find-the-duplicate-number/">Find the Duplicate Number</a></h4><p>Cho m&#7897;t m&#7843;ng s&#7889; nguy&#234;n "nums" c&#243; &#273;&#7897; d&#224;i n + 1. M&#7843;ng "nums" ch&#7913;a s&#7889; nguy&#234;n d&#432;&#417;ng trong kho&#7843;ng [1, n]. M&#7843;ng "nums" ch&#7881; t&#7891;n t&#7841;i duy nh&#7845;t 1 c&#7863;p s&#7889; tr&#249;ng nhau. H&#227;y t&#236;m s&#7889; b&#7883; tr&#249;ng m&#224; kh&#244;ng thay &#273;&#7893;i gi&#225; tr&#7883; c&#7911;a m&#7843;ng v&#224; gi&#7843;i thu&#7853;t c&#243; &#273;&#7897; ph&#7913;c t&#7841;p kh&#244;ng gian l&#224; O(1).</p><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/lexicographical-numbers/">Lexicographical Numbers</a></h4><p>C&#225;ch ti&#7871;p c&#7853;n &#273;&#7847;u ti&#234;n ta c&#243; th&#7875; d&#7877; d&#224;ng nh&#7853;n th&#7845;y l&#224; th&#7921;c hi&#7879;n chuy&#7875;n &#273;&#7893;i s&#7889; sang chu&#7895;i, s&#7855;p x&#7871;p danh s&#225;ch chu&#7895;i theo th&#7913; t&#7921; t&#7915; &#273;i&#7875;n, cu&#7889;i c&#249;ng, ta chuy&#7875;n &#273;&#7893;i chu&#7895;i v&#7873; s&#7889; nguy&#234;n. &#272;&#7897; ph&#7913;c t&#7841;p th&#7901;i gian c&#7911;a gi&#7843;i thu&#7853;t s&#7869; l&#224; O(n*logn), trong &#273;&#243; n l&#224; &#273;&#7897; d&#224;i c&#7911;a m&#7843;ng &#273;&#7847;u v&#224;o, &#273;&#7897; ph&#7913;c t&#7841;p kh&#244;ng gian c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(n).</p><p>D&#7921;a tr&#234;n h&#432;&#7899;ng ti&#7871;p c&#7853;n tr&#234;n, ta c&#361;ng c&#243; th&#7875; s&#7917; d&#7909;ng c&#7845;u tr&#250;c d&#7919; li&#7879;u Trie &#273;&#7875; t&#236;m ki&#7871;m m&#7843;ng &#273;&#227; &#273;&#432;&#7907;c s&#7855;p x&#7871;p theo th&#7913; t&#7921; t&#7915; &#273;i&#7875;n b&#7857;ng ph&#432;&#417;ng ph&#225;p duy&#7879;t c&#226;y theo chi&#7873;u s&#226;u (DFS).</p><p>N&#7871;u b&#7841;n &#273;&#7885;c v&#7869; c&#7845;u tr&#250;c d&#7919; li&#7879;u Trie v&#224; th&#7921;c hi&#7879;n t&#236;m ki&#7871;m theo chi&#7873;u s&#226;u, b&#7841;n &#273;&#7885;c c&#243; th&#7875; nh&#7853;n th&#7845;y: &#7903; m&#7895;i n&#250;t "current", ta c&#243; t&#236;m n&#250;t ti&#7871;p theo "next" nh&#432; sau:</p><p>Gi&#7843; s&#7917; v&#7899;i n = 999</p><ol><li><p>v&#7899;i current = 11, next = current * 10 = 110</p></li><li><p>v&#7899;i current = 110, next = current + 1 = 111</p></li></ol><p>Ta ti&#7871;p t&#7909;c b&#432;&#7899;c 2 cho t&#7899;i khi current = 119, l&#250;c n&#224;y next = current / 10 + 1 = 12.</p><p>L&#432;u &#253;, n&#7871;u s&#7889; current c&#243; k&#7871;t th&#250;c v&#7899;i nhi&#7873;u h&#417;n m&#7897;t s&#7889; 9, v&#237; d&#7909; 199, s&#7889; ti&#7871;p theo l&#224; 2.</p><p>B&#7857;ng c&#225;ch n&#224;y, ta kh&#244;ng th&#7921;c s&#7921; c&#7847;n ph&#7843;i s&#7917; d&#7909;ng c&#7845;u tr&#250;c d&#7919; li&#7879;u Trie m&#224; c&#243; th&#7875; th&#7921;c hi&#7879;n nh&#432; sau:</p><pre><code><code>class Solution {
   public List&lt;Integer&gt; lexicalOrder(int n) {
       List&lt;Integer&gt; ans = new ArrayList&lt;&gt;(n);
       int curr = 1;

       for (int i = 1; i &lt;= n; i++) {
           ans.add(curr);
           if (curr * 10 &lt;= n) {
               curr *= 10;
           } else if (curr % 10 != 9 &amp;&amp; curr + 1 &lt;= n) {
               curr++;
           } else {
               while ((curr / 10) % 10 == 9) {
                   curr /= 10;
               }
               curr = curr / 10 + 1;
           }
       }
       return ans;
   }
}</code></code></pre><p>Gi&#7843;i thu&#7853;t tr&#234;n c&#243; &#273;&#7897; ph&#7913;c t&#7841;p th&#7901;i gian l&#224; O(n), &#273;&#7897; ph&#7913;c t&#7841;p kh&#244;ng gian l&#224; O(1).</p><div><hr></div><h3><strong>&#128197;G&#243;c s&#7921; ki&#7879;n</strong></h3><p>Ng&#224;y 15/4 v&#7915;a qua, t&#7841;i v&#259;n ph&#242;ng KMS &#273;&#227; di&#7877;n ra s&#7921; ki&#7879;n Grokking Techtalk #47 v&#7899;i s&#7921; chia s&#7867; c&#7911;a hai di&#7877;n gi&#7843; l&#224; <strong>Trung Nguy&#7877;n (</strong>Principal Software Engineer @ KMS Healthcare<strong>)</strong> v&#224; <strong>Th&#225;i T&#259;ng (</strong>Lead Machine Learning Engineer @ MoMo).</p><p>C&#225;c b&#7841;n c&#243; th&#7875; xem l&#7841;i zoom record n&#7897;i dung thuy&#7871;t tr&#236;nh &#7903; <a href="https://youtu.be/mko0a6hZ3cI">&#273;&#226;y</a>.</p><div class="image-gallery-embed" data-attrs="{&quot;gallery&quot;:{&quot;images&quot;:[{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae6f98a2-fe60-4219-adc9-c230afa18526_6000x3376.jpeg&quot;}],&quot;caption&quot;:&quot;Grokking Techtalk&quot;,&quot;alt&quot;:&quot;Grokking Techtalk #47&quot;,&quot;staticGalleryImage&quot;:{&quot;type&quot;:&quot;image/jpeg&quot;,&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae6f98a2-fe60-4219-adc9-c230afa18526_6000x3376.jpeg&quot;}},&quot;isEditorNode&quot;:true}"></div><div><hr></div><h3><strong>&#128173;G&#243;c b&#7841;n &#273;&#7885;c</strong></h3><p>G&#243;c b&#7841;n &#273;&#7885;c k&#7923; n&#224;y c&#243; m&#7897;t chia s&#7867; t&#7915; m&#7897;t b&#7841;n &#273;&#7885;c g&#7917;i &#273;&#7871;n nh&#243;m bi&#234;n t&#7853;p. C&#225;c b&#7841;n n&#224;o c&#243; kinh nghi&#7879;m ho&#7863;c th&#7911; thu&#7853;t g&#236; hay c&#361;ng c&#7913; chia s&#7867; &#273;&#7871;n v&#7899;i nh&#243;m bi&#234;n t&#7853;p b&#7841;n nh&#233;.</p><blockquote><p>Ch&#224;o c&#225;c anh ch&#7883;, em &#273;&#227; &#273;&#7885;c newsletter c&#7911;a Grokking &#273;&#227; l&#226;u v&#224; c&#361;ng &#273;&#227; ti&#7871;p c&#7853;n nhi&#7873;u b&#224;i vi&#7871;t hay. Tuy nhi&#234;n cho t&#7899;i gi&#7901; em th&#7845;y Grokking ch&#7881; chia s&#7867; n&#7897;i dung v&#7873; k&#7929; thu&#7853;t ch&#7911; y&#7871;u m&#224; &#237;t th&#7845;y chia s&#7867; c&#225;c b&#224;i vi&#7871;t ho&#7863;c n&#7897;i dung li&#234;n quan &#273;&#7871;n Softskill. Em ngh&#297; Grokking c&#361;ng n&#234;n t&#7893;ng h&#7907;p th&#234;m c&#225;c n&#7897;i dung n&#224;y v&#236; Softskill emth&#7845;y c&#361;ng quan tr&#7885;ng kh&#244;ng k&#233;m k&#7929; n&#259;ng chuy&#234;n m&#244;n.</p><p>G&#7847;n &#273;&#226;y em c&#243; &#273;&#432;&#7907;c bi&#7871;t &#273;&#243; l&#224; k&#234;nh youtube c&#7911;a th&#7847;y D&#361;ng, hi&#7879;u ph&#243; tr&#432;&#7901;ng &#273;&#7841;i h&#7885;c B&#225;ch Khoa kh&#225; hay n&#243;i v&#7873; t&#432; duy ph&#7843;n bi&#7879;n v&#224; c&#225;c v&#7845;n &#273;&#7873; x&#227; h&#7897;i. Grokking c&#243; th&#7875; tham kh&#7843;o: <a href="https://www.youtube.com/@VuTheDung">k&#234;nh youtube</a>.</p></blockquote><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>If we want to improve a skill, we need to know <em>what</em> exactly has to change and what might get us there. Otherwise, we plateau.</p><p><strong>FS Blog</strong></p></div><h3><strong>&#272;&#243;ng g&#243;p n&#7897;i cho Grokking Newsletter</strong></h3><p>B&#7841;n c&#243; th&#7875; g&#7917;i n&#7897;i dung &#273;&#243;ng g&#243;p &#273;&#7871;n nh&#243;m bi&#234;n t&#7853;p newsletter th&#244;ng qua email newsletter@grokking.org. C&#225;c n&#7897;i dung c&#225;c b&#7841;n c&#243; th&#7875; &#273;&#243;ng g&#243;p:</p><ul><li><p>N&#7871;u b&#7841;n c&#243; m&#7897;t b&#224;i vi&#7871;t mu&#7889;n chia s&#7867;, b&#7841;n c&#243; th&#7875; g&#7917;i link b&#224;i vi&#7871;t k&#232;m m&#7897;t &#273;o&#7841;n gi&#7899;i thi&#7879;u ng&#7855;n b&#7857;ng ti&#7871;ng Vi&#7879;t.</p></li><li><p>N&#7871;u b&#7841;n c&#243; v&#224;i suy ngh&#297; mu&#7889;n chia s&#7867; &#273;&#7871;n c&#7897;ng &#273;&#7891;ng, b&#7841;n c&#243; th&#7875; g&#7917;i n&#7897;i dung tr&#7921;c ti&#7871;p &#273;&#7871;n chuy&#234;n m&#7909;c G&#243;c d&#224;nh cho b&#7841;n &#273;&#7885;c. </p></li><li><p>N&#7871;u b&#7841;n c&#243; c&#226;u h&#7887;i v&#224; mu&#7889;n c&#225;c b&#7841;n &#273;&#7885;c c&#7911;a Grokking c&#249;ng tham gia g&#243;p &#253;, b&#7841;n c&#361;ng c&#243; th&#7875; g&#7917;i &#273;&#7871;n Grokking nh&#233;. C&#226;u h&#7887;i c&#7911;a b&#7841;n c&#243; th&#7875; &#273;&#432;&#7907;c &#273;&#259;ng d&#432;&#7899;i d&#7841;ng &#7849;n danh.</p></li><li><p>N&#7871;u c&#244;ng ty b&#7841;n c&#243; t&#7893; ch&#7913;c s&#7921; ki&#7879;n techtalk v&#224; mu&#7889;n gi&#7899;i thi&#7879;u r&#7897;ng r&#227;i h&#417;n &#273;&#7871;n c&#7897;ng &#273;&#7891;ng, c&#225;c b&#7841;n g&#7917;i link s&#7921; ki&#7879;n c&#249;ng h&#236;nh &#7843;nh banner v&#224; n&#7897;i dung chia s&#7867;. Nh&#243;m s&#7869; gi&#250;p chia s&#7867; l&#234;n newsletter v&#224; fanpage n&#7871;u n&#7897;i dung ph&#249; h&#7907;p.</p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.grokking.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Grokking Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[#254 - Làm thế nào để trở thành Senior Software Engineer?]]></title><description><![CDATA[Nh&#7919;ng th&#244;ng tin c&#244;ng ngh&#7879; m&#7899;i nh&#7845;t trong tu&#7847;n qua]]></description><link>https://newsletter.grokking.org/p/254-lam-the-nao-e-tro-thanh-senior</link><guid isPermaLink="false">https://newsletter.grokking.org/p/254-lam-the-nao-e-tro-thanh-senior</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 23 Apr 2023 01:01:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q0T8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128251;News</strong></h3><p><em>(by lpv)</em></p><h4><a href="https://www.forbes.com/sites/brianbushard/2023/04/21/2023-layoff-tracker-lyft-will-cut-1200-jobs">T&#236;nh h&#236;nh layoff m&#7899;i nh&#7845;t t&#7841;i Meta v&#224; m&#7897;t s&#7889; c&#244;ng ty kh&#225;c</a></h4><p>Meta &#273;&#227; th&#244;ng b&#225;o cho nh&#226;n vi&#234;n trong m&#7897;t b&#7843;ng tin n&#7897;i b&#7897; r&#7857;ng vi&#7879;c c&#7855;t gi&#7843;m s&#7869; b&#7855;t &#273;&#7847;u v&#224;o s&#225;ng th&#7913; T&#432;, c&#243; th&#7875; &#7843;nh h&#432;&#7903;ng &#273;&#7871;n kho&#7843;ng 4.000 nh&#226;n vi&#234;n, qua &#273;&#243; t&#7893;ng s&#7889; nh&#226;n s&#7921; b&#7883; c&#7855;t gi&#7843;m c&#7911;a Meta k&#7875; t&#7915; th&#225;ng 11 c&#243; th&#7875; t&#259;ng l&#234;n t&#7899;i 21.000.</p><h4><a href="https://blog.pragmaticengineer.com/the-state-of-startup-funding/">The state of startup funding</a></h4><p>T&#225;c gi&#7843; &#273;&#227; thu th&#7853;p d&#7919; li&#7879;u t&#7915; nhi&#7873;u ngu&#7891;n kh&#225;c nhau &#273;&#7875; bi&#7871;t &#273;&#432;&#7907;c xu h&#432;&#7899;ng t&#224;i tr&#7907; cho c&#225;c c&#244;ng ty kh&#7903;i nghi&#7879;p &#273;ang di&#7877;n ra nh&#432; th&#7871; n&#224;o. Cho &#273;&#7871;n nay, n&#243; &#273;i xu&#7889;ng. &#272;i&#7873;u n&#224;y c&#243; &#253; ngh&#297;a g&#236; &#273;&#7889;i v&#7899;i c&#244;ng ngh&#7879;?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q0T8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q0T8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 424w, https://substackcdn.com/image/fetch/$s_!Q0T8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 848w, https://substackcdn.com/image/fetch/$s_!Q0T8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0T8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q0T8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png" width="1456" height="781" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:781,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q0T8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 424w, https://substackcdn.com/image/fetch/$s_!Q0T8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 848w, https://substackcdn.com/image/fetch/$s_!Q0T8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 1272w, https://substackcdn.com/image/fetch/$s_!Q0T8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7dfaf93-2130-4250-96ca-7f6af06c193b_1532x822.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Angel and seed rounds have hit a 2.5-year low in the US. Source: <a href="https://pitchbook.com/news/reports/q1-2023-pitchbook-nvca-venture-monitor?ref=blog.pragmaticengineer.com">PitchBook-NVCA Venture Monitor Q1 2023</a></em></p><h4><a href="https://github.blog/2023-04-12-github-accelerator-our-first-cohort-and-whats-next">GitHub Accelerator: our first cohort and what&#8217;s next</a></h4><p>G&#7863;p g&#7905; c&#225;c d&#7921; &#225;n t&#7841;o n&#234;n nh&#243;m GitHub Accelerator &#273;&#7847;u ti&#234;n v&#224; t&#236;m hi&#7875;u v&#7873; c&#225;ch GitHub &#273;ang gi&#250;p bi&#7871;n t&#7847;m nh&#236;n c&#7911;a h&#7885; th&#224;nh hi&#7879;n th&#7921;c.</p><div><hr></div><h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://samwho.dev/load-balancing/">Load Balancing</a></h4><p><em>(by nhij)</em></p><p>Thu&#7853;t ng&#7919; load balancing kh&#244;ng c&#242;n xa l&#7841; v&#7899;i c&#225;c k&#7929; s&#432; ph&#7847;n m&#7873;m, khi b&#7841;n tri&#7875;n khai &#7913;ng d&#7909;ng tr&#234;n nhi&#7873;u h&#417;n m&#7897;t server v&#224; c&#7847;n ph&#226;n ph&#7889;i c&#225;c request t&#7899;i c&#225;c server &#273;&#243;. Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; gi&#7899;i thi&#7879;u v&#7873; c&#225;c thu&#7853;t to&#225;n &#273;&#7875; ph&#226;n ph&#7889;i request t&#7915; m&#7913;c c&#417; b&#7843;n &#273;&#7871;n n&#226;ng cao m&#7897;t c&#225;ch d&#7877; hi&#7875;u c&#249;ng c&#225;c h&#236;nh bi&#7875;u di&#7877;n tr&#7921;c quan, m&#7901;i b&#7841;n &#273;&#7885;c tham kh&#7843;o th&#234;m t&#7841;i b&#224;i vi&#7871;t g&#7889;c t&#7841;i <a href="https://samwho.dev/load-balancing/">&#273;&#226;y</a>.</p><h4><a href="https://slack.engineering/real-time-messaging/">Real-time Messaging at Slack</a></h4><p><em>(by nhij)</em></p><p>M&#7895;i ng&#224;y, Slack ph&#7843;i x&#7917; l&#253; h&#224;ng tri&#7879;u tin nh&#7855;n g&#7917;i qua&nbsp; h&#224;ng tri&#7879;u <em>channel</em> &#7903; th&#7901;i gian th&#7921;c (<em>channel </em>trong Slack gi&#7889;ng nh&#432; group chat &#7903; c&#225;c &#7913;ng d&#7909;ng kh&#225;c). &#272;&#7875; x&#7917; l&#253; l&#432;u l&#432;&#7907;ng l&#7899;n nh&#432; v&#7853;y m&#7897;t c&#225;ch hi&#7879;u qu&#7843;, h&#7885; &#273;&#227; x&#226;y d&#7921;ng nhi&#7873;u service kh&#225;c nhau trong h&#7879; th&#7889;ng messaging. Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; gi&#7899;i thi&#7879;u m&#7897;t s&#7889; service ch&#237;nh:</p><ul><li><p><strong>Channel Servers (CS)</strong> l&#432;u tr&#7919; tin nh&#7855;n c&#7911;a c&#225;c channel. M&#7895;i channel c&#243; m&#7897;t ID &#273;&#432;&#7907;c hash v&#224; map t&#7899;i m&#7897;t CS duy nh&#7845;t. Slack s&#7917; d&#7909;ng consistent hashing &#273;&#7875; g&#225;n channel v&#224;o c&#225;c CS, nh&#7901; &#273;&#243; m&#224; vi&#7879;c th&#234;m/b&#7899;t server trong h&#7879; th&#7889;ng c&#243; th&#7875; th&#7921;c hi&#7879;n d&#7877; d&#224;ng v&#224; t&#7889;i &#432;u vi&#7879;c ph&#7843;i resharding.</p></li><li><p><strong>Gateway Servers (GS)</strong> &#273;&#7863;t gi&#7919;a Slack client (web/desktop/mobile client) v&#224; Channel Servers. C&#225;c server n&#224;y l&#224; stateful server, l&#432;u gi&#7919; th&#244;ng tin ng&#432;&#7901;i d&#249;ng &#273;ang theo d&#245;i c&#225;c channel n&#224;o. Ng&#432;&#7901;i d&#249;ng s&#7869; k&#7871;t n&#7889;i v&#7899;i GS &#273;&#7875; &#273;&#259;ng k&#253; nh&#7853;n tin nh&#7855;n t&#7915; c&#225;c channel, v&#236; l&#253; do n&#224;y m&#224; c&#225;c servers &#273;&#432;&#7907;c deploy tr&#234;n nhi&#7873;u v&#249;ng kh&#225;c nhau, t&#7915; &#273;&#243; ng&#432;&#7901;i d&#249;ng c&#243; th&#7875; k&#7871;t n&#7889;i v&#7899;i gateway g&#7847;n nh&#7845;t v&#7899;i h&#7885;.</p></li><li><p><strong>Presence Servers (PS)</strong> l&#432;u tr&#7919; tr&#7841;ng th&#225;i online c&#7911;a ng&#432;&#7901;i d&#249;ng. Slack client c&#243; th&#7875; g&#7917;i query t&#7899;i PS th&#244;ng qua GS. B&#7857;ng c&#225;ch n&#224;y, client c&#243; th&#7875; l&#7845;y &#273;&#432;&#7907;c th&#244;ng tin tr&#7841;ng th&#225;i c&#7911;a ng&#432;&#7901;i d&#249;ng v&#224; c&#7853;p nh&#7853;t tr&#234;n giao di&#7879;n.</p></li></ul><p>Trong b&#224;i vi&#7871;t, t&#225;c gi&#7843; gi&#7899;i thi&#7879;u c&#225;ch c&#225;c service k&#7875; tr&#234;n ho&#7841;t &#273;&#7897;ng c&#249;ng nhau trong m&#7897;t s&#7889; tr&#432;&#7901;ng h&#7907;p nh&#432; khi m&#7897;t slack client k&#7871;t n&#7889;i v&#224;o server, hay khi m&#7897;t ng&#432;&#7901;i d&#249;ng g&#7917;i m&#7897;t tin nh&#7855;n trong m&#7897;t channel. &#272;&#7875; hi&#7875;u r&#245; v&#224; chi ti&#7871;t h&#417;n, m&#7901;i b&#7841;n &#273;&#7885;c tham kh&#7843;o b&#224;i vi&#7871;t g&#7889;c t&#7841;i <a href="https://slack.engineering/real-time-messaging/">&#273;&#226;y</a>.</p><h4><a href="https://github.com/readme/guides/engineering-career-success">Junior to Senior: An action plan for engineering career success</a></h4><p><em>(by nhij)</em></p><p>&#272;&#7875; tr&#7903; th&#224;nh Senior Software Engineer s&#7869; c&#243; r&#7845;t nhi&#7873;u k&#7929; n&#259;ng m&#224; b&#7841;n c&#7847;n trau d&#7891;i, bao g&#7891;m k&#7929; n&#259;ng c&#7913;ng v&#224; k&#7929; n&#259;ng m&#7873;m. Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; chia s&#7867; m&#7897;t s&#7889; l&#7901;i khuy&#234;n cho c&#225;c b&#7841;n Software Engineer tr&#7867; v&#7873; c&#225;ch h&#7885;c t&#7853;p v&#224; trau d&#7891;i n&#259;ng l&#7921;c tr&#234;n h&#224;nh tr&#236;nh ph&#225;t tri&#7875;n chuy&#234;n m&#244;n, g&#7891;m m&#7897;t s&#7889; &#253; ch&#237;nh nh&#432;:</p><ul><li><p>C&#225;c n&#259;ng l&#7921;c k&#7929; thu&#7853;t quan tr&#7885;ng m&#224; c&#7845;p tr&#234;n th&#432;&#7901;ng ghi nh&#7853;n khi x&#233;t duy&#7879;t th&#259;ng ch&#7913;c.</p></li><li><p>C&#225;c k&#7929; n&#259;ng giao ti&#7871;p c&#7847;n c&#243; c&#7911;a m&#7897;t senior developer.</p></li><li><p>T&#432; duy ph&#225;t tri&#7875;n ph&#7847;n m&#7873;m nh&#7857;m gi&#7843;i quy&#7871;t &#273;&#432;&#7907;c c&#225;c y&#234;u c&#7847;u c&#7911;a business &#273;&#7863;t ra.</p></li></ul><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/lexicographical-numbers/">Lexicographical Numbers</a></h4><p>Cho m&#7897;t s&#7889; nguy&#234;n <code>n</code>, tr&#7843; v&#7873; t&#7845;t c&#7843; c&#225;c s&#7889; trong ph&#7841;m vi <code>[1, n]</code> &#273;&#432;&#7907;c s&#7855;p x&#7871;p theo th&#7913; t&#7921; t&#7915; &#273;i&#7875;n.</p><p>B&#7841;n h&#227;y c&#7889; g&#7855;ng gi&#7843;i quy&#7871;t b&#224;i to&#225;n v&#7899;i &#273;&#7897; ph&#7913;c t&#7841;p O(n) v&#7873; th&#7901;i gian v&#224; s&#7917; d&#7909;ng O(1) b&#7897; nh&#7899; d&#249;ng th&#234;m.</p><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/course-schedule/description/">Course Schedule</a></h4><p>&#272;&#7873; b&#224;i cho m&#7897;t danh s&#225;ch c&#225;c kh&#243;a h&#7885;c v&#224; danh s&#225;ch c&#225;c m&#7889;i quan h&#7879; gi&#7919;a ch&#250;ng. N&#7871;u xem m&#7895;i kh&#243;a h&#7885;c l&#224; m&#7897;t &#273;&#7881;nh c&#7911;a &#273;&#7891; th&#7883; v&#224; m&#7889;i quan h&#7879; gi&#7919;a c&#225;c kh&#243;a h&#7885;c l&#224; c&#225;c c&#7841;nh c&#7911;a &#273;&#7891; th&#7883;, ta c&#243; th&#7875; &#273;&#432;a b&#224;i to&#225;n tr&#7903; th&#224;nh b&#224;i to&#225;n x&#225;c &#273;&#7883;nh xem &#273;&#7891; th&#7883; c&#243; chu tr&#236;nh hay kh&#244;ng.</p><p>M&#7897;t c&#225;ch &#273;&#7875; gi&#7843;i quy&#7871;t b&#224;i to&#225;n n&#224;y l&#224; s&#7917; d&#7909;ng thu&#7853;t to&#225;n DFS (duy&#7879;t &#273;&#7891; th&#7883; theo chi&#7873;u s&#226;u). Trong qu&#225; tr&#236;nh duy&#7879;t, n&#7871;u ch&#250;ng ta t&#236;m th&#7845;y m&#7897;t &#273;&#7881;nh &#273;&#227; &#273;&#432;&#7907;c duy&#7879;t tr&#432;&#7899;c &#273;&#243; v&#224; ch&#432;a &#273;&#432;&#7907;c k&#7871;t th&#250;c, th&#236; c&#243; ngh&#297;a l&#224; ch&#250;ng ta &#273;&#227; t&#236;m th&#7845;y m&#7897;t chu tr&#236;nh.</p><p>D&#432;&#7899;i &#273;&#226;y l&#224; c&#224;i &#273;&#7863;t tham kh&#7843;o b&#7857;ng ng&#244;n ng&#7919; Java cho gi&#7843;i thu&#7853;t.</p><pre><code><code>    public boolean canFinish(int numCourses, int[][] prerequisites) {
        List&lt;Integer&gt;[] g = new List[numCourses];
        for (int i = 0; i &lt; numCourses; i++) {
            g[i] = new ArrayList&lt;&gt;();
        }
        for (int[] v : prerequisites) {
            g[v[0]].add(v[1]);
        }
        // M&#7843;ng visited d&#249;ng &#273;&#7875; &#273;&#225;nh d&#7845;u d&#432;&#7901;ng &#273;i &#7903; m&#7895;i v&#242;ng l&#7863;p
        boolean[] visited = new boolean[numCourses];

        // M&#7843;ng checked d&#249;ng &#273;&#7875; &#273;&#225;nh d&#7845;u m&#7897;t &#273;&#7881;nh &#273;&#227; &#273;&#432;&#7907;c duy&#7879;t qua &#7903; c&#225;c v&#242;ng l&#7863;p tr&#432;&#7899;c
        boolean[] checked = new boolean[numCourses];
        for (int i = 0; i &lt; numCourses; i++) {
            if (dfs(g, visited, checked, i)) {
                return false;
            }
        }
        return true;
    }

    // H&#224;m DFS tr&#7843; v&#7873; true n&#7871;u &#273;&#7891; th&#7883; c&#243; chu tr&#236;nh
    private boolean dfs(List&lt;Integer&gt;[] g, boolean[] visited, boolean[] checked, int v) {
        if (checked[v]) {
            return false;
        }
        if (visited[v]) {
            return true;
        }
        if (g[v].size() == 0) {
            return false;
        }
        visited[v] = true;
        for (int v1 : g[v]) {
            if (dfs(g, visited, checked, v1)) {
                return true;
            }
        }
        visited[v] = false;
        checked[v] = true;
        return false;
    }</code></code></pre><div><hr></div><h3>&#128198;History</h3><p><em>(by lpv)</em></p><p>C&#243; bao gi&#7901; b&#7841;n t&#7921; h&#7887;i,<a href="https://gizmodo.com/remember-how-the-first-thing-ever-sold-online-was-a-bag-1708799689"> th&#7913; &#273;&#7847;u ti&#234;n &#273;&#432;&#7907;c giao d&#7883;ch tr&#7921;c tuy&#7871;n l&#224; g&#236; kh&#244;ng?</a></p><p>V&#224;o n&#259;m 1972, r&#7845;t l&#226;u tr&#432;&#7899;c eBay hay Amazon, c&#225;c sinh vi&#234;n t&#7915; &#272;&#7841;i h&#7885;c Stanford &#7903; California v&#224; MIT &#7903; Massachusetts &#273;&#227; th&#7921;c hi&#7879;n giao d&#7883;ch tr&#7921;c tuy&#7871;n &#273;&#7847;u ti&#234;n. S&#7917; d&#7909;ng t&#224;i kho&#7843;n Arpanet t&#7841;i ph&#242;ng th&#237; nghi&#7879;m tr&#237; tu&#7879; nh&#226;n t&#7841;o c&#7911;a h&#7885;, c&#225;c sinh vi&#234;n Stanford &#273;&#227; b&#225;n cho &#273;&#7889;i t&#225;c c&#7911;a h&#7885; m&#7897;t l&#432;&#7907;ng *** **  nh&#7887;. C&#225;c b&#7841;n c&#243; th&#7875; &#273;&#7885;c b&#224;i vi&#7871;t &#273;&#7875; bi&#7871;t th&#7913; &#273;&#227; &#273;&#432;&#7907;c b&#225;n l&#224; g&#236; nh&#233; ;) </p><h3><strong>&#128736;&#65039;Code &amp; Tools</strong></h3><ul><li><p>T&#7893;ng h&#7907;p m&#7897;t s&#7889; playground tr&#234;n web cho m&#7897;t s&#7889; ng&#244;n ng&#7919; v&#224; c&#244;ng c&#7909;, <a href="https://jvns.ca/blog/2023/04/17/a-list-of-programming-playgrounds/">link</a>.</p></li></ul><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>To keep on going, you have to keep up the rhythm.</p><p><strong>Haruki Murakami</strong></p></div>]]></content:encoded></item><item><title><![CDATA[#253 - Large Language Model will fundamentally change Software Engineering]]></title><description><![CDATA[M&#244; h&#236;nh ng&#244;n ng&#7919; l&#7899;n (Large Language Model) s&#7869; thay &#273;&#7893;i ng&#224;nh c&#244;ng ngh&#7879; ph&#7847;n m&#7873;m nh&#432; th&#7871; n&#224;o]]></description><link>https://newsletter.grokking.org/p/253-large-language-model-will-fundamentally</link><guid isPermaLink="false">https://newsletter.grokking.org/p/253-large-language-model-will-fundamentally</guid><dc:creator><![CDATA[Grokking Vietnam]]></dc:creator><pubDate>Sun, 16 Apr 2023 03:00:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jR35!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff29e3ebd-02de-4cf3-b2c2-bc982e82e4b3_920x920.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><strong>&#128240;Nh&#7919;ng b&#224;i vi&#7871;t hay</strong></h3><h4><a href="https://engineering.linkedin.com/blog/2023/unified-streaming-and-batch-pipelines-at-linkedin--reducing-proc">Unified Streaming And Batch Pipelines At LinkedIn</a></h4><p><em>(by steven.do)</em></p><p>Tr&#432;&#7899;c &#273;&#226;y, c&#225;c k&#7929; s&#432; t&#7841;i LinkedIn &#273;&#227; &#225;p d&#7909;ng ki&#7871;n tr&#250;c Lambda khi ti&#7871;n h&#224;nh x&#226;y d&#7921;ng c&#225;c lu&#7891;ng d&#7919; li&#7879;u (data pipeline) x&#7917; l&#253; theo d&#7841;ng streaming v&#224; d&#7841;ng kh&#7889;i (batch), v&#224; &#273;i&#7873;u n&#224;y d&#7851;n &#273;&#7871;n v&#7845;n &#273;&#7873; s&#7869; c&#7847;n ph&#7843;i duy tr&#236; hai codebase kh&#225;c nhau, v&#7899;i hai c&#225;ch c&#224;i &#273;&#7863;t code x&#7917; l&#253; data kh&#225;c nhau &#273;&#7875; read/write theo batch v&#224; streaming data, c&#361;ng nh&#432; ph&#7843;i duy tr&#236; v&#224; n&#7855;m v&#7919;ng &#273;&#432;&#7907;c c&#7843; 2 engines kh&#225;c nhau trong qu&#225; tr&#236;nh duy tr&#236; ho&#7841;t &#273;&#7897;ng.</p><p>&#272;&#7875; gi&#7843;i quy&#7871;t &#273;&#432;&#7907;c v&#7845;n &#273;&#7873; n&#224;y, c&#225;c k&#7929; s&#432; t&#7841;i LinkedIn &#273;&#227; chuy&#7875;n h&#432;&#7899;ng sang &#225;p d&#7909;ng Apache Beam, v&#7899;i k&#7923; v&#7885;ng c&#243; th&#7875; vi&#7871;t logic x&#7917; l&#253; tr&#234;n c&#249;ng 1 m&#227; ngu&#7891;n &#273;&#225;p &#7913;ng cho c&#7843; x&#7917; l&#253; d&#7841;ng batch v&#224; stream. Theo h&#432;&#7899;ng ti&#7871;p c&#7853;n n&#224;y, h&#7885; s&#7869; ti&#7871;t ki&#7879;m &#273;&#432;&#7907;c h&#417;n 94% th&#7901;i gian x&#7917; l&#253;.<br>Apache Beam l&#224; m&#244; h&#236;nh h&#7907;p nh&#7845;t m&#227; ngu&#7891;n m&#7903; gi&#250;p x&#226;y d&#7921;ng c&#225;c t&#225;c v&#7909; x&#7917; l&#253; d&#7919; li&#7879;u song song &#273;&#225;p &#7913;ng cho c&#7843; 2 h&#432;&#7899;ng x&#7917; l&#253; theo batch v&#224; streaming. B&#7857;ng c&#225;ch s&#7917; d&#7909;ng m&#7897;t trong s&#7889; c&#225;c open source Beam SDK, ng&#432;&#7901;i d&#249;ng c&#243; th&#7875; x&#226;y d&#7921;ng m&#7897;t lu&#7891;ng x&#7917; l&#253; d&#7919; li&#7879;u. Lu&#7891;ng x&#7917; l&#253; d&#7919; li&#7879;u n&#224;y sau &#273;&#243; s&#7869; &#273;&#432;&#7907;c th&#7921;c thi b&#7903;i m&#7897;t trong s&#7889; c&#225;c back-end x&#7917; l&#253; ph&#226;n t&#225;n m&#224; Beam h&#7895; tr&#7907; (Vd: Sazam, Spark, ho&#7863;c Apache Flink).<br>T&#7841;i LinkedIn, Sazam &#273;&#432;&#7907;c s&#7917; d&#7909;ng trong h&#224;ng ng&#224;n &#7913;ng d&#7909;ng x&#7917; l&#253; streaming &#273;&#7875; x&#7917; l&#253; hai tri&#7879;u messages m&#7895;i ng&#224;y v&#7899;i y&#234;u c&#7847;u ch&#7883;u t&#7843;i l&#7899;n v&#224; kh&#7843; n&#259;ng kh&#225;ng l&#7895;i cao. &#272;&#7889;i v&#7899;i c&#225;c t&#225;c v&#7909; x&#7917; l&#253; batch, c&#225;c k&#7929; s&#432; t&#7841;i LinkedIn &#273;&#227; s&#7917; d&#7909;ng Spark &#273;&#7875; x&#7917; l&#253; h&#224;ng petabyte d&#7919; li&#7879;u trong c&#225;c kho l&#432;u tr&#7919; d&#7919; li&#7879;u. &#272;&#7875; c&#243; g&#243;c nh&#236;n chi ti&#7871;t v&#224; to&#224;n c&#7843;nh h&#417;n v&#7873; c&#225;ch th&#7913;c c&#225;c k&#7929; s&#432; t&#7841;i LinkedIn &#273;&#227; &#225;p d&#7909;ng Beam, c&#225;c b&#7841;n c&#243; th&#7875; tham kh&#7843;o chi ti&#7871;t t&#7841;i b&#224;i vi&#7871;t.</p><h4><a href="https://medium.com/booking-com-development/scaling-our-customer-review-system-for-peak-traffic-cb19be434edf">Scaling our customer review system for peak traffic</a></h4><p><em>(by quangle)</em></p><p><strong>Customer reviews</strong> l&#224; m&#7897;t trong nh&#7919;ng h&#7879; th&#7889;ng c&#7889;t l&#245;i c&#243; l&#432;&#7907;ng truy c&#7853;p cao t&#7841;i Booking.com<strong>,</strong> mang &#273;&#7871;n nh&#7919;ng b&#224;i &#273;&#225;nh gi&#225; c&#243; &#273;i&#7875;m s&#7889; rating, h&#236;nh &#7843;nh, c&#225;c feedbacks c&#7847;n thi&#7871;t cho kh&#225;ch h&#224;ng khi h&#7885; t&#236;m ki&#7871;m v&#224; ti&#7871;n h&#224;nh &#273;&#7863;t ch&#7895; ngh&#7881;.</p><p>Theo &#432;&#7899;c t&#237;nh, h&#7879; th&#7889;ng customer-reviews backend ph&#7843;i x&#7917; l&#253; h&#224;ng ch&#7909;c ngh&#236;n requests per second, &#273;&#7875; &#273;&#7843;m b&#7843;o t&#7927; l&#7879; response time d&#432;&#7899;i 50 ms l&#224; 99% <strong>(p99 = 50ms)</strong> c&#249;ng v&#7899;i s&#7889; l&#432;&#7907;ng records l&#234;n &#273;&#7871;n 250 tri&#7879;u reviews hi&#7879;n c&#243;, nh&#243;m k&#7929; s&#432; &#273;&#225;nh gi&#225; l&#7921;a ch&#7885;n k&#7929; thu&#7853;t <strong>sharding</strong> d&#7919; li&#7879;u &#273;&#7875; chia nh&#7887; records theo chi&#7871;n l&#432;&#7907;c chia l&#7845;y d&#432; (modulo) c&#7911;a</p><ul><li><p><strong>ACCOMMODATION_ID % NUMBER_OF_SHARDS</strong></p></li><li><p><em>ACCOMMODATION_ID: Internal ID c&#7911;a kh&#225;ch s&#7841;n, nh&#224;, ...</em></p></li><li><p><em>NUMBER_OF_SHARDS: t&#7893;ng s&#7889; l&#432;&#7907;ng shards hi&#7879;n c&#243; trong system</em></p></li></ul><p>Tuy nhi&#234;n, c&#225;ch ti&#7871;p c&#7853;n modulo s&#7869; g&#7863;p v&#7845;n &#273;&#7873; khi c&#7847;n th&#234;m v&#224;o node server v&#7853;t l&#253; (do s&#7889; l&#432;&#7907;ng records v&#432;&#7907;t ng&#432;&#7905;ng l&#432;u tr&#7919; c&#7911;a single node) d&#7851;n &#273;&#7871;n ph&#7843;i <strong>resharding</strong> to&#224;n b&#7897; d&#7919; li&#7879;u. L&#7845;y v&#237; d&#7909;: h&#7879; th&#7889;ng ban &#273;&#7847;u &#273;&#432;&#7907;c chia th&#224;nh 3 shards, khi &#273;&#243; review record c&#243; accommodation_id = 10124 s&#7869; &#273;&#432;&#7907;c &#273;i&#7873;u ph&#7889;i v&#7873; shard = 2 (10124 % 3 = 0), khi th&#234;m m&#7899;i 1 node l&#250;c n&#224;y h&#7879; th&#7889;ng s&#7869; c&#243; 4 shards, v&#224; review record id 10124 s&#7869; &#273;&#432;&#7907;c &#273;i&#7873;u ph&#7889;i l&#7841;i v&#224;o shard = 0 (10124 % 4 = 0). Qu&#225; tr&#236;nh redistributed s&#7869; &#7843;nh h&#432;&#7903;ng &#273;&#7871;n h&#7879; th&#7889;ng hi&#7879;n t&#7841;i.</p><p>V&#7853;y &#273;&#7897;i ng&#361; Booking.com &#273;&#227; gi&#7843;i quy&#7871;t c&#225;c b&#224;i to&#225;n h&#243;c b&#250;a tr&#234;n nh&#432; th&#7871; n&#224;o? M&#7901;i b&#7841;n &#273;&#7885;c c&#249;ng tham kh&#7843;o chi ti&#7871;t b&#224;i vi&#7871;t: <a href="https://medium.com/booking-com-development/scaling-our-customer-review-system-for-peak-traffic-cb19be434edf">link</a></p><h4><a href="https://dev.to/wesen/llms-will-fundamentally-change-software-engineering-3oj8">LLMs will fundamentally change software engineering</a></h4><p><em>(by n^4)</em></p><p>S&#7921; ph&#7893; bi&#7871;n c&#7911;a ChatGPT c&#249;ng c&#225;c m&#244; h&#236;nh ng&#244;n ng&#7919; l&#7899;n g&#7847;n &#273;&#226;y &#273;&#227; khi&#7871;n c&#7897;ng &#273;&#7891;ng software engineer n&#7843;y sinh ra c&#226;u h&#7887;i: li&#7879;u nh&#7919;ng c&#244;ng ngh&#7879; n&#224;y c&#243; thay th&#7871; c&#244;ng vi&#7879;c c&#7911;a Software Engineer (SE) hay kh&#244;ng? Hay n&#243; s&#7869; thay &#273;&#7893;i ng&#224;nh c&#244;ng ngh&#7879; ph&#7847;n m&#7873;m nh&#432; th&#7871; n&#224;o?</p><p>Trong b&#224;i vi&#7871;t n&#224;y, t&#225;c gi&#7843; v&#7889;n l&#224; m&#7897;t l&#7853;p tr&#236;nh vi&#234;n h&#7879; th&#7889;ng (System Programming) chia s&#7867; g&#243;c nh&#236;n c&#7911;a m&#236;nh v&#7873; v&#7845;n &#273;&#7873; n&#224;y. T&#225;c gi&#7843; li&#7879;t k&#234; nh&#7919;ng t&#236;nh hu&#7889;ng m&#224; t&#225;c gi&#7843; ngh&#297; LLM (Large Language Model) s&#7869; gi&#250;p software engineer tr&#7903; n&#234;n hi&#7879;u qu&#7843; h&#417;n v&#224; c&#225;ch m&#224; t&#225;c gi&#7843; ngh&#297; c&#225;c l&#7853;p tr&#236;nh vi&#234;n n&#234;n t&#236;m c&#225;ch th&#237;ch &#7913;ng.</p><h4><a href="https://stackoverflow.blog/2023/04/10/whats-the-difference-between-software-engineering-and-computer-science-degrees/">What&#8217;s the differences between software engineering and computer science degrees</a></h4><p><em>(by n^4)</em></p><p>Nhi&#7873;u b&#7841;n h&#7859;n &#273;&#227; t&#7915;ng &#273;&#7863;t ra c&#226;u h&#7887;i: t&#244;i mu&#7889;n l&#224;m Software Engineer, v&#7853;y t&#244;i c&#243; ph&#7843;i &#273;i h&#7885;c &#273;&#7841;i h&#7885;c hay kh&#244;ng? Ho&#7863;c l&#224; n&#7871;u t&#244;i kh&#244;ng h&#7885;c Computer Science, v&#7853;y t&#244;i c&#243; &#273;&#432;&#7907;c t&#7921; g&#7885;i m&#236;nh l&#224; Software Engineer hay kh&#244;ng?</p><p>&#272;&#226;y l&#224; m&#7897;t ch&#7911; &#273;&#7873; l&#7899;n v&#224; c&#243; nhi&#7873;u tranh lu&#7853;n. Trong b&#224;i vi&#7871;t hay k&#7923; n&#224;y m&#7901;i b&#7841;n c&#249;ng tham kh&#7843;o m&#7897;t g&#243;c nh&#236;n &#273;&#432;&#7907;c &#273;&#259;ng &#7903; StackOverflow: <a href="https://stackoverflow.blog/2023/04/10/whats-the-difference-between-software-engineering-and-computer-science-degrees/">link</a>.</p><div><hr></div><h3><strong>&#128104;&#8205;&#128187;G&#243;c l&#7853;p tr&#236;nh</strong></h3><p><em>(by ndaadn and phucnh)</em></p><h4>&#272;&#7873; ra tu&#7847;n n&#224;y: <a href="https://leetcode.com/problems/course-schedule/description/">Course Schedule</a></h4><p>C&#243; t&#7893;ng c&#7897;ng `numCourses` kh&#243;a h&#7885;c m&#224; b&#7841;n c&#243; th&#7875; tham gia, &#273;&#432;&#7907;c &#273;&#225;nh s&#7889; t&#7915; 0 &#273;&#7871;n numCourses - 1. B&#7841;n &#273;&#432;&#7907;c cung c&#7845;p m&#7897;t m&#7843;ng `prerequisites` trong &#273;&#243; `prerequisites[i] = [ai, bi]` cho bi&#7871;t b&#7841;n ph&#7843;i tham gia kh&#243;a h&#7885;c `bi` tr&#432;&#7899;c n&#7871;u mu&#7889;n tham gia `ai`.</p><p>V&#237; d&#7909;: c&#7863;p [0, 1], cho bi&#7871;t r&#7857;ng &#273;&#7875; h&#7885;c kh&#243;a h&#7885;c 0, tr&#432;&#7899;c ti&#234;n b&#7841;n ph&#7843;i h&#7885;c kh&#243;a h&#7885;c 1.</p><p>&#272;&#7873; b&#224;i y&#234;u c&#7847;u tr&#7843; v&#7873; true n&#7871;u b&#7841;n c&#243; th&#7875; ho&#224;n th&#224;nh t&#7845;t c&#7843; c&#225;c kh&#243;a h&#7885;c. N&#7871;u kh&#244;ng, tr&#7843; v&#7873; false.</p><p>V&#237; d&#7909; 1:</p><ul><li><p>Input: numCourses = 2, prerequisites = [[1,0]]</p></li><li><p>Output: true</p></li></ul><p>V&#237; d&#7909; 2:</p><ul><li><p>Input: numCourses = 2, prerequisites = [[1,0],[0,1]]</p></li><li><p>Output: false</p></li></ul><p>Gi&#7843;i th&#237;ch: C&#243; 2 kh&#243;a h&#7885;c, &#273;&#7875; h&#7885;c kh&#243;a 1 c&#7847;n ho&#224;n th&#224;nh kh&#243;a 0 tr&#432;&#7899;c, v&#224; &#273;&#7875; h&#7885;c kh&#243;a 0 c&#7847;n ho&#224;n th&#224;nh kh&#243;a 1 tr&#432;&#7899;c. Ch&#237;nh v&#236; v&#7853;y k&#7871;t qu&#7843; l&#224; false.</p><h4>L&#7901;i gi&#7843;i tu&#7847;n tr&#432;&#7899;c: <a href="https://leetcode.com/problems/backspace-string-compare/">Backspace String Compare</a></h4><p>S&#7917; d&#7909;ng hai stack &#273;&#7875; l&#432;u tr&#7919; x&#226;u k&#253; t&#7921; ban &#273;&#7847;u.</p><p>Th&#7921;c hi&#7879;n duy&#7879;t qua t&#7915;ng k&#253; t&#7921; trong x&#226;u, n&#7871;u k&#253; t&#7921; &#273;&#243; kh&#244;ng ph&#7843;i l&#224; "#" th&#236; &#273;&#7849;y v&#224;o stack, ng&#432;&#7907;c l&#7841;i th&#236; l&#7845;y ra k&#253; t&#7921; tr&#234;n &#273;&#7881;nh c&#7911;a stack (n&#7871;u stack kh&#244;ng r&#7895;ng).</p><p>Sau khi &#273;&#227; x&#7917; l&#253; xong c&#7843; hai x&#226;u, ta so s&#225;nh c&#225;c ph&#7847;n t&#7917; trong hai stack &#273;&#7875; ki&#7875;m tra xem hai x&#226;u c&#243; gi&#7889;ng nhau hay kh&#244;ng.</p><pre><code>class Solution {
    public boolean backspaceCompare(String s, String t) {
        Stack&lt;Character&gt; stackS = new Stack&lt;&gt;();
        Stack&lt;Character&gt; stackT = new Stack&lt;&gt;();
        // X&#7917; l&#253; x&#226;u s
        for (char c : s.toCharArray()) {
            if (c != '#') {
                stackS.push(c);
            } else if (!stackS.isEmpty()) {
                stackS.pop();
            }
        }
        // X&#7917; l&#253; x&#226;u t
        for (char c : t.toCharArray()) {
            if (c != '#') {
                stackT.push(c);
            } else if (!stackT.isEmpty()) {
                stackT.pop();
            }
        }
        // So s&#225;nh hai stack
        while (!stackS.isEmpty() &amp;&amp; !stackT.isEmpty()) {
            if (stackS.pop() != stackT.pop()) {
                return false;
            }
        }
        return stackS.isEmpty() &amp;&amp; stackT.isEmpty();
    }
}</code></pre><p>&#272;&#7897; ph&#7913;c t&#7841;p thu&#7853;t to&#225;n c&#7911;a gi&#7843;i thu&#7853;t l&#224; O(N+M) v&#7899;i N, M l&#7847;n l&#432;&#7907;t l&#224; &#273;&#7897; d&#224;i c&#7911;a chu&#7895;i s v&#224; t. </p><div><hr></div><h3><strong>&#128736;&#65039;Code &amp; Tools</strong></h3><ul><li><p><a href="https://filegpt.app/">filegpt.app</a>: Tr&#7907; l&#253; &#7843;o tr&#234;n n&#7873;n t&#7843;ng GPT gi&#250;p t&#243;m t&#7855;t n&#7897;i dung c&#225;c file v&#224; text xoay quanh m&#7897;t ch&#7911; &#273;&#7873; n&#224;o &#273;&#243;.</p></li></ul><div><hr></div><h3><strong>Quotes</strong></h3><div class="pullquote"><p>&#8220;Two kinds of people are good at foreseeing danger: those who have learned at their own expense, and the clever people who learn a great deal at the expense of others.&#8221;</p><p><strong><a href="https://fs.blog/art-of-prudence/">Source</a></strong></p></div>]]></content:encoded></item></channel></rss>