零Bug的代码是怎么炼成的?

为什么你的C# 代码BUG比猫毛还多?5大神器+10步炼成‘零BUG代码王国’! 🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。 阅读详情

码农写代码的最高境界就是:一次写成, 没有bug。


这个境界我是达不到的, 但是我能达到这个层次: 多次写成, 没有bug。


或者更准确的说法是:我已经在写代码阶段把bug都消灭了,测试团队运行完测试用例以后,发现的Bug数为零。 


其实没有bug也不准确,因为测试阶段没有发现Bug 并不代表上线以后也没有Bug, 但至少证明这是一段高质量的代码。


可能有人要跳出来了:这不可能,肯定是你的功能太简单了。 实际上我最近写的这段代码应该是属于中等复杂度的: 


需要从一个消息队列中获得不同类型的XML消息, 对消息进行解析,更新数据库,获取数据库中符合条件的用户, 发送邮件。


一个比较好的地方是:没有界面 ! 其实我个人不喜欢写Web界面的,觉得很繁杂 :-)


那零Bug代码是怎么写出来的呢? 我想了想,主要有这些关键点:

1

 透彻理解需求

很多人看到需求以后, 想都不想立刻就开始编码,这是有问题的。 


作为码农,虽然不是需求分析人员, 也要考虑下为什么要有这个需求 ,  这个需求有哪些主干路径, 有哪些分支路径 , 在脑子里要形成一个图谱。


把自己假想成用户,换位思考下,看看用户会如何使用这个功能, 通常你都会发现一些意想不到的情况。

2

良好的设计

把功能划分成接口良好的模块,让每个模块各司其职,又能依靠良好的接口有效合作, 能极大的减少Bug的产生。 


这考验就是基本功了 , 没有速成大法, 只有自己慢慢苦练。


注意:我这里说的设计不一定是文档 ,有可能只是在你的脑子里。

3

处理好边界条件

据说80%的Bug是在“边界”发生的,这些边界条件包括:

输入数据不合法

数组越界

调用的方法抛出异常 

文件不存在

文件权限不够

调用其他系统接口时数据未能正常返回

打不开数据库连接

数据库表在初始情况下没有值

运行时间过长导致超时

......

我经常发现, 大量的代码被用来处理边界条件, 有时候甚至比业务代码都要多。

4

充分的测试:不放过一行代码

这是我最想说的,测试不仅仅是测试人员的事情 ,  也是开发人员的事情。


一定要保证每一行代码都被你执行过,不留任何死角。


这一点非常重要, 要么你是通过写自动化测试覆盖到的,要么是手工执行测试覆盖到的。

千万不能是你觉得代码简单,不会出问题,就不管了。

5

考虑代码修改对别的模块的影响

很少代码是完全独立的,总是或多或少和别人扯上关系, 修改这样的代码就要小心了, 这也是个主要的Bug发生地。


一定要考虑代码的修改对别人的影响, 并且做回归测试。


零Bug代码会带来巨大的好处,开发完成,进入功能测试或者验收测试阶段以后, 成本会很低, 测试会很快, 因为基本上都是一次通过,没有bug 就不需要修改代码,返工的成本就不存在。


写出零Bug代码,或者接近于零Bug代码应该是每个码农的追求,其实也不太难,只要用心, 有着对需求的透彻理解,清晰的思路,良好的设计和编码,以及非常充分的测试,基本上就差不多了。

 

声明:原创文章,未经授权,禁止转载


你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公共号

我是一个线程

我是一个Java class

Javascript: 一个屌丝的逆袭

Java : 一个帝国的诞生

我是一个网卡

我是一个路由器

2016年春季互联网高端人才流动报告

TCP/IP 之 大明王朝的邮差

CPU 阿甘

Basic : 一个老兵的自述

小王的架构师之路

程序员在工作中必备的能力

码农需要知道的潜规则

IE为什么把Chrome和火狐打伤了

Node.js :我只需要一个店小二

假如我是计算机系老师

假如时光倒流,我会这么学Java

学会编程,而不是学会Java

15年编程生涯,资深架构师总结的7条经验

0?wx_fmt=png

微信:liuxinlehan

0?wx_fmt=png

微博:@码农翻身

0?wx_fmt=jpeg

“码农翻身”

由工作15年的前IBM架构师创建,分享好玩的编程知识和职场的经验教训。


C#代码质量:五步炼成‘零BUG代码’——对比5大神器,代码CT机全解析! 🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。 阅读详情

相关推荐

C#代码质量炼丹炉——用5大魔法武器+10步炼成零BUG代码王国!

这篇文章介绍了提升C#代码质量的四大工具与实战技巧: Roslyn分析器 - 通过自定义分析器检测方法圈复杂度,自动识别"俄罗斯套娃"式复杂代码(阈值设为10),提供类似"心电图"的代码质量扫描。 NUnit+Coverlet - 使用NUnit编写边界测试用例(包括异常处理),配合Coverlet生成测试覆盖率报告,确保代码无"测试盲区"。 SonarQube集成 - 通过静态代码分析发现"代码异味"(如重复代码),并演示如何

墨夶的博客 336

零 bug 策略

开发四年只会写业务代码,分布式高并发都不会还做程序员? >>> 如今软件开发迭代频繁,随之而来的是产...

测试 404

为什么你的代码BUG比猫毛还多?C#的5大魔法+10步炼成高质量代码!

java专栏 1891

关于0bug的解释

最近宣传我的书《0 bug ---- C/C++商用工程之道》,很多同学议论纷纷,感觉到书名口气太大,呵呵,0 bug,可不可能嘛,明显是吹牛。 因此,这里特地解释一下: 0 bug,要我这个作者来说,首先是不可能。我本人做了这么久程序,做到最好的成绩是1个bug,3万行代码的一个程序。 不过,我之所以这么提,是认为作为商用程序员,在进行商用工程开发时,会面临很高的质量标准,企业发布的软件产...

weixin_33862993的博客 250

为什么你应该遵守0Bug原则?

你处理了多少Bug?100个?200个?还是2000个? 可能你自己也不能说出准确的数字到底是多少,因为它始终在变化。 但我知道我们究竟有多少Bug:0个。 你究竟参加过多少次Bug分拣会议?你在Bug管理上用了多少时间(还是仅仅将缺陷从这个版本带到下个版本)? 作为团队经理,我每月会花费半小时在Bug管理上。并且,同一个Bug从未在我眼中出现过第二次。 答案是使用0Bug规则。 这是基于我在过去的5年中,在不同scrum团队中实现不同产品的经验所得。 我们也尝试过其他的办法,但全部都失败了:例如说,我们曾尝试过提升Bug管理在产品待办事项中的优先级,但是这完全没有用。客户总希望多开发一些功能

数据清洗(Data Cleansing)

数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不致、不完整和冗余的数据,从而使数据更加准确、可靠和有用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。数据清洗是一个重要的过程,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。在实际应用中,我们可以使用一些工具和技术来实现数据清洗,例如 Pandas、NumPy 和 OpenRefine 等。通过数据清洗,

meimei169500的博客 1万+

零bug策略简介

零bug策略简而言之就是针对常出现在敏捷开发领域的bug处理方式进行处理的策略 前提:什么是bug 首先,我们可以将BUG分为两类 1、开发新功能时带来的 2、非sprint缺陷 a回归缺陷 b客户缺陷 c事后缺陷 bug如何处理 如何处理第二类bug: 通常有三个路径: 立即修复/考量价值后取消处理/推迟到下一个版本 主张 核心思想:一定要进行具有决策力的处理, 不要推迟缺陷 因为版本迭代、环境缺失、人员记忆细节损失 协作开发中代码会产生蝴蝶效应,更难定位 堆积到一定量后,会需要冗长的会议作为时间成本

weixin_45615213的博客 389

STM32F103VET6实战:用W25Q64外部Flash实现Bootloader远程升级(含完整代码解析)

本文详细介绍了基于STM32F103VET6与W25Q64外部Flash的Bootloader远程升级实现方案,包含硬件选型、存储分区策略、双校验机制及完整代码解析。通过SPI接口实现固件存储与升级,适用于物联网设备开发,提升OTA功能可靠性。

weixin_42620340的博客 357

0 bug是如何做到的?

<br />      刚刚结束的一个项目,20人天的开发工作量,真正做到了0bug,这是带项目以来的第一次,还是挺不容易的。项目启动时,和QA商定bug目标时,所有开发同学都喊出了0bug,看着大家士气高涨,作为PM也想挑战一下这个目标,最终通过大家的齐心协力达成了,总结起来,主要有以下几个关键因素:<br />1.这个目标是所有人自发喊出来的,而不是自上而下定的目标,每个开发自身负责的模块都设定的是0bug目标;<br />2.建立共同的游戏规则,个人或项目bug目标没达成是需要请客的;<br />3.

海阔天空 2092

ATR2660:卫星导航高增益低噪声放大器芯片数据手册

中国BDS(北斗卫星导航系统),美国的GPS,俄罗斯的GLONASS和欧盟的GALILEO导航系统应用而专门设计。芯片支持3.3V至5V宽电源供电。采用2级放大器的结构设计,具有28dB高增益和0.85dB的低噪声系数。支持BDS、GPS、GALILEO、GLONASS等L。典型功率增益:30dB@5V;典型输入P1dB:-18dBm@3.3V;典型工作电流:12.7mA@3.3V;宽供电电压范围:3.3V~5V;典型噪声系数:0.85dB;频段的多个卫星导航系统;ATR2660是一颗。

YHPsophie的博客 561

Ubuntu24.04/20.04设置网络共享文件夹

Ubuntu20.04利用向日葵远程控制时,不能传输文件。使用linux版本QQ来传输是可以的,不过linuxqq功能真的很弱。因此,打算在Ubuntu系统中建立一个共享文件夹,可在局域网中访问。 1、新建共享文件夹 获取root权限,或者登陆root账户。可在/home文件夹(或其它文件夹)下新建一个文件夹,如share。 右击文件夹,选择“本地网络共享”菜单。按下图设置。 点击确定。如果系统已经安装了samba服务器,就可以进入第3步。如果没有,会提示安装,按提示安装,可能会出错,可进.

willhu2008的专栏 2万+

如何写出零bug的代码?

不要笑,这是一个伪命题,作为一个IT老兵,开发完成后依然会有很bug,倍感打击。所以我想总结和分析一下原因。写出高质量,少bug的代码。 1:认真领会需求,最好能把理解消化过的需求和产品或者熟悉业务的同事对照一次,如果没有歧义建议记录起来,以备日后参 考;分析一下特殊场景,预估风险。 (PS:我遇到很多这样的场景,我们现在开发只有原型稿,关键的业务逻辑,原型上会备...

王震1024的专栏 707

AI在智能制造中的落地:从预测维护到自适应生产调度

从最新的研究与实践来看,“预测维护”和“自适应生产调度”正在成为智能制造中最先跑通闭环的两个核心场景:前者通过对设备健康的前瞻性预测,帮助企业减少非计划停机、优化备件与维护资源;后者通过对复杂生产系统的实时决策优化,使工厂能够更好地应对订单波动、设备故障和多目标约束。更重要的是,越来越多的研究与项目不再将二者视为孤立模块,而是尝试构建“设备健康—生产调度—供应链”三者联动的一体化架构。Nature在技术层面,深度学习、强化学习、多智能体系统、图神经网络和注意力机制等方法,为建模复杂工业系统提供了强大工具;

nmdbbzcl的博客 1290

lettuce bug 连接超时_钢铁般的零Bug代码是怎么炼成的?

高级程序员写代码的最高境界就是:一次写成, 没有Bug。正所谓“一步到位”。然后这是我们认为很厉害的程序员写代码,其实呢?是这样,,,,,,知乎视频​www.zhihu.com 顺便说一下,这个境界我是无法到达的,但是我能达到这个层次:多次写成, 没有Bug。别人进阶很多次啦,而我2000年啦,还是化神期。 或者更准确的说法是:我已经在写代码阶段把Bug都消灭了,测试团队运行完测试用例以后,发现的...

weixin_39788051的博客 512

基于STM32设计的自动追光系统(项目资料ID:2)

基于STM32设计的自动追光系统主要由光敏采集电路、单片机核心板电路和步进电机控制电路构成。通过光敏电阻采集环境光强信息,经 STM32 单片机处理后,控制步进电机转动,实现对光源的自动追踪。该系统具有响应速度快、追踪精度较高等优点,可应用于太阳能发电、智能照明等领域,为相关场景提供高效的光资源利用方案。

以培养嵌入式工程师为己任 1万+

ESP32与BH1750光照传感器结合使用的Web服务器案例

请注意,为了使代码正常工作,你需要将代码中的"你的WiFi网络名称"和"你的WiFi网络密码"替换为你自己的WiFi网络凭据。在代码中,我们首先导入了所需的库文件,包括Wire库用于I2C通信,BH1750库用于与光照传感器通信,WiFi库和WebServer库用于创建Web服务器。接下来,我们将编写一个Arduino代码来控制ESP32与BH1750的通信,并将读取到的光照强度值显示在Web服务器上。函数用于处理根路径的请求,其中我们读取光照传感器的值,并将其显示在返回的HTML页面中。

server_api196的博客 617

看“零Bug的代码是怎么炼成的?”后的感触

周末在家,看到码农翻身的一篇博客: 零Bug的代码是怎样炼成的?  感觉雪中送炭,于是结合自己的最近经历,写些感想。 现在在一个互联网+保险的创业团队里从事平台开发,当然大公司也还是有传统的保险业务,只不过各自有一亩三分地而已。接近年底,感觉业务纷至沓来,根本停不下来...开发任务自然也就产生很多倒排,每天都是战斗中,非常的互联网打法,还是很喜欢这样类型的工作,真希望能更早进入 在这一

胡晓祥的知识圈 646

Open3D 使用RANSAC分割平面【2026最新版】

使用RANSAC从点云中分割平面,用segement_plane函数。博客长期更新,本文最新更新时间为:2026年2月28日。

点云侠的博客 37万+

怎样才能写出没有bug的代码,这是高手

最近参与了几个需求开发,BUG很少,有些需求没BUG,有些才一个BUG,搞的测试人员还发牢骚说: 大佬,你负责的项目,bug都少的可怜,叫俺怎么活? 哈哈,其实测试人员要感谢我才对,因为开发人员的代码质量高了,会极大的提升测试人员测试的速度,因为测试过程中非常顺畅,没啥阻碍的东西。 设想一下,如果提测后,代码BUG满天飞,测试人员不断的提BUG单,开发人员不断的修复,一不小心还可能修复出...

chen801090的博客 650

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

fir.im Weekly - 如何写出零 bug 的代码

神兽护体,代码无bug。经常看到代码注释的各种形状,这是一种程序员情怀。那么,如何能写出零 Bug 的代码呢,来看看@码农翻身 的这篇手册——零Bug的代码是怎么炼成的。写零 Bug 一定少不了代码审查,推荐下 mindwind 的随笔思考Code Review 程序员的寄望与哀伤,是否也说出了你的心声。除此之外,@叶孤城_ 和其他几个伙伴做了Code Review的高效专业代码审核服务。再来看下

FIRim的专栏 1709

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

怎么炼成代码高手?

这是今天和校招新同事交流时的总结,希望校招新同事能够回顾,也能够写出自己的总结。 一、什么是代码高手?你怎么证明自己是代码高手? 知道许多代码技巧、JS炫彩技巧的人大有人在。你知道多少个.net函数,这一点都没有意义。你知道多少个新鲜IT名词,多少技术介绍,这也没有意义。做,真正做一个原型,做一个项目,解决你手头棘手的问题,这才有意义。 1、快速准确的理解别人说的-〉 2、快速的开发,还准确的反映...

Ice Point. 415

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怎么炼成高手

这是今天和校招新同事交流时的总结,希望校招新同事能够回顾,也能够写出自己的总结。   一、什么是代码高手?你怎么证明自己是代码高手? 知道许多代码技巧、JS炫彩技巧的人大有人在。你知道多少个.net函数,这一点都没有意义。你知道多少个新鲜IT名词,多少技术介绍,这也没有意义。做,真正做一个原型,做一个项目,解决你手头棘手的问题,这才有意义。 ...

weixin_34130389的博客 123

bug是怎样炼成的

 我很遗憾,做软件做了这么多年,思想还是停留在代码层次上,从来没有去提高自己。近期的代码维护工作中碰到的问题,记录。一条导致程序崩溃的代码:unsigned long   lFeedbacktype_id;语句本身没有问题,关键是它出现在哪。昨天开始,A系统的C后台程序忽然崩溃,怎么也启动不了,错误提示是:SQL Error! SQLSTATE = 07006

代码冲动 867

技术高手如何炼成

面试的时候,我会问面试者,你日常如何构建自己的知识体系,如何让自己更高更快更强?多数工程师并没有深入地思考过这个问题,基本上是零敲碎打,随机性大,基本上是脚踩西瓜皮滑到哪里算哪里。本着不能让你白来一趟的精神,好为人师的我会娓娓道来: 第一阶段 认真构建完整的知识体系 十几年前我投身软件行业的时候,光是讲解数据库原理、操作系统、TCP/IP、组网、算法等等基础知识的英文原版书摞起来就等身,认...

weixin_30522095的博客 126
上一篇: Spring本质系列(2)-AOP
下一篇: 谁是互联网之父?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值