Social Media Etiquette

Social Media

Today, social media is increasingly being used as a tool for marketing and advertising. However, if done poorly, you run the risk of tarnishing your brand and being viewed as a spammer. Here are a few simple etiquette rules for social media.

Avoid Follow/Unfollow

Today, I was notified that I had a new follower on Instagram. After seeing that it was a local business, I decided to follow back. Trying to develop relationships with local businesses is an important aspect of my social media efforts. It wasn’t until a few hours later that I had an opportunity to visit their Instagram page. But when I did, I noticed that they had already unfollowed me. They had no actual interest in my content or in developing a relationship – they simply wanted to show me their products. This isn’t much different from spamming and does not present a positive view of your organization.

Create Content Not Advertisements

People are unlikely to follow you on social media to see what you have on sale this week. People want to see your personality, what your business stands for, and who you are. Of course, all businesses will occasionally create content that advertises their goods and services, but if that’s all you do, expect to be unfollowed. Social media is for growing communities – not a new tool to spam me with ads.

Stop Nagging Me About Services

On LinkedIn, in particular, this is common. Someone friends you and – wanting to grow your own circle of connections – you accept. Then, you get a private message about the services they offer. Viewing it for what it is – spam – you ignore the message. A week later, another message. Then a month later, a message asking if you got the previous message. Yes, I got them all. I chose to ignore them because I wasn’t interested in your product at this time. Additionally, I now am distrustful of you as I see you too are a spammer.

Like/Know/Trust

Want to develop your social media the right way? Use the like/know/trust model. First, users like you. They see your posts, enjoy your photos, laugh at your jokes. After a while, users feel that they know you. The’ve seen your stuff, they know what you stand for, and they feel that they understand you and your company. Finally, users trust you. They have seen you in action and know you’re knot a spammer. They recognize that you provide valuable content they want. They know you’re someone they could reach out to if they need your services. That’s the formula for success. You develop community and relationships, and people see you as a valuable asset instead of a spammer.

Do Unto Others

The golden rule applies to social media just as it does anywhere else. When you’re engaging in social media efforts, ask yourself how you would view another business if they used the same tactics. If it’s not favorable, don’t do it.

A Programmer’s Purpose

Today, it’s becoming increasingly popular for programers to be ‘opinionated’. In the software world, to be ‘opinionated’ means to believe your way is the right way. Other ways are wrong, and your way is right. There’s nothing wrong with having a preference, but the truth is that there is little room for opinion in software engineering. Software projects need to meet requirements such as budget, programmers available for maintenance, stability, etc. Championing a new language or framework may be fun, but when you leave, are there other developers available to support the project? Even if your preferred framework is better, it’s of no concern to a client when the language dies for lack of users and they have to pay to have the application rewritten.

A computer science student I know is all about Julia. Honestly, I’ve never met a single Julia developer or even seen a line of code in that language. On the list of popular languages, it’s not even a blip on the radar. However, this student insists that Julia is the way of the future. I’m not sure where he’s hoping to find work, but it won’t be in the local area. I remember the same thing when Scala came out. Every video I saw spent half their time attacking Java development. As above, I know absolutely no projects written Scala nor do I know any local companies either using it or planning to.

How should we select frameworks and languages?

The answer is actually pretty simple. Commercial software development has one purpose – to support some business use case. As such, frameworks must be chosen to support commercial business. What things make a language or framework commercially viable? It should be stable, have tools available to support commercial usage, and be widely used such that new developers can easily be found in the future. Additionally, it should have adequate resources available to help when you get stuck.

Commercial application development is no place for experimenting with new frameworks or basing your decision on an opinion about what is better. Find commercially viable frameworks and save yourself the hassle of supporting your new framework that may be dead in a year.  A programmer’s purpose it to write commercially viable software – period.

Apple’s Corporate Problem

Anybody who’s ever worked for any business knows that Windows PCs are the norm. Sure, there are always a few Macs to be found in the marketing department or with people who work with graphics, but the bulk of business computers are PCs. It’s easy to point out reasons why that’s the case. For instance, PCs are substantially cheaper than Macs (although many Mac users would be quick to point out that you get what you pay for). But one of the bigger problems I see is how incredibly business hostile Macs are. Let me give you a some examples of problems I have with one of my clients. Like most organizations, they are predominately Windows. However, they have a few Macs that are used exclusively for multimedia. And they work great – until it’s time to upgrade the OS. You can’t upgrade a Mac without an AppleID. Of course, the customer has no real reason to setup an account with an AppleID, but you have no choice. As several different people use the computer, nobody is going to use their AppleID for the machine and since all users need to share documents, settings, etc, multiple accounts are out of the question. Now, that leaves only one option – creating a bogus AppleID just to upgrade the computer. And, as Apple demands a phone number to setup for Two Step Authentication, some user will need to be the primary point-of-contact for any issues that require authenticating by that AppleID. Not to mention that information must be fabricated for the imaginary user and logged somewhere – including answers to security questions that make no sense in that instance. This is all easy compared to the fun of trying to create a developer account for a business. Not only do you have to go through all the above hassle, you also need to setup an Apple device for Two Factor Authentication. Sending a message to a phone number isn’t enough, you must have an apple device connected to the account. None of this was a big deal until recently – when Apple said that the person responsible for an apps content must have their own AppleID. Previously, someone else – with an AppleID took care of everything. Now, we have to find another Apple device to setup for their 2FA. For a client who is already Mac-shy, this does nothing but confirm their PC bias.

My message to Apple: Find a better way. You may do a great job with individuals, but your policies are a disaster in the business world.

Title Inflation

My first job as a computer programmer was for a small software company. Our tech department consisted of only a handful of people. I functioned as developer, QA, tech support, and network administrator. When I left, we had three programmers. As the person with the most time in the organization, I had the title ‘Senior Developer’. At the time, it sounded great. However, it would be more than a decade before I would have another title suggesting my status as a more senior level engineer.

During the last few months, it has become apparent to me that title inflation has really gotten out of hand. I read an article last week that Javascript Developers want to be called UX Engineers instead. The bulk of programmers are not great at interface design – developers use logic, interface designers use feeling. It’s a left brain/right brain thing, and few people are actually great at both.

Likewise, everyone wants to be a Full Stack Engineer today. Sure, plenty of people can do all parts of a project – from the HTML frontend to the backend and the database. However, very few are actually experts at all of the above. Most Full Stack Engineers are really just jack-of-all-trade sorts who have not mastered any particular part of the process.

I see even more title inflation when I look at small business owners. Everyone is a Founder or CEO – yet few, if any, of them have employees or revenue to command such a lofty title.  Or better yet, people claiming the title Director of some department or another yet having nobody underneath them. You’re only fooling yourself.

What have I learned from all this? Titles are meaningless. What really matters is what a person has accomplished. If you had to prove to someone that your title was appropriate, could you do so? On your resume, can you provide several bullet points to validate your title? If you cannot, you will be disappointed when the next organization you work for gives you a title inline with your actual skills.

Hack Day

In December, I participated in the MLH Local Hack Day. Hack Day is an opportunity for tech nerds of various disciplines to get together and collaborate on projects or to simply attend lectures presented by various people and organizations.

During Hack Day, I was invited to speak to the students of our local tech school – South Hills School of Business and Technology – about my experiences as a programmer and an entrepreneur. One of the topics of my presentation was advice for aspiring developers.  Below is some of the advice I gave.

Never stop learning.  The people who get ahead in life are those who are educated. They read daily. They are always learning the skills needed for tomorrow’s workplace. Those who are left behind – particularly in tech – are those who have antiquated skills.

Shut the TV off. At the end of your life, you will never look back and say “I wish I had watched more television”. TV can provide entertainment, but it will never help us achieve our goals. In fact, TV will derail our goals and dreams by preventing us from acting to achieve them.

Learn Linux. It’s sad the number of techies out there that don’t know their way around a Linux server. Given the number of things that run Linux such as Android, Docker, AWS, and Google Cloud; knowledge of Linux is crucial to your tech career. If you’re stuck in a Windows-only world, it’s time to diversify!

Master JavaScript. Like it or not, JavaScript is becoming the dominant language of development. Not only is JavaScript the defacto language of the web, it is increasingly being used for server side development (Node), build automation (Grunt), robotics (Johnny5), and has become the standard language for passing data between systems (JSON).

Master Web Development. Along with the growth of JavaScript, web technologies are exploding too. Cordova and Ionic allow web technologies to be used to create mobile applications and Electron allows JavaScript to be used for cross-platform desktop applications.

Write Code Daily. A weight lifter gets stronger by lifting weights. A runner gets faster by running. A coder gets better by coding. Reading books is great, watching videos is cool too. But if you want to write better code, get in the habit of writing code every day.

This is just a short list of the advice I provided. Nonetheless, it’s a pretty solid checklist to start down the path to becoming an expert software engineer.

Know Your Numbers

As a US based tech company, if someone were to ask which language we would use to be able to communicate with the most people around the world, “English” would probably be the expected answer. While English is second only to Mandarin Chinese (the most spoken language in the world), communicating nonverbally through science, technology, engineering, and mathematics (STEM) would serve as a more universally effective method. Regardless of whether the person on the other end of the conversation can speak the same language, anyone can relate through numbers.

In business, numbers are considerably more important. From margins to revenue and analytics, companies live and die by their numbers. Some of my favorite businesses have closed, not due to a lack of quality in their product or service, but because they failed to understand how to properly manage and utilize numbers. Sadly enough, companies with millions of dollars in revenue can still have little to no profit. Likewise, companies can often easily fail to deliver on the value proposition of their product or service.

As I continue to help Talixa develop and grow through refining our business processes and my own social media processes (specifically twitter for the time being), I constantly am looking to see what the numbers can tell me. Experimenting is one of the best ways to learn, because it leads to a wider range of experience. Individuals, businesses, and organizations can develop and grow simply by taking action upon an understanding that numbers are a priority.

Looking for advice based on anything I’ve said? I’m happy to give it, free of charge. Reach out using any of these methods:

DM Talixa on Twitter: twitter.com/TalixaSoftware
Message Nick on LinkedIn: linkedin.com/in/nick-gordon
Email Nick: nick@talixa.com

Limit[ed/less]

Over time, there is an infinitely small likelihood that I would be capable of talking about this blog individually to everyone who will ever be interested and invested in the content. As more content meets more people, time would inevitably run out. Fortunately, with the help of technology, here we are. The limitations of the internet are not the same as the limitations of my mouth, and building upon this foundation brings some game changing ideas.

While the internet provides much better potential to reach more eyes and ears, nobody wants to give up the benefits of using their mouth to speak. Nobody wants to upload their entire life to YouTube either. If humanity would become incapable of speaking, however, the way we think about even the smallest aspects of everyday life would change, similar to how the internet has impacted how we interact with the world. This leads into what we can learn  and apply to tech and business.

Regardless of individual circumstances, people have areas where they are presumably limited more or less than others. For instance, the fact that I am 6’4″ implies that my height is much less limited than most. But how would things change if we alter the conditions? You might be pleasantly surprised at the result if you consider questions like this in a variety of circumstances.

When applying this thinking to finances and business growth, the effect becomes clear. Say a business operates on $200,000 per year. What would be done differently (and why?) if the business had an annual operating budget of $100,000? How about $400,000? Putting businesses into these hypothetical situations will inevitably help foster a mindset of growth by overcoming presumed limitations in a practical way.

Circumstances will certainly change over time, for better or worse. By asking these questions now, you can gain a better understanding of why you might choose to take one course of action over another. Hopefully this entire process will help you more adequately prepare for your next big decision. After all, with preparation and execution people develop and grow.

Microsoft AppCenter

Several years ago, I needed to find a way to distribute mobile applications to test users. Ideally, the solution should allow for anyone to access the test application. This would include internal users as well as key stakeholders within the client organization. The distribution channel should support Android apps as well as iOS and, optimally, any other application type I would like to deploy. After searching, I found HockeyApp. What an amazing tool HockeyApp was. Not only did it meet those requirements, but it also allowed for integration of their API to include advanced features. For years, I used HockeyApp without issue. Apps are built by my automated build platform, pushed to HockeyApp, and users are notified of new test versions.

Fast forward to today, and HockeyApp is now owned by Microsoft and being moved to AppCenter. To be honest, I’ve never been much of a Microsoft fan. I could point to countless reasons such as lack of good native development tools, poor support for scripting or automation, their hatred of Linux (even calling a cancer), Internet Explorer which worked differently from every other browser for developers, and now I can add their horrible transition to AppCenter to the list.

Today, I received a notification from Google that one of my apps was removed from the store. It appears to be a mistake on their end, but I need to verify and respond to Google. So, I uninstall the copy of the app from my phone and go to AppCenter to download the app onto my phone. The first thing I notice is that I have multiple copies of the app but none of them are tagged with the appropriate build type. I can’t tell free version from paid version or beta version or anything else – just a bunch of apps with the same name. After clicking on the individual versions, I find out that none of them are available for me to download. After digging around, it appears I need to release the app to a distribution group. It had been setup properly for years, but now it’s broken. So, I go to the website to check the distribution groups. Guess what? There is no way to change them in AppCenter. I can see that I have a few groups, but I can’t even tell who is in them. So, to fix the problem, I will need to go to every single app I have (a total of 28), add them to a new distribution group (with unknown members), and rerelease them (generating 28 emails to each member of an unknown distribution group). What a horrible experience for both me and my team members. As a small business owner, I don’t have the time to waste to make all the necessary changes, updates, reconfiguration of continuous development pipelines, etc. What an absolute nightmare.

Maybe my experience will be better once I get everything transitioned to AppCenter. Perhaps these are just short-term growing pains. Regardless, this is just another example of why developers have always been skeptical of Microsoft – and another reason I’m glad I use Bitbucket instead of GitHub.

Language Popularity

A subject that repeatedly comes up on websites, blogs, and conversations is which language is the most popular and which ones are the best to learn for future job opportunities. I keep an eye on this list myself as it’s important to understand trends within the software industry. However, people seem to ignore the most important aspect of language popularity – the context.

What do I mean by context? I mean we have to look deeper to understand why a language is as popular as it is. We also need to understand the market for a language and how that impacts popularity. For example, JavaScript is always near the top on any language popularity chart. Is it any coincidence that JavaScript is also the only front-end scripting language in use today? Whether or not you like JavaScript is utterly inconsequential. If you want a website with any manner of front-end scripting, you will use JavaScript. Likewise, if you want to interact with a database you use SQL and if you want a web page, it will be HTML. As such, these technologies will always rank more highly than those with a smaller market.

So what about Python? Everywhere you look, you see that Python is at the top of the list. Should we all switch to Python? Not really. What all those rankings fail to point out is the user base for Python. Certainly there are all kinds of production projects out there running Python. But if you look around, you see that Python’s popularity is largely caused by people outside the traditional developer community. AI researchers, academics, data scientists, system administrators, makers, etc. For non-programmers, Python is easy and incredibly powerful. But that hardly makes Python superior to other languages nor does it suggest that professional programmers should start porting their eCommerce sites.

Remember, while rankings of popularity may help you see trends, look to the underlying reasons. Why is it popular? Who is it popular with? Does this language look poised to overtake in other realms? When picking a language for a problem, the most important question is which language solves the problem best – not which language is the most popular.

AI Resources

Today, there are countless AI products and resources available for the developer. I’d like to review a few of the resources I’ve used.

AIFH

The first resource on my list is AI For Humans (AIFH) by Jeff Heaton. Of all the books on programming artificial intelligence, his books are by far the best. Written without any heavy math, Jeff’s books explain just about everything you could want to know about artificial intelligence. Additionally, Jeff has his own framework called ENCOG which can be used in Java, or can be run as a standalone GUI for development. Of all the resources I’ve used to date, this is without hesitation the best.

AWS DeepLens

I was recently sent an AWS DeepLens by a client for an artificial intelligence project. It’s always exciting to receive hardware from a client, so I was certainly looking forward to this! Unfortunately, my experience with it has been a bit less exciting. For starters, I’m stuck trying to figure out what exactly the purpose of this box is. Am I to use this to learn artificial intelligence? Is this box intended to be embedded within a product? I have absolutely no idea. While the DeepLens is a neat toy, the setup is far from simple. An internet connection to AWS is needed, certificates need installed on your machine, and everything is configured through your Amazon account. Even worse, the service does not appear to be free. (Note, you do get one free year on AWS, but after that you pay for the service. After that, I have no idea what it costs to run the DeepLens, but I’ve noticed warnings about costs associated with some actions). I applaud Amazon for trying to bring deep learning to the masses, but I think this product is a dud.

DL4J

DeepLearning4Java (DL4J) is a Java library for deep learning AI. Written by SkyMind, DL4J is one of the most well-known AI libraries for Java. With the earlier versions of DL4J, the user would have to install various native libraries such as ND4J (N-Dimensional Arrays 4 Java). This proved to be more difficult than it sounds as various libraries were dependent on other libraries, documentation was scarce, and error messages were cryptic at best. Fortunately, with the 1.X version of DL4J, the install process is streamlined to sampling cloning a repository and running a maven build. Native libraries are managed within the maven build, saving users the trouble from earlier versions. With these changes, DL4J is an excellent framework I would recommend for any AI project.