2018/06/19

程序員的修煉之道 (The Pragmatic Programmer) 讀書心得 - 序篇

有些書的序我會跳過不看, 但這本書的序我強烈建議一定要看, 它寫了一相當有價值的東西。
本書的英文書名叫:重視實效的程序員(Pragmatic Programmer)

什麼是重視實效? 在現在這個快速變化的世界, 昨天的好架構明天可能就變成反模式, 程式語言及工具也推陳出新, 許多老的工程師會嘆跟不上時代, 或是在這行實在太累了, 永遠都要學習。 

撇開終生學習這個高大上不談, 程式開發還是有些特性是不太會變的, 本書要講的就是這些可以幫助大家成為更好的程式設計師的一些方法。 

什麼是重視實效? 意思是你不該局限于任何特定的技術, 而是應該擁有足夠廣博的背景及經驗基礎, 以讓你能在特定情況下選擇好的解決方案。

我喜歡這種書是因為你可以在任何時候回來翻它, 翻完後可以得到更多的靈感。

程式員的修煉之道 - 序



編程是一種技藝, 你每天都在創造小小的奇蹟。


編程是艱難的工作, 不存在最佳解決方案這種東西
能夠存在的只是在某些特定情形下更為適宜的系統

注重實效
  • 意思是你不該局限于任何特定的技術, 而是應該擁有足夠廣博的背景及經驗基礎, 以讓你能在特定情況下選擇好的解決方案。
  • 注重實效的程序員不僅要完成工作, 而且要完成得漂亮。

注重實效的程序員有以下特徵
  • 早期的採納者/快速的改編者
  • 好奇
  • 批判的思考者
  • 有現實感
  • 多才多藝

但, 最基本的特徵是
  • Care About Your Craft 關心你的技藝
  • Think! About Your Work 思考! 你的工作

挑戰
  • 在你做某件事情的時候思考你在做什麼。
  • 對你每一天、每一次開發上所做的每一項決策做出批判評估。

你在大型團隊中, 仍然可以是注重實效的個體
是木匠、石匠、雕刻工和玻璃工之類的手藝人
超越了純粹機械方面的一個整體
軟體工藝的支柱: Care、Learn、Practice、Share

它是一個持續的過程
改善: 持續地做出許多的小改進
豐田形學: Improvement Kata

台灣著名的鋼琴家「Pianoboy」高至豪
  • 你有什麼夢想?
  • 如果你願意為了它,努力數十年而不停止
  • 如果你願意努力推銷自己的夢想10年,既使遇到無數的否定和嘲諷還是願意前進
  • 如果你願意堅信你的判斷,既使放棄穩定的薪水和工作,既使失敗,也願意
  • 我相信大部分人,絕對會比我更成功。

2018/06/06

Visual Studio 2017 找不到 .NET Framework 4.6.2

Visual Studio 2017 預設沒有裝 .NET Framework 4.6.2, 可以依以下方式安裝: 到 .NET SDKs for Visual Studio 下載 .NET Framework 4.6.2 Developer Pack 並安裝

或是用 choco command 安裝:

choco install netfx-4.6.2-devpack -y

參考: https://blogs.msdn.microsoft.com/benjaminperkins/2017/03/23/net-framwork-4-6-2-not-in-visual-studio-2017/

2018/04/24

Vim 自動排版 Json 檔

有時候我們會遇到需要用 vim 去開啟 json file, 但如何用 vim 把 json 做排版呢?
可以參考這篇文章的做法: Format JSON in vim
我目前的作法是採用 nmap 的方式把指令寫到 .vimrc
編輯你的 .vimrc, 我是用 windows 版的 vim, 所以 .vimrc 的位罝在:
C:\Program Files (x86)\vim\_vimrc'
加入以下設定:
nmap =j :%!python -m json.tool<CR>
下次再用 vim 開啟 json file, 就只要打 =j 就會自動幫你排版了

2018/03/27

何種鐵槌?何種鏈? 何等火爐煉你的髓?

何種鐵槌?何種鏈?
何等火爐煉你的髓?

威廉.布萊克 〈老虎〉(The Tyger)
這是在圖書館翻書時看到的,我對外國文學沒有研究,上網查了一下,這首詩的意境似乎是在表達上帝與魔鬼的關係,但我單純看到這二句時,關連到的反而是軟體工匠道德聲明裡的 Practice .

軟體工匠道德聲明是 Jason Gorman 分享在 Google 的 software craftsmanship 討論群組裡的簡短聲明,他認為做為一個軟體工匠,需要一個簡潔的口號讓每個從事軟體開發的人員更重視自己的工作及產品。全文是 We Care, We Learn, We Practice, We Share.

其中的 Practice 指的是要成為一個合格的軟體工匠,需要不斷的練習,練習把工作做好,練習專注,並測量你練習後的成果。

這是一段持續且艱苦的過程,透過不斷的練習內化所學到的知識,讓這些軟體開發的力量變成肌肉記憶,直到變成一個高效率的程式人員。

你會需要思考,我如何練習?我找了那些資源?我練習的成果是什麼?能不能像鐡槌一樣的磨練自己的技能?能不能鏈住自己想要放棄的想法,讓自己投入試煉的火爐而成為一隻二眼炯炯有神的老虎?

老虎在生物界裡是一個強大的象徵。自然界裡只有弱小的動物會聚集在一起,把自己藏在群體裡依靠大家生活下來,就像羊群或牛群;反之,強大的生物幾乎不必靠群體就能活,可以獨來獨往,例如老虎。

身為一個程式人員,應該期許自己成為一隻老虎,不是說你不需要靠團隊合作來完成工作,而是你的技能被訓練到足以應付各種的狀況,就算是一個團隊,也會是一群老虎的團隊。

威廉.布萊克的 The Tyger 全文如下 (有人說詩不能翻譯,所以我不想翻… XD)

Tyger Tyger, burning bright,
In the forests of the night;
What immortal hand or eye,
Could frame thy fearful symmetry?

In what distant deeps or skies.
Burnt the fire of thine eyes?
On what wings dare he aspire?
What the hand, dare seize the fire?

And what shoulder, & what art,
Could twist the sinews of thy heart?
And when thy heart began to beat,
What dread hand? & what dread feet?

What the hammer? what the chain,
In what furnace was thy brain?
What the anvil? what dread grasp,
Dare its deadly terrors clasp!

When the stars threw down their spears
And water’d heaven with their tears:
Did he smile his work to see?
Did he who made the Lamb make thee?

Tyger Tyger burning bright,
In the forests of the night:
What immortal hand or eye,
Dare frame thy fearful symmetry?

2017/04/07

Console Application在64bit機器上卻以32bit執行?

可能有人有疑問, 我建置時我明明"方案平台"選擇的是"Any CPU", 但為什麼在64bit的機器上, 卻沒有 預設走64bit呢?

以下程式為例:

using System;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            if (IntPtr.Size == 4)
            {
                Console.WriteLine("現在跑在x86機器上");
            }
            else if (IntPtr.Size == 8)
            {
                Console.WriteLine("現在跑在x64機器上");
            }

            Console.Read();
        }
    }
}

印出的結果:
現在跑在x86機器上

但是我明明是64位元的機器啊~~

原來, Visual Studio的組態設定上, 預設會將"建議使用32位元" 打勾, 建置時就變成以32位元執行了, 所以, 如果日後有新增新的 組態設定 (e.g. QA, Prod環境), 記得也要檢查這部份哦

2017/02/15

NuGet package source設定


建置Jenkins的時候, 如果有自建的NuGet Server, 在建置CI Job時會因為找不到NuGet Server而Build失敗, 通常我們會在Jekinkes上裝Visual Studio然後設定完NuGet的Package Source後, 再重新建置就會成功

但這裡有個方法可以解決這個問題

到Jenkins主機上, 在%ProgramData%\NuGet\下, 新增NuGetDefaults.config, 把自建的NuGet Server加進去就OK了

PS C:\ProgramData\nuget> Get-ChildItem .\NuGetDefaults.config | select fullname
FullName
--------
C:\ProgramData\nuget\NuGetDefaults.config
PS C:\ProgramData\nuget> cat .\NuGetDefaults.config
xml version="1.0" encoding="utf-8"?>
<configuration>
   <packageSources>
      <add key="mynuget" value="http://nuget.mynuget/nuget" />
      <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
   </packageSources>
</configuration>
PS C:\ProgramData\nugget>


Updated:

可以直接用 nuget command line 做設定

2017/02/07

Jenkins 權限設定災難復原



有時候在安裝Jenkins的過程中, 會發生設定 jenkins credentials時, 沒有注意到權限是否設定正確, 就把Anonymous的權限拿掉, 造成所有user都無法再進到管理介面的悲劇...

這時候, 有個簡單的處置辦法, 參考官方的文件: Disable security 的作法

1. 停止Jenkins Service
2. 到$JENKINS_HOME 目錄(通常是C:\Program Files (x86)\Jenkins)
3. 修改config.xml, 修改useSecurity為false. e.g. false
4. Restart Jenkins Service

就可以看到權限變成開放給所有人, 再重新把權限加回去即可

軟體工程的重要的指標