軟體工程與專案管理的不歸路
前一陣子有機會整理一下自己對於軟體工程的認知與了解,讓非程式設計師對於軟體工程有更多的了解,這邊將相關資訊更詳細地整理分享給更多的人了解,首先,何謂軟體工程?
軟體開發是運用既有的程式語言與相關技術基礎開發出想要的功能呈現,但他的結果不一定是好的,例如最終功能不符合最初期待、開發時程遠超過當初的預期、開發成本暴增造成團隊無法負荷、客戶提出的最原始需求並非客戶真正要的需求等等問題,因此軟體業界提出了各種理論來控制上述的問題,這就是軟體工程,大家可以Google軟體工程就可以找到很多軟體工程理論與方法,但這些方法不斷地被驗證與修改,至於哪一個方法是最好的方式可能跟你的團隊能力、成員多寡、團隊主要開發領域有關,沒有一個最好的方法,以下我提到的方法也不會是最好的方法,但可以給大家參考軟體工程師究竟在想甚麼。
首先,最標準的軟體工程定義了甚麼?他的內含主要是針對軟體專案管理需要做甚麼事情做出建議,例如ISO 9001與CMM-I等方法論,他們定義的內含很多,甚至不只是定義給軟體開發產業,ISO 9001是給所有產業的建議,這其中最重要的一環就是『專案管理』,沒有專案管理,團隊只是一盤散沙,但要當好一個專案經理可不是一朝一夕可及,他要懂得所有專案開發階段的相關細節,並且根據實際狀況調整這些流程的應對策略,那軟體開發階段包括哪些步驟,以下是我整理的簡易說明
上圖示一個軟體開發過程中主要會經歷到的階段,其中還有很多細節,例如CMM-I還定義到可行性評估以及風險管理等等(ISO 9001:2015也把風險管理納進流程),但主要還是以上幾個步驟,而軟體開發過程中,越前面的流程失控都會導致後續流程的更大失控,所以專案經理就要在這些流程中隨時反覆地將步調拉回主軸,而除了將一切拉回主軸外,專案經理也要意識到這整個專案的成敗是由專案經理一人所繫,沒有任何藉口。
專案管理的失控原因有哪些,下圖是我整理的大致原因
主要的問題就在於大家輕忽了軟體工程的複雜度,很多人會以以下的觀念
軟體開發不是很成熟的理論嗎?你的失敗一定是因為你沒有照著做
我都給你這麼多資源了,為何還無法如期如質如預算地完成
資訊相關科系畢業的人不是都應該懂這些嗎?為何我還要找你進到公司重新學習?
軟體開發不是軟體工程師的責任嗎?為何經常需要其他部門員工支援?
.....
上面提到的算是整個觀念落差的冰山一角,要將軟體工程做法有幾個主要關鍵
專案經理自我學能的充實要不斷精進,並且對於專案有百分之百的負責態度
軟體開發不是軟體開發部門的事情,是整個公司要緊密配合的工作,包括採購管理、銷售管理、售後服務、組織訓練、決策分析等等多個面向,從企業管理者到各個部門都要緊密配合才能成功完成整個任務
學校會教軟體工程,但不會教你怎麼實踐,實踐一定是畢業之後到企業之後才會開始學的
這是幾個我自己認為比較重要的點,如果要談CMM-I,這篇文章可能會超過10萬字,容我以後有時間再分享,不過CMM-I的實踐在台灣環境確實很難,幾年前台灣還有幾個公司到達ML5,最近一查通通降到ML3,原本ML3的都消失了,主要原因在於實踐CMM-I必須全公司配合完成許多文件的留存與追蹤,這需要很高的成本,大部分的公司都無法在台灣這種軟體無價的環境中執行CMM-I理論,頂多是抽取其中的內涵,適度使用。
這邊說到的無價是指沒有價值,或者說沒有該有的價值,舉個例子,如果你要設計一個形象網站,價格大概是多少,目前市面行情價大約是五萬以內,但很多人對於形象網站的認知有所誤差,所以他會發現自己的形象網站怎麼報價快接近百萬,其實五萬以內的形象網站大都是由一個已經開發好的公版套用出來的,不會有任何你想要的客製化功能。而回到現實面,一般公司可以負擔多少費用建立形象網站呢?就我所知,大家的認知大都是一、兩千塊,其實這連網頁空間都租不起,這就是大部分人對於軟體價值的認知,有時間再寫個專文說明。
接下來要談談這篇文章的主題,就是軟體工程這條不歸路的困難點在哪?最近在網路上看到有人介紹一篇文章,叫做『Why Learning to Code is So Damn Hard』,你可以點連結前往原文,這篇文章直翻就是『為何學習程式開發會如此該死的難』,我想這應該道出不少程式設計師的心聲,這篇文章的主要內容就是下面這張圖
這張圖的總軸是Confidence,就是對於程式開發的信心,橫軸是Competence,可以翻譯成能力或者勝任程度,上面的字是我對於這張圖的一些補充解說,軟體開發的學習包括四個階段:
第一階段是指你可以透過Google等等方式找到你要的資訊,所以你以為自己很適合做程式開發,因此信心增加,但你的能力進展有限
第二階段你就會發現,怎麼程式問題一堆,不斷在debug(除錯),這時候,你的信心降低了,但是能力還是有在提升,但很多人就在這個階段離開了軟體開發,而這個階段的最後會發現『You don't know what...
網際網路的使用藝術 2.0
下面這篇文章是十幾年前寫的,有些人覺得這名字不太切題,但我個人還是比較喜歡這個名字,最近有些小省思,想在這基礎上再做點論述,比較能貼合近代科技,大家可以先讀完我的原文,或者直接往下捲到新的2.0版本。
網際網路的使用藝術
醞釀了一個多月,一直在衡量如何取評斷以及區分孰優孰劣,然而評斷總是不好,也因此,本文會盡量少去判斷,而是以指引的方式來引領大家體解何謂網際網路,何謂藝術。
網路之功能在於溝通,至於溝通的內容如何就難說紛芸,一般人可能認為網路就是上上網、寫寫信、聊聊天,然後藏在後面的卻還有許許多多的未知存在,然而這是一篇介紹文章,而非統整文章,許多東西都只是點到為止。
網路資訊分為文字、影像、聲音等等等,然而最主要的部分在於文字,網路生活與過去的差異在於隨手可得的文字讓我們可以足不出戶而知天下事,而多樣化的資訊則讓文字無法呈現的資訊也能躍然紙上,然而在這許許多多的資訊來源中,我們要如何擷取與尋找則是一門學問。
資訊的接收可以分為主動與被動,一般人都是所謂的被動接收者,所有資訊透過轉寄或者資訊提供者的主動寄發而將資訊放到你的手上,這種方式對於一般人來說是最為方便的方式,而且發展至今,許多接收者都會隨手將資訊又轉寄出去,這造成一些問題:
1.重複:同一封信可能會收到許多次,而有些人甚至就重複地轉寄了許多次。
2.品質:收到一大堆信件後,你真正會去看的可能只是少之又少的內容,其他的東西可能對你一點用都沒有,甚至對所有人都沒用,還可能出現一些錯誤的觀念與資訊,錯誤或者無用的資訊就稱之為垃圾,這對許多人造成了某種程度的困擾。
3.法律:一筆資訊是否可以合法轉寄不止,很少人會去思考,基本上,如果原作者歡迎大家散播,那這筆資料就可以到處寄送,但是只要原作者並未同意或者您也並未詢問原作者之下就轉寄原作的資訊,可能就有法律上的問題。
4.犯罪:當大家養成了轉寄習慣,許多人便開始利用這個習慣去從事一些不合法的事情,並且藉由這種有效率的散播方式,將一些騙局以及非法交易傳遞到每個人手中,能夠判斷其正謬之人自然不會受當,但是卻有許多人會因此蒙受損失。
雖然轉寄資訊有這些問題,但是整個行為對於網路發展卻有某些正面的價值,他促進了資訊的正面傳遞功能,讓政令與知識能夠在最快的速度下傳到每個人手中,所以這種網路文化事實上是不能停止的,也因為其正面作用,所以轉送者需要養成一些良好習慣,才能讓衝擊減到最小,以下將幾個比較有用的轉寄要點列出:
1.不要將原寄件人的資料也轉寄出去,這樣會讓廣告信的業者可以輕易透過大家的幫忙取得您的資訊,如果您看到這一篇文章卻又發現轉寄給你的人把前面許多人的資料都轉給你了,那你就幫他把資料都清掉再轉出去吧。
2.寄給許多人的時候要用密件副本方式寄送,這樣收到的人即使直接轉出去,被別人取得的資料也只有你的資料,你的親朋好友的資料不會因此而被全部送出。
3.重複收到之資訊不要再重新轉寄。
4.可以的話儘量先瀏覽過一次再轉寄。
5.大略地判斷法律問題,如果我發現這是非法資訊,就不要轉寄出去了。
6最重要的是─不要轉寄廣告信。(這是網路大忌)
以上兩點是大家比較知道的方式,但是有時候又會忘記,當然,您經常還是會收到不符合上面所述的郵件,這表示知道的人依舊有限。
相對於被動接收者便是主動接收者,主動接收者當然同時也是被動接收者,只不過他多了一種取得資訊的方法,就是主動尋找,這種人在詢問問題前會充分利用網路的浩瀚資源而直接在網路上找資料,而不是直接打個電話問朋友有沒有這個,有沒有那個,一般公認比較好的搜尋引擎不外乎Google/Yahoo等系統,若你能夠活用這些資源,那你取得資訊的速度與取得的正確性會比別人更好,尋找資源的重點就是要下對『關鍵字』,你如果想找一篇有關網路概論的文章,一般人可能會直接下『網路』兩個字,這樣一來你可能就找到了幾十萬筆資料,那你能得到你要的資料才怪,你可以接著試試用『網路 概論』來找,想必資料就更正確了,甚至進一步用『網路 概論 介紹』來找,或這用『網路+概論』來找,總之就是儘量把範圍縮小,這樣你才能找到你要的東西,這些用法如果你願意花十分鐘看一下搜尋引擎提供的說明網頁必然會事倍功半,然而許多人的解法到最後都是寫一封信或者打一通電話去問,這樣的人永遠無法自己找到資料。
而有接收者自然就有提供者,提供者又分兩類,第一種是定期提供者,就是每天會寄一些有用的資訊給使用者,讓使用者可以免於尋找,這樣的人對於網路的發展提供的核心功能,經由這些提供者許多資訊可以輕易地散佈到一般使用者手中,而不需要使用者去海底撈針。第二種則是將資訊放在固定的地方,你可以透過搜尋引擎找到他,而不是他帶資訊來找你,這是一種願者上勾不願者回頭的做法,只要你願意,你可以從他那裡取得比一般人多出許多的資訊。要如何去活用這兩種資訊就是您的個人智慧了,你願花多少時間,就會有相對的結果給你。
然而提供者資料雖多,但是提供的來源是否合法就備受爭議了,基本上,大部分資訊是需要原出版者同意才能放在你的網頁或者電子報,或者至少能夠在引用的時候註明文章出處,除非原作者不想公開自己的資料,那可能用個暱稱帶過,但最忌直接引用,毫無任何引用資料,此點切切不可忘記。
說了這麼多,一般人常用的網路資源以及使用方法都有一些概述了,然而有一件事情也是十分重要的,就是網路的禮節,有些人寫電子郵件並不知道如何決定標題與內文,有些人會直接將標題當成內文,而內文空無一物,有些人則是沒有標題,把標題也放在內文,這都是不太禮貌的做法,而且網路並不會面對面,所以有些人便不會有平常的禮貌,而錯用了口氣。
另外更嚴重的就是有些人會以為在網路上『要求』或『索取』資訊是天經地義的,所以在口氣上會用一種命令的方式索要,這種人可能會得到一兩次東西,但是卻無法長久擁有資源,也就是說,在向別人索取資訊時要能保持禮貌,不要把『得到回應』想成理所當然,這種現象也常發生在討論區,有些人會去討論區問問題,但是卻無人回答,一時情急之下便會開始抱怨,抱怨為何沒人願意提供資料,抱怨為何無人願意回應,殊不知回應與解答是對他的服務而不是義務。
最後要說的是儘量不要在網路上謾罵攻訐,一旦有人開罵,勢必會有人揭竿而起、一呼百應,來個大對罵,雖然這種狀況每天都會發生,但是儘量保持中立,不要去摻活便是高招,若要調解也儘量用客觀的寫法去評判,否則會越炒越熱。
寫了這麼多只是希望大家能多增加一些基本的網路使用概念,不要用不得法而擾來一身氣,甚至擾來一身的麻煩,期望這篇文章能對大家有所幫助,感謝您的觀看與指教,謝謝!!
凡塵 於 中華民國九十二年六月十四日 凌晨三時
網際網路的使用藝術 2.0
過了十幾年,其實很多事情早就不再相同,大家的信箱可能都還是有一堆垃圾信,但轉寄應該都變少了,現代人沒有人透過郵件在轉寄資訊了,而是被社群媒體取代了,所有轉寄應該都改出現在Facenbook、Line、WeChat、Twitter等媒體上了,而且社群媒體比Mail更能即時傳達訊息,因此有些比較新的問題發生。
此時此刻,最主要的人際溝通管道就是社群媒體的群組,不管是公開還是私密群組都一樣,經常會有很多沒意義或者引發爭議的文字,這裡面其實可以整理出幾個容易造成雙方對立的議題
政治議題:台灣的政治還處於意識形態的爭執,只要提到自己不喜歡的政治立場,就會下意識地想要回應或者拒絕
廣告:所有人都想在群組中獲得自己想獲得的資訊,最不想要獲得的就是廣告,所以很多群組都會對廣告做出禁止或者限制規範
到處轉貼的資訊:有些人看到自己覺得不錯的資訊,就會開始群發到所有群組,也不管這些群組是否歡迎這些資訊
不斷出現的相同訊息:有時候你會看到某一個訊息,覺得他還不錯,但過了一天,同一個人又再次張貼同一個訊息,那這時候你可能就會覺得有點困擾,當連續幾天都不段出現時,不管這個訊息的品質是否良好,都會被當垃圾訊息
指名道姓或者意有所指的指控:網路世界很多人會忽略了法律責任的存在,所以有時候會在社群群組上明指或暗指別人的過錯,如果是十年前,也許沒甚麼關係,這幾年在公開群組中的言語引發法律官司的案例越來越多
火星文:這不用解釋了,看不懂的文字怎麼可能被人所喜歡
其他與群組無關的資訊:群組大都有特定的目的性,所以有些人可能不想看到不相關的資訊,但不相關的資訊如果要徹底禁止,通常會導致群組慢慢趨於滅亡,因此有些群組會訂出明確的規範去發表與群組無關的資訊,但在制定好群組規範之前
這幾個大概就是我自己常看到會導致群組成員爭分的原因,但是否這些資訊都不能張貼,其實不然,有些資訊即使是大家不喜歡的但只要加上一些要素也是很多人喜歡看的,首先,最好在這些主題上只要加上相當分量的原創內容,其實大家還是會願意看的,大家不喜歡看的資訊其實就是上面提到的轉貼以及不斷出現的相同訊息,當你在轉貼時加上自己的一些想法或補充,告訴大家為什麼你要轉貼這個訊息,而不是冰冷冷的直接貼上不做任何說明,有些人把這樣的表達方式稱之為有溫度的文字,總之,這樣的文字大概有以下幾個特性
包含原創內容
表達感受
不帶情緒的字眼
儘量適合群組的相關目的
那,早安圖和有趣的影片呢?這個就很兩極了,有些人覺得很溫暖,但有些人看久了就覺得有些煩,也許把頻率放久一點大家比較不會有違和感吧。
現今的社群媒體很多,主流大概就是大家知道的幾個,但各個國家流行的都不太一樣,台灣還是以Line為大宗,Facebook也不少人用,但WeChat在世界上的使用者也不少,美國比較流行Twitter,還有些地方是Whatsapp,有些地方用Snapchat,前一陣子還玩過一個Telegram,這些都是不同領域流行的社群媒體,當然,還有IG、Pinterest和Google+,每一個都有他的適用性。
社群該有哪些資訊該怎麼管理?這在Line上面尤其重要,因為Line沒有管理者的概念,每一個人的權限都是一樣的,任何人都可以踢人,那該如何做管理呢?一般而言,要有以下幾個步驟
找出一群大家認同的管理者
制定版規
管理者擔任執法者進行管理
這幾個步驟看起來沒有很有大的問題,但其實執行起來是很困難的,尤其當是執法,把人踢出群組很容易產生糾紛,所以版規顯得很重要,要對執法者有相當的保護機制,最重要的一件事情就是,不應該有一言堂的現象,不應該因為你不喜歡某一些資訊就不准別人貼出某些資訊,一個人說一種,其實這群組就會慢慢沉寂,最後消失,尊重是最重要的一個要素,少數服從多數、多數尊重少數一直都是最佳的解法之一,雖然這樣的民主不盡完美,但至少是個比較被普世價值接受的方式。
Google SEO測試
測試一下Google SEO的規則,一開始到Google找"我的資訊兩三事"是無法找到任何東西的
不過因為這個部落格已經申請好很久了,所以直接用網址搜尋是可以找到這個部落格的
但因為名字這幾天才改的,所以沒有辦法找到,但下方的文字是前幾天輸入的,所以確定Google是會更新的,但不知道他的週期,不過發現很精確地找"凡塵集"還是找不到的,看來還有東西要研究。不過要讓Google搜尋還是可以自己在Blogger設定中設定的
最後做個小實驗,將網站簡介加上我的粉絲團網址
當下還是無法搜尋到"我的資訊兩三事",過了幾天後.....
是的,我可以找到了,主要就是讓Google透過已經搜尋到的部落格知道我還有一個想要推薦給大家的粉絲團網址,不過"凡塵集"還是找不到,因此名稱的獨特性是很重要的,凡塵集這個名字並不獨特,要增加SEO排名是很難的,不過我的資訊兩三事也是一樣的道理,當我把關鍵字拆成"資訊兩三事"就找不到了,主要原因是大家比較常會用"資訊兩三事"來找資料,因此我的排名就被排在很後面,查"資訊"和"兩三事"就更不用說了。
接下來呢?持續Google找到相關資訊,其實很多規則可以加強優化自己的SEO排名,但不建議用黑帽SEO技術,因為他只是讓你一時間衝到很前面,但很快就會被搜尋引擎發現,還是累積自己的內容與人氣比較能被Google青睞。
後續繼續研究相關資訊再分享給大家。
雲端科技淺論
近幾年很多人在講雲端技術,但甚麼是雲端?這是個新技術嗎?所謂雲端就是將資訊或者運算機制放在別人家,不放在自己家,那網頁技術就是雲端技術嗎?嚴格來說,網頁就是雲端技術的雛形,所以雲端並不是甚麼有趣的新技術,只是一種老飯新炒,但他又不只是把舊技術做出新定義,而是重新包裝成更適合大家需求的使用方式。
那甚麼是雲端,如果是比較技術的回覆,標準回答包括以下三個架構:
IaaS: Infrastructure as a Service: 就是提供應提平台給大家使用,不用自己建伺服器,Google Cloud Platform, AWS與Azure等等虛擬主機就是這樣的服務 (GCP/AWS/Azure等技術大都同是涵蓋到PaaS與SaaS)
PaaS: Platform as a Service: 就是提供一個平台大家做開發測試等等,這邊指的就是在虛擬主機上提供作業系統,讓使用者可以自由使用,GCP上的App Engine就是一種PaaS應用
SaaS: Software as a Service: 這就是大家比較知道的雲端技術,例如網頁、線上API或GMail等等
因此過去大家熟知的網頁就是SaaS,IaaS與PaaS是比較新的概念,他代表我們不需要自己買硬體來安裝作業系統,所有事情都可以在遠端進行,我們自己的電腦只是一個用戶端(Client),安裝個Windows...
如何在CentOS 7安裝一套完整的LAMP服務 第三章 PHP安裝
PHP是執行動態網頁程式最常用的方法,其他比較常見的方法還有Java, Python, Ruby, C#等等機制,但PHP還是最常使用的一種方式,這邊先介紹如何安裝比較新的PHP 7版本,以7.1為例,就要建立所屬的Repo,安裝方式很簡單,只要執行以下兩個指令
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
接下來就可以開始安裝PHP 7.1
sudo yum install mod_php71w php71w-cli php71w-common php71w-gd php71w-mbstring php71w-mcrypt php71w-mysqlnd php71w-xml
以上為比較常用的指令,有需要可以後續再補裝
看到上面的清單就表示可以開始安裝了。
安裝好之後重新啟動HTTPD就可以使用PHP了,PHP的設定檔放在 /etc/php.ini,如有需要可以修改此檔案,再重啟HTTPD使用該功能。
設定檔
設定檔的設定很多,比較常用的在下面做簡單介紹
Upload相關
...












