10 tips to go from a beginner to intermediate developer
从初学者迈向中级开发者的10个密诀
作者:Justin James
翻译:Purple Endurer,2009-05-21 第1版
分类:升职,开发者
标签:开发者,语言,Justin James
英文来源:http://blogs.techrepublic.com.com/programming-and-development/?p=1139
Having trouble finding tips for beginner developers who want to take their career to the next level? Justin James aims to fill this information gap with his suggestions about how to make that leap.
为想让职业生涯更上一层楼的初级开发人员寻找密诀有困难吗?Justin James就此提出了如何进行这一飞跃,来填补这一信息缺口。
During an e-mail exchange with a TechRepublic member, he mentioned that blogs, articles, and magazines aimed at developers seem to fall into two categories: items for beginners (”Hello World” type tutorials) and items for experts (MSDN Magazine). It’s a really good point; there’s very little information out there to help a developer make the leap from beginner to intermediate. Here are 10 things you need to do to make that transition.
在一封与TechRepublic成员交流的电子邮件当中,Justin James提到针对开发人员的博客、文章和杂志似乎分成两类:初学者项目(“Hello World”类教程)和专家项目(MSDN 杂志)。这个观点很好;此外能帮助开发人员从初级跃升到中级的资料非常少。这里有你在转变时需要做的10件事情。
#1: Learn another language
学习其它语言
It doesn’t matter which language you learn, but learning another language (regardless of how many you already know) will make you a better developer. Even better is to learn one that is significantly different from what you already use on a regular basis. In other words, if you are a C# developer, learning VB.NET or Java will not help you as much as learning Ruby or Groovy.
你学哪种语言都没关系,但学习其它语言(无论你已经知道多少种语言)将使你成为更好的开发人员。更好的是学习与你已经定期使用的有显著差别的语言。换句话说,如果你是一个C#开发人员,学VB.NET 或 Java 不如学 Ruby 或 Groovy 帮助大。
《endurer注:1、regardless of:不管;不顾
2、on a regular basis:定期地》
And when I say “learn another language,” I mean really learn it. Learning a language consists of three realms of knowledge: the syntax, the built-in operators and libraries, and “how to use it.” The first two are easy; I think that an experienced developer can pick up enough of a language’s syntax to maintain code in 30 minutes to a few hours depending upon the language. The operators and libraries are just a matter of slowly accumulating knowledge and being willing to check reference materials until you memorize what you need to know. But it’s the third item — “how to use it” — that can only be learned over months of working with a language and that’s where the real magic happens. I suggest doing a project that is well suited for that language and doing it in that language’s style.
并且我说“学习其它语言”的意思是真正地学会它。学习一门语言包括三个领域的知识:语法、内置运算符和库、以及“如何使用它”。第一、二项容易;我认为一个有经验的开发人员,根据语言的不同,可以在30分钟到几个小时内学会能够维护代码的语法。运算符和库只不过是慢慢积聚知识,并乐意检查参考材料,直到你记住所要知道的内容。但第三项——“如何使用它”——需要花几个月的时间来跟这门语言打交道,真正的奇迹也就由此发生。我建议做一个适合该语言的项目,并且按这门语言的风格去做。
《endurer注:1、reference material:参考材料》
Truly learn another language, and I promise that your abilities as a developer will start to blossom.
真正学会了另一门语言后,我保证你的开发能力一定会突飞猛进。
《endurer注:1、He used to be painfully shy, but now he's started to blossom (out).他以前极腼腆, 现在活泼起来了.》
#2: Learn advanced search techniques, tactics, and strategies
学会高级搜索技术、手段和及策略
More and more, being a good developer is not just about your skill, but your skill at finding information. Simply put, modern languages and development frameworks are too large for most people to remember much of them. As a result, your ability to get work done is often dependent upon your ability to perform research. Unfortunately, knowing how to find accurate, high-quality information is more than just heading to TechRepublic for the answer or typing a few words into your search engine of choice.
作为一名好的开发人员,不仅要看编程技能,而且也取决于寻找信息的技巧,这一趋势越来越明显。简言之,“现代语言及开发框架”对大部分人而言太大,记不住多少。因此,你完成工作的能力通常取决于你的检索能力。不幸的是,要知道如何找到精确高质的信息,可不仅仅是直奔TechRepublic找答案,或者在选好的搜索引擎上敲几个字那么简单。
《endurer注:1、very simply put:简言之
2、heading to:朝向...走》
“Techniques,” “tactics,” and “strategies” may sound like synonyms, but they are not. The techniques you need to learn are the advanced search systems of your favorite search engine; you need to learn things such as the Boolean operators, how to filter results (negative keywords, domain restrictions, etc.), what role word order plays, and more. So essentially, RTFM.
“技术”、“战术”及“策略”听起来像是一回事,实际上并非如此。你需要学会的技术是掌握你喜爱的搜索引擎的高级搜索系统;你需要了解诸如布尔操作符,如何过滤结果(像“非”关键字,域名限制等等),关键字的词序扮演什么角色,等等。说到底,请阅读该死的使用手册。
《endurer注:1、RTFM:Read The Foolish Manual,请阅读该死的使用手册》
You should learn tactics such as knowing how to approach any particular search and knowing what you should you actually look for. Errors are easy — just look for the error code — but keyword selection on many searches is much more difficult.
你应该学会诸如如何接近特定搜索,以及了解自己实际上想查找什么之类的战术。查找错误很容易 — 只需查找错代码可 — 但是在许多搜索中关键字的选择更为困难。
With regard to strategies, you need to learn things such as what search engines to use (hint: general purpose search engines are not always the right answer), which sites to visit before going to a general purpose search engine, and even which message boards to post to for help.
至于策略,你需要学会这些东西,比如使用哪种搜索引擎(提示:通用搜索引擎并不总是正确选择), 使用通用搜索引擎前应该访问哪个网站,甚至是应该到哪个论坛去发贴求助,等等。
《endurer注:1、With regard to:关于,至于》
#3: Help others
帮助别人
Teaching others is invariably one of the best ways to learn anything. It is understandable to think that you don’t have much to offer because you are relatively new to the development field. That’s nonsense. Remember, everything you know you learned from someone or somewhere; so try being the someone that another person learns from. Spend a few minutes a day trying to answer the questions on TechRepublic or another site as best you can. You can also learn a lot by reading other members’ answers.
教导别人始终是学习事物的最佳途径之一。你自认为在开发领域还是新手,没什么可以传授的,这可以理解,但毫无意义。记住,你所知道的一切都是从别人或别处学到的;因此请尝试一下,成为另外一个人要请教的“别人”。每天可能花一点时间试着回答TechRepublic或其他网站上的问题。阅读读其他会员的回答,你也可以学会很多东西。
《endurer注:1、as best one can:尽可能(尽量)》
#4: Be patient and keep practicing
习之以恒
Research shows that it takes “about ten years, or ten to twenty thousand hours of deliberate practice” to become an “expert.” That’s a lot of time. Furthermore, becoming an expert does not always mean doing the same task for 10 years; it often means doing a wide variety of tasks within a particular domain for 10 years. It will take a lot of time and energy to become an “expert”; working as a developer for a few years is not enough. Want to become a senior developer in your early 30s? Either start your education/training sooner or be willing to do a lot of work, reading, and practicing in your spare time. I started programming in high school, and I devoted a lot of off-hours to keeping up with the industry, learning new skills, and so on. As a result, I hit the intermediate and senior level developer positions significantly earlier in my career than most of my peers, which translates to an awful lot of money over time.
研究表明,要成为一名“专家”,需要花费10年,或者10000到20000小时的深入练习时间。真的很久。还有,成为专家并不一定代表10年内执行同样的任务;通常这意味着要在特定领域内执行广泛的任务10年。要成为“专家”需要花费大量的时间和精力;做几年开发人员是不够的。想在30岁左右成为一名高级软件开发工程师?要么尽早开始接受教育/培训,要么你得愿意用业余时间进行大量的工作、阅读和练习。我从高中开始编程,还牺牲了许多休息时间去跟踪行业发展、学习新技能等等。结果,我获得中级和高级开发人员职位的时间就比我的大部分同事都要早得多,随着时间的推移,这些就转化成为非常多的收入。
《endurer注:1、spare time:业余时间》
#5: Leave your dogmas at the door
拒绝教条
Time for some brutal honesty: Beginner developers probably don’t know enough to state that there is One Best Way of doing something. It’s fine to respect the opinion of a friend or an authority figure, but until you are more experienced, don’t claim their opinions as your own. The simple fact is, if you don’t know enough to figure these things out on your own, what makes you think that you know which “expert” is right? I know this sounds really harsh, but please believe me; I have met far too many budding developers who had their careers or their growth set back years because they got hung up on some foolish piece of advice or followed some “expert” who really didn’t know what they were talking about. A great example of this is the abuse of object-oriented architecture. For example, many beginners read some information about OO, and suddenly the class diagrams to their simple applications look like the Eiffel Tower.
是开诚布公的时候了:也许初级开发人员所知的东西还不足以声明做某件事情有一种最好的方式。尊重朋友或者权威的观点这样不错,但直到你更有经验之前,不要把他们的观点说成是你自己的。事实上,如果你所了解的不足以让你独立理解这些东西,你又凭什么认为你知道哪一位“专家”是对的呢?话是难听了点,不过请相信我;我遇到太多的开发人员,他们由于受某些愚蠢建议的蛊惑,或者追随某些根本不知道自己在说些什么的所谓专家,白白把自己的职业生涯耽搁了几年。这一点有一个很好的例子,就是面向对象结构的滥用。 比如说,许多初级者读了一些有关面向对象的信息后,突然间,他们那简单的应用程序的类图看起来就像埃菲尔铁塔一样了。
《endurer注:1、authority figure:权威人物
2、the simple facts: 事实本身
3、figure out:算出(想出,理解,断定,解决)》
#6: Learn a few advanced ideas in-depth
深入学习一些先进理念
Much of what goes into being an intermediate developer is having a few concepts that you are really good at working with in code. For me, it is multithreading/parallelism, regular expressions, and how to leverage dynamic languages (and the last two are fading as I get farther away from my Perl history). How did this happen? Multithreading and parallel processing came about because I read articles on it, thought it sounded interesting, and figured it out on my own; I keep writing apps that use those techniques. I had a job that used a ton of regular expressions in Perl. Also, I ended up writing my own e-commerce engine with a template processing engine and built-in database system; then I spent nearly two years working on it.
作为一名中级程序员,很大一部分是要擅于在代码里面体现出一些新概念。就我而言,是多线程/并行性, 是正则表达式,以及如何利用动态语言(后两个在我与Perl渐行渐远后开始衰退)。这是如何发生的?我转向多线程和并行处理是因为读了相关文章,觉得它看起来很有趣,然后再自己把它弄清楚了;然后我就一直使用这些技术来写应用程序。我做过一件工作,里面运用了大量的Perl写的正则表达式。我也用一个数据处理引擎模板和内置数据库系统写过我自己的电子商务引擎;当时我在这上面几乎花了2年时间。
《endurer注:1、came about:发生(转身,改变方向)
2、end up:结束,告终》
Find something that has you really hooked. It might be image manipulation or maybe database design or whatever. Even if you’re an entry-level developer over all, try to become an expert in at least one area of focus. This will get you into that intermediate level quite quickly, and once there, you will be halfway to expert.
找到真正令你着迷的东西。也许是图像处理,也许是数据库设计,或者其它什么的。即便你是一个入门级的开发人员,也要尝试一下成为自己所关注的某一领域的专家。这会让你相当快速地进入到中级水平,一旦你达到了那个水平,你的专家之路也走到一半了。
#7: Learn the basic theories underlying your field
扎实学习你的领域中的基本理论
It’s one thing to write “Hello World,” but it’s another to understand how the words appear on the screen. By learning the “groundwork” that supports the work you do, you will become much better at it. Why? Because you will understand why things work the way they do, what might be wrong when things are broken, and so on. You will become better by learning what happens at a lower level than your work.
写出“Hello World”程序,跟理解那些字是如何显示到屏幕上的是两码事。通过学习支撑你所从事的工作的“底层工作”,你会变得更加内行。为什么呢?因为你会理解事物为何会以这种方式运作,当东西坏时就能知道是哪里的问题,等等。通过学习工作的低层机制,你变会得更出色。
If you are a Web developer, read the HTTP RFC and the HTML spec. If you use a code generator, really look at the code it generates; if you use database tools, take a look at the underlying SQL it generates; and so on.
如果你是Web开发人员,读读HTTP RFC和HTML规范。如果你使用代码生成器,好好看看它生成的代码;如果你使用数据库工具,看看它生成的底层SQL语句,依此类推。
#8: Look at senior developers’ code
看高级开发人员的代码
At your job, take a look at the code the senior developers are writing and ask how and why things were done a particular way. If you can, check out open source projects as well. Even if other developers don’t have the best coding habits, you’ll learn a lot about how code is written. Be careful not to pick up bad habits along the way. The idea here isn’t to just blindly imitate what other developers are doing; it’s to get an idea of what works and what makes sense and try to imitate it.
在工作中看一看高级开发人员写的代码,然后问一问事情是如何以某种特别的方式完成,为何如此?可能的话也可以看开源项目。甚至看其他的没有最佳编程习惯的开发人员的代码,你也会学到许多编程经验。当然,要小心别染上坏习惯。我的意思是说不要盲目模仿别人的东西;你要能领会到哪些行得通,哪些讲得通,然后再模仿。
《endurer注:1、make sense:讲得通,有意义,言之有理》
#9: Learn good habits
学习好的习惯
Nothing marks an inexperienced coder like stupid variable names, poor indentation habits, and other signs of being sloppy. All too often, a developer learned how to program without being taught the less interesting details such as code formatting — and it shows. Even though learning these things will not always make your code better or you a better developer, it will ensure that you are not viewed as an entry-level developer by your peers. Even if someone is a senior developer, when variables are named after their 97 cats or their functions are called “doSomething(),” they look like they do not know what they are doing, and it makes their code harder to maintain in the process.
愚蠢的变量名,糟糕的缩进习惯以及其他一些 草率的迹象就是一个没有经验的代码工人的最好标记。一个开发人员在学会如何编程时,却经常未得传授到那些不那么有趣的细节,例如代码格式—显示。尽管学习这些东西并不会令你的代码更好,也不会令你成为更好的开发人员,它也会确保你不被同事视为入门级的开发人员。即使某人是高级开发人员,如果他的变量是以他那97只猫的名字来命名,或者其函数叫做“doSomething()”的,他们看起来像他们不知道他们在做什么,而且会令其代码在过程中更难以维护。
《endurer注:1、be sloppy:湿滑的
2、All too often:时常》
#10: Have fun
要做得开心
Want to be stuck on the career treadmill? Hate your job. What it takes to move up in this business is not merely dogged determination to bring home an ever growing paycheck but an actual enjoyment of your work. If you do not like your work and you are a junior developer, what makes you think that being an intermediate or senior developer will be any better? Change jobs or change careers. On the other hand, if you love the work you are doing, great! I guarantee that you can become a better developer if you keep at it.
想爱上单调乏味的职业?讨厌工作吧。在这一行业中,所要采取的推进措施不仅仅是要给家庭带回越来越多的工资的决心,而且还要实实在在享受工作。如果你不喜欢自己的工作,且还是初级开发人员,你怎么会认为成为中级或高级开发人员后情况就会好转呢?换工作或转职业吧。反过来说,如果你喜爱所从事的工作,那就好!只要你坚持下去,我保证你能成为一名更好的开发人员。
《endurer注:1、Have fun:玩得开心
2、be stuck on:迷恋于(爱上)
3、dogged determination:顽强的决心》