抽出一篇,寫下自己和電腦的緣份。和怎樣學了各式技術。
電腦陪了自己 40 年有多,比起自己所有親人和家人都來得久。有時我會引用足球小將的典故講笑:電腦係我的朋友。
~ 最初的起頭:童年 ~
最近是幾歲時,在外婆家玩遊戲機開始。那些青蛙過河、太空侵略者、馬戲班等等經典遊戲機的年代。
之後就是任天堂,Zelda 和 Mario 的早期年代。建立了興趣,就會留意電子產品,甚麼有關電腦的都想看。那些年雜誌上也有售賣電腦的廣告。
接觸能編碼的電腦,大約是小二小三在別人家中玩過。小三那年樓上有個大哥哥,家中有部 Apple II。大軟盤、舊搖桿那種。多少人知道,以前舊搖桿的設計:搖桿在右邊,按鍵是在左邊的。
我整個小學都是玩遊戲機。而每年暑假都會上些興趣班。小五小六那年有機會去了學電腦。Dos + GWBasic,大約 4-6 課的課程;明愛中心,80286、綠螢幕的電腦、20/40 MB HDD、 5.25 /3.5 寸軟盤。電腦室總有種味道。在終端機上打甚麼都要等。而且電腦還有個 turbo 鍵,旁邊有個數字。
| 這階段新增掌握的電腦語言和技術 |
|---|
| Dos, GWBasic, QBasic |
| 普通電腦技術,打字/鍵盤操作 |
~ 起飛:少年 ~
因為學了 Dos + GWBasic,開始會再學其他。當年母親喜歡看工聯會課程,我在初中去了學 Pascal,和倉頡中文輸入法。VB、C/C++。家中買了部很貴的 486DX/2。然後我就越來越過著玩電腦的生活。
那些年有傳統記憶體 640K 要用到盡的限制。而很多人都是改 config.sys 來加強記憶體。初中那時就學了這些技巧。也學到一些怎樣扭設定、扭 exe、扭鍵盤輸入;或掃描記憶體、修改動態記憶;之類的技巧。這些現在都歸類入 pentesting 的技術,那些年一併當做軟技能甚麼都學。自學了 lotus 1-2-3(excel 前身)、dbase(資料庫前身)和 foxpro。中四五那些年,迷上了第一隻稱得上沉迷的遊戲:master of orion 和 xcom。第一次明白心流下時間可以這樣快。也因為 master of orion 而開始研究設計遊戲。
第一次用電腦工作,應該是中五的暑期工。本來只是做下辦公室文職。當時機構要大量發信件,就請我這類暑期工幫手。本來只是貼下郵票之類。但列印出問題,同事又不懂操作。我一個中學生便去開那個 dbase 2 的舊程序來看。幫他們修改下設計、列印之類。
到預科,幫中學出校刊、文學刊物之類。一人扛起了整個刊物的工作。大量的中文輸入、word 排版、插圖、列印,拿去印刷。
但精采的還是編程。中五中六那些年已是開始自己寫遊戲。開始對 VB、VC++ 有興趣。用 VB 寫遊戲是不難的;我寫過些 RPG 和賭博遊戲。但 VC++ 涉及 directX 和 activeX,com, com+ 之類旳深奧技術,就使我開始感到電腦世界的浩瀚。開始明白個世界很大。
還有就是 modem,和 TCP/IP。除了玩 BBS 和學一些更底層、更深奧的技能,例如 ASM 和反編譯之類。還有就是研究怎樣將電腦連起來組成網絡。這些都是預科的那些年。還有中五左右那些年開始流行互聯網,自己也開始接觸網頁;還包括 CGI, perl, html, vbscript, javascript, css, php, asp, jsp 之類。也開始接觸 java。
| 這階段新增掌握的電腦語言和技術 |
|---|
| Pascal, C/C++, VB, directX, VC++, activeX, COM/COM+/DCOM, DOM, html, vbscript, jscript, javascript, css, php, asp, jsp, java, dbase 2/3/4, lotus, asm, delphi, action script / flash |
| TCP/IP, win 3.1, win95/9/98, unix, access / database, networking, client-server model, 倉頡/速成, word/ppt/excel/office, compiler architectures, compile/decompile/disassembler |
~ 職涯選擇 ~
少年時一路走來,未中學畢業都已學了廿個電腦語言。到預科後,選人生方向時,都沒有先選電腦。自己那些年跟著預科課程,有兩張簿記證書。本來大專學習是先揀會計。但電腦也很有興趣。本來是想日間讀會計,晚間自修電腦。但忘了是誰不太贊成,建誐我不如只揀一樣。於是在轉科的最後一天都還是揀了電腦。
大專的三年,是很輕鬆的渡過。想像到,上課都是在學些中學階段自修學過的東西,只能說補充番個正統訓練而已。甚麼 C/C++、java、data structure and algoritm (俗稱 DSA) 之類,同學們覺得深奧難明的東西,我差不多都可以幫埋同學做埋功課。我的 Final year project 是個 C++ + OpenGL + 3D animation + networked 的 MMO 遊戲。拿了個 A,當年畢業展覽,放在門口當眼處。那些年是不覺得開心的,因為知道外面世界太大,太多強人了。
來源是因為讀書之餘,都參加些業界活動。microsoft 在 2000 來香港宣傳 dot net,都去看。甚麼 xml, soap, dtd 之類,是現在 restful 之類的 API architecture 的前身。還有遊戲業界認識了橙、edwin、steven 他們。他們有幾個和我一樣都是中學階段已掌握了大量深奧電腦技術,出來傾計都是討論 vi, ASM, linux command。想像下,那是 98/99 的九十年代。我也是這些階段接觸更多的 pentester、pwn-er 技術。那些年 pentester 是要看很多 header、網絡制式;因為連 packet、header 都改到。現在保安加強了,pentester 的訓練很少談改 packet 和 header。
大專那幾年都是一直做 part-time 和 freelance。例如幫公司拉線;寫 VBA 程序;寫 RS232 serial port 的低層代碼。
這些年開始越走越專業。對 java, J2EE, dot net, foxpro, cobol 那些工作上會用到的技術都收納。中學階段紛雜的學了的技術,到大專階段正式有個整理。這階段為方便找工作,也考取了 CCNA 和 SCJP (現在應是 OCP)。
| 這階段新增掌握的電腦語言和技術 |
|---|
| foxpro, vfoxpro, cobol, xml, soap, dtd, openGL, j2EE, javabeans, EJB, asp.net, c#.net, codewarrior, embeded C, oracle, sqlserver, sqlite, vba, sql, shell script, PL/SQL, struts, spring, hibernate |
| solaris, red hat, linux, pentester, pwn, CCNA. a formal computer science training. |
~ 初職 ~
開始進入工作。就開始建立專業技能。中學階段我大約掌握到廿個電腦語言左右。大專大約掌握到 40 個左右。初職就是較專心研究。為免行文過長,只寫技術。30 歲前,修完了 bachelor 和 1st master。因為學術研究,能接觸到些很古老的語言。
這階段也開始進入中層,接觸管理學,和項目管理。明白商業運作、辦公室運作、營運管理等等。所以碩士時選修了管理。也考取了 PMP, SCWCD。
| 這階段新增掌握的電腦語言和技術 |
|---|
| j2me, mysql, lisp, prolog, fortran, postgresql, ada, jquery, symbian C++ |
| data mining, machine learning / AI, PMP, SCWCD, macOS, VR/AR |
~ 30 歲後 ~
30 歲後漸入高層。也在這時開始流行 iphone & android。於是就是大量 mobile app 和 game dev。手機和遊戲是個大量技術的世界。也是這階段開始接觸雲服務,例如 AWS。
| 這階段新增掌握的電腦語言和技術 |
|---|
| obj-C, swift 2/3/4, android java, android kotlin, json, dart, cocos2D/X, titanium, ionic, nodejs, reactnative, typescript, reactjs, vuejs, angularjs, R, unity JS/C#/C++, ruby / on rails, python / django, lua, erlang, springboot |
| macOS, iOS, android, xcode, AWS (S3, SC2, RDS, elastic cache, codecommit, cloud formation, cloudwatch, cloudtrail..), git, svn, redis, memcached, mongodb, dynamoDB |
~ 35 歲後到現在 ~
過了 30-35 手機、手遊、雲端那些大量收納技術的日子,之後技術方向越趨穩定。開始沒有多元的技術,化繁為簡,集中在幾個主要技術,夠用就夠。
有些主要的研究,例如 containers, devops / CI/CD, 自動化流程。之後也研究 pentester / pwn-er 技術,考取了 OSCE3。也是這階段陸續取得了三個主要雲端的專業架構師認證。還有 AI。這些都是大量收納新科技的契機。
雖然這篇看來很多。應該還有很多未能盡錄,因為有些各式的研究,例如 WAF, IDS/IPS 之類,很多微細的知識和技能,都很難一一細錄。
| 這階段新增掌握的電腦語言和技術 |
|---|
| go, rust, k8s, docker, kafka, scratch, appium, selenium, cucumber, scala, powershell script, solidity, blueprint, protobuf, pytorch, numpy, pandas, tensorflow, keras, godot / gdscript, etc.. |
| jenkins, GCP, Azure, blockchain, nosql, devops, pentester / pwn-er, OSCE3, AI, sonarqube, jmeter, postman, etc.. |
回顧,會覺得通常大量收納語言會有幾個契機:
- 入門階段,甚麼都學
- desktop app
- gamedev
- database
- mobile app
- client-server
- cache / memcached / redis
- clouds
- architectures / nosql / pub-sub
- API architecture / gateways
- IoT
- devops
- blockchain
- AI
- pentester