都38岁了还能学编程语言吗?

C语言程序设计 2018-05-23 13:51:26

关键词:都38岁了还可以学习编程吗?

都38岁了还可以学习编程吗?

      北京江民科技有限公司(江民杀毒软件)创始人兼总裁。中国著名的反病毒专家、国  家高级工程师。

    

    编程这个东西,你说它简单就简单,你说它难的确也挺难的。大家都说编程是吃青春饭的,目前在国内是这样的,一般年龄大一点都转其它方向,或者当领导了。 

    本质上来说编程这个跟年龄关系不大,有兴趣,什么年龄都可以。有一个朋友都当了好几年教师了,发现没太大意思,让后出来闯天下,面试前看了几天c语言,就上手工作了,且干得很不错。我们都知道江民杀毒软件王江民,他也是大龄学编程。 


     “他38岁开始学习计算机,两三年之内成为中国最出色的反病毒专家之一;45岁只身一人独闯中关村办公司,产品很快占据反病毒市场的80%以上。”这些事实已经让我们无法忽视王江民对中国软件开发带来的影响力,在业内被尊称为老师的王江民,凭借坚持而开拓出了杀毒软件市场,这也成为中国软件产业所仅有的几个亮点之一。尽管现在KV系列产品中早已没有了一行他的代码,而且在市场中的表现也差强人意。但毋庸置疑,KV系列让众多的程序员知道了王江民,而他身残志坚的毅力和品质也让很多程序员面对困难和挫折时,从中得到鼓舞。

     1、理想  

    干什么事情都要想清楚,最终的目标是什么?当你实现这个目标的时候,你会不会快乐!不要听从别人说当程序员薪水高,可是工作压力也大。年龄不是很大的问题,像王江民 这样都过了35,才开始编程!关键还是编程是不是你的理想?你对自己的职业生涯有没有一个规划,学编程是不是你在你职业生涯规划中!否则,当你遇到挫折时,你会迷惘的,毕竟你不再年轻,失败并不像我们这些在学校读软件专业学编程的学生,年轻没有失败!但是当编程真的是你的理想,你想为中国的软件事业贡献自己的一份力量,那种发自内心的力量会让你勇敢地面对任何困难!即使失败,也是一种成功,毕竟中国的软件事业还需要那种有激情的开拓者。 

 2、兴趣 

    所以说38岁绝对不晚,这个编程不像是搞体育的,NBA大部分球星都不会超过40岁,一般17岁左右就开始了。晚了就没有什么上升空间了。但编程这是只要你有兴趣,我们反复强调首要的是兴趣,的确兴趣是我们最好的老师。兴趣使然,加班熬夜通宵你都心甘情愿。 

 3、坚持 

    Jennifer Dewalt,一位艺术家一位大姐姐。她从来没学过编程,之前想过学习编程。突然有一天心血来潮要学习编程,决定在之后的180天内每天写一篇文章,上传每天写的代码。她坚持下来了,因为这件事情,重新认识了自己,创造了奇迹。     从这些人的故事,我想不出做为一个正常人为啥总是要找各种借口搪塞。年龄,专业,种族都是问题嘛? 就如《DOOM启示录》里所言:“在信息时代,客观障碍已不复存在,所谓障碍都是主观上的。如果你想动手开发什么全新的技术,你不需要几百万美元的资金,你只需要在冰箱里放满比萨和可乐,再有一台便宜的计算机,和为之献身的决心。”  

    所以有此以上三点,25岁正值青春年华,学什么都不晚更何况编程呢!

C语言经典小案例

C语言统计文件中的字符数、单词数以及总行数

统计文件的字符数、单词数以及总行数,包括:

每行的字符数和单词数

文件的总字符数、总单词数以及总行数


注意:

空白字符(空格和tab缩进)不计入字符总数;

单词以空格为分隔;

不考虑一个单词在两行的情况;

限制每行的字符数不能超过1000。


请先看代码


#include <stdio.h>

#include <string.h>

int *getCharNum(char *filename, int *totalNum);

int main(){

    char filename[30];

    // totalNum[0]: 总行数  totalNum[1]: 总字符数  totalNum[2]: 总单词数

    int totalNum[3] = {0, 0, 0};

    printf("Input file name: ");

    scanf("%s", filename);

    if(getCharNum(filename, totalNum)){

        printf("Total: %d lines, %d words, %d chars\n", totalNum[0], totalNum[2], totalNum[1]);

    }else{

        printf("Error!\n");

    }

    return 0;

}

/**

 * 统计文件的字符数、单词数、行数

 *

 * @param  filename  文件名

 * @param  totalNum  文件统计数据

 *

 * @return  成功返回统计数据,否则返回NULL

**/

int *getCharNum(char *filename, int *totalNum){

    FILE *fp;  // 指向文件的指针

    char buffer[1003];  //缓冲区,存储读取到的每行的内容

    int bufferLen;  // 缓冲区中实际存储的内容的长度

    int i;  // 当前读到缓冲区的第i个字符

    char c;  // 读取到的字符

    int isLastBlank = 0;  // 上个字符是否是空格

    int charNum = 0;  // 当前行的字符数

    int wordNum = 0; // 当前行的单词数

    if( (fp=fopen(filename, "rb")) == NULL ){

        perror(filename);

        return NULL;

    }

    printf("line   words  chars\n");

    // 每次读取一行数据,保存到buffer,每行最多只能有1000个字符

    while(fgets(buffer, 1003, fp) != NULL){

        bufferLen = strlen(buffer);

        // 遍历缓冲区的内容

        for(i=0; i<bufferLen; i++){

            c = buffer[i];

            if( c==' ' || c=='\t'){  // 遇到空格

                !isLastBlank && wordNum++;  // 如果上个字符不是空格,那么单词数加1

                isLastBlank = 1;

            }else if(c!='\n'&&c!='\r'){  // 忽略换行符

                charNum++;  // 如果既不是换行符也不是空格,字符数加1

                isLastBlank = 0;

            }

        }

        !isLastBlank && wordNum++;  // 如果最后一个字符不是空格,那么单词数加1

        isLastBlank = 1;  // 每次换行重置为1

        // 一行结束,计算总字符数、总单词数、总行数

        totalNum[0]++;  // 总行数

        totalNum[1] += charNum;  // 总字符数

        totalNum[2] += wordNum;  // 总单词数

        printf("%-7d%-7d%d\n", totalNum[0], wordNum, charNum);

        // 置零,重新统计下一行

        charNum = 0;

        wordNum = 0;

    }

    return totalNum;

}

在D盘下创建文件demo.txt,并输入如下的内容:

I am Chinese. I love my country.

China has 960 square kilometers of territory.

China has a population of 1.35 billion.

The capital of China is Beijing.


                                By gunge


                                2014-10-12

运行程序,输出结果为:

Input file name: d://demo.txt

line   words  chars

1      7      26

2      7      39

3      7      33

4      6      27

5      0      0

6      2      7

7      0      0

8      1      10

Total: 8 lines, 30 words, 142 chars


上面的程序,每次从文件中读取一行,放到缓冲区buffer,然后遍历缓冲区,统计当前行的字符和单词数。


fgets()函数用于从文件中读取一行或指定个数的字符,其原型为:

   char * fgets(char *buffer, int size, FILE * stream);

参数说明:

buffer为缓冲区,用来保存读取到的数据。

size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。读取的字符包括换行符。

stream为文件指针。


有的读者问,为什么不使用getc(),每次从文件中读取一个字符,也无需开辟缓冲区。


这样没有问题,但是在处理换行时要注意跨平台问题,因为不同的平台对文本文件换行的处理不一样,Linux以'\n'为换行符,Windows以'\n\r'为换行符,Mac又以'\r\n'为换行符。所以,使用getc()函数处理换行时比较麻烦。


这里去繁就简,通过fgets()读取整行数据,然后再处理每个字符,直接忽略'\n'和'\r'。


注意:由于每行的结尾会有最多2个字节长度的换行符,fgets()还会添加NUL,所以缓冲区的长度至少为1003,才能容纳每行1000个字符,否则strlen()可能返回垃圾值。


请看代码第43行,打开文件出错时,返回NULL,而不是生硬的exit()。这样可以通知主调函数发生了错误,让主调函数做出适当的处理,或者通知用户,提高软件的用户体验。


希望对大家能有所帮助,欢迎大家转发

小编QQ:2557171836


进入阅读原文进入学习

c/c++直播课-每晚21:00-22:00

更多教程,请点击阅读原文加入QQ群一起学习!

   


关注微信公众号领取更多更好玩的游戏代码