作者as30385438 (LCH)
看板Soft_Job
标题Re: [请益] 关於 AIA 人工智慧学校(难民转职分享)
时间Thu Mar 7 13:21:41 2019
我没上过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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1551936104.A.399.html
※ 编辑: as30385438 (125.227.45.150), 03/07/2019 13:22:14
1F:推 iansrc: 推 03/07 13:36
2F:推 backprog: 推! 03/07 13:38
3F:推 fig498: 感谢分享! 03/07 13:39
4F:推 asimk193: 好文 03/07 13:55
5F:推 ice80712: 会讲先把数学学好的 根本学生 工程比数学重要多了 03/07 14:06
6F:推 ian90911: 感谢分享 03/07 14:28
7F:推 Luluemiko: 推 谢谢分享 03/07 15:04
8F:推 aacs0130: 推谢谢分享 工程跟数学都很重要 03/07 15:14
9F:推 Morphee: Caffe并没有退流行 很多DL应用在某方面还很偏好它 Xcode 03/07 15:25
至少在我接触过的公司以及相关产业人员没听过有用Caffe做产品的,也许是我见识浅薄
至於XCODE进化很快,现在到哪种程度我就不清楚了
但我看我IOS的同事很多都在别的IDE写 XCODE只拿来Build XD
10F:→ Morphee: 也很好用 03/07 15:25
11F:推 ILYY: 推 03/07 15:47
※ 编辑: as30385438 (125.227.45.150), 03/07/2019 16:33:22
12F:推 g5637128: 推 03/07 16:51
13F:推 drajan: 你这是ML engineer日常的工作内容了 工程占比较大的部分 03/07 16:55
没错,我的确把自己定位为工程师
而且跟我一样完全门外汉转职的人,应该是不太可能去当资料科学家的
除非补个博士学历啦...
※ 编辑: as30385438 (125.227.45.150), 03/07/2019 17:01:20
14F:推 cia1099: 哈 我从c++刚开始碰python也觉得是邪魔歪道 03/07 17:01
15F:推 descent: 难得有人称赞 c++ 03/07 17:58
16F:推 descent: 介面出得去,实作藏起来,coding发大财 03/07 18:01
17F:推 drajan: DS光谱的两端是纯analytics跟pure research, 而且只有中上 03/07 18:12
18F:→ drajan: 规模的需要纯的,其他都要兼任工程师 03/07 18:12
19F:→ drajan: 如果纯做analytics 大学毕业就可以了 03/07 18:12
20F:推 Morphee: 你知道的公司可能不够多 03/07 18:38
21F:→ w0005151: caffe有啦但真得很少,tf就占了一半吧 03/07 18:52
22F:→ w0005151: Pytorch跟tf背後有大头支持,跟其他框架已经越拉越大了 03/07 18:57
23F:推 vincentman: 工程师和资料科学家的不同,举例的还算适当,不是CS背 03/07 20:57
24F:→ vincentman: 景,但看你描述的一些经验和技术,觉得你算跨的很成功 03/07 20:58
25F:→ vincentman: 学界在影像领域用的DL框架,常见有tf,pytorch,matlab, 03/07 20:59
26F:→ vincentman: caffe。pytorch我觉得好用,後势看涨,但tf之後也会有 03/07 20:59
27F:→ vincentman: 改革 03/07 20:59
28F:推 neo5277: 自己刻 不错喔~~超爽 03/07 21:03
29F:推 aacs0130: DS在台湾都要兼任工程师跟分析师啊 03/07 22:46
30F:推 hung0724: TF 才刚出了 2.0 Alpha,还没仔细研究 03/07 23:07
31F:→ bndan: 文内写抓外挂工作部份 = = 和资安的部份工作还蛮类似的... 03/07 23:17
32F:→ bndan: 同样都是LOG趴完後分析 = = 03/07 23:18
33F:推 sxy67230: tf 2.0这次更新的特色就是更多的keras,contrib里面的 03/08 00:34
34F:→ sxy67230: 杂code移出来,还有function统一,keras变成tf的高级抽 03/08 00:34
35F:→ sxy67230: 象层,最後一个就是eager模式,把以前很难debug的tensor 03/08 00:34
36F:→ sxy67230: 变更好print参数了。简单来说就是向pytorch靠拢 03/08 00:34
37F:推 splitline: 我 js 派的,但也觉得 js 不太适合初学XD 03/08 08:40
38F:推 aacs0130: js是妖魔鬼怪,但刚学python 也觉得他假鬼假怪。 03/08 11:23
39F:推 thbw666: 推c++起手 03/08 20:46