技术趋势和如何面对技术


陈皓 2012年10月 技术趋势 如何面对技术 个人简介 • 行业背景 • 金融行业(Thomson Reuters) • 计算平台(Platform) • 电子商务(Amazon) • 技术背景 • C/C++/Java • Unix/Linux/Windows • Web Weibo: @左耳朵耗子 Twitter: @haoel Blog: http://coolshell.cn/ 我的个性 • 码农兼包工头 • 敏捷恐怖分子 • Unix/Linux/C/C++脑残粉 • C2C痛恨者 • CSDN腾讯百度批评人 • “技术部门无技术种族”歧视者 • 程序员文化民族主义者 大纲 • 编程语言的变迁 • 系统架构的变迁 • 技术人员的发展 编程语言的变迁 主流语言的进化 • 静态语言 • C  C++  Java / C# • 脚本语言(动态语言) • Shell(grep, sed, awk …)  Perl / PHP / Ruby / Python • 跨平台 • 编译器 虚拟机 JVM  解释器 基于JVM的语言 • 编程方式 • 面向过程  泛型 / 面向对象 / 函数式 组件/ 服务 C语言 • C语言可以学到什么? • 内存管理的基础 • 程序编译的过程(预编译,编译,链接) • 程序的执行效率 • 用C语言实现数据结构和算法 • 操作系统的系统调用 • 学好C语言有什么用? • 很多语言都借鉴于C语言,如:C++,C#, D, Go, Java, JavaScript, Limbo, LPC, Objective-C, Perl, PHP, Python, Unix Shell • 了解系统底层,系统调优,任何东西都会反馈到操作系统层。 缅怀 C  C++ • C++ 填C的坑 • 结构体的内存问题(拷贝构造,赋值函数) • 宏的问题 (const/inline/template) • 指针的问题(引用,RTTI) • 类型转换问题(四种cast) • 封装和重载问题 • 资源回收问题(RAII – 智能指针) • 大量的if-else多种逻辑混在一起的问题(面向对象,泛型) • C++ 的强大之处是 “泛型编程” • C++ 的危险之处是“滥用” C/C++  JAVA • Java解决C/C++的问题 • 指针的各种问题(引用) • 内存管理的各种问题(垃圾回收) • 错误处理(异常) • 纯面向对象(接口编程) • 跨平台问题(JVM) • 程序模块的耦合(反射,动态代理  IOC/AOP) • Java 的强大之处在于“面向对象”和“J2EE系统框架” • Java 的问题在屏蔽底层细节 动态语言 • Python • Mutable type • 无需链接,无需编译,模块拿来就用 • 语言更简洁,数据操作更自然 • 支持命令式编程,面向对象,函数式,面向切面,泛型 • 完美地结合C, C++, Java 和Unix Shell • “用一种方法,最好只有一种方法来干一件事” • 优势:生产率,自然,灵活,…… • 劣势:性能 基于JVM的语言 • 企图使用JVM对脚本语言优化 • 更好的GC,更好的异步I/O, JVM优化,JIT • 主流的基于JVM的语言 • 动态脚本:Jython, JRuby, Groovy • 静态语言: Scala 我们看到了什么? • 运行性能 • 使用更少的资源 • 代码的优化 • 开发效率 • 简化开发 —— 模块化,框架,架构 • 降低维护成本 —— 易测,易读,易维护,可重用 系统架构的变迁 单机时代 • 数据库、SQL、业务逻辑、界面全在一台机器 • 一些技术 • Foxbase / Foxpro • VB + Access • Delphi + Interbase • 特点 • 专人操作 客户端/ 服务器时代 • 服务器端  数据库 • 客户端  界面,业务逻辑,SQL • 主流相关技术 • Powerbuilder + IDBC/ADO + SQL Server • Delphi + IDBC/ADO +SQL Server • C/C++ + EC + RDBMS • 特点 • 多从并发操作 • 软件升级麻烦,服务器负载重 浏览器/ 服务器时代 • 服务器  Web, UI, 业务逻辑,SQL,RDMBS • 客户端  浏览器 • 主流相关技术 • LAMP • IIS+ Delphi + CGI/ISAPI + ODBC/ADO + RDBMS • Tomcat+ JSP/Servlet + JDBC + RDBMS • IIS+ ASP + ODBC/ADO + RDBMS • ActiveX • 特点 • 升级容易了 • 负载没有解决,单点故障 三层结构 • 数据库服务器  数据存储 • 应用服务器  业务逻辑,SQL • Web服务器  UI • 主流相关技术 • J2EE - Websphere / WebLogic • 中间件 IBM CICS, BEA Tuxedo • RPC • COM, CORBA • 特点 • 负载可控了,升级容易 • 但还是有单点故障 分布式计算 • 数据库服务器分布式 • 应用服务器分布式 • Web前端服务器分布式 • 相关主流技术 • 集群技术、虚执化技术 • 高性能,高可用性 • 数据库同步、分区。 • 缓冲机制。NoSQL – MongoDB, Redis … • 消息机制。JMS, MessgeQueue, Thrift … • 异步机制。Workflow Engine, Pub/Sub … • 负载均衡。 • 分布式一致性是难点 还有一些事情 • IBM的SOA构架 • 以分布式系统为基础,将程序功能作为服务发布给用户或其他服务 • IBM的IT服务外包 • Network Computer • 计算机终端的一个升级版,很像今天的移动端 • Grid Computing • 整合异构的资源提供统一的计算或数据服务 • SaaS – Software As A Service • Sales Force, Blog, Email, Online Survey, Google Share Doc, etc. • P2P技术 • 无中心结点,自己即是服务端又是客户端,随时加入和离开 这些东西都在预示着以高可用分布式集群为基础的计算服务的出现 云计算 • Infrastructure as a service (IaaS) • Platform as a service (PaaS) • Software as a service (SaaS) • Storage as a service (STaaS) • Security as a service (SECaaS) • Data as a service (DaaS) • Test environment as a service (TEaaS) • Desktop as a service (DaaS) • API as a service (APIaaS) 摘自Wikipedia: http://en.wikipedia.org/wiki/Cloud_computing 我们看到了什么? • 性能 • 运维 • 服务 我们看到了什么? • 性能 • 性能越来越成为主要技术问题 • 国内对性能的技术掌握得越来越成熟 • 运维 • 运维的能力越来越重要 • 国内的有相当水准的运维能力的人才缺口很大 • 服务 • 国内的云平台对云服务的理解还不够 • 开放平台/云服务是帮助别人,而不是丰富自己 预测一下未来 • 性能 • 处理大量数据和请求的性能 • 节省更多的资源 • 运维 • 部署、监控大量虚拟机的能力 • 自动化运维的能力(自己发现问题,自己解决问题) • 服务 • 提供基础架构服务  提供更多更强的通用性的业务应用服务 • 被动服务  主动服务 (像CDN或搜索引擎一样) 其它技术 其它技术 • 操作系统 –POSIX 标准(基本没变) • 网络协议 – TCP/UDP – Socket(基本没变) • I/O模型 (异步) • 设计(从Unix出现以来,在设计的理念上没什么变化) • 模块依赖  接口依赖 • 低耦合,高内聚,拼装 • 测试/部署(自动化越来越成为发展趋势) • 数据库(RDBMS  NoSQL  RDBMS) • NoSQL的进化逐渐向RDBMS靠近 • 前端(PC  Web  移动  Web) • Native 的移动端 在性能上有优势,但在移植性上有问题 • 如果移动设备上的性能问题得到解决,HTML5/CSS3/JS会再卷土重来 怎么面对技术 如何了解技术发展的趋势 • 回顾历史,切勿追新 • 朝着球的运动的方向去,而不是球的当前位置 • 注重基础,了解原理 • 基础上的东西的变化少,基础上的东西一通百通 • 多看多想,多多实践 • 国外的站点:Wikipedia, Hacker News, StackOverflow, GitHub, Reddit, Stanford Online Course, …. 纲举目张 与其去张一个一个的网眼,不如拿住总线,一举,全部网眼就张开了 技术方面 • 语言 (逻辑控制) • 算法 + 数据结构 (数据处理) • 系统 (内存,文件,I/O,网络,进程/线程,UI) • 设计(代码组织,模块组织,集成,扩展,部署) • 工具(开发调试,版本管理,测试,部署,监控) 这些技术看似很多,但只要拿住总绳,踏踏实实,并不难学,很多东西大同小异 软件开发的“三重门” • 1、业务功能 – 粗放地开垦 (劳动密集型公司) • 使用各种编程语言工具堆功能 • 把代码组织好 • 2、业务性能 – 扩大化生产(技术型公司,工程师文化) • 深入了解技术的原理和基础 • 把程序和软件设计好 • 3、业务智能 – 精耕细作(创新型公司) • 机器学习,数据挖掘,算法,数据,统计学,人工智能…… 详见:http://coolshell.cn/articles/6526.html 未来必然是精耕细作的年代 态度方面 • 技术无贵贱,不要挑食 • 前端和后端一样,都是编程。前端侧重用户的嗅觉,后端侧重 各种机制原理的深入。 • “我会在我需要的时候再学” • 你不可能学习那些你以为不存在的东西 • 是人都能做网站,但不是每个人都能做出支持百万用户的网站 • 广度的知识是深度研究的副产品 • 死记硬背 vs 深度研究 • Wikipedia一个词条会引发出一堆词条 • 和高手工作 • 重要的是你要让高手想和你一起工作 详见:http://coolshell.cn/articles/4235.html 态度方面 • 对技术有热情就是不给自己找借口 • 我没有时间,我太忙,所以我没学 • 我没有经历过这样的项目,所以我不会 • 对于某些事情,如果以前没有在你身上发生过,那么这个事情 在未来也不会发生。 • 挑战无处不在 • 那怕是一个很小的功能做到极致都有很大的挑战(如用户登录) • 我们的身边有很多很多的东西都应该让我们去思考去求解 • 把一个简单的东西当成一件艺术品来雕琢 详见:http://coolshell.cn/articles/7048.html 选择 • “出世”和“入世” • 内心中不要对现实妥协, • 坚持住自己的原则和标准,等待一个属于自己的机会。 • 眼界和经历最重要 • 技术不懂可以学,可以努力 • 眼办和经历根本没法通过努力得到 • 和有激情能做事的人做有意义的事 • 时间又有限,只能经历自己最想经历的事,应该善用之 三个问题 • 每天早晨,是什么驱动着你开始新的一天? • 你现在的正在经历的有没有让你感到兴奋? • 你过去有没有荒度,有没有退缩? 谢谢!
还剩38页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

boboiask

贡献于2012-11-08

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf