雷军:我的程序人生路

今天有朋友发给我一篇我在20年前在BBS上写的帖子。那还是1996年,我们通过电话线拨号连接到西点BBS上飙帖子玩的年代。那是一个互联网混沌初开的年代,那是一个BBS和Email几乎主宰了全部互联网的年代,那是一个青春的理想和热血沸腾的年代。

我是一个程序员,一个软件工程师。到今天,我也依然是一个程序员,一个软件工程师。

本文是20年前我对程序人生的一点看法。20年后的今天,重读之后,这依然是我对程序人生的态度。

程序人生

[题记]如果程序人生的话,这条路太漫长

“程序人生"这个词是什么意思,刚开始时我并不明白。这个词源于业余BBS站,站上PROGRAMMER栏目的中文名就是这个词,英文翻译过来就是"程序员”,但程序人生又比程序员多了很多含义,似乎多了一种沧桑感。但不管这么多,讲讲编程感受不算跑题。

首先我先讲讲自己的路,这样也许大家才能相信我的坦诚和我的这篇编程感受的真实性。这些感受是我个人感受,不全面的地方,请大家指正。

我的程序人生路

我并非天生喜欢电脑,上高中时也没有想过程序员的生活。我学电脑非常偶然,小时候的一个好朋友上大学时选择了电脑专业,为了和这个朋友有更多的共同语言,我也选择了计算机系,开始步入程序人生的道路。

当我学了一点电脑知识后,就发现电脑将是我人生的最爱。读书时,我不是特别会搞关系的人,同学关系说不上差,也好不到那里去。我是八七年上的大学,我们大一下学期才有专业课。当我有资格上机的时候,发现电脑世界太美妙,就一头扎进去。当时用的是Motorola 68000 (相当于Intel 8088), 540K的内存,运行的UNIX操作系统,八个人一起用。

大二学PC,又过了一学期,开始出现在老师的实验室,帮忙干活,当时写了现在还有人用的RI(一个清内存的小工具)。又过了一个学期,开始和校外的公司接触。大二暑假,和一个朋友组建了Yellow Rose组,写了我第一个商品软件BITLOK 0.99。后来开过公司也写过一些软件。

大学毕业后,分到研究所,不太适应研究所的气氛。调槽到金山软件公司,开始了职业程序员的生涯。后来成了北京金山软件公司的经理,但我还是一名程序员。

编程的感受

—程序员活在自己想象的王国里—

我刚接触电脑就发现电脑的妙处,电脑远没有人那么复杂。如果你的程序写得好,你就可以和电脑处好关系,就可以指挥电脑干你想干的事。

这个时候你是十足的主宰。每每你坐在电脑面前,你就是在你的王国里巡行。这样的日子简直就是天堂般的日子。

电脑里的世界很大,编程人是活在自己想象的王国里。你可以想象到电脑里细微到每一个字节、每一个比特位的东西。

—我爱编程这个工作,可以肯定我会干上一辈子—

不少人认为程序员最多干到三十五岁就可以收山换环境了,脑子也差不多该歇歇了,体力也不支了。并认为写程序是年轻人的事情,到了一定岁数,估计没什么人再当程序员了。

当我刚有一点水平的时候,我也认为编程辛苦,也想三十岁后干别的。当我年长一点后就发现了自己的无知。一个人大学毕业就二十一二岁,有点水平的时候可能二十五,接着就是老婆加上孩子和房子等等诸多事情。

一切搞掂的时候,也许就是三十五岁。如果这样的话,我们就不用选择程序人生的道路。

电脑进入我国时间不短,但真正大规模开始用,还是八五年PC开始的,因此国内真正写电脑程序的人最长也就写了十几年(不知道是否还有这样的人)。由于电脑应用在国内时间比较短,国内开发的主力是三十五岁以下的年轻人为主。但这不表示程序员如同红粉佳人般的容易衰老。美国和台湾开发以三十四十多岁的人为主。开始的时候,我们觉得我们没有什么不能做的(现在还能听到这样的豪言壮语),而且更要命的是好象我们特别聪明,特别适合开发软件,比老外强得多。当我们真正接触那些杰出的开发人员的时候,发现他们太厉害了,都有十多年的开发经验。虽然也有很多年轻人做了很多好东西,但决大多数的产品出自这些有丰富开发经验的程序员的手。

刚毕业的时候,编程不仅仅是爱好,而且也成了一辈子的工作。整天不知道写些什么东西,觉得特别没劲,找不到感觉,特别灰心。后来,才明白,只有全身心地投入,程序才会有意识。

写程序简直是在自杀,巨费精力巨费脑子巨累。但我爱编程这个工作,可以肯定我会干上一辈子,虽然我没有打算一生只干这一件事。用一生来编程序是一件既容易又困难的事。如果碌碌无为,为交差写点程序,这样写两辈子的人都有。但如果想全身心地写程序,写十年就不是一件容易的事。现在我不少朋友都洗手了,有时我也想"用什么电脑,Windows外的世界不是也很大吗?"。面对电脑的时候,立刻顿悟:电脑还是自己最擅长干的事,也是最顺手的事。

—高级程序员不是追求的目标—

有的人学习编程技术,是把高级程序员做为追求的目标,甚至是终身的奋斗目标。后来参与了真正的商品化软件开发后,反而困惑了,茫然了。

一个人只要有韧性和灵性,有机会接触并学习电脑的编程技术,就会成为一个不错的程序员。刚开始写程序,这时候学得多的人写的好,到了后来,大家都上了一个层次,谁写的好只取决于这个人是否细心、有韧性、有灵性。掌握多一点或少一点,很快就能补上。成为一个高级程序员并不是件困难的事。

当我上学的时候,高级程序员也曾是我的目标,我希望我的技术能得到别人的承认。后来发现无论多么高级的程序员都没用,关键是你是否能够出想法出产品,你的劳动是否能被社会承认,能为社会创造财富。成为高级程序员绝对不是追求的目标。

—编程不仅仅是技术,还是艺术—

有人认为编程是一种熟练工种,也有人把编程说成是艺术创作。这两种意见争论比较激烈。

我们换个工种来看,石匠应该是熟练工种,属于工人,更艺术似乎沾不上边。但正是这些石匠,给我们留下多少文物古迹,如乐山大佛、莫高窟等等。应该说这些石匠给我们留下了无穷的文化财产。

现代软件工业已具相当规模,很多软件的完成需要的是大兵团作战。

一名普通程序员接受编写某一模块的任务后,往往只是写代码,发挥的余地很小。在大项目中,很多程序员只能了解到和自己所编模块相关的很局部的细节,另外还受到开发环境的限制,真的很难体会到自己在从事"艺术"创造,更多的时候是感到自己在从事重体力劳动。有的时候还担心自己苦苦参与的这个项目究竟有没有意义,是不是在同类产品中有竞争力,会不会开发出来以后就因为硬件的发展,操作系统的换代而过时…

我认为编程的工作和石匠比较相似,有很多是技术活甚至是体力活,但编写优秀软件是件很难的事。这两种想法都有片面性,编程应该说两种属性都有。编程不仅仅是技术,也还是艺术。

编程是技术活,才有可能大规模进行,才会有软件工程。也正是编程是艺术,才会有如此多的好产品。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新能源车将突破2000万辆,汉威科技为电池安全保驾护航

近年来,我国新能源汽车销量持续突破新高。据中汽协数据,1~10月,国内新能源汽车销量达728万辆,同比增长37.8%,市场占有率达到30.4%。随着第四季度车市传统旺季的到来,新能源消费需求将进一步释放&#xff0c…

Python小灰灰

系列文章 序号文章目录直达链接表白系列1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want595.blog.csdn.net/article/details/1295031234漂浮爱心htt…

【软件工程师从0到1】- 封装 (知识汇总)

前言 介绍:大家好啊,我是hitzaki辰。 社区:(完全免费、欢迎加入)日常打卡、学习交流、资源共享的知识星球。 自媒体:我会在b站/抖音更新视频讲解 或 一些纯技术外的分享,账号同名:hi…

蓝桥等考C++组别八级005

第一部分:选择题 1、C++ L8 (15分) 以下关于break的说法正确的是( )。 A. 只有循环结构里面才可以使用break语句。 B. 程序运行到break语句的时候会暂停,直到用户按下任意键才会继续执行。 C. 嵌套循环的内层循环里面遇到break的时候,整个嵌套循环结构会立即停止,…

Jenkins扩展篇-流水线脚本语法

JenkinsFile可以通过两种语法来声明流水线结构,一种是声明式语法,另一种是脚本式语法。 脚本式语法以Groovy语言为基础,语法结构同Groovy相同。 由于Groovy学习不适合所有初学者,所以Jenkins团队为编写Jenkins流水线提供一种更简…

kubernetes学习-概念5

服务(Service) Kubernetes 中 Service 是 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。 Kubernetes 中 Service 的一个关键目标是让你无需修改现有应用以使用某种不熟悉的服务发现机制。 你可以在 Pod 集合中运行代码,无…

nginx使用详解:转发规则、负载均衡、server_name

文章目录 一、nginx常用的转发规则location 指令说明location转发使用 二、upstream负载均衡使用三、server_name使用四、其他常用配置限制请求类型处理静态资源目录遍历问题限制客户端使用的ip或者域名 五、需要注意的地方location /api1 探讨location ~ /api1 探讨&#xff0…

DataFunSummit:2023年OLAP引擎架构峰会-核心PPT资料下载

一、峰会简介 OLAP技术是当前大数据领域的热门方向,该领域在各个行业都有广泛的使用场景,对OLAP引擎的功能有丰富多样的需求。同时,在性能、稳定性和成本方面,也有诸多挑战。目前,OLAP技术没有形成统一的事实标准&…

redis性能管理

redis的数据库是存放在内存当中,所以对内存的监控至关重要 redis内存监控和解析 1.如何查看redis内存使用情况 [rootlocalhost utils]# redis-cli -h 20.0.0.170 -p 6379 20.0.0.170:6379> info memory used_memory:853336 //redis中数据占用的内存 use…

触发设备离线

业务场景 业务开发过程中,我们经常会需要判断远程终端是否在线,当终端离线的时候我们需要发送消息告知相应的系统, 环形队列 1.创建一个index从0到30的环形队列(本质是个数组) 2.环上每一个slot是一个Set&#xf…

python 执行系统命令

subprocess 模块和 os.system 或 os.popen 等函数相比,功能更为强大和灵活,是 Python 官方推荐的执行系统命令的方法。主要的优势包括: 更强的错误处理:subprocess 模块可以更精细地控制错误输出和错误代码,而 os.syst…

自定义springboot的生命周期函数在项目启动完成后去取配置文件中的值

主要是实现smartLifecycle类 package com.ruoyi.workflow.util;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springfr…

MYSQL索引使用注意事项

索引使用注意事项: 1.索引列运算 不要在索引列上进行运算操作,否则索引将失效; 2.字符串不加引号 字符串类型使用时,不加引号,否则索引将失效; 3.模糊查询 如果仅仅是尾部模糊匹配,索引将不会失…

防火墙暴露端口

如果你想开通防火墙上的端口,具体的操作方式可能会取决于你所使用的操作系统。以下是一些常见操作系统的步骤: 1. Linux(例如,Ubuntu 或 CentOS): 使用 ufw(适用于 Ubuntu): # 开…

RK平台查看板子上的dts信息

简介 dts文件描述了硬件每个模块的信息,我们嵌入式软件的调试很多时候都是在改dts文件,有时候我们不确定板子上的固件是否已经更新了我们的修改,这时候我们可以直接读取板子上的dts信息,下面来演示一下。 进入uboot命令行模式 …

关于软raid的实现及常见问题

RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,以硬件(RAID卡)或软件(MDADM&…

关于用css设置input输入框hover的时候的样式以及当input为disabled的时候,不要让hover样式生效

效果如果&#xff1a; 编辑状态下的时候&#xff1a; 只读状态下的时候&#xff1a; 代码如图&#xff1a; <input type"text" name"dataForm.exportCode" id"exportCodeItem" required :disabled"editDisabled" />input:not(…

【前端学java】语法练习-工具类的封装(13)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

java.net.UnknownHostException: eureka

java.net.UnknownHostException: eureka 哦。HOST漏了 #linux /etc/hosts #windows C:\Windows\System32\drivers\etc\hosts 127.0.0.1 eureka7000 127.0.0.1 eureka7001 127.0.0.1 eureka7002

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…