堅持與固執

轉貼自  http://www.ithome.com.tw/itadm/article.php?c=51601

沒有人是毅力驚人的鐵漢,在面對堅持這件事的時候,難免有些彈性,有點妥協,再加上一點點惰性。心胸要能放得開,有些時候退一步讓人與人之間的介面軟化,讓事情可以順利進行,才不會為了堅持卻反而變成了固執。 
 
 
小伙子,你知道什麼是堅持,什麼是固執嗎?」一個業界的前輩突然問我。我常常被別人說是很固執,沒有人說我堅持,其實我也沒想過這兩者的差別,感覺上成功的人都會說自己有堅持,失敗的人都會被別人說他很固執。不過我做了一個比較頑皮的回答:「老人家看小朋友做事情,都會認為是固執;但是小朋友會自己覺得是堅持。」 

畢竟,只要不聽我們勸告的人,通常就會被冠上固執的帽子。老一輩的人常常講堅持:堅持與客戶之間的關係,堅持品質,堅持良好信用……前輩說,事情沒有那麼複雜,他認為「堅持的人知道自己在做什麼,固執的人則是情緒在左右他做什麼」。 

要能聽人家的勸告,並且把其中的道理納入到自己的決策,這件事情並不容易。身為工程師,先天就存在著相當強烈的固執成分,因為我們習慣跟電腦溝通,不習慣跟人溝通;習慣明確的邏輯,不習慣人跟人之間複雜的關係。但是事業經營說穿了就是人,不管是領導者還是小工程師,難免都會有一種「想要自己卯起來幹」的衝動,但是做法上只要參入了情緒的成分,就算是固執了。 

情緒的產生,有很多原因,我們沒辦法要求所有人在溝通的過程中保持客觀冷靜,導致溝通之後,可能大家仍是各做各的沒有交集。 
我們都會說自己知道自己在做什麼,但是在別人看來,我們是有點難以控制或者不好溝通的。如果結果是正面的,能得到的嘉獎不多,通常成果也不會被上級所接受。反之,如果是負面的,那就更不用說了。可是我們明明知道自己在做什麼,為什麼不被人接受,而且還會被說是固執呢? 

我想問題是出在於我們對「知道自己在做什麼」的定義不同所導致。每個人在組織裡面,都有被賦予的職責,站在這個職責上做應該做的事情,是第一要務。按照這個方式來推論,就會演變成公司裡面的人害怕擔責任,所以事情都推來推去,不然就是前人說怎麼做就怎麼做,都不會去創新,這樣公司怎麼辦?彼得杜拉克說,只要有事情是任何人都做不好的,那這件任務或者執掌就必須要被重新定義。在自己分內仍然有相當多的創意可以發揮,如果我們真的以為被限制在職責這個框架裡面,接下來的所做所為就難免變成固執了。 

「所以說,固執的人,眼睛只會直直看著前面;堅持的人,心在看前面,仍然可以眼觀四面。」一個學長這樣子評論底下的工程師。 
當我們越做越窄的時候,當我們發現可以選擇的方案越來越少,或者所有事情都只有單一方向與必然結果的時候,我們就犯了固執的毛病。固執並沒有不好,凡是成功的人必然固執,差異應該在於格局的大小,還有重點的定義,當我們顧全大局,集中力量堅持於重點的時候,才有可能把原本狹隘的固執轉換為成就事業的堅持。 

什麼是大局?從公司的角度來看,就是拿到訂單。我聽說有些公司為了做好手機,派了一組人將目標市場走透透,到處去測試訊號的靈敏度,這種接近變態的固執,算是堅持。也有知名的企業,雖然有機會上門,但是這個機會的風險太大,遠超過公司所能負荷,基於堅持原則而放棄,結果倖免於在金融風暴中被拖垮的命運。當然我們也常常聽說,為了要滿足客戶的需求,廠商想破腦袋改善製程,提升技術,甚至服務到家的種種變態的固執,這些都是堅持。 
可是如果我們把格局縮小,只看到利益而沒有注意到風險,演變成不聽旁人的規勸,只想固執小利,結果反而深受其害。 

任何企業的資源都有限,想要在競爭中脫穎而出,就需要將資源放在重點上。但是大多數的企業都面臨同樣的困擾:機會太多,興趣廣泛,所以力量難以集中。要將事情做得好,並不一定只能把資源釘死在幾個重點上,重要的是「段落」的處理。每件事情做到一個完整的段落,再轉移進行另外一件事情,就可以用有限的資源照顧到大多數的重點。所以,重點定義的多寡並不會影響企業的發展,主要的問題在於資源的「投入」與「轉移」動作是否收乾淨,這裡面就需要堅持,把案子收尾收好才能轉移。缺乏堅持,即使重點定義正確,但收尾沒收好,就等於同時追好幾隻兔子,最後抓不到半隻。 

看的遠的人,往往被別人所誤解,所以被別人講是固執不見得是壞事,被別人誤解也不見得不會成功。心裡面必須放得開,想清楚自己目前執意走這條路有沒有意義?有沒有賭氣?是否急著想要得到什麼利益?有沒有先把自己分內該做的事情做好? 堅持的代價常常都會是寂寞與痛苦,但是如果立意良善,而且對大家都有好處的話,結果仍會是雙贏互惠的。 

我們都不是毅力驚人的鐵漢,在面對堅持這件事的時候,難免有些彈性,有點妥協,再加上一點點惰性。心胸要能放得開,有些時候退一步讓人與人之間的介面軟化,讓事情可以順利進行,才不會為了堅持卻反而變成了固執。 

作者簡介: 
吳俊瑩-iThome電腦報技術主筆 
交大電子工程系、臺大電機研究所、政大科技班畢業,身兼IT/電子技術顧問和某小型電子公司研發處長。

Posted by Solomon 2010年9月16日 02:42


93技藝競賽Q3-聯立方程式

 

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test3.txt")
        Dim d() = Split(fileContents, ",")

        Dim a1 = Val(d(0)), b1 = Val(d(1)), c1 = Val(d(2)), a2 = Val(d(3)), b2 = Val(d(4)), c2 = Val(d(5))
        'a1*X + b1*Y + c1 = 0
        'a2*X + b2*Y + c2 = 0

        Dim n = a2 / a1  
        a1 = a1 * n  
        b1 = b1 * n
        c1 = c1 * n

        a1 = a1 - a2
        b1 = b1 - b2
        c1 = c1 - c2
        Dim k = -1 * c1
        Dim y = k / b1


        b2 = b2 * y
        n = (b2 + c2) * -1
        Dim x = n / a2
        Dim STR1 = "X = " & x & ", Y = " & y
        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result3.txt", STR1, False)
        End
    End Sub
End Class

 

解得出數學題,成就感是不同的 !
誰叫我國中數學就開始學不好,
XX老師的問題??

 

學習筆記一下:
正負反轉的方式很多
例:

a1 = 3
a1 = a1 * -1
'將a1 = 3乘上 -1 就等於  -3

a1 = -3
a1 = 0 - a1
'用 0 減去 a1 = -3 就等於 3

Posted by Solomon 2010年9月13日 09:08


二進位數相乘

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test1.txt")
        Dim d() = Split(fileContents, " x ") 
        
        Dim n1 = d(0), n2 = d(1)
        Dim Len = n1.Length * 2
        Dim str1 = Space(Len) & n1 & vbNewLine & Space(Len) & n2 & vbNewLine & "--------------------" & vbNewLine
        For i As Integer = n1.Length To 1 Step -1
            If Mid(n2, i, 1) = "0" Then
                str1 = str1 & Space(len) & StrDup(n1.Length, "0") & vbNewLine
            Else
                str1 = str1 & Space(len) & n1 & vbNewLine
            End If
            len = len - 1
        Next
        Dim x = c10to2(c2to10(n1) * c2to10(n2))
        str1 = str1 & "--------------------" & vbNewLine & Space(len) & x
        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result1.txt", str1, False)
        End
    End Sub

    Function c2to10(ByVal x As String)
        Dim c = 0
        Dim n = x.ToString
        For i As Integer = n.Length To 1 Step -1
            If Mid(n, i, 1) = "1" Then c = c + (2 ^ (n.Length - i))
        Next
        Return c
    End Function

    Function c10to2(ByVal y As String)
        Dim x = Val(y)
        Dim str1 = ""
        Do Until x = 1 Or x = 0
            str1 = IIf(x Mod 2 = 0, "0" & str1, "1" & str1)
            x = x \ 2
        Loop
        str1 = IIf(x = 0, "0" & str1, "1" & str1)
        Return str1
    End Function

End Class

上課半夜

Posted by Solomon 2010年9月08日 10:08


Problem7:進位判斷(13%)

加法的運算是把 2 個整數靠右對齊,然後由右至左,一位一位相加。如果相加的結果大

於等於 10 就有進位(carry)發生。請寫個程式來判斷兩個正整數相加時,產生了幾次進位的
情況。 
 
輸入說明: 
第一行的數字,表示有幾組測試資料,第二行開始的每一行即為一筆測試資料。每一行
輸入的資料有兩個正整數,以一個空格分開,每個整數的長度均小於 100 位數。 
 
輸出說明: 
對每一筆測試資料,輸出相加後有幾次進位的次數。 
 
輸入範例: 
123 456 
555 555 
 
輸出範例: 
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test7.txt")
        Dim row() = Split(fileContents, vbNewLine)

        Dim str1 = ""
        For i As Integer = 1 To Val(row(0))
            Dim d() = Split(row(i), " ")
            Dim a(100)
            Dim b(100)
            Dim at = d(0)
            Dim bt = d(1)
            Dim c = 0
            For k As Integer = 0 To 100
                a(k) = 0
                b(k) = 0
            Next
            For j As Integer = at.Length To 1 Step -1
                a(j - 1) = Val(Mid(at, at.Length - j + 1, 1))
            Next
            For j As Integer = bt.Length To 1 Step -1
                b(j - 1) = Val(Mid(bt, bt.Length - j + 1, 1))
            Next
            For j As Integer = 0 To 100
                If a(j) + b(j) >= 10 Then
                    a(j + 1) = a(j + 1) + 1
                    c = c + 1
                End If
            Next
            str1 = str1 & c & vbNewLine
        Next

        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result7.txt", str1, False)
        End
    End Sub
End Class
 
 

 

Posted by Solomon 2010年8月14日 17:46


Problem5:字串處理(10%)

 Problem5:字串處理(10%) 

給一個字串,請寫一個程式,計算此字串中,英文字元有幾個? 
 
輸入說明: 
輸入檔第一行表示有幾組測試資料,第二行開始的每一行即為一筆測試資料,每行最多
有 1000 個字元。 
 
輸出說明: 
對每一筆測試資料,輸出字串中英文字元的個數。 
 
輸入範例: 
abc123def456 
133adfag3428a2fwqgq2 
 
輸出範例: 
11 
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test5.txt")
        Dim row() = Split(fileContents, vbNewLine)

        Dim str1 = ""
        For i As Integer = 1 To Val(row(0))
            If row(i) = "" Then Exit For
            Dim c = 0
            Dim a = row(i)
            For j As Integer = 1 To a.Length
                If Asc(Mid(a, j, 1)) >= 97 And Asc(Mid(a, j, 1)) <= 122 Then
                    c = c   1
                ElseIf Asc(Mid(a, j, 1)) >= 65 And Asc(Mid(a, j, 1)) <= 90 Then
                    c = c   1
                End If
            Next
            str1 = str1 & c & vbNewLine
        Next
        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result5.txt", str1, False)

        End
    End Sub
End Class
題目沒說明字串裡的英文字大小寫,為了以防萬一,就多了一個判斷  大寫也算進去
 
話說半夜練習程式安靜許多
我都不想睡了

 

Posted by Solomon 2010年8月14日 08:45


Problem6:判斷是否為 11 的倍數(14%)

給一個正整數 n,請寫一個程式,判斷 n 是否為 11 的倍數? 

 
輸入說明: 
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料。每筆測試資料
為一個正整數,數字的位數,最高有可能到 1000 位。 
 
輸出說明: 
對每一筆測試資料,輸出是否為 11 的倍數。是的話請輸出 1,反之則輸出 0。 
 
輸入範例: 
24841983960 
121 
 
輸出範例: 
1
 
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test6.txt")
        Dim row() = Split(fileContents, vbNewLine)

        Dim result = ""
        For j As Integer = 1 To Val(row(0))
            Dim str = row(j)
            Dim a = 0
            For i As Integer = 1 To str.Length
                If (i   1) Mod 2 = 0 Then
                    a = a   Val(Mid(str, i, 1))
                Else
                    a = a - Val(Mid(str, i, 1))
                End If
            Next
            Dim str1 = ""
            If a = 0 Or a = 11 Then
                str1 = "1"     '是11的倍數
            Else
                str1 = "0"
            End If
            result = result & str1 & vbNewLine
        Next

        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result6.txt", result, False)

        End
    End Sub
End Class

 這題考慮到的問題是  最高有可能到 1000 位    
是個天大的數字阿  
所以並不能方式直接判斷 數字 MOD 11 = 0
當然
要是這樣出題還需要考嗎

 

解決方法是
a = 奇數位數的數字相加
b = 偶數位數的數字相加
假若a - b = 0  或者 11 就是11的倍數



 

Posted by Solomon 2010年8月14日 03:31


Problem2:數字分解(11%)

 Problem2:數字分解(11%) 

給一個偶數 n,請你將 n 分解成兩個質數的和,也就是說,這兩個質數相加的和必須等於 n。 
 
輸入說明: 
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料,每筆測試資料
為一個數字,數字的範圍為[4, 10000]間的偶數。 
 
輸出說明: 
對輸入的每筆測試資料,分別輸出 2 個質數,用一個空白做為區隔,請由小到大排列。 
 
輸入範例: 
12 
100 
 
輸出範例: 
5 7 
3 97 
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test2.txt")
        Dim row() = Split(fileContents, vbNewLine)

        Dim str1 = ""
        For i As Integer = 0 To Val(row(0))
            If row(i) = "" Then Exit For
            Dim k = Val(row(i))
            For j As Integer = k - 1 To 1 Step -1
                If f(k - j) = True And f(k - (k - j)) = True Then  '條件:兩個都是質數
                    str1 = str1 & k - j & " " & k - (k - j) & vbNewLine
                    Exit For
                End If
            Next
        Next

        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result2.txt", str1, False)

        End
    End Sub

    Function f(ByVal n) '質數判斷
        Dim c = 0
        Dim a = False
        For i As Integer = 1 To n
            If n Mod i = 0 Then c = c   1
        Next
        If c = 2 Then a = True
        Return a
    End Function
End Class

 

Posted by Solomon 2010年8月14日 03:22


Problem1:數字刪除(12%)

Problem1:數字刪除(12%) 

給 n 個數字,請你在這 n 個數字中,找出所有重覆出現的數字,並把它刪除。最後計算
刪除後剩餘的數字個數。 
 
輸入說明: 
第一行的數字,表示有幾組測試資料,第二行開始即為第一筆測試資料,每行不會超過
100 個數字,每個數字之間用一個空白做為區隔,數字的範圍為[0, 10000]間的整數。 
 
輸出說明: 
對輸入的每筆測試資料,分別輸出刪除完後剩下的數字個數。 
 
輸入範例: 
1 2 3 4 5 6 7 8 9 2 1 
2 4 6 8 10 
 
輸出範例: 
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim fileContents As String
        fileContents = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\Test1.txt")

        Dim row() = Split(fileContents, vbNewLine)

        Dim str1 = ""
        For i As Integer = 1 To Val(row(0))
            Dim aList = New ArrayList
            If row(i) = "" Then Exit For
            Dim d() = Split(row(i), " ")
            For j As Integer = 0 To d.Length - 1
                If alist.Contains(d(j)) = False Then '若不存在則加入
                    alist.Add(d(j))
                Else                                 '否則從aList中刪除
                    aList.Remove(d(j))
                End If
            Next
            str1 = str1 & alist.Count & vbNewLine
        Next

        My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\result1.txt", str1, False)

        End
    End Sub
End Class

 

Posted by Solomon 2010年8月14日 03:13