Are soft skills more important than deep technical expertise?

Often I hear the ideas that technical skills are somewhat less important than, for example, communication or other soft skills. Here are some quotes to illustrate what people think:

Dustin Ewers, DeveloperOnFire:

The developer that’s a ninja at whatever the latest JavaScript framework is is great but a developer who is OK at that and also really good communicator is gonna win every day of the week in terms of actually delivering value to people.

John Sonmez, SoftSkills book:

I’d rather hire a developer who knows a little less but knows how to figure out what needs to be done and how to do it, than someone highly skilled who requires constant hand-holding to be productive.

I have seen the most technically competent yet arrogant and unfriendly people lose out on a job to a much less skilled but likable person.

TJ VanToll, DeveloperOnFire:

I don’t consider myself very good software developer necessarely I think I succeeded more in that like learning how to write a good email, learning how to write an opinionated article, can actually take you a lot far ther in many cases than knowing how to write good code for instance.

Now let’s look Pareto principle and we see that roughly 80% of problems we can solve with 20% of features that has a tool we use (like programming language or framework).

Multiply it by diminishing returns law which states that the outcome of our efforts always diminishes. Hence learning 20% of the most used programming language features will provide much more value than learning next 20% of features. But learning that next 20% of features will require more effort because they are more rarely used and therefore it will be harder to remember them.

Add the fact that:

Half of what a programmer knows will be useless in 10 years.

And I would emphasize here that the more detailed and specific the piece of knowledge, the faster it will become useless. This kind of demotivates people to learn new stuff, especially if they are not going to use it immediately.

Finally, add to the equation StackOverflow, YouTube, blogosphere and all other freely and immediately available resources which are capable to solve most of your programming problems in seconds.

What do we get? Well, for most of the jobs very deep and detailed technical knowledge is not as valuable as soft skills – ability to communicate with people via natural as well as via programming languages and ability to solve problems and organize (architect) systems.

At my current project, we hired a guy just because I knew him, I knew he was a good communicator, nice person and loved his craft, that’s it. We did not ask him any questions like what is polymorphism or the sequence of calling of constructors in the inheritance hierarchy. And it really worked great. Do I instead want someone who knows 80% of .NET by heart but with hypertrophied ego or something? No way…

Of course, I just share my thoughts and the fact that these same thoughts appear to other people as well. Interviewers, however, want you to know nitty gritty details as if knowing them proves you will be able to deliver, will keep working on the long demanding project or will be doing well with the team. Many people would disagree and insist that deep tech expertise is the key.

What do you guys think? What is your experience?

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

We would fail to write bubble sort on a whiteboard… Should we be proud?

Recently there was very interesting activity on the Twitter where famous programmers just admitted they are very bad at Computer Science (CS) and other fundamental concepts and still doing very well.

Now, this is very interesting. To me, this is just another manifestation, that knowledge has a little value today. Everything can be easily Googled in a very short time. Yes, the search takes some time, but it is much more efficient than trying to learn and remember all the details of CS and technology concepts. And I also admit: I would fail to write bubble sort on a whiteboard and estimate my algorithms’ complexity while being a successful developer for more than a decade now.

But one may come to the (I believe wrong) conclusion that it is ok to be unable to estimate the algorithm’s complexity and not to understand the essence of fundamental algorithms and their complexities. Algorithms are the methods for solving problems of procedural nature while design patterns are the methods to solve software structural problems and I would argue both are the very basics of software engineering. If you do not know these methods, when you are tackling the tough problem, you basically don’t know what you don’t know. You are unable to discover that your problem can be reduced to one of those fundamental problems and there is already an elegant solution to it. I definitely see my ignorance in CS as a problem and I am currently deliberately studying algorithms :-). And also clean code, which I always enjoy learning and practicing.

Here is what John Sonmez experience was after having learned algorithms:

All of a sudden it was like I put on special glasses that let me see the world in a different light and all these problems, all these places where I was like there’s nowhere in the real world where I’m going to use algorithms in my code, bam, it was popping up everywhere. It’s like, “Whoa! Look! Oh, I recognize this. This is like a min-max problem.” Bam! All of these places I started writing really efficient, really good code because I could see the problems.

I can also see the pain when job interviewers start asking puzzles and algorithms stuff. I hate it. If you want a job you are stressed already and now you have to focus, concentrate and tackle the tough problem at the blackboard as if you would do it at your real work! Problem-solving is very creative activity and It can not be done effectively under stress because the brain actually focuses on security aspect first and foremost. I don’t know how to replace this practice, but it is total evil to me. Interviewers, please, don’t do it to us, developers, unless the job requires this type of skill and knowledge. Pretty interesting article on the related topic from Yegor Bugayenko. But since interviewers still continue asking, maybe realizing the importance of fundamentals, we should be prepared!

Hence, if you have some spare time and you have a choice either to learn some new cool JavaScript framework, which will be forgotten in few years or some of the algorithms or design patterns which will serve you throughout all your career, I believe it is better to select last option.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Знайомство з мовою програмування APL

З радістю, на запрошення компанії SimCorp Україна, знову викладатиму курс по основах APL. Цього разу вирішив записати вступне відео, щоб потенційний студент міг ознайомитися з APL і моєю манерою викладання.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail