最近看到了这个问题。
首先这个问题不太正确? 正确的问题是“如何实习最好?”你的目标是什么
回答这个问题,首先要想清楚自己未来的目标。
我们假设你的目标是做一名软件开发工程师,实习期是3~6个月。 我们的问题就变成如何在3~6个月里,让你向你的目标前进。 更明确是问题是在你找工作的时候,你的简历上写什么?给你的面试官说什么?以后工作面试中,看中你的什么
从我个人做面试官的经验来说,大学生\研究生 简历上实习经验最重要。
另外一个重要的是你的研究方向(不过现在这里面的水分太多,技术含量要么不大,要么不对口。) 至于你考试的分数、特长、获过什么奖之类的,只有参考价值。最好的实习机会是什么
你有个面试实习生的机会,你的目标是成为一名软件开发。
最好的实习机会是:- 让你每天开发8~10小时,一周工作5~6天。 似乎有点自虐,不过这样确实可以快速提高你的能力。
- 写大量的code很重要。 开发工作一般有两种:开发新功能和修Bug。 修Bug对新手的帮助不大。可是却经常让新手干。
- 方向很重要。 如果你想搞算法,就最好找相近方向的工作。
因此,在你面试结束的时候,你要问清楚对方让你干什么。
你可以给对方说,你可以接受加班,但是必须是开发工作,开发新功能的,让你有机会写大量代码的。 如果,对方说先让做一些测试。我认为你应该放弃这次机会。 这是因为:你做了3~6个月的测试,以后找工作的时候,很可能让你做测试工作。事与愿违
现在从公司的角度看这个问题。公司为什么招实习生?两个原因:一个是宣传公司,一个是有可能把好的实习生招成正式员工。
公司的那个开发团队为什么招实习生? (这个和公司是不一样的)两个原因:一个是公司的任务,一个有可能把好的实习生招成正式员工。 其实从开发团队的角度来说,让实习生参与到开发里是个极大的风险(需要培训,能力问题,是不是会随时离开,项目进度等等)。 大公司有可能不会让实习生接触code (安全规范的限制)我见过的实习机会有:
- 做测试
- 修一些Bugs
- Run Build, 每天写build报告
- 开发小工具
- 做些无聊的事儿 (比如把软件管理系统里,几百个tasks的状态改改。)
- 闲着(我面试过一个研究生抱怨说,在他实习的期间,开发团队帮他安排在不同楼层的一个工位上,再没理过他。)
好吧,说到这里,让你开发新功能的机会很小。上面修Bugs、开发小工具,算是比较好的实习机会。其实闲着的机会最好,我不是开玩笑。
其实,小公司(越不规范的公司)给你的机会可能越多。也许不实习更好
其实许多实习机会对你不重要。从找工作的角度上说,你需要的是简历上内容。更重要的是你需要提高自身的能力。
你面试的时候说,实习给了你了解大公司的文化,管理等等,基本上是瞎扯。 你可以不实习。 如果你可以很好的利用3~6的月时间干更多的事儿。比如自己做一个项目,你一个人也好,和其他人合作也好。 你完完全全可以把这个项目写到你的简历中去,可以说这是你实习期间干的事儿。这里有些规则:
- 你能够全身心的投入到这个项目里。 如果你个人控制力强,最好,如果不行,让你的同学或者老师监督你。 这就是我说为什么一个闲着的实习机会最好,公司的环境可以让你更专注。
- 有个比较好的方向。有新知识进来。
- 要有大量的产出物:Code和文章。 学习一个知识,看一本书比不上自己实现和利用它,在自己实现的过程中,你可以学会很多东西,理解也更深刻。
这里写一些我觉得比较好的例子:
- 可以学习一些人工智能的算法,写个程序实现这些算法,还可以测试、应用这些算法。再写一些文章。
- 可以学习一个框架,写个系统使用这个框架。这个系统要有完整性,你可以设想许多功能,然后实现这些功能。
- 可以仿照现有的软件。比如ant, junit等等,可以使用相同的接口\设计,自己写一个一模一样的,小规模的。
一些坏的例子:
- 只读书。
- 写类似于Hello World的程序。