美国上市公司,专注Java培训21年

像我这样不聪明的人,能学会Java吗?


像我这样不聪明的人,能学会Java吗?

优秀的程序员和高智商无太密切的联系。你越谦虚,进步就越快。如何执着地用聪明的方式去处理事情,比你有多聪明更重要。要想懂怎么写出优秀的代码,就得具备非常强的吸收细节的能力。

你一定很聪明吧!?

你数学一定很好吧!?

你的逻辑思维一定很强吧!?

我觉得你们程序员都很牛逼!

绝大多数程序员都被问过这种被直接带有肯定的问题。自己即使嘴上回答 “不是啦”,可是心里还是很骄傲。

我以前也这样,现在变成熟后就不这么认为了。

程序员需要很聪明么?脑子笨,不聪明的人不能当程序员么?

我认为不是的。人类发明编程,就是想用编程来弥补人类的大脑缺陷

人类要开发大量具体的应用程序,编程语言从机器语言往高级语言发展就成了必然趋势。编程语言越接近高级语言,就越符合人类的思维方式。

从简易程度的角度来看,编程语言发展到高级语言后,编程这件事情就变得更容易了

我刚参加工作时,参与开发一个通讯录(BREW 操作系统上的应用),公司投入了 30 多个工程师。

如今,在 Android 操作系统上开发通讯录(甚至功能更完善),只需要投入 2-3 个高级工程师即可。这种变化并不是说以前的工程师比现在的工程师能力差,而是现在的开发过程变得更简单了。

在日新月异的技术发展过程中,我在招聘工程师的态度上也发生了变化。

我以前比较注重项目经验(很多公司在招聘时会应聘有过类似项目经验的候选人),现在我更看重面试者的谦虚和处理细节的能力。

2016 年我面试了 40 多个程序员,其中有两个同学让我印象深刻。

1他很聪明,但不具备创造能力

在被淘汰的人中,有一个同学在学校期间就自学 Android。他给我展示了五个 Android 应用,并很自信地对我说:“这都是我一个人以外包身份给某公司开发的。”

刚开始我和他做了一些简单的交流:

Q1: 你开发能力这么强,对薪水的预期是多少?

A1: 20K。

Q2: 你的基础怎么样?

A2: 我是自学 Android,基础可能不是很好,但是我的动手能力很强。我可以一个人完成一个项目。

Q3: 你平时写代码时遇到问题都是怎么解决的?

A3: 网上找答案。

Q4: 在运用一个 Activity 中,你了解里面存在多少种设计模式?

A4: 我只听过设计模式,但没去看,以后打算看。

Q5: 你最近一个项目中,用到的一个最熟悉的开源项目是什么?

A5: Rxjava。

Q6: 你能给我阐述一下 Rxjava 的思路吗?

A6: (他把用法给我讲了一遍。)

Q7: 这个用法的背后知道为什么吗?

A7: 不知道。

后面我问了很多他在工作中实际用到的一些技术,基本上是知道怎么用,但不知道为什么。

从动手能力方面来看,他就是人们传统认为的那种 “聪明” 的人。从他脸上流露出的自信我相信这些应用都是他做的。但是,基于以下几点我淘汰了他:

1.基础很差。他虽然动手能力很强,但是对技术细节不理解。

2.写代码靠模仿。他对代码的认知还停留在 copy 和模仿阶段,如果不参考事例,就不会写代码。

3.创造力差。他适合一个萝卜一个坑的小公司或外包公司,但不适合创业公司,员工的创造力是创业公司渴望获得的。

4.有点骄傲。他可能认为自己是属于 “聪明” 那类的,而且不能发现自身的缺点、以及不太能接受别人对他的评价。在管理上会带来风险。

互联网行业中,很多工程师和这位同学一样。这类同学统一犯了一个错误:被”简单”的技术蒙蔽了双眼,使得找不到进步方向和空间。

2他很踏实,而且很有想法

这位同学是一位 C++ 工程师。

我并没有从基础技能入手,而是直接了当地把想招他进来做什么事情告诉他。他刚开始显得很紧张,可能是觉得我面试的套路很奇怪吧。

为了了解他技术的深度,我开始围绕方案问技术的实现细节。比如,模块间的通信机制、事件队列的处理方法、数据共享的方式以及网络交互的实现细节等等。

这些技术细节非常考验局部架构能力,但他都能说出自己的见解。

我们最终讨论出了一套方案,并整理出了技术的难点。整个面试过程就像是一个方案讨论会,非常地自然。

在最后,我问他对这件事情有信心做吗?他的回答大致如下:

这件事情会很难,而且很多东西都没接触过。但是事情是可以的,也有价值。在具体实现上会遇到很多技术难点,需要花时间,但一定能做。

他虽然没有正面回答问题,但是我很满意。主要因为两点:第一,他能正确认识到事情的难度;第二,他不惧怕挑战。

至于信心这东西,和决策者的坚定目标有强烈的关系,团队的管理者有足够强的目标,同学们就会有足够的信心。他既然不惧怕挑战,在后续工作中我要不断为他输入信心。

面试结束后,我录取了这位同学。基于以下理由:

1.理解力强。他能非常快速地理解我的问题并作出回答。

2.想问题全面。他能由大面到小点,循序渐进改进解决方案。

3.勇于承认不足。虽然他面对没接触过的技术会主动承认不会,但还能提出个人观点。

4.善于发现细节。他非常善于捕捉设计方案的细节,提出的某些细节都直接关系到方案的成败。

在平时编程工作中,一个工程师是否厉害,并不能简简单单从代码能力一个点上来衡量,而是要结合场景。

这些场景包括:对所做事情的理解、对未来的把控、对异常的避免以及细节的处理。

3聪明和优秀程序员之间并无联系

为了减轻程序员大脑的负担,编程从机器语言发展到高级语言做了大量的改善,而且很多改善都是为了弥补人的智力缺陷。不信你看:

1.将系统 “分解”,易于人脑理解。

2.将子程序写得短小,减轻大脑负担。

3.基于面向对象编程而不是过程编程,易于人脑理解。

4.微服务化,减轻维护压力,减轻大脑负担。

5.制定各种编程规范,将思路从繁琐的编程中解放出来,避免犯错。

6.进行审查、评审和测试的流程,避免犯错。

也许有人会说更高的智商在编程上会有更好的作用。衡量一个工程师的水平高度不应该站在人的角度,而应该站在处理事情的角度

高智商的工程师可以写出更复杂无 bug 的系统,这确实是真的。但是写出的程序如果没有人能懂,没人能继续维护,这个复杂无 bug 的系统的价值就要大打折扣了。

千万别忘了,评价一个系统的好坏除了能正常运行之外,还要考虑可扩展性和易维护性。你考虑得越多,就需要你越注重细节处理。

如果你想学习编程,或者你正在学习编程,下面的建议可能对你有用:

1.优秀的程序员和高智商无太密切的联系。你越谦虚,进步就越快。

2.如何执着地用聪明的方式去处理事情,比你有多聪明更重要。

3.要想懂怎么写出优秀的代码,就得具备非常强的吸收细节的能力。

最后一点更重要。

不要轻易否定自己,你一定也能学会编程。

感谢大家阅读由Java职场分享的“像我这样不聪明的人,能学会Java吗?”希望对大家有所帮助,更多精彩内容请关注Java培训官网

免责声明:本文由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • 程序员进阶:成为更好程序员的8种途径
    程序员进阶:成为更好程序员的8种途径
    本文讲述了8种方式帮助你如何从一名普通的程序员进阶成为一名伟大的程序员,让我们就从此时此刻开始提高自己的开发技能吧。 详情>>

    2017-11-06

  • 1024程序员节
    1024程序员节
    1GB=1024M,而1GB与1级谐音,也有一级棒的意思。从2014年起,每年10月24日定义为程序员节。 详情>>

    2017-10-23

  • Java程序员面试失败的五大原因
    Java程序员面试失败的五大原因
    下面是 Java程序员面试失败最有可能的5大原因,当然也许这5点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容。 详情>>

    2017-10-25

  • Java开发工程师前途何在?
    Java开发工程师前途何在?
    经常听见有人这样说:现在JAVA开发工程师前途何在,到底有没有前途呢?怎样才能做一个好的JAVA工程师,我的路应该如何去走。我是新手,不知道这个专业怎么样,看见好多人都在埋怨软件开发辛苦、挣得少,事实如此吗? 详情>>

    2018-05-23

  • Java开班时间

    收起