Python 學習目標規劃書

Python 學習目標規劃書

Python 學習目標規劃書

總體目標:在六個月內,從零基礎掌握 Python 編程,具備獨立開發簡單應用程式(如命令列工具、簡單 Web 應用或數據分析腳本)的能力,並為進階主題(如機器學習、進階 Web 開發)打下基礎。

前提條件

  • 每天學習 6 小時(可分為 2-3 段,如上午 3 小時、下午 3 小時)。
  • 使用 MacBook Pro,安裝 Python 3.11+(免費):
    • 訪問 Python 官方網站,下載適用於 macOS 的最新版本(建議 3.11 或以上)。
    • 執行下載的 .pkg 安裝程式,遵循提示完成安裝。
    • 打開終端(Terminal),輸入 python3 --version 檢查是否安裝成功(應顯示版本號)。
    • macOS 內建 Python 2.x,務必使用 python3pip3 命令運行 Python 3 和安裝模組。
  • 使用免費 IDE VS Code 或線上編輯器 Replit
    • 下載並安裝 VS Code
    • 在 VS Code 中安裝 Python 擴展(搜尋 “Python”,選擇由 Microsoft 提供的擴展)。
    • 配置 VS Code 使用 MacBook Pro 的 Python 3 解釋器(在終端輸入 which python3 獲取路徑,然後在 VS Code 中選擇該路徑)。
    • 或者使用 Replit 進行線上編程,無需本地安裝。

第一階段:1 個月(基礎入門)

目標:掌握 Python 基礎語法,理解基本編程概念,能編寫簡單命令列程式(如計算器、文字處理工具)。

每日時間分配:理論學習(2 小時)、實作練習(3 小時)、複習與總結(1 小時)。

週數 學習內容 資源 練習
第 1 週 Python 入門與環境設置:變數、資料型別(整數、浮點數、字串、布林)、基本運算 Python Official Tutorial
freeCodeCamp Python
莫煩 Python
製作簡單計算器、字串拼接
第 2 週 控制流程與函數:if-else、for/while 迴圈、函數定義與調用 W3Schools Python
菜鳥教程
猜數字遊戲、階乘函數
第 3 週 資料結構:列表、字典、元組、集合 Programiz Python
莫煩資料結構
聯繫人管理系統(字典存儲姓名和電話)
第 4 週 檔案操作與簡單項目:檔案讀寫(txt、csv)、異常處理 Real Python File I/O
菜鳥教程檔案操作
待辦事項清單程式(新增、刪除、儲存)

成果:能編寫 50-100 行簡單程式,熟悉語法和資料結構,處理簡單檔案操作。

第一階段測驗試題(10 題)

1. 變數與資料型別:請寫一個程式,定義兩個變數(一個整數、一個字串),並將它們相加後列印結果。

答案

a = 5
b = "10"
result = a + int(b)
print(result)  # 輸出:15
                

2. 字串操作:給定字串 s = “Hello, World!”,請提取 “World” 並列印。

答案

s = "Hello, World!"
print(s[7:12])  # 輸出:World
                

3. 條件語句:寫一個程式,檢查輸入數字是否為偶數(使用 input())。

答案

num = int(input("請輸入一個數字:"))
if num % 2 == 0:
    print("是偶數")
else:
    print("不是偶數")
                

4. 迴圈:列印 1 到 10 的所有奇數。

答案

for i in range(1, 11, 2):
    print(i)  # 輸出:1, 3, 5, 7, 9
                

5. 函數:寫一個函數計算給定數字的平方。

答案

def square(num):
    return num * num
print(square(4))  # 輸出:16
                

6. 列表操作:給定列表 lst = [1, 2, 3, 4],將每個元素加倍並列印新列表。

答案

lst = [1, 2, 3, 4]
new_lst = [x * 2 for x in lst]
print(new_lst)  # 輸出:[2, 4, 6, 8]
                

7. 字典:創建一個字典儲存兩個人員的姓名和年齡,列印某人的年齡。

答案

people = {"Alice": 25, "Bob": 30}
print(people["Alice"])  # 輸出:25
                

8. 元組:創建一個元組儲存 3 個數字,計算它們的總和。

答案

numbers = (1, 2, 3)
print(sum(numbers))  # 輸出:6
                

9. 檔案寫入:將字串 “Hello, Python!” 寫入檔案 “test.txt”。

答案

with open("test.txt", "w") as file:
    file.write("Hello, Python!")
                

10. 異常處理:寫一個程式處理輸入非數字的錯誤。

答案

try:
    num = int(input("請輸入一個數字:"))
    print(num)
except ValueError:
    print("請輸入有效數字!")
                

第二階段:3 個月(進階基礎與實作)

目標:深入理解進階概念,熟悉模組,掌握數據結構與簡單算法,完成中型項目(如爬蟲或數據分析工具)。

每日時間分配:理論學習(1.5 小時)、實作練習(3 小時)、項目開發與複習(1.5 小時)。

月份 學習內容 資源 練習
第 2 個月 物件導向程式設計(OOP):類、物件、繼承、多型;模組:random、math、datetime、os Real Python OOP
菜鳥教程 OOP
銀行帳戶管理系統(存款、提款、查餘額)
第 3 個月 資料結構(堆疊、佇列)、基礎算法(排序、搜尋)、正則表達式、簡單爬蟲(requests、BeautifulSoup) GeeksforGeeks Data Structures
莫煩爬蟲
Requests 文檔
爬蟲抓取天氣資訊
第 4 個月 資料分析基礎:pandas、numpy;項目:分析公開數據集 Kaggle Learn Python
Pandas 文檔
莫煩 Pandas
分析電影評分數據,生成統計圖表

成果:能進行資料處理和爬蟲,完成中型項目,熟悉 OOP 和模組。

第二階段測驗試題(10 題)

1. OOP:定義一個 Dog 類,包含 name 屬性和 bark() 方法,創建一個實例並調用方法。

答案

class Dog:
    def __init__(self, name):
        self.name = name
    def bark(self):
        return f"{self.name} says Woof!"
dog = Dog("Max")
print(dog.bark())  # 輸出:Max says Woof!
                

2. 繼承:創建一個 Animal 類和一個繼承它的 Cat 類,Cat 有 meow() 方法。

答案

class Animal:
    def __init__(self, name):
        self.name = name
class Cat(Animal):
    def meow(self):
        return f"{self.name} says Meow!"
cat = Cat("Luna")
print(cat.meow())  # 輸出:Luna says Meow!
                

3. 模組:使用 random 模組生成 1 到 100 的隨機數。

答案

import random
print(random.randint(1, 100))
                

4. 堆疊:使用列表實現堆疊,執行 push 和 pop 操作。

答案

stack = []
stack.append(1)  # push
stack.append(2)  # push
print(stack.pop())  # 輸出:2
print(stack)  # 輸出:[1]
                

5. 佇列:使用列表模擬佇列,執行 enqueue 和 dequeue。

答案

queue = []
queue.append(1)  # enqueue
queue.append(2)  # enqueue
print(queue.pop(0))  # dequeue, 輸出:1
print(queue)  # 輸出:[2]
                

6. 冒泡排序:對列表 [5, 2, 8, 1, 9] 進行冒泡排序。

答案

lst = [5, 2, 8, 1, 9]
for i in range(len(lst)):
    for j in range(len(lst)-i-1):
        if lst[j] > lst[j+1]:
            lst[j], lst[j+1] = lst[j+1], lst[j]
print(lst)  # 輸出:[1, 2, 5, 8, 9]
                

7. 正則表達式:從字串 “email: test@example.com” 中提取 email 地址。

答案

import re
text = "email: test@example.com"
email = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(email)  # 輸出:['test@example.com']
                

8. 爬蟲:使用 requests 獲取一個網頁的標題(假設 URL 為 “http://example.com”)。

答案

import requests
from bs4 import BeautifulSoup
response = requests.get("http://example.com")
soup = BeautifulSoup(response.text, "html.parser")
print(soup.title.text)  # 輸出:Example Domain
                

9. Pandas:創建一個包含姓名和年齡的 DataFrame,篩選年齡大於 25 的人。

答案

import pandas as pd
data = {"name": ["Alice", "Bob", "Charlie"], "age": [25, 30, 22]}
df = pd.DataFrame(data)
print(df[df["age"] > 25])  # 輸出:name=Bob, age=30
                

10. Numpy:創建一個 3×3 的全 1 陣列並計算其總和。

答案

import numpy as np
arr = np.ones((3, 3))
print(arr.sum())  # 輸出:9.0
                

第三階段:6 個月(中級應用與專案)

目標:掌握 Web 開發基礎,熟悉資料庫操作,完成功能完整項目(如 Web 應用或自動化腳本),準備進階學習。

每日時間分配:理論學習(1 小時)、實作練習(2 小時)、項目開發(2 小時)、複習與優化(1 小時)。

月份 學習內容 資源 練習
第 5-6 個月 Flask/Django 框架:路由、模板、表單;SQLite 資料庫(SQLAlchemy/Django ORM) Flask 教程
Django 教程
Real Python Flask
菜鳥教程 Flask
簡單部落格系統(文章新增、顯示)
第 7-8 個月 進階主題:多執行緒、多進程、API;項目:功能完整應用 Real Python Multithreading
GeeksforGeeks APIs
Public APIs
天氣查詢工具(使用公開 API)
第 9-10 個月 綜合項目;Git 版本控制,分享到 GitHub GitHub Learning Lab
莫煩 Git
freeCodeCamp Project Ideas
上傳項目到 GitHub,撰寫 README

成果:完成功能完整 Web 應用或腳本,熟悉 Web 開發和版本控制,具備獨立解決問題能力。

第三階段測驗試題(10 題)

1. Flask 路由:創建一個 Flask 應用,包含一個顯示 “Hello, Flask!” 的路由。

答案

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return "Hello, Flask!"
if __name__ == '__main__':
    app.run()
                

2. Flask 模板:創建一個 Flask 應用,使用模板顯示用戶輸入的名字。

答案

from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
    name = request.args.get('name', 'Guest')
    return render_template('index.html', name=name)
# index.html: 

Hello, {{ name }}!

3. SQLite:創建一個 SQLite 資料庫,插入一筆資料(姓名、年齡)。

答案

import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)')
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 25))
conn.commit()
conn.close()
                

4. Django 模型:定義一個 Django 模型表示書籍(包含標題和作者)。

答案

from django.db import models
class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
                

5. 多執行緒:使用 threading 模組並行執行兩個函數,各自列印數字 1-5。

答案

import threading
def print_numbers():
    for i in range(1, 6):
        print(i)
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_numbers)
t1.start()
t2.start()
t1.join()
t2.join()
                

6. API 請求:使用 requests 模組從公開 API 獲取 JSON 數據並列印第一筆資料。

答案

import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts')
data = response.json()
print(data[0])  # 輸出:第一筆 JSON 資料
                

7. Git 命令:初始化一個 Git 倉庫並提交一個檔案 “app.py”。

答案

git init
git add app.py
git commit -m "Initial commit"
                

8. 資料庫查詢:從 SQLite 資料庫查詢年齡大於 25 的用戶。

答案

import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE age > 25')
print(cursor.fetchall())
conn.close()
                

9. Flask 表單:創建一個 Flask 應用,處理 POST 表單提交並返回輸入內容。

答案

from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def submit():
    data = request.form['input']
    return f"You submitted: {data}"
                

10. 項目整合:寫一個程式結合 API 和 SQLite,將 API 數據儲存到資料庫。

答案

import requests
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS posts (id INTEGER, title TEXT)')
response = requests.get('https://jsonplaceholder.typicode.com/posts')
data = response.json()
cursor.execute('INSERT INTO posts (id, title) VALUES (?, ?)', (data[0]['id'], data[0]['title']))
conn.commit()
conn.close()
                

免費資源總結

注意事項

  • 學習方法:每天記錄筆記,使用 Notion 或文字檔案整理知識點。
  • 實作為主:多寫程式碼,通過練習題和項目鞏固知識。
  • 問題解決:查閱 Stack Overflow 或 Google。
  • 進度調整:根據個人進度靈活調整,若某部分耗時較長,可延長該階段。
  • 測驗使用:完成每個階段後,嘗試獨立解答試題,參考答案檢查正確性。

開發雜記-20250424 API的設定及傳輸

目前有跟RAGIC資料庫平台合作情況下,
可以將80%左右的客戶端需求在RAGIC平台上製作出來,並透過桌機上的網頁以及雙平台手機板的APP上操作及使用。。
現已開發不需要透過Zapier&MAKE這樣的資料庫串接平台使用,就可以透過REST API直接連線到任何的ACCESS及SQL資料庫做資料的讀取、寫入、存檔。
若您手頭上有任何商用軟體是透過SQL資料庫的存取,並有確定安全性的帳號密碼,也可以透過RESTAPI寫到RAGIC上。

Translate

即時語音翻譯

🌐 即時語音雙向翻譯工具


翻譯結果:

(翻譯結果顯示於此)

iOS設備提示:如果語音無法播放,請點擊下方按鈕後再試一次

翻譯歷史:

尚無紀錄

手機端若無法正常撥放翻譯後的語音 請自行檢查手機端的語言並下載支援的語音包
以下是教學如何下載語音包


IPHONE
在蘋果手機上下載支援的播放語音包,您可以嘗試以下方法:

  • 檢查語音包的來源
    • 確認語音包是否由 Apple 官方提供,或是由可信的第三方開發者提供。
  • 使用 App Store
    • 如果語音包是以應用程式形式提供,您可以前往 App Store 搜尋並下載相關應用程式。
  • 設定語音包
    • 前往「設定」>「語音」或「語言與地區」,檢查是否有可用的語音包。
    • 如果有,您可以直接下載並啟用。
  • 使用第三方工具
    • 某些語音包可能需要透過第三方工具或應用程式來安裝,例如 AltStore 或其他側載工具。
  • 檢查 iOS 版本
    • 確保您的 iPhone 使用的是最新版本的 iOS,因為某些語音包可能需要特定的系統版本才能運行。

安卓
在安卓手機上下載支援的播放語音包,您可以嘗試以下方法:

  • 檢查語音包的來源
    • 確認語音包是否由可信的開發者提供,並且適用於您的安卓版本。
  • 使用 Google Play 商店
    • 前往 Google Play 商店,搜尋相關的語音包應用程式,並下載安裝。
  • 設定語音包
    • 打開「設定」>「語言與輸入」>「文字轉語音輸出」,選擇您下載的語音包並啟用。
  • 檢查系統更新
    • 確保您的安卓系統是最新版本,因為某些語音包可能需要特定的系統版本才能運行。
  • 使用第三方工具
    • 某些語音包可能需要透過第三方應用程式或工具來安裝,例如 APK 檔案安裝器。

經測試,目前在IOS的系統上不論是SAFARI或者CHROME均無法正常將翻譯結果用語音的方式撥放,故將轉換開發思維轉換至開發APP上架,屆時提供下載網址。

2025年健診活動

嗨!👋

多年來使用軟硬體有任何問題嗎?歡迎隨時向我們詢問✍🏼

無論您目前是否仍在職,只要曾經是我們的客戶,

太盛昌資訊服務有限公司的新年度會員制活動已經開始了🏃‍♂️!

我們即將展開歲末年終的到場健診活動。

有需要的朋友,歡迎預約時間唷!

🌟健診活動完全免費,若現場有需要解決的疑難雜症,我們也會免費處理哦。🌟

如有需要代購備料維修的情況會酌收維修費唷!!

擴大服務中

2024年起為了服務廣大中南部客戶,

若有需要了解網站製作及架設的需求,

以及需要添購網際網路多人版商用軟體的設計,

均可享有一次到府說明及安裝的服務。

採面對面的講解及教學,增加對於產品的了解度,

有興趣者歡迎留言或LINE@洽詢

線上購物車平台

雲端化趨勢

WOOCOMMERCE是一個非常受歡迎的電子商務平台,它提供了簡單、易用的方式讓企業可以在網上開始銷售產品和服務。現在,WOOCOMMERCE更可以進一步增強自身的庫存管理和訂單管理功能。

透過庫存管理功能,您可以更好地掌握您的庫存水準,將它和您的銷售和製造計劃相連接。這樣,您就可以確保您的庫存的準確性,以及提高您的效率和生產力。

透過訂單管理功能,您可以追蹤您的訂單狀態,自動化下單流程,加快您的發貨速度,並進一步提高您的客戶滿意度。

總結來說,WOOCOMMERCE集成庫存管理和訂單管理的功能,可以簡化和加速您的電子商務經營,同時提高您的產品庫存和訂單管理的效率。如果您正在尋找一個全面的電子商務解決方案,WOOCOMMERCE是一個非常好的選擇。

現在提供兩位快速架站的簡約服務名額可以原始化將購物平台架設在自己的網站上,僅需要負擔一年的網域網址的租賃費用即可,有意願者歡迎留下聯絡資訊。


Loading

SA,SD與SE

How to Become a Computer Systems Analyst | A Career Analysis

轉錄至http://trip.5d3w.us/index.php?op=ViewArticle&articleId=171&blogId=2
覺得文章很棒!!!分享給大家

做軟體開發專案規劃時, 常會碰到助理問我一個問題, SA,SD和SE的差別在那裡 ?

這個問題我以前也有過, 還頗為困擾, 系統分析和系統設計及系統工程到底有什麼差別 ? SA和SD的工作又有何不同 ? 這兩者的養成教育又有何差異 ?在過去, SA,SD及SE的確很難區分, 甚至這些角色常常會透過軟體工程師來混合發展。

隨著IT領域的發展, SA,SD及SE漸漸的成為了大型專案必需要的專業分工, 這三者間是有相當的差異的, 不管是養成過程, 甚或是未來的發展, 都大相徑庭, 而要成為一名稱職的PM, 是要能區分出這三者的差異, 才能妥善的安排工作的。

[SA,系統分析師]

SA是 System Analysis 的縮寫, 一般稱為系統分析, 主要的工作就是透過一系列的分析工作, 把客戶想要的結果產生方式, 以各種文件表達出來, 讓開發團隊可以根據這些文件實作出這個結果。

這樣的解釋比較文縐縐一點, 用個通俗一點的方式比喻, 就像是要做出一道宮保雞丁時, 就會有食譜一樣, 裡面會介紹需要的材料及做菜的順序, 然後裡面也會強調要以怎樣手法才能產生出某種效果, 以促進色香味。

這樣的過程裡, SA是較為偏重於在工作流程和處理邏輯的, 透過SA, 開發團隊才可以理出整個系統的架構, 一種做事的脈絡, 以及系統和工作間的關連性, 最重要的, 是這些結果都會被SA呈現在文件中, 而非放在少數人的腦袋裡。

SA不僅止是要針對電腦裡的東西去運作及規劃, 還包括了現實世界裡的實體流程及組織。在很多的情況下, 配合新系統的組織及流程, 是要由SA來執行的。總結起來, 在一個開發案裡, SA執行以下的工作:

· 藉由系統需求書, 使用者的現有標準作業流程來建立出符合期望的新作業流程及搭配流程的系統功能及模組規劃
· 依據功能及模組規劃案, 定出初步的資料庫內容及系統與使用者間的權限搭配規範
· 定出各個軟體零件的規範, 如物件, 函數庫, …等等
· 設計新的標準作業流程, 並把系統功能或模組綁入這些流程中
· S.A依據客戶的環境及需求, 尋找合適的SD來搭配

而SA也有以下的特色:
· 對於系統在怎樣的環境及用什麼開發工具, 並不十分在意, 良好的S.A產生出來的文件, 使用不同的開發工具都應該可以完成, 產生相同的結果, 但那一種最合適, 由SD決定
· SA偏重於流程及執行邏輯的表達
· SA著重於軟體邏輯, 對開發工具的學習並不是十分重要, 所以會一種語言即可, 主要是以該語言工具來實踐邏輯觀。
· SA一定要有全局觀, 也就是不能拘泥於一個角度或是一個局部去思考問題, 這一點是尋找優秀SA時最困難的。因為在規劃模組及功能時, 一定要同時考量到所有直接相關及間接相關的程序及邏輯問題, 因此要有全局觀。

相較於SD, SA更側重在邏輯及工作順序搭配的表達, SA並不需要去關切使用什麼作業系統或是什麼開發工具, 如前特色所述, 好的SA文件, 可以用任何一種開發工具來實現。當然, SA不受限於IT技術, 但卻會有專業領域的限制。

很少有SA同時專精於數個領域的, 熟悉汽車業運作規範的SA, 在金融業的開發案裡, 就很難討好, 反之亦然。但SD沒有這種限制, 基本上SD可以和任何行業的專案開發團隊配合運作。

會如此的原因是SA是偏重於流程及管理分析及重新再造工作的。而作業流程, 除了少數領域裡共通性高, 在核心流程上, 是需要長期鑽研的。前面提及的汽車及金融業就是一例。

所以, 一個SA必需具備以下的能力,資歷及專業訓練:

1. 至少熟悉一種程式開發語言
2. 熟悉軟體工程, 對於開發工具的元素及特色熟悉
3. 對管理制度或作業流程設計熟悉
4. 熟悉UML或類似的系統描述工具
5. 邏輯能力良好
6. 良好的溝通能力, 主要作為瞭解需求之用
7. 相關的業界熟悉度

在三者之中, SA是最接近PM的, 所以SA在做生涯規劃時, 不妨以PM做為下一個發展的專業目標。

[SD, 系統設計師]

一般來說, SD在生涯規劃裡, 並不是SA或是PM。當然, 一定要硬來一次也沒有什麼不可以, 但要走這條路, 就要趁早轉職, 因為SD畢竟是較為幕後的工作, 在與客戶的溝通協調上, 並不會有太高的要求, 也較不需要公司管理層面的全局觀。

表面上看起來, SD沒有SA那麼多的工作要求, 但實際上SD是最需要天賦的工作, 不管是畫面的構成, 操作的手順及調整, 甚至於元件的定義及物件的規範, 全都需要一些天賦。很多軟體, 功能很強, 但怎麼看怎麼不順眼, 或者怎麼用就怎麼憋扭, 功能帶來的效益, 全都被這些毛病給遮蓋掉了, 這就是SD的問題。

另外, SD也扮演了系統最佳化的推手。SA所規劃出來的要求及佈置, 都只是邏輯上的構思, 在不同的工具上, 可能有更好的方法可以表現, 也可能會難以展示, 這都需要藉由SD對使用環境及開發工具的瞭解, 來進行調整和規劃。

舉例來說, 同樣是一套財務軟體, 在WINDOWS XP, MAC, X WINDOWS下, 就會有很不一樣的展現模式和技巧。如果再搭配上不同的開發工具, 如C++, JAVA, .NET, PHP, …那差異更多。對SA而言, 這些東西他都不用去考慮, 但SD就不同了, 這些不同的地方, 並不僅僅只是如此而已, 有時還會包括了開發成本及時間問題, SD的重要度, 由此可知。

在一個客製化專案裡, SD的工作內容如下:

· 設計畫面元素規範
· 設計頁面結構及規則
· 設計系統操作畫面, 並編定欄位規範及防呆處理
· 設計權限管理與系統操作機制
· 撰寫使用手冊
· 調整DB之各項定義, 使其符合畫面欄位規範及操作搭配
· 配合SA撰寫系統開發文件, 供程式師CODING之用
· 撰寫UI(使用者介面)測試計劃書

而做為一名稱職的SD, 以下的條件, 是必要的:

1. 至少對一個作業系統極為熟悉, 對於這個作業系統的各個元件特性及API, 有充分的瞭解
2. 熟悉2種以上的開發工具, 而專案所需的工具, 必需是其擅長的之一, 其熟悉度包含了標準安裝裡的各個函數庫, 系統常數, 物件定義, 語法, 主要的輔助工具開發廠商, 及重要的工具使用方法
3. 具一定的美學感
4. 至少能使用一種繪圖工具軟體
5. 曾經擔任職業軟體工程師三年以上

可以這樣說, SA給了系統靈魂和神經系統, SD則是給了系統軀體和外觀, 兩者的結合, 才能產生出正確, 美觀又好用的系統。如果你覺得自己是個不太愛和太多人打交道的IT人, 又對使用者介面有那麼點執著及天賦, 那麼, SD絕對是適合你的好選擇。

[SE, 系統工程師]

就某種角度來看, SE對PM而言, 算是萬金油, 只要做IT專案, 那就一定用得上, 差別只是要選那一個專業的SE而已。系統建置安裝要SE, 使用者環境要SE, 甚至到硬體選擇及佈建, 都要用到SE, 有什麼IT專案跟這個沒有關係呢 ?

當然, 雖然SE是到處都吃得開, 但相對的也是專案裡面最沈默及少有聲音的一群。他們的工作基本上就是建構出一個可以執行系統的環境, 系統要如何展現, SE可以給SA和SD一些建議, 但建議時機通常都是在系統運行出了些非系統可以掌握的問題後。

系統工程師基本條件上, 和SD最為接近, 但有一點不同, 就是不需要有很好的軟體開發經驗, 也就是不太需要會寫程式。但要對作業系統, 服務器系統, 網路運用環境有相當程度的瞭解。

SE通常是三者中最為博學一員, 好的SE雖然不一定要程式寫的呱呱叫, 但卻不能對編程一無所知, 對作業系統及開發工具也要有一定的熟悉度, 甚至部份網管有關的工作也要有所涉獵, 所以算得上是專案裡的萬金油。

在專案裡, SE所要執行的工作如下:

· 規劃及建置系統執行環境
· 安裝及設定使用者端環境
· SERVER安裝及設定
· 提供環境設置竟見給SA及PM
· 最佳化系統可靠度及效度
· 撰寫可靠度及效能測試計劃書
· 對電腦及相關週邊設備有一定熟悉度

而一名SE則有下列基本要求:

1. 至少熟悉一種作業系統, 尤其是讓系統的設定及微調等相關技術
2. 至少熟悉一種網路伺服器作業系統, 對如何設定及最佳化熟悉
3. 曾任軟體工程師職務一年以上或熟悉一種開發工具
4. 對網路環境有一定的認識, 尤其是一些通訊設置
5. 熟悉可靠度及效能的評估方法, 並瞭解與系統環境相關之設定

基本上, 如果擁有了像SD一樣的技術背景及個性, 但在美學上實在令人不敢恭維, 那麼SE算是極佳的選擇了。一般而言, SE的下一個生涯規劃, 會比較偏重於技術性兵種, 像是DBA或是網管, 對於IT產品比較有狂熱或愛好的人, SE是極佳的出路。

[在專案中的運用時機]

基本上SE是萬金油, 只要是IT的案子裡就一定要塞一個SE進去, 因為沒有IT專案不需要使用工程技術的, 差別只在使用何種工程技術而已。在套裝軟體的導入專案裡, SE負責處理軟體使用環境, 解決非系統性問題, 安置及調整資料庫和網路環境, 然後安裝啟動。所有系統運行所需要的條件, 都要由SE來解決和處理, 但這些工作全都不會出現在眾人的面前, 但卻又重要無比, 算得上是幕後的英雄。

會同時運用到SA,SD及SE的專案, 還是以客製化開發為主的。

在開發型專案裡, SA團隊要負責初期的需求調查及整體架構的規劃, 將所有的系統開發工作內容轉化成井井有條的文件, 並且適度的分割及派送, 並確保未來這些被分割的開發結果能夠在未來可以正確運作。

SD 則在SA的文件中去尋求系統呈現的一致性, 易用性及保證開發工具可以正確無誤的展現SA的要求結果。所以SD要負責操作界面的外觀設計, 訂定一致的展現規範, 設計系統操作畫面及操作手順, 同時配合SA完成系統開發文件。基本上, 開發文件中, 是包含系統使用手冊初稿的。

SD在設計時, 必需與SA充分配合, 以確保設計的系統符合需求及運作要求。

除了上述的工作內容外, 這三者都要撰寫測試計劃, SA著重在於資料的流動符合原先規劃的順序及結果測試, SD則著重在操作畫面中的防呆測試及操作介面的正確性, 而SE則在系統可靠度上進行規劃。

[軟體工程師何時轉職 ?]

每一個寫程式的人心裡都明白, 這工作不可能做一輩子。不單單是體力及腦力問題, 最重要的是寫程式, 經濟價值實在有限。

我不會否認有很多的程式高手, 但重點不在於你有多優秀, 而是有多少老闆願意付出和你努力成正比的薪資來顧用你。不是沒有這種工作, 而是如同鳳毛麟角, 而且, 這種工作通常你也做不久, 因為壓力太大, 消耗青春太劇烈了。

退一步來說, 你也不值得付出這麼多, 在良好的SA及SD的規劃下, 工程師只要達成一般標準, 就可以解決掉九成以上的軟體開發需求, 除非是機緣巧合, 或是你很有興趣, 否則另外那一成的工作, 你是很難有機會碰上, 或者, 就算碰上, 也沒法子養活你一輩子。

軟體工程師總有一天要轉職的, 這是他們的宿命。

當要轉職時, 他們有幾個選擇, SA, SD, SE, 出去當老闆及換一行等諸多選擇。看起來雖多, 但其實晚景淒涼, 因為寫程式都是關起來寫, 長期自閉的結果, 當他們想轉職時, 很難擁有足夠的人脈來支撐他們換個前途光明的事業。一般人羨慕IT人的高薪, 卻不曉得只是寅支卯糧, 沒有妥善的規劃, 後勢看跌的。

前面的五個選項, 基本上最後兩項只是充場面, 只有少數人才能選那兩個, 大多數軟體工程師還是要在前三者中選一個來發展的。

SA看起來最風光, 未來也是潛力最好的, 但很遺憾的, 軟體工程師裡, 只有少數人適合這個職務。因為這個工作是很需要和別人打交道的, 而好的軟體工程師通常這一點非常不擅長。

因此, 如果你自認為擅於溝通, 三姑六婆都是你的紅顏知己, 邏輯能力不錯, 又對管理有興趣, 那麼SA是你很好的選擇, 程式功力並不是你要考慮的重點。

相對的, 你對使用者介面很有心得, 而且在美感上也獲得了同事的一致讚賞, 程式功力也有那麼一點自信, 討厭和不是搞IT的人打屁聊天, 那不要懷疑, SD是你最佳的歸宿。

最後, 你覺得IT的世界對你充滿了吸引力, 無論是作業系統, 開發工具或是軟體及IT設備都是如此的吸引你, 人與人的接觸對你來說並不是人生的首要需求, 層出不窮的IT科技讓你陶醉其中, 那麼, SE絕對是你的首選。

要如何轉職, 每一個軟體工程師是要誠實面對自己的, 而不是依前途來決定自己要選什麼職務, 如果你依這種方式選, 以我個人在職場生涯的經驗, 這樣的人很難散發出光芒, 也難以有他期望的成就。所以, 現在在寫程式, 正在想要轉職的工程師, 請謹慎而且誠實的面對自己, 做出恰當的選擇。

[結語]

以上是個人提供給對於SA, SD及SE或到困惑的朋友, 做為參考及工作分配的依據。這三者的產生, 其實也是源於目前IT技術的成長過於快速, 所以必需針對軟體工程進行適切的分工, 才能應付好日益複雜的IT環境。