开源日报 每天推荐一个 GitHub 优质开源项目和一篇精选英文科技或编程文章原文,坚持阅读《开源日报》,保持每日学习的好习惯。
今日推荐开源项目:《古老的训练 Python-programming-exercises》
今日推荐英文原文:《Beyond Coding — Soft skills to avoid project failures》

今日推荐开源项目:《古老的训练 Python-programming-exercises》传送门:GitHub链接
推荐理由:学以致用,锻炼自己所学最好的方法就是拿去干点什么。这个项目就是一个 Python 的习题集——虽然已经是很久以前的东西了,但是并不妨碍我们拿它来锻炼自己,就像做算法题一样的钻研它们就好了。顺带一提,答案和题目之间的距离很近,在思考时小心不要顺手一眼扫到答案的好。
今日推荐英文原文:《Beyond Coding — Soft skills to avoid project failures》作者:Viral Shah
原文链接:https://medium.com/@viral_shah/beyond-coding-soft-skills-to-avoid-project-failures-4ed7821fa93a
推荐理由:写代码以外的技能和写代码同样重要

Beyond Coding — Soft skills to avoid project failures

Before you read any further, go and get a can of chilled Beer ?
Ready?
Alright! Now for every sentence that you’ve heard before take a big chug. Go!
  • “The clients changed the requirements at the last moment and hence, the entire project got delayed. It’s not our fault!”
  • “This is not how the system was designed to be used. They don’t use it right!”
  • “Our System is too complicated and technical; they will not understand it.”
  • “We said the software was not ready but, they pushed it to production anyway.”
  • “We made an amazing product but if the management doesn’t know how to sell it properly, it's not our concern!”
But you know what? It is our problem. It is our concern!

Why is this our concern?

If the products we build won’t sell, the companies that hire us won’t profit and we will be laid off. The sales team will sell something else, managers will manage someone else, but we — the Software developers — will be out of jobs.

As Software developers, we are the most powerful employees of a software development company. With our code, we shape the products and spring them to life. But the success of a software product demands a lot more than just good code. And when those demands are not met, the product will fail.

So are we just supposed to sit back helplessly? Just because it is not our job?

I think not.

If only we keep your eyes and ears open, we can often sense the upcoming fiasco long before it happens. Often, the root cause for a predestined disaster is one or more person not doing their job correctly. Either because that person is lazy or unskilled or a person with that role simply does not exist.

Such a scenario is fairly common in all projects. These missing gaps are what triggers chaos and when the chaos is unchecked, it will lead to failure.

However, Chaos is not bad. Chaos is inevitable. Chaos is an opportunity.

Facing things head on and fixing it, is the only way forward. As developers, we are right in the middle of all the Chaos and in the perfect position to grab this opportunity and climb this proverbial ladder. Doing so will help you build successful products. It will help you stand out among the crowd that keeps whining about things.

But first, it is imperative that you equip yourself with a strong foundation of skillset — soft skills, communication skills, non-technical skills. You need to look at a project beyond just the scope of programming. You need to understand the business, manage the clients, communicate effectively, sell your ideas, tackle people problems, and many other things.

Before I proceed further, let’s get two things out of the way,
  • No amount of soft-skills will compensate for your coding skills.
  • Without these skills, you can still become an Efficient developer but not an Effective developer.
“Efficiency is doing things right; effectiveness is doing the right things” — Peter Drucker
So if you really want to, you can always escape these responsibilities, blame it on someone else or hide in someone else’s shadow. But by doing that, you will not progress much. That much, I can guarantee!

Okay, enough build-up now. Let’s get to the actual topic.

Btw, this would be a good time to refill your Beer ?

Speak the Human language

As much as I would love to live in a Nerdvana (Nerd-Nirvana ?) where everyone talks in pseudo-code, algorithms and technical jargons, unfortunately, we are not there (yet).

To the normal humans, our technical lingo is nothing more than gibberish mumbo jumbo that they often pretend to understand but almost completely ignore. They only speak the Human language.

R.I.P Yoda. Credits: imgflip.com

Simple tips to improve your language skills

  • Describe your work without referring to any programming languages or technologies.
  • Talk about a product without referring to its architecture or implementation details.
  • When describing a system, focus on what problem the system is solving rather than how.
  • Gauge your audience’s background on the topic that you are discussing and consciously apply some abstraction on the details that you get into.
  • Listen — to the people above you, people below you, people you admire, people you have contempt for. More you observe and listen, more you will become self-aware about the word choices you make.

Language skills boost your career

We often complain about how non-technical managers do not understand and appreciate our work. Sometimes even another developer in your team might not understand what is obvious to you. Well, take some effort and make them understand it. Simplify your language, drop the jargons, paraphrase if you need to, give a bit of background if necessary.
“If you can’t explain it simply, you don’t understand it well enough” — Albert Einstein
Whatever you do, just don’t be a condescending jerk. Nobody likes a jerk!

If you apply this regularly, people are more likely to understand you, respect you, open up to you, involve you in important decisions and when the time comes, probably recommend you for a promotion ?.

You are not being a kiss-ass. You are being the guy who gets shit done!

Furthermore, I strongly encourage you to hang out more with all sorts of people. Practice your communication skills with them. Different job-backgrounds will often give them a different viewpoint. They will teach you more about various aspects of business and give you a wider perspective. Honestly, not only will this help your career but also help you expand your horizons.

Understand — The Business

As a developer, we can practically make a health-care system without understanding how doctors, hospitals and medical insurance work. Theoretically, as long as someone gathers all the requirements for us, we can translate that to code and Bam! the system is ready for use.

But is it though?

Exhaustive requirement gathering is hard…really hard

No amount of due diligence can ensure that all the client requirements are well documented beforehand. Granular details will always be left out. And as a developer, you will make many assumptions on those details while building the system.

Also, it is highly risky to assume that a client knows what he really wants or knows what is the best option for them.

Whenever a business user starts telling me what to make and how to make, I always ask them ‘Why?’ If the answer is not deep enough for me, I will ask them again, ‘Why?’ I’ll keep on probing with ‘Why’ & ‘Why not’ till they get to the real business problem that they are trying to solve.

But to understand the problem, you need to understand the business, its users and the processes. Sometimes you even need to get acquainted with the lingo. You need to see the big picture and recognize where your small system fits in the entire picture.

Simple tips for understanding the business & requirements

  • Do some homework before you speak with clients.
  • Cut the middleman out wherever possible. Talk directly with the end user.
  • Observe the users in their natural environment if possible. Analyze their tools, business processes & workflows.
  • Do not be afraid to ask questions, many questions.
  • Do not rush into suggesting solutions.
  • Make sure your entire team and your client understand the problem statement and are all on an agreement before they start working on it.
Knowing the business helps you have more meaningful conversations. It will also give you the confidence to make reasonable assumptions and create feasible solutions. Solutions that will still be relevant in the long run. And at times, in spite of knowing everything you will still be stuck with multiple choices. It’s fine. Just lay them down in front of your client (in human language), explaining the choices and the impact of the choices and let them make the final decision. They are after all the business experts!

Think like a User and then validate with a User

You can make a system that does everything your user needs but if they believe it’s not going to add any value to their life, they won’t use it. Hence, it’s not enough to make something functional. It also needs to be intuitive and usable.

R.I.P Futurama. Credits: makeameme.org

You should constantly test the usability of a product for the end user. If you are going to have multiple users, with a wide range of requirements and skill sets, it is necessary to analyze the system from each of their’s perspective. After all, users are the ultimate jury of your product.

UX is an extremely important part of the system and UX is not the same UI. If you have doubts, please check out this article in which Cameron Chapman explores the core differences between UX and UI.

Simple tips to improve the usability of a product

  • Build a rapport with your end users. You have to get comfortable enough to ask for feedback and them to give it honestly.
  • Understand their mental models & business workflows and try not to deviate much from it.
  • Learn users’ terminology and incorporate it.
  • Create simple wireframes or whiteboard drawings to get early feedback.
  • Add user-friendly labels, messages, tooltips, info icons wherever needed. Don’t wait for people to ask for it. It’s your job to give it by default!
  • Proactively take feedback from your users.
  • Create a convenient channel for users to submit bugs and feature requests.
UX is a really fun and wide field to explore. Some of it is science and some of it is just art. Don’t be overwhelmed by it. Just try to learn some of its basics.

When things go wrong

Inevitably, there will be goof-ups and expectations will sometimes not be met. That’s alright. Happens to the best of us. Stop blaming each other; go and talk to your users. In my experience, users normally don’t bite. They get angry, they get disappointed, but they don’t bite. In fact, if you listen to their problems, acknowledge them and start talking about possible solutions, they will appreciate it.

Most importantly, be objective and keep an open mind. Criticism is not always an easy thing to digest. But, it’s a powerful feedback tool. If you make a mistake, accept it. If others make one, stop dwelling over it. Adapt, learn, practice and improve.

Effective written communication

In today’s age, every working professional naturally does some form of writing. The software industry is no exception. As you progress in your workplace, you too are expected to do it and do it effectively. You may not even realize the number of written artifacts that you might be creating:

Architecture docs, Systems designs, PRDs, BRDs, User stories, Workflows, Case studies, Job Descriptions, Recommendations, Resumes, Presentations, Diagrams… and at the very least everyone writes Emails!

Everything I mentioned in “speak the human language” is also applicable here. But unlike spoken communication, written communication has limited scope for explanations and clarifications. Plus it is more concrete and formal. Hence, it is absolutely important that you nail this one.

Simple tips to effective written communication

  • Write first, edit later
  • Brevity is your friend. Remove whatever is not necessary.
  • Short and simple sentences.
  • Don’t beat around the bush.
  • Be confident in your tone.
  • Format your text. Break long text into smaller paras.
  • Use a diagram or an image when something is hard to describe.
  • Improve your word and PPT skills.
  • Maintain a flow in your content.
  • Do not digress, focus on the topic
  • Give a proper name, headings, sub-headings, etc.
  • Proofread. Spell check. Add credits, references and additional links.
There are many medium articles for effective writing. You can start with this nice article by Lindsey Lazarte.

Taking a Stand

Aah, this is the hard one, Always easier said than done.

When you take a stand against people, most people will succumb to the baser human instincts and tend to not like you; especially, in the moment. But if your reasoning is sound and you give them an honest chance to fix things, most of them — the kind that really matters — will respect you in the long run.

It’s a long topic and I should someday probably write another article about it. But here’s the gist of it.

I believe in talks to resolve issues.
I believe in negotiations and discussions.
I believe in compromises for the greater good.

But there’s a limit to everything.

I do not believe in letting people with power take advantage of the weak ones. I do not believe in sacrificing your ethics and values.

Sometimes too much is too much and you have to stand up against it.

It can be something small or big, doesn’t matter. At times you have to stop the diplomacy and take a stand. You might be standing up to an important client, your manager, your mentor, your team or your colleagues. It’s not easy, but it’s necessary.

And I also wanna clarify as to what I mean by standing up to someone. Standing up doesn’t mean you post mean things about someone on social media or try to publicly ridicule and humiliate them. These are ineffective and cheap tactics. What I mean by standing up, is approaching the person, looking them in the eye and telling them your thoughts about a situation. Warning them in a polite tone and giving them a chance to react on it and rectify the situation. You need patience and self-restraint. But if things still don’t get resolved, you do what you gotta do.

Conclusion

Soft-skills are what helps people stand out in the crowd. There are many layers to learning these skills and mastering them may take a lifetime. But, ignoring them breaks projects and careers. Hopefully, I have equipped you with some basic tips to start working. Obviously, this is not an exhaustive list. I’ve only covered the ones which I think are the most important and underrated ones.
下载开源日报APP:https://openingsource.org/2579/
加入我们:https://openingsource.org/about/join/
关注我们:https://openingsource.org/about/love/