LV. 11
GP 15

【認真】給對寫程式有興趣的人,AI 智能鬧鐘 - 技術篇

樓主 櫻導 gae70402
142 -
對寫程式有興趣的,不管是剛開始還是沒開始,看完這篇可能會讓你對如何寫好一個專案有不同的看法。
  
打這麼多字不知道有沒有人要看...
  
整篇文章的流程如下,可以跳到自己想看的地方看。
推廣 > 我的開發經驗 > AI 智能鬧鐘技術分析 > 給還沒開始寫程式的人的建言 > 給寫程式新手的建言。
建言完全不包含資料分析師、 AI 研究相關,因為我還不到那個等級。
  
【推廣】

  
AI 智能鬧鐘 是一個把即時頭條新聞、天氣預報、空氣品質等資訊以人聲播報的方式當成鬧鈴的鬧鐘 App。
  
感謝接近 200 的安裝量,在 3/2 當天設置了約 350 次鬧鐘,萬分感謝。
  
【我的開發經驗】
我目前是中科大資訊應用菁英班專五的學生,所以算是從一年級開始學程式設計,一年級 VB ,二年級 C C++ ,三年級 JAVA,四年級 PHP 。
  
但老實說學校教的基本上沒什麼屁用,所以我在外面介紹自己都會說我是從 2016 年暑假開始學程式設計,而那段時間對我來說至關重要,當時的 JAVA 老師推薦我去台中的某間小科技公司實習,基本上一進去就先看文件,之後學 ASP.NET MVC 跟 ASP.NET Web API,兩個月學了不少東西。
  
開學後我就開始轉戰 Android ,平常還是會寫寫 ASP.NET Web API,基本上對寫程式有興趣到三天不寫渾身發癢的地步,怕...
  
直到 2017 年 4~5 月的時候,對我來說又是一個重大的改變,當時知道微軟每年都有在收實習一年的實習生,所以我就抱著試試看的態度去投履歷、競賽、主管面試,後來很幸運的進入了微軟,基本上如果當時我沒成功加入微軟的話,這個鬧鐘也不會出現,因為我現在用的伺服器、語音服務全是微軟的,不是說我有多愛微軟,而是身為實習生,所有微軟發行過的軟體跟服務基本上免費用到飽,窮學生為了省錢當然開心的用了...
  
再回到現在,開學後我到了台中某小資訊公司實習,微軟的實習也同時進行中,這邊主要工作就是開發 App ,雖然還只上班了兩天,但還算過得滿開心的,希望未來也能繼續笑著上班就是了...
  
上面只講了大概,所以我下面直接整理一下我從開始寫程式到現在的這一年半來學了哪些東西:
後端技術:ASP.NET MVC、ASP.NET Web API、Laravel Web API、爬蟲、MS SQL、MY SQL、Linux
前端技術:Android、iOS、Xamarin
程式語言:C#、PHP、Python、JAVA、Kotlin、Swift
以上是學過且拿得出手的,還有些學得比較淺就不說了。
  
【AI 智能鬧鐘技術分析】
用到的技術如下:
後端部分就是寫 Python 爬蟲去爬新聞、天氣預報、空氣品質(大部分直接用 API,少部分才是真的爬),並使用 Ubuntu crontab 定時去爬,聲音的部分用的是 Azure Cognitive Services 的 Bing Speech API,資料用 My SQL 存,用 Laravel 去寫 Web API,前端則是純的原生 Android(Kotlin)。
  
Bing Speech API 部分遇過得坑:
已經用了最高的費率,每秒還是最多只能 20 次請求,而且不能超過 100 字,就變成我還要自己去分析新聞簡介的斷點,讓它就算分成 4~5 段音檔在播放的時候也不會聽起來覺得奇怪,還要在超過 20 次請求的時候延遲後續的請求。

如果有人對這個技術有興趣,可以到我的 Github 看看,我有開源某一小段程式碼。
  
Android 部分遇過得坑:
不開玩笑,在寫之前我一直覺得寫個鬧鐘應該是輕輕鬆鬆,後來發現我光是寫好一段程式,要測試鬧鐘有沒有乖乖響,就要在那邊慢慢等,而且 Android 的鬧鐘機制真他媽有夠多坑,多就算了,還一堆深不見底。
  
光是目前為了適配到 Android 8.1,不管是播放音檔還是設置鬧鐘都在過往的一些版本中有過大幅度更改,然後我就要為了每個不同的 Android 版本去查他們當時的寫法,真的是有夠不爽,最重要的是 Android 6.0 之後,鬧鐘變成有可能會延遲,因為 Google 為了省電給 Android 一個新的睡眠機制,當手機進入深度睡眠狀態,規定一個 App 每 9 分鐘只能醒一次,真的是坑我坑到歪頭。
  
上述的問題在一般的鬧鐘還沒差,但我要在響鈴之前在背景去下載最新的新聞、天氣、空氣品質的資料跟音檔,而且取得失敗我還要重試,這就變成我比大部分普通的鬧鐘 App 要醒的次數多好幾倍,目前這部分的問題還沒完全根除,當你關閉網路睡覺,又在要起床的 10 分內設置超過 3 個鬧鐘,它就會華麗的延遲響鈴。
  
其實看到這邊懂寫程式的大概看的出來,要寫出這樣一個鬧鐘 App,不是只要會寫 Android 就好,要會的東西太多,而且學得不夠深基本上也是寫不出什麼鳥來...
  
【給還沒開始寫程式的人的建言】
如果對寫程式的熱情極大,建議可以從 C C++ 開始學較基礎的程式邏輯跟一些資料結構,再更進一步到演算法,學的好未來成就不可限量。
  
熱情較低的可以從 JAVA 開始學物件導向的概念,那基本上就跟我差不多,不知道我有沒有命可以找出時間去學演算法...
  
買程式語言或相關技術的書請買最新的,因為大部分框架、程式語言、技術一改版就變一堆,但如果是要看類似【無瑕的程式碼】、【電腦程式設計藝術】、【XX設計模式】這類的書就沒什麼最新要求了。
  
程式語言的基礎很重要,我能在一年半內學這麼多有的沒的,基本上就是因為我當初在學 C、C++、JAVA 的時候還滿認真的,所以之後看書、文件都學得很快,如果你程式語言的基礎不夠,很容易遇到就算查到資料也看不太懂而只會複製貼上的囧境,然後你會發現學一點東西就遇到瓶頸,速度很難一直爆發。
  
所以有人如果問我如何寫好 Android,我會建議你先學好 JAVA 或 Kotlin 再說,不只語法,物件導向的概念更重要。
  
而如果有人問我如何寫好 App,我第一件事會問你的手機是 Android 的還是 iOS 的,原因是因為你如果不長期使用 Android ,你連現在流行的排版跟常見的 View 都不知道,還怎麼寫出一個好的 App ,當初我學 iOS 就完全敗在我沒 iPhone 上,後來跟同學借了一隻 6 來用,整個用不習慣,所以後來 iOS 開發就只做了一個專案。
  
寫程式沒興趣的話很難寫好,所以我會建議只是為了高薪,但沒興趣寫程式的人不要貿然進入這行,因為寫程式沒興趣有時候會寫得很痛苦,寫到哭出來的那種...
  
而你有興趣但很沒天分的話,我不知道該跟你說什麼,因為你有很大的機率剛開始沒多久就從有興趣變成痛恨,也可以考慮去做系統分析師、架構師,做的好薪水比寫程式高。
  
【給寫程式新手的建言】
對資料分析、Machine Learning、爬蟲等有興趣的可以去學 Python,推莫凡的教學文章跟影片,但前兩者要做到頂尖對數學能力的要求頗高,我目前數學是崩了...
  
千萬不要覺得程式跑出來結果符合預期就表示是好程式,更要注重程式碼的品質,例如基礎的模組化跟更進一步的降低耦合度,還有要寫註解,不然請人家幫忙的時候,人家基本上想幫也很難幫。
  
能學演算法就多學一些,我自己是因為學校沒教演算法、線性代數等,後來實習啟蒙了也沒時間回來補救,搞得我現在寫程式空有自身邏輯,沒有前人的智慧,一度認為被學校毀了一生,會有這樣的想法是因為在微軟實習認識了幾位狂人,有幾個寫演算法真的狂到歪頭,上台大是用保送的那種歪頭...
  
剛開始學某個程式語言先看書學語法跟概念,後面可以網路上找題庫練邏輯。
  
當脫離了基礎學語言要真正開始做專案的時候,除非像 Laravel 這種有完整中文官方教學文件可以看的,不然我一樣建議先買那個技術的書來讀(例如 Android、ASP.NET 這種),通常書上也都會有一些小小的練習題可以跟著實作練。
  
而終於脫離了看教學文件或入門書的階段後,就是自己想一個系統架構然後將專案實作出來,這中間一定會遇到滿滿的問題,基本上就是要自己 Google 了。
  
Google 需要對關鍵字有敏感度,這部分是懂得越廣越容易下好關鍵字,需要時間慢慢提升自己的視野,查到之後就看語文能力了,大部分都是簡體中文跟英文,看得懂就看,看不懂用 Google 翻譯,還是看不懂就複製貼上程式碼試試看。
  
專案記得備份或更進一步做版本控制,不然專案丟了會想哭...
  
確定自己的專案能體現自己的價值就試著丟到 Github,之後履歷都能附上。
  
寫累了記得要休息,看是要看小說還是看影集,有能力出門運動也不錯...
  
肝要顧好,不然 35 歲提早退休只能幫QQ
  
想到再補...
142
-
未登入的勇者,要加入討論嗎?
板務人員:

7587 筆精華,12/04 更新
一個月內新增 8
歡迎加入共同維護。


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

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