左耳朵耗子- 技术博客学习

1.通过在公司工作提高自己的技能,让自己可以更为独立和自由地生活。

2.对于没什么技术含量的工作内容,提高交付效率。把时间用来研究高技术含量的知识。
3.要写文章就写别人没有写过的,或是别人写过,但我能写得更好的。
4.看清市场需求(各个公司正在做什么,难题是什么)和技术趋势(首先要了解技术的历史,把本质吃透:看经典书籍,向前沿学习)
5.在学习技术的过程一定要多问自己两个问题:“一,这个技术解决什么问题?为什么别的同类技术做不到?二,为什么是这样解决的?有没有更好的方式?”另外,还有一个简单的判断方法,如果一个新的技术顺应技术发展趋势,那么在这个新的技术出现时,后面一定会有大型的商业公司支持(专门做此类技术的公司),这类公司支持得越多,就说明你越需要关注。
6.在一家高速发展的公司中,技术人员的价值可以达到最大化。比较好的成长路径是,先进入大公司学习大公司的技术和成功的经验,然后再找到高速成长的公司,这样你就可以实现自己更多的价值。
7.动手能力很重要,持续在前线工作。
8.关注技术付费点:一个是,能帮别人“挣钱”的地方;另一个是,能帮别人“省钱”的地方。
9.提高自己的能力和经历。
找到有价值的信息源(知识的源头:西方世界) ,最好的技术在西方: google (xxx_技术 best practice/programming , Best programming resource);
10.输出观点和价值观,只有输出了更先进的价值观,才会获得真正的影响力(厚积薄发的过程)
11.优质的朋友圈。

 

12 . 编程范式:各种编程语言都有它们各自的编程范式,用于解决各种问题。比如面向对象编程(C++、Java)、泛型编程(C++、Go、C#)、函数式编程(JavaScript、 Python、Lisp、Haskell、Erlang)等。学好编程范式,有助于培养你的抽象思维,同时也可以提高编程效率,提高程序的结构合理性、可读性和可维护性,降低代码的冗余度,进而提高代码的运行效率。要学习编程范式,你还可以多了解各种程序设计语言的功能特性。

13.学习至少6种(我不太清楚英语中的half dozen是什么意思,是虚指还是就是6种)编程语言。这6种语言中,包括一种支持抽象类的(例如Java或者C++),一种支持函数的(Lisp, ML或者Haskell),一种支持语义抽象的(Lisp),一种支持声明规范的(Prolog或者C++模板),还有一种支持并发的(Clojure或Go)。

14. 编程的本质

 

function check_form_x() {
    var name = $('#name').val();
    if (null == name || name.length <= 3) {
        return { status : 1, message: 'Invalid name' };
    }
 
    var password = $('#password').val();
    if (null == password || password.length <= 8) {
        return { status : 2, message: 'Invalid password' };
    }
 
    var repeat_password = $('#repeat_password').val();
    if (repeat_password != password.length) {
        return { status : 3, message: 'Password and repeat password mismatch' };
    }
 
    var email = $('#email').val();
    if (check_email_format(email)) {
        return { status : 4, message: 'Invalid email' };
    }
 
    ...
 
    return { status : 0, message: 'OK' };
 
}

采用一个DSL + 一个DSL的解析器来进行优化:

var meta_create_user = {
    form_id : 'create_user',
    fields : [
        { id : 'name', type : 'text', min_length : 3 },
        { id : 'password', type : 'password', min_length : 8 },
        { id : 'repeat-password', type : 'password', min_length : 8 },
        { id : 'email', type : 'email' }
    ]
};
 
var r = check_form(meta_create_user);

DSL 的描述是“Logic”,而我们的 check_form 则成了“Control”,代码就非常好看了。

如何分离 control 和 logic 呢?我们可以使用下面的这些技术来解耦。

State Machine:状态定义,状态变迁条件,状态的 action

DSL – Domain Specific LanguageHTML,SQL,Unix Shell Script,AWK,正则表达式……

编程范式面向对象:委托、策略、桥接、修饰、IoC/DIP、MVC……

函数式编程:修饰、管道、拼装

逻辑推导式编程:Prolog

这就是编程的本质:Logic 部分才是真正有意义的(What),Control 部分只是影响 Logic 部分的效率(How)。

posted on 2020-05-13 09:33  KHacker  阅读(1897)  评论(0编辑  收藏  举报