<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Neil</title>
    <description>The latest articles on DEV Community by Neil (@neilskilltree).</description>
    <link>https://dev.to/neilskilltree</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1274296%2Fc0bb8ca3-929e-4b64-bc8d-ab2499617000.png</url>
      <title>DEV Community: Neil</title>
      <link>https://dev.to/neilskilltree</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/neilskilltree"/>
    <language>en</language>
    <item>
      <title>Python 熱門套件的前 10 名</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 31 May 2024 01:50:40 +0000</pubDate>
      <link>https://dev.to/neilskilltree/python-re-men-tao-jian-de-qian-10-ming-1lc9</link>
      <guid>https://dev.to/neilskilltree/python-re-men-tao-jian-de-qian-10-ming-1lc9</guid>
      <description>&lt;p&gt;本篇我將會介紹 Python 熱門套件的前 10 名，下面表格是收集到的數據：&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w023d7twow1n9s47cmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7w023d7twow1n9s47cmp.png" alt="Image description" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;頭兩個 boto3 和 botocore 都是與亞馬遜的雲端服務平台 AWS 相關的套件，允許用戶與其上的服務進行互動。&lt;/p&gt;

&lt;p&gt;然而，我並不建議新手們在初期就學習這類套件，其中一個原因是雲端技術相對複雜。Python 新手們常犯的錯誤就是一次接觸兩種（或以上）的技術，最終只會得到邯鄲學步的結果。&lt;/p&gt;

&lt;p&gt;接下來的 urllib3 和 requests 是進行網頁抓取或透過 HTTP API（一種呼叫另一台機器上的程式/函式的方法）與其他機器互動的理想選擇。&lt;/p&gt;

&lt;p&gt;不過別被 urllib3 的說明誤導了，雖然號稱 user-friendly，但在 requests 誕生之前我也被它苦毒許久⋯⋯艱澀難懂，有點像是以前大學時寫網路 socket 程式般的難受。因此我建議直接從 requests 下手即可。&lt;/p&gt;

&lt;p&gt;其他包括 wheel，一個打包 Python 套件的工具；certifi，用於驗證 SSL 憑證和 TLS 主機；typing-extensions，處理 Python 型別；idna，用於處理 IDNA 網路通訊協定；setuptools 也是與套件打包有關；以及 charset-normalizer，用於偵測和轉換字元編碼。&lt;/p&gt;

&lt;p&gt;這些套件涉及較專業的技術細節，對初學者來說可能較難直接應用，因此可以先將心思放在更重要的套件上面，比如說 requests。&lt;/p&gt;

&lt;p&gt;從這樣的介紹中，你可能已經注意到，雖然 Python 有超過 50 萬個套件，我們日常實際會用到的只是其中的一小部分。而且如果根據領域再進行細分，實際需要學習的套件數量就更少了。這樣一想，學習 Python 套件是不是似乎沒有想象中那麼困難了呢？&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>把 ChatGPT 當成程式助手可能反倒讓你陷入困境</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 31 May 2024 01:49:40 +0000</pubDate>
      <link>https://dev.to/neilskilltree/ba-chatgpt-dang-cheng-cheng-shi-zhu-shou-ke-neng-fan-dao-rang-ni-xian-ru-kun-jing-46f0</link>
      <guid>https://dev.to/neilskilltree/ba-chatgpt-dang-cheng-cheng-shi-zhu-shou-ke-neng-fan-dao-rang-ni-xian-ru-kun-jing-46f0</guid>
      <description>&lt;p&gt;我能理解為何你會相信它是一個助手，因為連我自己一開始也是這麼被「教育」的。現今的媒體和 YouTuber 們都是這樣在誇讚這些新興的 AI 工具，宣稱它們無所不能，甚至預言許多工作（尤其是我們程式設計師的職位）將被取代。&lt;/p&gt;

&lt;p&gt;但我想先請你回想一下與它互動時的情形。你是否每次都必須費盡心思拼湊出那些 AI 專家們反覆強調的「詠唱咒語」，希望能像施展魔法一般，神奇地憑空變出完美的成品？&lt;/p&gt;

&lt;p&gt;如果它真如主流所言無所不能，且已推出超過一年，那理應能直接理解你的需求，無需所謂的「咒語」。當 Google、YouTube 和 Facebook 能如讀心術般預測你的需求，精準投放廣告時，為何ChatGPT卻做不到？&lt;/p&gt;

&lt;p&gt;此外，在 ChatGPT 初期，不少網紅專家曾浮誇的說它能迅速讓任何零基礎的人學會任何技能。那為何你現在還是個一直卡關的 Python 新手？&lt;/p&gt;

&lt;p&gt;那麼，要如何看待 ChatGPT 所扮演的角色？又要怎樣正確地與之互動？讓我用上週的一個例子來說明它的真正角色。&lt;/p&gt;

&lt;p&gt;當我在研究如何獲得熱門 Python 套件的下載量時，我利用 ChatGPT 來理解 BigQuery 的文件，並幫我生成一條可以在 PyPI 資料庫查詢相關資訊的 SQL 指令。&lt;/p&gt;

&lt;p&gt;執行它的第一條指令時，我無腦的複製貼上，然後就直接遇到了錯誤，原因是它沒有正確理解 PyPI 資料庫表格的格式，導致欄位名稱錯誤。儘管它辨識出了表格中的兩個關鍵欄位，但不知為何在日期欄位上出了錯。&lt;/p&gt;

&lt;p&gt;我指出了它的錯誤，經過幾次修正後，最終得到了正確的查詢結果。這讓我意識到，我的角色更像是「主管」，而它則像是「員工」。我負責指揮它的動作，並在它犯錯或未達預期時進行糾正。透過彼此長處的互補，本來需要數天完成的工作，在不到兩小時內便完美完成。這就是我們應該與這類 AI 工具應有的互動與合作方式。&lt;/p&gt;

&lt;p&gt;現在你知道了新的思維方式來看待這些 AI 工具，你還會像以前一樣把它當成「助手」，卻過度依賴它，反倒失去了自我思考的能力嗎？還是你會調整自己的角色，以「領導者」的身份來引導和合作？&lt;/p&gt;

&lt;p&gt;歡迎在下方分享你的感想和體悟！&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>如何取得 PyPI 上所有註冊的套件</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 31 May 2024 01:48:34 +0000</pubDate>
      <link>https://dev.to/neilskilltree/ru-he-qu-de-pypi-shang-suo-you-zhu-ce-de-tao-jian-38cg</link>
      <guid>https://dev.to/neilskilltree/ru-he-qu-de-pypi-shang-suo-you-zhu-ce-de-tao-jian-38cg</guid>
      <description>&lt;p&gt;根據 PEP 503 (Simple Repository API) 文件裡的說明，我們可以透過 &lt;a href="https://pypi.org/simple/"&gt;https://pypi.org/simple/&lt;/a&gt; 這支 API 來取得所有登記在 PyPI 之下的 Python 套件。當我們向這個 API 發出請求後， 便可得到類似下面的回應：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;body&amp;gt;
    &amp;lt;a href="/frob/"&amp;gt;frob&amp;lt;/a&amp;gt;
    &amp;lt;a href="/spamspamspam/"&amp;gt;spamspamspam&amp;lt;/a&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;這是一個 HTML 網頁的寫法，其中 href 之後的文字，例如 /frob/ 或 /spamspamspam/，顯示了該套件的詳細資訊所在的位置，中間的字串是該套件的標準化名稱；而在角括弧中間的文字，例如 frob 或 spamspamspam，則是套件的原始名稱。&lt;/p&gt;

&lt;p&gt;因此我們就可以寫一支簡單的 shell script 來取得這份 HTML 的內容：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl -s https://pypi.org/simple/
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;meta name="pypi:repository-version" content="1.1"&amp;gt;
    &amp;lt;title&amp;gt;Simple index&amp;lt;/title&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
&amp;lt;a href="/simple/0/"&amp;gt;0&amp;lt;/a&amp;gt;
&amp;lt;a href="/simple/0-0/"&amp;gt;0-._.-._.-._.-._.-._.-._.-0&amp;lt;/a&amp;gt;
&amp;lt;a href="/simple/000/"&amp;gt;000&amp;lt;/a&amp;gt;
…
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;為了更有效地篩選資訊，我們增加過濾條件，只保留含有 href 的項目：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl -s https://pypi.org/simple/ | grep -Eo 'href="[^"]+"'
href="/simple/0/"
href="/simple/0-0/"
href="/simple/000/"
href="/simple/00000/"
href="/simple/0000000/"
href="/simple/00000000/"
href="/simple/000000000000000000000000000000000000000000000000000000000/"
href="/simple/00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/"
href="/simple/0-0-1/"
href="/simple/00101s/"
…
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;接著，我們移除 href、simple 以及其他符號，只留下標準化名稱：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl -s https://pypi.org/simple/ | grep -Eo 'href="[^"]+"' | awk -F '/' '{print $3}'
0
0-0
000
00000
0000000
00000000
000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0-0-1
00101s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;這樣我們便能取得所有在 PyPI 上登記的套件。&lt;/p&gt;

&lt;p&gt;為了確認我們拿到的列表準確無誤，再進行一道處理程序：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ curl -s https://pypi.org/simple/ | grep -Eo 'href="[^"]+"' | awk -F '/' '{print $3}' | wc -l
  534413
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;這數字與 PyPI 官網上的非常接近，大工告成！&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>探索 Python 套件的啟程</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 31 May 2024 01:46:52 +0000</pubDate>
      <link>https://dev.to/neilskilltree/tan-suo-python-tao-jian-de-qi-cheng-301</link>
      <guid>https://dev.to/neilskilltree/tan-suo-python-tao-jian-de-qi-cheng-301</guid>
      <description>&lt;p&gt;Python 初學者們最大的困難點之一是「套件不熟」，因此好奇想知道哪些 Python 套件是目前最受歡迎、最主流的。&lt;/p&gt;

&lt;p&gt;不過找來找去，似乎找不到一個直接且可信的網頁可供參考。主要原因是無論 Python 官方或是套件主站 PyPI 都無法提供具體的下載數據，了解這些套件的實際使用程度。&lt;/p&gt;

&lt;p&gt;問了問 ChatGPT，它說有一支 API 可以提供相關資訊，是以 HTML 網頁形式呈現。那麼這就屬於寫程式可以解決的範疇，也是學會寫程式的好處之一，畢竟在 PyPI 上登記的共有超過 533,000 個套件！這絕不是單靠人工就有辦法處理的任務。&lt;/p&gt;

&lt;p&gt;利用這種「非 project」形式來學習，不但能增進自己寫程式的能力，也能擴展自己的技能樹。讓自己不只是會寫程式而已，更能培養解決問題的思考能力。&lt;/p&gt;

&lt;p&gt;所以接下來會寫支小程式來取得 Python 套件的熱門程度，讓各位有個初步的認識，知道哪些是最多工程師在使用的套件。有了這樣的印象之後，往後在遇到新專案時就能節省一些尋找適合工具的時間。&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>程式不會通靈</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 31 May 2024 01:45:37 +0000</pubDate>
      <link>https://dev.to/neilskilltree/cheng-shi-bu-hui-tong-ling-n07</link>
      <guid>https://dev.to/neilskilltree/cheng-shi-bu-hui-tong-ling-n07</guid>
      <description>&lt;p&gt;程式其實是重覆我們人類的行為，以節省我們的腦力和勞力。如果連自己都搞不懂要怎麼操作，程式（或機器）就更不可能知道。&lt;/p&gt;

&lt;p&gt;程式不會通靈！👻&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>從靜態到動態：網站開發的演變史</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 26 Apr 2024 06:43:19 +0000</pubDate>
      <link>https://dev.to/neilskilltree/cong-jing-tai-dao-dong-tai-wang-zhan-kai-fa-de-yan-bian-shi-n4a</link>
      <guid>https://dev.to/neilskilltree/cong-jing-tai-dao-dong-tai-wang-zhan-kai-fa-de-yan-bian-shi-n4a</guid>
      <description>&lt;h2&gt;
  
  
  歷史演進
&lt;/h2&gt;

&lt;p&gt;在早期建立網站的流程有點像是撰寫筆記或報告。內容包括文字、圖片和連結，一旦完成後便很少作大幅度的更動。&lt;/p&gt;

&lt;p&gt;當時並未區分所謂的前端和後端，所有內容都存放在同一個資料夾中。如果需要新增內容，開發者只能回去修改網頁的原始檔案。這個過程雖然不算困難，但卻重覆且枯燥無趣。&lt;/p&gt;

&lt;p&gt;隨著時間推移，人們開始追求減少這種重覆且無聊的工作，希望網站能夠動態地根據內容更新而作出相對應的改變。因此，網站的開發逐漸被拆分為前端和後端兩部分。後端負責處理資料變動的邏輯，而前端則專注於資料的呈現。&lt;/p&gt;

&lt;p&gt;這種分工催生了現代的前端與後端技術。前端使用 HTML 搭建網頁的基礎架構、CSS 用來美化網頁和調整佈局，以及 JavaScript 來與後端進行互動並動態改變網頁上的內容；後端則提供了多樣的選擇，如 PHP、Node.js、Ruby、.NET，以及我們想要掌握的 Python。&lt;/p&gt;

&lt;p&gt;這些後端技術不僅可以連接到資料庫處理大量數據，還能進行複雜的計算和操作邏輯，從而有效減輕前端的負擔。此外，它們還能與其他應用程式整合，構建更為龐大且複雜的網站功能。&lt;/p&gt;

&lt;h2&gt;
  
  
  動態網站實例
&lt;/h2&gt;

&lt;p&gt;社交媒體網站如 Facebook 或 Instagram，它們的內容是隨時都在變動的。用戶的動態更新、評論、點讚等互動會即時反映在其他使用者的網頁（或 app 上）。這需要後端資料庫不斷處理新的輸入資料，並由前端即時呈現這些變更。&lt;/p&gt;

&lt;p&gt;購物網站如 Amazon 或蝦皮，它們會根據用戶行為和庫存狀態動態更新網站內容。當用戶瀏覽不同的產品時，網站會顯示最新的價格、產品評價以及庫存數量，確保用戶獲得的資訊是最即時的。&lt;/p&gt;

&lt;p&gt;還有一種應用是「數據視覺化」，這些領域通常涉及大量的數據，需要以清晰且易於理解的方式呈現給觀眾。例如，氣象預報通過圖表顯示溫度變化和降雨機率；股市資訊則透過走勢圖來分析股價和交易量；體育賽事、交通、健康和網絡安全監控系統同樣利用即時數據視覺化來提供實用的洞察，幫助決策和日常運營。&lt;/p&gt;

&lt;h2&gt;
  
  
  結語
&lt;/h2&gt;

&lt;p&gt;了解網站開發從靜態到動態的演變不僅是對歷史的學習，更是一種具有實際應用價值的工程知識，其目的在於打好未來所需的堅實基礎。許多新手在初入此領域時，常常難以明確界定前端和後端的工作範疇。這不僅導致功能錯置，降低了程式的運行效率，也可能讓你在學習的路上走了不少彎路，有時甚至花時間學習這輩子從來不會用到的技術。&lt;/p&gt;

&lt;p&gt;透過理解網站開發的歷史和一些具體的應用實例，你會更清楚 Python 在整體架構中扮演的角色。Python 作為後端語言，不僅要處理數據的準備工作，還需要與前端緊密合作，以確保資訊的準確展示。可以這麼理解：如果說前端的任務是「顯示」資訊給用戶，那麼後端則是在「準備」這些資訊。&lt;/p&gt;

&lt;p&gt;透過深入理解系統架構，我們不僅能夠提升程式寫作的技巧，同時也培養了解決實際問題的創造性思維。這種能力讓你跳脫出「只會寫程式」的框框，促使你不斷進化，最終成為一位能夠運用多種技術創造解決方案的工程師。&lt;/p&gt;

&lt;p&gt;希望通過這些說明，你對於網站開發的各個面向有了更深一層的理解，且能更有信心地應對未來的學習和工作挑戰。&lt;/p&gt;

</description>
      <category>coding</category>
      <category>programming</category>
      <category>beginners</category>
      <category>python</category>
    </item>
    <item>
      <title>Python 新手在找尋套件時的選擇困境</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Wed, 24 Apr 2024 02:06:47 +0000</pubDate>
      <link>https://dev.to/neilskilltree/python-xin-shou-zai-zhao-xun-tao-jian-shi-de-xuan-ze-kun-jing-m34</link>
      <guid>https://dev.to/neilskilltree/python-xin-shou-zai-zhao-xun-tao-jian-shi-de-xuan-ze-kun-jing-m34</guid>
      <description>&lt;h2&gt;
  
  
  選擇困難
&lt;/h2&gt;

&lt;p&gt;在 Python 的世界中，選擇合適的套件可能是一場挑戰，尤其對於新手來說。&lt;/p&gt;

&lt;p&gt;首先他們會面臨到的困難是不知道該使用什麼關鍵字來進行精準快速的搜尋；其次，由於缺乏特定領域的背景知識，他們可能會誤解說明文件的內容，誤認為某個套件非常適合自己的需求，或者反過來，錯過最適合的選擇。&lt;/p&gt;

&lt;h2&gt;
  
  
  案例研究：Flask
&lt;/h2&gt;

&lt;p&gt;我們以 Flask 為例，它是一個建立網站的工具，專門負責網站的幕後工作，雖然小巧但擴充性強。&lt;/p&gt;

&lt;p&gt;以下是 Flask 開發小組於 PyPI 上的套件描述：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitrf12ebh1d7h4et56w4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitrf12ebh1d7h4et56w4.png" alt="Flask Project Description" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;在第一段中立即出現許多的專有名詞，如：WSGI, Werkzeug, Jinja 等，以描述它的特性。在第二段則是描述了它不強迫程式員使用特定的框架，是針對這一行的老手們說的。&lt;/p&gt;

&lt;p&gt;這些說明本身沒有錯，對於具有專業知識的程式員們來說，確實能清楚地傳達這個套件的設計意圖；然而，對於剛入門或希望轉職的新手來說，卻如同天書，看了等於沒看！&lt;/p&gt;




&lt;p&gt;那在它的官網上的解釋有比較好嗎？我們來看看它的快速簡介 (&lt;a href="https://flask.palletsprojects.com/en/3.0.x/quickstart/"&gt;Quickstart&lt;/a&gt;)：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frek8n1z3rn2qlng7zu87.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frek8n1z3rn2qlng7zu87.png" alt="Flask Official Quickstart" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;這裡提供了 Flask 程式最小最基本的寫法，在下方也逐行解釋每一句的作用，甚是貼心。不過它挑了一個非常不恰當的例子，因為 Flask 的強項是在輔助建立動態網站。如果是從前端轉職過來的 Python 新手們可能會心想，這種 “Hello, World!” 的網頁我用 HTML 就可以完成了啊！幹嘛要這麼麻煩寫程式咧！？&lt;/p&gt;




&lt;p&gt;官網還另外提供了 Tutorial 來幫助程式員快速認識 Flask 的開發架構：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0ko4xm464hq882hen9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0ko4xm464hq882hen9a.png" alt="Flask Official Tutorial" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;這個例子就適合多了！因為它幫助我們了解如何使用 Flask 設計一個內容不斷更新的部落格系統。不過仍存在一個問題：這僅僅是展示了 Flask 數種強大功能中的一種。&lt;/p&gt;

&lt;p&gt;想像一下新手的處境：他可能急於完成一個購物車網站的專案。當他看完這個教學後，可能會誤以為「Flask 不適合我，因為我不需要做部落格」，於是他可能就放棄 Flask，轉而去尋找其他的解決方案。&lt;/p&gt;

&lt;h2&gt;
  
  
  更好的解決方案
&lt;/h2&gt;

&lt;p&gt;我必須再次強調，這些文件的內容正確且方向清晰，只是它們假設讀者已具備特定的基礎知識，從而能夠輕易地理解內容並將其應用於自己的專案。&lt;/p&gt;

&lt;p&gt;但對於一直卡關的 Python 新手們來說，他們往往只能不斷地去網路上翻找各式各樣的資料和教學影片，希望有天能突然之間開竅。&lt;/p&gt;

&lt;p&gt;我認為一個更為淺白易懂的簡介是必需的：從實際應用的角度出發，先建立一個大局觀，了解這個套件的能力範圍及強項，再依據需求深入探究更細節的知識。這種方法不僅能讓新手們省去不必要的精力浪費，還能加速學習的進度。&lt;/p&gt;

&lt;p&gt;我正在朝這個方向努力，希望能幫助所有新進者快速脫離新手階段。&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>coding</category>
      <category>beginners</category>
    </item>
    <item>
      <title>[How-To] 用「超迷你版本」搭配 Scrum/CI/CD 的精神來逐步的寫完整個程式</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Tue, 19 Mar 2024 00:48:36 +0000</pubDate>
      <link>https://dev.to/neilskilltree/how-to-yong-chao-mi-ni-ban-ben-da-pei-scrumcicd-de-jing-shen-lai-zhu-bu-de-xie-wan-zheng-ge-cheng-shi-41ih</link>
      <guid>https://dev.to/neilskilltree/how-to-yong-chao-mi-ni-ban-ben-da-pei-scrumcicd-de-jing-shen-lai-zhu-bu-de-xie-wan-zheng-ge-cheng-shi-41ih</guid>
      <description>&lt;p&gt;我個人非常討厭跑 scrum，兩次的經驗都不是很好。原因是主管們的心態無法調適，導致跑起來往往很快就失去它原本的精神。&lt;/p&gt;

&lt;p&gt;但是我卻蠻喜歡 scrum/CI/CD 的觀點，也發覺自己的開發流程往這個方向靠攏。漸漸的接到案子後不會先急著畫架構圖和流程圖，而是先將整個流程的「資料流」給打通。&lt;/p&gt;

&lt;p&gt;我會先聚焦最最最重要的資料會從哪邊送到哪邊，它是數值、字串、list/dict/json還是物件？然後送一個最迷你版本的資料試試看行不行得通。&lt;/p&gt;

&lt;p&gt;比如說某次主管們需要調閱部門成員的一些數值報告，他們希望看到的是成員們在專案進行時每個月的貢獻程度，也就是執行了多少次的測試，但有附加一些條件以免重覆計算。&lt;/p&gt;

&lt;p&gt;於是我最先做的事就是寫一支小程式，把資料庫裡成員們執行測試的數據抓出來。但我只抓最前面10筆，因為這樣不管是寫後續程式、跑報告或除錯都會大大節省我的時間。&lt;/p&gt;

&lt;p&gt;接著我就用人工的方式將那些附加條件套用在那10筆資料上，把「初版」的最終報告生出來給主管們看。這樣做的用意是我用最短的時間，把程式和資料在整個執行過程中的「程序」都給跑過一遍。雖然是迷你版、精簡版，但是我把整個程序從頭到尾給串起來了，確定這樣的資料流是可行的。&lt;/p&gt;

&lt;p&gt;初版的最終報告的格式主管們看了不是很滿意，雖然這格式是他們提出的，但這很常見，他們總是要先看到一些實際的東西之後才會修正原本的想法。因此我不用花大把的時間寫出一個完整但他們卻不滿意的程式，我可以很快的修正我的流程，更快的推出下一版給他們參考。整個過程主管們滿意，我也輕鬆！&lt;/p&gt;

&lt;p&gt;程式新手們也可以參考這個方式，不用急著把範例/作業一股腦地寫出來，而是從0開始，先找出下一個迷你版是什麼，最好是「超」迷你版本。然後找方法和工具來實作它，以 scrum/CI/CD 的精神來逐步的寫完整個程式，你可能會發現原來寫程式這麼有趣！&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>[How-To] 如何訓練程式的邏輯思考能力</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Tue, 19 Mar 2024 00:46:54 +0000</pubDate>
      <link>https://dev.to/neilskilltree/how-to-ru-he-xun-lian-cheng-shi-de-luo-ji-si-kao-neng-li-23f2</link>
      <guid>https://dev.to/neilskilltree/how-to-ru-he-xun-lian-cheng-shi-de-luo-ji-si-kao-neng-li-23f2</guid>
      <description>&lt;p&gt;至於當初的那道 bonus 題（參閱：到底是怎麼訓練出我的邏輯思考能力的？現在回想起來，我認為是如下的過程。&lt;/p&gt;

&lt;p&gt;第一個要完成的步驟是至少要把乘數和被乘數印出來吧！因此我先努力完成圖1。就是簡單的呼叫輸入函式以接受兩個數字，並用輸出函式把它們印成直式效果。這部分不至於太難。&lt;/p&gt;

&lt;p&gt;接下來因為要印出乘數和被乘數的個位數字相乘的結果，所以我得把被乘數拆解成兩個數字。具體我到底怎麼做的，年代久遠已無法回想起來。也許是呼叫取餘數的函式？也許是用字串分割函式、再轉成 integer?&lt;/p&gt;

&lt;p&gt;但重點在於實作這個步驟的過程中，我頭腦裡的思維模式，因為這就是拆解一道問題的必要程序。我「現在」已經能印出如圖1的樣子了，我「下一個階段」如圖2，它們之間的差距是什麼？我要如何做到？因此在心中會試想各種可能性，然後去書本上找有哪個「適合的工具」能幫我完成這個步驟。&lt;/p&gt;

&lt;p&gt;這有點像圖3，小朋友在玩的、幫助建立認知能力的玩具。一個蘿蔔一個坑，我所要做的事就是找出合適形狀的「蘿蔔」來塞這個坑。有時我可能會誤解某個蘿蔔的用法，將它削去某部分、或是將兩個蘿蔔疊起來塞進去之類的奇葩方法，但重點是對於初學的我來講能解決問題即可，最佳化不是我現在該煩惱的事。&lt;/p&gt;

&lt;p&gt;完成圖2之後，接下來就換十位數的相乘，又產生了新的「下一個階段」。就這樣一步一步下去直到完成作業。&lt;/p&gt;

&lt;p&gt;我認為這就是我當初建立起邏輯思考的過程。不是靠大量實戰、也不是靠熟悉語法，而是將問題拆解成好幾段更小更容易的「小程式」，然後依序完成。&lt;/p&gt;

&lt;p&gt;一直卡關的程式新手們，也許你需要的只是適當的分解問題，邏輯能力就會自然而然的培養起來了！&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>[How-To] 如何不用透過大量練習卻能訓練程式的邏輯思考能力？</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Tue, 19 Mar 2024 00:44:18 +0000</pubDate>
      <link>https://dev.to/neilskilltree/how-to-ru-he-xun-lian-cheng-shi-de-luo-ji-si-kao-neng-li-ckc</link>
      <guid>https://dev.to/neilskilltree/how-to-ru-he-xun-lian-cheng-shi-de-luo-ji-si-kao-neng-li-ckc</guid>
      <description>&lt;p&gt;至於當初的那道 &lt;a href="https://dev.to/neilskilltree/xian-liao-zhao-chu-shu-yu-ni-de-bonus-ti-er-bu-shi-tou-guo-xin-xin-ku-ku-de-da-liang-lian-xi-4012"&gt;bonus 題&lt;/a&gt;到底是怎麼訓練出我的邏輯思考能力的？現在回想起來，我認為是如下的過程。&lt;/p&gt;

&lt;p&gt;第一個要完成的步驟是至少要把乘數和被乘數印出來吧！因此我先努力完成圖1。就是簡單的呼叫輸入函式以接受兩個數字，並用輸出函式把它們印成直式效果。這部分不至於太難。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bfhot31u43nmvi1kpny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1bfhot31u43nmvi1kpny.png" alt="圖1" width="330" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;接下來因為要印出乘數和被乘數的個位數字相乘的結果，所以我得把被乘數拆解成兩個數字。具體我到底怎麼做的，年代久遠已無法回想起來。也許是呼叫取餘數的函式？也許是用字串分割函式、再轉成 integer?&lt;/p&gt;

&lt;p&gt;但重點在於實作這個步驟的過程中，我頭腦裡的思維模式，因為這就是拆解一道問題的必要程序。我「現在」已經能印出如圖1的樣子了，我「下一個階段」如圖2，它們之間的差距是什麼？我要如何做到？因此在心中會試想各種可能性，然後去書本上找有哪個「適合的工具」能幫我完成這個步驟。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoqubf1onwqfbo5g9aki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoqubf1onwqfbo5g9aki.png" alt="圖2" width="326" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;這有點像圖3，小朋友在玩的、幫助建立認知能力的玩具。一個蘿蔔一個坑，我所要做的事就是找出合適形狀的「蘿蔔」來塞這個坑。有時我可能會誤解某個蘿蔔的用法，將它削去某部分、或是將兩個蘿蔔疊起來塞進去之類的奇葩方法，但重點是對於初學的我來講能解決問題即可，最佳化不是我現在該煩惱的事。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxz9jnturvcpzcvl1zk9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxz9jnturvcpzcvl1zk9.png" alt="圖3" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;完成圖2之後，接下來就換十位數的相乘，又產生了新的「下一個階段」。就這樣一步一步下去直到完成作業。&lt;/p&gt;

&lt;p&gt;我認為這就是我當初建立起邏輯思考的過程。不是靠大量實戰、也不是靠熟悉語法，而是將問題拆解成好幾段更小更容易的「小程式」，然後依序完成。&lt;/p&gt;

&lt;p&gt;一直卡關的程式新手們，也許你需要的只是適當的分解問題，邏輯能力就會自然而然的培養起來了！&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>python</category>
    </item>
    <item>
      <title>[閒聊] 找出屬於你的 Bonus 題，而不是透過辛辛苦苦的大量練習</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Tue, 19 Mar 2024 00:39:14 +0000</pubDate>
      <link>https://dev.to/neilskilltree/xian-liao-zhao-chu-shu-yu-ni-de-bonus-ti-er-bu-shi-tou-guo-xin-xin-ku-ku-de-da-liang-lian-xi-4012</link>
      <guid>https://dev.to/neilskilltree/xian-liao-zhao-chu-shu-yu-ni-de-bonus-ti-er-bu-shi-tou-guo-xin-xin-ku-ku-de-da-liang-lian-xi-4012</guid>
      <description>&lt;p&gt;我上大學那年的暑假，因為知道自己未來將會以寫程式為生（非常天真的想法），因此 K 了大約一個月的洪錦魁的書。照著書上的範例一個一個敲進原始檔裡、運行、修正，沒有遇到什麼大的困難。&lt;/p&gt;

&lt;p&gt;上大學後的第一個程式作業是用「橫式」寫出兩個2位數相乘的結果，像是 32 * 13 = 416 這樣的輸出。那位老師蠻優秀的，同樣的題目給了 bonus 題，如果是以「直式」寫出相乘的過程，分數會更高。&lt;/p&gt;

&lt;p&gt;也就是你得把乘數拆成兩個數字，像上例就變成了 32 * 10 + 32 * 3，其中還得處理印出時的排版問題，對於新手來說是個思維上的跳躍。由於基因裡有某種天然呆的成分，我決定挑戰 bonus 題！&lt;/p&gt;

&lt;p&gt;從星期五晚上開始寫，寫了一天還是寫不出來。室友只是拿了課本跑到計中去，半天就回來說寫出來了，然後就一溜煙跑去山下玩。我乾瞪眼，羨慕又嫉妒，想說我暑假都先預習一個月了，第一個作業就卡關是怎麼回事？&lt;/p&gt;

&lt;p&gt;基於基因裡有某種固執的成分，我仍然不想放棄這道 bonus 題，繼續苦戰！也漸漸的開始把自己的思維模式調整成用程式的方式來思考解題的過程。這道 bonus 題正式啟動了我變成宅男⋯丫不是，是工程師的頭腦，我感覺到我跨越了一道看不見的門檻，自此，我再也沒有被程式邏輯的轉換而困住過。&lt;/p&gt;

&lt;p&gt;現在回想起來，我並不是因為大量的練習而學會寫程式的，而是那道 bonus 題的訓練方式把我頭腦裡的某個開關打開了。因此我認為邏輯思維的訓練才是重點，只要訓練方式對了，程式新手就不會被卡在最一開始的點。畢竟程式老手們的挑戰不只是邏輯而已，我們還得騰出更多時間來增強其他技能。&lt;/p&gt;

&lt;p&gt;所以卡關的新手們，你們是不是開始覺得要找出那道屬於自己的 bonus 題，而不是透過辛辛苦苦的大量練習，祈求某天能夠突然開竅？&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>[閒聊] 把自己的頭腦降級以學會寫程式</title>
      <dc:creator>Neil</dc:creator>
      <pubDate>Fri, 15 Mar 2024 02:26:00 +0000</pubDate>
      <link>https://dev.to/neilskilltree/xian-liao-ba-zi-ji-de-tou-nao-jiang-ji-yi-xue-hui-xie-cheng-shi-jfe</link>
      <guid>https://dev.to/neilskilltree/xian-liao-ba-zi-ji-de-tou-nao-jiang-ji-yi-xue-hui-xie-cheng-shi-jfe</guid>
      <description>&lt;p&gt;記得大學第一堂程式上機課，我在教同學如何做 swap（那時是用 C 語言），我用口述的方式講解『要先 c=a，再 a=b，然後才做 b=c，這樣就可以交換了』，但我同學說『為什麼不 a b 兩個直接交換就好？』。&lt;/p&gt;

&lt;p&gt;人腦的運作是可以很複雜的，但電腦不行。因此我們得把一些「超能力」綑綁起來、自我畫限、降維降級，才能懂電腦的邏輯。&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>python</category>
    </item>
  </channel>
</rss>
