5 Essential Skills Every Developer Needs to Have
gi2c-blog.org

5 Essential Skills Every Developer Needs to Have

A month or two ago I wrote a post titled "Every Programmer Should Understand This". I received a bunch of comments on the post, some of which were from people agreeing with the article and some which thought I should be hung for suggesting such an insane idea! Some of the biggest critics of the article wrote that the problem that I introduced was too specific to a field in computer science and that many great programmers might not understand that particular area and shouldn't need to.

After contemplating about what the nay-sayers had to say, I have to agree with some of their points. Although the article was targeted for more traditional computer science based programmers, there are many other type of developers out there that don't nessasarily fit into this category.

With this article, I want to provide a more general list of skills that I believe developers and programmers of any specialization should be well versed in. Most of these skills center around the broader skill of "problem solving".

As software developers, we do not learn to program, we learn to solve problems. It's not about which are the top five to memorize how to solve, it's about building the best toolbox of knowledge and methods so that you can solve ANY problem that comes your way.

With that said here are the 5 most important skills to have as a software programmer/developer/engineer:

1) Practice questioning your assumptions

When you run into a bug and you aren't sure why your code is breaking, you need to be able to take a step back and question all of your assumptions about what is happening and what should be happening. Whenever another programmer asks me to help them find a bug, and they explain, "The code is doing X, then processing Y into Z, but Z has the wrong value." I will ask them, "Ok, please show me that the code is doing X." They'll usually say, "That part is working fine, the bug is somewhere in Y to Z." I'll respond, "That's fine, but something isn't working and we need to question our base assumptions."

9 times out of 10, the problem was with X and that's why the other person couldn't find it, because they didn't question their assumptions.

2) Know your data structures and when to use which ones

Higher level languages such as Java or C# are excellent languages to use when practicing this skill. Let's say you need to store a list of items... whether you use an ArrayList or a LinkedList can dramatically impact the performance of your code. An ArrayList is very fast for accessing arbitrary elements in the list, but it's very slow for inserting elements into the middle. LinkedLists are vice versa.

Also, did you practice skill #1 and question your assumptions? Is it really a List that you need? Perhaps the elements in the array are guaranteed to be unique, so you really should be using a Set instead of a List. Does it matter what order the items are in? No? Then a HashSet will work just fine, but if you need to keep them in a repeatable, consistent order then you're going to need to use a TreeSet.

3) Debugging

The hardest problem to solve is the one where you don't know where the problem is! This is the mechanism that helps you do (1) Question Assumptions. Learn your debugging tools that allow you to step through the code, line by line, and watch how your variables are changing so that you can where things go awry. However, sometimes simple logging statements are the way to go for debugging. Perhaps the problem exists in a section of code that is going to run 1000 times, but doesn't start failing until the 900+ time, you don't want to step through that many. Or perhaps you aren't exactly sure why a certain calculation is wrong and being able to print out the results at a 1000 different iterations will help you detect a pattern in the errors which will help you hone in on the problem.

4) Google-ing

Being able to use the Internet, browse StackOverflow, look up documentation, and find solutions online is definitely one of the single most valuable skills a developer can have. It's amazing how many people struggle with this aspect of programming and assume they need lots of formal training and book reading before writing a line of code or trying to install something. (This is not to knock formal training, which has its place, but formal training is not something that should ever be a prerequisite to experimentation and self-learning).

5.) Modeling

You have to take a problem that is too complex to understand in its entirety, extract a common set of elements from it, and represent it a different way. The ability to to perform abstraction is key skill set for any programmer. Examples of this are being able to reduce complex problems into a set of unambiguous procedures, boolean logic; how to turn a real world condition into a set of true and false statements, and good solid algebra. You need to be able to reduce something in the real world which is complex to something simple that you can solve. Math is a very powerful tool for doing that.

 

To recap, I don't think there are any problems that can successfully tell you whether you're a good programmer, but I would say that any problems I would use to identify a good programmer would involve opportunities to judge all five skills above.

I've known a fair number of people that are quite familiar with design patterns, complex algorithms, etc., that I would not want anywhere near my code. There is nothing wrong with knowing and understanding these concepts and at some point in your career it will probably be required. However, these are not the fundamental building block of a great developer by any means.

With the skills listed above, an individual would be able to provide an effective solution to almost any problem and that's what we as software engineers should be able to pride ourselves on.

Thanks for reading, and if you liked this post please subscribe to my blog at JasonRoell.com and leave any comments below! I would love to get everyones views on the most valuable skills for a programmer to have in the industry today!

karuna Jain

Open for Work as Database or python developer. Currently Working from home location -Ahmedabad. Preference job type - work from home or hybrid (Ahmedabad)

9 年

sir,I really liked your post and till now I have been realizing that no one is born programmer but a good programmer is one who believe in only optimizing more and more their programs.

回复
Michael Mirold

Co-Founder at Testfabrik

9 年

I would like to add one skill that differentiates good from bad developers more than any other, in my opinion: good communication. a) Be a good listener: Nothing is more frustrating for a product owner or a customer than when the developer "didn't get it" and built something wrong. Good developers must be able to see behind the words and grasp the actual requirements. b) Have good reading comprehensions: Similar to being a good listener, a good developer must be able to the the essence of a requirement specification or even API documentation (there are infinitely many ways to misuse an API). c) Be a good writer: This is often neglected, but I regard writing skills (or language skills, in general) more important than even mathematical skills for a software engineer. When facing a complex software task, finding the right concepts is the most important thing to keep your software maintainable. The world is complex enough. A programming language allows you invent purely abstract things. Real world metaphors provide some "grounding". In the real world you would know that picking an apple tree from an apple does not make much sense, but if your concepts are named "A" and "B" there is no intuition anymore. You practically keep a large and powerful part of your brain out of business. (Before anyone criticized *my* language skills. I'm no native speaker, so be patient ;-)

natasha verget

Marketing Director chez PA Life Magazine

9 年

hello how are you my name is natasha me and you I'd got to know you if you do not mind that face have knowledge? my skype account is natasha.verget2 add me?

回复

Very nice

回复
Steven van Cauter

Remote only. (Front-end) Sr. Software Developer (Javascript, React, Node, a.o.)

9 年

Let me start by saying that I really appreciate all the people who take the time to post articles. It's easy to be critical, so that's not my intent. Just want to leave my 2 cents...?I cannot refute any of your statements made, but I cannot help to have the opinion?that your article should be called: "basic skills a junior developer should have".I think that the skills mentioned are the very basics you should come to expect from a professional developer, therefore the article kind of points out the obvious in my opinion. It's like saying: "any writer should be able to spell".The more "advanced" skills like knowing how to communicate, insight in planning your work, being mindful of the customer endgoal, quality vs quantity vs costs and a whole lot of aspects that makes up a decent developer, are not mentioned. Skills that are really essential for a developer imo.?

要查看或添加评论,请登录

Jason Roell的更多文章

社区洞察

其他会员也浏览了