软件开发人员的最佳实践

22、设计模式:软件开发中的最佳实践 本文详细介绍了设计模式在软件开发中的应用,包括创建型、结构型和行为型模式的定义与分类,并通过具体案例分析了工厂模式、单例模式和观察者模式的实现方法。同时探讨了设计模式的原则、优缺点以及如何结合多种模式解决复杂问题,帮助开发者构建更灵活、可扩展的系统。 阅读详情


        最近在一个网站上看到一篇写关于软件开发人员应该有的几项实践,感觉写的非常的好。下面将列举下文章中提到的几个方面。

        首先文章中提出,软件开发人员需要不断的练习,什么是练习,为什么要练习,练习意味着什么?文章中给出了很好的解读。练习是一种习惯,练习是一个过程,练习并不意味着记住,练习需要不断的实践,练习需要专心致志的付出。射击运动员需要不断的练习才能射中更多的分数,开车也需要不断的练习才能成为driver,写字需要不断的练习才能写出好的字,然后才有可能成为书法家。

Shooting, Driving, Writing


 

Best Practice 1- Keep Reading Existing Software SourceCode

       大家会经常读好的开源软件的代码吗?也许会被认为是一件很枯燥的事情。小说家之所以成为小说家,是经过阅读成千上百优秀的小说才成为小说家,所以要写出优秀的代码也需要阅读成千上万行的代码。


Best Practice 2 - Complete your documents before next step

       在开发大型的软件中,分析文档非常重要,只有把要分析的东西都弄清楚了,才能进行下一步的开发。在开发之前,我们需要问自己下面这几个问题:

  • 1.软件的需求描述在哪里?
  • 2.软件设计文档在哪里?
  • 3.是否对所有的假设和限制条件描述清楚了?
  • 4.你是否评审完所有的文档?

…

如果你对上面的问题回答都是肯定的,你可以进行下一步的操作,Coding,许多公司都有一套完整的开发流程来保证各个环节的正确实施。



 

Best Practice 3 - Follow the defined standards, don'tcreate it

在软件开发过程中,需要遵循已有的标准,不要随便地创造自己的风格。在这点上,许多公司有自己的编程标准,这些标准可能是业界公认的,也有可能是前面开发人员经过好多年总结的比较好的实践。有一句话说的很好,追随前人的脚印,往往可以少走一些弯路。这些标准可能包括下面的几种:

文件命名规范,函数和模块命名规范,变量命名规范,可读性及其安全性规范等。

干净、整齐一致、漂亮是源代码可读性和可理解非常重要的特征,我们要记住一句话:Source code is your baby.


Best Practice 4 - Code should be written to be reviewed.

         可读性往往是源程序好坏最直观的体现。在我们写代码的时候,我们要时刻记住自己写的代码总会有人来评审,将面临的各种缺陷,比如:不好的编码风格,没有遵循标准,函数定义和注释不规范,可读性差,打开的文件没有关闭,分配的内存没有释放,太多的全局变量,太多的硬编码,太多重复代码等。在编码的时候要时刻记住上面的问题,当自己完成编码时,至少自己需要检查一遍,这往往能减少90%的错误。


        我非常喜欢一句话:Accept criticism but don't criticize!当自己写的代码比较烂的时候,我们要接受同行评审中指出的问题,别人给自己指出来并不意味着批评,而是更好的改进自己,再后面少犯错误。其实Review也是开发过程中一个至关重要的环节。作为一个开发者,也需要站在测试者的角度去看待问题,这样就可以减少错误的发生。


Best Practice 5 - Testing to be followed like a religion.

        每次写完代码都需要测试,不管是有经验的开发者还是新手,每修改一处代码需要经过测试验证。我们必须做到:

  • 时间再紧急对于测试也不要妥协
  • 修改一行注释得测试
  • 修改一个变量名得测试。
  • 如果你觉得没有必要,那是非常危险的。

Best Practice 6 - Keep your Code and Documents Safely.

  这点主要是防止代码和文档丢失,需要我们养成每天备份文档的习惯。也许大家都觉得比较繁琐,建议可以使用日期、时间、版本号来备份。

Best Practice 7 - Keep your Tools & Techniques Handy

  俗话说的好,工欲善其事,必先利其器。同样对于开发人员来说,好的工具和技巧能提高我们的效率还能减少出错的几率。比如:

  •        1.用一个好的编辑工具来编写和修改代码
  •        2.用一个好的调试器来调试代码
  •        3.用一个内存监视器来动态分配的内存
  •        4.用WinSCP or FileZilla 来传输文件。

         

 

Best Practice 8 -Leave the ego behind, Be eager to learn.

  这一点我觉得也比较重要,我们经常从书本和网上获取知识,但是对于IT,没有任何一个人能掌握任何一个领域的所有的知识,每天我们将面临着各种各样的问题。为了让自己不落后需要经常去学习。

New technologies are coming everyday


 

也许成功的道路上没有捷径,需要百倍的努力才有可能成功。今天你付出了一点,也就离成功的道路近一点。



统一开发过程.软件开发者的最佳实践 介绍reational rose 立即下载

相关推荐

RUP-软件开发团队的最佳实践

RUP-软件开发团队的最佳实践 RUP-软件开发团队的最佳实践

软件开发最佳实践_您需要了解的5大软件开发最佳实践

软件无处不在,但是创建新软件产品的过程可能很复杂且具有挑战性。 这就是为什么软件开发最佳实践很重要,并且可以帮助降低成本和加快流程的原因。 没有目标,软件项目就没有方向。 项目应从对计划软件目标的明确定义开始,与利益相关者讨论这些目标,并对期望和风险进行评估。 同时,您应该准备好应对可能出现的各种挑战,并实施策略以保持开发过程的正常进行。 最佳实践并不总是思想的启示。 有时它们很明显。 ...

服务器编程交流平台 1146

基于python的奥运会历史数据分析【120年】

数据分析实战案例

xff123456_的博客 3338

RUP(统一软件开发过程)之最佳软件开发实践

Rational统一过程:简称为RUP 是一个软件开发过程 是一个过程产品 是一个过程框架 包含了6个最佳软件开发实践 为所有方面和层次的程序开发提供指导、模板和工具指南的支持。 软件工程的三个要素是:工具、方法和过程。 采用有效的软件过程,是实现软件成功开发的前提。当前流行的软件过程有: Rational Unified Process(RUP) OPEN Process Object...

咕咕怪的博客 5195

RK3566开发板实战:YT8512C百兆网卡调试全记录(附DTS配置避坑指南)

本文详细记录了RK3566开发板上YT8512C百兆以太网卡的调试全过程,包括硬件信号检测、DTS配置优化及常见错误排查。特别针对DTS配置中的关键参数和避坑指南进行了深入解析,为开发者提供实用的调试技巧和经验分享。

weixin_29189381的博客 267

sqoop抽取mysql的数据到hive表里面,字段内容被自动截取,导致字段不全的问题解决

今天央视重新转播NBA,写篇博客纪念一下这个重要的日子,湖人的表现就呵呵了!!!! 强行转到博客的主题来 mysql的字段属性:该字段能存下的值比如:“山东” `province` varchar(3) NOT NULL COMMENT '省份' 用sqoop sqoop import --connect "jdbc:mysql://xxxxxx:3306/xxxxxx?tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull..

放肆桀骜 963

软件开发项目的最佳实践。

引言 大多数软件项目都是失败的。事实上,Standish group 的报告显示 80% 多的项目是不成功的,原因是超出了预算、未能按时完成、遗漏功能或者因为一个...

weixin_30642267的博客 293

FPGA中参数化SPI接口设计与Verilog实现

SPI(串行外设接口)作为嵌入式系统的核心通信协议,通过全双工、高速率特性在FPGA与Flash、ADC等外设交互中占据重要地位。参数化设计通过抽象时钟极性、数据位宽等可配置维度,采用分层架构实现硬件复用,显著提升开发效率。Verilog实现需重点处理跨时钟域同步和可配置帧结构,结合AXI总线集成与UVM验证方法学,可构建适应工业控制、物联网网关等场景的高可靠SPI解决方案。

ciya3282的博客 1408

软件开发中的最佳实践是什么?

刚才,我在 Pluralsight 网站发布了一个教程,标题为『促成商业交易的最佳实践』。这个标题有个不太认真的元素,它在媒介上或许不是必要的最好想法,我这里的好处是和标...

ifeves的博客 748

【语音识别入门】特征提取(Python完整代码)

给定一段音频,请提取12维MFCC特征和23维FBank,阅读代码预加重、分帧、加窗部分,完善作业代码中FBank特征提取和MFCC特征提取部分,并给出最终的FBank特征和MFCC特征,存储在纯文本中,用默认的配置参数,无需进行修改。抽样时频率不够高,抽样出来的点既代表了信号中的低频信号的样本值,也同时代表高频信号样本值,在信号重建的时候,高频信号被低频信号代替,两种波形完全重叠在一起,形成严重失真。DFT得到了每个频带上信号的能量,但是人耳对频率的感知不是等间隔的,近似于对数函数。

weixin_51293984的博客 1万+

TCGA之GDC-client工具下载安装与使用

文章主要是对GDC-client工具下载TCGA数据库数据整个过程的一个记录 1.下载GDC-client工具 GDC-client工具网址:GDC Data Transfer Tool | NCI Genomic Data Commons (cancer.gov) 我这里下的是上图中红圈中的版本, 2.解压安装 从网上了解的是不能解压到带中文的路径里,解压后是一个.exe文件,为了能直接在cmd命令行下使用,将其加入系统环境: 点击新建之后,输入将文件解压到的路径,然后...

better_strong的博客 1万+

设计师了解印刷知识_软件开发人员的印刷术基础知识和最佳实践

设计师了解印刷知识This article was first published at https://zean.be/articles/typography-basics-and-best-practices本文最初发表在https://zean.be/articles/typography-basics-and-best-practicesTypography is about shapin...

weixin_26716079的博客 423

单细胞转录组数据质控实战:如何用Seurat精准过滤低质量细胞(附完整代码)

本文详细介绍了使用Seurat进行单细胞转录组数据质控的实战方法,包括基因检出数、分子计数和线粒体基因比例等关键指标的解读与可视化技巧。通过动态阈值策略和高级质控技巧(如双细胞检测和红细胞过滤),帮助研究者精准过滤低质量细胞,提升数据分析可靠性。附完整代码示例,适合生物信息学研究人员参考实践。

ii567的博客 824

软件设计师【软件工程:软件开发模型、XP极限编程十二最佳实践】

   一.软件开发模型                                     二.XP极限编程十二最佳实践                                    

qq_35382207的博客 352

【STK】手把手教你利用STK进行导弹和反导仿真04 - STK/MMT模块03 导弹飞行工具应用案例

飞行设置的工具栏就在附加窗口的中间,首先点击左边的General,修改这个项目的名字。然后在下拉的System中选择导弹的类型,这里我们选择远程。(4)输出数据文件到STK,任务窗口里选择Export Manager项,飞行数据输出到STK。项目可以命名为Test;(1)首先建立新项目,点击Flight菜单中的New Flight选项,见下图。首先看世界地图中间的红圈,是一个导弹形状的图标,这个图标表示的是导弹的发射点。选择下面的Export Manager,依次勾选红框的选项。我们拖动这个导弹的图标,

weixin_44184852的博客 1630

深度学习工具包 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")

软件开发和测试的 30 个最佳实践[转载自伯乐在线]

软件开发和测试的 30 个最佳实践 软件开发和测试的 30 个最佳实践 原创 2017-06-29 伯乐在线 伯乐在线 (点击上方公众号,可快速关注) 编译:伯乐在线/maifans 如有好文章投稿,请点击 → 这里了解详情 这些软件开发和测试的最佳实践,可以帮你节省时间和避免问题。 加入

CleanerBlog 504

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

一个十人开发团队的人员安排

对于一个以开发一般的商业应用软件的开发团队来讲,对于《人月神话》中提及到的外科手术队伍并不是一个值得借鉴的方法。所以在此应该对一些概念进一步进行分析。   1.效率问题:根据我们的经验数据,一个有经验的编程高手对于应用软件来讲一天的代码编写量可以达到400-500行代码,而对

阿海的博客 7234

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

设计模式-Runoob:设计模式

ylbtech-设计模式-Runoob:设计模式 1.返回顶部 1、 设计模式 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来...

weixin_30273763的博客 358

【经验总结】开发人员的最佳做法-翻译来源于一位工作16年的大佬总结

开发人员的最佳做法 目录 前言 最佳实践1-继续阅读现有软件的源代码 您阅读软件源代码吗? 最佳做法2-下一步完成文件 今天学到的东西,为明天做好准备! 最佳实践3-遵循已定义的标准,不要创建它 源代码是您的宝贝! 最佳做法4-应编写代码进行审查 接受批评但不要批评 最佳实践5-像宗教一样接受测试 如果您不想遵循它?你会遇到麻烦的! ​ 庆祝发现的每个错误 最佳实践6...

rong11417的博客 730

标题:Java中时间工具类的封装及最佳实践 在软件开发中,时间处理是一项至关重要的任务,而 Java 提供了丰富的日期和时间处理功能。然而,为了更方便地处理时间,开发人员经常会封装自己的时间工具类,

时间工具类的封装可以减少代码重复,提高代码的可维护性,并且可以帮助开发人员更方便地处理时间。然而,在使用封装的时间工具类时,需要注意线程安全性、异常处理和最佳实践,以避免潜在的问题。希望本文能够帮助读者更好地封装和使用时间工具类,提高代码质量和开发效率。这篇博文涵盖了在 Java 中封装时间工具类的最佳实践,以及为什么需要封装时间工具类。如果您有任何问题或者建议,请随时提出,我会乐意与您讨论。/**** 日期月份加一个月* 日期(2014-11)*/try {

Mars 615

从一个实例详解敏捷测试的最佳实践

http://www.ibm.com/developerworks/cn/rational/r-cn-agiletestexplain/ 第一部分:敏捷软件开发简介 敏捷软件开发(Agile Software Development)初起于九十年代中期。最早是为了与传统的瀑布软件开发模式(waterfall model)相比较,所以当时的方法叫做轻量级方法(Lightweight

stefanying的专栏 780

开发人员安全问题_开发人员需要了解的安全性

开发人员安全问题 DevOps并不意味着每个人都必须是开发和运营方面的专家。 在角色往往更专业的大型组织中尤其如此。 而是,DevOps思维的发展方式使其更加关注关注点分离。 在一定程度上,运营团队可以为开发人员(无论是本地部署还是在公共云中)部署平台,并且可以避开障碍,这对两个团队都是好消息。 开发人员可以获得高效的开发环境和自助服务。 操作可以集中在保持底层管道运行和维护平台上。 这是各...

cuml0912的博客 432

Autosar资料集:汽车电子软件开发的标准化利器

Autosar资料集:汽车电子软件开发的标准化利器 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在汽车电子软件开发领域,标准化是提高开发效率、降低成本、确保质量的关键。Autosar资料集应运而生,为开发人员、工程师和学者提供了一个全面、权威的资料库。这个项目集合了关于AUTOSAR(AUTomotive Open System ARchitecture)的丰富资源...

gitblog_06791的博客 300

众人评说《我们在微软怎样开发(英文版)》

本书相关信息:http://www.cnblogs.com/turingbooks/archive/2009/05/06/1450391.html   查看详情  “这本书很好地兼顾了管理和技术两个方面,内容涉及软件建模、安全设计、防御性编程等。应用书中提供的最佳实践,可以令开发人员的软件开发水平更上一层楼。” ——John Robbins,微软技术大师,Wintellect 创始人...

weixin_34268169的博客 95
上一篇: Threads 的基本使用方法
下一篇: [读书笔记]Windows程序内部运行机制【一】
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值