`
runfeel
  • 浏览: 907646 次
文章分类
社区版块
存档分类
最新评论

我的技术心病

 
阅读更多

上图为本文的作者 Sasha Goldshtein,他是 SELA Group 公司的首席技术官,他是 Microsoft C# MVP(最有价值技术人员),是《Introducing Windows 7 for Developers》 (Microsoft Press 出版, 2009) 和 《Pro .NET Performance》 (Apress 出版, 2012) 两书的作者。他是一位多产的博客作家,是大量的培训教程的作者,内容包括并行编程、Windows Internals, .NET Debugging, 和 .NET 性能等。他的顾问工作主要围绕分布式架构和高性能系统。

  我发现,对我来说,使用一种新语言,新技术,新框架,最让我有压力的事情是,我在使用它们时不能完全明白它们的实现原理。我每周都要阅读数百篇关于讨论诸如各种 JavaScript 扩展、新的 iOS 应用框架,新的基于 Windows Azure 的 SaaS 等的博客文章。很显然,如果只是使用一些技术或采用一种框架来满足需求,这对于我通常不是很难的事情。问题是,如果我并不理解一个东西的工作原理或实现方法,我不能把它归入我已经掌握的知识。这也是“Not Invented Here (非我造不用)”毛病的一种表现吧,不同的是我并不是想真正的写出我自己的框架;我只是想做到我有能力写出它们。下面是我最近的一些例子。

  2011 年末,我开始学习 Node.js,2012 年间,我基于 Node、Express 以及其它很多 Node 模块,实现了数个私人或商业产品。我开始使用 Node 时非常犹豫,直到我完全掌握了它的基本原理——事件循环,异步无处不在的属性——这使我掌握了如何实现“类似 Node”之类东西的知识。有一段时间我甚至想写利用新的 C# 提供的 async/await 实现一个 Node 类似的 HTTP 框架,但最后放弃了,因为网上像这样的东西很多,比如 ASP.NET MVC 控制器等,只是不通用。

  还有一个事情就是,某种程度是,我仍然有点“恐惧”WPF (Windows 用户界面框架)。我谈不上是特别喜欢客户端开发,但从感受层面上,从各种表现上,WPF 是一种比 XAML 更有吸引力的框架。并不是说 WPF 很复杂难用:我理解它的一些基本实现原理,比如数据绑定,风格,资源,以及数据模板,这些足够让我实现简单的桌面应用或简单的 Windows 8 和 Window Phone 应用。是 WPF 的深度和广度让我困惑:我现在的做法是否是最好的做法?这些 XAML 表达式究竟是如何在这样的数据环境和属性依赖条件下工作的?是否我应该把这段代码放到一个单独的动作或控制里?…我不是没努力过:我至少读了 3 本关于 WPF 的书,总页数超过 1500 页,但它们并没有给我多大帮助。结果是,在潜意识里,我尽量避免基于 XAML 的框架,因为我不知道如何实现它。而可笑的是,我对一些“轻量级”的客户端技术,包括 MFC,Windows Forms,Android,以及 iOS,都非常有信心,而对于 XAML,对于它的那些相对高级的东西,已经在我的心里留下了畏惧的条件反射。

  说一些我感到非常有自信的东西,我对那些利用反射技术的东西,从序列化校验到代码生成,我都感觉很轻松。这些属性,这些反射,10 年前当我做一个大 .NET 项目时就根深于我的脑子里,从那时起它们对于我就是一个非常强大的工具。我想这归功于我能理解它们这些对象如何存放在内存里,知道 .NET 的原信息是如何组织的。事实上,我差不多同时也就对其他语言和框架里的反射机制很清楚了:例如,当我在开发非官方的 Adnroid SDK 时,第一直觉就是想写自己的 JSON 序列化工具,而不是利用第三方类库。之后虽然证明这并不是最好的做法,但我能够在 2 小时内让我的程序支持所有类型的 WAMS 要求。

  最后一个例子,我对新语言有很大的心理压力,尤其是当这种语言不只是从一种语言编译成另外一种语言。换言之,我对像 TypeScript 或 CoffeeScript 这类语言没压力,我可以清楚了理解这种原代码如何编译成 JavaScript,如何一种新语法变成同种功能语法的一种简写。但是,对于一些“新物种”语言,例如 Objective C,引起我脑海里一大堆问号。并不是它的括弧语义给我造成麻烦,而是这种语言的原理,“how”。Objective C 语言的对象是如何分配内存的?方法是如何调度的?如果方法可以被过载,还能通过名称进行动态调度吗?编译器是如何动态管理内存的?(没错,引用数计数——但问题远比这几个字复杂)。同样的事情也发生在 Python 这样的语言上:我可以使用 Python 开发脚本,编写模块,甚至和C语法风格的 DLL 交互,但我对这种动态语言里如何存放一个属性,如何类型化,没有一个清晰的画面。

  作为总结,我希望所有的教材都提供一个“工作原理”的章节,来告诉我我如何能实现这种语言、技术和框架——我自己。至此,我希望这篇文章解释清楚了我为什么喜欢对技术原理刨根问底、喜欢自己去实现它们。归根结底的原因是,我喜欢对系统、框架、语言做全面的理解;也许我只需要对某个系统修改一个 bug 或做性能调优,但最终结果是,我要去知道它是如何运行的,否则,它会变成我的一个心病,拖得越久我会越痛苦。

1
7
分享到:
评论

相关推荐

    路由特殊技术分析

    正是由于网吧应用的复杂化,使得网络资源变得更加紧张,在这样的环境下,网吧电脑掉线现象成为困扰网吧业主和网吧管理员的心病,而为了避免出现掉线,各大网络设备生产商也在网吧路由器产品上面下了不少功夫,大家...

    电信的实习报告.docx

    关于电信的实习报告三篇 电信的实习报告 篇1 宜宾电信经营国内及国际各类固定电话业务和数据业务,提供基于电信网络的语音、数据、图像及多媒体通信与信息服务及相关的系统集成、技术开发等业这次实习我被分配到...

    防扫号刷库的对抗体系.ppt

    扫号撞库应该是各大电商类网站的一个心病,Kj通过技术手段和行政手段分别介绍阿里当前的扫号刷库对抗体系的建设细节,指定了一套技术解决方案能够根据用户的客户端数据计算权重来区分撞库行为和正常认证流程。...

    大数据时代政务大数据安全的研究与设计.pdf

    对于企业来讲,数据安全可能关乎生死存亡,所以 说数据泄露已经成为企业和消费者的共同"心病",一点 不为过。在大数据时代,要对数据进行安全保护,既要注 意防止因数据丢失而直接导致的个人信息泄露,也要注意 防止...

    jQuery中与toggleClass等价的程序段 以及未来学习的方向

    昨天开始学jQuery,js是我前端设计技术的一块心病,一直没有找到很好的学习办法。最近突然开悟,可以学jQuery呀,这个东西比较好学。

    通过IT规划有效规避信息化风险

    另外,在风险的管理中,与企业高层的沟通是最大的一个风险,也经常是CIO们容易忽视的,也是CIO在工作时最大的一块儿心病,如何获取高层持续的支持?比如在规划阶段,在实施阶段,在后续的应用阶段,经常是刚开始时,...

    hospitalmenu

    医院菜单这是我在CCT的计算机硕士课程的最后一个项目目录基本信息这个应用程序可以简化工作人员的工作,...技术领域人体解析器-1.19.0 肺心病-2.8.5 ExpressJS-4.17.1 MongoDB-3.6.3 Nodemon-2.0.6设置使用git clone“

    bio_corex:为应对生物数据挑战而开发的CorEx灵活版本,可处理缺失数据,连续离散变量,多CPU,重叠结构,并包括可视化

    Bio CorEx:使用相关说明(CorEx)恢复潜在因素总肺心病-relation防爆-planation的原则,最近已经推出,以此来重建是信息有关数据关系的潜在因素。 该项目由python代码组成,用于构建这些表示形式。 尽管这些方法是...

    两轮自平衡小车控制系统的设计

    近年来,随着经济的不断发展和城市人口的日益增长,城市交通阻塞以及耗能、污染问题成为了一个困扰人们的心病。新型交通工具的诞生显得尤为重要,两轮自平衡小车应运而生,其以行走灵活、便利、节能等特点得到了很大...

    当30秒快速充电+无线充电融合之后...

    随着电子设备的快速发展,设备耗电快已经成为一大心病,如何做到快速充电就成为各界关注的一大热点,工程师为此付出大量心血投入其中,在手机没电时,人们只能焦急而无奈地坐在充电插板旁边,默默地等待时间流逝。

Global site tag (gtag.js) - Google Analytics