Files
OnJava8/docs/book/Appendix-Becoming-a-Programmer.md
2019-05-20 09:41:37 +08:00

74 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[TOC]
<!-- Appendix: Becoming a Programmer -->
# 附录:成为一名程序员
>我分别于200320062007和2009年撰写的博客文章混搭
<!-- How I Got Started in Programming -->
## 如何开始
这是一条相当漫长和曲折的道路。我在高一学代数时(1971年)有个非常古怪的老师有一台计算机还弄到了一台配有一个300波特的音频电话耦合器的ASR-33电传打字机我学会了如何执行命令并得到响应以及一个可以在高中区使用的HP-1000计算机上的帐户。我们能够创建和运行BASIC程序并将它们保存在打孔磁带上。我对此非常着迷所以尽可能地把它带回家后在晚上写程序。我写了一个赛马模拟游戏--HOSRAC.BAS用星号来代表马的移动由于是在纸上打印输出所以需要一点想象力。
我的朋友丹尼尔(和设计我的书的封面是同一个人)有一个兄弟,他有段时间通过向酒吧和餐馆提供弹球机来赚钱。他有一台投币式街机(老虎机),最早的《乓》游戏之一,我对此全然不知,到现在我还忍受不了这东西(现在我几乎不玩电脑游戏,这样看来我可能是个没有幽默的人,但似乎编程比玩电脑游戏更有趣、更具挑战性。)
后来我在高中参与了摄影和新闻工作,在大学的第一年就主修新闻学。我觉得自己已经从学校学到了足够多的东西,又转修了物理学。后来我在加州大学欧文分校完成了物理学位,如果我当时选择了一个特定的工程领域,修了足够的工程课就能拿到双专业,但我试图走得更远一些,所以最后我获得的本科学位是 "应用物理"。作为一名本科生,我多多少少学习了一些可以自娱自乐,但又没有任何深度的计算机编程课程。我个人认为在这些课程细细熏陶下,帮我打下了一定的基础,但事实我理解的这些东西没有任何深度。我不知道计算机、编译器或解释器有什么区别(只是对编译器和解释器一点点的理解)。对我来说计算机是绝对可靠的,而且我从来没有想过在程序语言和操作系统中会有出现错误的可能。
后来我去了在加州州立理工大学攻读研究生,主要有三点原因
1. 我真的非常喜欢物理学这个领域
2. 他们接受了我,甚至给了我一份教学工作和奖学金
3. 出乎意料的是他们给我的工作时间不止一个夏天
而我完全没做好上班的准备。
作为一名物理专业的学生,我学习的是太阳能发电系统,当时太阳能发电系统很大 (如果你的房子上装了太阳能或生意上是关于太阳能系统,加州就会给予税收抵免,因此也兴起很多生意),加州理工大学也承诺会在工程系开设相应的课程。然而因为学校没有提供必要的课程,要想获得在太阳能工程的学位得花好几年时间。所以我学习了研究生其他的工程课,包括介绍机械,太阳能,电气和电子工程。我上的课是非电气工程专业的电气工程导论。最常见的研究生工程课程是计算机工程专业,所以最后我拿了那个学位。我还上了艺术课,几门舞蹈课,还有一些计算机科学课程 (Pascal和数据结构),在计算机工程中,我终于弄清楚了处理器的工作流程,从那以后我一直带着一个处理器在身上。这些就是我学的计算机基础知识。
刚开始工作的时候凭借着一堆硬件和相对简单低水平的编程做了一名计算机工程师。因为C语言似乎是理想的嵌入式系统语言于是我开始自学并慢慢开始了解更多关于编程语言的东西。我们在这家公司从源代码构建编译器这让我大开眼界。 (想象一下一个编译器只是另一个软件的一部分!
当我去华盛顿大学海洋学院为Tom Keffer后来创建了“疯狗浪”工作时我们决定使用C++。我只有一本Stroustrup写的非初学者书可以参考最终不得不通过检查C++预处理器生成的中间C代码来了解语言的功能。这个过程非常痛苦但学习的效果很好。从那以后我就用相同的方式学习因为它让我学习了如何剖析一种语言并看到它本质的能力与此同时开始有了批判性思维。
我并没有理解清楚所有的概念。只是在之后的日子里不断反复,我所知道的一切需要时间才能消化吸收。如果我现在能很容易地理解一个新概念,那只是因为它是我已经知道的积累概念的一个变种。在加州理工大学招收非计算机本科学历的计算机科学研究生项目中,学生们曾经说他们花了一年的时间才弄清楚他们对计算机的困惑(他们正在沉浸程序之中)。当人们学习计算机时,他们往往会对自己抱有不切实际的期望,通常是他们听说学计算机编程的好处,就希望在几周内找到一份高薪的工作。但是,最好的学习过程是先对计算机感兴趣,随着时间的推移,学习的越来越多,自然的就开始自学。
这些就是我主要做的事,尽管我通过学计算机工程有还算扎实的基础,但我没上过编程课,而是通过自学。在此期间我也在不断地学习新事物,在这个行业里,不断学习是非常重要的一部分。
<!-- A Career in Computing -->
## 码农生涯
### 延伸阅读
* [Teach Yourself Programming In Ten Years](http://norvig.com/21-days.html), by Peter Norvig.
* [How To Be A Programmer](http://samizdat.mines.edu/howto/HowToBeAProgrammer.html), by Robert Read.
* A [speech by Steve Jobs](http://news.stanford.edu/news/2005/june15/jobs-061505.html) to inspire a group of graduating college students.
* Kathy Sierra: [Does College Matter](https://headrush.typepad.com/creating_passionate_users/2005/07/does_college_ma.html)?
* Paul Graham [on College](http://www.paulgraham.com/college.html).
* Joel Spolsky: [Advice for Computer Science College Students](https://www.joelonsoftware.com/2005/01/02/advice-for-computer-science-college-students/).
* James Shore: [Five Design Skills Every Programmer Should Have](https://www.jamesshore.com/Blog/Five-Design-Skills.html).
* Steve Yegge: [The Truth About Interviewing](http://steve-yegge.blogspot.com/2006/03/truth-about-interviewing.html).
<!-- The Mythical 5% -->
## 百分之五的神话
<!-- Writing Software Is Like … Writing -->
## 重在动手
<!-- Programming as Typing -->
## 像打字般编程
<!-- Do What You Love -->
## 做你喜欢的事
*“1960年一位研究人员对1500名商学院学生进行了访谈并将他们分为两类那些为了钱财来这里上学的人1245人以及那些打算利用学位做他们非常关心的事情的人255人。二十年后研究人员再次访谈了这些毕业生发现其中有101位百万富翁除了其中一位所有百万富翁都来自追求他们喜欢做的事的那255人*
“现在你可能觉得你对巴洛克时期的冰岛诗歌或者蝴蝶收集或者高尔夫抑或是对社会正义的热情会因为要养家糊口而让你和你喜欢做的事分道扬镳并非一定要如此。弗拉基米尔·纳博科夫Vladimir Nabokov是本世纪最伟大的小说家之一他对蝴蝶收藏的热情远远超过写作。事实上他的第一个大学教学工作是关于鳞翅类昆虫。在过去40年里对40万美国群众的研究表明即使是部分的、零散的追求培养你的激情也可以帮助你充分利用你目前的能力激励你培养新的能力。”--摘自《The Other 90%》 Robert K.Cooper
当然你可以看Po Bronson写的《 What Should I Do With My Life?》这本书,对这些想法进行更多的探索。
<!-- 分页 -->
<div style="page-break-after: always;"></div>