Wednesday, 30 September 2015

Why Software Is Eating The World

This week, Hewlett-Packard (where I am on the board) announced that it is exploring jettisoning its struggling PC business in favor of investing more heavily in software, where it sees better potential for growth. Meanwhile, Google plans to buy up the cellphone handset maker Motorola Mobility. Both moves surprised the tech world. But both moves are also in line with a trend I've observed, one that makes me optimistic about the future growth of the American and world economies, despite the recent turmoil in the stock market.
In an interview with WSJ's Kevin Delaney, Groupon and LinkedIn investor Marc Andreessen insists that the recent popularity of tech companies does not constitute a bubble. He also stressed that both Apple and Google are undervalued and that "the market doesn't like tech."
In short, software is eating the world.
More than 10 years after the peak of the 1990s dot-com bubble, a dozen or so new Internet companies like Facebook and Twitter are sparking controversy in Silicon Valley, due to their rapidly growing private market valuations, and even the occasional successful IPO. With scars from the heyday of Webvan and Pets.com still fresh in the investor psyche, people are asking, "Isn't this just a dangerous new bubble?"
I, along with others, have been arguing the other side of the case. (I am co-founder and general partner of venture capital firm Andreessen-Horowitz, which has invested in Facebook, Groupon, Skype, Twitter, Zynga, and Foursquare, among others. I am also personally an investor in LinkedIn.) We believe that many of the prominent new Internet companies are building real, high-growth, high-margin, highly defensible businesses.
QUICKHONEY
Today's stock market actually hates technology, as shown by all-time low price/earnings ratios for major public technology companies. Apple, for example, has a P/E ratio of around 15.2—about the same as the broader stock market, despite Apple's immense profitability and dominant market position (Apple in the last couple weeks became the biggest company in America, judged by market capitalization, surpassing Exxon Mobil). And, perhaps most telling, you can't have a bubble when people are constantly screaming "Bubble!"
Advertisement
But too much of the debate is still around financial valuation, as opposed to the underlying intrinsic value of the best of Silicon Valley's new companies. My own theory is that we are in the middle of a dramatic and broad technological and economic shift in which software companies are poised to take over large swathes of the economy.
More and more major businesses and industries are being run on software and delivered as online services—from movies to agriculture to national defense. Many of the winners are Silicon Valley-style entrepreneurial technology companies that are invading and overturning established industry structures. Over the next 10 years, I expect many more industries to be disrupted by software, with new world-beating Silicon Valley companies doing the disruption in more cases than not.
QUICKHONEY
Why is this happening now?
Six decades into the computer revolution, four decades since the invention of the microprocessor, and two decades into the rise of the modern Internet, all of the technology required to transform industries through software finally works and can be widely delivered at global scale.
Over two billion people now use the broadband Internet, up from perhaps 50 million a decade ago, when I was at Netscape, the company I co-founded. In the next 10 years, I expect at least five billion people worldwide to own smartphones, giving every individual with such a phone instant access to the full power of the Internet, every moment of every day.
On the back end, software programming tools and Internet-based services make it easy to launch new global software-powered start-ups in many industries—without the need to invest in new infrastructure and train new employees. In 2000, when my partner Ben Horowitz was CEO of the first cloud computing company, Loudcloud, the cost of a customer running a basic Internet application was approximately $150,000 a month. Running that same application today in Amazon's cloud costs about $1,500 a month.
QUICKHONEY
With lower start-up costs and a vastly expanded market for online services, the result is a global economy that for the first time will be fully digitally wired—the dream of every cyber-visionary of the early 1990s, finally delivered, a full generation later.
Perhaps the single most dramatic example of this phenomenon of software eating a traditional business is the suicide of Borders and corresponding rise of Amazon. In 2001, Borders agreed to hand over its online business to Amazon under the theory that online book sales were non-strategic and unimportant.
Oops.
Today, the world's largest bookseller, Amazon, is a software company—its core capability is its amazing software engine for selling virtually everything online, no retail stores necessary. On top of that, while Borders was thrashing in the throes of impending bankruptcy, Amazon rearranged its web site to promote its Kindle digital books over physical books for the first time. Now even the books themselves are software.
Today's largest video service by number of subscribers is a software company: Netflix. How Netflix eviscerated Blockbuster is an old story, but now other traditional entertainment providers are facing the same threat. Comcast, Time Warner and others are responding by transforming themselves into software companies with efforts such as TV Everywhere, which liberates content from the physical cable and connects it to smartphones and tablets.
Today's dominant music companies are software companies, too: Apple's iTunes, Spotify and Pandora. Traditional record labels increasingly exist only to provide those software companies with content. Industry revenue from digital channels totaled $4.6 billion in 2010, growing to 29% of total revenue from 2% in 2004.
Today's fastest growing entertainment companies are videogame makers—again, software—with the industry growing to $60 billion from $30 billion five years ago. And the fastest growing major videogame company is Zynga (maker of games including FarmVille), which delivers its games entirely online. Zynga's first-quarter revenues grew to $235 million this year, more than double revenues from a year earlier. Rovio, maker of Angry Birds, is expected to clear $100 million in revenue this year (the company was nearly bankrupt when it debuted the popular game on the iPhone in late 2009). Meanwhile, traditional videogame powerhouses like Electronic Arts and Nintendo have seen revenues stagnate and fall.
The best new movie production company in many decades, Pixar, was a software company. Disney—Disney!—had to buy Pixar, a software company, to remain relevant in animated movies.
Photography, of course, was eaten by software long ago. It's virtually impossible to buy a mobile phone that doesn't include a software-powered camera, and photos are uploaded automatically to the Internet for permanent archiving and global sharing. Companies like Shutterfly, Snapfish and Flickr have stepped into Kodak's place.
Today's largest direct marketing platform is a software company—Google. Now it's been joined by Groupon, Living Social, Foursquare and others, which are using software to eat the retail marketing industry. Groupon generated over $700 million in revenue in 2010, after being in business for only two years.
Today's fastest growing telecom company is Skype, a software company that was just bought by Microsoft for $8.5 billion. CenturyLink, the third largest telecom company in the U.S., with a $20 billion market cap, had 15 million access lines at the end of June 30—declining at an annual rate of about 7%. Excluding the revenue from its Qwest acquisition, CenturyLink's revenue from these legacy services declined by more than 11%. Meanwhile, the two biggest telecom companies, AT&T and Verizon, have survived by transforming themselves into software companies, partnering with Apple and other smartphone makers.
QUICKHONEY
LinkedIn is today's fastest growing recruiting company. For the first time ever, on LinkedIn, employees can maintain their own resumes for recruiters to search in real time—giving LinkedIn the opportunity to eat the lucrative $400 billion recruiting industry.
Software is also eating much of the value chain of industries that are widely viewed as primarily existing in the physical world. In today's cars, software runs the engines, controls safety features, entertains passengers, guides drivers to destinations and connects each car to mobile, satellite and GPS networks. The days when a car aficionado could repair his or her own car are long past, due primarily to the high software content. The trend toward hybrid and electric vehicles will only accelerate the software shift—electric cars are completely computer controlled. And the creation of software-powered driverless cars is already under way at Google and the major car companies.
Today's leading real-world retailer, Wal-Mart, uses software to power its logistics and distribution capabilities, which it has used to crush its competition. Likewise for FedEx, which is best thought of as a software network that happens to have trucks, planes and distribution hubs attached. And the success or failure of airlines today and in the future hinges on their ability to price tickets and optimize routes and yields correctly—with software.
Oil and gas companies were early innovators in supercomputing and data visualization and analysis, which are crucial to today's oil and gas exploration efforts. Agriculture is increasingly powered by software as well, including satellite analysis of soils linked to per-acre seed selection software algorithms.
The financial services industry has been visibly transformed by software over the last 30 years. Practically every financial transaction, from someone buying a cup of coffee to someone trading a trillion dollars of credit default derivatives, is done in software. And many of the leading innovators in financial services are software companies, such as Square, which allows anyone to accept credit card payments with a mobile phone, and PayPal, which generated more than $1 billion in revenue in the second quarter of this year, up 31% over the previous year.
Health care and education, in my view, are next up for fundamental software-based transformation. My venture capital firm is backing aggressive start-ups in both of these gigantic and critical industries. We believe both of these industries, which historically have been highly resistant to entrepreneurial change, are primed for tipping by great new software-centric entrepreneurs.
Even national defense is increasingly software-based. The modern combat soldier is embedded in a web of software that provides intelligence, communications, logistics and weapons guidance. Software-powered drones launch airstrikes without putting human pilots at risk. Intelligence agencies do large-scale data mining with software to uncover and track potential terrorist plots.
Companies in every industry need to assume that a software revolution is coming. This includes even industries that are software-based today. Great incumbent software companies like Oracle and Microsoft are increasingly threatened with irrelevance by new software offerings like Salesforce.com and Android (especially in a world where Google owns a major handset maker).
In some industries, particularly those with a heavy real-world component such as oil and gas, the software revolution is primarily an opportunity for incumbents. But in many industries, new software ideas will result in the rise of new Silicon Valley-style start-ups that invade existing industries with impunity. Over the next 10 years, the battles between incumbents and software-powered insurgents will be epic. Joseph Schumpeter, the economist who coined the term "creative destruction," would be proud.
QUICKHONEY
And while people watching the values of their 401(k)s bounce up and down the last few weeks might doubt it, this is a profoundly positive story for the American economy, in particular. It's not an accident that many of the biggest recent technology companies—including Google, Amazon, eBay and more—are American companies. Our combination of great research universities, a pro-risk business culture, deep pools of innovation-seeking equity capital and reliable business and contract law is unprecedented and unparalleled in the world.
Still, we face several challenges.
First of all, every new company today is being built in the face of massive economic headwinds, making the challenge far greater than it was in the relatively benign '90s. The good news about building a company during times like this is that the companies that do succeed are going to be extremely strong and resilient. And when the economy finally stabilizes, look out—the best of the new companies will grow even faster.
Secondly, many people in the U.S. and around the world lack the education and skills required to participate in the great new companies coming out of the software revolution. This is a tragedy since every company I work with is absolutely starved for talent. Qualified software engineers, managers, marketers and salespeople in Silicon Valley can rack up dozens of high-paying, high-upside job offers any time they want, while national unemployment and underemployment is sky high. This problem is even worse than it looks because many workers in existing industries will be stranded on the wrong side of software-based disruption and may never be able to work in their fields again. There's no way through this problem other than education, and we have a long way to go.
Finally, the new companies need to prove their worth. They need to build strong cultures, delight their customers, establish their own competitive advantages and, yes, justify their rising valuations. No one should expect building a new high-growth, software-powered company in an established industry to be easy. It's brutally difficult.
I'm privileged to work with some of the best of the new breed of software companies, and I can tell you they're really good at what they do. If they perform to my and others' expectations, they are going to be highly valuable cornerstone companies in the global economy, eating markets far larger than the technology industry has historically been able to pursue.
Instead of constantly questioning their valuations, let's seek to understand how the new generation of technology companies are doing what they do, what the broader consequences are for businesses and the economy and what we can collectively do to expand the number of innovative new software companies created in the U.S. and around the world.

Thursday, 24 September 2015

Best free web design software: 10 programs to get the job done


Simple WYSIWYG (What You See Is What You Get) web design programs make creating basic sites as easy as using a word processor.
The next step up combines a WYSIWYG approach with more detailed low-level control of what you're doing, very useful when you're looking to create a more impressive site (although you may have to spend some time learning the basics).
There are plenty of high level applications aimed at the more experienced users, who like to be able to focus on the HTML, CSS or scripting code.
And of course you may also need tools to create your graphics, analyze the finished site and diagnose any problems.
Whatever you're looking for, though, we've found a free tool which can help - just keep reading to discover our pick of the best free software for web design.

1. CoffeeCup Free HTML Editor

Download CoffeeCup Free HTML Editor
CoffeeCup Free HTML Editor is the free version of a commercial product, and so missing a few tools (CSS menu design, FTP upload and so on).
If you're a beginner, though, this probably won't matter too much. You can use the Open From Web option to open an existing web page, for instance, and tweak this to add your own content.
CoffeeCup
There are plenty of powerful editing tools, a local Help file to walk you through the more complicated parts, and you can also upload your page to CoffeeCup's S-Drive platform, where it will host it for free.
------------------------------------------------------------------------------------------------

2. Notepad++

Download Notepad++
Notepad++ is an amazingly powerful source code editor with a vast number of features. Syntax highlighting makes it immediately easier to read and understand your code, for instance.
Code folding allows you to collapse some areas while you focus on others. Auto-completion helps you enter code more quickly (and accurately).
NotepadPlusPlus
There's also a powerful search tool, easy document navigation, bookmarking, macro support, and more, all of which is presented in a highly configurable, easy-to-use interface. Go grab a copy immediately.
------------------------------------------------------------------------------------------------

3. PageBreeze

Download PageBreeze
Experienced web designers won't be impressed by the PageBreeze - it's based on old technology, and distinctly short of features - but if you're just looking to create something very simple then it's a different story.
PageBreeze
This WYSIWYG editor comes with simple templates to help you get started (they're fairly ugly, but you can add your own later).
You can add links, images, tables and forms in a click or two. It's easy to see and edit all your site pages, and when you're done a built-in FTP client puts your work online. So while the end results may be basic, the program's simplicity makes it worth a look for the novice.
------------------------------------------------------------------------------------------------

4. Firebug

Download Firebug
You've designed your website, but it doesn't quite look or work as you'd expect - and that's where Firebug comes in. This powerful Firefox extension helps you to view HTML and CSS code; adjust your styles and see the results immediately; understand your page layouts; debug and log JavaScript; manage cookies, analyze page load times, examine error messages and more.
Firebug
Clearly there's a lot of power here, but Firebug isn't just for web experts. At first you might only use it for a few basic things, just viewing code perhaps. It'll still be very useful, though, and you can begin to explore other functions at your own pace.
------------------------------------------------------------------------------------------------

5. Bluefish Editor

Download Bluefish Editor
Bluefish is a programmer's editor which also includes plenty of web-related tools and options.
This starts with the usual editing tricks: syntax highlighting (ASP.NET, CSS, HTML, JavaScript, PHP and more are supported), code folding, powerful find and search and replace tools, autocompletion, and more.
Bluefish
The program also supports document templates; has wizards to add CSS, forms, tables, forms, audio and video objects; quick tag editing and easy previewing of the current document, amongst many other goodies.
------------------------------------------------------------------------------------------------

6. Brackets

Download Brackets
Brackets is an interesting open-source HTML, CSS and JavaScript-based code editor, created and maintained by Adobe.
The program deliberately avoids cluttering your workspace with floating toolbars and large icons, instead allowing you to work directly on your code, with plenty of shortcuts to help.
Brackets
Click in an HTML tag, say, press Ctrl+E and you'll see a Quick Edit box with any related CSS rules, just select the one you need and you'll be able to edit it right away.
It's just as easy to edit JavaScript code. And a Live Preview feature means that there's no need to refresh your browser each time to see the changes - they're updated right away.
Add the growing list of extensions and, while it's still early days, Brackets is looking like an interesting tool for experienced web developers.
------------------------------------------------------------------------------------------------

7. KompoZer

Download KompoZer
It's not been updated for some time, but KompoZer can still be a useful web editor for beginners. The program works like a simple word processor, so you don't have to know about HTML, CSS, scripting or anything else: just enter your text, format it, and click the various buttons to add links, insert tables, images and more.
KompoZer
If you're a little more experienced than KompoZer does have further tools which may help, including an HTML editor. The program is beginning to show its age, though, so more experienced web designers would probably be better off elsewhere.
------------------------------------------------------------------------------------------------

8. OpenBEXI

Download OpenBEXI
OpenBEXI is an interesting WYSIWYG HTML editor which allows you to create pages just by dragging and dropping "widgets" - everything from text, links and images, to forms, graphs and flowcharts - and tweaking them to suit your needs.
It's also possible to tweak CSS or add scripts to the page, and a built-in FTP client will upload everything when it's done.
OpenBEXI
While this sounds great, there are problems. It's easy to add objects to a page, for instance, but getting them to work as you'd like can take a little while.
The browser-based interface has some issues, and the need to use a server might confuse beginners, too. It's still a quality tool, but you'll need some PC (though not web design) experience to make the most of it.
------------------------------------------------------------------------------------------------

9. GIMP

Download GIMP
Every web designer needs great graphics tools, and GIMP is one of the best free image editors around. It has impressive photo retouching features, lots of useful special effects, a range of powerful paint tools and more.
GIMP
Strong colour management ensures your images always look at their best. Layer support helps you control which parts of your images are tweaked, and which remain untouched. And it's then easy to save your images for the web.
The interface isn't always the best, and with so many options GIMP can seem intimidating at first. Once you've learned the basics, though, you'll find there's very little the program can't do.
------------------------------------------------------------------------------------------------

10. BlueGriffon

Download BlueGriffon
BlueGriffon takes a straightforward WYSIWYG approach to web editing, but also manages to include plenty of more powerful features.
You could just use it to type text, insert images, tables, audio files, videos and so on. But there's also an SVG editor, form design tools, some CSS support, an accessibility checker, DOM Explorer, and more.
BlueGriffon
One annoying aspect of the program is that several options (even that manual) require commercial add-ons, which means clicking the wrong button will take you to the BlueGriffon site to find out more.
You soon learn which options are available, though, and on balance BlueGriffon is a capable and generally easy-to-use tool.

Sunday, 20 September 2015

COMMUNICATION IN ENGINEERING, SOFTWARE, AND OPEN-SOURCE

communication is about winning. Whenever you engage someone in communication, it is a competition. Who has the better story? Who can talk/write more? Who has the better code? And if you don't win, you lose.
False.
Fact: if you win a conversation, then you also lose. This is especially true when your conversation must accomplish some achievable goal.

Actionable discussion

Let's first define "actionable conversation" as that in which we are trying to achieve some explicit goal, whether to persuade someone of something or to find a solution to some problem.
Now, let's divide actionable conversation topics as one of two types:

Opinion vs opinion

The majority of the time, there is no right or wrong, only opinion and differing opinion. To consider yourself right here is to disregard the differing opinion as decidedly wrong. Be careful, doing this makes it difficult to ever grow and learn.

Fact (true vs false)

Then there are topics for which there is a right and wrong. Let's say you and I are arguing the solution to 1 + 1 = 2. You say it's 2, but I say it's 3. In a technical sense, you are right and I am wrong.
In the context of communication, though, what is the point of being right if you can't convince others, or help them to arrive at the correct conclusion with you? If you are arguing with me, then you've already deemed it worthwhile to convince me. Therefore, our conversation is not about being right, it's about convincing me that you're right. And in this regard, you may be right and still be wrong.
Furthermore, true/false is a zero-sum game; if you win, then I must have lost. And if I lost, then I must not be on the winning side with you. And if I'm not on the winning side with you, then you must not have thoroughly convinced me. Which means, in the context of the conversation at hand, you still lost.
This doesn't even address the effect "winning" has on your ability to engage me in future conversations.
The only way to actually win a conversation is to make sure we both win.
When arguing fact against someone's disregard for fact, the best thing you can do is this:
  1. Present your facts
  2. Listen to mine
  3. Acknowledge the validity of my side (even if I'm wrong, there must be some convincing reasoning behind it for me to disregard your facts)
  4. Leave it alone. This is called, picking your battles.
In other words, pick your battles.
The only winning conversation is the conversation in which everyone wins. In a game of Ego, the only winning move is not to play.

Persuasion

When trying to affect change, we often need to convince someone to help. There are entire books on the art of persuasion [1], so I won't delve deeply into the subject here. I will instead share one lesson I've learned the hard way: Once a person becomes defensive, the conversation is over.
Human intelligence is an interesting thing. We tell ourselves that we employ logic to arrive at conclusions. More often though, we use emotion to arrive at conclusions, and then we mold logic to justify them. Sometimes it's astounding how malleable logic can be. Once someone becomes emotionally attached to their idea, logic becomes irrelevant [2].
The lesson here is to avoid turning any conversation into an issue of right and wrong, because then it is a competition. Competition evokes emotion and entrenches people in opposition. Instead, consider every conversation as an opportunity for everyone involved to grow, learn, and develop together.

Communication and software / engineering

Bringing these concepts back around to software and engineering, every conversation should be viewed as an opportunity to increase the project's reliability and applicability. If you can increase everyone's understanding of the project, consider the dialogue a success. This is a subtle departure from the norm, where conversations are started to fix a project that is broken in some regard, or to explain why the other person is doing it wrong.
For example, don't submit a bug report with the mindset that "this code is bad, causing this bug in this situation." Instead, think, "here's an opportunity to make this code applicable for this situation." This simple change of perspective will come through in your communication and make it much easier for the recipient to react in a positive way.

Communicating with engineers

Enough of the mental voodoo; how do we actually communicate with other engineers?
Engineers and software developers tend to view ambiguity and verbosity as fluff that weakens the point and hurts credibility; we tend to be succinct. However, succinctness and efficiency can easily be perceived as assertiveness and aggressiveness, which can trigger defensiveness and effectively kill the conversation.
In the real world, to prevent others from becoming defensive, we soften our stance with "I think that...", or "I feel that...", and use other qualifying terms like, "maybe" or "perhaps". In the engineering and programming worlds, these can be downright annoying, especially in written form. So we must walk this line. We must learn to understand our situation, audience, and goal; tailoring our message accordingly.

Communication in open-source

Communication can be a barrier to progress from the perspectives of both the user and the maintainer of open-source software.

When submitting patches or bug reports (as a user)

When submitting a patch or bug report, realize that the project is someone's creation, the product of their time, work, and care. It's their baby. Their reward comes from others who use and benefit from their work (and the recognition that comes with it). Avoid telling them their baby is ugly.
Make it clear that you see this as an opportunity to improve their project. Avoid making demands which convey entitlement (e.g. "this is a serious bug that needs to be fixed now"). At the same time, don't powder your prose with disingenuous praise or flattery; this is tomfoolery, and engineers are sensitive to that. (We tend to be easily annoyed).

When responding to patches or bug reports (as a maintainer)

More importantly, to open-source authors: realize that the worst thing we can do is discourage people from submitting patches or starting and engaging in conversations about our projects.
We often receive bug reports where our first response is, "You're doing it wrong." This is discouraging to the submitter and potentially embarrassing. One technique I use in this situation is to assume that I've misunderstood the problem. In these situations, I start with some form of, "I don't think I understand the issue you're having," which leads into, "Could this be accomplished this other way instead?..."
Often this yields one of two outcomes:
  1. They read through my alternative solution and realize it does work. I usually get some response like, "Oh, you're right, I get it now, thank you!"
  2. Or they explain why my solution won't work. Now I understand their problem better, and can either pull in their code or start working on a solution.
In either scenario, we've both won. In the first scenario, I've helped them to grow and learn without embarrassment (a necessary part of a conducive learning environment). In the second scenario, I've learned the true nature of their problem by working with them, rather than assuming they were wrong and then having to backtrack -- embarrassing myself in the process.
In either case, I try to conclude by making it clear that their time and efforts are appreciated. Even if they were wrong, the fact is that some level of reasoning brought them to that conclusion. Chances are, others are on the same path. Also, they will now be able to apply the sort of reasoning you gave to their next issue.
Open-source authors, remember that people who submit patches to your projects are not saying that you're wrong or incompetent. If they believed that, they wouldn't use your project. You have the upper hand in this situation, so it is ultimately your responsibility to ease the tension.
Give every ticket the benefit of the doubt. Instead of immediately concluding that the other person is doing it wrong, assume you don't completely understand what they're trying to accomplish. This is an opportunity for everyone who sees the project, to grow.

Pulling in user-submitted patches

One last thing while I'm on the subject. If someone submits a patch that comes close to something you'd want in your open-source project, pull it in!
I've seen the following situation happen too often:
  1. Someone submits a patch (or pull-request) for some open-source project.
  2. One of the project's maintainers asks a couple questions about the patch.
  3. The maintainer doesn't like some aspect of the submitter's code, so they implement the solution themselves and then close the submitter's ticket.
I think one of the reasons this happens is that the maintainer has been on the other side of the fence (being the maintainer of a successful project), for so long, having responded to hundreds or thousands of questions, comments, and commits project. They've forgotten how rewarding it is for other developers to see just one of their patches or ideas incorporated.
The next time you find yourself about to do this, I propose a different approach. If their code requires numerous changes, politely ask them to make those changes, and resubmit the patch. To really encourage collaboration, provide them with some guidance or encourage them to further improve their solution.
Protip: On Github, they don't even need to submit a new pull request. They can make the necessary change(s), amend their last commit (`git commit --amend`) and then force push to their branch (`git push -f myrepo fixbranch`). The existing pull request will be magically updated.
If only minor changes are needed, such that it's not worth the effort of asking them to make said changes:
  1. merge in the submitter's patch
  2. make any necessary changes in a new commit
  3. push both commits to the public repo at once
If they submitted a patch, it shows they have invested the time and effort to fork your project, figure out your code, research and solve the issue, then make and test their changes. To see their work re-implemented and pulled into the codebase without recognition or thanks is demoralizing, if not altogether insulting.
I won't say I'm guilt-free of committing such atrocities myself. When I have made this sort of mistake, I've tried to make it abundantly clear why. I did this by assuring the submitter their work was appreciated and encouraging them to continue submitting patches and bug reports in the future.

Conclusion

Effective interpersonal communication can be difficult, but learning actionable techniques helps overcome common barriers that prevent progress and growth in open-source, software, engineering, and the world. Above all else, cultivate the habit to recognize how your communication is perceived by your audience in order to increase reception and make your message more effective. Likewise, learn to recognize when your own emotions are preventing you from being receptive to new ideas and possibilities.

TL;DR (too long; didn't read)

  • Communication is important.
  • All conversations should be seen as an opportunity to learn and grow, for all constituents.
  • Emotion trumps logic; avoid letting emotions enter technical conversations.
  • Once someone becomes defensive, the conversation is over.
  • Engineers like succinctness. This can be misconstrued as aggressive or rude; walk that line carefully.
  • Be courteous but clear when submitting patches or bug reports to open-source projects.
  • If someone submits a patch to your open-source project, don't dismiss their work by re-implementing their patch yourself.
  • NEVER discourage anyone from submitting patches or bug reports to your open-source project, or any other.
  • Effective communication is a skill worth improving, inside engineering and out.