为什么说要成为软件艺术家,而不只是程序员
当程序员被别人说自己的代码写得“不够好”时,他们会作何反应?代码跑得好好的,为什么要去改它?这个设计不是已经可以了吗,为什么还要再简化?我来给你解释一下这些代码,你会明白的。还有很多类似这种“不够好”的说法,比如“不够简洁”、“不够好理解”、“对用户不够友好”,等等。我经常和程序员聊起这样的话题:为什么要让设计架构更简洁,为什么要让代码简洁易懂、为什么要格式化代码、为什么要在两个符号中间加一个空格……如果你是一个技术老鸟,或者经常看一些讲解如何写出好代码、设计出好架构的书,你可能也会有同感。这些都是最基本的概念,但并不是每个程序员都能意识到它们的重要性。不仅是一些新手程序员不会拿这些高标准来要求自己,那些有多年经验的老手程序员也存在同样的问题。你可以建议他们去阅读《代码大全》、《代码整洁之道》、《Unix编程艺术》之类的书,或许他们当中有些人能够从书中获益,但有些仍然我行我素。为什么并不是每个程序员都能写出高质量的代码或做出高质量的架构设计?有可能是因为他们经验不足,也有可能是因为他们不知道如何将从书中学到的或从经验中总结
当程序员面对Bug时,我们的一些套路
解决过程中,需要考虑的几个问题1、Bug之前有没有出现过,如果没有,最近有没有修改什么?2、Bug在什么情况下会出现,什么情况下不出现,两者的区别是啥?3、相同的功能,操作方式的不同会不会有影响?4、出现Bug的运行环境,是否有变化?常见Bug的解决方法1、执行结果与预期不符这应该是最简单了,一般来说都是代码间逻辑问题,断点加单步调试跟踪结果就可以解决。2、系统异常报错这是错误有点简单,有的复杂,需要我们去查看错误堆栈信息,有的开发工具会告诉你到底是什么错误引发了异常,这需要程序员经验的积累。分享之后我还是要推荐下我自己的前端学习群:547931294,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括我自己整理的一份2017最新的前端资料和零基础入门教程,送给大家,欢迎初学和进阶中的小伙伴。3、系统响应慢可以从服务器内容、CPU、网络情况等方便入手,要保证一个系统的快速响应,需要保证服务器的稳定运行,同时要考虑网络服务,这两者满足了再去分析考虑系统本身是否存在线程阻塞等情况。
最不适合做程序员的5种人,因为其中一点让你有改不完的Bug!
程序员的收入高、生活滋润,有不少的人想转行做程序员。但,毕竟要当上一名程序员,也不是一件轻松的事。有些小伙伴就是天生没有自带程序员的一些“属性”。那么,哪几种人可能不适合做程序员呢?下面w3cschool就来总结一下:1、逻辑能力比较差其实,说到底编程和数学解题基本相似,概念靠的就是理解力。有些逻辑比较差的,就表现在数学一塌糊涂。如果对数学有抵抗,那基本上不适合编程。因为你将对for、while、if等一嵌套发晕~2、不喜欢变化编程的技术一直在变化中,而且其速度非常迅猛。如果你比较喜欢一成不变的东西,或者待在一个不怎么变化的环境中,很难成为一名程序员。3、粗心大意如果你讨厌细节,你就别去做程序员。因为对于一个粗心大意的人来说,代码非常容易出错。你将会有改不完的bug,加不完的班,要这样自虐你是何苦呢?4、抗压能力差一经成为程序员,你的时间也会受到各种限制。为了赶某个项目或者产品要上线,你不得不加班加点,每天工作的时间将远远超过8个小时。如果你想回避这些压力,那你将无法成为一名程序
Asyncdb(三):MySQL网络协议分析
MySQL对大家来说,都应该很熟悉了,从大学里的课程到实际工作中数据的存储查询,很多时候都需要用到数据库,很多人也写过与数据库交互的程序,在Java中你可能一开始会使用原生mysql-connector-java来进行操作,后来你会接触到Hibernate,Mybatis等ORM框架,其实它们底层也是基于mysql-connector-java,但很多时候我们并不清楚程序是怎么跟数据库具体交互的,比如执行一个SQL查询,程序是如何从MySQL中获取数据的呢?今天就让我们来看看最基础的MySQL网络协议分析。引言阅读本文之前你需要对网络协议需要有基本的了解,比如两台机子之间的数据是如何通信的,硬件层可以暂时不需了解,但网络层和传输层的协议要有一定的理解,比如IP数据包,TCP/IP协议,UDP协议等相关概念,有了这些基础,有利于你阅读本文。背景在历史悠久的时代,数据库只作为单机存储,也不怎么需要与程序进行交互的时候的首,它的网络通信并不是那么重要,但随着时代的发展,数据库不再只是单纯的作为一个数据的仓库了,它需要提供与外界的交互,比如远程连
这些MySQL配置“修改条令”,你有必要熟识默记!
大多数开发者可能不太会关注MySQL的配置,毕竟在基本配置没有问题的情况下,把更多的精力放在schema设计、索引优化和SQL优化上,是非常务实的策略。这时,如果再花力气去优化配置项,获得的收益通常都比较小。更多的时候,基于安全因素的考量,普通开发者很少能够接触到生产环境的MySQL配置。正是这样,导致开发者(包括我)对MySQL的配置不甚了解,希望本文能帮你更好地了解MySQL配置。
【技术实验】mysql准实时同步数据到Elasticsearch
摘要:Elasticsearch作为大数据场景下搜索和分析的引擎,广泛应用于实时数据分析等场景。本文作者梳理了从MySQL准实时同步数据到Elasticsearch的实操步骤,帮助开发者理解和快速上手。实验背景Elasticsearch在阿里云商业化已经有一段时间,它作为大数据场景下搜索和分析的引擎,可以用于很多场景。前两天有同学提到需要将MySQL中的数据准实时的同步到ElasticSearch中的需求,由于自己对ES也很感兴趣但一直没有机会实操,恰好趁这个机会学习验证了一下,并把过程记录下来,方便新人尽快上手少走弯路。本次实操采用Logstash实现将MySQL数据实时同步到ElasticSearch,过程中主要以实操步骤为主,并没有详细介绍这两个产品本身,所以文档适合对Logstash和Elasticsearch有一些基础的人阅读。使用Logstash过程中会用到一些参数,每个参数的详细解释请参考官方文档。实验步骤1.开通阿里云Elasticsearch开通阿里云Elasticsearch。产品链接ES控制台中修改配置,允许自
Angular2打包遇到的问题与解决方法(二)
http://www.jianshu.com/p/8943ff86349a之前这篇是说了路径的问题这次是说准备部署时的打包首先还是基于这个ngbuild--base-href/test/dist/但这样打包出来的代码非常大,所以需要生产环境的打包ngbuild--prod--base-href/test/dist/--save或者ngbuild--prod--no-extract-license--base-href/test/dist/--save不过这样打包可能会报错,这是因为生产环境的打包检查代码会按照严格模式,一些public写成private的问题开发时不会报错,但生产环境下打包就会报错。还有类似item.a.b这种如果a是后来才创建的,也会报错,改成item.a['b']这种方式就可以解决。这些报错我的解决方式就是一个个对着去改,不知道还有没有什么更好的方法。还有如果想用cdn的方式引用外部代码,可以直接在index.html的头部写
3D WebGL入门之几何体
在上一篇文章中,我们知道了如何创建一个拥有相机和一些灯光的Three.js的场景。下一步我们要把物体放到场景中。为了方便学习如何将3D几何体加入场景中,我们先了解一点3D建模的技术术语。3D模型(或者网格)由顶点,边和面组成。顶点:三条边的交点。边:两个面相交那条线(想象一下立方体的边)。面:多边形(三角形)组成模型的面。所有的3D模型(或者说网格)可以被分解成一个个的三角形。你可以通过制定顶点的位置来构造几何体,好消息是Three.js提供了一系列方法来帮你创建各种形状。注:在我的例子中我将使用普通的网格材料,目的是不牵涉过多材料的部分,因为在这篇文章中我们只关注几何体。在之后的文章我会讲材料的部分!下面来看看是如何将几何体放到3D场景中。创建立方体//创建几何体使用BoxGeometry方法vargeometry=newTHREE.BoxGeometry(20,20,20);//创建材料varmaterial=newTHREE.MeshNormalMaterial();/
CSS3 弹性盒子(Flex Box)
align-self(用于设置弹性元素自身在垂直方向上的对齐方式)auto:如果'align-self'的值为'auto',则其计算值为元素的父元素的'align-items'值,如果其没有父元素,则计算值为'stretch'。flex-start:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。flex-end:弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。center:弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。.father{background:gray;display:flex;width:300px;height:200px;}.son1{flex:1;height:100px;align-self:flex-start;background:red;}.son2{flex:1;height:
vue中慎用style的scoped属性
本文发布在我的博客vue中慎用style的scoped属性许可协议:署名-非商业性使用-禁止演绎4.0国际转载请保留原文链接及作者。在vue组件中,为了使样式私有化(模块化),不对全局造成污染,可以在style标签上添加scoped属性以表示它的只属于当下的模块,这是一个非常好的举措,但是为什么要慎用呢?因为在我们需要修改公共组件(三方库或者项目定制的组件)的样式的时候,scoped往往会造成更多的困难,需要增加额外的复杂度。scoped实现私有化样式的原理为什么会说,会增加复杂度?那么我们先从的实现模块的原理说起。为了方便称呼,我们假设把这种组件叫做模块私有组件,其他的未加scoped的叫做模块一般组件。通过查看DOM结构发现:vue通过在DOM结构以及css样式上加唯一不重复的标记,以保证唯一,达到样式私有化模块化的目的。具体的渲染结果是怎样的,通过一个例子来说明。公共组件button组件一个公共组件button
javascript开发打气球小游戏
打气球.gif效果知识点:css3画气球,自定义属性运用,随机阵列,DOM元素操作,高级回调函数与参数复传,动态布局,鼠标事件,定时器运用,CSS3新增样式等。css代码如下: