透過刷題變強的方法

閱讀時間約 4 分鐘
上週發布的刷題無法變強的原因短短幾天就成為了我在方格子上最熱門的文章,既然我們討論到了刷題跟面試的關聯性,不如再深入討論刷題這個行為本身,應該要注重怎樣的關鍵才能夠變強。

什麼是電腦科學

我們身為軟體工程師,平常最常接觸的就是電腦,要讓電腦有效地發揮作用演算法、資料結構這些在學習電腦科學過程中會學到的知識,就是重要的技能。
這也是軟體工程師的素養點出的問題,成為一名軟體工程師已經變得非常容易入門,我自己也是把它當作興趣一樣在看待。然而這樣的狀態就很容易讓我們把「電腦科學」的重要性忘記。
即使知道電腦科學的重要,大多數人也只知道要學「演算法」「資料結構」卻不清楚為何而學,在我的經驗中成大教授 jserv 老師的線上公開課程經常會從硬體到軟體的關聯解釋,內容通常需要有點底子,有興趣可以挑戰看看。

善用科學思考

刷題的時候,我們應該思考的不是「如何回答」而是用科學的方式,根據情境、題目要求進行分析,最後再找出適合的演算法去解決這些問題,同時也可以反思自己是否缺少對某些知識的理解。
我在跟同事解釋演算法的時候經常會用 Ruby 的 Array#bsearch 方法來舉例,這是一個 Ruby 比較少人知道的方法,可以使用 Binary Search(二分搜尋法)演算法來查詢陣列內的資料。
如果對二分搜尋法有概念,會知道在「已排序」的狀況下速度會比正常狀況好很多。雖然會使用到的情況不常見,然而如果你對演算法跟 Ruby 語言都有一定的了解,很可能就可以在某個「效能瓶頸」透過替換 Array#find 為 Array#bsearch 而獲得不錯的效能改善。
下面附上簡單實驗的結果
# frozen_string_literal: true
require 'benchmark'
Point = Struct.new(:x, :y)
SAMPLE_DATA = [Point.new(1, 1), Point.new(2, 1), Point.new(2, 2), Point.new(1, 3)].freeze
Benchmark.bmbm do |x|
  x.report(:bsearch) { 1000.times { SAMPLE_DATA.bsearch { |p| p.y == 2 } } }
  x.report(:find) { 1000.times { SAMPLE_DATA.find { |p| p.y == 2 } } }
end
[elct9620] Desktop % ruby bsearch.rb
Rehearsal -------------------------------------------
bsearch   0.000280   0.000009   0.000289 (  0.000305)
find      0.000664   0.000018   0.000682 (  0.000682)
---------------------------------- total: 0.000971sec
              user     system      total        real
bsearch   0.000191   0.000002   0.000193 (  0.000190)
find      0.000481   0.000002   0.000483 (  0.000482)
可以看到 Array#bsearch 在「已排序」的狀況,表現會比 Array#find 好上不少。

能實際應用才算學會

從我的個人觀點來看,與其看到各種題目都能「馬上解出來」不如思考在真實專案的開發中,我們應該如何實際應用才是更有意義的。
如果沒辦法在工作中實際解決問題,那麼你只是一個「程式競賽選手」而不是一個優秀的專業人員,從刷題的成績、學歷這些角度來看大多是一間公司在無法判斷面試對象實力的「簡單參考」基準,如果你是一名在業界有一定實力跟知名度、同事跟主管都很願意幫你做 Reference Check(查核)的狀況下,真的需要刷題跟學歷嗎?
以我個人的求職經驗,我會提到「學歷」是因為我的興趣在多媒體上,所以我可以跟雇主分享我在程式技術跟遊戲上的看法跟觀點。至於這幾年面試人的經驗,看學歷也只是因為「名校學生在學習比較有技巧」這點,讀書是一種「學習技巧」這類人要教的話通常比較好教(個性是另外一回事)然而你的作品已經呈現了「我有實力」那麼會不會刷題、學歷好不好根本就不是參考的基準。

封面圖片使用 UnsplashGreen Chameleon 的作品,有想聽的主題可以透過匿名問卷告訴我,想了解專業的技術主題可以到弦而時習之找找靈感。
為什麼會看到廣告
53會員
40內容數
軟體工程師逐漸變成一個熱門的職業,當我們進入這個職業之後應該要具備怎樣的技能才會在工作上更加順利呢?這系列的專欄會分享日常工作中的經驗以及一些案例分析,讓我們一起努力成為一位更優秀的軟體工程師吧!
留言0
查看全部
發表第一個留言支持創作者!
蒼時弦也的沙龍 的其他內容
軟體工程師的素養
閱讀時間約 2 分鐘
軟體是一種生物
閱讀時間約 2 分鐘
寫程式最困難的地方
閱讀時間約 2 分鐘
程式中「例外」的意義
閱讀時間約 3 分鐘
刷題無法變強的原因
閱讀時間約 2 分鐘
你可能也想看
《生氣的書》&《睡覺的書》▎學習透過臉部表情覺察他人情緒的情緒互動繪本書情緒,是影響孩子未來心理、學習、人際與品格發展的重要關鍵能力。專家認為,學齡前是情緒能力養成的最好時機,父母應重視透過繪本書讓子女理解情緒並善用它。
Thumbnail
avatar
細讀慢品
2024-05-22
如何透過日文提升職場競爭力?一位科大碩士的國際合作奇蹟摘要: 本文分享了一位科技大學碩士如何透過參加吳氏日文的高級實務閱讀與會話班,不僅提升了自己的日文水準至日檢一級,更因此在職場上獲得了巨大的競爭優勢。這位學友被公司派遣參與國際重大合作案,展現了專業和外語能力的結合是如何顯著提升個人的市場價值和職場影響力。 推薦本文的理由: 本文透過具體案
Thumbnail
avatar
吳氏日文
2024-05-02
書評|《明日,明日,又明日》透過遊戲述說感情書評|《明日,明日,又明日》透過遊戲述說感情
Thumbnail
avatar
拖延症小姐的囤書櫃
2024-04-27
透過對話,建構孩子的世界—《我不想睡覺》《我不想睡覺》是一本生動有趣的童書,透過青蛙角色的故事引發孩子們對身分認同的思考。故事中探討了孩子們在成長過程中對自我與他人的比較,以及對於環境與身分的認同。適合親子共讀,引發日常對話。
Thumbnail
avatar
這編好想說
2024-02-13
EP95 : 魔法系畫家第71天,其實不需要透過耍廢來彌補辛苦的自己#魔法系畫家第71天 #其實不需要透過耍廢來彌補辛苦的自己 今天不小心又做了一大堆事 魔法學校工作、第五次練跑、驚喜幫朋友過生日、跟學長拿球衣、給朋友伴手禮、驚喜現身前同事家抽牌❤️‍🔥 一不小心就聊太晚 幸好趕上末班捷運 做每件事都快樂又滿足 因
Thumbnail
avatar
畫畫之餘
2023-11-22
透過自己所愛的,變成能量我是一位總是在深夜畫圖的人。 因為在夜裡,可以放下很多瑣碎以及工作的事情,心無旁騖的沈浸在創作的世界裡。而在某一個夜裡,我認識了一位來自菲律賓的女孩,名叫Lorenn,我們是在一個可以交流書信的app中相遇。
Thumbnail
avatar
拉娜子
2022-08-05
透過人性墮落看變調的美國大選就簡單的說一下. 相信每個人都同意這句話:『戰爭是殘酷的』.但是反對戰爭的同時,卻也同意以暴制暴的手段, 美國總統歐巴馬任期八年,在七個國家內發動戰爭,反被推崇得到和平獎.因為在推動全球民主自由的理念下,沒人真正檢視發動戰爭的目的與必要性. 而川普四年任期內沒有在任何一個國家發動戰爭,不但如此,還將
Thumbnail
avatar
彝真
2021-01-17
透過測驗了解你是否具備富人思維,確認你的金錢模式《有窮爸爸,你也能變富兒子》5種金錢模式,有不同的行為模式、不同的原因及不同的治療方法。你了解你是哪種金錢模式嗎?又應該怎麼改善你的金錢模式,朝富人思維與富人的金錢模式邁進!
Thumbnail
avatar
悅陽
2020-11-03
透過《漢娜的遺言》檢視學校對心理健康與霸凌議題態度心理健康問題就像生病一樣,自己無法承受時還是要尋求專業,學校可宣導衛教資訊,建立良好師生關係,畢竟求助的前提是「信任」。讓青少年知道「我能講出來嗎」「跟誰講是安全的」「在我接受療程後,我還是同樣那個有活力的人嗎」並非疑問句,心理疾病是可以治癒的,並且專業機構在各地皆有設點。
Thumbnail
avatar
LBB 嚕嗶啵
2019-05-21