扒一扒那些和编程语言无关的技术

这世界上编程语言如此之多,想学完是不可能的,也是没有必要的。

一般来说,一个人能精通一门语言,然后会使用另外一种语言就不错了。

既然编程语言学不完,能不能把重点放到编程语言无关的技术上呢?

首先能想到的就是数据结构和算法,它的重要性已经不用再强调了,直接跳过。

“负载均衡,分布式,集群,高可用......” 这些“高深”的技术在日常Coding也不常用, 略过不谈,主要扒一扒工程中常用的、编程语言无关的具体技术。

1HTTP

HTTP诞生于1991年,是互联网领域一个基石性的协议。全世界电脑上的内容能互联起来,全拜HTTP所赐。

程序员主要通过HTTP来传输XML, JSON等数据。日常使用的就是GET、POST方法,但HTTP可不仅仅只有这些,它的细节相当多, 我觉得程序员至少应该掌握这些:

Cookie: domain, path, expiration

HTTP状态码

HTTP长连接 ,由此扩展到websocket。

HTTP重定向 ,非常有用的技术,对理解OAuth, CAS(SSO)很有帮助。

缓存 :Last-Modified和ETag

chunked :分块传输

代理:正向代理/反向代理

推荐书籍

《图解HTTP》

《HTTP权威指南》

码农翻身文章:

小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?

从密码到token, 一个授权的故事

机房夜话

2socket

socket是对TCP/IP的抽象, 网络编程肯定绕不过socket,绝大部分语言都提供了socket相关的API。

工作中直接对socket编程的机会不多,大多都是封装好的, 但是要理解socket在客户端和服务器端的区别,服务器端是如何维护连接的, 这就会引出一个重要的技术:I/O多路复用(select/poll/epoll) ,也是ngnix,redis等著名软件的基础。

I/O多路复用是I/O模型之一,其他还有同步阻塞,同步非阻塞,信号驱动和异步。

这方面最经典的书应该是《Unix网络编程了》。

码农翻身文章:

张大胖的socket

HTTP Server :一个差生的逆袭

3安全基础

如果说socket,HTTP建立了传输的通道,Hash技术,对称/非对称加密, 数字签名等安全基础就是安全的守护者。

去看看最近大热的区块链,会发现这些安全基础是区块链基本的技术支撑。

他们是如此重要,到处都能看到他们的身影:

HTTPS:使用“非对称加密”来传输“对称加密的密钥”,使用Hash,数字签名来确保身份的合法性。

Secure Shell : 使用RSA的方式登录服务器

Hash的用途更为广泛:

用户密码的存储: 现在基本上没有网站存储明文密码了,基本上都是把密码加salt生成hash 值以后来保存。

HashMap等数据结构: 使用Hash来生成key 。

Memcached :分布式一致性Hash算法。

文件传输校验: 使用Hash算法生成消息摘要,验证文件是否被篡改。

如果是做Web开发,还必须得掌握XSS/CSRF/SQL注入等常见的Web攻击技术和和应对方案

推荐书籍:

《白帽子讲安全》

码农翻身文章:

一个故事讲完HTTPS

黑客三兄弟

黑客三兄弟续

4并发编程

这是一个编程中绕不过的主题,单个线程的状态变化, 多线程的同步与互斥,各种各样的锁,死锁,ThreadLocal , volatile ,CAS...... 总之有点烦人。

扩展开去还有线程池,各种并发模型如Actor, Channel等等。

推荐书籍:

《实战Java高并发设计》

《七周七并发模型》

5OOD/OOP(面向对象的设计/编程)

只要使用面向对象编程语言,就要修炼OOD内功,用OO的语言写面向过程的程序实在是一件可悲的事情。

OOD/OOP的核心就是“抽象”, 什么是抽象? 其实就是摈弃了细节,找到那些本质不变的部分。 举个例子, Java中的List 是对一个可以通过下标顺序访问的集合的抽象,管你是什么ArrayList, LinkedList, 都是List。

有了“抽象”,就可以针对接口编程,而不是针对实现编程。就像一个领导,说话的层次高,说出的话比较含糊。

正是由于这个特点,具体的实现可以替换,可以扩展,灵活性很高。

说起来简单,做起来确很难,因为这个东西有点“玄妙”,需要自己去修炼,去体会哪些SOLID原则,去领悟设计模式背后的思想,而不是学习招式。

阅读优秀源码是个很好的途径,看看大牛们是怎么抽象出哪些“不变”的部分的。

推荐书籍:

《Head First设计模式》

《敏捷软件开发 原则、模式与实践》

6数据库

关系数据库也几乎是每个系统的必备,即使是Android开发也需要利用sqlite这样的轻型数据库。

所以程序员要会根据需求来设计表,掌握基本的SQL操作。

深入一点的话,事务和索引是理解关系数据库的两个重头戏。

需要理解事务的特性和隔离级别,理解Undo/Redo日志的原理。

理解MVCC这个常见的并发控制技术。

理解索引的实现原理,以及在特定数据库如MySQL的实现。查询和索引的关系。

码农翻身文章:

数据库村的旺财和小强

7函数式编程思想

函数式编程已经诞生很久很久了,虽然没有成为主流,但是它的思想却在很多语言中生根,发芽,结果。

很多语言都拥抱了函数式编程的思想,JavaScript,Python, Ruby, Scala..... 也包括非常“保守”的Java。

不仅如此,函数式编程中的Map 和 Reduce 的思想还在大数据的领域大放异彩。

我估计以后使用函数式编程的机会越来越多,了解它的思想有极大好处。

函数式编程的基本概念包括: 纯函数,不变量,递归,高阶函数。 高级一点的有Currying, 惰性求值,宏(macro)。

最著名的安利LISP的书就是《黑客与画家》

码农翻身相关文章:

函数式编程圣经

你为什么学习LISP

8测试和重构

掌握单元测试已经是程序员的必备技能了, 如果还不会的话,赶紧去补上吧。

需要注意的是,一定要让单元测试有这么几个特点:

1. 单元测试是“白盒测试”, 应该覆盖各个分支流程、异常条件

2. 单元测试面向的是一个单元("Unit"), 是java中的一个类或者几个类组成的单元。

3. 单元测试运行一定要快!

4. 单元测试一定是可重复执行的

5. 单元测试之间不能有相互依赖,应该是独立的。

6. 单元测试代码和业务代码同等重要, 要一并维护。

另外还有自动化的功能测试, 性能测试,都是应该了解,甚至掌握的技能。

重构也是一大技能,在保证功能不改变的情况下,让代码变得更好。

Martin Flower的书《重构》中介绍了巨多的重构方法, 我觉得最最常用的是两个:

变量重命名: 用清晰的名称体现代码的意图

提取函数:将大函数拆分成小函数,消除重复,让代码更容易阅读

当然,重构需要IDE的支持,在这一点上静态类型语言要比动态类型语言表现得更好。

推荐书籍

《重构》

码农翻身相关文章

张大胖的单元测试

9版本管理

公司的源码肯定是要纳入版本管理的,如果你的公司还在通过程序员之间复制的方式来共享代码,我建议马上跑路。

如今程序员也爱社交,不会使用Git/GitHub简直不好意思和人打招呼。

初学者不要把它想得很复杂,自己找个教程,动手做几次,很快就掌握了。

码农翻身相关文章

小李的版本管理系统

10正则表达式

这个不多说,对文本进行查找、替换非常有用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • 转自http://blog.csdn.net/xugangwen/article/details/44811783...
    扎Zn了老Fe阅读 12,722评论 1 142
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,090评论 25 707
  • 三月尚早,怎知春晓。 桃花一笑,潋滟迢迢。 清妆粉黛,英雄挚爱。 湖岸孤影,遥听笙箫。 ...
    有水有阳光阅读 388评论 2 5
  • 🤔 市场竞争激烈,尤其在零和博弈的市场环境,蛋糕就那么大,人们的需求也就那么多,怎么能够尽可能多的赚到钱? ...
    素书_阅读 207评论 0 1
  • 关于打麦场和螃蟹的记忆 原创2018-03-13朱禺之却步堂随笔 自小生活在鲁南平原一个偏僻小村,而且是极其贫困的...
    却步堂主阅读 310评论 0 0