無廢話快問快答 軟體技術這麼多,想入門可以從哪個地方下手?

在台灣,先學App開發,然後學動態網站開發,這樣的搭配,可以最快的獲得軟體架構的經驗,順便培養將來自行創業,或是接案的能力。

專精,往人少的地方走。入門,請往人多的地方去。

這篇文章的建議,是給還不會軟體相關技術,沒有專精、沒有方向,沒有哪個跟軟體相關的能力特別有優勢,想入門的人的選擇。

如果你是本科系畢業的學生、或是有明確的專精領域,或是已經在軟體產業耕耘了一段時間,想轉職或換跑道,我會建議往自己的強項去發展,在該領域打敗80%的人就沒錯了。

為什麼是App?

  • 最低門檻
  • 成就感
  • 可以從表層到簡單的底層,像是使用者介面、商業邏輯處理、資料處理、網路連線處理,這些不同層次的軟體都可以接觸到,方便建立初步的架構
  • 因為App有操作界面,因此從一開始做軟體,就會養成從使用者的角度來看待軟體的好習慣。
  • 因為App有操作界面,可以深切體認到,完成一個「可用的」軟體,還有許多軟體工程以外的事情需要注意,這個理解,對軟體工程師非常重要。

之前的文章有提到,對於一件事情,光有熱情卻沒有成就感,是支撐不久的。

開發App的最大好處,就是只要有一支手機、一台電腦就可以開始,不用去弄什麼伺服器,安裝資料庫這些,都不需要。此外,目前iOS和Android陣營,都有很方便的開發工具,特別是iOS,一些畫面編輯工具,讓你拖拖拉拉一些元件,打幾個字,你就可以有一個看起來有模有樣,還可以跟你互動的App可以操作了。也許功能很陽春,但他真的是一個貨真價實的App,還可以分贈給別人安裝到他們的手機上。要最快體驗「成為一個軟體工程師」的感覺,沒有比這個還完整、還快、滿足感還高的路徑了。

相對來說,如果一開始就寫一些後台的程式,可能要寫到程式幾乎完成,才可以開始看到結果,而且通常在看到結果之前,還有很長的除錯期。看到結果,總有成就感了吧?有,但通常就是把一些資料,用很呆板的方式一行一行顯示出來,以確定你的計算或是你取得的後台資料是正確的。整個滿足感,和有互動的、好看的App,相差好幾個等級。

此外,手機的進步,讓一般人使用手機/App的時間早就超越使用電腦的時間許多,因此App也必須更強大,才能滿足使用者的需求。在這樣的需求下,App通常也得有一些「在手機上的小後台」,或是必須處理跟雲端伺服器的溝通、存取資料的工作。因此,你也會初步的體驗、實做UI、中間層、底層這種多層次軟體的架構。而且這些初步體驗,又不會複雜到變成一個大門檻,因為手機螢幕、電力、容量畢竟有限,複雜性是被限制的。

另一個最關鍵的重點,正好就是「App有畫面」這件事情。畫面,或是說使用者介面,是給操作軟體的人使用、互動的,像是按鈕在上面還是下面、顏色、按下去有沒有聲音、有沒有發出聲音、有沒有震動…等等。而這些東西,直接決定了「使用者覺得這是個好用的軟體,還是個爛東西」。畢竟一般的使用者並不會知道一個App後面怎麼運作,哪些是困難的、哪些事情又是很容易的,也不想知道。

因此當你做了App,因為他有操作界面,你可以很容易得到使用者的回饋,也會在這個開始學習軟體開發的過程中,深刻的體會到「程式寫得好跟做出一個好軟體中間還有很大的差距」,你會開始思考「那麼什麼才是一個好軟體?」,接著就開始注意到介面的設計、提示、易讀性、明確的回饋…這些非程式的因素。當你有了這樣的思考能力,並且開始試著去改善、解決這方面的問題,就等於是默默的在培養產品經理的能力了。

有了程式撰寫以外的判斷能力,未來擔任工程師,會是一個主動做出合理軟體的工程師。若是不擔任工程師,也會是一個非常貼近消費者的產品經理、產品設計、接案代工從業人員。

App是因為這個東西最接近消費者,最多消費者在用,而且是最簡單可以獲得成就感的軟體開發。然後他會用到簡單的資料庫。但是只做這個會很可惜。目前大部分的app,都還是用不到什麼厲害的演算法。

為什麼 App之後還要補上動態網站開發?

  • 動態網站開發讓你接觸、處理「規模放大好幾倍」可能發生的問題
  • 為了解決規模放大之後才會發生的問題,必須有學習更紮實的基礎知識
  • 有了App的單一使用者觀點,加上處理後台的大規模問題的經驗,就可以更完整的看到一整個軟體系統的樣貌,培養成為更專精、優秀的軟體工程師的能力。

App之後之所以馬上要補上動態網站開發,重點還是去接觸比較正式的資料庫訓練、效能的考量、網路、伺服器硬體的使用…等等,這是將來能不能做到大型軟體系統必須跨過的門檻,而且不是在手機上可以學到的。手機上學不到,是因為手機一次只能一個人操作,但是動態網站卻可能同時有數千、數萬人,同時連上來操作。設計給一個人操作的軟體,和一萬人操作的軟體,考量當然大大不同,所有在手機上做起來很簡單的東西,都有可能變得更複雜。

不過這並沒有太可怕,畢竟你已經在App上面做過簡單版本了,因此雖然某些部分變得複雜了,但是大的架構不會改變,你在深入的過程當中,會很清楚自己在做些什麼、哪一個層級的是情,不會有迷失在一團迷霧之中的感覺。

此外,有了後台的整體概念,在規劃一個大型系統的時候,對於該把資料儲存在哪裡?哪些功能應該在手機上做?哪些應該後台做,手機只是提供一個啟動後台功能的按鈕就好?都會規劃得更合理,因為你心中有全貌。舉例來說,如果你只會騎腳踏車不會開車,那麼要設計道路系統,你的車道寬度可能就只會設計2公尺寬,而且轉彎、迴轉的半徑,都會設計得很小。但是一旦你會開車,或是知道汽車這種工具的運行方式、限制,那麼你設計的道路,就會大大的不同。如果你開了大貨車,那又會設計出連大型車都可以使用的道路系統。視野越大、越深,做出來的軟體,在功能上就會越好。

不過如果是要創業,那只有系統的全貌是不夠的,必須加上市場、資本的考量,這就不是從軟體工程的訓練當中,可以獲得的能力了。

程式語言怎麼選?選人多的就對了啦

  • App的部分,選擇不多,就是iOS或Android選一個陣營都不錯。iOS對初學者的學習門檻更低一些。Android的好處是,學手機的同時,同時練習了可以用在手機之外幾乎所有地方的Java程式語言。
  • 至於動態網站,建議選擇多人用的語言,像是Java或是C#是最建議的。新興的程式語言則建議之後自學就好,不要當作入門語言。使用者龐大的程式語言,因為學習資源多,有問題容易找到答案,這對初學者獲得成就感、快速做出成果非常重要。有成果,對職涯發展非常重要。

新興的程式語言,若站在入門、職涯發展的角度來看,都不是好的選擇。因為所有的語言,一開始一定都是先在特定領域發展,好用了才會慢慢應用到各種不同的領域。因此當一個程式語言還很年輕,代表離開了這個語言擅長的領域,可能不好用、有問題無法解決、甚至不能用還找不到文件、資源。帶來的負面影響,就是一樣是花了一年,有人可能做了3個網站,但是你卻還在解決一個中文亂碼的問題。在轉職的時候,你的履歷就比別人薄弱了許多。

此外,許多新興語言之所以熱門,是被炒作出來的,被型塑成一種風格、是新世代的、未來的、符合潮流的感覺。但一旦播去這些宣傳外殼,往往在相容性、團隊合作、管理、將來系統需要擴充的時候,就會碰到各種成熟語言不會發生的問題,此時就會發現其實沒有這麼好,但是時間都花下去了,打掉重練又捨不得,就變成一種不得不繼續跟著陪葬的負循環,最終還是要打掉重練,所有的投入都變成白費。

所以越是新興的語言,越是老手限定,新手別碰。

當你已經用成熟的程式語言做過幾個系統,往後出現新技術,或是因為特殊領域要去學習特殊的語言、工具,門檻比從零開始學習一個新語言的門檻低上很多,因此不用急著在入門的時候,就去跟新興語言瞎攪和。

以上,就是關於「軟體入門者」學習路徑的建議,希望能有所幫助。