引用别人对编程的理解,挺好

编程对我来说是工作,同时也是我的爱好。喜欢自己的工作,我想我是幸福的人吧。我工作这么多年,唯一真正觉得自己干的好的工作其实也就是编程。而我对编程的理解,我觉得我现在也有资格谈谈自己的理解了。我对编程的理解,说的简单一些,其实就是实用。创新或者探索不是我的工作,我没有受过正规的大学教育,对学术那一套看不太上,我明白我之所以还能够胜任编程的工作更多的靠的是自己的天分以及头脑的聪明,教育对我来说可能有一些潜移默化的影响,但是我心里面明白,我不喜欢那些教育的方式,从而也没有很好的接受过教育对我的帮助,现在看来是我错了,知识对人的作用其实很大,而教育的机会同时也是不多的,一旦错过,永无可追。

在我看来,所谓编程的工作其实就是实用主义至上,一切以实用为目的,同时尽可能的提高效率。有效的技术就是好技术。所以不要问该学什么不该学什么,在我看来,编程相关的所有技术都要学习。而且要时刻明白一点,学是为了用,不是为了搞研究,除非你真的是搞研究的。所以我对那些研究算法的程序员,以及研究java虚拟机的程序员不以为然。程序员真正关心的应该是clean code,如何写好代码,而不是去关心如何运行好代码(不包括C++等没有虚拟机或者平台的编译语言。使用这些语言,程序员必须考虑如何运行好代码)。后者是计算机科学家的事情。我的书架上,从来没有关于虚拟机的任何一本书,也没有关于操作系统的任何一本书,也没有关于数据库的任何一本书,SQL的书倒是有一本。

对于程序员来说,关心如何写好代码,比关心技术本身更加的重要。所以我其实没有认真研究过任何一门技术,包括,java虚拟机,各种数据库,spring框架,各种ORM框架,各种js引擎。我真正关心的其实就是如何写好代码,我的书架上,大多是这类书籍,以及各种语言的相关的书籍。包括c++primer,虽然我不认为c++会出现在我的工作领域里面,(但是其实它真的出现过)不要认为会用c++有什么了不起的,在我看来,用c++来开发,是一件很悲惨的事情。

我始终觉得要想写好代码,不能仅仅学习一门语言,而是需要了解多种风格各异的语言,同时不要去研究过于冷门的语言。我们学习的目的还是应用,永远不能应用的语言对我们来说其实毫无价值。编程语言从风格上大体分为两类,一类是命令式的,代表是c语言,一类是函数式的,代表是scheme语言(lisp)。现在还有一种混合风格的语言scala,所以scala很值得一学,它很有特色,是一个经过认真设计的学术化的语言。这类语言大多野心勃勃,但是学的人多,用的人少。

不过,归根结底,编程的工作是解决问题的工作,而不是学术研究。编程中最大的两个问题一个是需求,一个是(代码)质量。技术从来不是需要考虑的重点。反正发明创造某种技术不是我们的工作,我们的工作其实就是应用这些技术。所以学习其实还是挺重要的,但是学习并不是研究,我们学习一下成果就可以了,这还是比较轻松的。想想你高中时代学习的那些数学公式,你知道他们是怎么推演出来的么?有很多数学的理论都是经过了几百年才逐渐被人认识到的。钻研这些东西其实对工作毫无帮助。你能读懂java class的字节码有啥用?证明你很牛么?用户的需求可能是白菜式的,你是不是觉得自己很委屈(平天下之才,却在这里种菜)?当然,作为爱好没有问题。

提高代码质量,最基本的方法就是在写代码的时候就重视它,要为自己写的代码负责。不要抱着完成任务的想法。当然初学者以完成任务为目标是没错的,因为这已经很有挑战了,但是真正的程序员,永远都应该以高效,优质为目标。这里面其实没有什么高深的学问,关键是你是否用心。比如提高效率的一个基本就是你对键盘是不是很熟悉,会不会盲打。键盘很差的人是不可能高效的编程的,每打一个字都要看键盘,怎么可能高效。对于程序员最重要的按键其实都是右手小拇指负责的,你知道是那些按键么?不用看键盘能打出来么?(;"[]{}+=-)。好的程序员键盘一定很好。

同时开发工具也很重要,一看就知道你对编程有没有追求。

程序员要对编程语言很熟悉,特别是你日常工作用的语言。同时一定要深入了解面向对象技术。抽象是非常重要的提高代码质量的手段。我觉得正常智力的人,熟悉日常的工作应该不是难事。但是面试还总是让我吃惊。

程序员不能畏惧学习,其实我想说人类不能畏惧学习。学习能力是人类唯一区分其他物种的根本特征,如果你放弃了,那你基本上都不能称之为人类。

实用,效率,质量。这些才是程序员应该关心的。技术不是重点,技术层出不穷。但其实真正编程相关的技术没有多少,除了面向对象我也想不出来其他的了。乱七八糟的技术很多和编程都无关,什么大数据,云计算,各种数据库技术,各种虚拟机技术,这些和编程无关。和JS相关的一大堆:什么nodejs,angularjs,requirejs,等等。都学会了你也不见得能写出好的js。 好代码的唯一标准: 量少 好代码的标准:

  1. 少(

    1. 高内聚,低耦合
    2. 抽象程度极高。
    3. 尽可能的使用类库。)
  2. 没有拼写错误
  3. 没有IDE的警告,JS除外。(如果有警告一定要用注释说明一下,为什么会有这个警告)
  4. 注释说明用意
  5. 关键的标识符要认真命名,命名同时是有相关含义的。比如说字段,方法名称,类名称。
  6. 用Java之类的面向对象语言,不要把MAP作为你的数据类型,而要用类。

此外:

  1. 在改动别人的代码之前要知会他。尊重别人的设计,尊重别人也是对自己的尊重,同时也是对编程工作的尊重。
  2. 不要试图隐藏想法,如果要和现实妥协,那就妥协。
  3. 好的代码一般是改出来的,编程基本没有一气呵成的可能。
时间: 2024-08-27 22:25:17

引用别人对编程的理解,挺好的相关文章

对JAVA多线程 并发编程的理解

对JAVA多线程并发编程的理解 Java多线程编程关注的焦点主要是对单一资源的并发访问,本文从Java如何实现支持并发访问的角度,浅析对并发编程的理解,也算是对前段时间所学的一个总结. 线程状态转换 Java语言定义了5中线程状态,在任何一个时间点,一个线程只能有且只有其中一种状态,这5中状态分别是: ?  新建(New):创建后尚未启动的线程处于这种状态 ?  运行(Runable):Runable包括了操作系统线程状态中的Running和Ready,也就是处于此状态的线程可能正在执行,也有可

RepositionBars的用法和参数的意义(引用别人的)

MFC窗口位置管理详细分析及实例 在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口).上边是工具栏,中间是视图窗口,下边是状态栏.三个窗 口在框架的客户区里和平共处,互不重叠.主框架窗口的尺寸改变了,别的子窗口都能及时调整自己的尺寸以便保持相互位置关系不变,例如状态条窗口总能保持在 主框架客户区底部,并且其宽度总能和主框架客户区宽度一致.工具栏窗口总能停靠在主框架的某一边不变,其宽度或高度总能和主框架客户区的宽度或高度一致, 视图窗口总能填满主框架客户区

关于引用和指针的简单理解

指针和引用一直是C++中难懂的部分,为此我也困惑了很久,下面说说我对引用和指针的简单理解. 在使用函数时我们常常会纠结实参传递到形参后,函数对形参的操作会不会改变实参的值(也就是主函数的相应变量),最典型的例子是swap(int a,int b).我们都知道,函数在调用时会给变量重新开辟一个存储空间,而这个存储空间会暂时存储形参的值,如果函数在调用完毕后,其相应存储空间的值会被释放.例如下面一段代码: void swap1(int a, int b) { int temp = 0; temp =

从编程角度理解什么是蜜罐

一.蜜罐定义 百度百科:蜜罐技术本质上是一种对攻击方进行欺骗的技术,通过布置一些作为诱饵的主机.网络服务或者信息,诱使攻击方对它们实施攻击,从而可以对攻击行为进行捕获和分析,了解攻击方所使用的工具与方法,推测攻击意图和动机,能够让防御方清晰地了解他们所面对的安全威胁,并通过技术和管理手段来增强实际系统的安全防护能力. 维基百科:蜜罐通常伪装成看似有利用价值的网络.数据.计算机系统,并故意设置了bug,用来吸引黑客攻击.由于蜜罐事实上并未对网络提供任何有价值的服务,所以任何对蜜罐的尝试都是可疑的.

一站式学习Java网络编程 全面理解BIO/NIO/AIO

第1章 [开宗明义]网络编程三剑客BIO.NIO.AIO网络编程是RPC的奠基,RPC编程贯穿了程序员生涯的始终.本章首先分析为什么要学网络编,本课为谁设计,然后介绍课程内容主线脉络,让大家清晰知道本课程并非光说不练的假把式,而是处处有实战,实战项目步步优化,最后通过综合项目巩固所学.... 第2章 网络层的解析与协议本章首先对网络中涉及的网络链路层的解析进行讲解,进一步引出网络基本协议知识.使学员了解分层思想,对三种协议的定位及作用有所了解. 第3章 解读java.io专业术语也可以变得生动精

一站式学习Java网络编程 全面理解BIO/NIO/AIO完整版

一站式学习Java网络编程 全面理解BIO/NIO/AIO 资源获取链接:点击获取完整教程 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题,以创新性的“对比式学习”搭建网络编程课程,课程主线清晰(网络层基础铺垫-->java网络编程前置技术讲解-->阻塞式编程BIO-->非阻塞式编程NIO-->异步编程AIO-->综合实战)适合每一位需要理解网络编程的同学们学习.以“项目驱动”为导向的学习,与企业刚需灵魂契合. 适合人群 网络编程作为编程者的必备

【模块化编程】理解requireJS-实现一个简单的模块加载器

在前文中我们不止一次强调过模块化编程的重要性,以及其可以解决的问题: ① 解决单文件变量命名冲突问题 ② 解决前端多人协作问题 ③ 解决文件依赖问题 ④ 按需加载(这个说法其实很假了) ⑤ ...... 为了深入了解加载器,中间阅读过一点requireJS的源码,但对于很多同学来说,对加载器的实现依旧不太清楚 事实上不通过代码实现,单单凭阅读想理解一个库或者框架只能达到一知半解的地步,所以今天便来实现一个简单的加载器 加载器原理分析 分与合 事实上,一个程序运行需要完整的模块,以下代码为例: 1

c++引用和指针的彻底理解

 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5. 引用不能为空,指针可以为空: 6. "sizeof 引用"得到的是所指向的变量(对象)

对编程的理解

 编程,也就是编写程序.程序代表完成一项工作的过程以及顺序.编写程序,就是使用程序语言,使用既定的技术选择,把需求实现出来. 程序员是完成这个工作的人. 编程是有区别于分析和设计的一项工作.分析就是对一个完整程序的个人理解,自己的一些看法.设计是在与自己对一个程序的理解之上的,根据自己积累的经验和自己的一些想象上的,在一个完整的程序里这俩部分缺一不可.