关于提高编程速度的一些杂谈
首先感谢实验室各位前辈的指导。在本文中您可以了解到如下信息:
1.提高编程速度的意义
2.怎么调高编程速度
3.我的一些实际经历
提高编程速度的意义
说明这个问题之前,我们首先需要知道在完成一个项目中,我们究竟做了哪些事情。笼统的说,在完成一个项目之前,我们可能先了解了软件的需求,然后对软件的逻辑和架构做了一些规划,之后可能对软件的各种接口,各个部分的设计会做进一步的分析,然后就是完成代码的编写。
随着我们完成的项目的增多,我们对软件的设计和代码编写的能力都会有所提高,但是我们往往更多关注的是如何提高自己对项目的把控能力,而忽视对于代码编写能力的提升,以至于到后来会发现严重限制我们软件分析架构能力发展的是我们慢的令人发指的代码编写能力,具体表现为在完全清楚软件编写的各个环节的情况下还是会花大量的时间去编写代码,并且编写的代码质量很差,最可怕的是我们还不能意识到导致这种情况的原因是什么。
那么,提高编程速度之后我们会发生什么变化,首先,当我们编程的速度和正确率能够和我们思考的速度匹配的时候,我们脑海中所想的会自然而然的变成我们指尖的代码,而编程的速度和正确率相差较大的时候,我们往往不得不在思考一段时间后,开始等待代码的完成,最可怕的是,写出来的代码还错误百出,这迫使我们花更多的时间来修改代码的错误,当我们完成这部分的代码后,发现我们的思路出现了断层,然后陷入恶性循环,这种方式相当于完全没有兼顾软件的整体结构,只是在一部分一部分的完成代码,完成的代码最有可能的情况就是没有明显的分层,没有一个整体的结构,各个代码块冗余繁杂,而为了解决这个问题,我们之后可能会额外的花大量的时间来修改代码以符合我们的要求。而提高编程速度之后我们可以有效解决这个问题,这就是另一个显著的变化,编程速度和正确率的提高使我们在编写代码的时间上显著减少,而提升思维的连贯性,这使得我们尽可能的将关注点放在整个项目上,这样我们可以兼顾到代码各个模块之间的联系和整个项目的层次结构。当然,这一切都可以使你的效率和代码质量得到提高,以给你更多时间去提升自己。
怎么提高编程速度
那么,当我们明白编程速度的重要性之后,不禁要问,如何提高编程的速度呢?这就要感谢李小波教练的分享了,我将从下面几个方面加以介绍:
1.基本功
首先肯定是基本功了,每个程序员都离不开打字这个技能,你打字的速度和正确率决定了你编写代码速度和正确率的底限,但是这是没有人可以帮你的。不过还是有一些有趣的事情可以介绍给大家,每个打字的人都离不开键盘,而我不久前才知道,原来我们现在所使用的键盘的布局不是最适合我们打字方式的布局,而这一切的原因竟然只是早期打字机的速度跟不上我们打字的速度,为了降低我们的打字速度,有意将键盘的布局做成这样,所以现在有一些针对程序员的多模式键盘,还有一种玩游戏较多的可编程键盘,以上两种键盘可以改变键盘的布局,但是这需要很长一段时间的适应,所以,这留待各位自己斟酌把。
2.智能的编译环境
有一句话是这样说的,不想偷懒的程序员不是一个好程序员,因为大牛想要偷懒,所以有了各种函数库,有了各种编译环境。凡是有能偷懒的地方,就有前辈在钻研。
所以,没有谁会强迫我们用记事本来写代码,尽管这是最强大的编写代码的工具。那么我们应该选择什么编译环境来帮助我们提高编写代码的速度和正确率呢?答案就是IntelliJ IDEA。在学校中我们可能没机会接触它,但是当你与它相遇,那么你就会为她的智能所折服,你很难再遇到一款比它还智能的开发软件。
IntelliJ IDEA最突出的两个方面,一方面是智能,简单来说就是他智能提示和补全代码的能力简直是可怕,以至于一行代码中也许只有一小半的字母是你自己敲上去的,而其他的代码全是它帮你补全的,当然,他不仅会帮你补全代码,也可以帮你补全你忘掉的各种符号,比如“;”,比如“{}”等等,另一个方面就是快捷键,没有那一款开发工具能提供如此强大的快捷键功能以至于在IntelliJ IDEA环境中开发代码是完全不需要鼠标的,熟练使用快捷键可以成倍提高编写代码的速度,丰富的快捷键提供了强大的代码编辑能力,代码重构能力,搜索替换功能,调试功能等,这些都使你变成速度的到提升的同时还优化了你的代码,使你的代码更有层次。(在后文有代码演示)
我的一些经历
在的知这款强大的开发工具之后,我做了如下尝试。(下面代码功能是读取一个txt文件的内容并且统计各个字符串出现的次数)
首先,我按以前惯用的方式完成了这个功能,写出来的代码如下:(大概花了20分钟)
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* Created by kh on 2017/3/26.
*/
public class test {
private String fileName;
private Map<String,String> map=new HashMap();
private void readFile()
{
File file = new File(fileName);
Reader reader = null;
try
{
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1)
{
if (((((char) tempchar) >= 'A') && (((char) tempchar) <= 'Z')) || ((((char) tempchar) >= 'a') && (((char) tempchar) <= 'z')))
{
if(map.containsKey(String.valueOf((char)tempchar))==true)
{
int count=Integer.parseInt(map.get(String.valueOf((char)tempchar)));
count++;
map.put(String.valueOf((char)tempchar),String.valueOf(count));
}
else
{
map.put(String.valueOf((char)tempchar),"1");
}
}
}
reader.close();
} catch (Exception e)
{
e.printStackTrace();
}finally
{
if (reader != null)
{
try
{
reader.close();
} catch (IOException e1)
{
}
}
}
}
private void show()
{
for(Map.Entry<String,String> entry:map.entrySet())
{
System.out.println("结果为:"+entry.getKey() + "," + entry.getValue());
}
}
private void setFileName() {
Scanner in=new Scanner(System.in);
System.out.println("请输入文件名:");
String fileName=in.nextLine();;
this.fileName = fileName;
}
public static void main(String[] args) {
test tt=new test();
tt.setFileName();
tt.readFile();
tt.show();
}
}
Paste_Image.png
然后我用纯键盘方式重写了这段代码(花了一部分时间去查快捷键......大概花了10多分钟)
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* Created by kh on 2017/3/26.
*/
public class test {
private String fileName;
private Map<String, String> map = new HashMap();
private File file;
private Reader reader;
private void readFile() {
file = new File(fileName);
try {
openReader();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeReader(reader);
}
}
private void openReader() throws IOException {
reader = new InputStreamReader(new FileInputStream(file));
doCount(reader);
reader.close();
}
private void closeReader(Reader reader) {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
private void doCount(Reader reader) throws IOException {
int tempchar;
while ((tempchar = reader.read()) != -1) {
doJudge((char) tempchar);
}
}
private void doJudge(char tempchar) {
if (((tempchar >= 'A') && (tempchar <= 'Z')) || ((tempchar >= 'a') && (tempchar <= 'z'))) {
if (map.containsKey(String.valueOf(tempchar)) == true) {
addMap(tempchar);
} else {
map.put(String.valueOf(tempchar), "1");
}
}
}
private void addMap(char tempchar) {
int count = Integer.parseInt(map.get(String.valueOf(tempchar)));
count++;
map.put(String.valueOf(tempchar), String.valueOf(count));
}
private void show() {
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("结果为:" + entry.getKey() + "," + entry.getValue());
}
}
private void setFileName() {
Scanner in = new Scanner(System.in);
System.out.println("请输入文件名:");
String fileName = in.nextLine();
this.fileName = fileName;
}
public static void main(String[] args) {
test tt = new test();
tt.setFileName();
tt.readFile();
tt.show();
}
}
Paste_Image.png
小结
关于IntelliJ IDEA的快捷键总结和使用技巧,在网上各位前辈的总结十分详实,在这里我就不在贴出相关资源,最重要的是不管是基本功还是IntelliJ IDEA,想要熟练掌握都需要大量的练习,希望大家可以将这些东西应用在平时的学习和生活中,相信大家的编程能力在一段时间后会有一个显著的提升,望与诸君共勉之。