首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

13 岁编程!少年比尔·盖茨如何成为最成功的自学成才程序员?

  • 24-03-05 01:41
  • 4430
  • 8277
blog.csdn.net

640?wx_fmt=gif

【CSDN编者按】自1987年以来,比尔·盖茨首次出现在福布斯全球富豪榜上,就开始了他的辉煌时代。科技上,他建立起了微软这个庞大的科技帝国;慈善上,他捐赠了数十亿美元用于全球健康项目——毋庸置疑,比尔·盖茨绝对是全球最受尊重的偶像之一。

而这位出生于1955年的首富,少年时就对编程有着极为浓厚的兴趣,也正是这种“自学成才”的精神,助他一步步走上人生的巅峰。

640?wx_fmt=png

作者 | Genevieve Carlton
译者 | 彼得

责编 | 郭芮
出品 | CSDN(ID:CSDNnews)

以下为译文:

比尔·盖茨是当今世界上最富有的人之一。作为微软的联合创始人,盖茨建立起了一个庞大的科技帝国。作为比尔和梅琳达·盖茨基金会的联合创始人,他捐赠了数十亿美元。但是,比尔·盖茨在创立微软之前是个怎样的人呢?


比尔·盖茨在年轻的时候是一个勇于挑战和打破现有规则的人。这一点,也许是他能成为历史上最成功的自学成才的程序员的原因之一。


在他11岁的时候,比尔·盖茨变得爱和人争论并且沉默寡言。他的父母,威廉和玛丽·盖茨,认为他们的儿子在学校可能让人讨厌,没有朋友,因而十分担心。比尔·盖茨在家也拒绝做家务,并且和母亲争吵。盖茨曾经对他的一位顾问说过:“在那个时候,我和我的父母就谁应该拥有控制权而斗争。”


对控制权的争取和对现有规则的蔑视,对比尔·盖茨的发展提供了积极的引导作用,把他从一个郁郁寡欢的孩子变成了一个自学成才的青年程序员。所有的这一切,都是从盖茨的父母让他在西雅图的莱克赛德学校(Lakeside)上学的时候开始的。


这所预备学校是全国最早拥有计算机的学校之一。正如比尔·盖茨后来解释的那样,“我13岁的时候就喜欢上了编程。那个时候,我所在的学校刚刚成为全国第一批拥有计算机终端的学校之一。这台机器又大又慢,甚至连屏幕都没有,但是,我还是被它吸引住了。”


在1968年,盖茨和他的朋友们每天都在电脑上花上几个小时,来学习电脑的编程语言:BASIC或初学者通用的符号指令代码。很快,盖茨就可以自己编程。


盖茨第一次的编程实践是和一个流行的游戏相关。盖茨说:“我13岁的时候,写了我的第一个软件程序。这是为了玩井字游戏进行的开发。当时,我用的电脑虽然又大又笨重,而且速度又很慢,但是它绝对引人注目。”


当比尔•盖茨在20世纪60年代开始自学编程时,那个时代的计算机和我们今天看到的大不相同。盖茨回忆说,“当时的计算机终端没有屏幕。为了玩,我们在打字机式的键盘上输入我们的动作。”在井字游戏中,进入每一步之后,玩家都必须等待计算机打印出他们的动作。


盖茨开发这个程序的时候,没有太在意效率。“使用铅笔和纸张玩一个井字游戏需要30秒的时间,这可能会占用大部分午餐时间,但是没有人在乎。当时,在机器上,我们也只有这些东西可玩。”


在莱克赛德学校,比尔·盖茨在计算机房遇到了比他大两岁的学生保罗•艾伦。他们很快学会了以系统操作员的身份登录到计算机系统,从而避免了使用机器的时间限制。当他们暂时无法访问莱克赛德学校的计算机的时候,他们就假冒大学生,去华盛顿大学。


当比尔·盖茨假冒大学生来使用那些功能强大的计算机的时候,他才十几岁。与艾伦一起,盖茨使用了CDC6400和Burroughs5500,这两种机器需要使用包含运行程序代码的穿孔卡片。


盖茨在读高中的时候,就利用他的编程能力进行商业运作。他使用另一种编程语言Fortran创建名为Traf-O-Data的一家公司。保罗·艾伦解释说:“如果不是因为我们在traf-0-data所作的尝试,微软可能就不会出现。”


Traf-O-Data公司主要开发统计西雅图交通量的计算机系统。当他们通过Traf-O-Data公司赚到2万美元的时候,艾伦和盖茨还都只是十几岁的孩子。虽然他们的公司最终破产了,但它也给盖茨宝贵的经验教训,比如将编程和商机进行结合所能创造的价值。


在莱克赛德学校学习的这些年,盖茨曾经多次潜入华盛顿大学校园,偷偷访问他们不同地点的计算机系统。他和艾伦听说物理大楼的PDP-10每天凌晨都可以使用几个小时,盖茨后来说,“一位朋友有物理大楼的钥匙,所以我们偷偷地去了很多次。”


后来,他去了哈佛大学并且在学习不到两年后就退学。这时,盖茨已经拥有丰富的编程经验。他创立了一家公司,他为政府机构编写代码,并且他自学了很多编程语言。正如盖茨后来所说,“自我探索是伟大的,因为你培养了一种自信心。”


编程给了盖茨方向。“如果你的程序错了,尝试之后你就知道。如果程序不能工作,你就会解决问题,然后再一次进行尝试。”


在很小的时候,盖茨就开始尝试控制计算机。盖茨以成人的身份解释说,他对计算机很着迷,因为计算机给了他一种孩提时代的控制感。“我们太小了,不能开车,也不能做大人可以玩的其他事情,但是我们可以给这台大机器下订单,它会一直服从的。”


比尔·盖茨知道什么时候该改变规则,什么时候该遵守规则。他从小就重视自我探索。后来,这种推动的意愿帮助微软取得了成功。 


我们能从比尔·盖茨的青年时代学到什么? 


学习什么时候可以改变规则。比尔·盖茨可能偷偷溜进了大学的计算机实验室,但他这样做是有原因的。盖茨无法正常使用华盛顿大学的高级计算机,但盖茨想办法得到了他想要的。正如他解释的那样,“那里的人们给了我们很多帮助。他们借给我们手册和让我们能从垃圾箱中找到操作系统清单。”


保持前进的动力并不断进行探索。当比尔•盖茨的第一家公司Traf-o-data倒闭时,他并没有放弃。当他在1977年因交通违规被捕时,他也没有放弃。他一直致力于实现让数百万人使用计算机的目标 - 他成功了。 比尔•盖茨在创建微软之前是谁?他是一个自学成才的程序员,他利用自己的技能实现自己的目标。


你如何优先考虑自我探索?请在下面的评论中告诉我们!


原文:https://selftaught.blog/bill-gates-microsoft/

本文为 CSDN 翻译,如需转载,请注明来源出处。




 热 文 推 荐 

极客头条

我是如何从零开始 Web 前端自学之路的?

C++ 20 进入倒计时,有哪些值得期待的新特性?

☞ 为什么程序员下班后只关显示器从不关电脑?

☞ 全面剖析企业私有云

☞ 算法警告!该图片涉嫌违规不予显示

☞ 交易机器人春天已来?先看完这篇再说吧

☞ 月入5万,程序员夫人们过上"贵妇"生活了吗?

 
 

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

640?wx_fmt=gif点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

640?wx_fmt=png 喜欢就点击“好看”吧!
CSDN
微信公众号
成就一亿技术人

在工作中,我们必不可少需要掌握的就是git的一些操作了,那么git究竟是什么东西呢?

git,打个比喻来说,相当于游戏的存档功能。我们把每一次的代码修改保存下来,方便我们进行代码的回溯和发布。而github和gitlab这样的软件,就相当于一种云存档,我们会将我们已经开发完成的功能分支推送到github上,当代码通过审查后,合并到主分支(一般是main/develop分支),最后去上线主分支的代码。这样不仅可以让我们无论处于何地都能拉取到代码,而且最重要的是它在团队协作中起到的作用。

1. git 配置

当我们去官网将安装下来后,首先可以使用git -v命令查看是否安装成功。

PixPin_2025-04-23_14-04-14.png

当能够显示出版本号时就说明安装成功了,接下来我们应该做的就是git的一些配置。

git提供了一个git config的命令,用来配置或读取相应的工作环境变量。我们需要配置个人的用户名称和电子邮件地址(一般设置为自己github或者gitlab的用户名与邮箱地址),这是为了在每次提交代码时记录提交者的信息:

js
代码解读
复制代码
git config --global user.name "xxxxxx" git config --global user.email xxxx@xxxx.com

一般来说的话,配好这两个就够用了,我们可以使用git config --list命令来查看现在的git配置。

PixPin_2025-04-23_14-10-25.png

2. git 工作流程

那么一般在真实的工作环境中是怎么使用git的呢?

我简单总结了一下,大概是以下流程:

假如主分支是develop,然后使用git checkout -b feature/user-login创建了一个分支,然后我们进行开发,完成一个小部分后,git add 和git commit,一般频繁commit比较好,然后下班前使用git push -u origin feature/user-login提交到远程的feature/user-login分支。几天后,这个feature/user-login功能分支开发完毕后,通过MR或PR进行代码审查,审查通过后一般是由主管来将这条功能分支合并到主分支。然后合并完成后我们再把这条功能分支远程和本地删除

其中有几个比较重要的小点:

  1. 我们不会直接在主分支上进行开发,而是在主分支上创建一个自己的功能分支,在这条功能分支上进行开发,最后代码通过审查后,再合并到主分支上。这是为了保证主分支的整洁与减少冲突,当所有人都在主分支上进行开发时,代码将会变得非常混乱。

  2. 原子化提交,每次提交只解决一个问题(如:git commit -m "fix(login): 修复验证码发送频率限制")

  3. 单个功能分支存活时间不超过 1周,为了避免将来将功能分支合并到主分支时产生过多冲突,并且合并完成后尽快删除本条功能分支,避免成为“僵尸分支”,让其他成员误以为该分支还在使用。

  4. 养成每日下班前推送代码的好习惯,为了防止本地代码丢失;方便他人查看我们的进度等等。

这是大概的一个流程,接下来,我们用一个小demo来模拟一下开发流程。

2.1 克隆仓库

如果是自己单独进行一个项目的开发,会使用git init初始化一个本地的git仓库,用来开始一个新项目。但一般来说我们都是团队协作开发一个项目,当我们入职后,使用git clone将远程的代码拉取下来。

有两种代码拉取方式,一种是https方式,每次拉取时都要输入github的账号与密码,比较麻烦。所以我们会使用SSH进行代码的拉取,首先会进行SSH密钥的配置,这个网上都有教程,直接去搜一下即可,配置非常简单。

PixPin_2025-04-23_14-53-59.png

这样我们就可以直接使用SSH进行代码的拉取啦,不需要再输入账号和密码。

PixPin_2025-04-23_14-55-58.png

PixPin_2025-04-23_14-56-59.png

这样我们就成功将这个仓库拉下来了。目前只有readme.md这一个文件,接下来我们来模拟一下在工作中是如何使用git的。

2.2 创建新分支

我们说过,我们不会直接在主分支上进行开发,而是会创建一个新分支进行开发。我们可以在gitlab查看我们的主分支是哪一条:

PixPin_2025-04-23_15-00-41.png

主分支是master。我们也可以使用git branch命令查看所有分支:

PixPin_2025-04-23_15-02-48.png

目前只有master这一条主分支,master前面的星号就代表我们目前处于哪一条分支。那么我们如何来创建一条新分支呢?可以使用git checkout -b 命令。这个命令可以用来创建一个新分支并且切换到这条分支上。

在创建新分支之前一定要保证我们处于主分支上,一般是develop或者main分支上。切换分支直接使用git checkout xxx分支命令。

PixPin_2025-04-23_15-08-14.png

它输出显示我们已经位于主分支上,然后我们可以基于主分支创建一条功能分支,分支名要明确,比如我们要开发一个用户登录功能,我们一般会写git checkout -b feature/user-login。

PixPin_2025-04-23_15-11-12.png

好的,我们已经创建了一条功能分支并且已经位于这条分支上了,我们可以再次使用git branch查看所有的分支:

PixPin_2025-04-23_15-12-34.png

现在已经有两条分支了,并且我们目前位于功能分支上。我们还可以使用git branch -r查看远程分支:

PixPin_2025-04-23_15-22-38.png

因为我们还没有进行推送,所以远程分支上没有我们创建的功能分支。我们还可以使用git branch -a查看所有本地和远程分支:

PixPin_2025-04-23_15-24-07.png

2.3 在功能分支上进行代码的开发

ok,我们已经创建了一条属于我们自己的功能分支,接下来我们就开始在这条功能分支上进行开发,比如我添加一点内容:

PixPin_2025-04-23_15-27-47.png

之前的readme中只有git操作这一内容,现在我们添加了一行用户登录功能内容,我们可以发现vscode直接给我们显示出来发生的变化,左边有一串绿色的标记,并且在最左侧的功能栏中的源代码管理产生了一个气泡,说明此时我们有一个更改,并且我们可以直接点那个蓝色的提交按钮进行代码的提交,我们也可以使用命令来提交。

我们可以使用git status来查看目前的状态:

PixPin_2025-04-23_15-33-07.png

我们发现它显示有一个更改,这表示我们没有将代码提交到暂存区。ok,又来了一个新概念,什么叫暂存区呢?

git中存在工作区、暂存区和版本库的概念:

  • 工作区:工作区是你在本地计算机上的项目目录,你在这里进行文件的创建、修改和删除操作。工作区包含了当前项目的所有文件和子目录。

  • 暂存区:暂存区是一个临时存储区域,它包含了即将被提交到版本库中的文件快照,在提交之前,你可以选择性地将工作区中的修改添加到暂存区。使用git add将代码提交到暂存区。

  • 版本库:版本库包含项目的所有版本历史记录。每次提交都会在版本库中创建一个新的快照,这些快照是不可变的,确保了项目的完整历史记录。使用git commit将在暂存区中的代码提交到版本库中。

最后,当今天的工作结束后,我们使用git push origin将最新的版本库代码推送到远程仓库。

2.4 暂存文件与提交更改

因为我们说过尽量原子化进行开发,当完成了一小部分的开发就去提交一下代码。使用git add .命令可以将所有的更改提交到暂存区,我们还可以指定文件提交到暂存区:

PixPin_2025-04-23_15-47-02.png

当我们将代码提交到暂存区时,再使用git status查看状态时就会发现已经变绿了,说明我们已经将代码提交到了暂存区。如何再使用git commit将代码提交到版本库中,提交的时候描述信息要说明清楚,说明这是一个什么类型的提交:

PixPin_2025-04-23_15-53-19.png

一般用feat表示增加新功能,fix表示修复bug。此时我们已经把代码提交到版本库中了,我们再使用git status查看状态:

PixPin_2025-04-23_15-54-56.png

它就会显示没有东西需要提交到了。

此时如果我们切换到主分支:

PixPin_2025-04-23_16-00-03.png

PixPin_2025-04-23_16-00-15.png

我们就会发现主分支与功能分支的差异,我们的功能分支领先于主分支,最后当我们的功能分支开发完毕后,再合并到主分支上。

我们再切换回功能分支,我们还可以使用git log查看历史提交记录:

PixPin_2025-04-23_16-03-51.png

我们发现总共有两次提交,通过查看所有的提交记录,我们可以进行版本的恢复与回退:

  • git reset:重置当前分支到特定提交

  • git revert:撤销某次提交

2.5 推送更改

最后,当今天的任务完成后,我们将今天的代码推送到远程仓库进行保存,但在推送本地更改之前,最好从远程仓库拉取最新的更改,以避免冲突:

场景 1:需要合并主分支最新代码

适用情况:其他开发者在 develop 分支提交了新代码,你需要将这些更新合并到自己的功能分支

正确操作:

js
代码解读
复制代码
# 在功能分支操作 git checkout feature/login git fetch origin # 获取远程最新状态 git merge origin/develop # 将 develop 的更新合并到当前分支

场景 2:同步自己的远程功能分支

适用情况:你在其他设备(如公司电脑和家用电脑)上开发同一功能分支

正确操作:

js
代码解读
复制代码
git checkout feature/login git pull origin feature/login # 等同于 fetch + merge

为什么推荐先 fetch 再 merge?

  • 安全性:git fetch 允许你先查看差异(git log origin/develop),再决定是否合并
  • 可控性:避免 git pull 自动合并可能引入意外代码

当获取完最新的更改后,我们就将代码推送到远程仓库:

PixPin_2025-04-23_16-35-33.png

此时我们就会发现我们的远程仓库多了一条分支:

image.png

2.6 合并更改

最后,当我们的功能分支开发完毕后,就会去创建一个合并请求(MR/PR),源分支选择:feacture/user-login,目标分支选择:master。当代码审查通过后,我们就需要将功能分支合并到主分支上了。

PixPin_2025-04-23_16-45-52.png

PixPin_2025-04-23_16-46-00.png

2.7 删除分支

合并成功之后,我们就需要将这条功能分支删除,使用git branch -d new-feature删除功能分支:

PixPin_2025-04-23_16-53-32.png

3. 总结

在工作中常用的一些git操作命令就是这些了,如果对你有帮助的话请点个赞吧!

注:本文转载自blog.csdn.net的CSDN资讯的文章"https://blog.csdn.net/csdnnews/article/details/87927536"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top