认识代码之前,请先认识你自己 |《编程人生》
这是我的湛庐课程
《给技术人的职场突围课》
(链接) 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。
《编程人生》是一本优秀程序员的采访集,里面记录了15位世界级编程大师的故事。
我在 发刊词 里面说过,在这个书单课里,我会通过对四种关系的梳理,帮你系统思考自己的职业发展。而在这几种关系中,最基本的一个,就是要处理好“我和自己的关系”,更好地认识自己。
女程序员先驱( IT女神)
我之所以选《编程人生》 (原名:Coders at Work)这本书,就是想通过书里这些优秀的软件工程师、科学家的例子,“以人为镜”,从比较务实的层面,和你聊聊怎么去清晰地认知自己,发掘自己的性格特点,选择适合的职业发展路径。我也写了一篇这本书的读后感。
《编程人生》这本书采访了 15 位优秀的程序员,我不能一一介绍,那从什么人开始介绍呢? 编程可以说是一个工程,是一门艺术,也可以说一门手艺。 作为一个行业,我们现在的很多习以为常的规矩和做法,是怎么来的?这个行业的先驱们是在什么样的条件下创立这个行业的各种规范的?我们叫他们‘祖师爷’,或者在我们这一集里面,叫她们‘祖师奶奶’。 我想从最年长的程序员说起,在这本书里,就是 Fran Allen。
(注:我搬运了几张网上的照片,例如https://blog.csdn.net/rx3oyuyi/article/details/88342230)
Fran Allen
Fran 1932 年出生,2020 年去世,她是美国早期计算机程序员和科学家。这样一位“元老”级别的程序员,她的工作和我们现在的计算机、软件工程发展有什么直接关联么?
答案是,不仅有,而且有很大的关系。她的研究对于现在Java 等语言的即时编译 (Just In Time, JIT)技术起了奠基作用。 2002年时,Fran Allen 还凭借 “在优化编译器技术的理论和实践中的开拓性贡献
” 获得了图灵奖。 她是七十多位获得者中仅有的两位女性之一。
Fran本人并不是计算机专业毕业的,她有数学的本科学位,还辅修物理学课程,除此之外,她只是在读数学硕士学位的时候,选修过计算机技术的课程。
她毕业时,正赶上 IBM 招聘,因为觉得计算机很有趣,加上着急要还助学贷款,所以她就填了申请,此后一段时间,其他的工作机会迟迟没有出现,她就答应了 IBM 的 offer。
她在1957 年加入 IBM ,开始了自己的程序员生涯,一直在 IBM 工作了 45年,直到退休。作为一个并非科班出身的人,Fran是怎么学习计算机技术呢? 是像现在许多人一样,去市面上找一个培训学校参加培训么?显然不可能,因为那时候计算机科学还算是一个非常前沿的学科。
Fran的方法是边做边学
。她在工作中,会通过研究已有的代码实例来学习编程技巧,或者是新的编程语言。
对于工作,她十分投入,这也是她日后事业中成功的重要原因之一。
她曾经说:“最令人陶醉的事情是阅读源代码,在我的记忆中,那些代码真是写得优雅无比,我时常沉醉其中,感叹设计的精巧。
” 注意:她在这里说的源代码,其实是汇编代码。
除此之外,她在职场的经历,也为女性在IT行业的成长提供了一个很好的参照。
Fran曾经领导过一个重要的项目,项目中有位男同事身材魁梧,不苟言笑,有时还有些令人望而生畏,他喜欢通宵工作。
有一天早上,这位男同事走进办公室后,径直将一份厚厚的调试代码清单甩在了 Fran 的办公桌上。他指着打印信息列表中的某个细节问“你为什么要设置这一位?” 原来他一整夜都盯着这个犯愁,百思不得其解。 所以早上非常恼怒地质问 Fran。
听到这儿,我想请你来设想一下,如果你是Fran,早上刚一上班,一个身材魁梧不苟言笑的同事就跑过来指责你的程序中的细节问题。你会怎么办?
或许有人直接就怒了,或者害怕了, 但 Fran 非常了解这个程序,而且,她也具备足够的耐心,足够的冷静,所以她很平静地向对方解释了技术原因,并指出 bug 不在这里,而是在另一个地方。最后,这个小插曲得到了很好的解决。
Fran 的洞察力从哪里来,我想很大的部分是来自于长期深入的实践。
代码的世界有很多规律,外人看起来眼花缭乱的代码和各种日志信息,在有洞察力的人看来,其实也很有规律。 比如我听到过一个程序员高手的故事:某个程序输出的日志信息从编号1开始,一直到了 1048576
往后就没有了。这位高手看到后就说:为什么这个数这么整齐? 他旁边的程序员迷惑说,1048576 这个数有什么整齐的?
你能猜到这个数为什么整齐吗?答案就是 1048576 = 1024 * 1024, 也就说,1048576是 【一兆】的实际数值,出现这个数值之后,就说明某个容量为【一兆】的数组满了。
这个不是要背数字,然后应付填空题的知识,而是在实践中培养出来的洞察力。 我也碰到一些学生,很喜欢考证书。我个人认为,这种“证书”绝大部分考验的是静态的知识点,是实践技能的基础,但不是实践技能。 而且我不知道他是考前一周临阵磨枪背书考过的,还是自己平时就掌握这些技能,不用背书就能考过的。 相比之下,我更看重一个人的实际项目,例如,写博客,自己的开源代码,因为你可以看到技能积累的过程。一个写了100 篇博客,1万行代码,他是在几年内持续努力创作的,这个创作历程是公开的,不断改进的,这个证明远远胜于一个华丽的证书。
在IT行业,Fran Allen本身就是一个先驱,她用自己的实力和影响力,让更多的女性参与到这个行业当中,在她的团队中,也有不少女性的身影。
为什么我今天特别想来和你聊聊计算机行业的女性先驱呢?因为我和一些人谈起软件工程师这个职业,大家的印象是这是一个男性占统治地位的行业,女生要进入,似乎是要追赶男同学的样子。 其实,计算机科学早期发展历史中,女性发挥了很大的作用。
Ada Lovelace
或许很多人不知道,历史上的第一位程序员,就是一位女性,她叫Ada Lovelace ,是英国著名诗人乔治·拜伦的女儿,在母亲的鼓励下,阿达从小就喜欢数学,在1842年与1843年其间,Ada为发明家巴贝奇(Babbage)发明的分析机编写算法,她详细说明用计算机进行数学的运算方式,这样的描述,被认为是世界上第一个计算机程序;她还提出了循环等编程的基本概念。 她曾经对计算机做了预言,说“这个机器未来可以用来排版,编曲或是各种更复杂的用途”。
Grace Hopper
如果说Ada作为“程序员”并没有一个现代的计算机作为基础来编程,那么,在一百年后,1944年,第一个能实际运行并被编程的计算机 Mark I 在美国哈佛大学诞生,时年三十七岁的格蕾丝·霍珀(Grace Hopper)女士就是它的第三个程序员,她和她的团队在Mark I 上实现了100年前阿达提出的循环,子程序,还有其他现代编程的概念和实践。 例如“回滚机制”,让出问题的程序能返回到一个出问题之前的状态,这种实践在现在的互联网公司的运维体系中还在运行。
那年的秋天,她们的工作吸引了另一个数学家和计算机科学家冯 · 诺依曼的注意。 在研究了 Mark I 和另一个早期计算机 ENIAC 的技术和架构的特点后,冯 · 诺依曼在第二年提出了划时代的 “冯·诺依曼体系”,奠定了现代计算机的体系机构的基础。 根据霍珀的回忆,当时大部分的计算机研究都是在美国军方的资助下工作,对于公开发表文章都有很多限制。冯 · 诺依曼的文章是建立在这些一线程序员和研究员的工作之上的第一个公开发表的文献。
这里还有一个有趣的小插曲,我想你可能也听说过,就是霍珀在软件设计领域的第一项重大“发明”,是创造出了一个著名的计算机术语——“bug”。
1946年,她在发生故障的MarkⅡ计算机的 继电器触点 里,找到了一只被夹扁的小飞蛾,正是这只小虫子“卡”住了机器的运行。霍珀顺手将飞蛾夹在工作笔记里,并记录下这是一个真正的“bug”。后来这演变成计算机行业的专业术语。我们现在在网上,还可以查到这个最早“bug”的照片。
虽然现代电脑和飞蛾再也没有什么关系了,大家还是习惯地把排除程序故障叫做Debug(除虫)。
在早期的工作中,大家注意到一个问题。计算机代码,是给计算机读的,还是给人读的? 在计算机的早期,计算机的指令都是用二进制或者八进制的数字表示的。机器只认识这些数字,所以对于机器来说,挺方便的。 霍珀和其他程序员在实践中发现,程序员要花很多时间来记忆,修改,和讨论程序,一行一行的数字,并不利于人类设计,改进和交流程序,于是,霍珀和她的团队做了一系列的改进:
- 第一,用英语字母来表示计算机指令,这样程序员就能方便地阅读和理解。
- 第二,她也是第一个在源程序上写注释的程序员,这个成为了现在计算机编程的规定动作。
- 第三,“一图胜千言”,她们发明了流程图 (Flow Chart),使用矩形来代表操作,使用菱形来代表选择,用线来表示程序的状态。就是从1940年代末开始的。一直到 70 多年后的今天,初学者还是用流程图来帮助设计和理解程序。
沿着 "让计算机程序容易写,容易理解” 的思路, 在1950年代末,霍珀还领导设计了现代编程语言 COBOL, 这个基于英语的计算机语言广泛地用于商业领域。 当时的计算机存储器非常贵,为了节省空间,COBOL 语言用六位字符来存储日期, 即年,月, 日各两位。 过了近四十年,世界上还有很多 COBOL 语言写的程序在运行,但是随着 2000 年的到来,用两位数记录的‘年’会变成 00, 这样就和 1900 年分不清了。这就是著名的 ‘千年虫’问题,这也从一个侧面说明了她设计的这个语言的长寿和应用广泛。
讲到这儿,有听众会问,这是不是有意要推崇女性的贡献呢?其实这个行业在早期发展的时候,没有人深入考虑过IT行业有多大的前景,在选择的时候,能干活就行,所以不管是男生女生,能解决问题就好,从我自身的经历来看,在计算机领域做出优异的成绩,和性别没有什么关系。
IT 行业提供了特别广泛的机会,各种不同的性格特点的人,都能找到自己的发挥空间。而且程序写出来之后,是没有性别的,大家只能看见程序的正确性、稳定性,所以只要技术过硬,无论男女,无论性格怎么样,都可能取得成功。
当然我在这儿说的成功,不是要给你灌鸡汤,我们总说:“这个世界上只有一种成功,就是以自己喜欢的方式过一生。”例如,我喜欢热情,不拘一格的生活方式,这没问题。但是,我们并不是自己性格的奴隶,不拘一格并不是 “由着自己的性子”。
Silvia
我想起一个同事,我的一个经理 Silvia (西尔维亚)。 她是从巴西来到美国微软公司工作的,她有南美女性的那种外向的热情性格,但是工作非常细心。 例如,我们软件工程师经常签入代码,很容易导致在主分支上的代码编译不过。我自己也曾犯过这样的错误。 在微软团队里面,如果你的代码签入导致了主分支的错误,你要去做 Build Master ,又叫“构建大师”,就是在本职工作之外,处理很多和代码构建相关的工作,直到下一个犯错误的人出现。 但是西尔维亚在微软作为一个资深的开发人员,就是没有犯过一次错误,没有做过一次 Build Master。 在工作之余聚会聊天的时候,我们都非常佩服她。
总结这一讲,我们讲了计算机软件行业几位老前辈的故事。 回到我们故事的主人公,我们有这样的问题:
如果你获得了数学系的博士,并且是大学里受欢迎的数学讲师了,就像我们前面说的格蕾丝 · 霍珀那样。 但是你的工作需要你学全新的硬件,和一个全新的“编程”的东西,你会怎么看这个机会?怎么选择?
如果刚一上班,一个身材魁梧不苟言笑的同事就跑过来指责你的工作中的问题。你会怎么办?
欢迎你在评论区分享你的见解。
这是我的湛庐课程
《给技术人的职场突围课》
(链接) 的一部分。
相关文章:
认识代码之前,请先认识你自己 |《编程人生》
这是我的湛庐课程《给技术人的职场突围课》 (链接) 的一部分。 这篇文章也是 IT 女神征文活动 的一部分。 《编程人生》是一本优秀程序员的采访集,里面记录了15位世界级编程大师的故事。 我在 发刊词 里面说过,在这个书单课里&am…...
react学习笔记-5:react路由
react旧版本路由 旧版本的路由是按照组件的方式来写的 编写router/index.tsx文件 import App from "../App" import Home from "../views/Home" import About from "../views/About" import { BrowserRouter,Routes,Route } from "react…...
[Python图像处理] 使用高通滤波器实现同态滤波
使用高通滤波器实现同态滤波同态滤波基础实现同态滤波相关链接同态滤波基础 同态滤波是一种去除图像中乘性噪声的技术,常用于校正图像中的不均匀照明。根据图像形成的光照反射模型,图像 f(x,y)f(x,y)f(x,y) 可以由以下两个分量表征: 入射到…...
PyTorch深度学习:60分钟入门
PyTorch深度学习:60分钟入门 本教程的目的: 更高层级地理解PyTorch的Tensor库以及神经网络。训练一个小的神经网络来对图像进行分类。 本教程以您拥有一定的numpy基础的前提下展开 Note: 务必确认您已经安装了 torch 和 torchvision 两个包。 这是一个基于Pytho…...
C语言指针常见问题汇总
我们在学C语言时,指针是我们最头疼的问题之一,针对C语言指针,博主根据自己的实际学到的知识以及开发经验,总结了以下使用C语言指针时常见问题。 1、指针做函数参数 学习函数的时候,讲了函数的参数都是值拷贝…...
Coremail邮件系统全新上线存档邮箱功能
邮箱积累邮件太多,搜索起来又慢又麻烦! 我的重要邮件忘记下载丢失了!14天自动删除太难了! 有没有可能重要邮件自动存档,解救一下“遗忘星”人? 在我们日常工作中,邮件是最经常使用的办公工具之一…...
Python绘图
1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import numpy as np import matplotlib as mpl import matplotlib.pyplot as pltnp.random.seed(1000) y np.random.standard_normal(10) print "y %s"% y x range(len(y)) print "x%s&q…...
【独家】华为OD机试 - 第K个最小码值的字母(C 语言解题)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试…...
整数反转(python)
题目链接: https://leetcode.cn/problems/reverse-integer/ 题目描述: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231,231−1][−2^{31}, 2^{31} − 1][−231,231…...
【数据结构】二叉树与堆
文章目录1.树概念及结构1.1树的相关概念1.2树的结构2.二叉树概念及结构2.1相关概念2.2特殊的二叉树2.3二叉树的性质2.4二叉树的存储结构3.二叉树的顺序结构及实现3.1二叉树的顺序结构3.2堆的概念3.3堆的实现Heap.hHeap.c3.4堆的应用3.4.1 堆排序3.4.2 TOP-KOJ题最小K个数4.二叉…...
Git图解-常用命令操作-可视化
目录 一、前言 二、初始化仓库 2.1 设置用户名与邮箱 2.2 初始化仓库 三、添加文件 四、查看文件状态 五、查看提交日志 六、查看差异 七、版本回退 八、删除文件 九、分支管理 9.1 创建分支 9.2 切换分支 9.3 查看分支 9.4 合并分支 十、文件冲突 十一、转视…...
C语言-基础了解-20-typedef
typedef 一、typedef C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。下面的实例为单字节数字定义了一个术语 BYTE: typedef unsigned char BYTE; 在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写&…...
Ubuntu系统升级16.04升级18.04
一、需求说明 作为Linux发行版中的后起之秀,Ubuntu 在短短几年时间里便迅速成长为从Linux初学者到实验室用计算机/服务器都适合使用的发行版,目前官网最新版本是22.04。Ubuntu16.04是2016年4月发行的版本,于2019年4月停止更新维护。很多软件支…...
CM6.3.2启用Kerberos(附问题解决)
基础准备支持JCE的jdk重新安装JCE的jdk(已正确配置跳过)删除/usr/java/下面的jdk,然后通过CM->管理->安全->安装Java无限制...重新安装后,配置Java(可选)主机->主机配置->搜java->Java主目录 配置路径主机->所有主机->设置->高级:Java配置Kerberos安…...
QML 动画(组合动画)
在QML中,可以把多个动画组合成一个单一的动画。 组合动画的类型: ParallelAnimation 动画同时进行(并行)SequentialAnimation 动画按照顺序执行(顺序执行)注意:将动画分组为“顺序动画”或“…...
【PHP代码注入】PHP代码注入漏洞
漏洞原理RCE为两种漏洞的缩写,分别为Remote Command/Code Execute,远程命令/代码执行PHP代码注入也叫PHP代码执行(Code Execute)(Web方面),是指应用程序过滤不严,用户可以通过HTTP请求将代码注入到应用中执行。代码注入(代码执行)…...
Python 常用语句同C/C++、Java的不同
文章目录前言1. 数字 int2. 字符 string3. 列表 List4. 元组 tuple5. 字典 dictionary6. 集合 set7. 值类型变量与引用类型变量8. if elif else9. >、<、>、<、、!10. while11. for前言 本篇为本人前段时间的一个简单汇总,这里可能并不齐全,…...
一把火烧掉了苹果摆脱中国制造的幻想,印度制造难担重任
这几年苹果不断推动印度制造,希望摆脱对中国制造的依赖,然而近期苹果在印度的一家代工厂发生大火却证明了苹果的这一计划遭受重大打击,印度制造根本就无法中国制造。一、印度制造屡屡发生幺蛾子苹果推动印度制造已有多年了,然而印…...
常用的 JavaScript 数组 API
以下是一些常用的 JavaScript 数组 API 的代码示例: 1、push() push(): 在数组末尾添加一个或多个元素,返回新的数组长度 const arr [1, 2, 3]; const newLength arr.push(4, 5); console.log(arr); // [1, 2, 3, 4, 5] console.log(newLength); //…...
海思3531a pjsip交叉编译
学习文档: PJSUA2 Documentation — PJSUA2 Documentation 1.0-alpha documentationhttps://www.pjsip.org/docs/book-latest/html/index.html ./configure --prefix/opensource/pjproject-2.12/build3531a \ --host/opt/hisi-linux/x86-arm/arm-hisi…...
《安富莱嵌入式周报》第305期:超级震撼数码管瀑布,使用OpenAI生成单片机游戏代码的可玩性,120通道逻辑分析仪,复古电子设计,各种运动轨迹函数源码实现
往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 说明: 谢谢大家的关注,继续为大家盘点上周精彩内容。 视频版: https://www.bi…...
力扣-查找每个员工花费的总时间
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1741. 查找每个员工花费的总时间二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行…...
企业级信息系统开发学习笔记1.8 基于Java配置方式使用Spring MVC
文章目录零、本节学习目标一、基于Java配置与注解的方式使用Spring MVC1、创建Maven项目 - SpringMVCDemo20202、在pom.xml文件里添加相关依赖3、创建日志属性文件 - log4j.properties4、创建首页文件 - index.jsp5、创建Spring MVC配置类 - SpringMvcConfig6、创建Web应用初始…...
【C语言复习】C语言中的文件操作
C语言中的文件操作写在前面文件操作什么是文件文件的分类文件名文件的操作文件指针文件的打开和关闭文件的顺序读写文件的随机读写fseekftellrewindfeof写在前面 文件操作在C语言部分只是属于了解内容,但是因为它可能会应用在项目中,所以我把它单独写成…...
00后整顿职场,当摸鱼测试员遇上了内卷00后。
在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&…...
程序员的上帝视角(4)——视角
对于开发人员来说,工作都是从评估一个需求开始。我们第一个要解决的问题就是看待需求的视角。视角的不同,得到的设计方案可能是完全不同的。作为一个程序员,不能单单从个人视角来看待问题。而是要尝试从不同角色出发,不停思考。上…...
一、webpack基础
webpack基础 一、webpack是什么 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。 说白了webpack就是一个构建和管理静态资源的工具,在我们使用框架开发时,它会在我们内部的一个或者多个入口根据我们引入的各个模块将他们根据一定的规…...
超详细VMware CentOS7(最小安装)安装教程
前言:在我们使用虚拟机的时候,不要去担心我们的一些操作会使虚拟机损坏或者有没有可能会使我们的电脑本身出现一些问题,要记住无论我们把我们的虚拟机如何都不会影响我们本身的机器,因为它只是虚拟的,在虚拟机里不要担…...
经典卷积模型回顾8—NIN实现图像分类(matlab)
首先,介绍一下NiN(Network In Network)模型。NiN模型是由加州大学伯克利分校的Lin、Chen、Yan等人在2013年提出的一种深度卷积神经网络模型,其特点是在传统的卷积神经网络中加入了多个小的全连接网络,用于对特征进行非…...
【Java笔记】泛型
本章专题与脉络 泛型概述 生活中的例子 举例1:中药店,每个抽屉外面贴着标签 举例2:超市购物架上很多瓶子,每个瓶子装的是什么,有标签 举例3:家庭厨房中: Java中的泛型,就类似于上…...
网站降权 垃圾外链/搜索引擎推广
全文转发 http://www.cnblogs.com/fnng/p/3576154.html 在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键…...
做会计要看什么关注什么网站/网站seo优化总结
3172: [Tjoi2013]单词 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 4293 Solved: 2083[Submit][Status][Discuss]Description 某人读论文,一篇论文是由许多单词组成。但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多…...
石门县建设局网站/谷歌应用商店
文章目录前言一、现象二、原因三、解决步骤四、示例五、参考前言 在你的iOS团队中,如果在使用持续集成来完成自动化打包分发的工作,你可能会了解如何使用一些命令行工具来构建ipa文件,其中一款使用较为广泛的是xcodebuild。 在我们的团队中…...
建设网站类型/东莞网络营销网络推广系统
lr_free_parameter() 在运行时删除动态参数,释放其缓冲区。 int lr_free_parameter(const char * param); 参数说明: Param:动态参数的名称。 lr_free_parameter函数释放在运行时为指定参数分…...
wordpress排版教程视频/快手seo关键词优化
《大学计算机实验报告》由会员分享,可在线阅读,更多相关《大学计算机实验报告(28页珍藏版)》请在人人文库网上搜索。1、大学计算机基础课程实验报告(以上由学生填写)西南大学计算机与信息科学学院计算机基础教育系2017年12月8日实验成绩记载实验报告编号…...
海口专业网站搭建厂/百度识图在线识图
python读取索引1)在Python文件处理中tell() (1) tell() in python file handling ) This method returns the current position of file pointer. 此方法返回文件指针的当前位置。 2)Python文件处理中的seek() (2) seek() in python file handling ) It set the position of f…...