我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成

歡迎各位有需要的教師和博碩文化索取教材

  • 系統思考Full Version

    這篇文章為筆者參加這門課程的課後心得:Systems Thinking: Full Version Albert Einstein曾說過:『We can’t solve problems by using the same kind of thinking we used when we created them.』 意思就是,不要想用相同的方式,去解決過去解決不了的問題。 有一個研究指出,老鼠平時會喜歡走固定的路去找食物,但如果他發現走這條路無法再取得食物,就會很快的改變找食物的路徑。 但很奇怪的是,人在遇到解決不了的問題時,卻時常會下意識的,使用他最熟悉最擅長的方式去試圖解決問題。 而系統思考就是在幫助我們在尋找問題根源時,能夠用更系統性的方式去思考,避免使用下意識的習慣去解決問題。 何為系統 系統思考實用手冊的定義是:各個組成部份彼此發生互動,而以整體的形式存在,並發揮功能的個體 第五項修練:系統是你所感覺到的整體,系統中的元素彼此糾結,因為元素會長時間不斷的相互影響,並且朝著共同的目標運作 系統的結構包括: 元素:有形或無形的事物,如城市的房價、成交量、餘屋量等… 連結:把元素整合在一起的關係,如房屋成交量上升導致庫存量下降。 目標:人類系統的目標或者非人類系統的功能。如控制房價在合理的水準而維持社會穩定與經濟繁榮 從上圖可了解,系統思考絕非一個人能夠做到,一定要有非常多的角色參與在其中,要有共同的了解(share understanding) 系統思考有助於我們發現問題的根本原因,看到多種可能性,從而讓我們更好的管理、適應複雜性的挑戰,把握新的機會。 什麼時候適合使用系統思考 重覆發生的事情:如果是單次的事件較不適合用來做系統思考,主要目的是解決現有存在的問題 複雜且動態變化的事 需要策略性思考,去找到一個槓桿點來改善問題…

    Continue Reading…: 系統思考Full Version

  • 鳳凰專案:看IT部門如何讓公司從谷底翻身的傳奇故事

    這本書算是一本故事書,也因為是以故事的型態去描述一間公司如何從谷底翻身,讀者會更能夠明白『管理』對於一間公司有多麼重要。 也能從故事裡面直接理解書中所闡述的管理方式在實際情況是怎樣的去運用,在運用時也不會是直接的一帆風順,而是有重重的考驗並且需要高層的全力支持與理解。 我覺得此本書是管理相關書籍中相當值得一看的書。 因為故事情節用簡述的,就沒辦法讓讀者感受書中情境,因此本文主要為筆者自己讀後的筆記 主要紀錄我認為書中很重要的管理方法和管理思維,書內的附錄也有此書管理思維的整理。 有關故事內容,想了解的話建議自己去買書來看。 Work in process控制 在這邊他們使用工廠管理來比喻我們在開發專案的狀況。 對工廠管理而言,在生產線會盡量的去避免讓工廠內同時有過多的在製品,也就是所謂庫存。 對開發專案來說,在製品指的是開發中但是尚未開發完成的功能,還無法帶給公司收益,也是要極力去減少的。 在生產線上,一定會有處理效率最差的點,我們稱為瓶頸點(或稱約束點),創造約束理論的艾利高德拉特告訴我們,在瓶頸以外任何地方做的改進都是假像。 的確,在瓶頸點之後做的任何改進都是徒勞無功的,因為只能乾等瓶頸把工作送過來,而在瓶頸點之前做的任何改進只會導致瓶頸處堆積更多庫存。 因此,在開發專案時,要了解公司的瓶頸點在那,是什麼地方讓最多的專案在等待這個資源而讓需求被卡住無法繼續進行。 以鳳凰專案而言,因為過多的核心資訊被掌握在一個天才員工布倫特手中,只有他知道怎麼處理,導至這個員工每天都必須處理非常多的事也有非常多的事在等待這一個資源。 下圖表示當一個越忙錄的資源,其他資源想等待這個資源的時間會越來越高 因此改善這個狀況,第一步就是要先釐清約束點所在,第二步就是充分利用約束點。 以此書案例來說,約束點是天才員工布倫特,那他們首先做的就是保護這個約束點,不讓大家直接指使這個約束點去做他們認為重要的事,他們安排了一位專門的人員來安排這位約束點的工作內容,避免大家一直想私自去使喚他做事。接著他們要讓約束點的時間不被浪費,確認約束點永遠不會因為要遷就其他資源而枯等。再來他們將布倫特的工作標準化,讓更多其他的人也可以去接手做布倫特正在做的事,也就是提升約束點的產出。 總之,我們要記得任何對非約束點的改善都只是鏡花水月。 三步工作法 第一步工作法: 幫助我們理解如何建立快速的工作流,讓工作順暢地從開發部移動到IT運維部,因為那正是公司與客戶之間的銜接。 這邊需要去了解公司的價值點,相較於把更多的工作投入系統,將不需要的工作從系統中剃除甚至更為重要,讓資訊部門能夠很快速的產出最精簡可用的有價值的系統,並且獲得反饋。為此,我們需要知道,與達成企業目標息息相關的東西是什麼,不論是專案,運營,戰略,合規,安全性等,通通有可能(請見下方的訂定組織目標)。 第二步工作法: 告訴我們如何縮短及增強回饋循環,因而能夠從源頭開始解決品質問題,並且避免重工。在這邊我們也必須設法去根除計劃外工作的最大來源。 所有計劃中的工作,在執行工作前,必須要分門別類地列出完成工作所需的一切先決條件:例如說,筆電型號,使用者資訊的規格,軟體及需要的授權,以及他們的組態,版本資訊,資安要求,處理能力和連續性需求等。 也就是建構資源清單,亦是物料清單,以及需要的工作中心與生產途程,一旦備妥,加上工單和你的資源,就可以釐清產能及需求為何,並弄清楚可否接受為新的工作,並實際為它進行排程。 第二步工作法的關鍵部份是以視覺化的方式呈現等待時間,那樣就能知道你的工作正在某人的佇列中排隊好幾天,或者是工作必須往後退,因為未備妥完整的零件。藉由需求清單被列出,也可以讓接受需求的人在接受訂單時,可以先確認每一個必須參與的資源都能夠有需要的投入,讓需求,銷售,開發能夠一起擬定生產計劃。 第三步工作法: 告訴我們如何建立一種文化,既能鼓勵大家探索,從失敗中汲取教訓,又能理解反覆與練習是精通工作的先決條件。 提升預防性工作是全面生產維護(Productive Maintenance, TPM)這類計劃的核心,精實社群(Lean Community)信奉全面生產維護的精神,主張我們應不惜一切代價提升維護水準。『改善日常工作甚至比進行日常工作更重要』。持續給系統施加壓力,從而不斷強化習慣並且改善某件事情。 也就是所謂『改善型(Improvement Kata)』,書中是使用為期兩周的改善循環,每個改善循環都要實施一個小型的計畫》執行》查核》行動的專案,持續朝目標邁進。 在此必要的實務作為包括:建立創新,勇於冒險及高度信任的團隊文化。把至少20%的開發和IT運維週期分配給非功能性需求,並持續強化及鼓勵大家進行改善活動 四種工作類型 在這邊這本書將工作份為四種類型:…

    Continue Reading…: 鳳凰專案:看IT部門如何讓公司從谷底翻身的傳奇故事

  • Agile LEGO City workshop

    這是由公司同事Jed所發起的公司內部課程。 Agile LEGO City workshop是用樂高積木來模擬敏捷開發的實際情形的一個小遊戲,藉著遊戲可以從中體認到軟體開發時,可能會遇到的許多狀況,並藉由會後的討論與檢討來讓參與者更能夠理解敏捷開發的意義。 敏捷開發宣言 在一開始時,我們先讀了下面的敏捷開發宣言 藉著親自並協助他人進行軟體開發, 我們正致力於發掘更優良的軟體開發方法。 透過這樣的努力,我們已建立以下價值觀: 個人與互動 重於 流程與工具 可用的軟體 重於 詳盡的文件 與客戶合作 重於 合約協商   回應變化 重於 遵循計劃  也就是說,雖然右側項目有其價值, 但我們更重視左側項目。 讓參與者能夠從中理解敏捷的核心精神,也就是重視團隊間的溝通互動,接受需求的變化。 並且讓我們知道敏捷開發最核心的就是這個宣言裡所描述的,所有敏捷實作方法如SCRUM等都需要建構於這個核心精神上。 遊戲規則 接著就是介紹LEGO遊戲的規則: 1. 依照下圖建造客戶所需的樂高城市,項目越前面代表客戶越重視的 2. 這個建城市的PO就是主講人Jed,在開始之前可以先和Jed提問,在每一個sprint的結束也會由PO來做驗收 3. 總共會有8個sprint,每個sprint開始之前要先計劃好這個sprint要做的,並移到TO DO去 PS:在這邊使用如下圖的看板方法去追每一個TASK的進度 4. 有一個計分表去計算每個sprint計劃要做的和實際驗收成功的任務比較表 遊戲進行 在開始遊戲後,本組所交付的任務頻頻被打槍,首先是我們在第一個sprint交付了平房,結果被打槍~原因是,請依照客戶需求優先順序做交付,我們前面都還沒有交付,不接受。 接著河濱公園安全設施因為圍牆沒蓋滿被拒絕,然後開始沒有做門,門沒有面對道路,沒有畫道路,圓環要在市中心,托兒園應臨近住宅…. 等等原因一直被拒絕交付退回重改(火大)。 這是我們小組最後所交付的成果圖 會後檢討 我覺得這部份是這整個遊戲中最精華的部份,很感謝Jed還特別為我和Jack再做一次報告,讓我得以有機會聽到這個最精華的部份。 首先他讓我們提出我們覺得在遊戲中的感想,最多人提出的就是我們在一開始沒有搞清楚客戶需求,導致頻頻被退件 以及在一開始沒有先對整個城市做完整的規劃,例如圓環要在市中心等等… 造成我們所做的產品一直無法即時被release…

    Continue Reading…: Agile LEGO City workshop

  • ,

    [技術支援-8] 產品發佈設定

    將產品發佈到正式環境 最簡單的方法是 將所有dist/資料夾底下的文件複製一份到伺服器上 如果想順帶設置base href至<base href=”/my/app/”>,則可加下面參數 若有使用Router功能,將所有找不到的頁面都導向index.html(下面會有詳細介紹) 優化我們的Angular專案 加上–prod參數,會能輸出優化過的檔案 這個參數會為我們的專案做這些事情 改使用AOT編譯:預先編譯而不是用JIT的方式 開啟production mode: 可以讓網站執行更快,等同於下這個參數–environment=prod Bundling: 將所有的所使用的library和許多應用綁在一起 縮小檔案:刪除多餘的空白,註釋和可選的令牌。 Uglification:將變數名稱做混淆的動作。 消除死代碼:刪除未引用的模塊和很多未使用的代碼 添加–build-optimizer可進一步減少檔案的大小 如果要使用惰性加載去載入部份的JS檔案,記得不要在需要被首先加載的模組裡面import要被惰性加載的元件,否則會在一開始就被載入。 AOT預設在編譯時會對ngModules做識別並且做惰性加載的設定。 善用bundles工具 source-map-explorer是一個很棒的bundles工具。可以將許多的js綑綁在一起。 首先先安裝 然後建構應用程式 在dist生成綑綁包 運行管理器來生成這個被綑綁的檔案的分析圖 產生的圖如下: 善用效能觀察工具 首推的當然就是google chrome囉! 這邊有相關的教學系列文:認識 Chrome 開發者工具 官網也有推薦使用WebPageTest 來衡量自己網頁的速度 伺服器啟用Routee功能的配置方法 Apache設定方式 添加一個重寫規則.htaccess…

    Continue Reading…: [技術支援-8] 產品發佈設定

  • ,

    [技術支援-7] TypeScript設定

    TypeScript配置 TypeScript是Angular應用開發中使用的主語言。瀏覽器不能直接執行TypeScript,得先用tsc編譯器轉譯(transpile)成JavaScript,而且編譯器需要進行一些配置。而配置的檔案名稱就是tsconfig.json 這邊是官方關於此配置文件的詳細說明:tsconfig.json tsconfig.json 下面為一個tsconfig.json的範例 關於設定檔裡的noImplicitAny意思是是否不允許typescript編譯時隱性將沒有設定類型的變數設定為any。如果設定為true的話,如果typescript裡面有沒有設定類型的變數則會產生錯誤訊息。當這個值設定為true時,記得要將suppressImplicitAnyIndexErrors也設定為true,不然會發生隱式報錯。 lib.d.ts 文件 TypeScript有一個特殊的聲明文件lib.d.ts。包含了JavaScript運行庫和DOM的各種常用Javascript環境聲明。 基於–target,TypeScript添加額外的環境聲明,例如如果目標為es6時將添加Promise。

    Continue Reading…: [技術支援-7] TypeScript設定

  • ,

    [技術支援-6] NPM設定

    安裝NPM環境 Angular應用程序以及Angular本身都依賴於很多第三方包(包括Angular自己)提供的特性和功能。這些包由Node包管理器( npm )負責安裝和維護。 因此Node.js和npm是做Angular開發的基礎。 這邊是Node.js下載連結:Downloads NPM 如果在電腦中需要同時運行多個不同版本的npm,可以使用nvm來管理他們:nvm package.json設定 這邊有詳細的說明文檔:Specifics of npm’s package.json handling 下面是一個預設CLI設定檔的範例 這邊說明幾個比較重要的設定值: script: 是一個script commands的列表,這些script commands會在生命週期中的不同時間運行。其內容的key是生命週期事件,value是要執行的命令。可獲得的生命周期列表:請見此 dependencies: 要運行這個應用程式必要一定要安裝的package devDependencies: 只有在開發時需要用到的功能則寫在這邊,當別人要導入我們所開發的專案時,不用一定要下載完整的devDependencies內容。 在dependencies需載入的Angular Packages @angular/animations:網頁切換動畫效果 @angular/common: services, pipes, and directives等都在這邊 @angular/compiler:Angular的模板編譯器,在JIT @angular/core: 基本angular框架所需的功能如metadata decorators, Component, Directive, dependency injection,以及元件的lifecycle…

    Continue Reading…: [技術支援-6] NPM設定

  • ,

    [技術支援-5] 佈署方式JIT及AOT介紹

    Ahead-of-Time (AOT)編譯 在Angular 2 中有兩種編譯模式: JIT(Just-in-Time):Angular預設是使用 Just-in-Time (JIT) 即時編譯,等瀏覽器下載完 *.js 檔案後,會在用戶端的瀏覽器編譯 Angular 的 JS 程式碼,接著才會渲染畫面。 AOT(Ahead-of-Time):在程式發佈之前就透過 Angular Compiler 進行編譯,所以瀏覽器下載完的 *.js 檔案,就可以直接被執行,然後渲染畫面。 下表為這兩種佈署方式的簡單比較表: Characteristic JiT AoT Compilation target Browser Server Compilation context Runtime Build Bundle size Huge (~1.2 MB) Smaller (~400…

    Continue Reading…: [技術支援-5] 佈署方式JIT及AOT介紹

  • ,

    [技術支援-4] Angular Universal

    什麼是Angular Universal 下面是一段截錄於https://itw01.com/G3MBE3P.html對Angular Universal目的的說明 雖然Angular是一種構建Web應用的強大方式,但是長期以來,開發人員都知道它在SEO和可訪問性方面的限制。當然,Google的爬蟲能夠執行JavaScript,但是它並不是唯一的爬蟲方案。例如,在將一個連結提交給Slack之後,它的爬蟲會抓取一個預覽,但是並不會執行JavaScript,所以原始的Angular HTML模板將會顯示在預覽之中。爲了消除這種現象所產生的問題,Jeff Whelpley和Patrick Stapleton開發了Angular Universal,它允許在服務端進行渲染。 從上面的文字可以了解,Angular Universal可以在server side預先對網頁模版做處理,變成一個有資料的靜態頁面。可以在使用者要求資料的當下產生靜態頁面,也可以事先產生好靜態檔案以供未來使用。 Angular Universal的主要目的有以下三個 方便網路爬蟲(SEO) 提高在手機裝置和效能較差的設備上的性能表現 快速顯示第一頁 Google,Bing,Facebook,Twitter和其他社交媒體網站都依靠網路爬蟲來為網站編索引,並在搜索內容。Angular Universal可以生成應用程序的靜態版本,無需JavaScript即可輕鬆搜索,鏈接和導航。這也使網站預覽可用,因為每個URL返回一個完全呈現的頁面。 啟用網頁抓取工具通常被稱為 搜索引擎優化(SEO)。 安裝Angular Universal所需工具 @angular/platform-server – 通用服務器端組件。 @nguniversal/module-map-ngfactory-loader – 用於在服務器渲染的上下文中處理延遲加載。 @nguniversal/express-engine – 通用應用程序的快速引擎。 ts-loader – 傳輸服務器應用程序 使用下面指令安裝上面四個package 更新 AppModule 模組 修正預設AppModule中BrowserModule的匯入方式 根據使用者的瀏覽器來決定是否使用SSR(server-side rendering) 撰寫SSR Server的程式碼…

    Continue Reading…: [技術支援-4] Angular Universal

  • ,

    [技術支援-3] Service worker離線支援

    關於Service worker Angular在第5版新推出了支援Service worker的功能,主要是可以讓Angular更能符合PWA的概念。 所謂PWA(Progressive Web App)是希望能夠讓Web application盡可能的在各種環境(網路環境、手機作業系統等)下都能順暢且不減功能性的運作。 例如要可以支援離線功能,在使用 App 收信、寫信、刪除信件等動作,都需要將結果丟回伺服器儲存,但在某些環境下並無法一直使用網路連線,因此必須使用一種機制,讓我們仍能順暢的使用這些功能,待網路正常連線,再將剛才所執行的一切動作反應回伺服器。 而Service Worker可以讓Web application做到上面這樣的事情。 使用Service worker所需環境 要使用Angular Service worker,您必須具有以下Angular和CLI版本: Angular 5.0.0或更高版本。 Angular CLI 1.6.0或更高版本。 Web application必須在支援Service worker的Web瀏覽器中運行。 目前支持最新版本的Chrome和Firefox。其他瀏覽器的支援狀況如下圖(連結): Service Worker 的生命週期 圖片來源:Browser push notifications using JavaScript 在創建新的應用程序時使用Service worker 將–service-worker標誌添加到ng new命令中:…

    Continue Reading…: [技術支援-3] Service worker離線支援

  • ,

    [技術支援-2] 讓IDE支援Angular Language Service

    語法自動補完 自動完成可以通過在輸入時提供可能要填入的值讓我們選擇,以加速開發的速度,如下圖: 錯誤檢查 可以檢查像是模版變數是否在元件內有對應的變數供綁定 跳轉到模版變數或方法所指向的程式碼位置 單擊並按下F12進入相對應的變數位置 可使用Angular Language Service的IDE Visual Studio Code 1. 直接在VSCode的擴充功能裡下載Angular language service 2. 自行使用VSIX安裝 打開VSCode,先安裝.VSIX 下載附加元件:直接按此下載 / 原始專案位置:vscode-ng-language-service 下載之後,按下command+shift+P來打開指令列,並輸入 然後選擇剛剛所下載的檔案,Reload。 接著你的VSCode就可以支援Angular Language Service了! WebStorm 在package.json加上 然後執行 Sublime Text 在專案下執行下面兩個指令: 參考資料 VS Code Plugin for the Angular…

    Continue Reading…: [技術支援-2] 讓IDE支援Angular Language Service


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!