一个让脑子快速进入编程状态的小Tip

写代码是门耗费脑力的手艺活。普通人一天约有40%的身体能量被大脑消耗,作为大脑的重度使用者,程序员每天对大脑的使用率可想而知。

特别是像我这样的高龄程序员,如果昨晚熬夜加过班,第二天一大早很容易脑子昏昏沉沉。

有很多大众鸡汤可以帮助Refresh Brain。比如:保持充足的睡眠,每天一杯咖啡,使用GTD,番茄工作类app,听听轻音乐等等。

今天给大家介绍一款适合程序员的小Tip。

这个Tip来自Robert C.Martin的经典书籍【clean code】or【代码简洁之道】。

从1970年开始专职写代码的Bob大叔,经过血与泪的摸索总结出了一个让大脑每天保持活跃的小技巧:

每天早晨在进入工作状态之前,先写一小段代码解决一个小问题。

这个小问题可以是任何问题,可以是经典的算法比如quick sort,也可以是工作当中需要一定思考才能解决的问题。每天早上把这个问题的解决思路花5-10分钟,用代码重演一遍。不用持之以恒,效果立竿见影。

这个办法之所以有效,在我看来,是因为大脑不用就会迟钝,懒和笨是形影不离的好兄弟。

所以明天早上,刷完微博,朋友圈和热点新闻后,来一段代码“热热脑”吧。

最后分享下我个人最近使用的样例,BFS(广度优先遍历)和DFS(深度优先遍历)的java实现。

关注我的应该大部分是iOS程序员,大家可以尝试写个Objective C或者Swift版本的BFS,DFS。

public class MainActivity extends AppCompatActivity {

    private List<List<Node>> graphList;

    public class Node{
        char nodeName;
        boolean isVisited;
        public Node(char name){
            nodeName = name;
        }

        public boolean isVisited() {
            return isVisited;
        }

        public void setVisited(boolean visited) {
            isVisited = visited;
        }

        public char getNodeName() {
            return nodeName;
        }

        public void printNode(){
            Log.d("DailyPractice", "printing graph node with name: " + nodeName);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //prepare test graph
        Node a = new Node('A');
        Node b = new Node('B');
        Node c = new Node('C');
        Node d = new Node('D');
        Node e = new Node('E');
        Node f = new Node('F');

        //use adjacency list to represent graph
        List<Node> aList = Arrays.asList(a, b, c, d);
        List<Node> bList = Arrays.asList(b, a, e, f);
        List<Node> cList = Arrays.asList(c, a, f);
        List<Node> dList = Arrays.asList(d, a);
        List<Node> eList = Arrays.asList(e, b);
        List<Node> fList = Arrays.asList(f, b, c);

        graphList = Arrays.asList(aList, bList, cList, dList, eList, fList);

        //start dfs : A B C D E F
        cleanTestData();
        dfs(a);

        //start bfs : A B C D E F
        cleanTestData();
        bfs(a);
    }

    public void dfs(Node root)
    {
        Log.d("DailyPractice", "begin dfs algorithm");
        Stack s = new Stack();
        root.setVisited(true);
        root.printNode();
        s.push(root);

        while (s.isEmpty() == false)
        {
            Node n = (Node)s.peek();
            Node child = getUnvisitedAdjacentNode(n);
            if (child != null){
                child.setVisited(true);
                child.printNode();
                s.push(child);
            }
            else
            {
                s.pop();
            }
        }
    }

    public void bfs(Node root)
    {
        Log.d("DailyPractice", "begin bfs algorithm");
        Queue<Node> q = new LinkedList<>();
        root.setVisited(true);
        root.printNode();
        q.add(root);

        while (q.isEmpty() == false)
        {
            Node node = q.peek();
            Node child = getUnvisitedAdjacentNode(node);
            if (child != null)
            {
                child.setVisited(true);
                child.printNode();
                q.add(child);
            }
            else
            {
                q.remove();
            }
        }

    }

    public Node getUnvisitedAdjacentNode(Node n){
        Node result = null;

        for (List<Node> list : graphList) {
            Node firstNode = list.get(0);
            if (firstNode.getNodeName() == n.getNodeName())
            {
                for (Node node : list)
                {
                    if (node.isVisited() == false)
                    {
                        result = node;
                        break;
                    }
                }
                break;
            }
        }

        return result;
    }

    public void cleanTestData()
    {
        for (List<Node> list : graphList)
        {
            for (Node node : list)
            {
                node.setVisited(false);
            }
        }
    }
}

欢迎关注公众号: