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

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

阅读更多


当我需要用到它时我就去学它!

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

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

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

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

投资你的未来

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

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

你不知道你缺少哪些知识

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

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

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

Learn fast

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

为什么我在乎这些

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

分享到:
评论
3 楼 玲cc 2012-04-09  
文章很有哲学的观念。就像苏格拉底曾经说过的,你既然不知道你要寻找的什么,你又如何去寻找它呢?其实重点不在于大家不知道这句话背后隐藏的错误,只是太多的羁绊让大家无从前进。
2 楼 随WW便 2012-04-09  
1 楼 dai0909 2012-04-09  
说得容易,做起来难。看似有理,其实什么也没说。

相关推荐

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

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

    电力系统调度过程连续潮流matlab代码.zip

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

    【基于Java+Springboot的毕业设计】付费问答系统(源码+演示视频+说明).rar

    【基于Java+Springboot的毕业设计】付费问答系统(源码+演示视频+说明).rar 【项目技术】 开发语言:Java 框架:Spingboot+vue 架构:B/S 数据库:mysql 【演示视频-编号:330】 https://pan.quark.cn/s/8dea014f4d36 【实现功能】 付费问答系统通过MySQL数据库与Spring Boot框架进行开发,付费问答系统能够实现新闻类型管理,问题帖子管理,付费记录管理,新闻信息管理,用户管理,轮播图管理等功能。

    关于旁路电容和耦合电容-(详细说明)

    关于旁路电容和耦合电容-(详细说明)

    Git 与 Simulink 测试:远程测试的最佳实践.zip

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

    重庆大学电气工程学院2011级电机学课堂测验 直流电机.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    LabVIEW 数据采集模板.zip

    labview 与 C 和BASIC 一样,LabVIEW [2]也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW [3]的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW [3]也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。 LabVIEW [2](Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而 LabVIEW 则采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是 LabVIEW 的程序模块。 LabVIEW [2] 提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在 LabVIEW 中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。

    营业额日报.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    Matlab菌丝检测识别项目.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    PictureUnlock_s_678376.pictureunlock

    PictureUnlock_s_678376.pictureunlock

    年教师岗位通用工作总结.docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    逆序输出单向链表-Java 版本

    附件是逆序输出单向链表_Java 版本源码,代码首先定义了一个Node类来表示链表的节点,然后定义了一个LinkedList类来表示单链表,并提供了添加节点、打印链表和逆序链表的方法。最后,在Main类中创建了一个链表实例,添加了一些元素,然后调用reverse()方法来逆序链表,并打印出逆序前后的链表。

    电商数据分析.py

    电商数据分析.py

    财务日报分析.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    重庆大学2015 电机学第1次课堂测验_磁路与变压器(含参考答案) .pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    springboot项目,

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    单片机与LabVIEW上位机联合使用.zip

    labview 与 C 和BASIC 一样,LabVIEW [2]也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW [3]的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW [3]也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。 LabVIEW [2](Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而 LabVIEW 则采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是 LabVIEW 的程序模块。 LabVIEW [2] 提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在 LabVIEW 中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。

    重庆大学 2011-2012(2)数字电子技术II.pdf

    重庆大学期末考试试卷,重大期末考试试题,试题及答案

    顺从宗族联动机器人matlab代码.zip

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

    单片机实验或课设-定时器控制交通指示灯

    定时器控制交通指示灯 用C语言编写,也可以改成汇编

Global site tag (gtag.js) - Google Analytics