Joel Spolsky对计算机学生的七大建议 (英文原稿)

Unreal 5 MetaHuman插件全流程:从安装到角色动画生成 本文详细介绍了Unreal 5中MetaHuman插件的全流程使用指南,从安装配置到角色动画生成。通过Quixel Bridge下载预设角色,利用面部捕捉技术赋予数字人模型生命力,并提供材质编辑、性能优化等进阶技巧,帮助用户快速创建照片级真实的虚拟角色。 阅读详情

 

转载自http://www.joelonsoftware.com/articles/CollegeAdvice.html

Joel on Software

Advice for Computer Science College Students

by Joel Spolsky
Sunday, January 02, 2005

Despite the fact that it was only a year or two ago that I was blubbering about how rich Windows GUI clients were the wave of the future, college students nonetheless do occasionally email me asking for career advice, and since it's recruiting season, I thought I'd write up my standard advice which they can read, laugh at, and ignore.

Most college students, fortunately, are brash enough never to bother asking their elders for advice, which, in the field of computer science, is a good thing, because their elders are apt to say goofy, antediluvian things like "the demand for keypunch operators will exceed 100,000,000 by the year 2010" and "lisp careers are really very hot right now."

I, too, have no idea what I'm talking about when I give advice to college students. I'm so hopelessly out of date that I can't really figure out AIM and still use (horrors!) this quaint old thing called "email" which was popular in the days when music came on flat round plates called "CDs."

So you'd be better off ignoring what I'm saying here and instead building some kind ofonline software thing that lets other students find people to go out on dates with.

Nevertheless.

If you enjoy programming computers, count your blessings: you are in a very fortunate minority of people who can make a great living doing work they enjoy. Most people aren't so lucky. The very idea that you can "love your job" is a modern concept. Work is supposed to be something unpleasant you do to get money to do the things you actually like doing, when you're 65 and can finally retire, if you can afford it, and if you're not too old and infirm to do those things, and if those things don't require reliable knees, good eyes, and the ability to walk twenty feet without being out of breath, etc.

What was I talking about? Oh yeah. Advice.

Without further ado, then, here are Joel's Seven Pieces of Free Advice for Computer Science College Students (worth what you paid for them):

  1. Learn how to write before graduating.
  2. Learn C before graduating.
  3. Learn microeconomics before graduating.
  4. Don't blow off non-CS classes just because they're boring.
  5. Take programming-intensive courses.
  6. Stop worrying about all the jobs going to India.
  7. No matter what you do, get a good summer internship.

Now for the explanations, unless you're gullible enough to do all that stuff just because I tell you to, in which case add: 8. Seek professional help for that self-esteem thing.

Learn how to write before graduating.

Would Linux have succeeded if Linus Torvalds hadn't evangelized it? As brilliant a hacker as he is, it was Linus's ability to convey his ideas in written English via email and mailing lists that made Linux attract a worldwide brigade of volunteers.

Have you heard of the latest fad, Extreme Programming? Well, without getting into what I think about XP, the reason you've heard of it is because it is being promoted by people who are very gifted writers and speakers.

Even on the small scale, when you look at any programming organization, the programmers with the most power and influence are the ones who can write and speak in English clearly, convincingly, and comfortably. Also it helps to be tall, but you can't do anything about that.

The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it's not whether they prefer Python or Java. It's whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless. By writing clear technical documentation for end users, they allow people to figure out what their code is supposed to do, which is the only way those users can see the value in their code. There's a lot of wonderful, useful code buried on sourceforge somewhere that nobody uses because it was created by programmers who don't write very well (or don't write at all), and so nobody knows what they've done and their brilliant code languishes.

I won't hire a programmer unless they can write, and write well, in English. If you can write, wherever you get hired, you'll soon find that you're getting asked to write the specifications and that means you're already leveraging your influence and getting noticed by management.

Most colleges designate certain classes as "writing intensive," meaning, you have to write an awful lot to pass them. Look for those classes and take them! Seek out classes in any field that have weekly or daily written assignments.

Start a journal or weblog. The more you write, the easier it will be, and the easier it is to write, the more you'll write, in a virtuous circle.

Learn C before graduating

Part two: C. Notice I didn't say C++. Although C is becoming increasingly rare, it is still the lingua franca of working programmers. It is the language they use to communicate with one another, and, more importantly, it is much closer to the machine than "modern" languages that you'll be taught in college like ML, Java, Python, whatever trendy junk they teach these days. You need to spend at least a semester getting close to the machine or you'll never be able to create efficient code in higher level languages. You'll never be able to work on compilers and operating systems, which are some of the best programming jobs around. You'll never be trusted to create architectures for large scale projects. I don't care how much you know about continuations and closures and exception handling: if you can't explain why while (*s++ = *t++); copies a string, or if that isn't the most natural thing in the world to you, well, you're programming based on superstition, as far as I'm concerned: a medical doctor who doesn't know basic anatomy, passing out prescriptions based on what the pharma sales babe said would work.

Learn microeconomics before graduating

Super quick review if you haven't taken any economics courses: econ is one of those fields that starts off with a bang, with many useful theories and factsthat make sense, can be proven in the field, etc., and then it's all downhill from there. The useful bang at the beginning is microeconomics, which is the foundation for literally every theory in business that matters. After that things start to deteriorate: you get into Macroeconomics (feel free to skip this if you want) with its interesting theories about things like the relationship of interest rates to unemployment which, er, seem to be disproven more often than they are proven, and after that it just gets worse and worse and a lot of econ majors switch out to Physics, which gets them better Wall Street jobs, anyway. But make sure you take Microeconomics, because you have to know about supply and demand, you have to know about competitive advantage, and you have to understand NPVs and discounting and marginal utility before you'll have any idea why business works the way it does.

Why should CS majors learn econ? Because a programmer who understands the fundamentals of business is going to be a more valuable programmer, to a business, than a programmer who doesn't. That's all there is to it. I can't tell you how many times I've been frustrated by programmers with crazy ideas that make sense in code but don't make sense in capitalism. If you understand this stuff, you're a more valuable programmer, and you'll get rewarded for it, for reasons which you'll also learn in micro.

Don't blow off non-CS classes just because they're boring.

Blowing off your non-CS courses is a great way to get a lower GPA.

Never underestimate how big a deal your GPA is. Lots and lots of recruiters and hiring managers, myself included, go straight to the GPA when they scan a resume, and we're not going to apologize for it. Why? Because the GPA, more than any other one number, reflects the sum of what dozens of professors over a long period of time in many different situations think about your work. SAT scores? Ha! That's one test over a few hours. The GPA reflects hundreds of papers and midterms and classroom participations over four years. Yeah, it's got its problems. There has been grade inflation over the years. Nothing about your GPA says whether you got that GPA taking easy classes in home economics at Podunk Community College or taking graduate level Quantum Mechanics at Caltech. Eventually, after I screen out all the 2.5 GPAs from Podunk Community, I'm going to ask for transcripts and recommendations. And then I'm going to look for consistently high grades, not just high grades in computer science.

Why should I, as an employer looking for software developers, care about what grade you got in European History? After all, history isboring. Oh, so, you're saying I should hire you because you don't work very hard when the work is boring? Well, there's boring stuff in programming, too. Every job has its boring moments. And I don't want to hire people that only want to do the fun stuff.

I took this course in college called Cultural Anthropology because I figured, what the heck, I need to learn something about anthropology, and this looked like an interesting survey course.

Interesting? Not even close! I had to read these incredibly monotonous books about Indians in the Brazilian rain forest and Trobriand Islanders, who, with all due respect, are not very interesting to me. At some point, the class was so incredibly wearisome that I longed for something more exciting, like watching grass grow. I had completely lost interest in the subject matter. Completely, and thoroughly. My eyes teared I was so tired of the endless discussions of piling up yams. I don't know why the Trobriand Islanders spend so much time piling up yams, I can't remember any more, it's incredibly boring, but It Was Going To Be On The Midterm, so I plowed through it. I eventually decided that Cultural Anthropology was going to be my Boredom Gauntlet: my personal obstacle course of tedium. If I could get an A in a class where the tests required me to learn all about potlatch blankets, I could handle anything, no matter how boring. The next time I accidentally get stuck in Lincoln Center sitting through all 18 hours of Wagner’s Ring Cycle, I could thank my studies of the Kwakiutl for making it seem pleasant by comparison.

I got an A. And if I could do it, you can do it.

Take programming-intensive courses.

I remember the exact moment I vowed never to go to graduate school.

It was in a course on Dynamic Logic, taught by the dynamic Lenore Zuck at Yale, one of the brightest of an array of very bright CS faculty.

Now, my murky recollections are not going to do proper credit to this field, but let me muddle through anyway. The idea of Formal Logic is that you prove things are true because other things are true. For example thanks to Formal Logic, "Everyone who gets good grades will get hired" plus "Johnny got good grades" allows you to discover the new true fact, "Johnny will get hired." It's all very quaint and it only takes ten seconds for a deconstructionist to totally tear apart everything useful in Formal Logic so you're left with something fun, but useless.

Now, dynamic logic is the same thing, with the addition of time. For example, "after you turn the light on, you can see your shoes" plus "The light went on in the past" implies "you can see your shoes."

Dynamic Logic is appealing to brilliant theoreticians like Professor Zuck because it holds up the hope that you might be able to formally prove things about computer programs, which could be very useful, if, for example, you could formally prove that the Mars Rover's flash card wouldn't overflow and cause itself to be rebooted again and again all day long when it's supposed to be driving around the red planet looking for Marvin the Martian.

So in the first day of that class, Dr. Zuck filled up two entire whiteboards and quite a lot of the wall next to the whiteboards proving that if you have a light switch, and the light was off, and you flip the switch, the light will then be on.

The proof was insanely complicated, and very error-prone. It was harder to prove that the proof was correct than to convince yourself of the fact that switching a light switch turns on the light. Indeed the multiple whiteboards of proof included many skipped steps, skipped because they were too tedious to go into formally. Many steps were reached using the long-cherished method of Proof by Induction, others by Proof by Reductio ad Absurdum, and still others using Proof by Graduate Student.

For our homework, we had to prove the converse: if the light was off,and it's on now, prove that you flipped it.

I tried, I really did.

I spent hours in the library trying.

After a couple of hours I found a mistake in Dr. Zuck's original proof which I was trying to emulate. Probably I copied it down wrong, but it made me realize something: if it takes three hours of filling up blackboards to prove something trivial, allowing hundreds of opportunities for mistakes to slip in, this mechanism would never be able to prove things that are interesting.

Not that that matters to dynamic logicians: they're not in it for useful,they're in it for tenure.

I dropped the class and vowed never to go to graduate school in Computer Science.

The moral of the story is that computer science is not the same as software development. If you're really really lucky, your school might have a decent software development curriculum, although, they might not, because elite schools think that teaching practical skills is better left to the technical-vocational institutes and the prison rehabilitation programs. You can learn mere programming anywhere. We are Yale University, and we Mold Future World Leaders. You think your $160,000 tuition entititles you to learn about while loops? What do you think this is, some fly-by-night Java seminar at the Airport Marriott? Pshaw.

The trouble is, we don't really have professional schools in software development, so if you want to be a programmer, you probably majored in Computer Science. Which is a fine subject to major in, but it's a different subject than software development.

If you're lucky, though, you can find lots of programming-intensive courses in the CS department, just like you can find lots of courses in the History department where you'll write enough to learn how to write. And those are the best classes to take. If you love programming, don't feel bad if you don't understand the point of those courses in lambda calculus or linear algebra where you never touch a computer. Look for the 400-level courses with Practicum in the name. This is an attempt to hide a useful (shudder) course from the Liberal Artsy Fartsy Administration by dolling it up with a Latin name.

Stop worrying about all the jobs going to India.

Well, OK, first of all, if you're already in India, you never really had to worry about this, so don't even start worrying about all the jobs going to India. They're wonderful jobs, enjoy them in good health.

But I keep hearing that enrollment in CS departments is dropping perilously, and one reason I hear for it is "students are afraid to go into a field where all the jobs are going to India." That's so wrong for so many reasons. First, trying to choose a career based on a current business fad is foolish. Second, programming is incredibly good training for all kinds of fabulously interesting jobs, such as business process engineering, even if every single programming job does go to India and China. Third, and trust me on this, there's still an incredible shortage of the really good programmers, here and in India. Yes, there are a bunch of out of work IT people making a lot of noise about how long they've been out of work, but you know what? At the risk of pissing them off, really good programmers do have jobs. Fourth, you got any better ideas? What are you going to do, major in History? Then you'll have no choice but to go to law school. And there's one thing I do know: 99% of working lawyers hate their jobs, hate every waking minute of it, and they're working 90 hour weeks, too. Like I said: if you love to program computers, count your blessings: you are in a very fortunate minority of people who can make a great living doing work they love.

Anyway, I don't think students really think about this. The drop in CS enrollment is merely a resumption of historically normal levels after a big bubble in enrollment caused by dotcom mania. That bubble consisted of people who didn't really like programming but thought the sexy high paid jobs and the chances to IPO at age 24 were to be found in the CS department. Those people, thankfully, are long gone.

No matter what you do, get a good summer internship.

Smart recruiters know that the people who love programming wrote a database for their dentist in 8th grade, and taught at computer camp for three summers before college, and built the content management system for the campus newspaper, and had summer internships at software companies. That's what they're looking for on your resume.

If you enjoy programming, the biggest mistake you can make is to take any kind of job--summer, part time, or otherwise--that is not a programming job. I know, every other 19-year-old wants to work in the mall folding shirts, but you have a skill that is incredibly valuable even when you're 19, and it's foolish to waste it folding shirts. By the time you graduate, you really should have a resume that lists a whole bunch of programming jobs. The A&F graduates are going to be working at Enterprise Rent-a-Car "helping people with their rental needs." (Except for Tom Welling. He plays Superman on TV.)

To make your life really easy, and to underscore just how completely self-serving this whole essay is, my company, Fog Creek Software, hassummer internships in software development that look great on resumes. "You will most likely learn more about software coding, development, and business with Fog Creek Software than any other internship out there," says Ben, one of the interns from last summer, and not entirely because I sent a goon out to his dorm room to get him to say that. The application deadline is February 1st. Get on it.

 

If you follow my advice, you, too, may end up selling stock in Microsoft way too soon, turning down jobs at Google because you want your own office with a door, and other stupid life decisions, but they won't be my fault. I told you not to listen to me.

 

基于STM32姿态解算-正点原子ATK-IMU901模块标准库开发——正点原子串口角度传感器模块十轴IMU加速度气压计陀螺仪_资料编号29 购买了正点原子的ATK-IMU901模块后,发现例程给的是HAL库的,本项目将HAL库例程转换为库函数版本(基于STM32)。实战开发,亲测无误。 阅读详情

相关推荐

Cory Althoff - The Self Taught Programmer

来自作者 我花了一年时间写自学者程序员。这是一次令人兴奋和有益的经历。我把我的书视为一个软件项目。在我完成编写之后,我创建了一个程序来从书中挑选出所有代码示例并在Python中执行它们以确保所有300多个示例正常工作。然后我编写了软件来为每个代码示例添加行号和颜色。最后,我有一组200名新程序员“测试阅读”这本书,以识别解释不佳的概念,并寻找我的程序遗漏的任何错误。 另一个注意事项:本书适用于新程序员。如果您已经是专业程序员,那么本书可能不适合您。

【收藏】Advice for Computer Science College Students

By Joel SpolskySunday, January 02, 2005Printer Friendly VersionDespite the fact that it was only a year or two ago that I was blubbering about how rich Windows GUI clients were the wave of the future,

心如止水--coofucoo的专栏 2654

The Definitive Guide to Squarespace Learn to Deliver Custom, Professional epub

The Definitive Guide to Squarespace Learn to Deliver Custom, Professional Web Experiences for Yourself and Your Clients 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

http://www.farrellspence.com/christian-louboutin-replica

However the red soles of shoes have turned into the Louboutin shoes sale sign and great charm of Christian Loubo...

cpongo_8710的博客 272

补充

def preprocessing(text): preprocessed_text =text return preprocessed_text import csv file_path=r'C:\Users\Administrator\Desktop\SMSSpamCollectionjsn.txt' sms=open(file_path,'r',enco...

weixin_30627381的博客 8万+

学生使用计算机英文作文,英语四级作文:Student Use of Computers-对大学生使用计算机...

Student Use of ComputersFor this part, you are allowed thirty minutes to write a composition on the topic: Student Use of Computers. You should write at least 120 words, and base your composition on t...

weixin_39949673的博客 345

关于计算机用途的大学英语作文,英语四级作文:Student Use of Computers-对大学生使用计算机...

Student Use of ComputersFor this part, you are allowed thirty minutes to write a composition on the topic: Student Use of Computers. You should write at least 120 words, and base your composition on t...

weixin_29306875的博客 694

英语关于计算机教育议论文,英语四级作文:Student Use of Computers-对大学生使用计算机...

Student Use of ComputersFor this part, you are allowed thirty minutes to write a composition on the topic: Student Use of Computers. You should write at least 120 words, and base your composition on t...

weixin_29813667的博客 690

有史以来最受推崇的编程书有哪些?相信你看过后一定会大呼过瘾!

作者:人民邮电出版社 链接:https://www.zhihu.com/question/50408698/answer/1154160248 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 有史以来最受推崇的编程书有哪些? GitHub上有一位叫皮埃尔·德·沃尔夫(Pierre de Wulf)的童鞋,通过以下方法,检索到了25本网上引用最多的编程书,相...

jasonguan0606的博客 1623

一名 40 岁“老”程序员的反思--英文原文

Reflections of an 'Old Programmer' The three stages of a career in programming Note: I was invited to speak on theSoftware Engineering Dailypodcast on this topic, and it was a ton of fun. Check it outhere. I'm a programmer, a few months shy of his 40...

风自扬 955

计算机在学校的使用英语作文,学生应不应该拥有电脑ShouldStudentsOwnComputers

As more and more students tend to takecomputers to college, a hot discuss on this phenomenon attract people’sattention. Some say that students can use computers to study. Some think thatstudents can c...

weixin_35621342的博客 1254

joel计算机学生建议

1. 不是我怀旧,而是很多东西只是对于它的精彩,过了很久的时候才发现。但没有关系,重要的是认识到了它的精彩。《JOEL说软件》应该是本不错的书。如果你不介意英文可以来这里:http://www.joelonsoftware.com/。2. 程序员曾经把Amazon排行比作票房,则Jolt则相当于奥斯卡。《Joel on Software》获得了第十五届生产力大奖。3. Jo

起点徘徊|Initial Point Linger 1567

BPA - 一揽子采购协议(Blanket Purchase Agreement)

BPA:一揽子采购协议(Blanket Purchase Agreement) 一揽子采购协议是一种为降低采购成本,与供应商签订的中长期采购协议。一次签订,多次要货。一揽子采购协议通常持续时间长,谈判确定一段时间内的采购总量。由于采购数量大,可取得较低单价的优惠。一般随时需要,随时向供应商要货,只要在协议签订的时间范围内向供应商采购到合同规定的数量/总金额即可。 BPA的好处 通过谈判确定价格...

jishublog 3475

双十一,你买了哪些大呼过瘾的编程书?

点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!一年一度的双十一悄然过去,这几天几乎身边每个人都在谈论着自己半夜抢购了什么物件。当当网前几日刚宣布双十一期...

程序猿DD 1194

Joel Spolsky 的七个建议

作者:Joel Spolsky [编者按]由于Joel Spolsky的双重身份(昔日耶鲁大学计算机系学长,今日Fog Creek软件公司的CEO),所以听听他的建议,对于当今无数困扰于就业压力的中国高校计算机专业学子来说,是大有裨益的。你们会发现,大多数建议,都在强调“软实力”的价值。本文转载自《软件随想录》(作者:

mingxunzh的专栏 856

计算机科学专业大学生建议--Joel on Software

Joel on Software 给计算机科学专业大学生建议 translated by Joel Spolsky Sunday, January 02, 2005 尽管距离我夸夸其谈Windows图形用户界面客户端是大势所趋才一两年了,我仍时不时收到一些大学生的邮件,向我请教工作建议,因为现在正是招新的季节,我想我应该写一些标准的建议来供大家阅读,嘲笑或者忽略。 幸运的是许多大学

峰云四起 1402

<<More Joel on Software>> 寻找优秀的程序员

=================== 寻找优秀的程序员 作者:Joel Spolsky 译者:阮一峰 原文网址:http://www.joelonsoftware.com/articles/FindingGreatDevelopers.html 写于 2006年9月6日,星期三 优秀的程序员都在哪里? 这是你第一次公开招募雇员。如同大多数人一样,你会发布广告...

谷子 304

advice的五种类型

通知的5种类型:执行顺序:相同类型已配置顺序为准 1.before:&lt;aop:before method="before" pointcut-ref="pt"/&gt; 2.after:&lt;aop:after method="after" pointcut-ref="pt"/&gt;  3.afterReturning:返回后加入,有异常不执行&lt;aop:after-retu

object_oriented的博客 3099

UFLDL教程(五)之self-taught learning

这里所谓的自学习,其实就是利用稀疏自编码器对无标签样本学习其特征 该自学习程序包括两部分: 稀疏自编码器学习图像特征(实现自学习)---用到无标签的样本集 softmax回归对样本分类---用到有标签的训练样本集 准备工作 下载Yann Lecun的MNIST数据集,本程序用到了如下的两个数据集: 第0步:设置神经网络的结构 该神经网络包括三层: 输入...

weixin_30618985的博客 386

基本计算器

基本计算器 实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。 示例 1: 输入: “1 + 1” 输出: 2 示例 2: 输入: " 2-1 + 2 " 输出: 3 示例 3: 输入: “(1+(4+5+2)-3)+(6+8)” 输出: 23 说明: 你可以假设所给定的表达式都是有效的。 请不要使用内置...

wangzibai的博客 4148

ISO 14064-1 组织层面温室气体排放量和清除量量化和报告指南规范.pdf

ISO 14064-1 组织层面温室气体排放量和清除量量化和报告指南规范

上一篇: 2008年百度之星程序设计大赛初赛第1场 第4题 公平数 解法
下一篇: 2006年百度之星程序设计大赛复赛第4题 彩球游戏(zuma) 题目及解法
edan_deng
博客等级 码龄17年 9粉丝 17原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值