技术领导力

作为一名软件工程师,要让自己拥有技术领导力。

什么叫做技术领导力?

能够发现问题。能够发现现有方案的问题。

能够提供解决问题的思路和方案,并比较这些方案的优缺点。

能够做正确的技术决定。用什么样的技术、什么解决方案、怎么实现来完成一个项目。

能够更优雅,更简单,更容易的方式来解决问题。

能够提高代码或软件的拓展性、重用性和可维护性。

能够用正确的方式管理团队。所谓正确的方式,一方面是,让正确的人做正确的事,并发挥每个人的潜力;另一方面是,可以提高团队的生产力和人效,找到最有价值的需求,用最少的成本实现之。并且,可以不断地提高自身和团队的标准。

创新能力。能够用新的方法新的方式解决问题,追逐新的工具和技术。

如何让自己拥有技术领导力?

扎实的基础技术。

非同一般的学习能力。

坚持做正确的事。

不断提高对自己的要求标准。

基础技术

基础技术——编程部分

1、C语言,《C程序设计语言》第二版,(K&R);

    掌握程序的运行情况,进行应用程序和操作系统编程。

2、汇编范式;

    学习方法:了解各种程序设计语言的功能特性。

面向对象编程(C++、Java),泛型编程(C++、Go、C#、),函数式编程(JavaScript、Python、Lisp、Haskell、Erlang)

3、算法和数据结构

算法是编程中最最重要的东西,也是计算机科学中最重要的东西。

任何有技术含量的软件中一定有高级的算法和数据结构。

学习算法不仅是为了写出运转更高效的代码,而且更是为了能够写出覆盖更多应用场景的正确代码。

基础技术——系统部分

1、计算机系统原理

CPU的体系结构(指令集【CISC/RISC】、分支预测、缓存结构、总线、DMA、中断、陷阱、多任务、虚拟内存、虚拟化等),内存的原理和性能特点(SRAM、DRAM、DDR-SDRAM),磁盘的原理(机械硬盘[盘面、磁头臂、磁头、启停区、寻道等],固态硬盘[页映射、块的合并和回收算法、TRIM指令等],GPU的原理等。

学习目的:除了了解计算机的原理之外,还能举一反三地反推出高维度的分布式架构和高并发可用的架构设计。

阅读书籍:《深入理解计算机系统》Randal E.Bryant

2、操作系统原理和基础

进程、进程管理、线程、线程调度、多核的缓存一致性、信号量、物理内存管理、虚拟内存管理、内存分配、文件系统、磁盘管理等

学习途径:一、仔细观察和探索当前使用的操作系统;二、阅读讲操作系统原理的图书;三、阅读API文档(如man pages和MSDN Library)。

阅读书籍:《UNIX环境高级编程》、《UNIX网络编程》和《Windows核心编程》

3、网络基础

基本的网络层次结构(ISO/OSI模型、TCP/IP协议栈):包括物理层、数据链路层(包括错误重发机制)、网络层(包括路由机制)、传输层(包括连接保持机制)、会话层、表示层、应用层(在TCP/IP协议栈,这三层可以合并为一层)

比如,底层的ARP协议、中间的TCP/UDP协议,以及高层的Http协议。

阅读书籍:《TCP/IP详解》

4、数据库原理

流行的数据库系统分为两大类:SQL(基于B+树,强一致性)、NoSql(弱一致性、较高的存取效率,基于哈希表或其他技术)

学习方法:阅读各类数据库图书、并做到数据库操作以及数据库编程、多观察分析数据库在运行时的性能。

5、分布式系统架构

包括负载均衡、DNS解析、多子域名、无状态应用层、缓存层、数据库分片、容错和恢复机制、Paxos、Map/Reduce操作、分布式SQL数据库一致性(以Google Cloud Spanner为代表)等知识

学习方法:参与到分布式项目的开发中去,并阅读相关论文。

基础知识通常不是可以速成的,可以在一两年内看完书籍和论文。但基础知识需要用一生的时间学习,因为基础上的技术和知识,会随着阅历和经验的增加而有不同的感悟。

软实力

良好的沟通能力、组织能力、驱动力、团队协作能力。阅读书籍:《技术领导之路》、《卓有成效的管理者》。

其他

参考AWS的SWF;

程序员练级攻略;

了解编程范式是不是得学习编译原理。答:不一定,大多数情况下不用。

除了以上技术外,还建议熟悉数据仓库、人工智能、机器学习(深度学习、强化学习)、概率编程、自然语言处理、机器视觉。

你可能感兴趣的:(技术领导力)