热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在软件开发中,追求新的技术意义大吗?

php中文网(www.php.cn)提供了最全的编程技术基础教程,介绍了HTML、CSS、Javascript、Python,Java,Ruby,C,PHP,MySQL等各种编程语言的基础知识。同时本站中也提供了大量的在线实例,通过实例,您可以更好的学习编程。..

回复内容:

可怜的孩子,如果你上手的是 Vue 就不会这么惨了

---

为了避免偏题,我还是针对题主的感受多说一点。你用 Angular 遇到的这些挫折,根本原因不是因为你追求新技术,而是因为你在进入一个你比较陌生的领域的时候,却还选择了一个 learning curve 很糟糕的框架。

Angular 1 本身的 API 设计很繁琐,这些东西其实是 java 程序员把他们习惯的那一套『仪式感』带入了前端框架导致的,简言之就是『抽象概念太多』。然而这些东西在前端的语境下大部分都是除了增加系统复杂度之外毫无意义的糟粕。更糟的是对于新手来说,这些东西极大的增加了学习成本和挫折感。(讽刺的是另一方面也让很多投入了大量精力学习 Angular 的人产生了一种斯德哥尔摩情结 - 好不容易搞懂了,怎么能承认这些东西毫无意义?)

Angular 2 为什么要付出兼容性断层的代价彻底重写?就是因为 Angular 1 的 API 友好度太糟糕了。Angular 2 也转向了『一切都是组件』这样清晰易懂的模式,而不是上来就跟你提什么 dependency injection, controller, scope, service, factory, provider...

到目前为止,可以说你只是因为随大流所以选择了一个不理想的上手方向。但到你去追着用 Angular 2 的 router 的时候,就有些操之过急了。对于这种尚未发布的试作品,Google 自己都没用到生产环境里呢,如果你不是已经对 Angular 本身和前端架构有了深入的了解,基本上是 hold 不住的。

最后,追求新技术笼统来说肯定是有意义的,学无止境嘛。但是在解决实际问题的时候,选择一个自己 hold 得住的方案才是靠谱的。什么时候是在解决问题,什么时候是在学习,这个就得你自己拿捏了。 自己学习时要激进,要主动去了解最新的技术进展,以把握技术发展的脉博。
开发正式项目时,特别是商业项目则要保守,用最多人用的,坑己经被填得差不多的技术。 用最新的主流技术,并尝试理解相比它替换掉技术,改进和原因所在。

至于“用 5 到 10 年前的技术”这种说法我不是没听过,只不过首先这样的项目都是在处理 5 到 10 年前就被人解决完成了的问题,往大了说 10 年前还没有 iOS 开发呢不是(笑)前端是如此活跃的领域,倒退 10 年人们还在烧高香期待 IE 6 解放生产力,跟你现在了解的东西几乎没有什么关系。
其次你在可以试错的时候不去尽可能的犯错,等到你必须维护一坨 PHP 代码并赖以糊口的时候你就只有哭的事了。

所以,做足功课,如果现在在前端 MVC 上的主流前沿是 AngularJS 1.4,就不要浪费时间在 1.2 上。给自己一个时间框架,然后全力以赴去试;如果到时间了还是不能解决问题,那么立刻放弃,用自己熟悉的技术把项目完成,然后再去在没有项目时间压迫的地方试验。

不要停止脚步。 一定要更新知识结构
否则很快成为古董!!!

学习新的技术
不会让过去的知识显得过时
而是为你点亮了又一盏路灯

相信我
身后的路灯,
虽然离你渐远
其光芒一直在助你前行

迟早有一天
你会发现
你已经点亮了地图上的所有路灯
这让你自由驰骋
一往无前

少年,冲吧! 基本功稀松
看什么都是新技术
基本功扎实
看什么都像是新瓶装旧酒 别问别人爽不爽,要问自己疼不疼

你不觉得疼你用新技术来做什么?先就自己想做的定义问题,然后看看根据自己现有的知识要怎么解决,如果能解决就开始动手,如果动手觉得工作量大/繁琐/心塞,这就是疼了,这时候看看别人怎么解决这个,过渡就很平滑,学习成本就很低。如果一直不疼,那你没事找什么事? 我觉得作为技术人员,更应该focus在为什么会出现这种新技术上。
比如Javascript大家不是用的好好的么,为什么会有coffeescript、typescript出现?
比如jquery操作dom不是挺好的么,为什么会有knockout、angularjs出现?
比如memcached不是挺好的么,为什么会有redis出现?
而且上面所说的,看似关系不大,但其实又有关系,如果你不知道你为什么要去用angularjs,你也一定会觉得MV(Whatever)是MV(What the fu*k),单纯为了发明一种技术而推出的技术不是技术,那是商品,而你是他们的产品。因为某种需求“自然而然”产生的技术是技术,你是他们的用户。
你们的项目越来越大,越来越慢,你难道不应该去想为什么慢,怎么能不慢么?

说到这儿,我想到一个故事,说MIT有几个人闲的无聊去监听俄罗斯卫星,后来尝试定位俄罗斯卫星,他们也确实做到了。有一天将军说,你们能不能用卫星定位自己?这在军事中会非常有用。于是有了GPS。 angular的话,你要用路由干什么?我觉得angular本身的路由功能应该很强了呀?如果你设不对的话,很可能是因为你的web service接口定义没有完全符合HTTP 1.1标准吧?或者有可能如果你看看编译原理就能找到一些可以绕过bug的方式了?

至于语言学习本身,我觉得语言可以说是贪多嚼不烂的典型,尤其python这种传统的OO语言和Javascript这种功能型语言可以说是风马牛不相及的(对于初学者而言)。所以我觉得先把其中一门大体吃透再去学下一门比较好。

不过不论如何,大四能做到这些东西还是很厉害的。坚持下去的话你一定会做的比大多数人好的多。 新的技术本质是伴随着"重构"的,你要做一个新东西,当然用最熟练和稳定的技术,实现的差不多了,再考虑重构,web里面的前后端分离,mvc也只是新瓶装旧酒罢了,正如《modern operating system》里面所说的那样,计算机科学中各个技术发展是个迂回的过程,一些没有意义的旧技术可能会在某个时间点重新发光,现在的新技术也会很快过时。
我很久以前也很喜欢追新的技术,xx框架来了,赶紧学,而且只要官方有了v xx.xx.xx,就算不是stable version,也不想使用v xx,xx,xx-1,后来发现没什么卵用,v00.00.01里面的feature都够用了。
框架是"你为框架服务",这虽然对养成所谓的"best practise"有点用,但是你这样写出来的代码是死的,一旦出bug很痛苦(更何况现实情况是bug层出不穷呢,那就一直非常痛苦了),即使框架开源,你在漫无边际的源码中找到自己的bug原因也是非常困难的。在找这些bug的过程中,虽然可以一定程度上学到一些东西,但这些东西系统性很差 ,花费很多时间来接框架的锅是真的事倍功半。
我现在一般不会用别人的框架,而是每次重构都为自己的框架增添东西,可能自己的框架并没有那么flexiable,也不能应付所有的应用情景,但我每次都尽量完善它。
你还会发现,一些语言的feature,你自己不写框架的话,可能永远都不会用到,这对于喜欢这门语言的人是个多么大的损失啊!
所以,我最后想说的是,自己慢慢写一个小的框架吧,然后培育他,让他长大。
实际项目过程对于大多数人来说真的只是一步步google,这个过程只能让你达到你能到的最低点,但你能到的最高点,取决于你的基本功。
多看书,多写代码,少写那些所谓的实际项目(特别是那些两三个人,一个月就能做完的那种),外包更是有多远离多远,全栈工程师不需要追求,一层层的都弄懂,随时完成C++->全栈的进化。
还有,那些说("自以为了解底层越多,程序越好")的前端工作者,我忍你们很久了。
手机快没电了,知乎码字都这么费电-.- 不止一次问过自己这个问题。

快做了十年软件开发,这个问题上,个人是偏向保守的,下面回答几点是做了这些年的感悟,请独立思考,判断取舍。

  1. 我们编程最终是为了用户,不是为了老板,不是为了产品部门,更不是为了自己,如果程序提升了用户使用的效率和体验,程序才有价值,用户不关心她用的东西是怎么实现的,但她确实关心是否能早一点用到某个功能,某个功能稳不稳定,如果不稳定我们能多块修复,还有,这个过程会化掉她多少时间和金钱;我说这一点的目的不是要下结论我们应该总是沿用老技术,也不是要宣扬总是去尝试新技术,知道“什么时候做什么选择”比“做了什么选择“一样重要,心里要有一个标准,知道为什么这个时候我做了这样的选择,要有能说服自己的理由;选不选Angular都应该有”具体“的理由,别人说的Angular如何如何先进永远不成为理由,最多就是个参考因素;只要环境允许,我们做技术选择的落脚点都应该是对用户的实际意义
  2. 有本书叫做Facts and Fallacies of Software Engineering,有几个章节可以比较好得回答这个困然很多程序员的问题,“盲目追求新技术”带来的隐性成本,最终变成沉没成本
  3. 新技术有时候只是用一种不一样的“抽象”去做同样的事情,这时候与其把它们叫新技术,不如叫新“方法”,我还是想提醒自己用户并不关心你的技术“方法”,一个例子就是ECMAScript这些年的进化迭代,许多新的语言功能,但事实是这些是程序员自己关心的东西,用了这些语言新功能会否提升编程的简洁度,稳定性,性能等等还需时间来证明,但程序员社区已经趋之若鹜了,巴不得立刻进入ES6,ES7时代;我想说这些事没有它们看上去那么重要,我知道一定很多人不同意,但我说过了这是我个人对技术的判断;我举一个相反的例子,H264视频编码,AAC音频编码以及MP4格式都是存在很多年的技术,但是网络流媒体的发展给了这些老技术许多新机会,他们已经是如今互联网多媒体的事实标准,所以尽管不是新技术,但非常值得深入了解(如果你从事这一块),格式的统一对媒体的消费者和媒体的创作者当然是有意义的,这不仅意味着用户端的工具会更简单,流程更一致,用户端需要的处理时间成本更低,还意味着她们所接触到的视频网站的实现的简化,而这总是导向更好的用户体验,这背后的技术HTML5 video,HLS等等,都值得一并研究。说回来,这里的观点是新技术不一定新,老技术未必老。
  4. 不要太相信那些看起来能解决你所有问题的所谓新技术(我觉得Angular算一个)。承诺太多要么是因为这个技术还太年轻,没有太多人用,所以该暴露的问题没有暴露出来,该被看到的短板,人们还一无所知;要么是因为背后的团队把过多注意力放到了市场,太顾及切中市场痛点而忽略了这种技术本身设计上应该有的平衡,这就跟做一个讨好市场的RPG游戏去拿游戏里的香艳截图去吸引用户一样;我想一个技术人员并不需要资深的经验才能明白软件开发本身的开放性和复杂性,不是一个两个工具和技术的更新换代所能够彻底解决的;承诺太多的技术,往往作出不切实际的设计,为了疏通逻辑在架构概念上造一堆轮子,牺牲技术使用者的学习时间,增加他们的知识负担。这里的观念是,做项目的时候,强大全面的新首先意味着项目成本的增加。
  5. 大多数语言要学好几年才能到“熟练”的程度,不要说精通了;但大多数人会在一两年内放弃对这种语言纵深的学习,而转而横向拓展(很多人都这样,包括我自己),这并不总是坏事,因为有时候横向生发本身就是纵向的启发;我想说的是这个时候很多人可能意识不到自己其实并不怎么“熟悉”自己认为熟悉的东西;比如用PHP写Web应用,三个月半年换一个框架,但没有试过去理解第一个框架的架构和设计意图,编程技巧,可用性等等,到第二个框架的学习,还是重复那些老的概念,于是天天MVC,也只有MVC,表面上是研究新技术,实质却还是老的思维框架;但如果研究下去,一个普通的Responsibility Chain的设计与应用就可以学到很多。所以这里的观点是,技术的“老”有时候是一种认知偏见,因为你不知道自己不知道的东西。

话题可以展开去说很多,但我想就此打住,千言万语也最终依赖于你自己的研究和判断,真正的回答我相信也在这里,“你自己的研究和判断”。

上面的观点仅作参考。
推荐阅读
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Itwasworkingcorrectly,butyesterdayitstartedgiving401.IhavetriedwithGooglecontactsAPI ... [详细]
author-avatar
Aerotic
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有