564 Followers
·
Follow

Image for post
Image for post
Photo by Tim Mossholder on Unsplash

這篇首發在鐵人賽 — 。山姆大叔談 C++:從歷史談起,再給個定義 — Modern C++ 解惑

今天周末,換個話題。最近有一篇文章引起我的「注意」,是讀了「眼神死」的那種注意。讀完之後,心生一語 — — 鞭數十,驅之別院。

文章作者是一名學生,該文「看起來」是第一線觀察學校電腦程式設計的教學現況有感而發。懂得觀察很重要,但過於武斷這一點,要不得。

藉由這篇文章,山姆也要來好好地,大放厥詞一翻。(看了會動肝火,屬正常反應,請勿驚慌)

缺德?

首先,關於「叫朋友學 C/C++ 是缺德行為」的笑話,真的笑一笑就好,不要當真。那些認為好笑的,十個有九個是 C/C++ 語言的「逃兵」 — — 抓不住要領,學不到精髓,只好跟著別人笑。

再來就是「比一比,看誰最會印 Hello World!大賽」,「印出 Hello World」不知是誰開始的,但我認為她(他)的初衷不是拿來「測試(Benchmark)」誰能最快印出 Hello World,而是以簡單且有趣的範例,來教程式語言。

每次看到有人拿這比賽來說嘴,說 C/C++ 很難學,很不友善。我想反問:證明了「Python/Ruby/JavaScript 是一個很會印 Hello World 的程式語言」,有什麼意義?

小明用 Python 竟然比小憲用 C++ 早一分鐘印出 Hello World!

可以再搞笑一點?

該不該投入?

「該不該有更多人學習 C/C++ 並當做作專業技能?」

這個問題的答案,只有一個:當然要。

這幾年,許多有潛力的的「系統程式語言」輩出,Go, Rust 都被認為有機會「幹掉 C++」。許多人這麼想,但我認為還早,甚至永遠不會發生。

我認為應該要培養更多 C/C++ 人材的理由是,許多資訊基礎建設如瀏覽器、資料庫、作業系統,甚至那些瞧不起 C/C++ 的程式語言,也是以 C/C++ 寫就。

以 C/C++ 開發的軟體專案會用其他語言改寫嗎?有些會(會做這種決策的人要嘛太蠢,要嘛錢太多),但多數不會。新的專案會選擇 C/C++ 做為主要開發語言嗎?肯定會,雖然我沒有數據證明,但我相信數量比你想像得要多。

C++ 難如登天?

我覺得 C/C++ 之所以被認為難學,是有一群人讓她變成這樣。什麼人?「門外漢」。

一個人一輩子,不是只能夠學一種程式語言。我常掛嘴邊的話:「我最討厭 Java, JavaScript, Assembly」,討厭歸討厭,我不會(真心地)告訴別人不要學那些我討厭或覺得困難的語言。專業工作者必須備有主槌、副槌、小槌子,不同的問題,要用適合該問題的工具解決。

我同意 C/C++ 相較於其他程式語言,其進入門檻相對較高(這個門檻不是指「印出 Hello World 難易度」)。但是,不要讓學生初接觸程式設計就挑戰難度較高的語言,什麼時候才適合?最直覺(無腦)得答案是:有需要的時候。

可是瑞凡,C/C++ 不是那種要用的時候「撿」起來就可以直接上手的工具,再怎麼有天份、資質的人,也要投入一定的時間,才能建立起正確而且紥實的 C/C++ 語言基礎。需要的時候再學,通常來不及啊。

學習 C/C++ 不僅僅只學該程式語言,電腦運作原理、軟體程式的抽象性、如何拆解問題,都是學習的一環。克服困難的問題所獲得的成就感,除了讓人大幅成長,而且還想一鑽再鑽,更上層樓。真正進得了「專業軟體開發者」大門的人,是那些需要「細心呵護」的嫩芽嗎?

程式語言有兩種

以學習的角度來看,程式語言概分兩種:

  • 學成之後,要上手其他語言變得簡單
  • 學成之後,要學其他語言變得難上加難

高階語言 — — 離電腦運作原理很遠的那些,把開發者當「寶貝」,難的東西「藏」起來,說好聽怕你弄髒手,其實是「陰暗」的角落不讓你碰,因為你太「弱」了。那些不讓你碰的地方,設計者做了許多取捨,有些東西導致你在學習其他語言時,摸不著頭腦,搞不清楚狀況。

引用本文開頭所指的那篇文章中的一段:

C/C++ 是靜態語言,意思是它的變數需要定義型別且不能改變,這對新手是一個困難;C/C++ 是編譯式語言,程式必須先經過編譯才能執行,編譯過程對新手也是一個困難。

是「相對困難」,但這難度,很難克服嗎?我不這麼認為。「型別系統(Type System)」是 C++ 程式語言必備基礎,但就像教「數學原理」,「1+1 為什麼等於 2」?有那種教一下就會的小朋友,也有一些要花點時間才能接受的孩子,投入時間後,多數孩子都能學會基礎數學。

理解 C++ 的「型別系統(Type System)」不只在該語言有用處,同樣的觀念適用於不同的程式語言,雖然不是一對一對應,但原理互通,多有關連。這也是為什麼「學成 C/C++ 之後,要上手其他語言變得簡單」的原因之一。

真正讓人吐血的是這段:

再來是最大的問題,C/C++ 語法複雜,且在 AI、網站後端、App 等領域較不適合,現在通常是用其他的語言來設計,C/C++ 只會用來實做底層的功能。

希望讀者原諒該位作者,他真的不知道自己在「工蝦小」。這種不堪一擊的論述,以後再找時間談。

如果「新手不適合學 C/C++」,那要什麼時候學?關於學習 C/C++ 或其他程式語言,該聽誰的?「戰士」,還是「逃兵」。

在我眼裡,C++ 是一種許多面向都在「越變越好」的程式語言,覺得學 C++ 沒前途、沒市場,那是因為等級還太低,經驗、火侯還不夠。要怎麼做才能拉高等級?如何成為一位真正的「C++ Pro」?我認為:

① 反覆閱讀幾本好書
② 做中學的實驗精神
③ 待領域相同的職場
④ 跟隨一位對的導師
⑤ 公開分享學習心得
⑥ 三年

對,「三年」。多數人至少需要投入三年的時間,把 C++ 當做專業技能來學習,才有機會成為有實力的「C++ Pro」。

Originally published at samtsai.org on September 21, 2019.


Image for post
Image for post
https://unsplash.com/photos/IBaVuZsJJTo

那天發了一個推,表明我對「公民參與政治」的立場:

這種話別對著我講,否則沒好臉色看:「工程師就好好寫程式,管什麼政治?」

☝️有腦袋不使,盡耍嘴皮子。以前的我就是這樣子,自以為是,裝中立,假清高,其實沒幾根皮毛,只有一張嘴愛亂叫。

「參與政治」沒有既定形式,以你認為可行,使得上力的方式,替自己的國家出一些力。現在開始還不遲。

你不管政治,就只好讓政治管。與其拱手讓人決定自己國家的未來,不如自己親身參與,自己動手守護並創造一個更好的環境,讓自己的孩子安心長大。

有人說,男人四十歲後對政治過於熱衷,表示他只剩一張嘴,事業無成。我的事業確實離我設定的目標還很遙遠,但以此做為不理會政治的藉口,是不負責任的表現。

事業要衝,國家也要顧,我不想移民,生在台灣,長在台灣,一輩子都是台灣人。正值壯年,健康顧好,培養實力。不再推拖,不論方法為何,都應該為自己的國家盡一份心力。

Originally published at https://samtsai.org on August 18, 2019.


Image for post
Image for post
Photo by Hamish Clark on Unsplash

關於人生,我有好消息跟壞消息各一。

誰的人生不難?

壞消息先來,你的「人生好難」,這點無庸置疑。我知道,因為我的人生也不好過,我周遭許多朋友的人生也都不好過。即便那些一般人認定「含金湯匙」出生的朋友,對他的家庭有更深層認知後,我覺得他的人生比我還「難」。

在我們的成長過程中,百分之百會遇到那些用盡手段要將你擊倒的黑暗勢力,他們集結一氣,輪流施暴,不讓你有喘氣的空間。當你氣力用盡才推倒眼前的魔王,準備迎向光明美麗的人生時,更強更兇惡的大魔王上場了,使出從來沒見過的新招式,從意想不到的角度對你迎頭痛擊。

這就是人生,人生真的好難。

他的人生比較簡單?

接下來是好消息。「人生好難」This is by design. 每個人的人生都是這麼設計的,沒有例外。你以為那些出生就過好日子的傢伙,他們面對的可能是能將你一招擊沉的「大魔王」,但他們撐過來了,他們是「勇者」。你應該慶幸自己面對的魔王實力尚可,慶幸自己在新手村學會的基本求生技,足以讓你一關過一關,持續成長。不要抱怨,開始行動。

簡單的人生,不好玩

不過,換個角度想。我相信你跟我一樣,玩遊戲時,如果關卡設計的太過簡單,很快就覺得無聊,沒有挑戰,玩起來興趣缺缺,沒多久就想換遊戲,尋找更大的挑戰?

缺乏挑戰,太簡單的人生,一點也不好玩。

Image for post
Image for post

面對挑戰,你會被擊倒,但你會再站起來。我知道,因為我們都是自己人生旅途的勇者。不管最初的裝備、技能點數如何,我們在成長的過程中,會不斷學習新的技能,結識新朋友。每推倒一個魔王,破了一關又一關,我們的「經驗值」會大幅成長,也人會習得新的技能。

技能增加,團隊變強,讓我們有能力挑戰更強的魔王。但是,在面對下一個挑戰前,沒有人能事先做足準備。不過,我們每個人都能夠藉由不斷累積經驗與能力,並且正視自己的人生,以正確的人生觀來迎接新的挑戰。

年輕時玩 RPG 遊戲(太空戰士、勇者鬥惡龍、吞食天地),讓我感到興奮的不是「遊戲破關」,而是擁有未知能力,下一關更厲害的魔王。我希望遊戲永遠不會結束,我希望持續不斷出現讓我摸不著頭緒的壞蛋,我要讓主角學會更多厲害的招式,痛扁那些自以為厲害的大魔王。

好玩的遊戲,高難的挑戰是必要元素。人生亦如是。Dan Lok 不到三十歲就賺飽退休,過不到幾個月的「退休生活」,又開始「工作」,折磨自己。

用成就感餵養自己活出新人生

把那些突破原本認為過不去的關卡,所獲得的成就感,當做養分。我們要不斷餵養自己,驅策自己往更高的境界邁進。

想想看,一個有機會讓自己習得高超技能的人生,你應該感到興奮,而不是怨恨。

「知足常樂」是陷阱,是魯蛇的小確幸。身為勇者,我們永遠不能滿足於現狀,一旦習慣安逸,人生將無趣。很快地,你就會想關機,失去活下去的意義。正視人生,選一條路,開始行動!

Originally published at samtsai.org on April 5, 2019.

About

I’m Sam

Developer | CTO of I³D Technology Inc. | Blog at https://samtsai.org | Newsletter: http://thecpp.news | WorkFlowy Tips: https://workflowy.tips

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store