‘壹’ 和杨超越做,腾讯、网易的程序员竟然争着为杨超越做游戏
这个世界太疯狂。
看到有人用它当头像的时候,我也并不意外;
“超越杯”是一场编程大赛,由杨超越的粉丝群体主办,要求参赛者以杨超越为主题开发编程作品。事件一经曝光,就凭借杨超越与程序员的诡异组合登上了微博、知乎和贴吧热榜的第一。
在决赛前一天,杨超越本人也在微博上为他们打call。
得知游戏是这场大赛当之无愧的主角,进入决赛的10款作品有8款都是游戏之后,我对它产生了浓厚的兴趣。
它草根吗?绝对草根。我刚刚进群,就有一名17岁,名叫杉杉的高中女生希望我写一段话:“超越看看你学生党的粉丝,为你和祖国发光发亮。少年强则国强”
而且杉杉显然不是最年轻的选手,因为前阿里程序员,现农民工子弟小学的支援编程教师阿达指导4名3年级小学生,做出了一款跑酷游戏《超越冲冲冲》,还闯进了决赛。
比赛的胜利标准也十分草根:投票。由于投票链接不太好找(我在网上足足搜索了10分钟),参与投票的人数有限,弹幕甚至围绕几个项目“是否刷票了”展开了一番争论。有参赛者向我抱怨:“投票消耗了大家很多热情,我们是非常不情愿的,现在又要投票,有些成员特别不积极,直接跑路了……”
直播页面的弹幕刷新极快,从未停止
可你又不能说超越杯不够专业,因为许多老司机都隐藏在参赛队伍当中。除了从业10年的原画师,满脸胡子的美国金融行业程序员之外,腾讯、网易的程序员同样随处可见,而且他们参与的几款项目都进了决赛。
例如用虚幻4制作的硬核ACT:《超越传说》的主创就是网易的实习生,此前他尝试独立做过冷兵器吃鸡、FPS、TPS等游戏,目前在浙大攻读计算机图形学的研究生学位,他说自己试着在作品中融入了黑魂和只狼的部分元素。
腾讯的参与则更为直接:腾讯课堂是超越杯决赛的直播支持方,他们邀请了腾讯的技术专家作为评委(比如魔方工作室群的一名技术总监),还在项目展示结束后,请专家讲解腾讯从T1到T6的“程序员升级之路”。即便主持人自嘲为了让自己接这个活儿,“主办方说给我2000Q币”,也无法缓解那种专业到开始无聊的氛围。
腾讯游戏魔方工作室群引擎中心技术总监,《游戏引擎架构》译者
这种草根和专业的冲突也体现在赞助方提供的奖品上面。获奖队伍既能获得倩碧护肤品、康师傅奶茶、多芬洗发水以及杨超越的周边礼品,又能获得cherry键盘或电脑外设,腾讯课堂课程礼包以及腾讯的内推名额。快消、娱乐圈、硬件和职场产品就这样诡异地结合在了一起,恐怕也只有与杨超越相关的活动才能做得到了。
在决赛前,我采访了闯入决赛作品《超越幻想录》的主创青衫隐隐,她是一名学习外国语言文学的大三学生,从来没有接触过游戏开发,但因为这场比赛,开始尝试用专业的思维做一款游戏。在她的话语中,你可以进一步了解选手们参加这项神奇比赛的历程,也更能理解他们的内心。
我们现在是糊透了,就是边吃瓜边看比赛,反正我们也得不了第一……哎怎么突然轮到我们做采访了?
进了决赛后天天都在投票,我们之前是第三,现在好像是第五?真的刚不过。没有防刷票的机制的时候,哎哟我的天呢,各地都有大刷子。本来我们只想在粉丝平台内部消化一下,但后来发现大家都在拉票,就还是拜托父母帮忙,还有组员为了投票,在年级、学校群里发投票链接。现在是都随便了,谁爱投谁投。
我最开始知道超越杯是在3月7日,当时上了热搜了嘛,我就想看看有没有队肯收我们。结果发现并没有,于是我们就自己成了一个队,现在队员有10-20个人,大家亲如一家,自娱自乐,天天在那儿吹牛。
我们这个组很神奇,大多是学生,彼此在现实中都不认识,而且都是村民——村民你知道什么意思吗?就是粉丝(杨超越曾介绍自己是全村的希望,后来他的粉丝便自称村民,而粉丝圈则是杨村)。
我是学计算机的吗?得了吧,我是学外国语言文学的。但我平时喜欢写个小说啊,画个画啊,也喜欢玩游戏,还靠辅助混上了王者段位,所以一直想做杨超越的衍生品,比如小说、漫画,还有游戏——我很喜欢游戏,因为它能部分地模拟人生。
《超越幻想录》是以超越的个人经历为样本,讲述她出道前的故事。春天是刚离家打工,夏天是进入职场,渐渐了解主播、模特行业,秋天是进入经纪公司,冬天是加入《创造101》。过程中她回遇到很多朋友,有不同的发展路线,也会提升数值,甚至通过多周目的努力C位出道,或者海外成团。
我们项目最大的创新是舆论系统,当前热度和粉丝排名会决定她能否出道,而每次黑色事件都会让节目的讨论热度上升,让她吸粉,这个系统我们设定了很多算法和模式,希望玩家可以思考偶像、舆论、社会和粉丝的关系。
很多参赛选手对超越妹妹有好感,但真不算粉丝,他们做的东西感觉是没有灵魂的,你明白吧?比如大多素材都从商城里找,只做了一个超越的模型,那个模型还很不像超越。他们做的是好游戏,但干嘛要来超越杯蹭热度呢?
我们不愿意直接用商店里的模型,系统又是原创的,所以一切都要从零开始,花了很多时间才把自己的非专业性弥补上去。别人线下10分钟就说完的事儿,我们要说2个小时。而且只有晚上9点后大家才有自己的时间,一讨论就到2-3点。
整整一个月,我都是9点工作,3点睡觉,心很累,脑子也不清楚。初赛的时候,为了赶第一期的视频,我翘了2周的课,老师说再翘你就不用来了,直接挂了你。但这个比赛有截止日期啊,只能说翘了的课已经翘了,不再想太多。
开发的时候,我会先和大家敲定大概框架,都要实现什么功能,怎么安排活儿,然后分别跟文案组、美工组开会,写大纲,分剧情,看谁是主笔,谁负责设计超越的形象,然后统一风格。后来我还要让写完剧情,没事情做的文案负责宣发,写slogan和广告词,做推广,抽奖发测试资格,在微博超话里抓粉丝。
现在《超越幻想录》已经有了20多张立绘和上万字的剧本,也做好了功能和系统架构,闲置了很久的程序员就要写代码跑程序了——我们也考虑过橙光,但不想把流量都给他们,所以还是想自己做。我希望这部作品可以“无限期开发”下去,慢慢做出来。
我不太敢让身边的人知道自己喜欢杨超越。在现实中,让别人知道你的杨超越的粉丝,做了一个项目,还要别人的支持是一件很羞耻,很难为情,要承受很大压力的事情。大家觉得她没什么实力,所以会给喜欢她的人打上邪教、脑残的标签。甚至很多人说编程大赛以她的名字开头,简直侮辱这个比赛。但这个大赛就是为她为生,因她而起的,没什么配不配得上。
我有一段时间心理状况很不好,抑郁什么的,看到杨超越后,我发现她也努力了,虽然很多事情还是做不好,但依旧能过得不错,就觉得特别解压。如果有一天这个社会允许这样的不完美存在,我觉得会好受很多。
我也有过见超越本人的机会,但一直不太敢,她对我的意义太强了,甚至有点儿符号的性质,就是近乡情怯——她是我精神上的故乡。我担心见到她之后,发现她不能承受我赋予的这么强烈的情感。如果有一天我没有任何问题,只把她当成普通的偶像,也许会愿意见她一面吧。
我不是那种狂热的粉丝,不怎么用微博,也没办法给超越很强的经济支持。但我会用自己的技能,产出小说、漫画、游戏来回馈她。在追星过程中,最重要的是找到自己存在的价值,找到虚拟中存在的真实。
许多人解读过杨超越,她身上承载了太多复杂的符号和母题:草根能逆袭吗?努力有用吗?被人喜欢就意味着优秀吗?在现代社会生活可以真实且任性吗?因此她可能拥有互联网上成分最复杂的粉丝群体,这也是此前超越杯编程大赛能够爆红的原因。
有人觉得对于开发者来说,超越杯是一个不错的曝光机会,有机会推动独立游戏的发展。我不奢望这场复杂而混乱的比赛能做到这些,但我能肯定一点:这些参赛者把对杨超越的喜爱,真的转化成了一个又一个作品。
亚军作品《杨超越秘密杂货铺》
说实话,即便是闯进了超越杯的决赛,许多队伍的表现都只是差强人意:大多数介绍VCR都十分粗糙,解说往往磕磕绊绊,讲解作品像是在背课文。但你能看得出来,游戏已经成了他们的表达方式,他们在用虚拟的作品,向虚拟的符号表达真实的自己,真实的存在,真实的热情。
偶像对人们有什么意义?相较粉丝的付出来说,他们到底能回馈什么?不同的时代有不同的答案。不过超越杯大赛的一句介绍文案回答了这个问题:我们的存在,就是要为自己和喜欢的人创造点什么。
这么一想,我还真的有点儿喜欢杨超越了。
‘贰’ 脱口秀大会第一季冠军
《脱口秀大会》第一季冠军是庞博。
《脱口秀大会》第一季2017年10月17日晚收官,最终大王桂冠花落庞博,决赛中他以程序员身份爆笑解读BUG,收获观众和喜剧评审团的纷纷点赞支持,成为当之无愧的“脱口秀一哥”。
思文作为唯一女脱口秀演员一路杀进三强,虽然最终遗憾败北但是“人不如狗开心”的段子依然让人印象深刻,“脱口秀一姐”非她莫属;王建国此次的表演猛料连连,透露好朋友李诞宿醉糗事,并喊话李诞“赶紧交点新朋友吧”。助阵嘉宾热狗爆料唱嘻哈初心是为了把妹,华少则实力调侃同行张绍刚,笑点密集,全程高能。
《脱口秀大会》冠军庞博在第四季首轮轻松晋级
庞博是第一季脱口秀大会的冠军,第二季的第五名,第三季的第七名,总之都是名列前茅。在第四季首轮,庞博轻松获得领笑员的四盏灯,顺利晋级下一轮。庞博这次讲的段子的水平真的是挺高的,其中有三个梗直击现在年轻人的痛点。
第一个痛点就是剧本杀。这种沉浸式游戏是当下95后和00后最爱玩的游戏之一。庞博对此痛点抛出的梗是:剧本杀就是一群陌生人在各自宝贵的休息时间中,特意抽出几个小时,然后开一下午的会。有时碰巧遇到同事,还会说这样的胡话:这个项目是我搞黄的,但人真的不是我杀的。
第二个痛点就是当今的奶茶很受欢迎,但里面放的东西太多了。庞博对此痛点抛出的梗是:就像兑了水的粽子,我实在喝不下去,没办法用八宝粥往下顺了顺。杨澜老师听到此处,毫不犹豫拍了灯。
第三个痛点就是盲盒。虽然不知道盲盒里面装的是什么?但是年轻的朋友就是喜欢买它。庞博调侃道:菜市场里是不会卖盲盒的,不然都会祈祷里面放的是一头蒜。
同时,庞博也建议消费者在购买盲盒付款时,也采用盲盒形式,这样做就非常公平了。消费者买到什么全凭运气,同样,售卖者卖到什么价位也全靠运气。
庞博的精彩演出受到了四位领笑员的一致好评。杨澜老师点评道:庞博的脱口秀技术确实很好,并且有一种归零的心态重新开始。大张伟另类点评说:就是有荷尔蒙,你一上场,底下的小姑娘全在那尖叫。
‘叁’ 零基础小白如何成为程序员需要学习哪些内容
自学编程没那么难。只要是理工科学生,逻辑思维好的朋友,都可以开始编程。这里有六种方法可以和你的朋友分享自学编程。这些方法足以帮助您入门和进阶:0.书籍+视频可能是学习编程最好的方式,对于初学者来说,可以通过视频+书籍来学习。这两种方式形成互补关系。编程教学视频可以帮助你快速掌握编程,但通常比较生动,简单,不系统。书是系统的,透彻的,枯燥的,所以最好的方法就是把书和视频结合起来。
5.反复练习。编程是一门手艺,需要反复练习。没有书和视频能独立实现吗?学习的最终状态无非就是:我没有他,但是我的手很熟悉。近年来,IT行业变化很快。我们可以大致感受到我们使用的手机和互联网产品的变化。我们从原来的非智能手机迁移到iPhone和安卓手机。我们从去网吧买电脑变成了6G内存2GHz的智能手机(已经超过了2010年的电脑配置)。
我们从大型PC游戏转到了手机游戏。我们的每部手机都有将近100个应用。我们用过很多微信官方账号,微店,mini 程序和mini游戏。我们从5元3000万变成了随时随地刷小视频,直播。我们很少用现金,因为我们不得不拿钱包取钱,有时我们想拿出10元钱,但我们真的没有……丰富的互联网产品(应用程序、H5、小程序、游戏等)背后。),IT其实是由日新月异的IT技术支撑的。
所以作为程序,你必须不断学习,学习公司需要的任何技术。工作几年,坚持学习也不算太累。毕竟经历了几年,很多东西都很熟悉。零基础如何自学编程?成为/kloc-0成员需要具备哪些技能?这些年来,我开发了各种东西,做了各种编程工作。服务器后端程序已经开发出来,需要几种编程语言:JAVA、PHP、Node.js、Python、SQL等。已经开发了PC网页和H5,需要Javascript,CSS3,HTML5等。开发了一个App,你需要用JAVA,SQL,HTML5。
我们开发了微信small 程序,需要CSS,Javascript,HTML等等。开发过计算机软件,需要用到C#、Javascript、C++等。为什么要学那么多技术?因为不同的编程语言有不同的长处。比如玩游戏,Unity很成熟很快,很多知名游戏都是用它开发的,所以开发游戏的时候几乎很多公司都在用它,程序会员一定要学。移动APP的开发主要使用JAVA、Swift、OC等编程语言,开发App必须学习这些编程语言。零基础如何自学编程?成为/kloc-0成员需要具备哪些技能?
没有接触过技术开发的人还是不知道为什么需要这么多编程语言。这么说吧:翻译跟英国人说话要说英语,跟西班牙人说话要说西班牙语,跟我们说话要说中文。IT技术的编程语言和我们说的语言类似,不同的领域需要不同的语言。说了这么多,大家都知道程序员工在工作中需要的技能,以及会发展什么。
我再简单总结一下::程序工作人员必须掌握自己岗位的编程语言。比如做安卓APP,一定要掌握JAVA。一般掌握编程语言是不够的。为了提高开发速度,还必须了解各种框架和库。程序员工将发展什么?会开发APP,网站,电脑软件,微信程序等等。不过应该说,行业是有特长的,并不是所有的程序工作人员都能开发应用、网站、小程序…有些人只能懂一门技术,但可以是专家,比如数据库专家。而且这些年我也只是个打杂的,但是各种发展都会...更多的杂工,仅此而已。
‘肆’ 《脱口秀大会》呼兰是哪里人学历怎么样
呼兰的背景很强大,来自上海的他,毕业于哥伦比亚大学,硕士学历,早前在海外工作了很多年,职业是一名程序员。呼兰在国外的时候就喜欢写一些段子,只不过一直没有机会展示。
后来呼兰回国发展以后,一次偶然的机会接触了“脱口秀”,他慢慢发现自己很喜欢站在台上表演,而且那种感觉让他非常享受,因此呼兰也更加坚定选择走这条路了。呼兰没来参加《脱口秀大会》之前,他还参加过《吐槽大会》,当时他在舞台上的表演就非常出色,向观众抛出了许多搞笑的梗,从而给人留下了深刻的印象。
呼兰在节目中的表演非常非常好,他的段子从头到尾没有一句废话,而且梗和包袱非常密集。内容和节奏把握的也非常好,信息量很大、笑点密集,且结束的干脆利落,有头有尾。
‘伍’ 少儿编程对孩子学习有什么好处可以参加哪些竞赛
孩子学习少儿编程的学习对于孩子自身能力的提升来说有一个好的提升外,如果孩子在C++这方面成绩非常不错的话,是可以去参加信息学奥赛的,现在比较出门 的赛事有:
ICMC
CMC针对3-14岁少年儿童创客,以鲜明的“单人赛制”和“独立完成”为特色,以真实考验和激发选手科技实践能力为目标的校外机器人创新活动。
2015年创办至今,ICMC以亚洲最大的上海科技馆为赛事基地,每年在上海、深圳、武汉、成都、青岛、西安、廊坊等设立分站赛,已经成长为极具全国影响力的青少年机器人科创展示交流活动。
ROBORAVE
RoboRAVE 是一项由 Intel
公司主要赞助和支持的国际机器人大会,在2001年起源于美国。凭借着易上手、教育性和趣味性强等优点,RoboRAVE已发展成为一个极具影响力的国际型机器人大会,并在中国、美国、法国、西班牙、日本、阿根廷、哥伦比亚、墨西哥、捷克和印度等20多个国家建立了分会,每年吸引上万名学生参与其中。
机器人等级考试
全国青少年机器人技术等级考试是由中国电子学会发起,面向8-18岁青少年机器人技术能力水平的社会化评价项目。机器人等级考试是见证学生技术实践能力成长的过程,是对创新学习成果的检验,也给孩子们提供了一个展示自我的平台。
ROBOTEX
Robotex世界机器人大赛发源于爱沙尼亚,由塔尔图大学、塔林理工大学两所世界知名院校联合发起,共同支持协办。经过20年的发展与成长,目前已成为欧洲规模最大规格最高的机器人大赛。成为小学、初中、高中、大学、创客空间、机器人俱乐部喜爱的世界级机器人盛会。
成立以来,每年世界总决赛吸纳世界各地30000+观众和1500+机器人参赛。优秀学员或选手不仅可以包揽奖池,还有机会获得世界知名高校/企业的offer。
ROBOCOM
围绕青少年特点,设计和启动的“RoboCom国际公开赛”以机器人赛事为突破口,通过对抗类、任务类和创意类3种不同的赛事形式,将团队协作、问题解决、科学发现等方面比赛要求相结合,从项目、程序、工程设计、延时及团队合作入手,不仅能检验青少年对机器人技术的理解和掌握程度,还能最大限度地激发青少年对机器人技术的兴趣,引发全社会对机器人、人工智能等科技的关注。
BRC
“BRC”由“BRC机器人挑战赛组织委员会”领导,清华大学、哈尔滨工业大学、北京航空航天大学指导,全球科创促进基金会、BRC组委会主办,上海贝乐文化传播有限公司承办,央视中学生频道、爱奇艺中学生频道、今日头条、抖音、SMG、搜狐网、新浪网、新华网、一直播等合作媒体支持。
源于国际上流行的STEM教育,国家对青少年创客教育的培养重视,以及各高校、企业对机器人专业人才的需求,BRC机器人挑战赛(简称“BRC”)应势而生。
BRC致力于打造机器人教育行业的国际化科创活动平台,检验和培养青少年创新创造和动手实践能力,为未来的机器人行业储备尖端人才。
蓝桥杯
蓝桥杯大赛是工信部人才交流中心举办的全国性专业信息技术赛事。12年来,作为首屈一指的信息技术赛事,蓝桥杯吸引了北大清华在内的超过 1500
所院校、累计40余万名学子参赛,IBM、网络等知名企业全程参与。蓝桥杯大赛塑造了领跑全国的人才培养选拔模式,并获得了行业的深度认可。
自2016年第八届起,赛事在原有大学生数个专业编程组别的基础上增加了中小学创意编程组,简称青少组。和蓝桥杯高校大赛相比,青少年编程组大赛同样注重公正性和严肃性,让个人能力出众、逻辑思维清晰和编程创意丰富的小朋友更容易脱颖而出。
‘陆’ 华为面试请教,请各位前辈指教,万分感谢!
一、优秀程序员必备七要件
程序员是一个要求技术含量很高的职业,同时要求有不断进取的精神和不达目的决不罢休的精神状态,以下就是简单总结的如何做个有些的程序员,希望对各位的求职和工作能够有所帮助。
1.踏实的工作态度。低承诺,高实现:如果你的承诺确实是管理人员想听到的,
他就会喜欢你。但是,如果不能按照承诺及时交付软件,他就不会再喜欢你。而且如果你没有承诺的也超额完成,可想而知,老伴对你的印象会有多大的改变。但是切忌,如果自己真的有能力还是应该提前说出来,只要不过分夸大就好。万事适可而止、恰到好处就好。
2、认真负责,少犯错误。软件很可能会因为一个细小的错误而不能正常运行,所以说不要在软件中放入错误,优秀的程序员不在他们的代码中放入错误。尽量精准的设计,会让你的工作事半功倍。
3、充满热情,努力工作。作为一个优秀的程序员是充满热情和努力工作的,他们具有很强的组织性,而且讲究方法,他们有能力将事情结构化。此外,大多数程序员勤奋工作的热情是令人难以置信的。他们呕心沥血,不眠不休就是为了最后的胜利,如果你也具备这种精神,那么你就算半个合格的程序员。
4、有预见性,知道未知因素。看到别人看不到的未知因素,并且提前做好预备工作,这说明你至少是个有经验的程序员。你的前途可以说是一片光明。
5、有团队合作精神,能善于和别人相处。一般开发工作都是以小组进行的,所以一定要与小组成员友好相处,软件开发是小组成员协调努力的结果。不要把功劳归结为某个人,同时也不要把错误看作是别人的错误。
6、坚持到底,善始善终。其实开发软件是一件非常辛苦的工作,所以一旦认定目标,就要朝向最终目标努力努力再努力,始终朝向最终目标。这其实也是非常重要的能力。特别是在与一些人面谈工作时,你要寻找的一件事情就是在小组已经交付的产品上他实际参与的工作。具备这种能力是作为一个优秀程序员的必备条件。
7、超凡的学习能力。在软件技术领域,技术的更新日新月异,所以作为程序员必须学习不断涌现的技术,掌握尽可能多的技能。优秀的开发人员是渴望学习的人。善于学习的人才能在这一领域立于不败之地。也是程序员必须具备的条件之一。
二、程序员的职业要求
一般的程序员都有四年的在专业领域的学习,需要一个在程序领域的学士学位获得者,不论是数学方面的还是工程方面的都是可以的。大约有20%的人在这一领域的计算机科学和工程学拥有更高的学位。还有很小一部分程序员是自学的,尽管一些专业性的学校或者综合大学可以提供,但是也需要一些别的途径来提供相关的人才。尽管学历是比较重要的,但是公司经常把重点放在应聘者的工作经验上,很多刚从大学毕业的大学生虽然有引人注目的学位证书,但是他们找不到工作是因为他们缺乏经验。一个程序员虽然有正规的学历,但是如果一个人拥有程序设计的深厚知识背景或者丰富的工作经验的话,那么他的机会要比有学历的应届毕业生大得多。所以要尽量抓住有用的工作和实习机会,这样的话在毕业后你就会发现,多实习让你有更多的经验,在找工作的时候就有更多的机会。
对于职业程序员,另外一个重要的方面就是,程序员需要不断提升自己的业务技术,你的技术必须一直保持在一个较高的水平,并且要不断发展,程序员也要寻找贸易的机会,要参加研讨会,在周刊上发表文章和接受职业教育,这些使程序员在自己的领域中分级或者不断并排前进。
三、一位大四程序员的面试经历和体会
1.面试经过
大约在年前我接到了台湾瑞晟(Realtek)苏州公司的面试通知,通知我2月21日到苏州工业园区面试,接到面试后的几天我把一些专业课温习了一遍,特别是C++和数据结构,由于大学几年里,我一直专研这些方面,加上通过了高级程序员的考试,对于一些常用的算法我差不多也 达到了烂熟于胸的地步,当时的感觉是如果问了我这些方面的问题我应该是没有问题的!
21日那天我被安排在4:30面试,由一位技术人员单独给我面试,在问了一些简单的问题之后 ,他给我出了一道编程题目,题目是这样的:
(由于具体面试的题目比较烦琐,我将其核心思想提取出来分解成……(乱码)
1) 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n
哼,我的心里冷笑一声!没想到这么简单,我有点紧张的心情顿时放松起来!
于是很快我给出我的解法:
long fn(long n)
{
long temp=0;
int i,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
搞定!当我用期待的目光看着面试官的时候,他微笑着跟我说,执行结果肯定是没有问题! 但当n很大的时候我这个程序执行效率很低,在嵌入式系统的开发中,程序的运行效率很重要 ,能让CPU少执行一条指令都是好的,他让我看看这个程序还有什么可以修改的地方,把程序 优化一下!听了这些话,我的心情当时变的有点沉重,没想到他的要求很严格,之后我对程序 进行了严格的分析,给出了改进了的方案!
long fn(long n)
{
long temp=0;
int j=1,i=1,flag=1;
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
虽然我不敢保证我这个算法是最优的,但是比起上一个程序,我将所有涉及到乘法指令的语 句改为执行加法指令,既达到要题目的要求而且运算时间上缩短了很多!而代价仅仅是增加了 一个整型变量!但是我现在的信心已经受了一点打击,我将信将疑的看者面试官,他还是微笑 着跟我说:“不错,这个程序确实在效率上有了很大的提高!”我心里一阵暗喜!但他接着说这个程序仍然不能达到他的要求,要我给出更优的方案!天啊!还有优化!我当时真的有点崩 溃了,想了一会后,我请求他给出他的方案!然后他很爽快的给出了他的程序!
long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}
搞笑,当时我目瞪口呆,没想到他是这个意思,这么简单的代码我真的不会写吗,但是我为 什么没有往那方面上想呢!他说的没有错,在n很大很大的时候这三个程序运行时间的差别简 直是天壤之别!当我刚想开口说点什么的时候,他却先开口了:“不要认为CPU运算速度快就 把所有的问题都推给它去做,程序员应该将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们程序员服务的!”多么精辟的语言,我已经不想再说 什么了!接着是第二个问题:
他要求我用一种技巧性的编程方法来用一个函数实现两个函数的功能n为如:
fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6!
fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9!
现在用一个函数fn(int n,int flag)实现,当flag为0时 ,实现fn1功能,如果flag为1时实现fn2功能!他的要求还是效率,效率,效率!说实在话, 如果我心情好的话我应该能给出一种比较好的算法,但我那时真的没有什么心思再想了,我在纸上胡乱画了一些诸如6!=6*5!的公式后直截了当的跟他说要他给出他的答案!面试官也没有 说什么,给出了他的思路:
定义一个二维数组 float t[2][5]存入[2!,3!,4!,5!,6!},{5! ,6! ,7!,8!,9!]然后给出一个循环:
for(i=0;i<6;i++)
{
temp=temp+n/t[flag][i];
}
最后得到计算值!呵呵,典型的空间换时间的算法!
这些总共花了50分钟的时间,还有十分钟我就跟他很随意的聊聊天,聊了一些编程以及生活 的问题,那时的我已经很放松了,因为我知道这次面试结果只有一个:失败。5:30的时候面试官要我等通知,于是我离开了他们公司。这就是面试的整个经过!
2.由面试想到的
真的是很失败啊!我记得那天下好大的雨,气温也很低,我边走边想,从5:30一直走到7:30 ,全身都湿透了,又冷又饿,但是我只是一直走,脑子里面充满了疑惑,我也想让雨把自己淋 醒!看到这里有些朋友可能觉得那些面试题目不算什么如果让自己做的话肯定能全部答对,我 肯定相信你,因为我从未怀疑过中国程序员的能力,我认为中国有世界上最好的程序员,我也 从未认为自己是高手,所以我做不出来不代表中国程序员比台湾或者别的地方的程序员差,所以我就从我的角度,我的所见所想来谈一些感想:
不错全世界都有优秀的程序员,中国也不例外,但是我疑惑的是:到底中国和台湾或者国外 的优秀的程序员的比例到底是多少?台湾我不知道,中国100个程序员里有几个是优秀的呢?我 根本算不上,从上面的表现就足以说明一切了!是1个?5个?10个?50个?这个数字我不敢乱 猜,恐遭网友一顿痛骂,那么我们国内有多少人学习计算机呢?拿我们学校来说,计算机97级 4个班,98级5个班,99级10个班,2000级17个班,人多了,老师怎么办?我们学校的做法是让 研究生上课,然后呢?补考一抓一大把,大把大把的补考费落入了学校的口袋,还说现在的学生素质低!真是好笑,我都不知道学校这么做是为了什么,为国内培养大量的程序员吗?学生 们能真正学到计算机知识吗?好了,我敢讲,在我们学校学习编程学生和优秀程序员(注意我 指的是优秀,只会编几个糟烂程序的人算不上)的比例应该是100:0.1 在这种比例下虽然我们中国学习编程的人铺天盖地,但是想想有多少个人能真正为中国软件 业发展作出贡献,有多少人能真正写出优秀的程序名扬海外!
我从学习编程以来,不管是自学还是老师指导,从来都是解决问题就好,编出程序来就行, 我的疑惑是:我们有真正的强调过程序的效率,程序的质量吗?我们有仔细分析过我们写的东 西,看看有没有可以改进的地方,看看有没有简单的方法来达到同样的目的呢?我问心自问, 我发现,我从来没有对我写出来的程序进行过优化,最多就是进行详细的测试,然后Debug, 但是这就足够了吗?
这些天我偶尔发现我曾经写过的一个游戏,那是一年做为 其中一员时候,感觉应该拿点东西出来,然后花了一个星期的时间写出来的!程序不算复杂,但是用到了不少数据结构的东西,也用到了一些精彩的算法,加上windows的界面和游戏的可 玩性,写完后受到了不少好评,我当时真的很佩服自己!
但是现在看呢:没有一句注释,好多 丑陋的函数名比如:void chushihua(),好多没有必要的变量,可以用简单语句完成工作的我 使用华丽的算法,大量使用全局变量.....,说不好听的话,六百多行的程序除了能运行之外就是一陀屎!如果一年前我能听到一些反面意见的话,大概我能早一点觉悟,但是自原代码在 网站发布以来听到的都是赞美之词,没有一个人向我提出程序改进的意见,这又说明了一个什 么问题呢?很值得思考啊!
还有一个疑惑是:我们说的和做的真的一样吗?我在学校的时候曾经受学院指派承办过一个 计算机大赛,请了一个老师出决赛的题目,主要是一些算法题目,这个老师可能是我上大学以 来唯一敬佩的老师了,从程序调试到打分,对于每个程序都仔细分析其时间效率和空间效率, 然后综合打分,四十个人的卷子,老师从下午三点一直调试到晚上十点,在有些写的精彩的语 句后还加上批注。我真是高兴很遇到这样的老师并且和他做深入的交流,但在事后,却发生了 一件不愉快的事,在比赛中获得第二名的学生找到我,说他程序全部调试成功应该给他满分, 并且应该得第一,我说不过他,最后调出了他的原程序和第一名的原程序对比,错,两个程 序都运行的很好,这时,那个同学开口了:“我的程序写的十分简捷明了,仅仅数行就完成了 题目要求,而他的却写了一大堆,为什么给他的分多过给我的分。”我当时很是气愤,如果不 是老师负责的话,那么现在第一名和第二名的位置真的要互调了,拜托,不是程序的行数越少 程序的质量就越高,我记得我跟他大谈这方面的道理,最后说服他了!哈哈,但是我,只能说 说而已,我不知道还有多少人一样,说起来头头是道,但心里却压根就从未重视过它!
四、优秀的编程人员应该掌握的十种编程语言
优秀的编程人员应该掌握的十种编程语言
引:位于圣地亚哥软件编程公司Interknowlogy.com CEO Tim Huckaby表示,“我的一个导师曾经告诉我编程语言仅为一种语言。若你是一名优秀的程序编制人员,编程语言就是一些句法变换而已,并没有其他重要部分。”
在求职过程中能够了解多些编程语言,无疑是有很大优势的。
确实,以量取胜是有优势的。当然不排除存在一些恰好在合适的时间、合适的地点正好知晓合适的编程语言的情况,不过绝大部分编程者都会善意建议你阶段性学习一种新语言,这对于作为一名合格的网站开发人员来说,是非常有必要的。
位于圣地亚哥软件编程公司Interknowlogy.com CEO Tim Huckaby表示,“我的一个导师曾经告诉我编程语言仅为一种语言。若你是一名优秀的程序编制人员,编程语言就是一些句法变换而已,并没有其他重要部分。”
不过,Huckaby表示,当时他的公司还在初创期,暂时不会考虑增添新人,不过知晓特定编程语言的入门级别人员有所例外。
Huckaby表示,“我们会聘用那些有激情、态度端正、聪明的刚从学校毕业、懂得.Net或Java语言的学生,因为这种人员,我们可以再次对他进行.Net培训。”
加州Sebastopol市Grandview Systems的软件开发负责人Wayne Duqaine表示,“不要只集中在一两种语言上。当我在1969年开始时,FORTRAN、COBOL和S/360 Assembler是当时流行的语言。而今,Java、C和VB则是通用的程序编制语言。十年的时光中,有许多新语言都变成了流行语言。我粗略的计算一下,在三十年的时光中,我已经学会了近24种不同语言。”
五、几道经典C语言笔试题
1.
int main()
{
int i, n = 20;
for (i = 0; i < n; i--)
printf("*");
return 0;
}
Change/add only one character and print '*' exactly 20 times.
(there are atleast 3 solutions to this problem :-)
2. display below like:
1
212
32123
4321234
543212345
3. search for maximum and minimum value, before save into arrange for any 5 natural number (use multiful for grammer)
ex)
save to any 5 natural number
30 20 75 15 64 <enter>
minimum : 15
maximum : 75
4. use ms-sql of join grammer. show query fot result
Table.1
ac_country
--------------------------------------
country_cd country_nm
--------------------------------------
kor koera
jpn japan
usa usa
cha china
Table.2
ac_currency1
-------------------------------------------
country_cd currency_cd currency_nm
-------------------------------------------
kor won W
jpn yen Y
usa usd US
# Result
-------------------------------------------
country_nm currency_cd currency_nm
-------------------------------------------
korea won W
japan yen Y
usa usd US
Result Query :
5.use ms-sql of join grammer. show query fot result
table.1
account
--------------------------------------
userid cost date
--------------------------------------
use01 10,000 2007-01-02
use02 5,000 2007-01-03
use05 7,000 2007-01-03
use03 5,000 2007-01-03
use01 5,000 2007-01-04
use04 5,000 2007-01-05
use02 10,000 2007-01-05
use01 1,000 2007-01-05
table.2
userinfo
-----------------------------------------------
code userid money register
-----------------------------------------------
AAA use01 8,500 2007-01-02
AAA use02 5,000 2007-01-03
AAA use03 2,000 2007-01-04
AAA use04 4,500 2007-01-05
BBB use05 5,500 2007-01-02
table.3
stateinfo
-------------------------------------
connect state indate
-------------------------------------
AAA-use01 Yes 2007-01-03
AAA-use02 No 2007-01-05
AAA-use03 No 2007-01-04
AAA-use04 Yes 2007-01-05
BBB-use05 NO 2007-01-04
#result
----------------------------------------------------------
userid money account_count account_total state
----------------------------------------------------------
use01 8,500 3 16,000 Yes
use02 5,000 2 15,000 No
use03 2,000 1 5,000 No
use04 4,500 1 5,000 Yes
Result Query :
6. show 2 query each fot result.A, result.B
table.data_table
-----------------------
F_DATE
-----------------------
2007-04-17 11:42:55.200
2007-04-18 01:45:33.403
2007-04-18 01:47:01.500
2007-04-17 11:40:15.000
2007-04-18 11:41:25.700
2007-04-18 11:41:49.420
2007-04-17 11:44:58.000
2007-04-18 11:45:23.340
#Result.A
----------
F_DATE
----------
2007-04-17
2007-04-18
Result Query :
#Result.B
----------
F_DATE
----------
2
Result Query :