1. 程序员面试过程中,面试官想要从"自我介绍"获得什么信息
工作10余年,经历过很多次面试,也面试了N多人。这些年来,已经有好些位朋友(或同事)与我聊起相关话题,涉及面试,更关乎职业生涯规划。感触颇多,就借助自媒体的浪潮,与更多的程序员一起共谈面试经历,希望可以让程序员的面试过程变得更舒适。
万事开头难。头脑中的万千个思路,在笔尖流淌,可就是不愿意走到纸上。既然主题是技术面试,那就从面试过程中最简单的最直接的第一个问题,“自我介绍”开始讲述。
本人自我介绍:非典型程序员,从事研发工作10余年,受互联网产品热潮的影响,现自认为可以兼任半瓶水晃荡的产品经理。
"我是面试官"介绍:从产品设计角度解读面试过程,尝试分析面试各个环节背后的动机和原因,从而,让程序员在面试过程可以更好地展示自己,也希望与各位面试官共勉,以改善现有的面试体验。
面试"官":Interviewer,此官非彼"官",而是职责-进行面试者,这里基本特指面谈专业技能环节的面试官,具有选择未来同事的权利。
对面试官的建议:面试前仔细阅读候选人简历,有精力的话可以针对具体简历内容准备相关面试话题。对于一个面试前没有详看简历的面试官而言,候选人在自我介绍的这段时间,面试官就会去详读简历,而这可能会降低候选人的积极性,也会给候选人留下不好的印象。
面试前,面试官可能会虚寒温暖,以缓解候选人的紧张情绪。那么当面试官让你做自我介绍时,就正式进入面试主题了。自我介绍,不会对面试起决定作用,但会影响面试官对候选人的第一印象,甚或部分影响后继面试官的话题选择。那么,针对这个问题,面试官心里究竟想要知道什么呢?
1.你是谁
虽然你的姓名年龄都在简历中,但通过你的声音、肢体语言,又或是你的姓名由来,背景故事,都可以决定你的第一印象是否深刻。
2.你会什么
面试官首先感知的是你的语言组织水平和逻辑总结能力。
其次,面试官想知道,你的知识面如何,是否对技术有浓厚兴趣,特别关注的是你的特长是什么。
3.为什么是你
当提到你的专业技能与特长时,面试官最感兴趣的是,你的知识面与当前岗位的技能要求的匹配度;如果有类似的业务经验时,面试官会更高兴,因为你可以快速熟悉当前岗位。 那么主动提及职业规划呢,一方面,一个对未来有追求的程序员,通常也会把当前岗位的事情努力做好。另一方面,方便面试官去判断当前岗位与候选人的职业规划的匹配度。
候选人做完自我介绍之后,面试官如果没有获得相关问题答案的,会在后面的谈话过程中作为问题单独提出。而如果已经获得一个简要答案的话,那么这个答案就是追问的基础,他可能就会有针对性的深入探讨相关话题。
还有程序员需要了解的一点:不同的岗位,不同的公司,面对不同的招聘需求,面试官的侧重点是不一样的。但只要可以全面地介绍自己,就迈出了成功的第一步。
2. 科班出身和非科班出身的程序员差距在哪
1.有内存概念,科班的人编程一般都知道自己在什么时候需要跟内存打交道,什么时候不需要,而非科班的人,大部分都是功能导向的,很多人不理解内存在计算机科学里面的重要地位,像python这样的语言,你其实大部分时候看不到内存,跟你打交道的是list呀,map呀这些数据结构,你在写code的时候一般都不会考虑他的内存情况。
2.不会被局限到框架中,大部分培训班出来的人,都是学了一门语言加框架,所以他一般就是背的这些东西,但是不理解,比如典型的web框架,尤其以前jsp时代,好多非科班的人,捧着一本厚厚的jsp书跟查字典一样学这个东西,非科班的人容易被某个框架局限住。而科班的人一上来就知道所谓框架不过是人家写好的code,你理解他在做什么就可以了。
3.对操作系统的理解,这一点上很容易看出科班跟非科班的差距,大部分非科班的人看到的都是程序呀,语言这一层面的,但是科班的人,如果操作系统学的不错的,他关注的其实是对机器的抽象,他知道我们要run一个程序,需要这么一些东西,包括进程怎么管,内存怎么管,io怎么管,网络怎么管,这样对于编程来说,你其实拿到的是什么,是一个进程管理器的句柄,一个内存管理器的句柄,一个io管理器的句柄,一个网络管理器的句柄,有这几个功能句柄,你就可以操作这个机器了。
4.再进一层是缓存,这个可能需要有工程经验的科班人士才会有的意识,实际上计算机体系结构,只有一个东西就是缓存,跟上层应用相关的cache最典型的就是python里面的迭代器。弄明白这个,很多架构上的事情你才会明白,比如数据库有一个cache,搜索引擎有cache,你做的所有的优化,基本上都是跟cache相关的。
5.抽象的意识,这个也需要写过很多实践的code才能明白,跟科班可能关系不是很大,跟悟性有关,有的人很笨,无论是不是科班,他就是悟不到这一块,有的人很聪明,无论是不是科班,只要他写过一些code,你点拨他一下,他自然而然就知道什么时候该做什么样子的抽象。
3. 为什么会有女孩喜欢程序员
Bi Bo,养猿一只
养猿五年,是只非典型性程序猿,其特征为‘ 钱不多,话不少’,智商情商都高,简直是个话唠。明明我家里没有森林,却养了一只程序猿。我的养猿经历如下:
家有程序猿第一年:
听他用极大热情和最生动易懂的语言讲程序是什么,各种语言是什么,算法是什么,etc.
家有程序猿第二年:
早已习惯了异地恋网上聊天时这样的对话:
“干嘛呢,亲爱的?”“写程序啊”
“怎么不说话嘛,亲爱的?”“哎呀,写程序呢”
“好啦,我要睡觉了~” “恩啊,我写完这个就睡。。”
家有程序猿第三年:
好朋友的女友说,“写代码,就知道写代码!我重要还是代码重要?” 我淡淡一笑,心说,“唉,要有自知之明啊姑娘,这种问题根本不用问就知道答案的。。”
家有程序猿第四年:
他来加州看我,结果变成我安排了满满一周的湾区硅谷互联网公司行。我们最快乐的时光就是冲去各种electronics
stores抱回遥控飞机、赛车、投影仪,回家试验它们的性能,在校园的大草坪上比赛。
家有程序猿第五年:
多年来被某人指手画脚着更换了所有的电子产品,慢慢地变成了各种电子产品的死粉,电影只想看1080p,琢磨着怎么带着google
glass去朝鲜,一个人在机场的时候喜欢对比各种品牌的耳机和Brookstone的各种遥控飞机....
碰上Geek电子产品精神洁癖处女男的结果就是...家里所有的旧电子设备(手机、笔记本、耳机种种)全部要保存在原装盒里规规整整地摆在柜子里.....
我不是程序媛,我知道这些年他也在默默地遗憾。认识第一年捧起他的编程教材的时候,我就发现CS并非我的真爱,但我还是愿意多了解科技新闻和新产品,多去结识互联网行业的小伙伴,偶尔试着学写点小东西以图在快乐中了解些“编程之美”。
慢慢地,我开始享受坐在男友旁边看他和朋友聊各种技术问题。有次,一同聚餐的女友问,“哎呀,这么无聊的对话你怎么听得下去?”
我偷笑,其实这是特别好的学习机会,而且觉得畅谈中的男朋友特别有魅力。(捂脸走了~~)
魔女刘,男票是程序员
我们公司是做化妆品代理的,所以会有很多护肤品、香水、彩妆之类的东西,无意中看中了一款Burberry的香水,就拿下了,然后给他发了个QQ消息,内容如下:
但是后来慢慢相处,他让我发现程序员、理科生不是想象中的模样,至少他不是,他有太多太多优点,多到让我可以忽略他是个胖子。
他很爱干净,爱上他就是因为他身上特殊的香味,让人依恋、沉醉,即使炎热的夏天,也不见他身上有什么难闻的气味;
他上进,只要有空,就会钻研技术方面的知识、整理读书笔记。我知道会有人抱怨程序员男朋友经常加班,我也会抱怨,每次问他几点睡觉,他总说快了快了,结果半夜一两点了身边还是空的,但当初不正是他的认真他的负责吸引了我们吗?
他没事总叨叨技术上的专有名词,搞得我现在对很多词都不陌生,他的愿望是教会我写代码,真可怕......
他每天都很忙,但只要我需要他,他总会第一时间出现;
他温柔体贴,每次在外面遇到好吃的他总会带一点回来;我胆子小,他担心我在家害怕能回来早点就回来早点;我的手不能沾洗洁精,他包揽了家里洗碗的家务;我脾气大,他不跟我吵架,总是很耐心的哄我......
他厨艺好,只要想吃的菜,照着菜谱他都能做好。
他不仅了解理科知识,连天文地理历史也比我这个文科生强,甚至连《圣经》也读过几遍,哲学也略懂,总之,每次提到他简直各种骄傲,真不知道自己从哪里挖出来的宝;
在生活中,他幽默、可爱,偶尔犯二,和他在一起永远不觉得无趣。
【和大家分享一些小故事】:
1、 我:帮个忙呗。
你:说。
我:帮我把热水器里多余的热水放进水瓶里。
你:好。
十分钟后,起身去卫生间。
我:黄大爷,你热水瓶盖盖儿了吗?
你:盖了啊。
我:你大爷,盖子盖了,那瓶塞呢?
你:哦,忘了。
2、双十一我们分别在网上淘了些宝贝。
11月14日。
我:我买的东西只有一件没到货了哦。
你:我的还没发货,哭。
我:哈哈哈,人品。
你:没关系,反正都不是给自己买的。
我:靠,贱人!
3、 早起遛狗。
你:带钱了吗?
我:带了。
你:请我吃早饭吧。
我:为什么?
只见你立刻抱着我的胳膊,道:人家是你的人嘛。
我:额......买。
李大方,减肥不减脸,长肉不长胸
不知道我的回答是否切题,因为我已经嫁给程序员了。
印象最深的一件事是,有次和老公争执,老公嘴巴笨,说理又说不过我,一直挨我训。
最后他突然哭着冲我大喊:“我这么早结婚就是不想管这么多破事,我只想安安静静的码代码!!!”
。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。
我只想安安静静的码代码!!!
。。。。
安安静静的码代码
。。。。
码代码
。。。。
。。。。
我会说在那个争得面红耳赤的情况下我噗嗤一下笑了么= =
匿名用户
程序员男朋友是一种很呆萌的生物。绝对不是只会修电脑而已。
1.很多人说程序员智商高,情商低。其实不是的。只不过你恰好遇到了一个情商低的人而已。
智商高是真的。所有程序员都是很聪明的。
不和我吵架。不是因为不会吵。其实他很聪明,要是想说道理我肯定说不过他。但是他知道要让我赢了我才开心。
2.睡觉睡的很晚。哄我睡了他才会睡。好就好在每天都可以和我说晚安,我从来没问过他你睡了吗这个问题。不过白天起的也是不早。(从没听见过早安
3.从来不嘲笑我程序编的不好,每次都很耐心的说我教你编程序吧,然后我都说滚开我不要被你鄙视,然后他就笑嘻嘻的吃泡面去了。
4.很少玩游戏,虽然后来有段时间去了一家网游公司工作了一会儿,但是也很少玩。但是能编出各种好玩的东西给我看哄我开心。对于我这种程序白痴来说真的挺有用的。
5.一般我从来不问他在哪里,他的电脑在哪里他就在哪里。特别特别宅。
6.我不用担心没有地方找各种软件的下载地址,不用担心电脑各种崩盘,身边的妹子电脑有问题的时候,我一般都舍不得麻烦他,一脸骄傲的说这个是小问题嘛,不过他太忙啦没时间。
7.我的消费观被改变了,所有电子产品更新换代的时候能听他吐槽各种。各种发布会从来不睡觉,第二天话比谁都多,有时候喷完一个产品,我以为他厌恶至极了结果没多久他就买了一个回来(这尼玛是什么心理……,现在看到所有电子产品都不觉得贵了,尤其是当我知道他的机械键盘的价格,我买吃的的时候更加欢快无罪恶感了了。
8.很不喜欢陪你逛街陪你无聊是真的,时间比较少也是真的。但是在一起看电影吃好吃的你想玩什么都会陪你玩。
9.出轨概率极低。你们懂得。
10.挺喜欢看美女关注各种美女的。(如轮子。
11.人都很善良。不会多愁善感,自尊心一般都普遍偏重。
12.有个程序员男朋友很酷。感觉有个技术大牛陪在自己身边。感觉无所不能。
13.为什么总有人说很呆呢 →_→ 我觉得很逗比啊,从来都不怎么正经回复你的话,说话风格也是很幽默的。
14.他喜欢看动漫,买手办,买模型,有时候我会嘲笑他幼稚,(妈的明明感觉真的很幼稚啊!
15.不会哄人。哄人千年一句:我错了。其他的无论如何都别不出来了。(后来我就不指望了…和程序员交往都可以自我愈合能力爆表。
————————————————————
但是我们已经分手了。而且不联系了。他应该不看知乎。
但是我还是觉得有一个程序员男朋友是很酷的一件事。真的。
希望以后还能再遇到程序猿当男票。
匿名用户
位! 等我解决完这个Bug再来回答。
---------------------------------------------------
忽然发现都已经五月份了。bug早就解决了!我是机智的程序媛!
既然没事干,不如回答一下吧。
首先,程序员男朋友是个男的(我知道是废话!),他有一般男生一样的爱好。
对游戏爱得深沉是肯定的。 如果说代码是他的二老婆的话,游戏应该是他的三老婆。
很宅。 当然幸亏有我解救了他,让他偶尔感受下外面的世界。
爱萌妹子。 但我应该不是萌妹子吧 嘿嘿- -
不太会说话。
单纯善良。
赚得多? 和其他专业毕业生比起来算比较多了吧,可以包养作为学生党的我咯
下面是两个程序员的生活。
纪念日以2的次方作为整数过。
视频的话大多会请教他编程技术。我觉得技术很牛的程序员很有魅力呀。
可以帮我解决各种bug,写代码的时候很踏实呀,但也有依赖心了。
第一次送我的礼物是机械键盘。(都没有hhkb,差评)
后来又给了我一个运动手环。
本来觉得他会有很多特点可以说一说的,但其实仔细想想也没啥好说的。但和他在一起的这么多日子里有很多有趣的事情。
其实程序员男朋友也没啥特别的,但对我而言他是独一无二的。
【网络整理】
4. 咋样理解非典型程序员呢
非典型程序员,爱着代码,也爱着自己喜欢的一切。他鼓励程序员在不影响正常工作的情况下,投入时间玩转自己的副业、爱好。
5. 什么是低代码开发
低代码开发平台(Low-Code Development Platform,LCDP)是低代码开发所需的环境。大多数低代码平台都是以云上提供的aPaaS(Application Platform as a Service,应用程序平台即服务)的形式,不仅用于开发,还用于应用程序的运行,实现了软件开发到应用的一贯性支持。
所谓低代码开发,是指尽量无需编写源代码,通过使用“图形用户界面/GUI”这一可视化操作,在极短的时间内实现系统开发的手法。目前也有通过在Web浏览器上搜索所需组件,整合粘贴来制作应用程序的工具。
采用低代码开发,无需SQL记述就可以制作数据库,简化开发工序。在保证一定扩展性的同时,可以有效缩短开发工时。
低代码开发平台最初被关注的是用于移动应用的开发。与基础系统开发相比,手机app开发对速度的要求更高,而且还必须支持多设备。在传统意义上,要在短时间内推出这样的移动应用程序是非常困难的,于是,低代码开发平台进入了开发人员的视野。
在现今社会,低代码开发平台受到关注的最大理由是数字化转型(DX)。所谓数字化转型,是指通过人工智能和物联网等信息技术,将一切事物通过数字数据连接起来,从而从根本上改变企业业务模式。
目前许多企业都在致力于数字化转型,以求在高速发展的时代中生存下来。企业的IT部门为了推进数字化转型,必须更密集的进行软件开发。但是,软件开发技术人员的数量是远远不够的,仅靠IT部门根本无法满足软件开发的需求。
低代码开发平台,可以被一般的业务人员、一线工作人员、管理人员等非专业的开发人员使用,无论是否有开发基础或经验,都可以经过简单的培训进行软件开发。
缩短开发时间
低代码开发最大的优势是可以缩短开发时间,也就节约了开发成本。低代码开发平台提供了大量的通用组件,可以实现一些基础功能。必要时可以添加自己编写的代码,来满足用户的功能需求,提供质量稳定的应用程序。
无需担心安全性
低代码开发平台的供应商会提供相应的安全对策,用户无需担心程序的安全性以及开发过程中的安全风险。为了实现特殊功能,需要自己编写代码时,用户只需关注自己的编写部分的安全性即可。
降低开发门槛
在低代码开发中,无需编写复杂的源代码,就可以在专用的平台上编写程序。即使没有受过编程专业教育的人,也可以在平台上轻松地进行开发工作。在传统印象中,程序开发都是由专业的工程师来完成,使用低代码开发平台,程序开发的门槛大大降低了。
通用性组件
低代码开发平台提供了大量通用的组件,这些可供使用的组件种类多样。
此外,用户也可以利用第三方开发的组件。这样的可再利用形式的组件,支撑着在低代码开发平台的视觉建模。
视觉建模
低代码开发平台以模型驱动型开发为基础,任何人都可以通过可视化建模,轻松实现程序开发。
通过拖放可以将所需的流程和组件整合,无需编程即可创建程序。同时,有编程技能的工程师也可以根据需要进行编码,从而定制组件。
支持各种架构
要开发与企业架构相对应的基础系统,就必须具备与各种系统协作的功能。在这一点上,低代码开发平台支持大多数的主流操作系统和数据库。
另外,通过丰富种类的API,可以和外部系统自由合作。因此,低代码开发平台具有可扩展性和开放架构,可支持大企业的基础系统开发。
基于代码的扩展
完全不使用代码的无代码工具,特点是使用预设好的功能来制作简单的应用程序。对于低代码开发平台,用户也可以通过编码自由扩展组件的功能。
低代码开发平台可以根据客户各自的需求,进行各种各样的定制,即使是复杂的大规模系统开发也能应对。
软件全生命周期整体支持
目前提供的低代码开发平台大部分采用的是云服务aPaaS的形式。
因此,低代码开发平台并非单纯的应用开发工具,从与数据库的自动连接、测试、正式启动、进一步运行管理、变更管理等开发工序到实际运用工序,搭载了支持整个软件生命周期的功能。
与低代码开发平台对应的是无代码开发平台(No-Code Development Platform, NCDP)。无代码顾名思义,就是不以编写代码为前提的开发方法。
低编码和无编码在某种程度上非常相似。前述的可视化建模、可再利用的通用性组件、生命周期管理等低代码开发平台的特征也适用于无代码开发平台。
无代码开发平台同样适用于专业的开发者和无基础开发者,提供了能够在更短的时间内轻松发布应用的环境。无需通过编码进行编程,通过PaaS平台提供,可以在不构建操作环境的情况下立即运行。
乍一看,无代码开发平台只是从低代码开发平台中去掉了编写代码的要素。但实际上它们是非常不同的。
首先,无代码开发平台不能通过编写代码来扩展或定制功能。因此,无代码开发平台目标是通过预先准备好的组件和API,实现功能范围内的相对简单的程序开发。不需要专业开发人员进行系统设计和数据库设计,经过简单的功能设计后立刻就可以使用。
典型的例子是使用Excel等电子表格的普通业务人员,将Excel和纸质工作系统化,自己创建应用程序,以简化日常工作。这些应用程序由其使用者来完成运营,随着业务的变化可以灵活的调整应用程序的功能。
无代码开发平台不能通过编写代码扩展功能,所以不适合功能较多的程序开发。此外,由于API的系统协作自由度较低,也不适合核心系统的开发。
得益于一些厂商的努力,低代码行业正在构建起健康的生态。我们在讨论低代码的未来时,需要清楚一点的是,低代码并非万能,它有清晰的能力边界,而非一些声音所说的会“抢走程序员的饭碗”。低代码是企业数字化建设当中“最后一公里”,在保障企业数字化进程的价值赋能下,中国市场会有低代码的一方天地。
国内的简搭(jabdp)开发平台是一个低代码开发平台,复杂的业务功能,只需要会基本的sql语句和javascript语法,就能进行快速开发,满足其个性化的业务需求,设计出各种复杂的企业web应用。主要特点如下:
可灵活定制:简搭(jabdp)低代码平台提供了强大的定制能力,包括页面定制、数据表管理、业务流程定制等,便于实现各类企业应用。
权限管理:简搭(jabdp)低代码平台提供组织结构管理和精细的权限管理多人,便于企业根据实际情况灵活地进行权限设置和调整,促进内部协作。
易于部署和维护:简搭(jabdp)低代码平台提供一键部署功能,无需配置复杂的网络服务器;根据企业的需求变化进行系统维护也更容易。
支持二次开发和系统集成:简搭(jabdp)低代码平台是一个开放的快速开发平台,有经验的程序员依然可以基于jabdp定制开发出许多高级的功能,而不受jabdp本身的限制;同时,简搭(jabdp)低代码平台开发出的应用也可以很方便地与企业的现有信息系统集成,或者与微信、钉钉等第三方应用集成。
简搭(jabdp)低代码平台适合用于大部分的企业级web应用的开发,尤其适合企业信息管理系统(MIS)、企业资源计划系统(ERP)、客户关系管理系统(CRM),业务支撑系统(BSS)等。并且就一些经典的项目案例提取整合出各种类型的项目模板,共享给开发者参考,开发者可以在原有的项目基础上进行修改定制,以打造其个性化的企业信息化平台。
关于低代码开发平台,一个常见的误区是认为“低代码开发平台只适用于平民开发者(CitizenDeveloper)”。平民开发者是指那些非传统的、没有受过专业编程教育的开发者,他们主要用低代码平台来创造和定制应用。
当然,通过使用低代码开发平台,可以降低对多数项目人员的技术要求。在多个项目并行时,只需要一个有经验的程序员进行数据表、业务逻辑等的设计即可,其他项目人员无需编程能力,这样在人月数和人员要求两个方向都能有效控制项目的投入。
借助低代码开发平台,可以更高效地理解中小企业的信息化项目需求,控制项目开发的成本,同时适应中小企业信息化需求变化快和缺乏专业技术人员进行项目维护的特点,是开发中小企业信息化项目的最佳选择。
6. 半是蜜糖半是伤李小川结局是什么 李小川喜欢谁
半是蜜糖半是伤李小川是眼里只有程序的典型IT男,但是超高的颜值和直男属性,使其收获了大批的粉丝,不善言辞的他也散发着不一样的魅力,半是蜜糖半是伤李小川结局是什么?下面带来全面介绍。
半是蜜糖半是伤李小川结局是什么?
李小川作为西部世界APP投资人,他有着非典型程序员的外貌,五官俊朗帅气,比男团鲜肉也毫不逊色。但他对颜值没有概念,常年穿着格孑衫,不修边幅,节俭抠门。
他性格有些孤僻,不善言辞,有着天才少年的自负与偏执,整日沉浸在编程和代码的世界中,万事漠不关心,视代码为女朋友,浑身上下散发着注孤生的气质,不过最后是根徐莉在一起了,而且还是徐莉主动追求的李小川,观众们耐心等待后续的剧情吧~
李小川扮演者是谁?
王以纶,出生于1996年3月18日,加拿大华人,中国台湾男演员、歌手,台湾男子团体SpeXial成员。
2015年1月14日,以第三期成员的身份加入男子团体SpeXial正式出道;2月4日发行迷你影音专辑《Love Killah》;9月11日发行第三张正式专辑《Dangerous》,专辑中的同名主打单曲《Dangerous》作为好莱坞电影《移动迷宫2》的中文主题曲;12月8日参与湖南卫视天天向上节目的录制,是该节目改版的主持阵容“天天小兄弟”之一。
李小川喜欢谁?
最初的李小川眼里只有代码,视代码为女朋友。直到徐莉走入他的生活,他的态度才有所转变,随着俩人的交集渐渐增多,自然就在一起了。
半是蜜糖半是伤剧情
江君,一个对眼泪重度过敏的女孩,有着经济学与心理学双硕士学位,父母给予的优越而宠溺环境造就了她天性洒脱、理想主义的性格,毕业后的她在一家公益组织工作,追寻着属于自己内心的生活。不料,父亲的意外去世却使她站在了人生的三叉路口,江君最终决定进入顶级投行公司MH完成父亲的遗愿。在MH里,江君意外与童年玩伴袁帅相逢,但高兴不过三秒后,却发现自己童年的保护伞,那个温柔的袁帅哥哥竟然处处与自己为敌,在狼性文化的投行公司里,有人在暗中给她布局设套,有人视她为棋子兼眼中钉,但江君凭借着自己善良而细腻的天性,出众的情商以及天才般的想象力,判断着人和项目复杂的变数,在暴风雨的中心,她开始了自己的征途,经历了一番番风霜雪雨后,最终收获了自己的事业与爱情。
以上就是全部内容,请大家继续关注。
7. 为什么国内程序员都很少进行代码重构
说到代码的重构对于国外的程序员提到的比较多,特别是大型的开源工程,基本上一个模块或者函数的实现会反复的修改,一个文件能被修改成千上万次,曾经订阅了linux内核组的邮件,每天的收到的修改文件成千上万,有时候一个文件都能被修改上百次,对于文件修改最疯狂的是google的chrome源码,重构的次数,让你觉得每天都在重写但是功能上感觉越来越流畅。为什么我们周围的程序员绝大部分时间做的不是这样的事情。
为啥从直觉上觉得老外的写的代买质量比我们的要高,我们国内的程序员绝大部分的时间是在赶进度,准确的来讲忙着增加功能和修改bug,其实也从侧面反映出为什么国内出不了android以及Linux等影响深远的 科技 创新,从全球开源代码的占比就可以看出,差距还是很巨大的。
为什么觉得老外写的代码比我们的强?
1.国内软件发展主要阶段还在解决有没有,还远谈不上强大
中国的软件经过近几十年长足的发展,已经取得了巨大的成就,特别在互联网行业已经有几个巨头跻身世界前列了,最近炒的很热的脸书的用户数据泄密事件,作为当事人扎克伯格,也在论述中提到中国有几个很厉害的互联网公司,这说明中国在互联网领域还是取得了相当大的成就,但是在一些核心的领域,或者门槛很高的领域差别还是非常巨大。
任何事情在发展的初级阶段首要考虑的是不是有没有,所以如同创业初期的公司会选择短时间内搞出来个产品,哪怕是不成熟的产品,然后快速的投入市场,根据市场用户的反应同步追踪问题,等到产品差不多稳定,并且产品在市场上有了一席之地之后,后续的事情就要考虑优化功能,对里面的代码或者产品的性能进行全方面的提升,目前国内大部分的互联网一般比较年轻,还在解决有没有的问题,相信随着时间的推移以及国内软件的发展,也会有大量的高质量的开源框架代码出来,但这一切都需要很长的时间。
所以国内的程序员大部分时间都是在赶进度和根据需求完成功能代码。
2.软件产业的底子还很薄弱, 历史 积淀还不够
举个很典型的例子,现在很多国内的程序员到了30多岁就开始考虑后续的转型了,因为后面的轻轻人会带来很大的冲击,所以大部分的30多岁的程序员都在考虑自己后路,都要考虑转型的问题。老的有经验的程序员反而转型去做管理或者合伙创业了,哪有几个还在安心搞技术,年龄大了还在搞技术的还被人鄙视,觉得自己没有出息。
但是在国外写代码是一种很常见的职业,和别的工种没有多大的差异,40,50岁了写代码也是比比皆是,做软件是一种技术工种,经验的占比是很高的,所以老程序员写出来的代码更加有深度,稳定性更高,一切的根源还是产业的发展不够成熟,需要时间和 历史 的积淀,从这方面讲国内的软件整体产业还是比较薄弱,从业人员的整体素质和工作氛围还有待慢慢的成熟,周围都是有经验的程序员在带领着如何去重构代码,如何提升代码的质量,而国内大部分的程序要还是被产品经理鞭策着增加需求和修改代码。
3.公司的文化差异
目前很多的中国技术公司更多的追求的是短期利益的最大化,在基础软件的投入远远不够,毕竟基础的投入很难短期见成效,在一个具体的场景,有一个产品主体的功能已经实现了,也能在用户那边投入使用了,一般的公司很难拿出时间来,让你做代码的重构,毕竟这种事情很难直接产生经济效益。这与公司本身的文化差异有很大的关系,重视的技术或者懂得技术的公司对于这方面相对比较重视,反之就差很多。
小时候课本上就说着我们落后100年,所以高楼大厦不是一天建成的,所以在追赶的道路很漫长,所以承认存在差距,然后努力加倍的去追赶。
Time is money. 以目前国内互联网的情况,需求应接不暇,程序员基本上都是被需求与业务赶着走,时间非常紧张,在这种情况下,程序员很多时候唯一的选择就是赶紧实现需求的功能。所以,一个项目下来,代码基本上都变得非常非常的“垃圾”。
也有很多程序员想过在项目结尾的时候进行代码的重构,基本上每个程序员也都知道重构代码的好处,但是并不代表着真正能做起来。还是那个原因,国内互联网的速度太快,需求应接不暇,做为程序员,基本上没有时间来做这件事情。
而另外一个原因是跟团队负责人有关。若团队负责人能够意识到重构的好处,那么他可以为此单独划分一段开发时间出来,让大家分别负责一个模块进行重构,这都是可以安排做起来的。这也需要团队负责人如何在需求人员的需求与代码质量的进度上做一个平衡,进行统筹安排。
最后我想说一个可能很少意识到的原因,那就是人员流动问题。国内互联网目前人员流动非常的大,尤其是北上深这样的互联网发达的城市,基本上是平均两年就会走一大波人,在这样的情况下,也会考验从业人员的职业道德,即我到底要把代码写的多好,要把代码的可维护性做到多好,其实这都是从业人员自身需要考验的问题,因为完成一个功能很容易,但是要考虑的全面就是另外一回事了。而人员流动带来的另一个问题就是有一些代码是很难看懂的,即有些代码在人员离开后成为了“ 历史 ”,无人敢动。这也会阻碍着软件的重构工作的进行。
从我所讲的这几种情况来看,重构其实是大家都能知道的好处,但是真正实施起来却又有现实的约束,需要负责人来做这样的统筹安排与推动。
成本太大
大多数软件产品的开发都是经过了很多开发人员的付出,如果进行代码重构需要了解产品、了解框架、了解代码逻辑,这个过程会花费大量的时间和人力成本,对于企业来说,效益是第一位的,与其花费精力进行效益不大的产品重构,不如去承接更多的项目来的实在。
领导决策
由于大部分企业的老板都是非技术人员出身,他们更关注效益和客户,为了符合企业的发展,在进行产品开发时会更多的采用新技术来吸引客户,花费精力重构代码不如开发一套新产品或者开发更酷炫的效果更具有实在意义。
代码规范不足
由于国内互联网较之国外起步较晚,很多企业发展时间较短,加之人员流动比较大等多方面的因素,很难形成标准、严谨、行之有效的代码规范,所以很多技术人员在开发时都是根据个人风格习惯在开发,等其他人接手代码时,缺少相关标准和文档,很难理解代码逻辑,花时间去了解代码、重构代码不如直接推翻重做来的方便。
客户定制化需求
部分企业创业初期对企业信息化是不够重视的,只有企业发展到一定程度才会考虑信息化建设,而由于业务的限制,大多数标准化的互联网产品都很难满足企业的实际需求,需要进行大量定制化的开发,对于互联网企业来说,即使产品开发足够完善,在实际项目中也需要进行扩展,倒不如直接在项目中进行调整。
程序员的发展限定
在国内很少有终身的程序员,大部分都会逐渐转向销售、售前、项目经理、产品经理等岗位,而这些岗位则需要了解业务、了解客户,对技术的需求反而不会太高,所以与其花时间去专研技术不如将更多的精力用在业务和项目层面。
代码能够重构对底层框架要求深度掌握、且代码框架本身要足够灵活,而国内绝大部分技术人员都是停留在对框架的使用层面、少数可以完善、结合使用,极个别的在做同语言山寨或者换一种语言重写,能够对产品体系进行把握、与时俱进扩展实在是凤毛麟角。随着国家的经济提升、IT行业逐渐成熟,在我国这么多IT公司基数下,即便是凤毛麟角的概率,重视基础框架、积累萃取、不断迭代完善的一些技术公司也会慢慢崭露头角、涌现出来的。
【国内程序员很少进行代码重构】,这个现象虽然没有什么调查统计,不过我写了十多年代码,也发现身边的程序员大多数是这样的,【宁可写新的代码,也不愿意重构老代码】。下面我也谈谈自己的看法:
系统没有问题,就是最大的功劳
我见过的大部分的传统行业的软件公司或IT部门是这样的(互联网公司不太了解),“只要系统稳定,那么就是最大的功劳”,而保持系统稳定最好的方法是什么? 就是尽可能的不要动系统!
可能很多人不能理解,但很多公司确实是这样,甚至公司对项目的考核标准中,项目有什么突破的权重很低,是否有生产事故的权重很高。所以很多“机智”的项目组成员,千方百计的不接需求,或者把需求推给别的项目组。在这种单位里面,别说重构了,新代码都写的不多。
测试覆盖度太低,重构代码没办法保证质量
代码重构,很重要的一个问题:“重构后的代码谁来保证?如果影响到原有的功能怎么办?”
这时候很有效的一个方法,是使用各种自动化的测试来保证重构代码的质量。
但是,大部分公司,不管是单元测试还是其他的自动化测试,都是不健全的,甚至是没有的。所以只要不是被逼不得已,程序员宁可重新写一个方法,也不愿意重构之前的代码。
其他
进行代码重构不是一件容易的事情,务必需要对需求熟悉;对代码 历史 变更熟悉;对代码框架,模块熟悉;对产品更新迭代做好风险把控,时间成本把控……
进行代码重构需要能力非常高,责任心非常强的人进行,甚至需要一个优秀的团队完成。
为什么要代码重构?理由一大堆,我认为主要有两条,一是原代码已不适合扩展新需求,二是原代码已拥肿不堪,乱七八糟。
为什么很少重构?除了上述分析外,还有其他因素,如人员流动快,原团队原作者早已不知何去何从了。又如需求和业务繁多,完成工作开发都累得半死不活,日理万机似的,哪有时间和心情重构?
谢谢大家。
1.国内程序员技术能力不足以进行代码重构
大量的软件从业人员连编程规范都不熟悉,怎么可能做代码重构?更多的人只会写写hello world,只会拷贝粘贴小段代码,连if else这种语句都写不清楚甚至漏掉逻辑,连面向对象的编程思想都没有,谈何重构?
2.国内程序员的沟通能力说服能力一般。
进行软件重构,必须说服经理,让经理相信重构会带来软件质量的提高和故障率的逐步降低,这样经理才会安排人力进行重构。
3.国内软件开发更注重bug的及时解决
国内软件开发大量的人力被分配到解决短期的某个bug,没人抽时间思考如何长久的彻底的解决软件缺陷,其实解决bug不重要,找到软件的缺陷或者性能低下的地方才重要,这些才是重构的点。国内加班加点疲于奔命式的开发,没人考虑bug率是否长期内能够收敛,总是先解决眼前的问题再说,处于一个永远解决bug的死循环里。
这种工作模式是愚蠢的,不是smart的。
软件开发,一定要动脑子,不要蛮干,这不是耕地,力气大就耕的多。
重构代码的目的说白了,就是让软件开发人员更自由。
谢谢楼主的问题,这是一个我特别想回答的问题?
为什么?因为,第一,我是一个对代码有洁癖的人,受不了一坨,一坨那样的代码。第二,我是一个践行Clean Code 的人,给大家我主要负责的一个项目的一组数据(JAVA),总代码量20万行,UT coverage(单元测试代码覆盖率)82%,代码重复率0.5%,代码规则(sonar)违反(Code issue)0,甚至连最低的违反都没有。
也正是因为我的项目在实践Clean Code上的数据,我经常去给不同的团队做分享,也对团队对这个重构不太上心有一些理解。
大致以下几个原因。
第一,也是最多的,交付压力,大部分人都会抱怨,你看我们有这么多新功能,还有那么多bug,根本忙不过来,哪有时间重构?
第二,重构意识不足,老板,管理人员总是希望这个我们要有,那个我们也要实现?为什么?因为别人有,别人有我们没有可能会造成用户流逝。即使有一些有见识的程序员和老板反应这个重构问题,但是重构从来不是高优先级的。毕竟,现在的软件的生命周期可能很短。
第三,人员流动性大,这个是我听过最奇葩的一个理由,我问一个来听培训的哥们,说你代码写成这样,以后怎么维护?这个哥们说,我也知道难维护,但我明年就跳槽了。
第四,设计上就不需要重构,曾经给一个保险公司做分享,我本人也是做金融相关产品后台的,我就问你们这样写代码,可能三四年以后就非常难维护了,还是要尽快重构。他们的回答是,我们不重构,我们只重写。什么意思那?就是一个系统,三四年以后在写一遍。
第五,程序员本身的问题,可能第一写单元测试,修改命名,修改代码结构,是一件很没有成就感的事情,也是一个没有多少附加值的事情。毕竟现在你去找工作,这个代码质量方面的问题会问得很少。
第六,我见过的我不能反驳的一个回答,我的英文太差,不能很好的命名,而我也不想学英文。
第七,反正我已经实现了功能。
最后,用一句话来提醒程序员们,重构是多么重要。
出来混迟早要还的,挖了坑迟早要填的。
在国内,【重构】这件事是程序员最喜欢做的事,而不是公司喜欢做的事。
但程序员喜欢并不能影响公司的决策,所以,国内的现象就是软件系统很少有重构。
其根本的原因在于,国内的公司所推出的系统大多没有重构的价值。
1、国内的互联网公司存在这样一种快节奏,那就是发现一个有价值的创意,就马上进入开发,开发完成立即上线,并立马推广使用。这是一种快速试错的模式,一旦发现系统在 社会 中没有引起反响,那就马上把系统再下线。这种情况下的系统哪来的重构价值呢?
2、即使一个系统上线成功了,也积累了大量的用户,貌似为了系统的稳定性和性能,可以有重构的机会。但事实上不是,国内公司仍旧不会选择重构,因为重构带不来新的价值。所以,公司多数都会在系统上添加新的功能来吸引新的客户,而不会考虑重构现有系统。
总得来说,引起重构的原因在于能够有持续的价值。没有价值的事,企业当然不会做,仅是程序员的一厢情愿而已。
你只是见到了你所在的公司现象,不代表所有,也不能代表大部分的。
代码重构还是存在的现象
代码设计烂,经常出问题、扩展麻烦、维护心累、数据混乱、结果不清醒、模块划分混乱
就可能要考虑到重构了
呵呵,
老大说:
你赶紧去修复一下这个bug,
还有几个功能没有实现,加班搞一下,
pm 说:
这个功能改一下,
还有这个,界面重新调整一下,
这个业务流,现在不一样了,
客户需求需要多几个功能,
老板说:
这东西下周能出来吗?
8. 软件开发的流程都有哪些步骤呢
软件开发是指一个软件项目的开发,如市场调查,需求分析,可行性分析,初步设计,详细设计,形成文档,建立初步模型,编写详细代码,测试修改,发布等。
软件是怎么样开发出来的
第一个步骤是市场调研,技术和市场要结合才能体现最大价值。
第二个步骤是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手 册。
用户视图 是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了 很多操作方面的流程和条件。
数据词典 是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成了一半多。
用户操作手册是指明了操作流程的说明书。
请注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样做的,因果颠倒,顺序不分,开发工作和实际需求往往因此产生隔阂脱节的现象。
需求分析,除了以上工作,笔者以为作为项目设计者应当完整的做出项目的性能需求说明 书,因为往往性能需求只有懂技术的人才可能理解,这就需要技术专家和需求方(客户或公司市场部门)能够有真正的沟通和了解。
第三个步骤是概要设计,将系统功能模块初步划分,并给出合理的研发流程和资源要求。
作为快速原型设计方法,完成概要设计就可以进入编码阶段了,通常采用这种方法是因为涉及的研发任务属于新领域,技术主管人员一上来无法给出明确的详细设计说明书,但是 并不是说详细设计说明书不重要,事实上快速原型法在完成原型代码后,根据评测结果和 经验教训的总结,还要重新进行详细设计的步骤。
第四个步骤是详细设计,这是考验技术专家设计思维的重要关卡,详细设计说明书应当把 具体的模块以最’干净’的方式(黑箱结构)提供给编码者,使得系统整体模块化达到最 大;一份好的详细设计说明书,可以使编码的复杂性减低到最低,实际上,严格的讲详细 设计说明书应当把每个函数的每个参数的定义都精精细细的提供出来,从需求分析到概要 设计到完成详细设计说明书,一个软件项目就应当说完成了一半了。换言之,一个大型软 件系统在完成了一半的时候,其实还没有开始一行代码工作。
那些把作软件的程序员简单理解为写代码的,就从根子上犯了错误了。
第五个步骤是编码,在规范化的研发流程中,编码工作在整个项目流程里最多不会超过1/ 2,通常在1/3的时间,所谓磨刀不误砍柴功,设计过程完成的好,编码效率就会极大提 高,编码时不同模块之间的进度协调和协作是最需要小心的,也许一个小模块的问题就可能影响了整体进度,让很多程序员因此被迫停下工作等待,这种问题在很多研发过程中都 出现过。
编码时的相互沟通和应急的解决手段都是相当重要的,对于程序员而言,bug永 远存在,你必须永远面对这个问题,大名鼎鼎的微软,可曾有连续三个月不发补丁的时候 吗?从来没有!
第六个步骤是测试
测试有很多种:
按照测试执行方,可以分为内部测试和外部测试
按照测试范围,可以分为模块测试和整体联调
按照测试条件,可以分为正常操作情况测试和异常情况测试
按照测试的输入范围,可以分为全覆盖测试和抽样测试
以上都很好理解,不再解释。
总之,测试同样是项目研发中一个相当重要的步骤,对于一个大型软件,3个月到1年的外部测试都是正常的,因为永远都会又不可预料的问题存在。
完成测试后,完成验收并完成最后的一些帮助文档,整体项目才算告一段落,当然日后少不了升级,修补等等工作,只要不是想通过一锤子买卖骗钱,就要不停的跟踪软件的运营 状况并持续修补升级,直到这个软件被彻底淘汰为止。
什么是软件开发的核心问题
按照软件工程鼻祖,《人月神话》作者 Brooks 在“没有银弹——软件工程中的根本和次要问题”一章中阐述的思想,软件开发的核心问题就是如何从概念上对一个复杂的业务系统进行建模。这个建模是含义广泛的,不仅仅包括对象建模,还包括数据建模、算法建模等等一系列的内容。总而言之是要先找到解决复杂问题的突破口(先要搞明白需要做什么,然后再考虑如何做)。至于采用什么表示方法(简单文本、UML 图、E-R 图)、采用什么高级语言、是否一定要用面向对象、使用什么开发工具都是次要的问题。
软件开发方法
软件开发方法(Software Development Method)是指软件开发过程所遵循的办法和步骤。
软件开发活动的目的是有效地得到一些工作产物,也就是一个运行的系统及其支持文档,并且满足有关的质量要求。软件开发是一种非常复杂的脑力劳动,所以经常更多讨论的是软件开发方法学,指的是规则、方法和工具的集成,既支持开发,也支持以后的演变过程(交付运行后,系统还会变化,或是为了改错,或是为了功能的增减)。
关于组成软件开发和系统演化的活动有着各种模型(参见软件生存周期,软件开发模型,软件过程),但是典型地都包含了以下的过程或活动:分析、设计、实现、确认(测试验收)、演化(维护)。
有些软件开发方法是专门针对某一开发阶段的,属于局部性的软件开发方法。
特别是软件开发的实践表明,在开发的早期阶段多做努力,在后来的测试和维护阶段就会使费用较大地得以缩减。因此,针对分析和设计阶段的软件开发方法特别受到重视。其它阶段的方法,从程序设计发展的初期起就是研究的重点,
已经发展得比较成熟(参见程序设计,维护过程)。除了分阶段的局部性软件开发方法之外,还有覆盖开发全过程的全局性方法,尤为软件开发方法学注意的重点。
对软件开发方法的一般要求:当提出一种软件开发方法时,应该考虑许多因素,包括:
①覆盖开发全过程,并且便于在各阶段间的过渡;
②便于在开发各阶段中有关人员之间的通信;
③支持有效的解决问题的
④支持系统设计和开发的各种不同途径;
⑤在开发过程中支持软件正确性的校验和验证;
⑥便于在系统需求中列入设计、实际和性能的约束;
⑦支持设计师和其他技术人员的智力劳动;
⑧在系统的整个生存周期都支持它的演化;
⑨受自动化工具的支持。此外,在开发的所有阶段,有关的软件产物都应该是可见和可控的;软件开发方法应该可教学、可转移,还应该是开放的,即可以容纳新的技术、管理方法和新工具,并且与已有的标准相适应。
参考:http://www.blog.e.cn/user5/280156/archives/2008/2090192.shtml