iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
4
自我挑戰組

計算機概論X30天系列 第 4

Day4: [心得]工程師的三個重要能力

閱讀前,建議可以參考Day1:閱讀指南&為何選擇這個題目?

▌挑戰簡介

  • 題目:計算機概論X30天

  • 挑戰內容:連續30天紀錄計算機概論、離散數學、演算法、資料結構等課程,還有自己學習程式的心得體悟。

  • 本篇性質:適合任何對程式語言有興趣的人閱讀(我還不是工程師只是個初學者,因此這純粹是我的觀察心得,歡迎討論。)

▌三個重要能力

我不是工程師,但我嘗試刻畫我心目中工程師的樣子。我認為工程師有三個重要能力

  1. 駕馭複雜工具的能力——解決問題才是工程師的重要意義
  2. 閱讀的能力——不重新造輪子
  3. 選擇的能力——知道自己要什麼

▌1.駕馭複雜工具的能力

有一段時間很焦慮,因為現有的技術太多,實在沒辦法一一掌握。在做一些作品的時候,我會覺得心虛,覺得自己只是再複製別人的code然後貼上,根本沒有發揮自己的價值。像是如果是要做一個還可以的網站,其實只要會用Bootstrap套一下,不懂的朋友一看可能覺得你這個人很厲害,但你自己內心會很心虛的想「呃~這很簡單,不過就是套東西,也沒用幾秒。」還有一些框架的使用,雖然會使用,但其實不太懂底層原理,想要認真研究又覺得一一研究又很花時間,因此覺得心很累。

後來,我把我的煩惱投到上六角學院的前端諮詢室,洧杰老師的回答讓我覺得很有啟發,他回答的大意是說:很多工程師其實也只會用別人的框架,而不是自己從底層開此做。其實,只要可以解決問題就是好的工程師,統合也是工程師重要的能力

解決問題——才是工程師存在最重要意義」這件事情讓我啟發很大。

仔細想想,我覺得工程師跟醫師好像有一點像。醫師也是一個必須面對大量複雜工具的職業,一個合格的醫師要會的藥物、手術、檢查和技術可能就要上千種。因此一開始,他們也不太可能馬上掌握每種藥物和技術背後的原理,而都是先從工具層次(先學會跟隨SOP照著做),然後在慢慢的努力讀書研究的。

醫師最重要的目的是「治療病人」,同樣的,工程師最重要的目的則是「解決工程問題」,沒有人有那種時間從0開始慢慢建構程式碼的XD。因此,我覺得工程師第一個應該培養思維模式是——學會如何駕馭複雜工具,並學會用其解決實際問題。(當然,這不是說就不用去鑽研底層原理了。而是說,如果忘記了學習最原初的目的,反而容易迷失在技術的學習當中。)

▌2.閱讀的能力

第二個工程師的重要能力,我覺得是閱讀

關於這點,我有很多不好的習慣:

埋頭寫自己的程式,不願意看別人寫的文件

遇到問題時,我雖然會上網查資料,但因為多網路上搜到的答案和文件大多很複雜(常常是一堆奇怪的程式碼、專有名詞還有英文),所以只是草草掃過而不願意靜下心閱讀文件,最後就「嗯...(關掉XD」,然後回去硬幹。但最後事實證明這就是浪費時間,我要麼是無法解決,要麼就是花費了大量時間拼湊出一個勉強可以的爛程式。

但其實,市面上早已經有許多現成的解決方案了,只要好好閱讀文件,這些問題一下就解決了。雖然實作也很重要,但是先學會理解、利用他人的程式碼,其實更高效、效果也好。

知名顧問公司麥肯錫(McKinsey)的宗旨是「不要重新造輪子」——要相信其實世界上的多數的問題都早已經有現成的解決方法,只是我們不知道而已。

只想找教學文和影片,不會看別人的code

跟上面那個習慣差不多,簡單來說就是「不想讀複雜的東西」。面對難題,下意識就會只想找教學文和影片(而且最好逐行註釋)。但後來發現,其實許多方法根本沒有機會被寫成教學文章,或是在社群中被提問出來。因此我開始學會去Github搜索相關資料,讀別人的原始檔,這才發現真的很多方法其實別人都寫過。老實說,剛開始讀別人的code的時候確實會懷疑人生,但讀久了也漸漸的發現每個程式確實就像一本書,每個作者有自己的觀點,看事情的方法。

其實等到工作時,早晚也要開始接手別人的legacy code,畢竟一個公司的系統很少是一個人打造的,總是必須在舊有的基礎上擴充或是改寫。

▌3.選擇的能力

資訊的世界有太多東西可以學。

如果是初學者,剛開始當然從網頁從Html/css開始,學完後就學個JS,然後聽說jQuery比較方便就去學個jQuery,想套模板在用個Bootstrap。後來聽說要學點資料庫,就跑去學php/mysql/nodeJS/firebase,然後又聽說JS有不同框架,於是又去學Vue/react/angular。

什麼學完了嗎?不,想要成為真正的工程師,必須開始進入C/JAVA的世界了。然後就是更基礎的學資料結構、演算法、計算機結構、網路協議....哦...別忘了,還有熱門的人工智能、區塊鏈要學。

於是,每天每天都覺得很焦慮,但認真的問自己

  • 技術有學完的一天嗎?
  • 真的有必要學那麼多?

——答案都是「沒有」。

技術的本質是為了解決問題,而不是為了製造問題(增加人類的煩惱)。因此重點應該是問「我想解決什麼問題?」,而不是為單純為了學而學。

正是因為在資訊的世界裡,可以學的東西太多,因此我覺得——知道要選擇學什麼的能力這件事變得特別重要。

▌追趕技術這件事——人究竟是技術的奴隸?還是主人?

有時候思考追趕技術這件事,會覺得有點感慨——知識的本質應該是為了讓人類變幸福,但往往他們卻會反過來變成是人類的壓力。

想想人生好像也是如此?高中的時候焦慮如何考上大學,大學的時候焦慮如何找到工作,工作之後肯定就是開始焦慮如何升職、創立事業。感覺人生其實一直都在努力和焦慮的迴圈中無可自拔,不管是什麼階段,我們內心總是存在一個「只要我能怎樣怎樣,就可以幸福了」的預設。

可是,最後真的會因此變得更幸福嗎?我覺得很多時候都不會。

「只要我能怎樣怎樣,就可以幸福了」似乎只是一個永無止盡的迴圈。一但讓自己真的達成了階段性目標,馬上會出現另一個新的目標讓自己焦慮,一圈,兩圈,三圈....最終,人生不小心就這樣過去了。

所謂的知識/努力/技術原本應該是讓自己幸福的手段,但往往卻讓自己變成奴隸。

最終我明白了。其實我不該問「我未來想要什麼」,我只能問——「我在現在學習的過程中是否幸福了?」

▌總結

三條我覺得工程師重要的能力

  1. 駕馭複雜工具的能力——解決問題才是工程師的重要意義,發明工具只是其次
  2. 閱讀的能力——學會看別人的code,不重新造輪子
  3. 選擇的能力——知道自己要什麼,問自己究竟需要什麼

編輯|潘勛
作者|Nissen

*每天寫1000~2000真的很累,覺得開始失去嚴謹論述的能力了,感謝潘勛編輯幫我校稿XD


上一篇
Day3:[心得]心得體悟:學習程式的方法
下一篇
Day5:[演算法]如何衡量程式的效率?——論時間複雜度(Time Complexity)
系列文
計算機概論X30天30

1 則留言

0
fysh711426
iT邦研究生 3 級 ‧ 2018-10-20 20:16:37

這篇點到好幾個痛點,尤其是第三點,真的是越學越焦慮了。
/images/emoticon/emoticon70.gif

我覺得重要的是必須讓自己有個明確的目標,
不論那個目標是為了找新工作或是讓現在的自己開發更輕鬆都是,
學新技術是為了縮短自己與目標間的距離,而不是因為他熱門。

fysh711426 iT邦研究生 3 級‧ 2018-10-20 22:33:19 檢舉

大大很有毅力,覺得厲害!!!

高中的時候焦慮如何考上大學,大學的時候焦慮如何找到工作,工作之後肯定就是開始焦慮如何升職、獲得成就。

有類似的感覺,看來需要找時間沉澱一下自己。
/images/emoticon/emoticon37.gif

Nissen iT邦新手 5 級‧ 2018-10-20 23:39:34 檢舉

謝謝閱讀~

因為這也是我的焦慮之一。
我總是一邊向未來衝刺,但是一邊又覺得很害怕。

我害怕,自己顧著衝刺,卻沒有好好體驗人生。
我害怕,臨終前卻發現自己從未愛過、恨過和盡情活過。

在那個瞬間,即時我已經擁有再多的錢、再好的技能、再高的地位,那有怎樣呢?
我的ㄧ生只是作為社會的工具和奴隸活著罷了。

希望我們都能學會享受當下的每一刻~

我要留言

立即登入留言