当前位置:K88软件开发文章中心编程语言C/C++C/C++01 → 文章内容

C/C++开发人员需要的技能

减小字体 增大字体 作者:阿烈的博客  来源:Bcoder资源网  发布时间:2018-12-30 5:00:37

这是我在2012年5月写下的总结性的文章。昨晚我重新阅读了一遍,然后调整了一些内容,但总体的思想没有变。


目录

 1. 概述
  2.    开发技术
   2.1. 编程素养
   (1)算法类
   (2) 提升类
   2.2. 编程语言
    2.2.1.  Java(或c、c++、c# 等)
    2.2.2.  脚本语言python(或ruby等)
     (1) 为什么要学脚本语言?
     (2) 亲身经历
   2.3. 集成开发环境IDE [不细谈]
   2.4. 构建工具
   2.5. 开发最佳实践(具体内容可参考我3月份写的"应用开发部署实践.doc")
    2.5.1.  url怎样才是友好的?
   2.5.2.   调用第三方接口应该注意什么?
   2.5.3.   图片处理(压缩,水印等)
   2.5.4.   测试、设计模式等等
 3. 数据库技术[不细谈]
 4. 其它??(上面提到的都不是本文所讲内容的关键)
  4.1.  网站架构变迁路线
   4.1.1.   单机模式
   4.1.2.   数据库分离
   4.1.3.   数据库主从复制与读写分离
   4.1.4.   架设应用服务器集群
   4.1.5.   数据库分库分表
   4.1.6.   NoSQL?其它?
  4.2.  架构变迁带来的问题
    (1) 你如何知道系统的瓶颈在哪?
   (2)  你如何架设这些服务器?
   (3)  你如何监控这些服务器?
   (4)  集群化,对开发的影响?存储、缓存、session等
   (5)  数据库扩展(主从复制和读写分离,分库,分表)的过程中,你要做什么?
  4.3.  日常工作中的问题
  4.4.  问题的实质是什么?
 5. 如何写出高性能的系统?
 6. 结论:开发者需要什么技能?
 7. 知道结论后,我做了什么?
 8. 参考资料


1. 概述
从去年(2011)开始,我就陆续学习jvm调优、数据库调优等知识,但到现在(2012年5月)也只是懂一点皮毛。

今天春节过来后,开始关注集群与负载均衡方面的内容。2月份北京出差回来后,总结了URL友好性、jvm优化、web组件优化、集群与负载均衡等方面的内容,写了一份《应用开发部署实践》的文档,但许多内容还在完善中。

这期间看了很多人的博客,对照自身的工作经历,不得不让人有感而发,是要总结点东西才行,于是写下了这篇文章。

从技术上面说,开发人员需要什么技能?可能每个人的看法都不一样。这里我只写了我个人当前的一些想法,想法对与错? 还需要自己思考辨别,或用时间来证明吧!

开发人员需要的技能
(1)编程语言是基础,必须要掌握(怎么样才能称为掌握呢?)。
(2)工作中的最佳实践你是需要了解的。但要明确的是,标准总是在不断变化的,最佳实践可能也会过时,不要让最佳实践阻止了我们持续改进。
(3)数据库知识(备份/还原,sql语句等)要了解吧。


但仅有这些知识就足够了吗? 开发完成了,要上线!上线就要考虑服务器的架设和优化;

程序或服务不能提供正常的服务了,我们也希望立即得到反馈的吧!

对一些高并发的应用,你要时时监控服务器(集群)的资源(CPU、IO、内存等的…).

而且你只有真正去运维自己的系统,你才知道怎么在程序里写日志,做监控,做统计…

这就是本文所讲内容的重点。

本文的主要脉络如下:

(1) 先简要的说明了开发技术和数据库技术。开发技术以java为例,说明了要学习脚本语言(python)、总结开发最佳实践等。但像类似lucune等的技术其实也很重要,但在这里尚未提及。

(2) 接着以网站架构的变迁路线和自己的工作中的问题为例,说明了开发人员其实还要学习运维。

(3) 知道结论后,我采取什么行动!

2. 开发技术
2.1. 编程素养
(1)算法篇


《算法导论》
《算法(第4版)》 塞奇威克 (Robert Sedgewick) / 韦恩 (Kevin Wayne)
leetcode算法题


coursera上的一些算法课也不错!

如果你不满足于信息管理系统的CRUD操作,这块肯定要拿下的。

(2) 提升篇


《程序员修炼之道》
《黑客与画家》
《Unix编程艺术》
《代码大全》
《Effective Java》
《clean code》
《编写可读代码的艺术》
《编程之美》
《构建之法——现代软件工程》邹欣
《持续交付:发布可靠软件的系统方法》


2.2. 编程语言
2.2.1. Java(或c、c++、c#等)
真正的读好下面几本书,java基础应该很扎实了。

《Java编程思想》
《Java并发编程实战》
《Effective Java》
《分布式java应用 基础与实践》

事实上JVM的内存模型理应是Java程序员的基础知识。

《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》
《Java虚拟机规范》

如果涉及到其它方面(如web开发,网络编程),当然还要学很多。

《TCP/IP详解 卷1:协议》
...


基本的应用框架(如Spring/MyBatis、Shiro)及类库(如guava,commons包)肯定要熟悉的, 至少要明白实现的原理,如果能深入研究源码肯定是最好的。

2.2.2. 脚本语言python(或ruby等)
(1) 为什么要学脚本语言?
为什么要学脚本语言,因为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题,你就会发现正规的编程语言太难用了。 脚本语言学习简单上手快速,可以让你摆脱对底层语言的恐惧感,可以让你很快开发出能用得上的小程序。例如:

处理文本文件,如csv文件,系统产生的log文件等
遍历本地文件系统 (sys, os, path), 例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果。
方便与数据库打交道。
一些测试数据,用脚本语言非常容易生成。
我为什么要推荐python呢?大家可以看一下Eric Raymond的Why Python? 我简单总结python的几个优点:

它很简单易读;
它接近自然语言;
第三方库成熟、适用面广;
学习参考书: 《Python核心编程(第二版)》 (美)丘恩(Chun,W.J.)

(2) 亲身经历
下面的例子都是我用脚本语言(perl/python)写的。

(1) 生成测试数据(建行团经常用)

生成随机数并保存到文件


#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import sys
import random

'''
生成随机数并保存到文件(可根据已生成的随机数文件生成)
genRand.py minValue maxValue number bit rand_file
python genRand.py 0 100 10 5 rand_file
@args minValue 值范围最小值 0
@args maxValue 值范围最小值 1000
@args number 个数
@args bit 位数
@args rand_file 已生成的随机数文件(每行有一个数字串)
'''

s = set()

#格式化数字
def format(v, bit):
format_str = '%0'+str(bit)+'d'
return format_str % v

#生成随机数
def rand(minValue, maxValue, bi

[1] [2] [3]  下一页


C/C++开发人员需要的技能