大咖你好,做为一个编程初学者,有什么须要注意的?java
以上是一个读者流年似水的提问。我把他的问题置顶了,但一直没想好怎么回答,由于问题太过笼统了。后来,他也可能意识到了这一点,就又给我发了一条微信:程序员
在吗?老师。咱们做为新人应该在编写代码的过程当中注意哪些问题呢?算法
这个问题其实也不太好回答,由于要注意的问题蛮多的,多得就像雾霾中的颗粒。不过,有趣的是,流年似水这两次的提问中,对个人称呼大有不一样。编程
“大咖”中略带一些调皮,而“老师”就显得过于庄重了。凭良心说,我喜欢“老师”这个称谓。但我知道这顶皇冠戴我头上,会把我 185 的身高压扁到 173。再说,我也不是什么“大咖”,无非比较接地气一点,喜欢和读者交流的感受而已。设计模式
那么接下来,我就针对流年似水的提问,作一些回答。但愿对有相似问题的同窗起到一个参考的做用。性能优化
父亲老是喜欢教育我说,你要懂得人情世故,要学会与人打交道。诚然,父亲说得没有错,人情世故、与人沟通很是的重要,重要到缺乏这些会碰不少壁。微信
但我更但愿父亲教育我说:你做为一名程序员,要把编程吃透!人总要先把本职工做干好,才能去完善其余的软技能嘛。固然了,个人但愿是注定要落空的,由于父亲压根就不知道“程序员”是一个什么样的名词。数据结构
我是知道的,程序员(英文 Programmer)是从事程序开发、程序维护的专业人员。 那么做为一名拥有 10 年开发经验的老鸟,我认为程序员最核心的生存技能固然是熟练地掌握一门编程语言。这也是编程初学者最应该注意的,但每每会被忽视。并发
别的编程语言我不太懂,Java 我是懂的。假如你想把 Java 这门编程语言吃透,我建议你这么作。数据结构和算法
轻松驾驭 IDE,好比 Eclipse 和 IDEA。
快速查阅 Javadoc。
掌握流程控制语句。
理解类和对象。
掌握三大特性:封装、继承和多态。
会用接口。
懂得泛型。
掌握异常处理。
熟悉 java.util 和 java.lang 包下的类。
略懂 lambda 表达式和 Stream API。
掌握 IO 流。
会用 Socket 编程。
懂得性能优化。
会用 Junit 等单元测试工具。
会用 Log4J 等日志工具。
熟悉 Mybatis、MySql 和 Spring。
入门 SpringBoot。
熟悉设计模式。
熟练地掌握一门编程语言,就是程序员的立命之本。知道了本身是靠什么吃饭的,就应该在这方面狠下功夫。
提及数据结构和算法,我就以为很差意思,脸上泛起难为情的红晕。但为何我还要说呢?
由于我深受其苦。
我是一个农村走出来的娃,体会过其中的酸甜苦辣,因此我会奉劝各位,之后碰上什么知识分子上山下乡的活动,千万不要去。那不叫体验生活,那叫体验“艰苦”生活。
那在敲代码的过程当中,我就常常遇到一些实际的问题,因为没法充分利用数据结构,将数据之间的关系经过合适的算法策略进行有效地存储转换,就致使程序的性能很低。
因此我劝各位新人,趁有大把的时间和精力,多投入一点到数据结构和算法上面去。基础知识就像是一座大楼的地基,它决定了咱们的技术高度。数据结构和算法就是最重要的基础知识,学习它们的过程就像是在打地基。
上面这张思惟导图提到的数据结构在工做当中太常用了,频率高得就像隔三差五会看到隔壁老王这个词同样。
对于算法,若是以为《算法导论》这本鸿篇巨制太过枯燥的话,能够选择《趣学算法》、《啊哈算法》等一些非译做的,相对趣味化的入门书。
可能不少人会存在这样一个误区:算法在工做当中不多会用到,须要的时候面向搜索引擎解决一下就好了。
但我想说的是,跳槽的时候颇有用,由于一些大厂就喜欢考算法。除此以外,算法对阅读源码也颇有帮助;何况,谁不想作一名编程的艺术家呢?长期来看,大脑思考能力是一我的最重要的核心竞争力,而算法是为数很少的可以有效训练大脑思考能力的途径之一。
为何开发还须要了解测试?
天真了吧!自古以来(其实也没多久了),程序员就身兼两职,既是开发工程师,又是测试工程师。
说到这,不禁得想起一段伤心的往事。在我刚作 Team Leader 的时候,手下有一名新人叫小董,他居然使用“=”号操做符而不是“==”操做符做为 if 语句的条件判断。
可能不少读者不相信:“怎么可能啊???IDE 会检测出来的!”交代一下背景,当时用的语言叫 ActionScript,和 Flex 配套开发富客户端页面——八年前了,估计没几个读者知道这门技术了。
领导在日本出差,代码 Review 的时候被日方负责人查了出来,领导当场被骂得狗血喷头,没脸见人。个人遭遇可想而知,被领导骂得在厕所里面委屈地默默落泪,毕竟我是代码负责人。
差点乌纱帽就丢了。这让我对那些写完代码不作测试的程序员恨得牙痒痒。
从那之后,我就养成了一个好习惯(甚至说是强迫症),全部我负责的代码(包括我本身写的),在提交以前,代码 review、集成测试一个都不能少,提交代码的时候仍然要再次比对,确认无误后再提交。
建议你们了解一下测试驱动开发,英文缩写为 TDD,以前蛮流行的一种开发方式。测试与开发应该是相辅相成的关系。
规范化的代码看起来赏心悦目,让人仿佛置身于中世纪的哥特建筑中。
这里必须提一提 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)多看看阿里巴巴的开发手册,里面的一些建议仍是很是值得参照的。
记住这句话:任何一个傻瓜都能写出计算机能够理解的代码,惟有写出人类容易理解的代码,才是优秀的程序员。编码规范能够改善代码的可读性,让协做的同行拥有一个美丽的心情。
在我最初参加工做的时候,源码管理工具用的仍是 CVS,后来迁移到 SVN。近些年来,选择 Git 的程序员渐渐多了起来。
记得我刚开始用 CVS 的时候,常常弄丢版本,被领导批评过不少次,由于用的不熟(忍不住伤感)。幸亏当时负责的代码都不怎么重要,丢了还能够重写。
那为何要使用源码管理工具呢?答案以下。
除此以外,还有一个重要的做用,防止甩锅!你们都懂吧。
好了各位读者朋友们,以上就是本文的所有内容了。能看到这里的都是人才,二哥必需要为你点个赞👍。若是以为不过瘾,还想看到更多,能够查看个人我的博客。另外呢,给你们一个承诺,我每周都会更新一篇《程序人生》和一篇 Java 技术栈相关的文章,敬请期待。若是你有什么问题须要个人帮助,或者想喷我了,欢迎留言哟。
养成好习惯!若是以为这篇文章有点用的话,求点赞、求关注、求分享、求留言,这将是我写下去的最强动力!若是你们想要第一时间看到二哥更新的文章,能够扫描下方的二维码,关注个人公众号。咱们下篇文章见!