知乎创作马拉松_黑客马拉松知乎
文字日记:
如何招到一个靠谱的程序员
1. 简历看人
阅读简历永远是面试的之一步。好的简历一定是正确、清晰并且能够体现候选人最有价值一面的。我首先会过滤掉那些包含错别字,文句不通或没有逻辑性的简历,因为如果一个程序员连自己的简历都不愿意去仔细检查并完善的话,很难想象他写出来的代码质量会如何。接着,我便会重点阅读简历中的项目经验部分,在这里我能够看到面试者的开发经验,技能栈,并且判断他们熟悉的技术框架、工具是否与目前公司要求相匹配。
这里,我还会特别关注面试者是如何来写这部分项目经验的,你需要用尽可能简练的文字来描述项目的背景,你在项目中承担的角色、参与项目的时长,你用到的技术、以及你在项目中的亮点等信息。优秀的程序员们往往有一个共同的特质,那就是善于归纳,并能够一针见血的发现问题或把一个问题说清楚。我经常看到面试者在简历中像写故事一般地描述他们的项目经历,光这一个章节就有好几页,其实这反而会给你减分,因为这会让面试官判断你缺乏必要的归纳能力。
最后你的一些与编程有关的社会化活动,如:你在GitHub上的开源项目,在知乎、V2EX中给他人的解答以及你的个人技术博客等等都会给你加分,因为这说明你对所从事的工作有着极大的热情,并愿意在业余时间去学习和提高自己,就像在我之前的 “给职场新人的10点职业建议” 一文中提到的,如果你要成为一个领域的专家,那你必须花费超过10,000小时,而这光靠工作时间是远远不够的。
2. 给面试者10分钟介绍自己最擅长的
当面试者通过了笔试和HR面试之后,你就需要面对面地对候选人进行面试。我远不是什么面试专家,但我有一些自己的独特 *** 。我讨厌问一些很个人的问题,比如你的职业规划是什么?你为什么想换工作?等等。我更愿意给面试者10分钟时间,让他介绍自己最擅长和最感兴趣的领域。这往往能帮助我很快作出下面的判断:
这个人对他所做的事情是否充满 ***
他们是否能在团队中很有效地进行沟通
他们是否在专业领域足够擅长
你的团队是否会乐于和这个人一起工作
这一招我在面试中用得很多,而实践证明也确实非常有效。
3. 基础打牢了吗?
一般,有一定规模的公司都会为面试者安排机考或笔试,从而能首先筛掉一批未能通过的面试者。另一些规模较小的或初创公司则会让面试官直接进行技术面试。其实,我觉得这两者的差别不大,有经验的面试官往往能够通过几个最简单的技术问题,判断出面试者的技术基础是否牢固,这不是为了证明他有多优秀,而是用来判断他是否是一名合格的程序员。对于我来说,并不看重机考的成绩,因为机试的考题很多能够在网上得到,特别对于一些外包公司,他们总是能够通过各种途径得到考题,从而使得他们推送的外包能够顺利通过笔试。
下面是我经常会问的几个问题(JAVA):
HashTable与HashMap有什么区别?
Servlet是线程安全的吗?
*** P中 @include跟jsp:include的区别
HTTP的response code 403和500分别代表什么
......
这些问题都很简单,但一些基础不牢的程序员往往会在这个时候露馅。当然,根据面试岗位的不同,你还可以有针对性地问一些问题,例如,你需要找一个能写核心算法的程序员(比如 银行的总账计算,或者保险公司的保费计算),那么你可以问一些算法相关的问题。
4. 技术深度够吗?
具备牢固的技术基础,一般就可以满足项目中普通程序员的要求了,但如果你需要找的是一个资深程序员,那么你还需要对面试者的技术深度进行考察。我们现在做项目时都会大量使用框架,这能使我们的开发效率和质量都得到提升和保障,但同时也降低了对于程序员开发技能的要求。因此我一般会询问面试者下面的问题,来考察他对所使用框架的掌握程度。
请你描述一下,在这个项目中,从一个HTTP请求发起,到最终的Response返回,它在你的系统和框架内部是如何流转的?
这个问题往往能够判断出面试者对于相关技术掌握的深度。较初级的开发人员描述的层级往往比较浅,比如使用Spring MVC框架的,只能说到实现一个Controller继承BaseCommandController(甚至很多开发人员只知道继承了一个公司内部框架的基类),至于再往下Spring框架是如何进行内部流转的,就再也说不清楚了。而更资深的开发人员,往往能说出框架内部的实现机制,以及如何调用和处理的。在面试者描述的过程中,你还可以穿插询问一些比较有深度的问题,比如框架中某个类这样设计是哪一种设计模式的体现,采用这样的设计有什么好处等等。这比让面试者默写一个设计模式代码要有效、自然得多。
除了技术层面上的考察之外,对于资深开发人员,还需要考察他们的设计能力。说到软件设计,大部分面试者都能熟练地背出面向对象的三个基本特性:继承、封装、多态,也能把它们的概念描述清楚。但我一般会问下面的这个问题来考察他们的面向对象设计能力。
请用一段程序代码描述我们所在的这间房间。
我惊讶地发现至少有一半的面试者都很难准确使用Interface和Class来给房间建模,也有一些人会将最基本的代码语法或关键字写错。
5. 选择适合所在企业文化的人
这一点也曾是我经历的一个误区,我总是希望能为团队招到技术能力最强的人,而忽略了他是否与整个公司和团队的文化相匹配。这往往会造成,虽然招到了人,但没过多久就因为理念不同不欢而散的结果,反而给公司带来了损失。让我们看看GitHub的负责人是怎么说的。
我们很严肃地看待我们自己关于 *** 流程的哲学。我们希望每一个GitHub员工都了解他们所要面对的环境,并保证他们是能够很好适应的。这包括我们所创造的文化、哲学、计划、错误甚至是晚餐。比起他们的技能是否满足要求,我们更看重他们的潜力以及是否能够适应我们的企业文化。
我曾在具有鲜明文化差异的不同公司或团队工作,看到许多崇尚开放、开源的程序员在一个相对封闭,具有很多流程以及规范限制的公司中很难发挥,最终选择离开。因此在 *** 程序员时,选择合适的往往比选择更优秀的更重要。
6. 行为面试法
行为面试法可能是我在整个面试过程中唯一用到的教科书面试 *** 。一个程序员是否能够很好地工作,不仅取决于他能否顺利地完成开发任务,更重要的是在遇到一些特殊场景或问题时,他能否合理有效地处理和解决。行为面试法能够帮助我们从面试者描述的过去某一具体事件中,预测未来他在工作中可能的表现。下面便是一个我经常用到的问题。
请谈谈你在这个项目中遇到的更大困难或挑战是什么,你是如何解决的。
从面试者对上面这个问题的回答中,我能够很好地判断他是否有较强的独立解决问题的能力,而我认为这是除技术能力之外,程序员最应具备的能力。
7. 给他们一个虚拟任务
经过上面的这些环节,你可能对面试者的整体情况已经比较满意,但先别急着下结论。我曾见过能够顺利通过上面所有面试步骤,并且被雇佣的程序员,当他们进入实际工作后却没能把事情做好。
在你确定是否录用他们之前,可以给他们一个虚拟任务。我不是说一个抽象的程序问题,而是指一个真实的,可能就存在于你当前项目中,并且需要在一两个小时之内完成的一个开发任务。我曾经出过这样的考题:
写一个小程序将一个以特定格式(如CSV)存储的文本文件转换为XML格式,并存储为另一个文件。
你可以给他一台已经配置好开发环境以及IDE的电脑,让他当场编写代码。当然如果时间有限,你也可以直接询问面试者的实现思路,并简单用伪代码来描述处理过程。通过这个测试,你能够看到很多细节,比如面试者是否有良好的编码习惯,异常处理是否规范,代码逻辑是否缜密高效,以及他的开发效率是否足够高。如果面试者给出了非常优秀的解答,那么你就应该能够判断他确实是一个优秀的候选人了,因为我从没碰到过能够通过上面的测试,却在实际工作中无法做好的人。
程序员怎么表白?
Attention !!!
再过几天,
就到了恩爱秀满天的日子了!
七夕!中国情人节!
很多单身汪都在绞尽脑汁
买什么礼物给TA?
鲜花?包包?
还是请TA一起去看场电影?
用什么方式告诉对方
内心最想对TA说的话
不能跟这个哥们一样
原本想对TA说
结果嘴巴一哆嗦
说成了
每当想起你这张丑脸,我就泛起了微笑……
结果可想而知?
一开始我以为这样的悲剧
只会发生在程序员身上
因为外界都认为
程序员不浪漫、木内
......
但我错了
程序员的表白方式更加的特别
NO1
把以下代码保存为html后缀文件在浏览器中打开,
Happy
结果就是这样的
喜欢吗?
NO2
某公司程序员对小编说
于是就有了
有没有暖到你的内心呢?
温馨告白
程序员,也许不善言辞
但总是默默地在行动
用行动去诠释他们对你的爱
值此七夕佳节
雅腾教育祝愿
每一个程序员
和即将成为程序员的朋友
七夕快乐!
永远幸福!
如何用20小时快速学会任何技能 |《关键20小时》读书笔记5
学会一门新技能究竟有多难?究竟有多久?
在回答这两个问题之前,先想一想,上一次你学会一门新技能,是什么时候?
首先,新“技能”怎么定义?
什么都算。比如,能用一门外语进行初步/深入交流,初步/深入学习一门乐器,唱会几首KTV拿手曲目,学会一道/几道拿手的菜式,建立有效房间整理/收纳系统,运动小白完成马拉松/学会游泳,从画画零基础到能看着眼前的苹果和红酒瓶画出一幅有模有样的素描(这一点,我确实就做到了)等等等等。任何你想得到的一件从未做过还不会做却又想做的事情,都可以算一项新技能。
为什么要学新技能?
每天上班下班,上学放学,刷微博知乎豆瓣朋友圈,看美剧英剧电影国产电视剧,唠嗑八卦闲聊,吃喝拉撒睡觉。你不觉得无聊吗?我们得不断地给自己找点乐子啊。
有句话这么说的,“如果你一直在做你会的事情,那你可是一直在浪费你的时间”。还有一句话说“想要变得更强,就必须要学会让不适变得舒适。当你学会了这项技能,你可以搞诸如克服拖延,健身,学习新语言,探索未知领域等等很多事情。如果我们都倾向于回避这种不舒适,最终将会忍受很多痛苦,甚至是让自己遍体鳞伤。”
1,设置合理的目标并立即行动起来:为什么是20小时?说好的1W小时理论呢?
一万小时的研究针对的是大师级水平而言的。我们是要成为大师吗?用1W小时成为米其林大师或者奥运冠军或者世界黑客?别急着迷信1W小时理论,我们要先搞清楚自己最真实的需求。我是不是只想要学会几首钢琴曲子就可以了,或者,我是不是只要能画几幅让自己满意的素描或油画就足够了,或者,我是不是不间断不过分辛苦地跑完10K就觉得很开心了?在我们进入一个未曾体验过的新世界之前,在我们给自己设定宏伟的征服这个新世界的目标之前,想想清楚,是不是让自己进入这个领域体验一把攒攒经验,能让自己走的更快些,更远些?
好吧,就20小时吧。20小时,如果发现做不到要放弃,如果发现不喜欢,及时停止也不至于后悔投入了太多时间。如果找到感觉,想要深入,这20小时完全赚到了。另外,20小时的训练时间,让你完全找不到不立即行动的借口。说白了吧,20小时的行动都坚持不到,你也别再说你想做/喜欢做什么什么一直没机会做了。你说想学英语的,1年过去了,你拿着英语书读到20小时了吗?没有?那还真别再说你想学英语啦,骗谁呢?
当然,作者也说了,“给自己二十个小时,培养自己快速学习技能的能力,只要你选好兴趣点学好基本功定好学习计划灵活安排练习,你就一定能在短时间内取得持久的进步。然后努力去达到专业的水平。”
2,技能习得的3个环节:学习,解码,巩固新技能
3,20小时技能习得的金字塔组合:技能学习 +技能习得 + 技能训练
三者的关系:通过 技能学习 来准备 技能习得 ,习得后续进行必要的 技能提升训练
4,20小时习得一门新技能的4个关键
到这里,其实我们应该清楚了,这20个小时,可以分为3个部分。 技能学习,技能习得 和技能训练。 举个例子,如果你想练习画素描:
这张对比图是我2015年画画从3H到20H的对比图。每次画画3小时,当然中间还有一边画一边继续学的过程。
了解完这20小时基本要怎么使用后,关于如何有效地技能学习和技能习得分别有10个 *** 。
我们并不是每一次练习学习技能时都必须要用到的十个 *** 。但这些 *** 好似一个锦囊,一旦开始学习,我们就可以打开锦囊,进行对照看看哪些 *** 可以为我们所用。在技能习得的训练之前,你更好可以进行充分的学习和准备,这样能让你的习得更有效率更集中的产生效果。
1 收集信息:通过 *** ,书店或者图书馆找到至少三本参考书,教学录像,教学课本或者是其他的学习资料。通过“泛读”来快速抓住关键信息。 如果某一个概念,或者是某一项学习工具,反复不同的被不同的反复的被不同的参考书提及,那么请你一定要留意,并且在实践前做好相应的准备。
2 克服困难:学新东西难免觉得困难觉得自己又蠢又笨又花力气又没进展,但你一定要记得能够去提醒自己“ 是的,我在面临困难,这种感觉很正常,但它不会停留很久,我应该集中注意力解决问题。等我解决完这个问题之后,我能够得到进步,它也会得到缓解,而且在下一次,至少在同一个问题中,我不会再遭遇同样可怕的情绪。 ”
3 关联类比: 随着研究的开始我们会很注意到一些模式,一些不断出现的理论和 *** ,将这些模式尽可能多地去与你已经了解的存在于世上的事物或 *** 联系起来,目的是帮助我们理解新技能学习中遇到的概念,术语和原理。
4 逆向思维:设想一下最坏的结局:要是学不会这么怎么办要是彻底失败了怎么办?如果你多研究一下这块地解决最坏的结局你就能够快速找到原本不太容易被注意到的学习要点。
5 咨询交流:因此在投入时间和精力学习新技能之前,如果有条件尽量和有经验的人聊一聊。这样我们可以提前预知技能训练的每个阶段会遇到的情况,消除对于技能学习的不解和疑虑,使得我们在进行技能习得的过程中少一些灰心丧气,多一些兴趣坚持下去。
6 排除干扰:干扰是影响快速习得的更大因素,一旦产生了干扰我们就无法集中精力学习技能,习得的速度也会随之下降甚至停止,因此在习得和训练之前我们要尽可能的预见可能存在的干扰因素,试着减少或者消除它们。
7 间隔重复:重复是一个很好的记忆 *** ,可以帮我们定期系统的回顾所获取的知识和信息。 学会建立起自己的记忆模块。 一旦创建好自己的记忆模块后,每天只需要花几分钟就能完成复习任务用用最短的时间学习新概念新 *** 。如果你始终坚持复习有难度的部分,你将会非常快的记住必要的信息。
8 创建定式:我们可以为任何一个新技能的习得创建一个学习的定式,也就是后期技能习得中每一次练习时你会采取的固定的练习模式。在每一次开始一项新技能习得之前,你都可以按照这个定式的步骤进行相应的学习,准备和训练。 建立一套简洁的定式能让我们比较轻松的了解其中的关键环节,罗列清单方便我们自主学习的要点,将技能习得的流程更加系统化使得我们可以把精力投入在关键的环节上。 创建定式是保证每次训练都有一定的固定模式。
9 预期测试:指根据已知的经验,在尝试实践前期假设接下来会发生的变化或者会产生的结果。预期测试结果会随着 你最近的关注点,你对该领域渐进的了解,你对于如何做才能更进一步的假设,你下一步的实际尝试 这四个方面的因素变化。作者建议我们应该用一个笔记本或者是其他工具记录你在训练中作出的假设。我们应该不断思考这些假设并付出实践,这能让习得技能更高效。
10 尊重生理:更佳的学习周期是九十分钟左右。在这个周期内人的精力都集中大脑和身体都需要一个自然的休息,我们要瞄准时机锻炼,休息,吃点小零食或者做别的事情。我们可以进行计时练习。提前预定60-90分钟的练习时间和休息提醒,这样你就不会忘记什么时候该休息同样你也能更好地集中精神练习。
前20小时内的努力,时间和精力花的越多,无用功做的越少,技能习得就会越快。你可以把这十个 *** 作为一个备忘录,当你学习新技能时,浏览一下你们的相关内容,内容针对不同的技能选择合适的 *** 。这是为了学好技能一套通用 *** ,几乎适用于任何一项技能习得。
1,选择方向:优先你更感兴趣的事情。我们常常会有很多感兴趣的事情,但是人们只有对自己 更为 在意的事情才会学得更快。
2, 集中精力:尽量一次只做一件事。巴不得一口气学习很多事情,学到很多技能,是初学技能是最容易犯的错误之一。习得技能的关键之一在于能否把时间和精力集中在某一项特定的技能习得上。
3, 制定目标:对预期结果做到心中有数。你需要知道学完这门技能之后,你要求自己达到什么水平,在生活中有这样的技能你又能做些什么。
4, 分解步骤:分解技能,细分步骤,分清主次,逐个击破。当定下来想学想要习得的技能之后,就该把这项技能细分为若干个步骤并且筛选出初期习得阶段中最为关键的步骤,然后集中时间和精力去学习。如果先努力把至关重要的步骤学到手,那么剩下的几部也会相对比较顺利。
5,获取工具:了解学习这门技能需要什么样的条件要使用什么样的学习工具,自己是否可以获取,提前做好准备为自己的后续训练扫除障碍。
6,克服情绪障碍:害怕,怀疑,害羞都会影响我们习得技能的进展。 单靠意志力去克服这些障碍,不见得是明智的做法 。尽管我们每天都能够随意支配我们强大的意志力,但我们必须聪明地去利用意志力解决问题,改变我们面对的不利的因素。尽力地扫除一些障碍为自己的进步减少阻力。
7, 腾出时间: 如果你指望找到时间再去做某件事情, 那么这件事情将永远不可能完成想找到时间 。你必须腾出时间来。 1天24小时,正好1440分钟,再没有更多的时间。 如果想尽快的提高技能,那么你需要腾出更多的专业学习的时间,效果会更好。每天至少能腾出九十分钟进行练习,并且建议你一定要尽快努力达到20小时的投入。
8,及时反馈:及时反馈是指尽可能快,尽可能准确地了解你在技能习得中的表现。及时反馈是更好的反馈。如果反馈及时或者只有一点延迟,我们会更容易把实际操作情况与目前所获得的结果 联系起来加以分析再作出适当的调整。 如果你一直不知道自己做的好还是不好,对还是不对,那你只能无意识地机械重复一些行为,却不能从自己的行为中总结经验或者教训。这是对自己的时间和劳动力的极大浪费。
9,计时训练:对于初学的技能练习,我们往往容易过分估计实际投入训练的时间。更好的办法是进行计时训练,一旦计时开始中途一定不能停下来,尤其是在你感到泄气的时候。这个 *** 会让你更加轻松的完成更为持久的训练。训练的时间越长,技能习得的就越快。
10,数量与速度:力求完美很容易让人产生挫败感,因为我们永远都不可能做到百分之百的完美。所以,不要盲目追求质量, 保持良好状态的同时保证训练,训练量和现在速度才是最应该考虑的事情 。
结合前面几篇读书笔记,这一篇是《关键20小时》整本书快速习得一门技能的理论完整总结吧。整理了一下思维导图:
最后的最后,最关键的是我们需要尽快行动起来。 设定目标,学习,习得,练习,获得反馈,改进,继续练习。反复一个接一个的20小时,才能一点一点提升。 别在犹豫和等待中白白蹉跎了斗志,浪费了时光。
以下是之前的几篇笔记,有更多细节的展开,有兴趣的朋友可以看一看:
1. 「只要20小时就能快速学会任何技能」| 文章推荐
2. 10000小时 or 20 小时:“学精” VS“学会” |《关键20小时》读书笔记1
3. 快速技能习得你必须知道的几件事 |《关键20小时》读书笔记2
4. 快速习得技能的10个 *** |《关键20小时》读书笔记3
5. 有效技能学习的10个 *** |《关键20小时》读书笔记4