孩子不爱上学,就想学编程做游戏,非北京户口孩子上学什么学校好啊?

在真实工作中的编程是怎么样的,与学校里有什么不同?
本人还是在校学生,学校里每门编程语言课程都是上一点上不完的,实验课写的代码最长一两百行。 很好奇在真实的工作环境中,程序员写代码是怎么样的。每天啪啪啪手敲成千上万行代码这样的吗。和在学校学习时写代码有什么异同。 (?o??ωo???)希望已经工作的前辈们来回答回答。
按投票排序
180 个回答
/*说说我的经验*/刚进公司时,在你正式动手写代码前,很可能要理解code base。这一过程至少持续1个月,取决于你所在项目的规模。你会发现你不得不使用你浑身所学之能事,理解上古程序员是如何解决一个个实际的问题的。有的时候你沾沾自喜,“哈哈,这个技巧劳资经常用,你们也算有点见识”。但大部分时候你很糊涂。在此阶段,你每天的工作就是看文档,看设计图,读代码,放断点debug,hack,fix,问同事。你很累。你很无聊。此外,刚进公司的你,会发现你的项目组正在使用一些奇葩工具、冷门技术,他们非常不好用,尤其跟你大学时候用的成熟IDE相比。你可能会想砸键盘,“谁特么想出来的用这个工具!谁特么写的这么sb的工具!”你很失望。渐渐的,你开始了解了你们的业务领域,所谓的掌握了一定的领域知识,你开始有能力判断哪些是权衡,哪些是权宜,哪些是极精妙的设计,哪些是遗留代码。你的领导也发现了这一点,于是开始给你安排简单的任务。他们可能是改一些显而易见的bug,可能是实现一个最简单的新特性。此时你会有一种驾驭的错觉,你很快的写好了功能,提交,开始幻想自己精妙的代码收到表扬。当然,不出意料的是,你提交的100行代码里被找出了10个bug,其中2个是很严重的逻辑错误,4个是未实现的需求,2个是ui错误,2个是边界条件未检查。你心里十分不爽,“妈的劳资这么屌炸天的代码你们都不懂得欣赏!”此时你的领导过来轻描淡写地来了一句,“我们提交之前要进行code review”。于是你找了你身边比较和善经常解答你问题的小哥来代码检视,10分钟之后,你漂亮的代码被改得面目全非,你欲哭无泪,又不想得罪前辈,于是默默地提交了这不知道是谁写的代码。就这样挣扎着过了几个月,你开始摸清了门道,于是你开始运用你大学时期课内或者课外学到的引以为傲的技巧和知识了。领导自然也发现了这一点,于是他开始安排你组织技术交流会,你精心准备好了ppt,自己在家排练,并且试图加入一些或者高冷或者没品的幽默段子。会议很成功,你感觉到同事开始对你刮目相看,你开始飘飘然,重新拾回“驾驭”的感觉,心想“就你们这帮码农,劳资以后可是架构师!”渐渐的,你开始进入了状态,你提交的代码越来越多。刚进公司时你从来没打开过的代码规范文档开始回来找你麻烦,不过这不是大问题。领导开始对你强调质量,而你则在心里抱怨旧代码的设计。你想要重构,你想要创新,你想要搞一个大新闻。与此同时,组里新来了一位同事老李,是从其他部门调过来的老员工,领导组织组里盛情欢迎了他,你心里不服,但是他是个好人,你们谈笑风生。机会来了。公司要紧急实现一个演示功能,百万级的合同能不能拿下来就看这次了,你的领导已经亲自飞往客户那里坐镇,他走时跟你说,“组里就靠你和老李了!”你十分激动,买好了泡面和零食,准备通宵作战,给领导提供最犀利的火力支援。第一个功能点谈下来了。领导发给你了要求。你发现你半懂不懂。里面提到的一些其他模块,你在每月组织的技术交流大会里听说过,但你写过的那点代码里从没调用过他们的API,你更没读过他们的代码。你有点不知所错,开始心虚。不管了,先开始干。你找到了一些相似的功能,翻出了一些发霉的陈年旧代码,注释里写着。你没有时间完全读懂,你开始复制粘贴,直接debug。当然,代码报错了,你开始挨个解决,就这样,一个通宵。第二天早上,你总算把你熟悉的后台部分调通了,你发现了新的麻烦。是前台。你对前台并不熟悉。你知道javascript的原名叫ECMAScript,你知道JQuery对象和dom对象的区别,但是你发现你还是看不懂你们的前台代码。怎么办?好吧,你决定拉下脸,问老李。老李看你的样子,说,“你去睡一会吧,我来帮你看”。你心里有些不甘,有些不好意思,也有些感激。你很想自己把它们做出来,但你不会,而且时间也来不及了。你想学学他是怎么做的,但是你的大脑已经停止工作了。于是你疲惫地笑了笑,“好,交给你了。你看一下这里这里还有这里...我就去睡半个小时,一会就回来找你。”你这一觉睡到了下午。你醒来一看表,震惊的弹起来,赶紧回办公室找老李。老李已经从你的座位回到自己的座位上了,正在慢悠悠地喝茶。你有些惊喜地问他,“怎么样?”他回头看见你回来了,说,“放心吧,已经给一线调试了,你去吃点饭吧。”你哪里有心思吃饭。你惊讶地对老李说了声“好的!太好了!”然后回到你的座位上迫不及待得打开代码开始运行。正如老李所说的,功能已经实现了。你轻舒一口气,拿出一碗泡面泡上,开始啃代码,心里想的是“这次一定要准备好,防止下次再出乱子。”啃着啃着,你有些不耐烦了,因为你发现代码越看越多,已经超出了你的大脑容量。你想了一下,决定先放在一边,查收一下邮件放松一下。邮箱里又是塞满了新员工培训的资料,各个部门的联谊活动通知,当然最多的是服务器发来的build report和test report。没什么有趣的事。你想了一下接下来要干嘛。算了,还是接着写新特性吧,测试们还等着你呢。但是你其实很忐忑,你的心早已飘去了前线,但是你知道你不能发邮件问状况,因为你领导可能几天没睡了,何况你也并没有什么特别紧急的事。你破天荒的把邮件客户端开着,留意每一个新收到的邮件。就在这样的忐忑中,一天过去了。反正也没什么事,你回家好好洗了个澡,定了个早早的闹铃,安心的睡觉了。第二天一大早你就跑去公司,果然邮箱里有了领导的邮件,上面写道“演示很成功,客户很满意,接下来是谈判阶段。家里的开发兄弟你们太棒了!”当然,你很高兴。但是又有一点失落。你不太明白为什么,于是你想了一下。随后你似乎明白了,虽然这是一个好消息,但是好像跟你又没什么关系,跟任何人似乎都没什么关系,好像是一件自然而然的事情一样,并没有“holy shit”超神的声音。过一会,你的大领导,项目总经理回复了你领导的邮件,说“干得好!同时也对家里的兄弟提出表扬!回来开庆功会!”你心里略有一些期待,“不错”,你想到,虽然主角不是你,但是你毕竟也是功臣。你为庆功会暗自准备了很久,你在网上浏览跟领导吃饭该说些什么,你想好了很多概括性的有内涵的问题来证明你对项目的理解,你也想多了解一些项目的大方向。几天之后,你领导回来了,大家开了庆功会。饭局上,大家聊聊家常,聊聊你领导在国外的见闻,大领导知道了你的名字,大家似乎很随意的打了一会牌,就这样平平淡淡的结束了。你略有一些失落。生活回归正常。但似乎又跟以前不那么一样。你在开发工作以外,有了新的任务,其中包括学习推广新技术等等。你开始跟你领导彻夜长谈。他与你分享他的经验,你与他分享你的见闻。你开始接触他的工作,比如提高团队能力,完善自动化测试,提高代码质量,提高代码性能,增强功能可配置性等等。你开始淡定的接受新的工作,而不再幻想一朝成名的瞬间。毕竟,迎接挑战才是你真正感兴趣的事。不过,这接下来的几个月里,除了改自己先前遗留下来的bug,你几乎没有提交任何代码。你每天的工作变成了看框架,读代码,看技术文档,学习试验新工具,浏览技术论坛等等。你开始觉得有一些缺乏成就感,也有点怀念绿绿的单元测试结果和噼里啪啦弹钢琴一般飞舞的手。有一天晚上,只有你和你的领导在加班。你的问题困在心里很久了,于是你问道,“老大,为什么我的任务跟别人的不太一样了?” 老大说,“那当然了,你是当作未来的技术主管来培养的。”突然的幸福让你不知所措,不过你克制地问道,“技术主管都是干什么的?” 老大并没有回答你,而是说,“以后你就知道了”。生活还在继续。跟你同一天入职的晓明是一个勤奋而又活泼开朗的人,但是你觉得他似乎入错了行。他总是挣扎着思考为什么他的代码中有逻辑错误。对你来说再简单直接不过的一段代码,他也很难读懂。领导也发现了这一点,所以安排他渐渐地向配置管理(CM)方向发展了。不过他似乎对这个很擅长,无论多么繁琐的任务,他总能按部就班的完成,各种纷杂的脚本他也一一了熟于胸,重要的是,他很有耐心,无论服务器出了什么奇葩问题,他都会跟它死磕到底。大家都很喜欢他,也很信赖他。有一天,晓明像往常一样抓住你向你请教问题。是个bug。你已经习惯了从代码检视开始。你自信地叫他给你看代码。然而你并没有发现什么问题。于是你问什么现象。他说部署到服务器上就报错了。你看了一下日志。你没想通。于是你再仔细重新检查了一下是否各个环节都作对了。是的,没有什么问题。好吧,你知道你遇到棘手的问题了。不过谁知道下一秒会不会就解决了呢?进公司这么久,各种奇葩问题对你来说早已是司空见惯。你打开搜索引擎,开始试图寻找相似的问题。你不断的做出假设,然后通过证据否定它们,然后再作出新假设……直到你突破了你的理智,你觉得可能是编译器出了问题。真的假的?你从来没有想过编译器会出问题,就好像你从来没有想过你的肝脏有一天会报错一样。你觉得应该是自己错了,于是你仔细排查了一下其他的可能性,不,没有别的问题。于是你把服务器上编译过的字节码通过反编译工具打开,你发现了一件微妙的事情。于是你跟随着这个线索继续上网查找原因。终于,你发现是兼容性的问题。你发现了新大陆。问题虽然复杂,但是你只需要简单调整一下代码就可以绕过这一问题,于是你三下五除二把代码改好了,测试,嗯,哈哈,果然没有问题。晓明在旁边看得发愣,问你,“咋回事啊?” 你心里有一丝淡淡的骄傲,你兴奋地把他拉过来看你搜到的网页,你把代码反编译之后跟源代码对比,你给他讲依赖加载的实现……你兴奋得讲了一大堆,他静静地听完之后,眨了眨眼,说,“大神啊!”艹,他根本没听懂。你一下子泄了气。你也没什么可说的了,但也不知道该如何接茬,就谦虚道“没有没有,我不是大神”。虽然如此,他依然天天跟着你“大神”“大神”得叫你,虽然你知道他很菜,但是当个伪“大神”也不错。你有点沾沾自喜,想说给你的同学听,又觉得太 low。要不发个状态“我不做大神好多年”?想想太蠢,只好作罢。直到你发现还有好多人也被他称为“大神”。失落?有一点。你都习惯这种失落了。自从意气风发地毕业之后,你再也没有那种强烈的胜利的感觉。你觉得生活似乎并不是你之前那样的一元化。大家都有各自完全不同的特长、兴趣、知识和经验,你也有你的,你并不是万能的。即使在上学的时候你从来都是班级里的佼佼者,但是你渐渐的发现世界还很大,你不会的还很多,山外有山,人外有人,路漫漫其修远兮,吾将上下而求索……想到这,你的思绪突然中断了。你觉得自己实在是太优秀了,还懂得反思。你又开始了沾沾自喜,心想,自己如此优秀的人,总有一天会干出一番大事。于是你收拾收拾心情,继续工作。最近项目没有那么紧张了,你渐渐的多出了不少时间。你领导也是。所以他又推荐给你了几本书叫你看,都是一些设计的书,什么《领域驱动设计》、《企业应用架构模式》、《修改代码的艺术》等等。你想起了刚来的时候他叫你读的《重构》,《设计模式》等书,你还记得刚翻开它们时的那种醍醐灌顶、豁然开朗的感觉。你微微一笑,说“好”。这些书写的真好,你感叹道。读着它们,你总是不自禁地想起你们的代码。你非常能理解书里描述的现象,你觉得你们的代码有着同样的问题。可是当书里介绍解决方案时,你却发现理解它们很困难。书里面的问题域跟你们的不太一样,你们有着不一样的需求和架构。书里说对于数据库的操作要做这样的一层封装,可是你们除了数据库还有web service;书里说对于UI和业务逻辑要做这样的隔离,可是你们的UI并没有直接调用后台,也是通过web service;书里面提到了好多技巧,你们并不需要……你看得很无聊,渐渐的失去了耐心。简单翻完了书的后半部分,你觉得你差不多明白书里面说的方法了。一种乾坤大挪移练到第七层的感觉油然而生,你非常急切地想找点东西试试功力。你踌躇满志地对你领导说,“我想对我们的代码 进 行 重 构 。”出乎你意料的是,你领导一点都没有惊讶,而是笑眯眯的问你,“呦,好啊,你打算怎么搞啊?” 你没有想过这个问题,愣了一下,说,“就按照领域驱动设计的方法改啊,构造一个充血领域模型。” 领导继续笑眯眯,“好啊,那你打算怎么实施呢?”怎么实施?什么叫怎么实施?改代码就是改代码咯,还怎么实施?你摆出了一个困惑的表情。领导笑的更开心了,“你还记得《重构》里说过的,重构代码要保证单元测试全通过吗?但是现在你要重新设计,单元测试肯定都没用了,要重新改。你来看这个。” 他掏出一本书,指着某一章的标题说,“如果要对代码进行大型重构,只好退而求其次,使用高覆盖率的自动化测试来确保大部分功能的正确性。但是只是这样是远远不够的,我们还得保证原有功能没有被破坏,所以你还可以这样这样……”你听的如痴如醉,如沐甘霖。你想起在学校里,如果你对代码不爽,你可以干脆删掉重写。你甚至都不需要一个版本控制工具。你从来没有想过在真正的工程中有这么多复杂的问题以及这么多聪明的前辈们发明了各种系统化的方法。你再一次发现了新大陆。讨论之后的结论是,你负责监督并提高自动化测试的覆盖率,同时你可以先构造新的模型代码,也可以提交,但是在发布时并不把它们包含进去。当新的代码写好之后先内部测试,确保几乎没有问题了,再策略性的发布出去。说干就干,你很兴奋。“终于可以写代码了!”你开心的对领导说。领导又笑了,“写代码并不是重点,重点是让它们正确的执行起来。” 你若有所思的点点头,心却早已飞到了你的新设计上。你打开了看过改过无数遍的最核心的业务代码,心里想象着它们被你改好之后的样子,完美的领域模型、高内聚低耦合的类、优雅的代码、完备的注释、再加上同事们佩服的眼神……你觉得你快要像樱木花道一样笑出声来了。但是细节之处有乾坤。你发现你第一行就不知道怎么改。是日志。你想了半天,没有想到任何现成的解决方案。你问自己,日志算不算业务逻辑呢?算吧,它又对框架有很多依赖;不算吧,那把它放哪呢?你对着日志的代码看了整整一个下午,仍然毫无头绪。你觉得日志简直是破坏你优雅代码的杀手,你真恨不得把它们给删了……算了,先不想了。你决定今天给自己放一天假,早早回家看个电影然后睡觉。刚推开门,哇!外面下雪了。漫天的雪花翩翩飞舞,一扫平日晚上萧条的景象。昏黄的路灯照射下,雪花反射出暖暖的光。你想起了你在北国的家乡。北方的小伙伴们都说江南的湿冷让人难以忍受,“屋里跟屋外一样冷”。你在此时此刻却有了另外的感悟,你觉得说成”屋外跟屋里一样暖和”也说得通。也许生活就是这样吧,你想到,并不总是得意,也并不总是失望。你的期待总是狡猾得伪装成另外的样子悄悄的进入到你的生活中,而你的得意又总是在指缝中流走,想握也握不住。但是不管怎么样,你觉得你很快乐,也很幸福。你很庆幸自己成为了程序员。你对现在的自己感觉到骄傲。意识到你已经在门口发呆了很久,你笑了,笑自己什么时候变的这么多愁善感。你走出门去,踩在雪上,发出咯吱咯吱的声音……&全文完&&程序员的故事还没有完&/** 后记真的没有想到大家对这篇小文章(我都不知道能不能称为文章)这么喜欢,我本意只是想通过一些真实的细节来描述工作和学校的不同的,谁知道写着写着就成故事了:-D其实后面还有更多有意思的故事,不过已经扯得太远了,想听的话带上好酒来找我吧!至于你们所关心的老李,他是真的,但是他并不是扫地僧,他是前端大神,后来他把我们前端的js代码完全重写了一遍,他三十多岁,头发浓密,有一个可爱的小女儿,说话不多,但是喜欢讲内涵段子。故事经过了加工,亦真亦假,人物也不是完全还原,但是看到你们留言说很真实,我非常开心!最后,作为一个工科男,我决定总结一下:工作之后的代码量远没有学校时大作业那么多,但是要更严谨;但是你要面对很多遗留代码,你要把它们弄懂,不像在学校里你基本都是从头造轮子;同事们都是八仙过海,各有所长,无论你在学校里是当大腿还是抱大腿,在公司大家都对公司有着这样那样的贡献;你不可能什么都会,工作才是学习的开始,大学生活只是让你准备好;除了代码和技术,你还要考虑业务知识、测试、质量、生产效率和可持续性;机会总是有的,你要做的只是准备好;学校所学的非常有用,但是理论和实践有着巨大的鸿沟,这全靠你的经验和工程感 (engineering judgment);我暂时只能想到这么多,更多的就靠大家自己发掘啦。最后祝喜欢编程的大家都成为架构师! */
/* 亲爱的维护者: 如果你尝试了对这段程序进行‘优化’, 并认识到这种企图是大错特错,请增加 下面这个计数器的个数,用来对后来人进行警告: 浪费在这里的总时间 = 40h */潜水这么久,怒送一血,已然破百,答题之路才刚刚开始。谢谢大家答案非原创,纯属娱乐
刚开始工作的时候,还是个愣头青。那个时候最优秀的品质就是 速度。一天三千行代码啊………简直文思如尿崩。然后 一周之后 自己写的什么 回看起来就困难。好像是 乱扯的毛线团,虽然能用看着心烦。bug时不时的出来 撩拨你的神经。大概过了两三年 经过几个项目之后,每天有个三百行 真是了不起了!不同是 写的少,错的少。功效倒是差不多。写的少 想的多了。代码结构从 过程化 到 对象化 到函数化了。建模从 点线面到立体 到 流,从描绘系统 变成了 描绘 用户体验流。基本上经历了一个过程比较语言哪个好,系统哪个好到方法哪个好,思路哪个好到代码范式,规范,美观,编程技巧再到怎么样 最短时间 最低成本达到可用性要求,快速推进项目,不废话 不啰嗦。到最后其实都是工具而已,脱离了情景环境单论好坏都是耍无赖。代码外围的工作做的越来越多了,颈椎间盘突出越来越严重了。稍有不注意休息 就会有肢端麻痹和疼痛。工作后很难和小伙伴打一局dota了,学校里 很难有认真严肃的项目。诸位 注意保护颈椎,坐卧行 都是关键。
作为一个计算机相关专业毕业,毕业后一直从事编程相关工作10年多的大叔就这点上可以谈一些看法。我在面试很多计算机本科甚至硕士毕业生时,他们很难向你展现实际的项目经验和工作能力,因此你只能考验他们对某门编程语言的熟悉程度,也就只能是语法和算法。因此也不可避免的让他们做些算法题。说实话,我觉得这种方式很傻,有谁会在纸上写程序呢?但你会有更好的选拨方法吗?不夸张的说,一切学校学习的目的是为了通过考试。因此在学校学习编程无非是通过期末的考试。考试是在卷子上写程序,还是在机器上写程序并不重要,因为无论哪种考核方式,都和你将来是否成为一个合格的程序员没有什么卵关系,它仅仅就是纯粹的考试。但是,我想说编程的能力不在于你对这门计算机语言语法背诵以及几个算法的记忆。在实际工作中,更多在于你怎么组织你的代码。 语法是可以百度的,算法前人早已经给你写好了,你只需要知道怎么调用。但是新手和老手写出的程序是立马能闻出来的。有些人面试的时候很厉害,但到后面,你会发现他/她并不适合也不想成为一个程序员。因为真正的编程工作是如何理清一大堆代码,而不是在几个烧脑的算法上玩智力游戏。如果你刚入行接手的是一堆糟糕的代码,那么我只能遗憾的告诉你,你的程序员生涯有了一个糟糕的开始。第一次糟糕的体验会是影响一生的。所以我希望你一开始接手到的是一堆高人留下的代码,这对你的发展以及培养你对编程兴趣是起到至关重要的作用的。当然,如果你天赋好,你最好有能力选择好的代码堆,或者自立门户。毕竟自己挖坑总比填别人的坑要来得爽。我这里有点小小的人森经验要分享,就是你看一个人适不适合编程,就得看他是不是喜欢把事物整理得井井有条。在学校里你看他的床铺,看他的写字台,看他组织集体活动的能力,等等。不要以为程序猿都是胡子拉碴,脏里八稀的,那些都是电影小说杜撰的。就算有时候会出现这种情况,那也是为了短期的冲刺工作。程序猿就是艺术家,虽然很多人不这么看,就连很多程序员自己也并不这么认为。但实际上,程序员就是艺术家。语法和算法,还有程序组织能力,那些都只是基本功,就像画家的画功,都不需要提。厉害的程序员是要有对现实世界抽象的能力,是要用系统性的思维去理解世界,并有可能模仿上帝去创造自己世界的人。因此,你会看到许多高阶程序员写的书和文章都像哲学家写的一样。看一段糟糕的代码就如同你走进一间脏乱的房间,你会闻到不好的味道,你会看到东西被放在不该放的位置上。新手写的代码就如同一间不知道整理的小孩的房间:被子团在床上,玩具乱扔,墙上乱画.....你暂时是不会指望他能把整个家都收拾好的。因此,很多情况下我带新人更多的是会告诉他们代码应该写在哪里,而不是i++和++i的区别。实际的编程工作中,你做的事情往往是一个大系统中的一个组件。完成一个大系统的开发工作是一个团队的事情,因此你必须学会如何团队开发。而这点上和学校学习的编程是有本质区别的。学校的编程课教授的东西是点状的,它教你如何写出可以编译过去的一小段代码,它教你一些经典算法,但都没什么实际卵用。举个例子,比如排序算法,教科书上一大堆。有些同学硬是能将各种排序算法默写出来。然而他们永远不会想到关系型数据库是如何实现排序的,因此我一问他们如果内存装不下所有数据的情况下,怎么排序,就个个傻眼了。因为他们只知道在内存中排序数据,不知道多了硬盘后怎么处理;他们只知道冯.诺依曼这个名字,并不理解它在计算机架构中的本质。这些点状的知识点对于一个不接触实际的学生来说是很难串起来的。团队开发是个很搞的课题,涉及组织理论。虽然很多人都能意识到这样一个事实:人多未必能办好事。但真正联系到实际,就是如何发挥一个团队的最高组织效率时,往往对自己的认识是估计不足的。很多想当然的事情是行不通的。编程工作是纯粹的脑力劳动,是很难量化的劳动。咨询公司乐此不疲的发明各种指标(如:代码行数)和各种团队编程模式(如:SCRUM),但也是基本没什么卵用的。永远记住程序员是艺术家,不要试图用管理指标来衡量艺术家的工作,这只能靠尽可能发挥程序员的主观能动性来提高效率和质量。最近,考古学家发现,埃及金字塔不可能是由奴隶建造的,而是由拥有绝对信仰的大量工匠完成的。每个工匠切割每块石头的时候,都倾注了他的心血和虔诚,这并不需要由监工去督促。这些由不同工匠独立完成的石头最终能拼接成如此巨大完美的五面体,是人类工程史上的奇迹。真实程序员所做的大抵就是类似的事情。
真实的工作中,一个合格的程序员并不是把所有时间都用来写代码。而是在脑袋里、电脑上,通过各种方式先把程序的结构、逻辑等等先想明白了,才开始动手写。一个好的程序员不是产出代码量多,而是产出代码质量高。牛逼的程序员一天写十行代码,可能比我一个礼拜写1000行代码还有用。
我本科的专业是软件工程,大一的C++基础课学的还不错,后面数据结构与算法也学得挺认真的,数据库结构学的时候搞不清那么多范式有什么用,UML直接睡过去了,软件生命周期搞不懂是怎么回事,测试这门课老师都没怎么好好讲。所以上面几门课直到毕业也没觉得有什么用,感觉C++的基础好,数据结构和算法好,就是编程好了。到了工作中,才发现原来还有【需求】这种东西,不是课程作业那种胡搞瞎搞,差不多就行的了。而且做出来的程序不能只是自己演示正常就可以,要经受的住用户的各种胡搞瞎搞,被各种奇怪操作导致的BUG打回来,才知道什么叫程序的健壮性。接手了一份胡搞瞎搞的数据库之后,才知道范式说的是什么,师傅说我司数据库每天要备份六次,我问为什么不多备份几次,他说,因为每次备份需要四个小时...后来做了很多外包项目,才知道需求管理,或者说讨价还价其实也是个重要的编程技能。不是每个程序员都可以干干净净的只搞技术研究,做一个科学家。程序员应该是个工程师,工程师的话就要以实现为目标,很多时候,算法效率不是最重要的,有时候为了工程上的需要,还要牺牲程序效率换取工作流程上的效率或者框架的可维护性。以前上学写的代码就像是高中物理中飞天遁地光滑无阻力无摩擦的小滑块,没有需求变更,没有雷劈机房,没有瞬发流量,没有兼容版本,没有很多奇怪的东西,完全是在理想状态下写代码。
第一名答案给的是一个在学校里屌屌的学生,进去一家传统公司,然后看不上一切别人垃圾代码的视角。我带来一个,毕业眼界也挺高,觉得自己技术不错,然后面试被真正的大牛虐成狗,然后还跪舔进入公司继续被虐的,游戏公司,第一视角。给我一份爱,还你一夜情。第一视角,现在开始。10年进入大学,无限憧憬大学,然后就傻逼了整个大一上学期,大一下学期买了电脑接触了dota,两年刀塔路,步步皆辛苦。大三下学期开始意识到,毕业总得赚钱吃饭,现在的节奏感觉会要饭,然后就开始敲代码。一开始无任何头绪,找到某培训机构视频开始看,我学java,据说ssh搞完,出去就有6k以上,我无耻的硬了。不对,我傻傻的信了。现在想想,多单纯啊,6k就感觉吊炸天了。大四下学期,独自一人去了广州,学校同学还在学校里接受培训机构培训。我觉得教的都会了。就先出来了。号,到了广州。投了一圈,没反应。感觉人生挫败了。这时候,有时候不得不说可怜之人偶尔也有运气好的时候。在qq上碰到一个公司发招聘,我完全不抱希望的尝试下,居然给了面试机会。当天去面试信心满满,然而并没有什么卵用。老大直接从基础问到虚拟机,计算机原理,编译原理。当场直接跪了,我现在都还有心理阴影。整整差不多一个小时,我感觉像是一个世纪。印象比较深,老大问编译原理,我说我们没有开编译原理的课,事实是真的没有。老大原话,“你们他妈没有编译原理也敢叫软件工程专业!”,我完全无法接下去。最后老大问,你坚持最久的一件事是什么?大三一直都在跑步,我说,跑步,跑了一年多。老大说,那你感谢你的跑步吧。就这样我留了下来。得到了全公司最低的月薪,别问我怎么知道的,不可能有人比我更低就是了。忘说了,老大长发,那种中长发,飘逸的那种,第一眼真心就觉得大牛。至今无法忘记见老大的第一眼。好了,不能再说了,再说会有gay的即视感。留下来后,下周二入职,周一我去看了牙齿,做根管治疗。大学里面完全不知道游戏怎么做,游戏服务端是怎么做。一丝一毫的概念都没有。第一天几乎没啥事做,我自己配了下环境,上网看了看游戏相关的东西。还是完全都不了解游戏到底怎么做。我的座位靠着一个项目组老员工,我就看他和别人一句话过来一句话过去,然后看看代码什么的,后来才知道这叫连调。第二天,旁边的老员工问我是新来的么,然后让我去找xxx要学习视频,然后拿两本书,一本Java并发编程实战(JCP),一本Effective Java。然后就开始看视频,看书,看视频,看书。视频也是一个培训机构录的视频,后来才知道,那是我老大几年前在一个培训机构讲课录的。大概看了一周多视频,终于有了个小任务,写一个拉日志的小程序。暂时就叫那个老员工鸟哥吧,大家都那么叫,一直我也不知道为什么。鸟哥讲了需求,给了点思路。我第一次知道延迟队列,第一次知道Executor线程池,然后就自己去搜,搜了然后去用,然后去写,写完去找鸟哥,鸟哥直接在我电脑上看代码,分分钟把问题找出来,看了多少篇文章,都不如鸟哥直接指出来,来的印象深刻。写完之后大概有看了一周的书,等到了第二个入职的新人,终于有了个伴。然而后来我问了,人家工资都比我高。我就说我全公司最低啦。第二个人进来后,我和他两人开始做第一个测试项目。SVN管理系统。在这之前,我对SVN真心都不太熟,只是知道这东西。第一个版本,鸟哥说写个命令行版本的,就直接在命令行能交互就行,我当时虽然被虐的很惨,但还是比较有信心的。毕竟当时我看培训视频,还写过一个OA的项目,当时我觉得OA就很牛逼了。没办法,眼界太低。开始做了才知道,这东西真心没那么简单,SVN写过代码的都知道,版本控制,有库什么的,原生版本好像是没有权限的,然后我们就是要在外面加一层控制,并把权限管理加进去,用一个RBAC模型,总之全都没听过,总之做的艰难前行。忘了说,当时面试进来,HR的老大就强调过,说他们公司对新人的淘汰率很高,每做一个小项目,都会有代码review,会有几个老大一起看,如果说不过,给次机会回去改,改了还不能过,直接辞退走人。童话里真的都是骗人的,我之前从来没有过这样的心理准备。你们有待过这样的公司么,真的是直接走人,真真的!后来看到有人review完,会议室里出来,就收拾东西去办离职了。你们感受下。在高压下前行,完成了第一个版本。第一次review,我不知道女孩子第一次是啥感觉,反正我进会议室内心是期待而又忐忑的。过去从来没有人这么正式的看过我的代码,一行一行的看。真的是一行一行的看!功能是最基础的,但是鸟哥真的不怎么在乎那些功能,他觉得那是必然要做到的。功能验证演示也就几分钟的事,功能看完就是看代码。在会议室,用个笔记本,远程桌面连接到自己的电脑上,然后直接投影到会议里,直接在eclipse里面看,从入口开始,一个一个方法,一行一行代码,那天整个人内心真的是被骂崩溃的。对的,就是被骂崩溃的。看到别人进入公司都会碰到一个和蔼的老李,我这边真没有老李,只有严厉的不能再严厉的鸟哥。代码中各种错误被鸟哥一处一处指出,包括各种编码规范错误,并发控制考虑,该抽出可配置文件的地方抽出配置文件去配,不能硬编码在代码中。印象很深的是不处理异常,直接就打印出来了。“你他妈打印出来给谁看,以后都是跑在服务器上的,以后不要让我看到syso在代码中出现”,然后还特意全局搜了下syso这句打印代码的数量,然后鸟哥一头黑线,因为我所有有异常的地方都是打印出来。当时加上设计错误,代码错误,反正记起来得有十几条,我写在笔记本上的,笔记本现在依然躺在我电脑边上。我是个恋旧的人。经过第一次review,我和另外一个哥们总算是感受到什么叫代码review了。那哥们比我早一届,已经毕业,之前在一家公司做过,我问他这咋办,真的是被喷成狗了。他说实在不行就辞职了。我没说话。/** 2点更新**/经过第一次review,回去改第二版,基本知道了问题有哪些,虽然被打击的非常惨,但是还是有信心可以把这些代码改好的。当时其中一个主要大的问题,就是在做多任务处理时,对多线程的处理,以及多线程异常的处理。当时鸟哥说,上传功能有可能当时是因为网速或者其他因素没上传成功,但是可能稍微多尝试几次就能成功,所以出错后要加尝试处理。当时我是真的没经验,我就觉得尝试嘛,得嘞,那捕获到异常,我就循环,while(true)一直就尝试上传操作,直到上传成功才跳出这段代码。所以当我上次看到那个图,一个哥们写代码,失败之后再强制去试100次的代码的时候,我真的是笑尿的,因为我比他更屌,我是试无限次。当然最后这里也是被鸟哥喷的狗血淋头,鸟哥说,你真牛逼。你这是在代码里面写了个死循环啊。我真的当时脸都绿了,因为我知道在服务器代码上写个死循环是什么后果,真的是一背都是汗。哦,插一段,当时第一次还是第二次review的时候,鸟哥看完代码之后,发现太多问题,实在没法看下去了,说,“你们的代码真的让我感觉到恶心。”。不知道你们review的时候,听到这么一句是什么感觉,反正我是一辈子忘不掉了,和我同期那个同事也是,至今一起吃饭每次都会回忆这句。当时经过了,几次改版,从基本命令行,到后来用bootstrap做个web版本,前前后后鬼门关走了得有7,8次,特别是当时做web版本,鸟哥要求使用restful风格,又是一个新名词,restful,好好休息么?我承认我当时真的是渣1的战力。不过鸟哥讲解东西真的是一绝,就三两下,真的可以把restful是个什么东西让你有个清晰的了解。restful当时还好说,springmvc本来就支持restful,真正让我差点挂掉的是js。JS我真的是学了一万年都没学好的一个东西,当时我和那个同事两人还是有点美术追求的,不想就写个特别简陋的界面出来,感觉至少也得让人能下的去眼吧,虽然鸟哥当时没有要求这个。后来我们两就想用bootstrap,一直都挺火的一个前端框架,但是也是完全没接触过,然后我还是9流的js程序,功能没花我太多时间,反而是界面真的是让我整个人都疯了。很难整体上做出一个比较好的效果出来。最后听说公司后台用的就是bootstrap,我们两就拿了公司的后台模板直接来改,但是中途发现公司有自己封装一层js,我的一个侧边栏点击,右边显示的效果死都出不来,但是这还是最重要的一个效果。搞得心好累,就是不出来。关键时刻,那个周末,我那个和我相依为命的同事,还去澳门玩了。我内心的怨念,你们可以感受下。因为他已经调出来了。没办法,我只能等他澳门回来,星期天晚上,12点多,我们语音,他跟我一起帮我调我的那个问题,最终解决。想想,那一段日子,没有他一起,还真的是很难坚持下来啊。相依为命的日子,一起深夜打车,冬天跑KFC买甜筒,一起感慨不知道哪次review完就要收拾东西走人。历历在目。===更了一段。待续。大家来点赞。要不好多人看不到。被压在下面。
最大的不同就是,学校里写的代码都是用完就扔,所以完全不管可维护性(这不是个好习惯)。公司里写出来的代码大部分情况就要你一直维护它到离职了,写的时候就不可能不管可维护性了。至于代码量,我在学校的时候经常一天上千行C艹,公司里我一天也就300行C艹左右。
刚工作了三个月,简单谈一下我的感受。先说重点:最大的不同是质量。质量是个很广的概念,涵盖方方面面。1、规范性在学校写的代码,除了你自己可能没有第二个人看,可以不写注释,命名随意起,int i、int a;在公司,代码需要遵循一套严格的规范,这样做利人利己。每行代码需要经过至少一次其他人的Code Review,我在学校自认为代码比较规范,结果到这里经常被师傅提很多Tala(修改建议)。2、测试在学校,代码写完运行起来跑一下、随便点一下就行了;在公司,相比较开发的时间,写单元测试和接口测试的时间只多不少,一行代码需要好几行代码、好几个用例来测试。我认为没有经过测试的代码等于没写。3、性能(并发)在学校,写的代码充其量只是个小玩具,用户量一只手数得清,甚至再变成玩具之前就已经夭折了;在公司,每一行代码要面对的用户上千万、甚至上亿,性能以及随之带来的并发问题不得不考虑。这就好比在公园盖一个厕所,装修华丽,环境很好,但是坑位只有五个,结果节假日几百号人同时上厕所,那场面自行脑补。4、严谨在学校写的代码,出错了最多被老师批一顿,改一下就完事了;在公司,尤其是我所在的支付宝,一行代码出错可能会带来几十万、几百万甚至更严重的资金损失,这种坑把我卖了都填不上。借用一位前辈的话:对你的每一行代码保持一颗敬畏之心。最后回答题主另外一个问题:每天啪啪啪手敲成千上万行代码——我还没听说过每天啪啪啪就能敲成千上万行代码的人,不啪啪啪也敲不了这么多。暂时想到的就这么多,后续有机会再补充。
复杂度不同,(通常)学校编程的复杂度就像匀速直线运动或者加速直线运动,背后是有“公式”可套的,这是教学的目的;实际项目的复杂度基本都是变速非直线运动,混沌理论是最好的解释,无穷无尽的不确定性。关注点不同,(通常)学校编程比较注重解决方案的最优解,会特别强调封闭领域内的算法最优化;实际项目的代码99.9%是业务,接口,架构,错误处理,会特别强调一个实现的性价比,短期是否可发布,长期是否可维护性,除了少数领域,基本不需要特别关注算法;所以学校编程像研究核子裂变,实际项目是用钢筋水泥建设核电厂,时刻都是成本核算(时间,金钱)。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 为什么孩子不爱上学 的文章

 

随机推荐