LV. 40
GP 1k

【心得】想進入程式領域前,先思考為什麼寫程式

樓主 麻弱 y6117daniel
836 -
前言

嚴格來說,我程式經驗莫約一年多左右,目前專攻java(java8),輔助為javascript,
個人是習慣以原生程式為主,所以javascript框架只有略為沾邊。

小弟目前是在中部某公司擔任軟體工程師,至於薪資我稍微說明一下,
可能是比較多人好奇台灣軟體的薪資,
在工作之前有收到幾間面試邀約,最好的應該是聯發科,
但是,其一是覺得自己還不夠格,再來是因為在中部先待,所以沒有去面試。

這份工作,目前薪資約為4萬多,加上年終為15個月,其他獎金另計,
基本上不常加班(視專案),六日周休,工作主要開發系統網站,
我初學淺,所以下了很多功夫,看了很多文件,
這是目前的概況,目前年齡今年滿26,真正進入職場一年多,雖然掛資深工程師,
事實上不敢這麼說,現在程度只能開發一些簡單的lib。

打這麼多是因為,有些人可能覺得我沒資格講述關於入門程式的概況,
所以我簡述一下,畢竟高手多,我僅只是初學者,
當然我其實也是靠作品得到工作機會,如果覺得我很廢得多多包涵。

以下會講述我在從無到有轉變成工程師遇到的心得與方法,
不敢說完美,但是是真實經驗談。

這一篇目的是讓有興趣接觸it產業的人,或者想學程式的人一個入門思考概念。
我不會講劈哩啪啦的程式,而是,在你想寫程式前要的思考。
很多人說自己興趣是程式,但為什麼寫不好呢?
我想可能是有些基礎沒做好,不妨往下看看。

當然這是一篇長文,我會以標題來區分,有懶人包的。

為什麼想寫程式?

通常想接觸程式的人,大部分是覺得,可以找到一份好的工作,
可是基本上,能夠走下去的都是對於程式的目的有熱忱的比較多,
舉個簡單的例子,fb的共同創辦人、youtuber的共同創辦人、apple還有微軟都是不少都是程式起家,
因為這些平台創辦人往往不只一個,有些人可能會反駁他們並不會寫程式,
但這得追朔到源頭,他們通常對於計算機或者科學有一定的涉略,這也是我想表達的。

首先,寫程式其實並不是因為熱愛寫程式而去寫,
在我認識得大部分程式的高手,基本上都是"為了什麼去寫",
譬如你想做一個網站、想做一個app、想開發人工智慧等,其實都是符合"為了什麼去寫?"這件事情。

如果你想寫程式,通常個人會認為,最好是有一個目的性在加入,
因為,軟體工程師的工作不是只有寫軟體而已,
程式涉略得相當得廣泛,寫程式只是一個起頭,最後還是以目的為主。

而目的性其實很多多,以不碰硬體來舉例就好,像是爬蟲、遊戲、系統,都可以去寫,
程式就只是這些東西的一個基礎而已。

簡單說如果你想要做這些事情,雖然可以透過工具,但是不熟悉基本的程式,
想做出多樣化的東西時,就會非常受到限制。

用個簡單的想法,現在流行手機遊戲跟大型社群網站,
但是在幾年前則是單機遊戲還有電腦網頁遊戲當道,
其實這些都建立在程式的基礎上,這也包含你我現在在用得這個網頁,
換句話說,基礎不變的狀況下,其實可以產生出來的東西也是千變萬化的。

至於所謂的基礎是什麼呢?

萬物基本上都符合一個原則,就是循序漸進,相信這個道理大家都知道,
程式也是一樣,更是強烈得符合這個原則。

說穿了,就是教你正確的思考方式。

難道其他方式不是正確思考嗎?或許有人這樣疑惑,

舉個例子,兩個人組合同一種機器人,假設這台機器人只有一種組裝方式,
結果一個人組出來,另外一個人組不出來,
你們覺得誰是正確的呢?
換個角度,今天程式作用在無生命的物體上(電腦),是否這個物體也只能明白它所能明白的東西呢?

這跟我們賺不賺錢、能不能中樂透的原理可是差很多,
然而再把機器人組出來的狀況下,就是一種正確的思考方式。

換句話說,程式的思考就像組機器人的過程,
所以大家應該有發現為什麼世界都在推崇寫程式吧?
寫程式其實不代表比較聰明,而是教你正確思考的方式.

回歸正題,所以,學習程式只是基礎的思考,
有了基礎的思考你才能做遊戲網站之類,
重要的在於你想用程式做什麼。

這就是為什麼要寫程式,你的目的雖然是想做遊戲想做什麼,可是,
在那之前,程式只是一個起源。
這一段是要告訴想踏入程式的人,如果你沒有想用程式做的事情,
其實很難走下去,所以建議先以"想用程式做什麼"為出發點。

懶人包:

為什麼學程式?
要先有想用程式完成的事情,例如遊戲、網頁、系統等,
有想用程式做的事情學程式才會容易。
而程式是建立在思考上,有了程式才能完成你想做的事情
程式學的是思考,而思考透過程式去實踐出目標。

怎麼開始寫程式?

有了目的之後,你也知道要先有基礎思考,下一步就是要怎麼開始學習程式,
新手最常問的問題不外乎就是,我要學什麼語言?我該上課嗎?我可以買書來看嗎?

就個人經驗,語言沒差、看書你很難看下去,上課要很認真。

那豈不是直接叫人放棄呢?
不是,我前面有先講到第一點有一個重點在

你想用程式做什麼?

這裡就直接延伸,首先你要先清楚你要寫什麼,
常見的就是網頁、遊戲、系統、大數據、爬蟲、app程式等等,
如果問我說哪種語言可以辦到,我會回答其實大部分語言都可以辦到這些,
差別在於哪個語言比較好做到。

如果你只是想做ui設計,那麼就從css、html下手,進階一點javascript,
如果你是一個前端網頁,那麼就從css、html然後專精javascript,
如果你要寫安卓系統,那就得從java下手,
如果你想寫遊戲,那可以從c#語言下手,

其實每種語言都有自己的特性,而這些語言在市場都有一定的價值,
有些程式人會建議新手去學javascript,個人認為,js雖入門容易,
但對於什麼都沒有的新手,其實很困難,或者說是易學難精。

有人推薦台灣最好找工作的php,則是太雜基礎不好穩定,
寫比較好懂得ruby或者萬用得python,則是工作有點難找,
所以我個人認為,最好可以從java或者c#這兩個語言入門。
當然,如果是想做網頁為目的,或者前端,就挑js或php入手也可以。

而我推薦兩個語言
是因為這兩個語言是所謂強型別語言,很多規定,但是可以減少新手的失誤率,
強制讓你一定要照"正確思考"的方向前進。
對於基礎其實有很大的幫助,
當然如果再拿java跟C#比,c#語言是比較好學習得,工作機會也不少,
或者有些人很有自信,直接挑戰typescript(javascript),這是一個很強的語言。

至於怎麼開始,雖然我是資策會畢業,可是我不認為上課是正確解答,
因為程式基礎很簡單,但卻是很雜不容易入門,
其實上課或者是看課程都可以,
可是困難的地方其實是,你很難知道步驟,該從哪裡學起,
當你翻開一本跟字典一樣厚的java,你從一開始看到就昏了,根本看不下去。

所以我簡述學程式大概要先怎麼了解。

1.先了解基本型態:你要知道變數、字串跟數字的加減乘除,布林值是什麼?
2.了解陣列與迴圈和判斷式:這些東西可以讓你真正的去寫程式,
3.了解架構與規範:這是我認為最重要的,是你寫程式的"方式"
4.達到目的性:最後就由這幾個東西達到你的目的。

型態與陣列迴圈就是你程式的怎麼寫,
架構就是讓你能夠用型態+陣列+迴圈和判斷式這些東西去產生完整的程式邏輯,
在映射到畫面上,
其中架構與規範是每個語言最大的差異,

我用程式做舉例

語言 javaScript java
變數(型別表示) var int String boolean
判斷式 if(a === b) if(a.equals(b))
陣列 var array = []; String[] array ;
迴圈 for(var i = 0; i<=5 ; i++) for(int i; i<=5; i++)
類別 var Main = function(){} public Main{}
方法 Main.prototype.sayHello = function(){} public void sayHello(){}
基本輸出方法 alert("hello world"); system.out.print("hello world");


仔細看可以發現,這兩者其實都有型別陣列 迴圈類別方法這些東西,
差別就是使用的規範,
所以同樣的,其他程式語言也是如此,這也對應為什麼我說語言不是這麼重要。

但是真正差異與困難的就是規範,這也會是學習的一個重點,
常見的像是物件導向、MVC架構之類。

當然其實一開始就是要讓機器(電腦)去閱讀你的東西,
所以會不斷的輸出東西,
這個階段會很無趣,你根本不知道這些東西跟你的目標有什麼關係,
所以國外會推崇javascript是因為,這個語言可以直接跟你的"畫面溝通",
這樣可以讓你很清楚畫面與程式的關係,藉此產生出你要的目標作品。

透過javascript去寫程式,直接得控制html產生畫面,
所以網頁就是這樣來的,通常會配合css跟html,
一般建議入門從網頁,因為網頁是最容易也是最廣泛讓你抓到畫面得程式方式,
至於html跟css個人並不認為那是程式,因為寫現在程式幾乎一定會接觸到的。

在學語言前你可以分析兩個方向

第一個是你想做什麼?什麼語言適合你要到的目標?
第二個是你的語言市場性與是否好學、參考資料多不多?

然後,選好語言,入門則推薦

1.C#語言 : 概念清楚,但是又很好寫,跟微軟綁定所以很好操作
2.javascript : 萬用語言,要入門很容易,精通稍微難
3.java : 市場性強,架構物件導向清晰,缺點是比較不好學習

最後怎麼寫程式?

看線上課程或者實例,一步一步了解並且把那樣東西做出來,
不用挑太難的,從最簡單的開始,
像我們第一個程式通常都是99乘法表然後在計算機,
最後生出一個登入畫面,基本上你的基本功就差不多了。

這三個語言因為很熱門,網路上資源非常的多,
可以選擇去上課,或者免費的線上課程其實都足夠基礎,
但是不建議一開始直接看書不實做,比較難掌握到重點,
不可否認的一點是,有蠻多人慧根很好,看書就會,這也是一種方法。

我關鍵則是多練習,像我不太會讀書理解力又差,個人就是靠不斷練習,
當我先做出九九乘法表,在做出計算機的時候,就會慢慢熟悉,
然後生出一個簡單的登入系統,就會很有感受。

懶人包:

先決定要學的語言,以想做的事情為基準,再決定語言要什麼,
如果沒特別,就以c#、java或javascript為入門,
再來可以選擇看線上課程,然後邊實做邊練習,一步一步的扎實訓練,
重點是要好好實作與練習,弄懂每一步,多寫最重要。

哪種程式語言好?

終於做好決定選了程式之後,進入學習階段時,過程中就會有這個疑惑,
就是會看到網路上再討論哪個語言好。

在最早網頁購物車開始火紅時,php當令,成為市場網頁主流,
前陣子有一個去微軟化運動,所以當時的C#這個語言被戰得很慘,
後來,python與ruby崛起,現在則是一個go語言再開始蓄勢待發。

對於初學者,開始錯亂,學哪個語言才是有價值的呢?

如果仔細去探討我的第一點與第二點,到了這邊其實會有一點答案,
但是,語言不會被淘汰嗎?
這是一件很有趣的事情,
就拿我的java來說,java至今已經有20年,幾乎都在世界程式語言佔有一席之地,
但是問題是這個語言很老,老舊的語言還是有缺點,

而c#這個語言的特性,則是跟微軟綁定,拿到mac上就會陣亡(這裡不探討網路),
至於ruby語言個人倒是沒啥研究,我自己的作品集則是用python架上來的,因為最快生成,

但是這些語言的特色在於,他們活得很久,而且都是有一定的脈絡。
基本上是不太容易淘汰,但是未來其實不好說。
可是就算某種語言淘汰,只要掌握重點,很快就能在學習另外一種,這也是程式的特色。

程式沒有好不好,只有優點與缺點,
我有些同事選擇java的原因,是因為他分析出java錢最多,
但實際上,撰寫php照樣能夠拿到非常高的薪水。

所以我想表達的重點其實是,
關鍵在於精通一個語言而不是什麼語言,因為熟悉一種語言,要跨別的語言就會很容易。

我曾與一些很強的同事討論,有些人認為語言只是工具,幫助你完成想做的事情而已,
確實,大部分,包含fb、twitter、amazon等網站,其實都只是一開始雛形,後來才這麼強大,
但是同時也有同事認為,真正強的工程師,就是專精語言為主,
所以如果去google面試,就可以知道精通一種語言多重要。

可是回到這邊,就得在探討目的性,
如果只是想賺錢,那就是找賺錢的語言,
如果有目的性,把語言當作工具,那可以以目的為方向學習,
如果想成為神話般的工程師,那就是一種自我實踐,那就可以朝一個語言專精去做。

到這邊,應該就可以很清楚語言怎麼去選,
至於有種語言進化到可以從頭打到尾,暫時不探討,那又是另外一個故事了。


懶人包:

哪種語言好在於選擇的目的,目的不同,對於程式的選擇也有差異,
語言不再於哪個好或不好,如果要賺錢就盡量找熱門語言,
但最重要的還是對於語言的深入了解程度。
然後再往想要的市場方向前進會比較好。

軟體工程師思考與平常人的思考

我相信大部分的人覺得軟體人很難溝通,
但同時很多軟體工程師很討厭跟一般人溝通,於是常常有對戰的感覺,
一邊覺得工程師很自以為,工程師則覺得對方沒腦袋。
但是程式是學習思考與正確思考,卻並不一定會有更多財富。

就是要解析這個部分。
當我在做設計的時候,總覺得程式人難溝通,走到軟體的時候,我才明白原因是什麼。
先來看一個例子

有A籃子跟B籃子,A籃有50個紅球,B藍有30顆白球,請問要怎麼讓A跟B的球交換呢?

簡單啊,把A籃跟B籃交換就好了啊.
那我就問,如果是程式的話要怎麼寫?

於是就出現這樣的結果
A=B;
B=A;

乍看之下沒啥問題,因為把B放到A了。
問題是B呢?

所以正確的方式是
要先拿出C藍,把A或者B的球放進C,再把C放到另外一個,也就是

C=A;
A=B;
B=C;

很多人都說自己邏輯很好,但是當轉換成文字與數字時,就會出現這種狀況,
而這只是一個最基本的舉例方式,

原因很簡單,多數人思考都強調結果,管它過程是什麼,反正過程不重要,所以就變這樣。
但是沒辦法,因為反正看結果,照樣能夠賺一堆錢,那我幹嘛思考呢?
這會在後續解釋,多數程式高手都是在做所謂自我實現而不是賺一堆錢。

但這就呼應了為什麼程式會教人思考,因為你一定要正確的寫法才會運作。

在舉個例子,現在生活方便,有許多好用的軟體,
拿adobe的flash來說,在這幾年,flash淘汰改名為animate,
於是我放映了兩部一模一樣的動畫,一個是flash做的,一個是animate,
結果大部分的人都覺得這是一樣的東西,
確實,只看表面看起來是一樣的。

所以,這時我會問,那他幹嘛把flash改版變成animate?
答案是flash無法在手機裝置上運行,但是animate可以。
那為什麼呢?
因為flash語言是actionscript,而animate開始支援javascript了.
但這時又有人開始反駁,阿反正我都能做出一樣的東西,是有差嗎?

這邊就要講回為什麼程式基礎重要,而不是運用工具重要。
就以flash來說,
有一個題目是做一個泡泡往上飄,如果你只懂得操作軟體,你可以用內建去拉補間動畫,
配合淡入淡出就會有泡泡上升的效果。
可是,請問泡泡每次出現都會一樣嗎?
如果不碰到程式,你能做到隨機產生泡泡嗎?
但如果你懂得程式,只要加入亂數,結果就可以變成隨機的產生泡泡,畫面就更自然。

會有這樣的狀況,也是因為太多人幫我們完成工具,
確實,站在商機的立場,我們不一定要會創造這些軟體,只要會用就好,
但是這樣,就沒辦法創造出更新的東西,因為只能運用別人的東西,而少了思考去改善的機會。

其實我再成為工程師的日子,
也是不斷的被資深工程師洗臉來的,原因是一開始我太過於注重自己的思考,忘記步驟這件事情。

這邊對於有工程底的人其實很容易,但對於沒接觸工程領域的人在寫程式的時候,
因為思考問題,所以很容易開始卡關,
我記得老師開始講物件導向,把程式物件化,類別方法繼承,台下幾乎死了一遍,卻不知道這只是基礎而已。

但是,我認為大部分的人其實能學好程式,
前提是你要先拋棄主觀的思考方式,去學習機器的思考模式,
這不表示程式是死的,而是你要用死的方式讓它活起來。

所以講這麼多,怎麼提升程式的思考方式,
在我的小經驗來說,就是步驟,
一步一步來,扎實的踏穩每一步,而這也是為什麼現階段我雖然程式不是很強,
但我還是能開發一些簡單的lib。

有一個重點就是,其實很多初學程式的人,或者說他們根本不打算弄懂,
最喜歡複製貼上看不懂的程式碼,
當然可以認為理所當然,反正會動就好了,
所以造就一大堆技術債出現,
假使今天有人要維護,要增加一個需求到你貼的程式碼,就會直接炸裂,
畢竟看不懂,如果我要在上面增加新功能,誰知道從哪加呢?
這種狀況在一般網頁設計公司最常見,因為只強調結果論,
那這個結果,最後可能造成整個網站重弄。

那麼,關於與工程師溝通,
因為現在公司幾乎都有工程師,很多人覺得工程師難溝通(我只有指軟體或者寫程式的工程人員),
必須要說,蠻多人覺得工程師很蠢,
但是真正厲害的工程師通常都會把客戶當猴子,對工程師來說很多簡單的東西客戶都搞不懂,
要跟工程師溝通很簡單,就是把你要講的重點步驟化,
因為真正軟工的思考很細膩,他考量的點可能比你多非常多。

可是,這樣為什麼很多人覺得工程師會被騙,
倒也不是,因為許多工程人員的思考比較單純,都是一條線的,往往少了跳的機會,
因為工程講的是正確思考,但是這個社會不會跟你講思考阿..

懶人包:

程式思考跟一般人思考差別在於步驟的細分程度,
程式是一種一步一步,步驟式的思考,
如果不搞定好思考,你就會搞不好程式,間接就無法實作出想要的東西,
所以在程式卡關時,不妨停下來先思考是不是自己哪裡想錯。

程式的目標

在開始踏入寫程式的時候,其實就只是覺得寫程式蠻有趣的而已,
但是其實後來越寫才明白,這一條路不是只有寫程式,還有非常多細膩的東西要學習。

當初,問我寫程式的人,大部分都是看在「錢景」,那前景好嗎?
程式的目標到底是什麼?總要有個目的性吧?
這不是從我身上發生的,而是從我認識一些程式的高人學習到的。

先從基本狀況來說,

最基本的你已經會一種程式語言,但是這樣就想踏入職場,其實機會不大,
正常來說要先懂資料庫,先以單一面拆出來的目標討論。

在你會程式之後,通常會有兩種狀況
一種是實現需求,譬如寫遊戲、寫網頁、寫軟體
一種是自我實現,譬如演算法、開發框架、爬蟲
這樣舉例很多人會不明白差在哪,我用兩個例子會比較清楚一點。

第一個是我前公司的四大資工同事,他教我蠻多東西的,
可惜他在中部起薪也是27(別懷疑),一年後到百大企業起薪高些,約4萬,
現在則是等簽證被日本找過去。

在第一間公司他是寫java的,到了百大之後撰寫c#,而到了日本則是寫php,
有發現嗎?

他使用的語言三種都不同,這個概念就是把語言當工具,去實踐社會上要做的事情,
這樣通常不會以專注寫程式為主,可是,像我前面提到很多像比爾蓋茲、馬克祖柏這類的人,都是這類的人。

而這就是以工具為主,不是限制在某種語言發揮上,
換句話說,以程式為核心去發展出不懂程式也能使用的軟體(網站等),基本上都是朝這個方向。

另外一個,也是我前公司的同事,他很厲害,高中畢業而已,自學程式之後到公司去寫java,
已有多年經驗,薪資都落在35左右,這一間也是27起手。
那他的方向比較不同,他是以專研某樣技術為主,譬如說怎麼優化系統,怎麼讓cdoe完整性更高,當然我前面提到另外一位同事也是有做到,只是不是這麼專攻。

這類的人就是我們常說高端的工程師,他們通常喜歡用linux去操作系統,
對他來說,就不會一直轉換程式語言,他一直鑽研java,譬如java8的浪打語法,等等對於工程領域本身有幫助的東西。

通常,學程式都是以第一種入門,後來慢慢可能會兩者混合,
如果要說更好的舉例,
用程式來說,如果接觸程式有一段時間後就會遇到framework、library、api這種類名詞,
這種framework之類的,是建立在原生程式之上,
像是java的spring、python的django、javascript的react等,

差別在哪?

我想了很久,一直沒有很好的舉例方式
就用一台車來說,原生語言像是組合汽車組件的材料,你可以組合用材料組出引擎、輪子、馬達等,
所以你會有材料—>組件—>車,
用引擎來說就好,如果我每個引擎都要自己從頭做不是要很久嗎?
於是框架就是,類似有人幫你設定好引勤,你只要告訴他你要哪種引擎,就可以直接生給你。
也就是,一個方向是生產出車子為主,另外一個方向是研究車子的零件提升為主。

有人會說,如果這樣我只要會呼叫組件就好了,
但問題在於,組件是別人幫你設定好,你要照對方的"設定",所以這顆引擎都是別人的邏輯,
你可以去調整它提供給你的設定,但這顆引擎就是基於原本材料出來的。

換句話說,程式的兩個目標就像是,
一種是能夠呼叫與設定"組件",最後目的是生出車子。
另外一種是負責生產"組件",可以研究怎麼做出更強的引擎、更好的輪胎,但是不負責生出車子,車子最後變怎樣與我無關,但我希望我的引擎可以很強。

雖然用車子舉例不是百分之百吻合,但是意義大致上相同。

所以回歸目標來,其實在我一路上遇到的,
絕大多數能在工程領域有一番作為的都是像是研究組件的人,
原因是要生產出組件你的深度要非常足夠。

可惜現實來說,我必須要講,要賺錢的還是以生產出車子的人比較賺,對吧?
因為客戶是要成品,誰要聽你的引擎研究有多厲害呢?
我只要能找到一顆別人做好很強的引擎然後裝上去就嚇嚇叫了阿!

但不可否認,在語言上,
假使你想要生產出更好的軟體,對於語言的深度還是要有一定的涉略。

一般在語言上會講說,底層程式,
而我也要講,實務上很少用原生語言做開發,因為太底層,
這個底層程式就像車子的材料,他可以開發各種組件,
如果你不懂材料,你就很難挑選好的組件,
基於程式,如果你不懂底層,在學習框架上就會很困難。

進入程式領域,都會慢慢涉略到這些東西,
但是我個人建議可以先找好方向,如果想要專注目的性,那在基本語言後,
就可以專注在框架的學習,呼應前面的系統,
如果對於程式很瘋狂的,就專注在底層的開發。

懶人包:

程式通常有兩個方向,一種是目的性的,另外一種則是深入開發,
目的性的範圍很廣,只要是軟體都算是有目的性,
而深入開發是偏向功能面,主要是協助開發的工具為主軸,
但通常兩者可能會共存,只是說可以看看要以哪個方向為主,
如果是想賺錢的,想想怎麼做出有商機的程式比較重要。

未來性與發展

這一部分是我把上個部分拆開講的,也是我整篇這麼長最想表達的重點。

第一個重點是,學習語言不是只是為了當軟體工程師,
其實在這爆炸性的時代,除非你不用電腦,否則你就是在跟程式做溝通。

絕大多數來接觸程式的人多是想可以多賺些錢。
但如果我開頭就跟你說,我在中部,領27k的程式設計師還不少,你信嗎?

必須承認一件事情,在台灣對於各行各業都不太友善,程式也沒有例外,
就拿我四大的同事,他實力強,日本直接找他過去,問題是..在台灣他在跟我同間公司的時候也是27k。

但我不是要潑冷水,
而是我要介紹,學了程式你會有那些未來可能?

基本上你學了基礎程式,是無法變成工程師的,因為真正的細節很多,
不然很容易成為領低薪的工程師,
我個人抱持實驗性的精神,所以我選第一間當跳板,並且在第二間直接跳出去,
確實,我的同事都是軟體工程,基本上可以說全部都是資訊系的為主,
但這過程其實也不是很容易,碰壁不少。

可是,有人想過如果把程式跟你原先的專長結合呢?

之前資策會有學長,財經專長,後來去寫金流系統,因為有財經概念又有程式專長,嶄露頭角,
另外一位學姊是數學系,很會計算公式,後來直接寫遊戲去算圓周率,也是嚇嚇叫。

那如果程式不強怎麼辦?
其實有基礎就可以了。
有沒有人聽過會程式的企劃呢?
不少企劃都要跟工程人員溝通,是否有人想過如果你懂程式概念,會是什麼結果呢?

我的意思是,程式不過就是很多東西的底層,只要你碰到電腦,基本上就一定會有工程邏輯,
所以找到方向很重要。

談到薪水,薪水不過就是這樣而已嗎?

我先以一般軟體工程師來講就好,指的就是純粹像我開發系統的,
一般軟體工程師的工作幾乎是"負責公司的軟體",既然是這樣,因為時間久了你熟悉度會提高,
就算再沒天分的人也會慢慢熟悉這個架構,
舉個常見的狀況,通常公司會選擇一種框架來做開發,也就是實務上很少用原生語言開發,效率問題,
但一開始因為你不熟悉這個框架,所以薪水很慘很正常,
隨著時間過去,你會發現到在程式上的開發邏輯其實差沒多少,所以加速了開發時間,
再來一點是,如果有接觸工程的人會發現,每間公司的"框架"其實差沒多少,
而且開發的難易度,也差沒多少,換句話說,不用擔心技術不會進步,
因為這一行是靠經驗增加開發速度的。

當然,我講的是一般的工程人員,
工程人員到達百萬千萬是有可能的,那就是在開發產品上,
譬如最近較紅的旅行青蛙,多數資深工程師基本上都大概可以猜到怎麼開發的,
可是卻沒啥人想過,原因就是在我第一二點,
換句話說,一個資深工程師在工程領域的技術一定夠好,可是想法卻不一定好,
拿我自己來說,我一直有在增加自己的技術,可是在想法上卻沒特別去琢磨,這就是差別。

如果以北部的狀況,目前我的資料是,
你在程式設計寫了五年,大概會有百萬左右的程度,或者你可能會升上主管,
這是以軟體工程為例,而且是最鬼島的台灣,國外我相信薪資應該更為可觀。

我還是要解釋,地區還是有差,像我中部,要到那個薪水,是很困難的。

不過這個狀況是建立在你在工程領域待了五年,
因為其實很多人在第二年第三年就失去熱忱,或者麻木,你熬不過兩三年,
基本上薪資也就不會往上,
一直以來都有人想學工程,只是我個人的經驗都是強調,到底你要學程式做什麼呢?
如果沒動機,其實你很難在工程待下去。

我前面有提到除了為了薪資,另外一種是自我實踐,
就我接觸的工程領域,很多都是對工程領域有貢獻的人,
這樣人就像是永遠在尋找不同的引擎,他不在乎車子是什麼。
例如一位大師叫良葛格的,可以說是java台灣的宗師,技術應該台灣首屈一指的,
但他可沒有超高的財富,這就是自我實現,他是真正熱愛工程的人。

所以在工程中,如果以財富去衡量一個人,那才是最無知的,

在進入工程的時候,可以考慮,想要靠工程賺錢,就要想想賺錢的程式,
程式很多變,而我前面說的都只是基礎而已。

再轉回來,前面有提到,將程式與自己的專長結合,才是我覺得最重要的目的,
把你的專業加上程式,你可以有更多想法與想做的事情。

但說這麼多,如果是純工程呢?
前面有提到五年為一個標準,
先說我的經驗,扣除我的薪資來看,在台北,有同事約兩年經驗起薪是6萬左右,
在台中是四萬左右,其他地區我比較不清楚,
可是我先說,在台灣這個薪資,是要有條件的。

1.熟悉一種程式語言
2.熟悉版本控制
3.會使用資料庫
4.對於環境部屬有一定的程度

這些東西是在你走程式"撐下去"的前提下,
所以應該發現很多人途中就炸裂,因為要學很多東西。

這邊我並不會神話寫程式、說這是一條光明的道路,
而是想告訴大家的重點是,寫程式可以讓你在未來的方向更多變化,
像我舉例四大的同事就是個好例子,他並沒有讓自己局限在寫什麼程式阿!

至於會不會加班,我坦白講,軟體工程師加班其實在專案多的狀況下,會是一種常態,
但是不忙的時候其實不太需要加班。

總之,程式的未來其實很多方向,不是只有侷限在工程師,
重要的還是在於想法。

懶人包:

程式的未來不是侷限在於工程,而是可以跨領域的,
就像前面提到的,這只是一種思考方式,
如果想要走工程,就要好好地鑽研並且往下,
就算只是小職員時間久了薪資還是會不差的,
但誠心還是建議去想個能夠賺錢的程式鑽研才是最好的路。

沒有經驗怎麼投入職場

這也是我自己的一個很深的體悟,
其實在一開始上完課的時候,幾乎可以說是被叮得滿頭包,
說句現實一點,人家看你不是資工底,不是四大碩,基本上就是直接淘汰你,你再優秀也沒用。

我的條件是設計系+私立學店+沒有門路只能靠人力銀行,
這應該是最爛的條件了吧?

雖然有些人覺得我現在還ok,但是其實在面試我也是不斷被淘汰的。

在工程師領域有一個很怪的現象,非常喜歡考試,
這對於資工底的人來說或許容易,可是像我這種東湊西湊出來的,基本上考題幾乎都會直接被秒殺居多。

再加上多數人只以學歷看你,求得一份工作其實不太容易,
因此其實一開始我也是非常失落的,
畢竟在你經歷一大段努力後,發現好像沒什麼用。

雖然其實還是有一些公司會願意給機會,可是其實薪資一開始都很低。
所以我個人認為如果第一優先,還是要能把你的第一專長與程式結合,這樣比較容易投入職場。
至少我看到雙專長的,第一份工作就很驚人了阿..

沒有的,也不用灰心,我個人在實驗找工作的時候就捨棄了我的專長設計,
這個翻轉的關鍵在於---作品

也就是從一開始,我所提及要有目標,就是要讓你能夠在最後一定要生出作品來,
換句話說,扣除那些考試、學歷企業,只要掌握作品,其實還是有機會,

第二個則是熱忱,這個熱忱是對於你想做的事情有熱忱,這點很重要。

我前面有提到的另外一位自學的同事,他只有高中畢業,現在依然可以嶄露頭角,
他有這兩個特質,他的作品不差,而且早上上班晚上上課,假日也在上程式,
這就是熱忱最可怕的表現方式了吧?

看到這裡,可能有人說,這樣是不是製造更多奴工,
其實如果看到我前面的敘述,就明白,這樣是塑造更多的創造,
因為作品跟熱忱是每一間公司帶不走的,
我前面有提到想法這件事情,假使你一直沒想法,但時間久了你技術深了,別人也無法取代你,
就算一間公司倒了,只要這世界電腦還在,你就有工作,
更好的是如果有想法,有更多好的機會可以選擇。

至少對我來說,一直保持這兩者,就會有機會。
作品也是展現一個人熱忱的表現,不過我還是不建議複製貼上,這樣很多東西不明白。

當然如果你很擅長考試,那考試也是不錯的選擇,
至於百大企業,我覺得還是得看看有沒有那個命,
這是很現實的一面,
我個人是學店出生,我也很直白承認我的學校不好,條件不好,
所以要翻轉就要靠努力生出作品。
雖然我後來收到幾間百大的企業,也很心動,但是我認為我還不夠格,
目前就是在深入探討我自己的技術與思考。

總結這個部分,
簡單說就是,能夠有作品然後說服別人,就有機會往上,
至於更高的階層,我還沒到,只能大略說就是更精進於自己的技術與熟悉公司的架構。

那麼通常你剛進來的第一份工作薪資基本上很低都是很正常的,
我大多數認識的同事在台中第一份大約都是27,經過兩年到三年到第二份都有4萬上下,
所以其實不要太在意第一份工作的薪資,
這一行有個不成文的規定,很多時候都是靠跳槽來提升薪資,
如同我前面說的時間久了薪資就上去了,
唯一需要考慮的是,這間公司能不能讓你有技術上的成長,
這一點才是最重要的。

我想,其實很多人條件一開始都比我好很多...
你們的機會遠大於我,所以別放棄。

懶人包:

在一開始進入職場因為不是本科,相對地比較辛苦機會很少很合理,
所以就是要好好地提升自己,一開始有機會就先進去,然後精進自己的技術,
把作品準備好,拿出自己的熱忱,相信其實收穫與成果還是不錯的。

總結

這一篇也是很長,我花了好幾天的晚上趁寫lib的空檔寫出來的,
當然也不確定有沒有人會看,我是覺得有幫助到別人就可以了,
畢竟這也是我個人真實的歷程。

我的動機有幾個,

第一個重要的點是,我發現有很多人其實想踏入程式領域,又不知道該怎麼下手,
所以我花些時間分享我個人的經驗。

其次是,台灣各論壇的職場相關版都有個現象,
那些賺數百與數千萬的人常常會去教訓別人,
薪資一直上不去的人則是一直自我放棄,
可是我常常想,如果這些賺數百萬與千萬的人真正的願意分享且教導別人,
而這些放棄的人只要有一點心,我相信整個台灣會不一樣。

台灣有個狀況,就是很多上層的很容易不懂裝懂,
覺得自己賺很多錢,就什麼都會
尤其是台灣某些老闆,他們會認為有錢再請一個員工就好,
可是看完上面的專業有沒有發現,如果薪資不夠吸引人,誰會想學這樣的專業?因為要會的真的不少,付出的代價也不少。

其實你打開新聞打開農場,
滿是成功者在講自己多優秀,多辛苦,
但實際他們做法到底是什麼呢?做了什麼讓他們成功呢?
他們其實根本沒講,不是嗎?

當然每個人有言論自由,可是如果不分享經驗與教學,
那怎麼會進步呢?

然後,就造成了貧富差距,
那些成功人士會喜歡說,成功的人找方法,失敗找藉口,
可是我都會跟他們說一句話

我願意學,你有給過我機會嗎?
我不斷的向您請教,卻只是得到一些批評卻依然沒方向。
如果一個成就者他教不好別人而去怪罪那個人沒天份,豈不是代表自己也沒多優秀了嗎?

對我來說,
真正成功的人不是自己說自己多成功,而是他能帶領一個團隊或者一些人一起成功,

這一篇,其實對於各大版的數千萬高手們,我相信都覺得沒啥用,
甚至嘲笑著我的實力水準等等,
但是,如果一個無名小卒都願意分享自己,
那是不是該收起指責而是真正教導有心的人呢?

我其實並不是想走真正的軟體工程,但是我也不曉得為什麼我就變成一個軟體工程師..
嚴格來說我還是想要把工程跟美術做結合,只是目前還沒有方向,
就慢慢往下鑽研了。

或許有人質疑,那為什麼我還沒賺大錢呢?
一,我的技術雖然往前,但又沒有到足以規畫整個系統的程度,
二,雖然我做的出東西,但是又沒有一個很好的想法去實踐。
最後,工程領域能夠闖出一片天的,都是有自己的一個團隊,可惜我沒有。

我同時也會沈思自己的水準到哪,該在往哪努力,
至少這整篇文章,都是我個人自己摸索來的。

所以我一方面也是希望在未來找到有自己的team可以去開發些什麼,
現在的我只能獨立去開發一些小小的lib。

我說過,我並不是一個有很多機會的人,所以整篇文章絕對都是從無到有的心路
有人說機會要自己去嘗試,可是我自己是投履歷的人,我很清楚別人選我是什麼感覺。

我沒有親戚、沒有共同的程式夥伴,學歷又爛也沒資質,不是富二代、沒有特別出色的地方,
最重要的是,跟大多數人一樣投人力銀行

今天的我還是一個小職員,如果要說我是什麼,就像是一隻蝸牛,
慢慢的爬,就算沒人看的到我我也是慢慢爬,因為,我只能這麼做。

------------------------------------------補充-----------------------------------------------

謝謝大家的認同,標題的部分我稍作修改,
爭議的地方,可能有些人覺得這不是給想進入程式的準備,
但我文章有切分是,希望在進入程式前先"思考好自己為什麼要走程式"
比起在外面補習班直接就跟你講程式多棒多好是不同的,
我並非想澆熄別人的熱忱,而是在台灣要真的踏上一個專業都要付出,程式也不例外。

而我也提到,與其靠"寫程式當熱忱",倒不如想想用程式做什麼才是最重要的,


作品參考:

作品的部分,因為我其實蠻多git的東西,可是都是個人筆記加上往深的地方研究,
就比較不方便貼,連結是我一小部分的個人網站,後來就沒時間動他所以有些敘述錯誤

我當時是forcus在d3跟createjs這種畫面的東西,所以都這樣呈現,
其實可以發現,也沒有到很難的表現,就是有想法就做,

重要的還是在熱忱。





836
-
未登入的勇者,要加入討論嗎?
板務人員:

558 筆精華,08/18 更新
一個月內新增 0
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】