`
ihyperwin
  • 浏览: 425278 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

编程的思想、数据结构、算法

 
阅读更多
只要掌握了编程的思想、数据结构、算法,使用不同的语言去表达是很容易的。

会了很多种电脑语言后,学一门新的编程语言,几乎只要花一个晚上看看官方的语法文档就可以立刻开始使用做东西了。最多就一个星期。

基本上,那些说长时间说自己在学C#,学java的程序员,都是2B程序员,他们完全不懂得程序开发中“思想”、“数据结构”、“算法”的本质,而将大量的时间耗费在语言实现的细枝末梢中,纯粹浪费自己时间。

不同的语言会有不同的特性,有一些特性是比较重要的,普遍存在于多种语言当中的,“学习”一种新语言,实际上仅需要查看文档,看这种语言是以怎样的语法支持这些特性而已。

=========

OO是影响很广的编程概念,基本上,是Enterprise Developer(注:企业级开发者)的圣经、法则。

ED认为,越OO越好。

基本上,计算机业界有两批人,一批是真正的程序员,或者说hacker,一批就是ED。

ED实际上是企业的工具,他们很少有自己创新的想法;企业说啥米,就做啥米。所以,会有大量的vender,提供工具、支持、新技术,去train这些ED。

典型的vender有微软、IBM、Oracle等等;这些vender为了向企业推销产品,他们就经常会鼓吹一些新的“技术”,然后打包成为解决方案,推销给企业。

为了鼓吹、宣传这些技术,还有一批企业是专门在“布道”的,他们是所谓的“咨询公司”。

这样的咨询公司,他们会专门聘用一些所谓“Evangelist”,屁事不做,整天四处布道,名头都很牛逼,如XX金牌讲师。

他们实质上,就是推销员,只是,他们推销的产品,是所谓的“新技术”而已。

微软在新加坡好像就招了不少Evangelist 。每隔几年,微软所推广的技术就会“革新”一次,Evangelist们就不断的四处去宣传新技术改变了一切,能够提高效率无数倍。

Evangelist本身的技术,很多是很差的;就好像推销员本身,是不会做产品开发、不懂技术的。他们仅仅是会宣传、鼓吹新技术而已;满口各种新技术名词,但他们本身,可能仅仅只是会使用这些技术写一个Hello World。

因为他们本身素质很差,所以,他们是无法分辨他们所推广的技术本身是否好,他们只是复读机。有时候,vender本身在推的技术也其实不错,但复读机们也会把它夸张到荒谬的地步。

OO就是一个典型。

OO仅仅是无数编程模型中的一种而已,但它被过度的夸张,诠释。

Hacker们写程序,基本不会去追求程序本身是否符合OO规范。Hack这个词的意义本身就在于打破规范。

但是,大多数的ED是很笨的,他们缺乏独立思考的能力,他们需要被Train,而无法自学。Hacker的那套,他们接受不来。

所以,才会有vender / consultant / 培训学校一系列的产业,去鼓吹:

OO、XML、SOAP、Web Service、Silverlight等等一系列伪技术。

有的ED,一辈子都无法意识到他们实际上是中了vender的圈套;无法掌握真正的编程技术,而沉迷于vender们所鼓吹的“新技术”,一代接一代。

然后,只要有其中的一代技术ED没能掌握,ED就立刻被淘汰了;因为这种ED,穷其一生都没有学会真正的编程;他们仅仅是学会了一代又一代的被封装的伪技术使用技巧而已。

伪技术的典型特征是封装。

它本身没有任何新的东西,只是把旧的技术封装一下,换汤不换药而已。

OO是最好的封装技术;所以它被无底线的推崇。

封装很重要;但是,对于程序员来说,掌握封装技术本身,跟学习使用别人封装好的技术工具;是两回事。

“程序员从此不再需要关心XXX”,这是evangelist最常用的宣传语句;2B ED,看了就很高兴,然后拼命去学习新的“技术”,把他们曾经掌握的XXX底层技术给忘掉。

微软所宣传的理念被Hacker理解为“Even monkeys can code”。ED被evangelist鼓吹的新技术洗脑,最终就是成为monkey而已;所做的工作,毫无技术含量;很容易被淘汰。

所谓的程序员30岁必须转行这种说法,便是源于ED被洗脑。

这种ED,从未掌握真正的编程技术,是必然被淘汰的。

“算法”、“数据结构”等,是本质;很重要,需要掌握,但一般开发时,很少需要自己去实现。

觉得多数开发,是“拚积木”。

即便是业务逻辑需要对一些数据进行排序,也不可能自己去实现一个quicksort算法;而是直接调用quicksort的现成类库。

这也直接造成了2B ED穷其一生都不能掌握真正的编程能力。

他们认为,能够“解决”问题就好,至于问题是怎么解决的,他们并不关心。

对于细节的认识、掌控能力,直接造成了水平的天渊之别。

以拍照为例子,以前人们用傻瓜相机,现在人们用iPhone去拍照;很快,很方便,还可以加滤镜。

但是,普通人们在不了解什么是光圈、精深、背光等概念的情况下,是没有可能成为摄影师的。

即便他们放下iPhone拿起DSLR。

普通人跟摄影师拍摄同样的东西;出来的照片也许会差不多,但如果深入去比较,景深、角度、光线、取景等等等等细节,则都会有差别,而这些差别积累起来,就造成了普通照片与摄影作品的差别。

画家要画好画,必然要对画笔、颜料、纸张的特性有深入的了解。

厨师要做好菜,必然要了解食材的特性,对调味料、厨具等有娴熟的掌控。

ED的“解决问题就好”,跟没有下过厨房的千金小姐拿着菜谱使用微波炉做菜没啥区别。

在大厨手里,微波炉也可以是神器;但:

“有的人,纵然神刀在手,亦无法成为刀中之神。”

程序员要“拚好积木”,那必然需要对积木的种类、材质、特性,有深入的了解。

总得对quicksort的实现有认识,才能够用好quicksort。在有的场景下,quicksort的性能反而是最差的。如果不了解,就无法去把quicksort用好。

程序开发中,有一个著名的 80 / 20 原则。

我想,这个原则也可以适用于ED。

程序员只要花20%的努力就可以成为一个混日子的ED;80%的程序员均是如此。

但如果要成为一个优秀的程序员甚至hacker,那么,需要花多至少4倍的努力。

有什么积木可以用?积木本身是怎么做的?积木A比积木B好在哪里?

这些,是需要花大量的时间去了解。

全部都是实在的经验积累,没有捷径。

都是.NET语言,C# 跟 VB.Net的差别在哪里?对于ED,他们偶尔也会对这样的问题感兴趣,然后,他们会去看介绍,看比较文章。。。。但其实,这事完全是木有用的。

他们看了别人的介绍,以为自己懂的,但实际上,他们只是在复读而已,完全木有懂。

作为一个ED,要了解C#跟VB.Net的差别在哪里,最好的方式,就是花时间去把两种语言都学了。用这两种语言分别去写个几万行程序,然后就懂了。

当某天ED成为Hacker的时候,那就反倒可以去看各种介绍,看一眼,然后瞬间就可以悟了。

这也就是为什么很牛程序员学习新语言可以那么快,因为有太多的知识可以复用;而这些知识的积累,必然是需要通过在实际中,无数行的实际编码,无数篇的资料阅读中得来的。

没有捷径。

很多初学者,或者说,编程的伪爱好者,他们,会热衷于去四处请教大师,下载各种经典书籍,企图读一本编程圣经,然后一夜脱胎换骨。

这是,不可能的。

这种伪爱好者,永远不可能成事;在学习的过程中,抱着去“走捷径”的心态,本身就已经是入了歧途;最终会花更多的时间。
分享到:
评论

相关推荐

    动态规划算法数据结构算法导论

    动态规划算法 数据结构 算法导论 编程思想 程序员指定用书

    数据结构与算法-Java语言版

    主要内容包括:面向对象编程的基本原理,判定算法效率的方法,堆栈、队列及其应用,对于多种递归的详细讨论,二叉树、B树、2-4树等的查找和遍历等,分析排序、散列等数据结构的应用,图、NP完整性,数据压缩算法、...

    Python数据结构算法讲解(数据结构+算法+面试指南)

    本资源是一套全面的Python数据结构和算法学习材料,旨在帮助读者从基础到高级逐步掌握Python中的数据结构与算法。通过本资源,读者不仅能学习到数据结构的基本原理和算法的实现技巧,还能了解如何在技术面试中有效地...

    数据结构算法

    算法系列15天速成——第一天 七大经典排序【上】 算法洗脑系列(8)算法洗脑系列(8篇)——第八篇 概率思想 算法洗脑系列(8篇)——第七篇 动态规划 算法洗脑系列(8篇)——第六篇 回溯思想 算法洗脑系列(8篇)...

    数据结构与算法分析—Java语言描述

    Java语言描述是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。 系统地介绍各种常用的数据结构,对基本概念、...

    java数据结构和算法实践

    数据结构和算法是计算机科学的核心基础,对于编程开发人员来说,掌握它们至关重要。以下是关于Java数据结构和算法的一些介绍: Java作为一种流行的编程语言,在数据结构和算法的实现方面有着广泛的应用。数据结构指的是...

    《数据结构与算法 Python语言描述》--裘宗燕

    本书结合抽象数据类型的思想,基于Python面向对象机制,阐述了各种基本数据结构的想法、性质、问题和实现,讨论一些相关算法的设计、实现和特性。书中还结合研究了一些数据结构的应用案例。 本书加强了一些目前程序...

    《图解数据结构与算法》正文试读页

    这本书采用“少字多图”的方式,略过复杂的数学公式,用通俗易懂的方式针对编程初学者介绍数据结构与算法的基本概念,培养读者编程逻辑。无论读者是否具有编程经验或数据结构与算法的知识,都可以从这本书中获益。...

    数据结构与算法分析 java版

    国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。系统地介绍各种常用的数据结构,对基本概念、基本原理和基本方法...

    数据结构与算法-面向对象的C++设计模式

    数据结构与算法-面向对象的C++设计模式 结合了数据结构和面向对象编程,设计模式的思想均有涉及,是一本好书哦

    数据结构与算法:python语言描述

     本书结合抽象数据类型的思想,基于Python面向对象机制,阐述了各种基本数据结构的想法、性质、问题和实现,讨论一些相关算法的设计、实现和特性。书中还结合研究了一些数据结构的应用案例。  本书加强了一些目前...

    数据结构与算法研究(强烈推荐)

    重点放在使用ADT对这些数据结构编程,这些数据结构的快速实现,以及介绍它们的某些用途上。课文中几乎没有什么程序(只有些例程),而程序设计作业的许多思想基本上体现在练习之中。 第4章讨论树,重点在查找树,包括...

    数据结构与算法分析 java语言描述(原书第3版)

    Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计)。系统地介绍各种常用的数据结构,对...

    数据结构的经典算法(全)

    非常全的数据结构经典算法。可以自学提高编程能力和理解算法思想。

    数据结构课程(内容详细共十章)

     数据结构的学习目的是要求理解和掌握各种数据结构的定义及基本操作的实现,理解和掌握典型算法的基本思想、算法设计方法和计算算法的时间复杂度。通过学习,掌握经典算法的编程方法和技巧,提高编程能力。

    随手笔记--数据结构与算法(Java)排序

    适用人群:本人文档是通过Java语言来编写数据结构中排序的算法,所以要具备一定Java编程基础。以及想要复习或者自学数据结构的小伙伴。 能学到什么:1.六个基础排序算法,分别是冒泡排序,选择排序,插入排序,希尔...

    哈夫曼树压缩算法实现

    这是我做的一个基于哈夫曼树思想的压缩算法程序源码,希望大家指正

    C语言算法视频教程集合(递推、枚举、递归、分治、贪婪、试探法、模拟、数据结构)

    5、在实际编程中,这些算法和数据结构的知识对于设计高效的程序和解决复杂的问题至关重要。 内容目录如下: 1.1.编程的灵魂:数据结构.算法.wmv 1.2.算法的作用:猜价格游戏.wmv 1.3.递推算法.wmv 1.4.枚举(穷举)...

    第6讲 算法、数据结构简介及顺序结构和选择结构.pptx

    本课程主要讲授计算机问题求解的经典算法设计方法和算法复杂度分析方法,主要内容包括计算机概述、计算机系统的组成、信息化及指标体系、操作系统、程序设计语言、算法简介、数的表示及存储、数据结构简介及顺序结构...

    数据结构与算法分析(java版)和经典算法大全

    数据结构与算法分析(java版)和经典算法大全,能帮助编程人员更好地理解编程所用到的思想

Global site tag (gtag.js) - Google Analytics