<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>下班有約｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/%E4%B8%8B%E7%8F%AD%E6%9C%89%E7%B4%84/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>下班有約｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/%E4%B8%8B%E7%8F%AD%E6%9C%89%E7%B4%84/</link><width>144</width><height>144</height></image>
    <description>林鼎淵（Dean Lin）的部落格：生成式 AI 企業內訓講師、外商資安公司軟體專家、7 本書作者。400 多篇文章用白話分享生成式 AI 實戰、Claude Code 與 Vibe Coding 教學、團隊合作與職場成長。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <copyright>© 2020–2026 林鼎淵 Dean Lin</copyright>
    <lastBuildDate>Sat, 03 Aug 2024 15:46:40 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/%E4%B8%8B%E7%8F%AD%E6%9C%89%E7%B4%84/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>人生很難遇到一個與自己如此相似的朋友 ── 下班有約系列文</title>
      <link>https://deanlin.net/blog/202408/a-friend-like-me/</link>
      <pubDate>Sat, 03 Aug 2024 15:46:40 +0800</pubDate>
      <guid>https://deanlin.net/blog/202408/a-friend-like-me/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>職涯成長</category>
      <description>我們都是工程師/講師/作家/魔術師/自媒體創作者/不浪費酒精聯盟，甚至現在還待在相同的產業。因為經歷高度相似，所以我們遇到的選擇、機遇、困境也很雷同。</description>
      <media:content url="https://deanlin.net/blog/202408/a-friend-like-me/images/a-friend-like-me-og_hu_216d4d940b9d80af.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>我們都是工程師/講師/作家/魔術師/自媒體創作者/不浪費酒精聯盟，甚至現在還待在相同的產業。</p>
<p>因為經歷高度相似，所以我們遇到的選擇、機遇、困境也很雷同。</p>
<p>自認記憶能力有限，所以透過文字紀錄彼此的觀點。</p>
<p><img src="https://deanlin.net/blog/202408/a-friend-like-me/images/a-friend-like-me-01.webp" width="1400" height="823" alt="人生很難遇到一個與自己如此相似的朋友 ── 下班有約系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<h2 id="-珍惜願意與你分享真實資訊的朋友-">珍惜願意與你分享真實資訊的朋友 💡<a class="h-anchor" href="#-%e7%8f%8d%e6%83%9c%e9%a1%98%e6%84%8f%e8%88%87%e4%bd%a0%e5%88%86%e4%ba%ab%e7%9c%9f%e5%af%a6%e8%b3%87%e8%a8%8a%e7%9a%84%e6%9c%8b%e5%8f%8b-" aria-label="這個段落的連結"></a></h2>
<p>這次聚會讓我深刻體會到，能交換「真實」資訊的朋友是多麼珍貴。</p>
<p>隨著年紀增長，我們學會了保護自己；因此總是語帶保留、點到為止。</p>
<p>但很多時候，最重要的就是那些「被保留」的關鍵資訊。</p>
<p>有些人覺得網路這麼發達，什麼資訊都能找到；但實際上很多資訊都是碎片化，或是被人為美化的。</p>
<p>拿著片面資訊做決策，你可能會搞死自己。</p>
<hr>
<h2 id="-定價策略與市場認知-">定價策略與市場認知 📈<a class="h-anchor" href="#-%e5%ae%9a%e5%83%b9%e7%ad%96%e7%95%a5%e8%88%87%e5%b8%82%e5%a0%b4%e8%aa%8d%e7%9f%a5-" aria-label="這個段落的連結"></a></h2>
<p>聊到課程接洽的經驗時，我們討論了與管顧公司合作的利弊。</p>
<p>如果是你自己跟企業洽談，可能收入為 8000 元/小時。</p>
<p>但如果改由管顧公司來接洽，也許收入會下降到 6000 元/小時。</p>
<p>從帳面上來看，每小時少賺 2000 元；但管理顧問公司的抽成往往有 4 成左右，也就是在企業眼中，你的價值是 10000 元/小時。</p>
<p>把時間拉長，這種合作能提升講師的市場價值與知名度；日後有企業來找你時，你也能很自然的提高報價。</p>
<hr>
<h2 id="-不同窗口用不同的報價策略-">不同窗口用不同的報價策略 🔄<a class="h-anchor" href="#-%e4%b8%8d%e5%90%8c%e7%aa%97%e5%8f%a3%e7%94%a8%e4%b8%8d%e5%90%8c%e7%9a%84%e5%a0%b1%e5%83%b9%e7%ad%96%e7%95%a5-" aria-label="這個段落的連結"></a></h2>
<p>企業可能透過內部的 HR、業務（特助）來邀請講師。</p>
<p>如果對話的窗口是 HR，那報完價後，可以詢問一下是否符合他們的預算。</p>
<p>因為 HR 找人時往往有多個名單，最後沒有選擇你有可能只是預算上的考量。</p>
<p>但如果對話的窗口是業務（特助），你可以放膽報高一點的價格。</p>
<p>因為他們來找你，通常不是因為這個主題需要一個講師，而是希望由「你」來當這個主題的講師。</p>
<p>即使報價超過預算也會與你商議，因此你有更高的機率爭取到不錯的講師費。</p>
<hr>
<h2 id="-都會踩到坑只是遲與早-">都會踩到坑，只是遲與早 🎯<a class="h-anchor" href="#-%e9%83%bd%e6%9c%83%e8%b8%a9%e5%88%b0%e5%9d%91%e5%8f%aa%e6%98%af%e9%81%b2%e8%88%87%e6%97%a9-" aria-label="這個段落的連結"></a></h2>
<p>講師的授課能力，基本上與授課次數成正比。</p>
<p>因為只有踩到足夠多的坑，才知道發生意外時要如何應對，或是向誰尋求協助。</p>
<p>像在這次聚會中我才知道，原來 Google Drive 上的檔案如果在短時間內被大量下載會卡死。</p>
<p>人生路上有很多坑，如果提早知道就能事先找出對策。</p>
<hr>
<h2 id="-堅守品質與道德底線-">堅守品質與道德底線 🌟<a class="h-anchor" href="#-%e5%a0%85%e5%ae%88%e5%93%81%e8%b3%aa%e8%88%87%e9%81%93%e5%be%b7%e5%ba%95%e7%b7%9a-" aria-label="這個段落的連結"></a></h2>
<p>我們一致認為，堅持自己的底線非常重要。</p>
<p>有些自媒體為了增加曝光度與收入，會透過誇張不實的標題與封面來吸引點閱率、促購。</p>
<p>但這種做法實際上是在損害讀者對你的信任（雖然總是有新的韭菜）。</p>
<p>因為自媒體對我們來說只是斜槓，所以我們更在意內容與標題的一致性，不想做出違反內心的決策。</p>
<hr>
<h2 id="-希望大家遇到能與自己深度交流的朋友-">希望大家遇到能與自己深度交流的朋友 🤝<a class="h-anchor" href="#-%e5%b8%8c%e6%9c%9b%e5%a4%a7%e5%ae%b6%e9%81%87%e5%88%b0%e8%83%bd%e8%88%87%e8%87%aa%e5%b7%b1%e6%b7%b1%e5%ba%a6%e4%ba%a4%e6%b5%81%e7%9a%84%e6%9c%8b%e5%8f%8b-" aria-label="這個段落的連結"></a></h2>
<p>希望這篇文章能讓更多人意識到，並珍惜生活中那些寶貴的連結。</p>
<p>透過真誠的分享和交流，彼此都能共同進步和成長 ✨</p>
<p>推薦大家追蹤資安大佬 <a href="https://www.facebook.com/hackercat1215">HackerCat</a>，不定時會分享很棒的文章！</p>
<a class="linkcard" href="https://deanlin.net/series/after-office/">
  <span class="lc-body">
    <span class="lc-title">工程師下班有約</span>
    <span class="lc-desc">同名著作與 YouTube 節目的延伸文章。一個技職生花了 15 年，成為外商工程師、作家與講師，這裡記錄一路上的選擇、失敗與心法。</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg>林鼎淵 Dean Lin</span>
  </span>
</a>

<p><strong>如果你對目前的職涯感到迷茫，想從不同視角檢視自己的選擇，相信《<a href="https://www.tenlong.com.tw/products/9786264142083">工程師下班有約</a>》這本書能為你帶來靈感與啟發：</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202408/a-friend-like-me/images/a-friend-like-me-02.webp" width="1400" height="319" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>小時候不懂！都乖乖接受對方的安排── 下班有約系列文</title>
      <link>https://deanlin.net/blog/202406/learn-to-negotiate/</link>
      <pubDate>Thu, 27 Jun 2024 18:15:39 +0800</pubDate>
      <guid>https://deanlin.net/blog/202406/learn-to-negotiate/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>職涯成長</category>
      <description>生活中，你是否常常接受別人的安排，而忽略了自己有選擇的權利？ 今天想跟大家分享一個特別的用餐經驗，他讓我體會到了勇敢提出需求的重要性。</description>
      <media:content url="https://deanlin.net/blog/202406/learn-to-negotiate/images/learn-to-negotiate-og_hu_6f021c9f07507ba6.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>生活中，你是否常常接受別人的安排，而忽略了自己有選擇的權利？</p>
<p>今天想跟大家分享一個特別的用餐經驗，他讓我體會到了勇敢提出需求的重要性。</p>
<p><img src="https://deanlin.net/blog/202406/learn-to-negotiate/images/learn-to-negotiate-01.webp" width="1144" height="642" alt="小時候不懂！都乖乖接受對方的安排── 下班有約系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<h2 id="-其實我們很困擾-">其實我們很困擾 😨<a class="h-anchor" href="#-%e5%85%b6%e5%af%a6%e6%88%91%e5%80%91%e5%be%88%e5%9b%b0%e6%93%be-" aria-label="這個段落的連結"></a></h2>
<p>上週跟朋友預約了一間餐廳吃飯。</p>
<p>進門後，服務生把我們安排到一張有點小的桌子；擺上菜單後，甚至快要沒有放水杯的空間。</p>
<p>對兩個食量不小的男生來說，我們實在不確定這個桌子是否能容納我們點的食物。</p>
<hr>
<h2 id="-勇敢提出需求-">勇敢提出需求 💡<a class="h-anchor" href="#-%e5%8b%87%e6%95%a2%e6%8f%90%e5%87%ba%e9%9c%80%e6%b1%82-" aria-label="這個段落的連結"></a></h2>
<p>就在這時，朋友向服務員招了招手，有禮貌地詢問：「不好意思，我們點的東西有點多；如果可以，能幫我們換到大一點的桌子嗎？」</p>
<p>聽到需求後，服務員先是一愣，然後轉頭看了一下周圍，發現餐廳其實還有一些空位，於是說：「稍等一下，我跟同事做個確認。」</p>
<hr>
<h2 id="-獲得更好的體驗-">獲得更好的體驗 🎉<a class="h-anchor" href="#-%e7%8d%b2%e5%be%97%e6%9b%b4%e5%a5%bd%e7%9a%84%e9%ab%94%e9%a9%97-" aria-label="這個段落的連結"></a></h2>
<p>幾分鐘後，服務員便邀請我們換到寬敞舒適的沙發座位，這讓我們的用餐體驗上升了好幾個檔次。</p>
<p>老實講，原本的座位除了桌子小外，椅子坐起來也不太舒服。</p>
<p><strong>因此在坐上沙發的那一刻，我深刻體會到：「只要勇敢提出需求，很多事情都可能變得不一樣。」</strong></p>
<hr>
<h2 id="-打破規則並不是要你為難別人-">打破規則並不是要你為難別人 🚫<a class="h-anchor" href="#-%e6%89%93%e7%a0%b4%e8%a6%8f%e5%89%87%e4%b8%a6%e4%b8%8d%e6%98%af%e8%a6%81%e4%bd%a0%e7%82%ba%e9%9b%a3%e5%88%a5%e4%ba%ba-" aria-label="這個段落的連結"></a></h2>
<p>我跟朋友預約的時間，已經是餐廳最晚能預約的時段；除非有人遲到，不然接下來不太會有新客人進門。</p>
<p>所以在看到有更舒適的空位時，朋友才向服務生提出了需求。</p>
<p>這次經驗讓我反思：「在生活中，我們是否太過順從現狀，而忽略了爭取更好選擇的機會？」</p>
<p><strong>打破規則並不是要你為難別人，而是要你質疑現狀，尋找更好的解決方案。</strong></p>
<hr>
<h2 id="-如果害怕麻煩別人那受苦的只有自己-">如果害怕麻煩別人，那受苦的只有自己 🤕<a class="h-anchor" href="#-%e5%a6%82%e6%9e%9c%e5%ae%b3%e6%80%95%e9%ba%bb%e7%85%a9%e5%88%a5%e4%ba%ba%e9%82%a3%e5%8f%97%e8%8b%a6%e7%9a%84%e5%8f%aa%e6%9c%89%e8%87%aa%e5%b7%b1-" aria-label="這個段落的連結"></a></h2>
<p>最後我想從這次用餐經驗中帶出幾點反思：</p>
<ul>
<li><strong>勇於表達需求</strong>：很多時候，只要我們提出需求，就能獲得更好的結果。</li>
<li><strong>觀察周圍環境</strong>：留意周圍的情況，可能會發現更多可行的選擇。</li>
<li><strong>不要害怕被拒絕</strong>：即使被拒絕，我們也沒有損失，反而可能獲得意想不到的驚喜。</li>
</ul>
<p>下次當你遇到不理想的安排時，不妨試著提出需求，看能否有更好的選擇。</p>
<p>畢竟，絕大多數的機會，都是從勇敢詢問開始的。</p>
<a class="linkcard" href="https://deanlin.net/series/after-office/">
  <span class="lc-body">
    <span class="lc-title">工程師下班有約</span>
    <span class="lc-desc">同名著作與 YouTube 節目的延伸文章。一個技職生花了 15 年，成為外商工程師、作家與講師，這裡記錄一路上的選擇、失敗與心法。</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg>林鼎淵 Dean Lin</span>
  </span>
</a>

<p><strong>如果你對目前的職涯感到迷茫，想從不同視角檢視自己的選擇，相信《<a href="https://www.tenlong.com.tw/products/9786264142083">工程師下班有約</a>》這本書能為你帶來靈感與啟發：</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202406/learn-to-negotiate/images/learn-to-negotiate-02.webp" width="1400" height="319" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>用低成本也能請到好員工？資深 HR 不想告訴你的秘密！──下班有約系列文</title>
      <link>https://deanlin.net/blog/202208/hiring-good-people-on-budget/</link>
      <pubDate>Wed, 03 Aug 2022 15:23:50 +0800</pubDate>
      <guid>https://deanlin.net/blog/202208/hiring-good-people-on-budget/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>職涯成長</category>
      <description>先說這篇文章的內容可能會引起部分讀者的不適，因為內容會較為誠實地說出資方在挑選人才上的考量＆心裡話。</description>
      <media:content url="https://deanlin.net/blog/202208/hiring-good-people-on-budget/images/hiring-good-people-on-budget-og_hu_631443515c748f0e.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>先說這篇文章的內容可能會引起部分讀者的不適，因為內容會較為誠實地說出資方在挑選人才上的考量＆心裡話。</p>
<p>同時為了避免老闆＆HR 對內容有過度期待，這邊事先聲明文中的方法僅適用於尋找「初階人才」；用香蕉不可能請到老虎，但有機會請到「幼虎」。</p>
<p><img src="https://deanlin.net/blog/202208/hiring-good-people-on-budget/images/hiring-good-people-on-budget-01.webp" width="1400" height="733" alt="用低成本也能請到好員工？資深 HR 不想告訴你的秘密！──下班有約系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<h2 id="擁有-30-年招募經驗的總經理是如何挑選人才的">擁有 30 年招募經驗的總經理是如何挑選人才的？<a class="h-anchor" href="#%e6%93%81%e6%9c%89-30-%e5%b9%b4%e6%8b%9b%e5%8b%9f%e7%b6%93%e9%a9%97%e7%9a%84%e7%b8%bd%e7%b6%93%e7%90%86%e6%98%af%e5%a6%82%e4%bd%95%e6%8c%91%e9%81%b8%e4%ba%ba%e6%89%8d%e7%9a%84" aria-label="這個段落的連結"></a></h2>
<p>一間公司是否能長久經營，除了產品很重要外，「人才」更是重中之重。</p>
<p>筆者有幸認識一位在資訊產業的中小企業老闆，公司每一位工程師都要經過他的面試才能錄用。</p>
<p>而他所錄用的工程師，無論<strong>初階人才還是中階人才，大概有 6 成的人在入職半年後展現了超高的 CP 值</strong>；因為覺得很不可思議，所以我便向他請教這是如何辦到的？</p>
<blockquote>
<p>本篇文章先探討「初階人才」，之後再找時間分享這位老闆尋找「中階人才」的心法。</p>
</blockquote>
<h3 id="-先搞清楚自己要找到哪一類型的人才">先搞清楚自己要找到哪一類型的人才<a class="h-anchor" href="#-%e5%85%88%e6%90%9e%e6%b8%85%e6%a5%9a%e8%87%aa%e5%b7%b1%e8%a6%81%e6%89%be%e5%88%b0%e5%93%aa%e4%b8%80%e9%a1%9e%e5%9e%8b%e7%9a%84%e4%ba%ba%e6%89%8d" aria-label="這個段落的連結"></a></h3>
<p>這位老闆的公司業務量穩定，也沒有想繼續擴張的野心。</p>
<p>他了解自己只是中小企業，論名氣、發展性遠遠不如其他大公司，所以在人才方面，他瞄準的是「市場不看好，但有潛力的人才」。</p>
<p>對他來說，公司是有時間培養人才的（應屆畢業生可），因此是否具備專業能力並不重要（只找非本科），而態度則是他最重視的人格特質（服從性）。</p>
<h3 id="-在履歷篩選上另闢蹊徑">在履歷篩選上另闢蹊徑<a class="h-anchor" href="#-%e5%9c%a8%e5%b1%a5%e6%ad%b7%e7%af%a9%e9%81%b8%e4%b8%8a%e5%8f%a6%e9%97%a2%e8%b9%8a%e5%be%91" aria-label="這個段落的連結"></a></h3>
<p>根據上方的需求，儘管為資訊產業，公司要找的也是工程師，但為了壓低用人成本，他加入了如下條件：</p>
<ol>
<li>不找本科系的畢業生（資工、資管、電資畢業的直接過濾）</li>
<li>一定要是「國立」大學（中字輩以上）</li>
<li>一定要是「理工」科系（特別偏愛土木、大氣、物理）</li>
<li>工作經驗 3 年以內，無經驗可</li>
<li>年齡 28 歲以下</li>
<li>如果目前是租屋更好（老實講這點很地獄 😨）</li>
</ol>
<p>上面履歷的篩選邏輯，可以說跟絕大多數資訊產業的同行相反；但正是因為這個與眾不同的策略，讓他有非常多「淘寶」的機會。</p>
<p>用這位老闆的話說：「只要是本科系，就很難用低於市場的薪水錄取；這樣我還不如用更低的薪水多錄取幾個感覺有潛力，但沒有相關背景的新人；而有經濟壓力的人，相對來說服從性更高。」</p>
<h3 id="-透過面試觀察人格特質">透過面試觀察人格特質<a class="h-anchor" href="#-%e9%80%8f%e9%81%8e%e9%9d%a2%e8%a9%a6%e8%a7%80%e5%af%9f%e4%ba%ba%e6%a0%bc%e7%89%b9%e8%b3%aa" aria-label="這個段落的連結"></a></h3>
<p>透過剛剛條件篩選下來的履歷，大部分的「天賦」都有一定水準；因此在面試時，主要觀察求職者的人格特質（因為專業能力不行是打從一開始就知道的）：</p>
<ol>
<li>服裝儀容是否整潔（自我要求，以及對這場面試的重視程度）</li>
<li>過往團隊合作時擔任的角色、執行的任務（了解團隊溝通能力，以及對交付任務的執行力）</li>
<li>面對邏輯考題的反應速度（專業能力可以不行，但邏輯絕對要清晰）</li>
<li>對資訊產業的了解程度（根據回答的內容，判斷進入這個產業的意願＆積極性）</li>
<li>遇到不會問題時的應對進退（看對方的反應是硬撐、討論、瞎掰、放棄，還是直接生氣😠）</li>
</ol>
<h3 id="-透過試用期確認自己的眼光">透過試用期確認自己的眼光<a class="h-anchor" href="#-%e9%80%8f%e9%81%8e%e8%a9%a6%e7%94%a8%e6%9c%9f%e7%a2%ba%e8%aa%8d%e8%87%aa%e5%b7%b1%e7%9a%84%e7%9c%bc%e5%85%89" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>這邊特別提醒，如果在試用期被資遣，雇主是需要付資遣費的喔！</p>
</blockquote>
<p>跟希望人才馬上成為即戰力的公司不同，老闆選擇讓剛入職的新人在前 3 個月自我精進，每個月用工作上會用到的技能完成一份 Side Project，並在月底向所有員工 Demo，同時解釋自己是如何發想、規劃、執行。</p>
<p>因為題目與難易度完全是自由選擇，所以能從這些 Side Project 中看到一個人的潛力，進而評估是否讓他成為公司的一份子。</p>
<p>因為「非本科系、無相關經驗、應屆畢業生」這幾個條件，大幅降低公司的試錯成本，在經過這些層層篩選後，往往留下來的都是有成為工程師天賦的人。</p>
<hr>
<h2 id="上面的策略聽起來不錯但一切有這麼順利嗎">上面的策略聽起來不錯，但一切有這麼順利嗎？<a class="h-anchor" href="#%e4%b8%8a%e9%9d%a2%e7%9a%84%e7%ad%96%e7%95%a5%e8%81%bd%e8%b5%b7%e4%be%86%e4%b8%8d%e9%8c%af%e4%bd%86%e4%b8%80%e5%88%87%e6%9c%89%e9%80%99%e9%ba%bc%e9%a0%86%e5%88%a9%e5%97%8e" aria-label="這個段落的連結"></a></h2>
<p>一路聽下來，我覺得老闆分析的很有道理，且實際執行的成效也很棒，於是我便向他詢問：「這個方法聽起來很棒，它有什麼缺陷嗎？」</p>
<p>老闆笑了笑說：「你不是第一個向我詢問這個問題的，實際上有些朋友在聽完我的分享後，回去就立馬在公司執行看看，但我目前還沒有聽到其他人的成功案例。」</p>
<p>接下來老闆分享了許多成功與失敗細節，筆者大致統整如下：</p>
<ol>
<li>上面的流程之所以可以完美執行，是因為<strong>他本身就是老闆</strong>，從面試人才、錄用人才到培養人才，每個環節都抓得很緊，因此成功率才會如此之高。</li>
<li><strong>公司可以在「一開始」用低成本請到好員工</strong>，但通常在「8~16」個月後，人才也會意識到自己的薪水低於市場價格，如果沒有適當的調整可能會就導致人才流失。</li>
<li>因為你對人才有知遇之恩，所以通常員工跟你的關係會更為緊密，如果對方入職滿兩年且能力符合需求，<strong>公司會分給他「股票」，把他跟公司的利益結構綁在一起（公司如果有盈餘，依照持股比例分紅）</strong>。</li>
<li>許多人回去執行後，都打電話抱怨說他們找到的是「雷包」，<strong>不是每個老闆、HR、主管都有挑選人才的天賦</strong>，就算把秘訣都告訴你；相同的方法，在每個執行者的手上也會有完全不同的結果。</li>
</ol>
<p>別人的經驗，我們可以借鑑，但是否適用於自己的公司真的要謹慎評估；在這次聊天中，老闆也跟我分享他找「中階人才」的心法，這部分筆者會再獨立一篇與大家分享。</p>
<blockquote>
<p>這種公司也許在某些人眼中是不合格的，但它的存在給許多想轉職又沒經驗的人一個機會，有能力的人自然可以用它為跳板向上挑戰。</p>
<p>瞭解資方的策略與想法，有時對我們職涯的選擇也會有所幫助。</p>
</blockquote>
<p><strong>如果你對目前的職涯感到迷茫，想從不同視角檢視自己的選擇，相信《<a href="https://www.tenlong.com.tw/products/9786264142083">工程師下班有約</a>》這本書能為你帶來靈感與啟發：</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202208/hiring-good-people-on-budget/images/hiring-good-people-on-budget-02.webp" width="1400" height="319" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

<pre tabindex="0"><code>下班有約系列文
▋ [前端]新手工程師容易卡住的問題
▋ [前端＆後端]工程師常犯的錯誤
▋ 讓開發團隊更好協作的方式
▋ 談談 Pair Programing
▋ 談談工程師的話語權
▋ 出社會後，新鮮人要及早知道的 5 件事
▋ 面試的性向測驗竟然準到讓人心裡發寒？
▋ 反其道而行的任務分配
▋ 現在的 Daily Scrum 真的適合團隊嗎？
▋ 用低成本也能請到好員工？資深 HR 不想告訴你的秘密！(本篇)
</code></pre>]]></content:encoded>
    </item>
    <item>
      <title>反其道而行的任務分配 ──下班有約系列文</title>
      <link>https://deanlin.net/blog/202204/counterintuitive-task-assignment/</link>
      <pubDate>Fri, 22 Apr 2022 14:09:09 +0800</pubDate>
      <guid>https://deanlin.net/blog/202204/counterintuitive-task-assignment/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>團隊合作</category>
      <description>前幾天跟擔任 Engineer Manager 的朋友聊天，在任務分配上他給我提供了一個全新的觀點：「給 Junior 工程師進階的任務，讓 Senior 工程師做基礎的任務。」這個違反常理的任務分配讓我十分不解，因為這樣的安排容易導致專案交期的延宕，甚至 Bug…</description>
      <media:content url="https://deanlin.net/blog/202204/counterintuitive-task-assignment/images/counterintuitive-task-assignment-og_hu_e15a09e846669c3e.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>前幾天跟擔任 Engineer Manager 的朋友聊天，在任務分配上他給我提供了一個全新的觀點：「給 Junior 工程師進階的任務，讓 Senior 工程師做基礎的任務。」這個違反常理的任務分配讓我十分不解，因為這樣的安排容易導致專案交期的延宕，甚至 Bug 百出；如果你也跟我有一樣的疑惑，就透過這篇文章來了解他實際是怎麼運作的吧！</p>
<p><img src="https://deanlin.net/blog/202204/counterintuitive-task-assignment/images/counterintuitive-task-assignment-01.webp" width="1171" height="620" alt="反其道而行的任務分配 ──下班有約系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>大綱
一、不要只讓 Junior 工程師去做已經會的事情
二、小公司的 Junior 工程師通常戰力較強
三、透過反其道而行的任務分配讓 Junior 工程師快速成長
四、通常只有絕望的人才會珍惜他人的建議
五、筆者心得
</code></pre><h2 id="一不要只讓-junior-工程師去做已經會的事情">一、不要只讓 Junior 工程師去做已經會的事情<a class="h-anchor" href="#%e4%b8%80%e4%b8%8d%e8%a6%81%e5%8f%aa%e8%ae%93-junior-%e5%b7%a5%e7%a8%8b%e5%b8%ab%e5%8e%bb%e5%81%9a%e5%b7%b2%e7%b6%93%e6%9c%83%e7%9a%84%e4%ba%8b%e6%83%85" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>不要讓工程師在 Junior 的階段停留太久</p>
</blockquote>
<p>工程師的 Junior 跟 Senior 並不是用年資來判定的，而是從技術、溝通能力、行業理解度三個面向來綜合評價。</p>
<p>如果一直分配 Junior 工程師能力範圍內的任務，那他就只能在已知的世界中持續熟練；以健身舉例，如果拿 1 KG 的啞鈴來重訓，無論你重訓多久都很難練成巨巨。</p>
<hr>
<h2 id="二小公司的-junior-工程師通常戰力較強">二、小公司的 Junior 工程師通常戰力較強<a class="h-anchor" href="#%e4%ba%8c%e5%b0%8f%e5%85%ac%e5%8f%b8%e7%9a%84-junior-%e5%b7%a5%e7%a8%8b%e5%b8%ab%e9%80%9a%e5%b8%b8%e6%88%b0%e5%8a%9b%e8%bc%83%e5%bc%b7" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>如果孤立無援，就只能強迫成長</p>
</blockquote>
<p>即使都是掛 Junior 的職稱，在大多數的狀況下，小公司出來的工程師會有更全面的技能，且抗壓能力較高。</p>
<p>因為小公司往往是<strong>這片天我一個人撐起</strong>，一個人就要負責一個、甚至多個專案；且因為公司每個人都很忙，遇到問題很難有前輩願意抽空協助。</p>
<p>在這種自生自滅的狀況下，能堅持下來的往往是優秀的人才；因此我朋友在面試時也更傾向找小公司，尤其是外包公司出身的工程師。</p>
<hr>
<h2 id="三透過反其道而行的任務分配讓-junior-工程師快速成長">三、透過反其道而行的任務分配讓 Junior 工程師快速成長<a class="h-anchor" href="#%e4%b8%89%e9%80%8f%e9%81%8e%e5%8f%8d%e5%85%b6%e9%81%93%e8%80%8c%e8%a1%8c%e7%9a%84%e4%bb%bb%e5%8b%99%e5%88%86%e9%85%8d%e8%ae%93-junior-%e5%b7%a5%e7%a8%8b%e5%b8%ab%e5%bf%ab%e9%80%9f%e6%88%90%e9%95%b7" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>比起將會的事情變得更熟練，還不如讓他挑戰那些沒有做過的事情</p>
</blockquote>
<p>因為團隊人數較多，所以對大公司來說較少遇到小公司那種<strong>這片天我一個人撐起</strong>的情境。</p>
<p>但透過<strong>反其道而行的任務分配</strong>卻能達到類似的效果，且能刺激人才成長。這邊我舉個案例，讓大家了解他實際上是怎麼運作的：</p>
<ol>
<li>將任務的困難度分成「基礎、進階、地獄」三種，通常基礎的任務會佔據 75%，進階的大約 20%，地獄一般來說不會超過 5%。</li>
<li>讓 Senior 工程師來做「基礎」任務可以<strong>保證系統一定的穩定性。</strong></li>
<li>假設今天系統上有「單筆查詢」跟「批量查詢」的功能，會請 Senior 工程師在短時間先將「單筆查詢」完成，然後請 Junior 工程師去實作「批量查詢」。</li>
<li>儘管是進階一點的功能，但因為有類似的範例可以參考，Junior 工程師並不會一籌莫展，先讓他嘗試用自己的方式來解決這個任務。</li>
<li>如果 Junior 工程師能順利解決問題，那他會非常有成就感，對寫程式更有自信；並且開始建立屬於自己面對難題的 SOP，朝著 Senior 工程師邁進。</li>
</ol>
<blockquote>
<p>「地獄」級別的任務會交由 Senior 工程師來做，畢竟如果任務難度完全超過 Junior 工程師的世界觀，讓他們來嘗試反而是浪費時間。</p>
</blockquote>
<hr>
<h2 id="四通常只有絕望的人才會珍惜他人的建議">四、通常只有絕望的人才會珍惜他人的建議<a class="h-anchor" href="#%e5%9b%9b%e9%80%9a%e5%b8%b8%e5%8f%aa%e6%9c%89%e7%b5%95%e6%9c%9b%e7%9a%84%e4%ba%ba%e6%89%8d%e6%9c%83%e7%8f%8d%e6%83%9c%e4%bb%96%e4%ba%ba%e7%9a%84%e5%bb%ba%e8%ad%b0" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>聽來的都是故事，自己走過的才叫經驗</p>
</blockquote>
<p>不過 Junior 工程師也可能在嘗試一切錯誤的方法後還是卡關，此時 Senior 工程師的任務就來了。</p>
<p>Senior 工程師要先判斷 Junior 工程師研究的方向是不是正確的，如果方向是正確，且只差臨門一腳，就給予適當的提示，讓他自己完成最後一步；但如果方向完全錯誤，則利用 <a href="https://deanlin.net/blog/202111/pair-programming/">Pair Programing</a> 的方式來讓他了解該怎麼完成。</p>
<p>一定要等 Junior 工程師用盡全力嘗試後再幫忙，如果 Senior 工程師太早出手相救，那 Junior 工程師永遠長不大；人不會珍惜直接給予的答案，只有在經過反覆思考與淬煉後，才了解這答案多來之不易。</p>
<p>這個道理就跟父母給你的建議常常被當耳邊風，但如果你花 10 萬塊去上一堂課會覺得講師說的話跟黃金一樣珍貴。</p>
<hr>
<h2 id="五筆者心得">五、筆者心得<a class="h-anchor" href="#%e4%ba%94%e7%ad%86%e8%80%85%e5%bf%83%e5%be%97" aria-label="這個段落的連結"></a></h2>
<p>過去都是把基礎的任務給 Junior 工程師、進階的任務給 Senior 工程師。因此筆者也發現不是每個 Junior 工程師都會去研究 Senior 工程師寫的程式。</p>
<p>會造成這樣的結果可能是因為任務難度與性質的不同，或是 Junior 工程師看不懂、覺得自己還不需要懂。</p>
<p>而這種反其道而行的任務分配就解決了這個問題，在強制 Junior 工程師突破舒適圈的同時，還讓 Senior 工程師有更多與 Junior 工程師溝通的時間，建立彼此的革命情感。</p>
<blockquote class="pullquote"><p>當然這套方案是否合適，還是要看公司 Senior 工程師是不是能夠順利解決這些卡住的問題，以及 Engineer Manager 能否為開發團隊爭取適當的時間。</p>
</blockquote>
<p><strong>如果你對目前的職涯感到迷茫，想從不同視角檢視自己的選擇，相信《<a href="https://www.tenlong.com.tw/products/9786264142083">工程師下班有約</a>》這本書能為你帶來靈感與啟發：</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202204/counterintuitive-task-assignment/images/counterintuitive-task-assignment-02.webp" width="1400" height="319" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

<pre tabindex="0"><code>下班有約系列文
▋ [前端]新手工程師容易卡住的問題
▋ [前端＆後端]工程師常犯的錯誤
▋ 讓開發團隊更好協作的方式
▋ 談談 Pair Programing
▋ 談談工程師的話語權
▋ 出社會後，新鮮人要及早知道的 5 件事
▋ 面試的性向測驗竟然準到讓人心裡發寒？
▋ 反其道而行的任務分配(本篇)
▋ 現在的 Daily Scrum 真的適合團隊嗎？
▋ 用低成本也能請到好員工？資深 HR 不想告訴你的秘密！
</code></pre>]]></content:encoded>
    </item>
    <item>
      <title>面試的性向測驗竟然準到讓人心裡發寒？── 下班有約系列文</title>
      <link>https://deanlin.net/blog/202204/personality-tests-in-interviews/</link>
      <pubDate>Fri, 01 Apr 2022 10:48:15 +0800</pubDate>
      <guid>https://deanlin.net/blog/202204/personality-tests-in-interviews/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>職涯成長</category>
      <description>許多企業會在面試時加入「性向測驗（人格測驗）」的環節，過去筆者認為這份測驗參考價值不大；沒想到在與一些 HR、用人主管聊天後，發現不少人把這份測驗當作求職者是否聘用的重要標準之一，今天我們就來聊聊這個話題吧。</description>
      <media:content url="https://deanlin.net/blog/202204/personality-tests-in-interviews/images/personality-tests-in-interviews-og_hu_16d168352b9da0f5.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>許多企業會在面試時加入「性向測驗（人格測驗）」的環節，過去筆者認為這份測驗參考價值不大；沒想到在與一些 HR、用人主管聊天後，發現不少人把這份測驗當作求職者是否聘用的重要標準之一，今天我們就來聊聊這個話題吧。</p>
<p><img src="https://deanlin.net/blog/202204/personality-tests-in-interviews/images/personality-tests-in-interviews-01.webp" width="1400" height="742" alt="面試的性向測驗竟然準到讓人心裡發寒？── 下班有約系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>大綱
一、為什麼有些人這麼重視這份測驗?
二、我要偽造自己的性格來獲取 Offer 嗎？
三、反映性向測驗的現實案例：我就是生來顛覆
四、反映性向測驗的現實案例：每個人都有自己的優點
五、總結
</code></pre><h2 id="一為什麼有些人這麼重視這份測驗">一、為什麼有些人這麼重視這份測驗?<a class="h-anchor" href="#%e4%b8%80%e7%82%ba%e4%bb%80%e9%ba%bc%e6%9c%89%e4%ba%9b%e4%ba%ba%e9%80%99%e9%ba%bc%e9%87%8d%e8%a6%96%e9%80%99%e4%bb%bd%e6%b8%ac%e9%a9%97" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>「我以為這個東西大家都是亂填的沒啥參考價值，但在部門物是人非後，發現它根本準到令人心寒。」 ── 一位歷經滄桑的主管悲嘆</p>
</blockquote>
<p><strong>通常受過傷的人才會特別重視這項測驗</strong>，有朋友就曾表示當組織誕生問題兒童時，他會先回去翻他入職時的性向測驗，此時往往會發現，這些「問題兒童」的誕生並非偶然。</p>
<p>性向測驗並非「玄學」而是「科學」，只要求職者用直覺去選擇答案，他就有相當大的參考價值。</p>
<blockquote class="pullquote"><p>跟用星座決定是否錄取的老闆相比，性向測驗實在科學太多了 XD</p>
</blockquote>
<hr>
<h2 id="二我要偽造自己的性格來獲取-offer-嗎">二、我要偽造自己的性格來獲取 Offer 嗎？<a class="h-anchor" href="#%e4%ba%8c%e6%88%91%e8%a6%81%e5%81%bd%e9%80%a0%e8%87%aa%e5%b7%b1%e7%9a%84%e6%80%a7%e6%a0%bc%e4%be%86%e7%8d%b2%e5%8f%96-offer-%e5%97%8e" aria-label="這個段落的連結"></a></h2>
<p>有部分心理系出身，或是對心理學有所研究的人，他們可以輕易地在性向測驗上偽造自己的性格。（筆者相信大部分的人都是善良且誠實的，這頂多算是潛意識的習慣？）</p>
<p>但除非他們連在面試現場的表現都能偽造的天衣無縫，不然肯定會被面試官、HR 覺得這個人怪怪的，而錄取「怪人」往往會給組織帶來許多未知的風險。</p>
<p>況且每間公司在不同職位上需要的人才不同，你怎麼能肯定自己偽造出來的性格就是該公司需要的？</p>
<p>如果每個求職者都表現出強大的積極性，那想要找穩紮穩打人才的公司就會很困擾。</p>
<p>性向測驗的結果沒有絕對的好壞，就是看你與面試公司的氣場是否合適。</p>
<blockquote>
<p>雖然話是這樣講，但大部分公司還是傾向打保守牌，如果受測者的「情緒穩定度、服從性」分數超級低，用人主管還是會好好評估的。</p>
</blockquote>
<hr>
<h2 id="三反映性向測驗的現實案例我就是生來顛覆">三、反映性向測驗的現實案例：我就是生來顛覆<a class="h-anchor" href="#%e4%b8%89%e5%8f%8d%e6%98%a0%e6%80%a7%e5%90%91%e6%b8%ac%e9%a9%97%e7%9a%84%e7%8f%be%e5%af%a6%e6%a1%88%e4%be%8b%e6%88%91%e5%b0%b1%e6%98%af%e7%94%9f%e4%be%86%e9%a1%9b%e8%a6%86" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>如果錄取一個不合適的人，影響到的可能是全公司的收益。</p>
</blockquote>
<p>在一個適合借酒澆愁的夜晚，擔任部門主管的朋友跟我分享了一個血淋淋的案例。</p>
<p>當時公司有個職位空缺太久，在一直找不到適合人選的狀態下，部門主管挑選了一個勉強堪用的求職者。</p>
<p>原本也沒期待她能夠有多大的輸出，只求能夠完成本分的事情就夠了；但隨著時間推移，組織內部的氣氛越來越奇怪。</p>
<p>直到某一天，<strong>她突然無預警的被開除</strong>，大家才知道裡面發生了一個怎麼樣的故事，也了解為什麼<strong>用錯了一個人會導致整個部門完全失去向心力。</strong></p>
<h3 id="step-1利用人喜歡聽八卦的本性">STEP 1：利用人喜歡聽八卦的本性<a class="h-anchor" href="#step-1%e5%88%a9%e7%94%a8%e4%ba%ba%e5%96%9c%e6%ad%a1%e8%81%bd%e5%85%ab%e5%8d%a6%e7%9a%84%e6%9c%ac%e6%80%a7" aria-label="這個段落的連結"></a></h3>
<p>在公司與人建立聯繫最快的方式就是聊八卦，而八卦的內容儘管無法確認真假，卻能潛移默化的影響一個人看待他人的目光。</p>
<p>最開始她先用無傷大雅的八卦與同事建立聯繫，並且製造各種巧合讓這些八卦一一被印證，讓大家相信她的情報是有價值的。</p>
<h3 id="step-2告訴你無法與本人確認真假的八卦">STEP 2：告訴你無法與本人確認真假的八卦<a class="h-anchor" href="#step-2%e5%91%8a%e8%a8%b4%e4%bd%a0%e7%84%a1%e6%b3%95%e8%88%87%e6%9c%ac%e4%ba%ba%e7%a2%ba%e8%aa%8d%e7%9c%9f%e5%81%87%e7%9a%84%e5%85%ab%e5%8d%a6" aria-label="這個段落的連結"></a></h3>
<p>而下一步，她向團隊成員散播不利於所有人的八卦消息，而這些八卦訊息你是很難跟本人求證的，舉例：</p>
<ol>
<li>在主管最近無理由的挺她、幫她說話的狀況下；跟你說主管對她有意思，還想要約她出去玩，並附上對話截圖。</li>
<li>如果發現其他女同事跟大家相處愉快，就跟主管打小報告說這個同事作風不檢點，想用不正當手段在職場生存，害她被排擠。</li>
<li>用誘導的提問方式讓你說其他人的壞話，並將其錄音、截圖給本人。</li>
</ol>
<p>如果你是下屬，會不會懷疑主管跟她有不可告人的秘密？</p>
<p>如果你是主管，會不會用不一樣的角度來解讀這個女同事的所作所為？</p>
<p>如果你收到錄音、截圖，會不會與他人產生猜忌？</p>
<blockquote>
<p>上面這些涉及個人隱私的內容，相信大多數人都不可能與本人求證。</p>
</blockquote>
<h3 id="step-3用資訊不對等製造內部糾紛">STEP 3：用資訊不對等製造內部糾紛<a class="h-anchor" href="#step-3%e7%94%a8%e8%b3%87%e8%a8%8a%e4%b8%8d%e5%b0%8d%e7%ad%89%e8%a3%bd%e9%80%a0%e5%85%a7%e9%83%a8%e7%b3%be%e7%b4%9b" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>在心態改變後，一句再普通不過的話語都可能被視為挑釁。</p>
</blockquote>
<p>經歷了上面的步驟後，已經有許多成員被影響；而那些沒被影響的成員更慘，因為被重點抹黑。</p>
<p>團隊成員不信任彼此的狀態下，只要小小的摩擦，就足以產生燎原的野火。</p>
<h3 id="故事尾聲">故事尾聲<a class="h-anchor" href="#%e6%95%85%e4%ba%8b%e5%b0%be%e8%81%b2" aria-label="這個段落的連結"></a></h3>
<p>點火的人就如開頭所說，事跡敗露後被開除了，但她給部門製造的傷害除了績效上的損失外，間接導致的部門形象受損、人才流失的影響更為深遠。</p>
<p>後來朋友回去看這個人的性向測驗，<strong>發現她在「情緒穩定、服從性」的指標接近為 0</strong>。</p>
<hr>
<h2 id="四反映性向測驗的現實案例每個人都有自己的優點">四、反映性向測驗的現實案例：每個人都有自己的優點<a class="h-anchor" href="#%e5%9b%9b%e5%8f%8d%e6%98%a0%e6%80%a7%e5%90%91%e6%b8%ac%e9%a9%97%e7%9a%84%e7%8f%be%e5%af%a6%e6%a1%88%e4%be%8b%e6%af%8f%e5%80%8b%e4%ba%ba%e9%83%bd%e6%9c%89%e8%87%aa%e5%b7%b1%e7%9a%84%e5%84%aa%e9%bb%9e" aria-label="這個段落的連結"></a></h2>
<p>上面的案例是鬼故事，接下來這個案例應該就是「天生我材必有用」？</p>
<p>朋友公司有個成員的做事速度較慢，因此他把這個情況向主管匯報，希望主管可以跟他溝通一下，不要拖到大家的進度。</p>
<p>不過主管在了解狀況後並沒有選擇跟做事較慢的組員溝通，而是拿出了性向測驗結果，跟朋友說道：「其實他做事比較慢這點我很早就發現了，也曾經想著有沒有要去跟他溝通；<strong>但在發現他性向測驗的敏捷性是 0，可是細緻性是接近滿分後，我思考良久，就沒有多說什麼了</strong>；畢竟組織中如果每個人都在往前衝，那也是很危險的一件事情。」</p>
<blockquote>
<p>「一個方案的好壞，不要只看激動人心的部分，反而要注意風險的控制。 」— 理想之城</p>
</blockquote>
<hr>
<h2 id="五總結">五、總結<a class="h-anchor" href="#%e4%ba%94%e7%b8%bd%e7%b5%90" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p>在性向測驗時做自己，比較有機會進入與自己契合的工作環境。</p>
</blockquote>
<p>技術、知識都可以透過後天教育和學習成長，但人的性格是長期養成出來的。</p>
<p>想要改變一個人的性格極為困難，就算當下勉強改了，也有很高的機率故態復萌（就像渣男劈腿一次的通常會劈腿第二次？）。</p>
<p>與其戴上面具，改變自己的性格去工作，還不如去找一份跟自己性格匹配的工作。</p>
<blockquote class="pullquote"><p>再次提醒，性向測驗的結果沒有絕對的好壞；勉強自己的後果可能會導致被放到不對的位置。</p>
</blockquote>
<p><strong>如果你對目前的職涯感到迷茫，想從不同視角檢視自己的選擇，相信《<a href="https://www.tenlong.com.tw/products/9786264142083">工程師下班有約</a>》這本書能為你帶來靈感與啟發：</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202204/personality-tests-in-interviews/images/personality-tests-in-interviews-02.webp" width="1400" height="319" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

<pre tabindex="0"><code>下班有約系列文
▋ [前端]新手工程師容易卡住的問題
▋ [前端＆後端]工程師常犯的錯誤
▋ 讓開發團隊更好協作的方式
▋ 談談 Pair Programing
▋ 談談工程師的話語權
▋ 出社會後，新鮮人要及早知道的 5 件事
▋ 面試的性向測驗竟然準到讓人心裡發寒？(本篇)
▋ 反其道而行的任務分配
▋ 現在的 Daily Scrum 真的適合團隊嗎？
▋ 用低成本也能請到好員工？資深 HR 不想告訴你的秘密！
</code></pre>]]></content:encoded>
    </item>
    <item>
      <title>[前端＆後端]工程師常犯的錯誤 — 下班有約系列文</title>
      <link>https://deanlin.net/blog/202202/common-frontend-backend-mistakes/</link>
      <pubDate>Wed, 23 Feb 2022 17:53:45 +0800</pubDate>
      <guid>https://deanlin.net/blog/202202/common-frontend-backend-mistakes/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>筆者跟擔任 Tech Lead 的朋友聊天時，發現在幫新人 Code Review、Code Refactoring、Bug Fix 時遇到了許多類似的問題，針對這個部分我安排了 3 篇文章做講解，今天這篇文章我挑選了幾個工程師常犯的錯誤來分享。</description>
      <media:content url="https://deanlin.net/blog/202202/common-frontend-backend-mistakes/images/common-frontend-backend-mistakes-og_hu_aaf049d3404ffd4c.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>筆者跟擔任 Tech Lead 的朋友聊天時，發現在幫新人 Code Review、Code Refactoring、Bug Fixing 時遇到了許多類似的問題，針對這個部分我安排了 3 篇文章做講解，今天這篇文章我挑選了幾個工程師常犯的錯誤來分享。</p>
<p><img src="https://deanlin.net/blog/202202/common-frontend-backend-mistakes/images/common-frontend-backend-mistakes-01.webp" width="1400" height="745" alt="\[前端＆後端\]工程師常犯的錯誤 — 下班有約系列文（圖 1）" fetchpriority="high" decoding="async"></p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span>大綱
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 保留太多無用的 console.log
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 沒有註明輸出的 console.log 要做什麼事
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 忽視 Console 吐出的警告<span style="color:#f85149">、</span>錯誤
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 不同函式共用<span style="color:#f85149">「</span>命名相同的全域變數<span style="color:#f85149">」</span>
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 大量存取不必要的 API
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 將很多用不到程式碼註解而非刪除
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 沒寫註解<span style="color:#f85149">，</span>或是寫沒有意義的註解
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> Copy <span style="color:#ff7b72;font-weight:bold">&amp;</span> Paste 後<span style="color:#f85149">，</span>Function<span style="color:#f85149">、</span>Variable 命名沒有改
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 沒有寫 <span style="color:#ff7b72">try</span> <span style="color:#ff7b72">catch</span>
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 在他人協助下完成功能後<span style="color:#f85149">，</span>沒有真正了解原理
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 沒有做 Refactoring
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 詢問別人前沒有自己嘗試
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 詢問的問題不夠精確
</span></span><span style="display:flex;"><span><span style="color:#f85149">➤</span> 管理者權限與使用者權限混在一起
</span></span></code></pre></div><h2 id="-保留太多無用的-consolelog">保留太多無用的 console.log<a class="h-anchor" href="#-%e4%bf%9d%e7%95%99%e5%a4%aa%e5%a4%9a%e7%84%a1%e7%94%a8%e7%9a%84-consolelog" aria-label="這個段落的連結"></a></h2>
<p>為了追蹤資料流向，我們會用 console.log 來確認程式是否依照我們的想法在執行；但有不少人只會一直增加新的 console.log，而不把已經不需要的 console.log 給移除。</p>
<h2 id="-沒有註明輸出的-consolelog-要做什麼事">沒有註明輸出的 console.log 要做什麼事<a class="h-anchor" href="#-%e6%b2%92%e6%9c%89%e8%a8%bb%e6%98%8e%e8%bc%b8%e5%87%ba%e7%9a%84-consolelog-%e8%a6%81%e5%81%9a%e4%bb%80%e9%ba%bc%e4%ba%8b" aria-label="這個段落的連結"></a></h2>
<p>筆者曾在按下 F12 開啟開發人員工具幫人 debug 時，看到 Console 這個分頁下印出一堆 API 回傳的 response data，但命名完全一樣都叫「result」，這樣我完全無法知道這些 result 是由哪個 API 回傳的ＱＱ</p>
<p><img src="https://deanlin.net/blog/202202/common-frontend-backend-mistakes/images/common-frontend-backend-mistakes-02.webp" width="862" height="433" alt="沒有註明輸出的 console.log 要做什麼事（圖 2）" loading="lazy" decoding="async"></p>
<p>不然就是很多意義不明只有自己才知道是什麼意思的 console.log（這類型的往往一個月後連本人都不知道在做什麼…）</p>
<p><img src="https://deanlin.net/blog/202202/common-frontend-backend-mistakes/images/common-frontend-backend-mistakes-03.webp" width="862" height="509" alt="沒有註明輸出的 console.log 要做什麼事（圖 3）" loading="lazy" decoding="async"></p>
<h2 id="-忽視-console-吐出的警告錯誤">忽視 Console 吐出的警告、錯誤<a class="h-anchor" href="#-%e5%bf%bd%e8%a6%96-console-%e5%90%90%e5%87%ba%e7%9a%84%e8%ad%a6%e5%91%8a%e9%8c%af%e8%aa%a4" aria-label="這個段落的連結"></a></h2>
<p>有些網頁看似運行的很正常，但在按下 F12 開啟開發人員工具後，你會看到一排讓人血壓上升的紅色 Error Message，如果沒有及時處理遲早有一天會業力引爆的。</p>
<p><img src="https://deanlin.net/blog/202202/common-frontend-backend-mistakes/images/common-frontend-backend-mistakes-04.webp" width="862" height="712" alt="忽視 Console 吐出的警告、錯誤（圖 4）" loading="lazy" decoding="async"></p>
<h2 id="-不同函式共用命名相同的全域變數">不同函式共用「命名相同的全域變數」<a class="h-anchor" href="#-%e4%b8%8d%e5%90%8c%e5%87%bd%e5%bc%8f%e5%85%b1%e7%94%a8%e5%91%bd%e5%90%8d%e7%9b%b8%e5%90%8c%e7%9a%84%e5%85%a8%e5%9f%9f%e8%ae%8a%e6%95%b8" aria-label="這個段落的連結"></a></h2>
<p>像是 Vue 框架下用來儲存變數資訊的 「Vuex」，裡面 State 的資訊是可以在多個頁面共同使用，下面舉例幾個不夠謹慎會造成的問題：</p>
<ul>
<li>如果在 loading 資料前沒有清空先前的 state 資訊，會導致進入頁面時會閃現上一次進入的資料。</li>
<li>如果把第幾頁(page)、分頁筆數(per-page)這些參數在多個頁面共用，那你就會看到有些頁面明明是第一次進入，卻跳轉到其他頁數。</li>
</ul>
<h2 id="-大量存取不必要的-api">大量存取不必要的 API<a class="h-anchor" href="#-%e5%a4%a7%e9%87%8f%e5%ad%98%e5%8f%96%e4%b8%8d%e5%bf%85%e8%a6%81%e7%9a%84-api" aria-label="這個段落的連結"></a></h2>
<p>這裡舉出兩個常見的例子：</p>
<ul>
<li>登入後就「一次呼叫所有的 API」，但許多 API 回傳的資料可能使用者根本還用不到。</li>
</ul>
<blockquote>
<p>這邊提醒一下，適當的「預載」可以增加使用者體驗，但如果在系統首頁就全部載入，除了會消耗使用者的資源外，一旦大量使用者同時上線，對伺服器端會造成很大的壓力。</p>
</blockquote>
<ul>
<li>有些搜尋功能會隨著使用者填入的文字去呼叫 API 來即時顯示搜尋結果或是建議關鍵字（ex：Google），但如果沒有把呼叫 API 的時間間隔設定好（debounceTime），使用者又不停更改搜尋列文字，那就會呼叫非常多不必要的 API。</li>
</ul>
<h2 id="-將用不到程式碼註解而非刪除">將用不到程式碼註解而非刪除<a class="h-anchor" href="#-%e5%b0%87%e7%94%a8%e4%b8%8d%e5%88%b0%e7%a8%8b%e5%bc%8f%e7%a2%bc%e8%a8%bb%e8%a7%a3%e8%80%8c%e9%9d%9e%e5%88%aa%e9%99%a4" aria-label="這個段落的連結"></a></h2>
<p>在開發階段有時會想到很多的解決方案，因為不確定哪個效能較高，所以就把每個演算法實現出來。</p>
<p>但有些人在決定使用某個解決方案後，依舊沒把其他的方案刪除，這樣的做法容易造成未來維護的困難度。</p>
<h2 id="-沒寫註解或是寫沒有意義的註解">沒寫註解，或是寫沒有意義的註解<a class="h-anchor" href="#-%e6%b2%92%e5%af%ab%e8%a8%bb%e8%a7%a3%e6%88%96%e6%98%af%e5%af%ab%e6%b2%92%e6%9c%89%e6%84%8f%e7%be%a9%e7%9a%84%e8%a8%bb%e8%a7%a3" aria-label="這個段落的連結"></a></h2>
<p>雖然有神人說過：最好的註解就是程式碼本身</p>
<p>但我想：「<strong>絕大多數的人都難以到達這個境界，所以要乖乖地寫註解ＸＤ」</strong></p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#ff7b72">let</span> mode <span style="color:#ff7b72;font-weight:bold">=</span> <span style="color:#a5d6ff">0</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic">// do somethings ...
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (mode <span style="color:#ff7b72;font-weight:bold">===</span> <span style="color:#a5d6ff">0</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#8b949e;font-style:italic">// excute logic 1
</span></span></span><span style="display:flex;"><span>} <span style="color:#ff7b72">else</span> <span style="color:#ff7b72">if</span> (mode <span style="color:#ff7b72;font-weight:bold">===</span> <span style="color:#a5d6ff">1</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#8b949e;font-style:italic">// excute logic 2
</span></span></span><span style="display:flex;"><span>} <span style="color:#ff7b72">else</span> <span style="color:#ff7b72">if</span> (mode <span style="color:#ff7b72;font-weight:bold">===</span> <span style="color:#a5d6ff">2</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#8b949e;font-style:italic">// excute logic 3
</span></span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/463d3dc91bc4e9789a29bcc4323560d9" rel="noopener">bad_remark_example.js</a>（GitHub Gist）</p>
<p>像是上面這段 Code，我們可以知道 mode 這個變數應該是應用在某個狀態的判斷上；但具體在哪個地方使用、總共有哪些狀態、各自代表什麼意義，在沒有註解的狀態下只能一行一行的閱讀，沒辦法第一時間理解程式。</p>
<h3 class="h-nomark" id="-註解的好處">👍 註解的好處<a class="h-anchor" href="#-%e8%a8%bb%e8%a7%a3%e7%9a%84%e5%a5%bd%e8%99%95" aria-label="這個段落的連結"></a></h3>
<ol>
<li>交代前因後果：為什麼這樣寫?遇到了什麼困難?解決了什麼問題?</li>
<li>作為文件說明：有些技術是需要被學習後才能夠看得懂的(ex:引入的模組、套件)，你的註解能讓他快速理解這些工具怎麼使用</li>
</ol>
<h3 class="h-nomark" id="-請不要有註解如下">🙅 請不要有註解如下<a class="h-anchor" href="#-%e8%ab%8b%e4%b8%8d%e8%a6%81%e6%9c%89%e8%a8%bb%e8%a7%a3%e5%a6%82%e4%b8%8b" aria-label="這個段落的連結"></a></h3>
<ol>
<li>毫無意義的牢騷(ex:我好崩潰啊，這段程式我寫了一個禮拜…)</li>
<li>把註解當成版本控制(ex:2020/08/23 完成此函式)</li>
<li>說明這段程式是誰寫的(簽名檔)</li>
<li>把舊的程式碼註解起來怕以後會用到(但通常再也不會用到，而且這個問題用版控就能解決)</li>
</ol>
<h2 id="-copy--paste-後functionvariable-命名沒有改">Copy &amp; Paste 後，Function、Variable 命名沒有改<a class="h-anchor" href="#-copy--paste-%e5%be%8cfunctionvariable-%e5%91%bd%e5%90%8d%e6%b2%92%e6%9c%89%e6%94%b9" aria-label="這個段落的連結"></a></h2>
<p>如果寫專案時發現之前做過類似的功能，我們會複製過來再做微調，以此加快開發的速度。</p>
<p>但<strong>請修改 Function、Variable 命名！</strong>這不會花你太多時間，但在未來當你需要維護專案時，你會感謝現在的自己。</p>
<blockquote>
<p>筆者之前曾在幫忙 Debug 時，於Ａ系統裡面看到一堆Ｂ系統的命名，當下還以為自己開錯專案了…</p>
</blockquote>
<h2 id="-沒有寫-try-catch">沒有寫 try catch<a class="h-anchor" href="#-%e6%b2%92%e6%9c%89%e5%af%ab-try-catch" aria-label="這個段落的連結"></a></h2>
<p>程式在缺乏 try-catch 的機制下是非常脆弱的，只要發生例外事件就容易崩潰。</p>
<p>如果你直接假定 API 只會回傳正確的資訊，而沒有撰寫 try-catch 去捕捉可能的 400、500 系列錯誤，就很可能導致系統許多行為錯誤如：</p>
<ol>
<li>跳轉到無權限的頁面</li>
<li>程式進入無限迴圈</li>
<li>瘋狂 Call 某隻 API 直到變成 429 錯誤（Too Many Requests）</li>
</ol>
<h2 id="-在他人協助下完成功能後沒有真正了解原理">在他人協助下完成功能後，沒有真正了解原理<a class="h-anchor" href="#-%e5%9c%a8%e4%bb%96%e4%ba%ba%e5%8d%94%e5%8a%a9%e4%b8%8b%e5%ae%8c%e6%88%90%e5%8a%9f%e8%83%bd%e5%be%8c%e6%b2%92%e6%9c%89%e7%9c%9f%e6%ad%a3%e4%ba%86%e8%a7%a3%e5%8e%9f%e7%90%86" aria-label="這個段落的連結"></a></h2>
<p>我相信大部分的人都是樂於幫助別人解決問題的，但同時也相信，沒有人希望再次被「相同的問題」打擾。</p>
<p>我這邊強烈建議請他人協助問題前，先 commit 一版，這樣無論對方成功還是失敗，你都有一個記錄在。</p>
<p>如果對方成功解決這個問題，一定找時間回到當時 commit 的那版，用自己的邏輯把功能完成；<strong>請記住，別人完成的任務不會自動成為你的知識。</strong></p>
<h2 id="-沒有做-refactoring">沒有做 Refactoring<a class="h-anchor" href="#-%e6%b2%92%e6%9c%89%e5%81%9a-refactoring" aria-label="這個段落的連結"></a></h2>
<p>演算法相關的 Refactor 有一定的難度，但有一些很基礎的 Refactor 我認為是有必要的，像是變數命名這一塊。</p>
<p>我們先來看一個不好的範例：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#ff7b72">let</span> result <span style="color:#ff7b72;font-weight:bold">=</span> responseData;
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>]) {
</span></span><span style="display:flex;"><span>  <span style="color:#ff7b72">if</span> (<span style="color:#a5d6ff">&#34;check_in&#34;</span> <span style="color:#ff7b72">in</span> result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>] <span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>].check_in <span style="color:#ff7b72;font-weight:bold">!==</span> <span style="color:#79c0ff">null</span>) {
</span></span><span style="display:flex;"><span>    state.check_in <span style="color:#ff7b72;font-weight:bold">=</span> result[<span style="color:#a5d6ff">0</span>].check_in.toString();
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>]) {
</span></span><span style="display:flex;"><span>  <span style="color:#ff7b72">if</span> (<span style="color:#a5d6ff">&#34;check_out&#34;</span> <span style="color:#ff7b72">in</span> result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>] <span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>].check_out <span style="color:#ff7b72;font-weight:bold">!==</span> <span style="color:#79c0ff">null</span>) {
</span></span><span style="display:flex;"><span>    state.check_out <span style="color:#ff7b72;font-weight:bold">=</span> result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>].check_out.toString();
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/3c6c9d59d698b8738771eee07056b8fd" rel="noopener">need_refactor.js</a>（GitHub Gist）</p>
<p>上面這個是要取得回傳的「最後一筆」資料做邏輯處理，但是全部都使用「<strong>result[result.length -1]</strong>」來表示，相信大家都會看得有點眼花。</p>
<p>下面我們做個簡單的 Refactor，看起來就會舒服很多：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#ff7b72">let</span> result <span style="color:#ff7b72;font-weight:bold">=</span> [];
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">let</span> last_record <span style="color:#ff7b72;font-weight:bold">=</span> result[result.length <span style="color:#ff7b72;font-weight:bold">-</span> <span style="color:#a5d6ff">1</span>];
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (last_record) {
</span></span><span style="display:flex;"><span>  <span style="color:#ff7b72">if</span> (<span style="color:#a5d6ff">&#34;check_in&#34;</span> <span style="color:#ff7b72">in</span> last_record <span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> last_record.check_in <span style="color:#ff7b72;font-weight:bold">!==</span> <span style="color:#79c0ff">null</span>) {
</span></span><span style="display:flex;"><span>    state.check_in <span style="color:#ff7b72;font-weight:bold">=</span> last_record.check_in.toString();
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">if</span> (last_record) {
</span></span><span style="display:flex;"><span>  <span style="color:#ff7b72">if</span> (<span style="color:#a5d6ff">&#34;check_out&#34;</span> <span style="color:#ff7b72">in</span> last_record <span style="color:#ff7b72;font-weight:bold">&amp;&amp;</span> last_record.check_out <span style="color:#ff7b72;font-weight:bold">!==</span> <span style="color:#79c0ff">null</span>) {
</span></span><span style="display:flex;"><span>    state.check_out <span style="color:#ff7b72;font-weight:bold">=</span> last_record.check_out.toString();
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p class="code-source">原始碼：<a href="https://gist.github.com/dean9703111/f9afe9487cbf14ddec3b92a61335f2f5" rel="noopener">after_refactor.js</a>（GitHub Gist）</p>
<h2 id="-詢問別人前沒有自己嘗試">詢問別人前沒有自己嘗試<a class="h-anchor" href="#-%e8%a9%a2%e5%95%8f%e5%88%a5%e4%ba%ba%e5%89%8d%e6%b2%92%e6%9c%89%e8%87%aa%e5%b7%b1%e5%98%97%e8%a9%a6" aria-label="這個段落的連結"></a></h2>
<p>有些人在遇到問題時沒有先從網路找資料，而是遇到問題先問同事、前輩。</p>
<p>儘管這樣可以最快速得到解答，但卻少了很多自我思考的部分，長期來講對工程師職涯是非常不健康的。</p>
<h2 id="-詢問的問題不夠精確">詢問的問題不夠精確<a class="h-anchor" href="#-%e8%a9%a2%e5%95%8f%e7%9a%84%e5%95%8f%e9%a1%8c%e4%b8%8d%e5%a4%a0%e7%b2%be%e7%a2%ba" aria-label="這個段落的連結"></a></h2>
<p>有時會收到主旨模糊的問題，像是：「這個搜尋功能常常會 fail，可以幫我看看嗎？」</p>
<p>如果可以，收到問題的人會希望問題敘述微調一下：「在人資系統中，我如果在職員列表頁面的搜尋條件中加入部門篩選，會發現搜尋出的結果不合預期，有時會找出其他部門的人員，可以幫我看一下是不是資料庫語法錯誤呢？」</p>
<blockquote>
<p><strong>結構為</strong>：哪個系統-&gt;哪個頁面-&gt;你調整了哪些參數-&gt;錯誤結果為何-&gt;初步判定錯誤來源</p>
</blockquote>
<h2 id="-管理者權限與使用者權限混在一起">管理者權限與使用者權限混在一起<a class="h-anchor" href="#-%e7%ae%a1%e7%90%86%e8%80%85%e6%ac%8a%e9%99%90%e8%88%87%e4%bd%bf%e7%94%a8%e8%80%85%e6%ac%8a%e9%99%90%e6%b7%b7%e5%9c%a8%e4%b8%80%e8%b5%b7" aria-label="這個段落的連結"></a></h2>
<p>很多系統都會分成前台（一般使用者）以及後台（管理者），有時後端為了增加程式共用率，而讓他們使用同一隻 API 存取資料，如果權限有設計好那沒問題，但如果沒設計好可能就出大包了。</p>
<p>以人資系統來說，假設有一隻 API 是用來存取個人資訊的，API 格式為：「users/{user}」</p>
<p>假使把這隻 API 共用，一般使用者透過修改中間的「user id」就有可能看到其他人的隱私資訊，這在資訊安全上是非常危險的。</p>
<p>因此建議將一般使用者與管理者的 API 切割清楚，避免讓使用者看到權限外的資料。</p>
<hr>
<blockquote class="pullquote"><p>筆者曾經犯過文章中許多錯誤，沒有人一開始就是強者，但至少要走在變強的道路上。</p>
</blockquote>
<p><strong>如果你對目前的職涯感到迷茫，想從不同視角檢視自己的選擇，相信《<a href="https://www.tenlong.com.tw/products/9786264142083">工程師下班有約</a>》這本書能為你帶來靈感與啟發：</strong></p>
<figure class="figure"><img src="https://deanlin.net/blog/202202/common-frontend-backend-mistakes/images/common-frontend-backend-mistakes-05.webp" width="1400" height="319" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

<pre tabindex="0"><code>下班有約系列文
▋ [前端]新手工程師容易卡住的問題
▋ [前端＆後端]工程師常犯的錯誤(本篇)
▋ 讓開發團隊更好協作的方式
▋ 談談 Pair Programing
▋ 談談工程師的話語權
▋ 出社會後，新鮮人要及早知道的 5 件事
▋ 面試的性向測驗竟然準到讓人心裡發寒？
▋ 反其道而行的任務分配
▋ 現在的 Daily Scrum 真的適合團隊嗎？
▋ 用低成本也能請到好員工？資深 HR 不想告訴你的秘密！
</code></pre>]]></content:encoded>
    </item>
  </channel>
</rss>
