10 tips for advancing from a beginner to an intermediate developer(转)

A TechRepublic member recently 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.

 

 

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. It’s best 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.

 

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 the third item — “how to use it” -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.

Truly learn another language, and I promise that your abilities as a developer will start to blossom.

 

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.

 

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.

You should learn tactics such as 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.

 

3: Help others

Teaching others is 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 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.

 

 

4: Be patient and keep practicing

Research shows that it takes “about 10 years, or 10 to 20 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.

 

 

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 he or she was talking about. A great example of this is the abuse of object-oriented architecture. Many beginners read some information about OO, and suddenly the class diagrams to their simple applications look like the Eiffel Tower.

 

 

6: Learn a few advanced ideas in-depth

Much of what goes into being an intermediate developer is having a few concepts 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.

 

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 overall, 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. 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.

 

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.

 

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.

 

 

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.

 

 

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.

 

J.Ja

Disclosure of Justin’s industry affiliations: Justin James has a working arrangement with Microsoft to write an article for MSDN Magazine. He also has a contract with Spiceworks to write product buying guides

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值