工作的種類
要成為一個稱職的工程師,我們的第一步,就是要喜歡你的工具,善用你的工具,讓工具可以為你所用。
以及我們需要一些成長的脈絡,從一些工作的職位,你可以知道軟體工業,需要怎麼樣的技能。從這些名字裡面,你就可以有很多的想像,其中也隱含著你該怎麼充實自己。
- Developer
- Architect
- Operation
- Package Manager
- Release Manager
- Quality Assurance
- Test Development
讓自己達到高水準的境界很重要。但是別忘了,你提高水準的目的,是為了可以把問題解得又快又好,過程輕鬆快樂有成就感,不是把工具玩得很熟練而已。
為你的系統增加功能
系統的套件管理工具
為自己的系統安裝更多程式,比如說你在乾淨安裝的 ubutntu 下想要使用 vim, 你在 terminal 下打 vim, 你會看到如下的畫面:
tim@ubuntu:~$ vim
The program 'vim' can be found in the following packages:
* vim
* vim-gnome
* vim-tiny
* vim-athena
* vim-gtk
* vim-nox
Try: sudo apt-get install <selected package>
現在的系統畫面的訊息,請認真看,出錯之後的訊息,各種程式都很努力的想告訴你資訊,看不懂也要冷靜地去 google, 剛學寫程式的高牆,就是無法掌握錯誤訊息。
上面的訊息很直白的翻譯,就是系統沒有 vim 可以用,但是 ubuntu 認得 vim, ubuntu 很貼心給了你指引,我們就聽她的話,打入下面的指令就可以了。
sudo apt-get install vim
安裝好以後,你就可以在 terminal 上使用 vim 了。
ubutntu 系統的套件,都是靠 apt-get, apt-cache 這兩個指令來做管理。
apt-cache search 任何你聽過的工具
這些套件,都是 canonical 公司,以及 ubuntu 社群的義工的所維護的。每一個套件都有在 ubuntu 的環境好好測試執行過,所以都是值得信賴的。
- 程式語言的套件管理工具
先來玩一下 python 的 shell
timdeMacBook-Pro:python-for-a-real-programer tim$ python
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = u'中文'
>>> a
u'\u4e2d\u6587'
>>>
u'\u4e2d\u6587' 在工程上很有用,是這兩個中文字的 unicode 編碼。 在資料存擋,網路傳輸時,都是有用的工具,但是若你想要觀察資料的時候,就很不方便了。
python 有一個套件叫做 uniout, 可以讓我們在 python 的 shell 下,可以觀察非英文語系的資料。
但用 apt-cache 尋找 uniout 時,是找不到的到?
仔細看一下 uniout 的官網,要安裝 uniout 你必須要下面的指令:
sudo pip install uniout
pip 就是 python 專用的套件管理軟體,試著把它裝好吧:
sudo apt-get install python-pip
喔不,為什麼不都用 ubuntu 的 apt-get 就好。
因為工作流程都是 Python 工程師製作好了套件以後。在被其他作業系統的志工收納進去。
因此,你要使用最新,最完整的 Python 套件,你要用 pip.
其實就連編輯器也有套件管理工具 不過這就超過我們這次的範圍了。
回到安裝 uniout.
請仔細看安裝完的結果, 下面是一般成功的狀態:
timdeMacBook-Pro:python-for-a-real-programer tim$ sudo pip install uniout
Downloading/unpacking uniout
Downloading uniout-0.3.7.tar.gz
Running setup.py egg_info for package uniout
warning: no previously-included files matching '*.pyc' found anywhere in distribution
Installing collected packages: uniout
Running setup.py install for uniout
warning: no previously-included files matching '*.pyc' found anywhere in distribution
Successfully installed uniout
Cleaning up...
你會看到 successfully 這個令人振奮的字眼。
下面你忘記加上 sudo 的結果,你會看到 Permission denied.
error: /Library/Python/2.7/site-packages/_uniout.py: Permission denied
----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools;__file__='/private/var/folders/7r/0m7j9n750xn_hfh73nly7sk00000gn/T/pip_build_tim/uniout/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/7r/0m7j9n750xn_hfh73nly7sk00000gn/T/pip-q4LqDZ-record/install-record.txt --single-version-externally-managed failed with error code 1 in /private/var/folders/7r/0m7j9n750xn_hfh73nly7sk00000gn/T/pip_build_tim/uniout
Storing complete log in /Users/tim/Library/Logs/pip.log
如果你的帳號沒有 root 權限。就嘗試使用下面的方式安裝,這時會把套件裝到 家目錄下的 .local/lib/python2.7/site-packages/ 裡面。
pip install --user uniout
裝好 uniout, 請重新開啟 Python 的 shell.
>>> exit()
你可以在 python shell 裡面開心觀察中文了。
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import uniout
>>> a = u'中文'
>>> a
u'中文'
小結:套件安裝
系統有自己的套件安裝工具 apt-get, apt-cache, 你可以裝很多很豐富的東西,而且都有人幫你測試好了,讓你可以不用擔心裝到有問題的軟體。 Python 有自己的套件管理工具,讓你管理 Python 的套件。
Virtual Environment
用剛剛教下的方法把套件裝進系統裡,在你隨意做實驗的情境之下,完全沒有問題。 但是若你已經是一個專業的 python 程式設計師的話,你最好開始使用 virtualenv.
sudo pip install virtualenv
ubuntu 提供的套件,通常都會比 python 官方提供的套件舊一點點,但是有經過 ubuntu 官方完整測試過。但若你貿然使用 pip 裝了新套件,那就沒有經過 ubuntu 完整測試過,或許就會讓系統陷入不穩定的狀態。另外,若是我們維護一個稍舊的專案。這個專案會需要比較舊的套件,這時,等於是把你的系統降級了。 另外你的手上有多個專案同時逕行,你會需要這些專案各自使用自己的套件,不要互相影響。
建立一個 virtualenv 的方法如下:
virtualenv venv
進入 virtualenv:
source venv/bin/activate
離開 virtualenv, 直接把 terminal 關了也行,virtualenv 只會影響你正在使用的 bash shell
deactivate
virtualenv 可以完美解決上述的問題。 所以以下的工作流程,可以多做練習,養成習慣。
最後,若是系統常常裝了亂七八糟的套件,使用 virtualenv 更有砍掉重練,乾乾淨淨重新開始的感覺,有時一些套件運作不正常的問題,也可以在使用 virtualenv 之下迎刃而解。
練習
請在 /tmp/下開始使用 virtualenv,在 virtualenv 裡面安裝 pycuber 玩一玩。
最後離開 virtualenv,請你確認離開以後的 python shell, 是沒有 pycuber 的。