32

@程序员,请掌握这些核心生存技能

 4 years ago
source link: http://www.cnblogs.com/qing-gee/p/12014503.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

大咖你好,作为一个编程初学者,有什么需要注意的?

以上是一个读者流年似水的提问。我把他的问题置顶了,但一直没想好怎么回答,因为问题太过笼统了。后来,他也可能意识到了这一点,就又给我发了一条微信:

在吗?老师。我们作为新人应该在编写代码的过程中注意哪些问题呢?

这个问题其实也不太好回答,因为要注意的问题蛮多的,多得就像雾霾中的颗粒。不过,有趣的是,流年似水这两次的提问中,对我的称呼大有不同。

“大咖”中略带一些调皮,而“老师”就显得过于庄重了。凭良心说,我喜欢“老师”这个称谓。但我知道这顶皇冠戴我头上,会把我 185 的身高压扁到 173。再说,我也不是什么“大咖”,无非比较接地气一点,喜欢和读者交流的感觉而已。

那么接下来,我就针对流年似水的提问,做一些回答。希望对有类似问题的同学起到一个参考的作用。

01、把编程吃透

父亲总是喜欢教育我说,你要懂得人情世故,要学会与人打交道。诚然,父亲说得没有错,人情世故、与人沟通非常的重要,重要到缺少这些会碰很多壁。

但我更希望父亲教育我说: 你作为一名程序员,要把编程吃透 !人总要先把本职工作干好,才能去完善其他的软技能嘛。当然了,我的希望是注定要落空的,因为父亲压根就不知道“程序员”是一个什么样的名词。

我是知道的,程序员(英文 Programmer)是从事程序开发、程序维护的专业人员。 那么作为一名拥有 10 年开发经验的老鸟,我认为 程序员最核心的生存技能当然是熟练地掌握一门编程语言 。这也是编程初学者最应该注意的,但往往会被忽视。

别的编程语言我不太懂,Java 我是懂的。假如你想把 Java 这门编程语言吃透,我建议你这么做。

  • 轻松驾驭 IDE,比如 Eclipse 和 IDEA。

  • 快速查阅 Javadoc。

  • 掌握流程控制语句。

  • 理解类和对象。

  • 掌握三大特性:封装、继承和多态。

  • 会用 接口

  • 懂得泛型。

  • 掌握异常处理。

  • 熟悉 java.util 和 java.lang 包下的类。

  • 略懂 lambda 表达式和 Stream API。

  • 掌握 IO 流。

  • 会用 Socket 编程。

  • 掌握并发编程

  • 懂得性能优化。

  • 会用 Junit 等单元测试工具。

  • 会用 Log4J 等日志工具。

  • 熟悉 Mybatis、MySql 和 Spring。

  • 入门 SpringBoot。

  • 熟悉设计模式。

熟练地掌握一门编程语言,就是程序员的立命之本。知道了自己是靠什么吃饭的,就应该在这方面狠下功夫。

02、巧用数据结构和算法

说起数据结构和算法,我就觉得不好意思,脸上泛起难为情的红晕。但为什么我还要说呢?

因为我深受其苦。

我是一个农村走出来的娃,体会过其中的酸甜苦辣,所以我会奉劝各位,以后碰上什么知识分子上山下乡的活动,千万不要去。那不叫体验生活,那叫体验“艰苦”生活。

那在敲代码的过程中,我就经常遇到一些实际的问题,由于无法充分利用数据结构,将数据之间的关系通过合适的算法策略进行有效地存储转换,就导致程序的性能很低。

所以我劝各位新人,趁有大把的时间和精力,多投入一点到数据结构和算法上面去。基础知识就像是一座大楼的地基,它决定了我们的技术高度。数据结构和算法就是最重要的基础知识,学习它们的过程就像是在打地基。

RzQBZza.png!web

上面这张思维导图提到的数据结构在工作当中太经常使用了,频率高得就像隔三差五会看到隔壁老王这个词一样。

对于算法,如果觉得《算法导论》这本鸿篇巨制太过枯燥的话,可以选择《趣学算法》、《啊哈算法》等一些非译作的,相对趣味化的入门书。

可能很多人会存在这样一个误区:算法在工作当中很少会用到,需要的时候面向搜索引擎解决一下就行了。

但我想说的是,跳槽的时候很有用,因为一些大厂就喜欢考算法。除此之外,算法对阅读源码也很有帮助;况且,谁不想做一名编程的艺术家呢?长期来看,大脑思考能力是一个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。

03、学会测试

为什么开发还需要了解测试?

天真了吧!自古以来(其实也没多久了),程序员就身兼两职,既是开发工程师,又是测试工程师。

说到这,不由得想起一段伤心的往事。在我刚做 Team Leader 的时候,手下有一名新人叫小董,他竟然使用“=”号操作符而不是“==”操作符作为 if 语句的条件判断。

可能很多读者不相信:“怎么可能啊???IDE 会检测出来的!”交代一下背景,当时用的语言叫 ActionScript,和 Flex 配套开发富客户端页面——八年前了,估计没几个读者知道这门技术了。

领导在日本出差,代码 Review 的时候被日方负责人查了出来,领导当场被骂得狗血喷头,没脸见人。我的遭遇可想而知,被领导骂得在厕所里面委屈地默默落泪,毕竟我是代码负责人。

差点乌纱帽就丢了。这让我对那些写完代码不做测试的程序员恨得牙痒痒。

从那以后,我就养成了一个好习惯(甚至说是强迫症),所有我负责的代码(包括我自己写的),在提交之前,代码 review、集成测试一个都不能少,提交代码的时候仍然要再次比对,确认无误后再提交。

建议大家了解一下 测试驱动开发 ,英文缩写为 TDD,之前蛮流行的一种开发方式。测试与开发应该是相辅相成的关系。

04、编码规范

规范化的代码看起来赏心悦目,让人仿佛置身于中世纪的哥特建筑中。

这里必须提一提 Bob 大叔的《代码整洁之道》,这是一本每个程序员都要读的好书。里面提到的 KISS(Keep It Simple Stupid)原则,非常值得推崇。比如说:

  • 整洁代码力求专注,每个函数、每个类和每个模块都应该全神贯注于一件事。

  • 整洁代码简单直接,从不隐藏设计者的意图。

  • 整洁代码使用有意义的命名,代码通过其字面表达含义。

  • 整洁代码力求消除重复代码,提高代码表达力。

来看这样一段非常糟糕的代码。

private boolean isEligible(int age){
  boolean result;
  if(age > 18){
    result = true;
  }else{
    result = false;
  }
  return result;
}

你能从中挑出几个问题呢?

1) ){ 之间没有空格。

2) return 语句太多了。

3)代码过于臃肿。

优化后的代码是这样子的。

private boolean isEligible(int age) {
  return age > 18;
}

那怎么写出规范化的代码呢?

1)找一份规范的代码模板,导入到 IDE 中,保存代码之前进行格式化。

2)使用 CheckStyle 或者 FindBugs 对代码进行检查,规避一些新手爱犯的低级错误。

3)多看看阿里巴巴的开发手册,里面的一些建议还是非常值得参照的。

3uUBre3.png!web

记住这句话: 任何一个傻瓜都能写出计算机可以理解的代码,唯有写出人类容易理解的代码,才是优秀的程序员 。编码规范可以改善代码的可读性,让协作的同行拥有一个美丽的心情。

05、源码管理

在我最初参加工作的时候,源码管理工具用的还是 CVS,后来迁移到 SVN。近些年来,选择 Git 的程序员渐渐多了起来。

记得我刚开始用 CVS 的时候,经常弄丢版本,被领导批评过很多次,因为用的不熟(忍不住伤感)。幸好当时负责的代码都不怎么重要,丢了还可以重写。

那为什么要使用源码管理工具呢?答案如下。

  • 多人并行开发
  • 多人协作同一份代码
  • 历史版本管理

除此之外,还有一个重要的作用,防止甩锅!大家都懂吧。

06、鸣谢

好了各位读者朋友们,以上就是本文的全部内容了。 能看到这里的都是人才,二哥必须要为你点个赞 :+1:。如果觉得不过瘾,还想看到更多,可以查看我的 个人博客 。另外呢,给大家一个承诺,我每周都会更新一篇《程序人生》和一篇 Java 技术栈相关的文章,敬请期待。 如果你有什么问题需要我的帮助,或者想喷我了,欢迎留言哟

养成好习惯!如果觉得这篇文章有点用的话, 求点赞、求关注、求分享、求留言 ,这将是我写下去的最强动力!如果大家想要第一时间看到二哥更新的文章,可以扫描下方的二维码,关注我的公众号。我们下篇文章见!

n6NBj2B.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK