我要做一个什么样的程序员

2年前毕业误入程序员行业,是奔着传说的高薪水来的(绝大部分刚出校门毕业生的心态)。

自己不是一个甘于平庸的人,觉得既然已入行,就要在这行有一番作为,不能仅仅是为了赚钱,每天上下班8小时的工作,那不是我要的工作生活。

所以该做一个什么样的程序员,这个问题工作2年以来我一直在思考,探索。希望能给自己的技术生涯一个完美的规划。


首先,希望自己做一个有技术追求的程序员。

大学毕业选择做程序员,原因主要有2个,一种因为对于应届学生,毕业生程序员工资相对其他行业高一些,更有物质吸引力。第二种是对程序有兴趣,毅然投入编程事业。

我想对于绝大多数应届毕业生来说,都是第一种原因吧,我也不例外。

但工作中发现自己对技术非常感兴趣,觉得在工作中不应该将程序员工作仅仅作为赚钱手段,每天按部就班做完自己的工作。每个月都满足于自己所谓的高薪水,做公司的一颗螺丝钉,这样的混吃等死有何意义,那我北漂的意义何在,就是为了赚几年钱回家养老嘛。

心中的一番理想抱负,不能被平庸的打卡生活所磨灭。

所以要做一个有技术追求的程序员,把技术作为自己的兴趣,不能仅仅局限于工作时间,自己生活的任何时间都可以去研究自己的兴趣,这绝对不是被迫的,而是自己主动去做的,因为我是一个有技术追求的人,不会满足于工作之中所涉及的一点知识。

一个有技术追求的程序员与仅仅将程序员视为工作的程序员,可能在工作初期的3 5年内是看不出很大差别的,但是我相信在积累足够经验后,有技术追求的程序员会有爆炸式的能力提升,而打卡上班的程序员还仅仅局限于自己的每日8小时,作为附加值的薪水也会天壤之别。

兴趣是最好的老师,程序除了是我的8小时工作,也会成为我的兴趣。干一行,爱一行,希望自己全身心投入到程序之中。


其次,希望自己做一个有坚持 理想主义的程序员。

最近一直在看罗永浩的视频,包括锤子手机发布会  一个理想主义者的创业故事等,抛开他对自己的包装 炒作等方面,老罗还是一个非常认真的人。这个社会就是缺少认真的人,认真的人最可怕,对于做技术的更是如此。

做技术需要沉淀,这与现在社会的浮躁气息格格不入。看过一篇文章《成为IT精英,我奋斗了7年》(链接地址:http://bbs.51cto.com/thread-759760-1.html,但这不是这篇文章的出处,文章出处已经无处查询),被主人公所深深的折服。主人公从毕业一直不停的切换做自己喜欢但是缺乏的技术,不在乎薪水的高低,不在乎别人怎么看,一直努力坚持,最终成为了真正的大牛。

主人公的奋斗非常值得敬佩,工作之后我们要面对比学校里更多的事情,社交关系,人情世故,薪水,房车等,如何坚持做到不受干扰,沉心于技术,这是非常困难的。

金钱社会,大家都很浮躁,做事情第一考虑的是钱,程序员行业也被很多培训机构广告给污染了,很多程序员抱怨外面卖煎饼果子 手机贴膜的一个月都有1万多了,做程序员还这么累,比贴膜 煎饼果子多赚不了多少钱,有什么用。我是觉得这种想法是没把自己作为一个真正的程序员,而仅仅将程序员作为赚钱的工具而已。

程序员是技术人员,技术人员需要的是静心 沉淀。先有理想,坚信薪水等附加值就会自己来的。

但我也知道自己不可能像这篇文章主人公完全看淡薪水等外界干扰。

我还是会在跳槽时考虑薪水,还是会一直时不时的想象自己以后在北京的房子,还是会偶尔逛逛汽车之家。我做不到完全的屏蔽外界干扰。

但是工作2年来自己一直坚持写博客,坚持每天写工作笔记,做工作总结,自己心中还是期望做一个有坚持 理想主义的人。

我希望自己不忘初衷,在技术方面要有自己的坚持,坚持写博客,坚持看书,坚持去思考技术问题,坚持做总结。能够在浮躁社会中做一个理想主义的程序员。


最后,希望自己做一个系统级的程序员。

“自带信息,不装系统,随时插拔,自由协作”,这是最近看《罗辑思维》罗振宇讲到的未来互联网社会中人才的定义。

我觉得具备这样特点的人不拘泥于时代,在任何时期都是人才,对于程序员也是如此。

自己是做嵌入式软件方面,刚毕业工作时,困惑自己应该专注于某个模块,还是每个模块都做过,对整个系统进行学习。

后来从其他同事中慢慢发现,专注于某个模块的程序员在解决问题时有局限性,系统级的嵌入式软件工程师看待问题的角度就大不同了。

所以我义无返顾的想去做系统级的嵌入式程序员。

后来认识了一些大牛级的程序员,更加惊奇的发现,这些大牛是不局限于底层上层的,硬件 嵌入式软件 上层APP开发都可以做。完全的自带系统,即插即用。

所以最近我激励自己在研究底层软件的同时学习硬件知识,有时间也学习上层编程语言,如JAVA QT等。

为什么要成为系统级程序员,我思考原因有三。

其一,我们要看清自身价值应该如何衡量,我们在衡量自身价值时不应局限于自己所在公司,而应该是在整个程序员市场。

例如,对于模块化的程序员,他的价值不应该仅仅局限于公司的评价体系,因为对于公司,是希望每个岗位都是一颗螺丝钉。“螺丝钉程序员”对公司运作是非常好的,但是对于程序员本身发展是不利的,“螺丝钉程序员”在程序员市场的价值评价体系中的地位就非常低了。

但是对于系统级程序员,自带系统,能够解决从底层到上层的所有问题,这不是螺丝钉,而是整套设备哦,这不管是在公司的价值评价体系,还是程序员市场的价值评价体系,都是真正的人才。

其二,成为系统级的程序员,对于自己在以后创业也是非常有利的,自己可以站在系统的角度去衡量问题。

其三,90年代第一批程序员中很多都是系统级的程序员,如雷军,求伯君,周鸿祎等。在当前的技术公司中,系统级程序员也绝对是公司的骨干成员。而对于未来,在看克里斯 安德森的《创客》一书中讲到,未来3D打印引发第三次工业革命,个人的价值会进一步的被放大,系统级程序员会发挥更大的作用。

我希望自己能够成为一个系统级程序员。不局限于开发语言,不局限于软件硬件,我想这才是程序员的最高技术境界吧。


这就是这段时间我对于要成为什么样程序员的思考,这也是我想对自己所说的话,了以自勉,希望自己更加努力!


最后附上一首短诗激励自己和大家:

笑天苍 

少年狂

几度笑与泪

雄姿莫彷徨

悲欢哀愁一夜吹

天地男儿走四方

目录 历史 前言 I. C语言入门 1. 程序的基本概念 1. 程序和编程语言 2. 自然语言和形式语言 3. 程序的调试 4. 第一个程序 2. 常量、变量和表达式 1. 继续Hello World 2. 常量 3. 变量 4. 赋值 5. 表达式 6. 字符类型与字符编码 3. 简单函数 1. 数学函数 2. 自定义函数 3. 形参和实参 4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 3. for语句 4. break和continue语句 5. 嵌套循环 6. goto语句和标号 7. 结构体 1. 复合类型与结构体 2. 数据抽象 3. 数据类型标志 4. 嵌套结构体 8. 数组 1. 数组的基本概念 2. 数组应用实例:统计随机数 3. 数组应用实例:直方图 4. 字符串 5. 多维数组 9. 编码风格 1. 缩进和空白 2. 注释 3. 标识符命名 4. 函数 5. indent工具 10. gdb 1. 单步执行和跟踪函数调用 2. 断点 3. 观察点 4. 段错误 11. 排序与查找 1. 算法的概念 2. 插入排序 3. 算法的时间复杂度分析 4. 归并排序 5. 线性查找 6. 折半查找 12. 栈与队列 1. 数据结构的概念 2. 堆栈 3. 深度优先搜索 4. 队列与广度优先搜索 5. 环形队列 13. 本阶段总结 II. C语言本质 14. 计算机中数的表示 1. 为什么计算机用二进制计数 2. 不同进制之间的换算 3. 整数的加减运算 3.1. Sign and Magnitude表示法 3.2. 1's Complement表示法 3.3. 2's Complement表示法 3.4. 有符号数和无符号数 4. 浮点数 15. 数据类型详解 1. 整型 2. 浮点型 3. 类型转换 3.1. Integer Promotion 3.2. Usual Arithmetic Conversion 3.3. 由赋值产生的类型转换 3.4. 强制类型转换 3.5. 编译器如何处理类型转换 16. 运算符详解 1. 位运算 1.1. 按位与、或、异或、取反运算 1.2. 移位运算 1.3. 掩码 1.4. 异或运算的一些特性 2. 其它运算符 2.1. 复合赋值运算符 2.2. 条件运算符 2.3. 逗号运算符 2.4. sizeof运算符与typedef类型声明 3. Side Effect与Sequence Point 4. 运算符总结 17. 计算机体系结构基础 1. 内存与地址 2. CPU 3. 设备 4. MMU 5. Memory Hierarchy 18. x86汇编程序基础 1. 最简单的汇编程序 2. x86的寄存器 3. 第二个汇编程序 4. 寻址方式 5. ELF文件 5.1. 目标文件 5.2. 可执行文件 19. 汇编与C之间的关系 1. 函数调用 2. main函数和启动例程 3. 变量的存储布局 4. 结构体和联合体 5. C内联汇编 6. volatile限定符 20. 链接详解 1. 多目标文件的链接 2. 定义和声明 2.1. extern和static关键字 2.2. 头文件 2.3. 定义和声明的详细规则 3. 静态库 4. 共享库 4.1. 编译、链接、运行 4.2. 动态链接的过程 4.3. 共享库的命名惯例 5. 虚拟内存管理 21. 预处理 1. 预处理的步骤 2. 宏定义 2.1. 函数式宏定义 2.2. 内联函数 2.3. #、##运算符和可变参数 2.4. 宏展开的步骤 3. 条件预处理指示 4. 其它预处理特性 22. Makefile基础 1. 基本规则 2. 隐含规则和模式规则 3. 变量 4. 自动处理头文件的依赖关系 5. 常用的make命令行选项 23. 指针 1. 指针的基本概念 2. 指针类型的参数和返回值 3. 指针与数组 4. 指针与const限定符 5. 指针与结构体 6. 指向指针的指针与指针数组 7. 指向数组的指针与多维数组 8. 函数类型和函数指针类型 9. 不完全类型和复杂声明 24. 函数接口 1. 本章的预备知识 1.1. strcpy与strncpy 1.2. malloc与free 2. 传入参数与传出参数 3. 两层指针的参数 4. 返回值是指针的情况 5. 回调函数 6. 可变参数 25. C标准库 1. 字符串操作函数 1.1. 初始化字符串 1.2. 取字符串的长度 1.3. 拷贝字符串 1.4. 连接字符串 1.5. 比较字符串 1.6. 搜索字符串 1.7. 分割字符串 2. 标准I/O库函数 2.1. 文件的基本概念 2.2. fopen/fclose 2.3. stdin/stdout/stderr 2.4. errno与perror函数 2.5. 以字节为单位的I/O函数 2.6. 操作读写位置的函数 2.7. 以字符串为单位的I/O函数 2.8. 以记录为单位的I/O函数 2.9. 格式化I/O函数 2.10. C标准库的I/O缓冲区 2.11. 本节综合练习 3. 数值字符串转换函数 4. 分配内存的函数 26. 链表、二叉树和哈希表 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树的基本概念 2.2. 排序二叉树 3. 哈希表 27. 本阶段总结 III. Linux系统编程 28. 文件与I/O 1. 汇编程序的Hello world 2. C标准I/O库函数与Unbuffered I/O函数 3. open/close 4. read/write 5. lseek 6. fcntl 7. ioctl 8. mmap 29. 文件系统 1. 引言 2. ext2文件系统 2.1. 总体存储布局 2.2. 实例剖析 2.3. 数据块寻址 2.4. 文件和目录操作的系统函数 3. VFS 3.1. 内核数据结构 3.2. dup和dup2函数 30. 进程 1. 引言 2. 环境变量 3. 进程控制 3.1. fork函数 3.2. exec函数 3.3. wait和waitpid函数 4. 进程间通信 4.1. 管道 4.2. 其它IPC机制 5. 练习:实现简单的Shell 31. Shell脚本 1. Shell的历史 2. Shell如何执行命令 2.1. 执行交互式命令 2.2. 执行脚本 3. Shell的基本语法 3.1. 变量 3.2. 文件名代换(Globbing):* ? [] 3.3. 命令代换:`或 $() 3.4. 算术代换:$(()) 3.5. 转义字符\ 3.6. 单引号 3.7. 双引号 4. bash启动脚本 4.1. 作为交互登录Shell启动,或者使用--login参数启动 4.2. 以交互非登录Shell启动 4.3. 非交互启动 4.4. 以sh命令启动 5. Shell脚本语法 5.1. 条件测试:test [ 5.2. if/then/elif/else/fi 5.3. case/esac 5.4. for/do/done 5.5. while/do/done 5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本的调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核中的表示 3.2. 信号集操作函数 3.3. sigprocmask 3.4. sigpending 4. 捕捉信号 4.1. 内核如何实现信号的捕捉 4.2. sigaction 4.3. pause 4.4. 可重入函数 4.5. sig_atomic_t类型与volatile限定符 4.6. 竞态条件与sigsuspend函数 4.7. 关于SIGCHLD信号 34. 终端、作业控制与守护进程 1. 终端 1.1. 终端的基本概念 1.2. 终端登录过程 1.3. 网络登录过程 2. 作业控制 2.1. Session与进程组 2.2. 与作业控制有关的信号 3. 守护进程 35. 线程 1. 线程的概念 2. 线程控制 2.1. 创建线程 2.2. 终止线程 3. 线程间同步 3.1. mutex 3.2. Condition Variable 3.3. Semaphore 3.4. 其它线程间同步机制 4. 编程练习 36. TCP/IP协议基础 1. TCP/IP协议栈与数据包封装 2. 以太网(RFC 894)帧格式 3. ARP数据报格式 4. IP数据报格式 5. IP地址与路由 6. UDP段格式 7. TCP协议 7.1. 段格式 7.2. 通讯时序 7.3. 流量控制 37. socket编程 1. 预备知识 1.1. 网络字节序 1.2. socket地址的数据类型及相关函数 2. 基于TCP协议的网络程序 2.1. 最简单的TCP网络程序 2.2. 错误处理与读写控制 2.3. 把client改为交互式输入 2.4. 使用fork并发处理多个client的请求 2.5. setsockopt 2.6. 使用select 3. 基于UDP协议的网络程序 4. UNIX Domain Socket IPC 5. 练习:实现简单的Web服务器 5.1. 基本HTTP协议 5.2. 执行CGI程序 A. 字符编码 1. ASCII码 2. Unicode和UTF-8 3. 在Linux C编程中使用Unicode和UTF-8 B. GNU Free Documentation License Version 1.3, 3 November 2008 参考书目 索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值