`
topcat
  • 浏览: 282686 次
  • 性别: Icon_minigender_1
  • 来自: 湖北武汉
社区版块
存档分类
最新评论

这是给开发者的弥天大谎还是至理名言?(转)

阅读更多

转自http://www.aqee.net/2011/04/06/the-greatest-developer-fallacy-or-the-wisest-words-youll-ever-hear/

这是给开发者的弥天大谎还是至理名言?

至理名言
当我需要用到它时我就去学它!

过去这些年里这句话我听到无数次;对于处在一个像软件开发这样的快速发展变化的行业里,这听起来像是一种十分适用主义的态度。从某些层面上说,它确 实十分适用,但从另一个层面来看,我很受这句话困扰。它似乎成了我们这个行业的福音,但却从来没有把这个行业变的更好。问题就在于,这句话表面上借明智的有经验的开发者之言,其实是幌子,实为人们随波逐流的借口。 实在是有太多的东西需要我们在工作之中“发现学习”,但对于这种对新知的“发现学习”,你是工作学习齐头并进,还是单纯的遇到了什么问题,就学习处理这问题的知识?这两者之间有很大的区别。

整个行业里到处都是通才、全才,也许向来如此,只是我太闭塞,没有认识到这些,而且我也不愿意看到这种情况。没有人再愿意踏踏实实的深入研究一个东 西,包括计算机科学基本原理、你正在使用的最新技术、甚至是你最近几年一直使用的语言。何必自寻烦恼,也许当你学在半途中时就会发现,这些技术知识已经被 更新升级,被废弃,被边缘化,被过时、不再流行。我曾和很多人讨论过这个现象,没有一个人认为这是一个问题。“做个实用主义的人吧。

与此同时,我们大家都在相互模仿克隆。现在需要一个Java程序员,我是一个Java程序员,你也是Java程序员,我邻居也是个Java程序员。 我们大家之间有什么区别?——没什么区别!还有,我学会一些jQuery知识。这不错,这样我就知道如何做一个可折叠的菜单了。而且,我可以使用 Google在网上搜一下,到处都是,我能搜到最好的代码,剽窃它。而同时,如果你想招募一个Perl专家(也许你想要一个神奇的解释器或将大量数据进行 可视化),那你可要准备好足够的干粮和水了,因为你根本找不到。

不错,是有很多地方能看出你我的区别,我有更好的沟通技巧,所以我做的更好。这当然很重要,但是,开发人员通过软实力,而不是开发技术能力来区分 —— 感觉有些扭曲。 我们大家的沟通技巧都很好,可写出的代码是一团糟 :) 。该死,我本不该说这些,因为我也算得上是一个通才。当然,我更愿意把自己看作一个既有广度又有深度(T型)的人 ,但是,如果你愿意说真正的实话,你会说,大部分的人都只有广度,没有深度,更像横线型(破折号型) :) 。在这些破折号中你就像是个巨大的石钟乳 —— 你是T型的。你看上去就像个专家,即使你从来不是专家 ,这就是在到处都是通才的时候做为专才的优势。

投资你的未来

我不想传道似的告诉大家我们应该对未来的职业生涯进行投资,因为这是每个人都知道的。大多数人认为自己正在投资,他们努力的工作,写大量的程序,甚 至边工作边学习,诚然,这10年下去肯定会成为一个专家,20年下去成为一个资深专家。但是,如果事情果真是这样,那每个年纪大的人都会成为各个方面的专 家,事实断然不会是这样。也许原因是人们不知道如何在某个方向去发展他们的特长(这是实际存在的 ),但我私下里更怀疑是,人们更多的是缺乏热情,而不是缺乏这方面的指点 。上面所说的各种问题都基本上可归于这种情况。

我完全说跑题了。“对未来进行投资 ”只是我们讨论的问题之一,而主要问题是”我需要用到它时就会去学它 “这句箴言。这句话给我老爸很合适,而且它也为我所用这么多年。让我们把这句话的思想应用到金融上吧,“当我需要钱时我会去进行投资的 ”。你会发现有些时候这句话并不是那么适用。

你不知道你缺少哪些知识

我们都经历过这样的时刻:你痛苦被折磨于要解决一个问题,最终是有人过来告诉关于X算法或Y技术,这让所有问题变得又快又简单。你很幸运能碰到这样 一个能告诉你“简单”方法的人,否则的话你可能要用去数天、数周去把问题弄明白,而且事情会变的乱糟糟。你不会因为此而受到责备,因为你不可能提前知道你 会缺少什么样的知识。我想,这就是“当我需要它时我就会学它”的思想方法失败的地方。你不可能去学你从未听说过的技术知识 。 Google做出了很大的成就来缓解这个问题,但这不能解决所有问题。在茫茫的未知领域你会遭遇到大量的未知难题,它们会让你撞的头破血流,要多惨有多 惨,除非你能明白你所面对的是什么类型的问题(例如,如果你知道一些搜索算法和约束传播问题,你可以去解决数独难题,否则,你就陷入困境了)。你不可能去 学习一种你不知道的或不知道用在哪里的算法。你不可能去利用一个你根本不知道能做什么的技术去解决一个问题。不可能一直有人在旁边指点你正确的方向。我敢 打赌这世界上有数百万的代码可以被替换成更高效、更整洁、更有效的代码,只是因为写这些代码的人不知道自己欠缺某方面的知识。

我想反向说明一下这个问题,假使能提前知道我们缺少什么知识,那么,诚然,我需要关注大量的知识。粗浅的大范围的尽可能多的涉猎各种知识对我们有很大帮助。当问题发生时,我就能看出问题是什么领域的,然后针对这种知识深入的研究。可是,事情并不会这样发生,浮光掠影的通览各种知识最终并不会在我们的脑海里留下任何痕迹, 我们的大脑不是这样工作的。如果我不去强化和深入挖掘某个知识概念,我们的大脑会很快就会把它标记为不重要信息,完全是一种浪费时间(回想一下你为了考试而死记硬背的东西在第二天还能记住多少? )。然而,如果你能集中精力对某一主题进行深入研究——并伴随着兴趣——你会收获颇丰(这将是你不会忘记的 )。我爷爷是一个核物理学家,数十年如一日的收集研究这个领域里的知识使他成为了一个专家,但这也同时使他成为了一个出色的数学家,一个不错的化学家,一个非常棒的地质学家,一个合格的生物学家,等等。这只是因为深入研究而获得的广泛的副产品。

你能以足够快的速度学会它们吗

Learn fast

有些东西需要你花很长时间才能学会。我有信心在不皱眉头的情况下学会一个以前从未见过的ORM框架,因为类似的东西我以前见过,它们概念是相同的。 但如果你需要做一些把演说转换成文字的东西,这可不会这么简单,你没有足够的背景知识。把希望寄托在Google上,搜出一些东西我们可以去粘贴拷贝。这 是一个很坏的做法,只有大学里的研究人员才会去做这种烂事。如果是开发一个网站呢?我们都知道该怎么做,但如果需要能支持每天1千万的用户访问量呢?我需 要知道如何去升级,我相信不花一两个月的研究你是不可能把速度提上去的 :) 。是呀,我太蠢了,我应该做的是雇一个专家,然后 … 哦 … 慢,等等,我们的干粮和水都不够了。

为什么我在乎这些

跟专家一起工作实在是太爽了 。也许你以前有过这样的经历,他们说的那些东西都是那么新颖和有趣,他们的每行代码都能让你受益匪浅,你几乎都能感到你的脑容量在膨胀 :) 。你希望能跟专家学习,可当你找不到这样的专家时,那就太不幸了。因为每个人都是在“需要”的时候才去学习,没有人可以教别人什么东西。而这其中最大的教训是,专家同样也想和专家一起工作,所以,你的问题在于,要能清楚专家是否愿意和你一起工作? 如 果能做到在需要的时候就去学习,这是个不错的做法,但你不能把它当作一个软件开发者的至理名言。不错,这个行业很宽广,你不可能样样都学,所以要选择一 些,学精,如果你很好奇而做了深入研究,你会发现最终你在很多其他知识上都会有一个相当的掌握。而且如果你能做出一份出色的工作,其他精英贤达都会希望和 你左右同行,因为他们这样可以从你身上学到知识,而你也能从他们身上学到更多的东西。这对每个人都是再好不过。

Image by SamueleGhilardi and SpecialKRB

分享到:
评论

相关推荐

    2020年高考语文作文素材之时事热评“美国吃亏论”是弥天大谎

    2020年高考语文作文素材之时事热评“美国吃亏论”是弥天大谎

    基于关键词搜索结果的微博爬虫(下载即用).zip

    基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改,以实现其他功能。 基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改,以实现其他功能。 基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改,以实现其他功能。 基于关键词搜索结果的微博爬虫(下载即用).zip本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,当然也适合小白学习进阶。如果基础还行,可以在此代码基础上进行修改

    node-v4.4.1-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    J波模拟matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    Obsidian quickadd插件

    Obsidian quickadd插件

    Fraunhofer Versatile Video Encoder (VVenC) v0.1

    这份文件是关于Fraunhofer Versatile Video Encoder (VVenC) v0.1版本的文档,由Fraunhofer Heinrich Hertz Institute (HHI)的视频编码与分析部门的Jens Brandenburg, Adam Wieckowski, Tobias Hinz, Benjamin Bross撰写

    node-v8.0.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    Windows系统nodejs安装及环境配置

    附件是windows系统nodejs安装及环境配置教程,文件格式是markdown,文件绿色安全,请大家放心下载,仅供交流学习使用,无任何商业目的!

    JAVA基于J2ME的手机游戏开发(lw+源代码).zip

    随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2ME的MIDlet类库开发手机游戏的过程。

    5.21前端基础(1)

    html基础

    slf4j-api-1.7.7.jar

    javaee/javaweb常用jar包,亲测可用,导入到java工程中即可使用

    node-v11.12.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于CAPL仿真BMS

    使用CANOE,基于CAPL仿真BMS,通过Panel控制发送

    node-v6.11.5-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    中国科学技术大学软件学院《iOS应用开发》课程实验代码-内含源码和说明书(可自己修改).zip

    本项目是课程设计课程实验的demo,内含源码和说明书,可以自己修改

    AStar路径规划matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于yolov5的交通信号灯检测项目

    基于yolov5的交通信号灯检测项目

    cc test for cc

    test for cc

    BioJava是一个开源项目,致力于提供处理生物数据的Java库.zip

    BioJava是一个开源项目,致力于提供处理生物数据的Java库

    偏微分方程的数值方法matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics