為什麼這篇aia人工智慧鄉民發文收入到精華區:因為在aia人工智慧這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者as30385438 (LCH)看板Soft_Job標題Re: [請益] 關於 AIA 人工智慧...
我沒上過AI學校課程
不過現在算是個從事ML相關工作的工程師
先說我底下不特別區分ML/DL與AI
但ML/DL的確與大家想像中的AI不太一樣
有興趣的人可以估狗一下強/弱人工智慧
底下分享一下轉職歷程給大家參考
我是非本科也沒有任何CS及AI相關基礎
唸書時只會一點Matlab和Fortran寫數值計算而已
學歷也很普通非四大,中字輩理科學碩而已
可以說完全符合本板難民的標準, 哈!
我會轉職不是為了錢,單純就是喜歡寫程式
可惜我很晚才發現,不然當初考完指考就會填CS了
開始自學是在我第一份工作做了半年左右
雖然這工作不差,但實在沒興趣,於是就決定要轉行軟體業
目前也轉行快滿一年了,工作真的很開心,整天寫程式,與夥伴討論技術與架構!
是我兩年前夢寐以求的生活!
第一個語言是學C++,因為資工系朋友給了我一片VS2012的光碟
https://imgur.com/xrKFSYx.jpg
雖然很多人說不建議新手從C/C++入門,因為很難
但難不難是比較出來的,當時我也沒接觸過其他語言
學的過程只覺得 “程式語言就是長這樣嘛”
後來去看大家都說好學的JS,我一點都不覺得好學,只覺得它根本邪門歪道
(是我資質駑鈍希望寫JS的大大別介意)
現在想想算是滿幸運的吧
因為在C++不把value, pointer, reference搞清楚,是沒辦法寫出什麼東西的
lvalue ref跟rvalue ref亂用還會使用到被move過的memory,直接crash
之後對於Java或其他語言常見的"pass by value of reference"都很容易理解
用<algorithm>操作STL也讓我打下FP的基礎
之後因工作而學FP成分很多(如下)的scala時,上手速度甚至比Java快
l1.zip(l2).map{case (ele1,ele2) => ele1 + 2*ele2}
如果沒先學C++的話我應該會在很多地方卡關...
C++在跨檔案時必須宣告函式與類別的簽名後才可使用
這讓我在學OO與DP之前就有了,介面與實作要分開的觀念
正所謂介面出得去,實作藏起來,coding發大財
在自己的簡單小專案中就有用上一些代理類別
最一開始的想法很簡單,只是覺得有些實作細節還沒辦法決定的東西
不想讓其他檔案直接看到, 不然之後又一堆檔案改來改去好麻煩歐~~~
之後看到effective C++才知道原來這有個術語叫做pimpl
如果我先學Python的話大概就會養成很多壞習慣了
而且看SOLID也不會知道為什麼要這樣做
第一個學的framework是Win32 API
自己刻了個有tab control可以換頁,幾個edit control跟button
把當時工作的一些數值計算包成一個填幾個欄位算完可以畫出用line拼成的曲線
為什麼不用winform是因為我根本不知道有winform
然後google用C寫視窗程式, 就是Win32 API了啊!
剛好公司快退休的老大哥桌上有本厚厚的工具書就跟他借了回去研究
查各種control的msg, lParam, wParam要傳什麼來控制他們
(一本綠色的windows視窗程式設計超完整工具書,分上下冊,神書一本!市面上已經找不到了)
看到醜醜的按鈕按下去會跑出圖的那瞬間是我人生前五感動的時刻
第一個寫得app是IOS的Hello World
第二個也是最後一個app是用bar調整參數對照片做unsharp mask
寫完後就放棄了,因為乾XCODE真他媽難用
程式語言學一學後就開始想要做什麼,因為大家都說語言只是工具
不想走web一是因為我知道轉行的人多半都走web,不想再跟大家擠了
二是JS我真的學不好,寫出來都超醜超亂
最後決定學ML是因為網路上免費資源也很多
而且比較接近我原本會的:用程式做數值計算
Web我沒有深入學習過,但初學Python時常看到一個關鍵字:Django
就想說這好像很熱門,我也來學一下好了
說來也好笑,一開始最大的盲點是我看不懂web領域的人在說的API是什麼
第一次遇到API這個詞是Win32 API,那時候覺得API不就是一堆函式簽名嗎
後來才發現原來web的API是指web service中client與server透過HTTP交換資料的介面
頓時恍然大悟 “原來他們說的API是這個!“
雖然我最後也沒有弄出一個能看的網站
但也學會了怎麼串接別人的web service,怎麼串第三方登入
POST, GET, cookie, session, SQL, noSQL資料庫
這些看似跟ML無關的東西,在我日後真的變成ML工程師時才想到
要是我不會這些,根本沒辦法工作!
第一個看的ML課程是youtube上史丹佛的CS229
學習心得是:哇!這些東西好熟悉好親切啊,線代,統計,矩陣 看來我學這真的是選對了
之後陸陸續續看了滿多種開放式課程,都是免費的資源
完整看完的不多,大概就三堂吧!
其他都是只看以前沒聽說過的部分,搭配一些網路上的教學文章
網路上有些文章是做一個小專案,內容不難
但作者會詳述他的思路,遇到問題的解決方式
我很喜歡看這種東西,覺得對我很有幫助
學習過程遇到最大的困難不是那些演算法,而是架環境
當時有個很流行的DL框架叫caffe,但要在windows安裝它非常麻煩
我直到最後也沒有成功設置所有東西
後來某天有個同事跟我講
https://imgur.com/6KHQx9D.jpg
當時windows不能跑docker於是又裝了linux subsystem
就順手學了docker和以前完全沒碰過的linux (用過bash後才知道為啥大家都說windows的shell好難用啊!)
就用這種作弊的方式終於弄出一個可以跑的caffe程式了
但也沒用多久...因為caffe很快就退流行了
反而是學會了docker和linux的基本操作在以後工作時給我相當、相當大地幫助
之後把自己準備好後就開始找工作啦
面試過的公司比較知名的有 玩美/訊連/HTC/威剛
這四家我有錄取兩家
其他都是些版眾大概沒聽過的小公司
工作內容都是ML/DL相關
最後是在待遇和環境還不錯的小公司上班
如果要問我做這工作需不需要數學很好
我會回答,如果你是工程師而不是資料科學家,那真的不用
我自己數學也沒有多好,就一般國立理工碩程度吧
如果一些線上課程都有好好跟完
那這領域的論文應該能看懂70%以上
剩下那些看不懂的通常也是背景知識不足,有空補一下就好
但是文組的朋友如果連PDE是什麼都不知道,那我不建議來學
身為工程師,看paper對我的意義跟研究者和科學家是差很多的
我的目的是要大致知道這領域最前端的人在做什麼,吸收一下天才的想法,了解現有的瓶頸
其實新的東西也很少有完全憑空冒出來的,看paper也可順便複習已經會的
基本上不會是因為原本算法performnce不夠所以我需要用更新更好的
或是我要做出一個世界最屌沒人做過的模型來突破AI的瓶頸
那些事情,就留給頭腦更好的科學家去做吧
工作到現在,幾乎都是直接套MS/Google兩個大廠的API
開發又快又好用,可以讓開發者更專注在商業邏輯上
價錢又便宜,何樂而不為?
目前在ML上下最多功夫的專案是處理公司的一款遊戲
老闆要我們看能不能用ML的方式取代人工來抓作弊玩家
遊戲歷程是有存成日誌但是很亂
不過作弊行為滿明確的並不難抓
試了一些Feature跟model後就弄得差不多了
專案中花最多時間是寫regex處理中英文夾雜訊息格式又不統一的日誌...
所以有人要轉職AI工程師的話,我給的建議會跟板上說的“先把數學學好再來”不太一樣
現在這方面的職缺真的還挺多的,而且很多公司其實也搞不太清楚AI在幹嘛,錄取門檻不會太高
當然有些掛AI名但很實際上不知道在幹嘛的職缺還是要過濾一下
自學AI找工作,是可行的!是可行的!是可行的!
但不要只學AI,其他CS相關的東西也多少碰點
我有個同事就始終搞不懂為什麼scala的list,append是O(L),prepend卻是O(1)
也不知道要保持一個python list排序好並安插新元素, 要用bisect模組
不要每次都append然後sort...
希望這文章有給一些跟我一樣預計要轉職的人一些鼓勵
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.45.150
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1551936104.A.399.html
※ 編輯: as30385438 (125.227.45.150), 03/07/2019 13:22:14
至於XCODE進化很快,現在到哪種程度我就不清楚了
但我看我IOS的同事很多都在別的IDE寫 XCODE只拿來Build XD
而且跟我一樣完全門外漢轉職的人,應該是不太可能去當資料科學家的
除非補個博士學歷啦...
※ 編輯: as30385438 (125.227.45.150), 03/07/2019 17:01:20