πŸ›  These Software Development Tools Will Blow Your Mind

Photo by Ben White on Unsplash

For my final post of 2019, I thought I would deal with some serious FOMO1 by adding one of my own to the legions of year-end listicles adorned by clickbait headlines. You will not believe what's at number four! Nevermore shall I lament having passed up the opportunity to proffer a subjective collection of arbitrary length for your attention. Of what engrossing subject shall this list be? Life achievements? 11 places to visit before you die? Things I have discovered when looking for other things that I have lost? Nay, it shall be tools! Tools, I say. To be specific, development tools for it is tools of software development that I use often. To be even more specific, this is a list of development tools for each of which I could write an additional list of killer features, extensions, and magical whosywotsits. I present to you a list of feature packed fancies for fruitful software fabrication. How many tools? Read on to find out2.

Visual Studio Code
code.visualstudio.com

A screenshot of the Visual Studio Code environment, showing the Extensions Marketplace on the left and a JavaScript file being edited on the right, below which is shown a terminal panel indicating code has been successfully compiled. The editor is also showing an autocomplete list of possible syntax to insert. The bottom of the screen is a status bar showing additional information about the currently opened files.

This open source, cross platform, integrated development environment (IDE) backed by Microsoft really is the best I have used so far. With its built-in terminal, text editor, and task engine, it really is an integrated environment where, if it weren't for Slack and my web browser, I would spend all of my software crafting days. In fact, if I liked the extensions that integrated Slack and web browsing into Visual Studio Code, I could use it or them too; but I don't, so I don't.

Unlike IDE's of old, Visual Studio Code – often referred to as just VS Code or Code (it's command line invocation is the delightful code the-file-I-want-to-edit.js), is implemented to avoid having opinions about the code you write. Instead, it is written to support your code dictating how you write code so that you can deftly move between projects without worrying that the settings for one team will somehow traipse all over the settings for another.

If you like vim-style editors, there's a vim emulator. If you don't like the menus, use Zen Mode or go fullscreen. Want to run tests integrated in the sidebar or the test file itself? Do that. Want to run them from a terminal or via a background task? Do that instead. I could (and probably will) write a whole new list on the best extensions to use with Visual Studio Code. It is versatile enough that I believe any developer could make it the editor they need.

Why it is great for software developers?

Either natively or via an extension, Visual Studio Code supports just about every aspect of the software development lifecycle you might encounter, on every platform that likely matters (Windows, macOS, and Linux), using any workflow that suits you. Not to mention it gets feature updates monthly and is supported by a huge community of users. It takes a little DNA from editors like Atom, Sublime, and your basic text editor, and elevates them to something, well, sublimer3.

WordPress
wordpress.org

A screenshot of a web browser showing the WordPress admin screen for choosing a theme, with several themes previewed in a grid.

When concentrating on software development tools, it is really easy for me to overlook this one – probably because it is not a software development tool, at least not from first impressions. I use WordPress for this blog; I always have. There are many alternatives out there; some more technically involved than others. I know I could use markdown in a GitHub repository; I have heard of Jekyll and Gatsby and so many other ways to generate a site; I know about Medium, but for me, WordPress wins because it has the features I need, including wide support for hosting, accessibility, themes, plugins, and autonomy from the whimsy and money-grabbing aggregation platforms like Medium.

The recent updates to the core editing experience, known as Gutenberg, have been amazing and the regular updates that are auto-applied without me raising a finger keep adding polish to an already awesome experience. I can schedule posts, manage comments, and use plugins to add syntax highlighting, footnotes, multi-factor authentication, backups, and spam filtering, to name just a few. Just as with Visual Studio Code extensions, I could write another list of plugins that I love for WordPress.

35% of the web uses WordPress, from hobby blogs to the biggest news sites online.

https://wordpress.org/

WordPress is used by over a third of the web. A third! That includes this blog, almost every site that Ann Arbor Give Camp has worked on in the past few years, and rollingstone.com! If you are considering putting together any kind of website, whether a blog, or something else, I highly recommend this freely available platform that has more versatility than Meryl Streep.

Why it is great for software developers?

As I mentioned earlier, WordPress seems entirely unrelated to software development (unless you are writing themes and plugins for WordPress4). However, I have learned that writing a blog about ones technical exploits is an absolutely amazing software development tool. I never realised how much I could learn just by trying to teach someone else. I used to think a blog was about its readers and being right; I have come to learn that a blog is merely its writer, being. The act of writing a blog is where its value lies. Writing this blog identifies gaps in my knowledge, personal biases, and more. It can shine a light on my laziness, focus the my mind on a gnarly problem, and provide a scaffold from which to hang my personal growth. There are numerous times where writing posts for this blog (including some I never published) has helped me become a better software engineer. The fact that sometimes, someone reads it and finds it useful, entertaining, or infuriating is really just a bonus.

Write a blog. Hold an opinion. It is worth it.

GitHub
github.com

A screenshot of the GitHub organization's page on GitHub. The screen shows the GitHub logo (the octocat) and information including geographical location, URL, contact email, and several tabs giving more information about the organization's repositories, packages, people, and projects. The repositories tab is selected.

For some readers, this may seem a pointless entry. Using GitHub for collaborative software development is so incredibly common that suggesting folks should use it seems a bit like suggesting folks should try breathing air5. Though there are alternatives such as GitLab, GitKracken6, or BitBucket, GitHub is almost ubiquitous. I do not recall an open source project that I have interacted with recently that was not hosted on GitHub7. With the recent changes allowing private and public repositories for personal accounts, the addition of GitHub Actions for automating all kinds of workflows – free to open source, and some great improvements to code review that have been released or are in beta, GitHub is an absolutely fantastic tool for those developing software. Add to that the integrations with other tools that I use like Visual Studio Code, Slack, and third-party issue trackers such as Jira, and GitHub shines. Many feared that its acquisition by Microsoft would doom it to failure, yet the Microsoft of today is a wonderful curator of open source goodies, and it seems that we all get to reap the benefits.

Why it is great for software developers?

Free backup of your source code, code reviews, automated workflows, and more, all on a tried and tested platform with a huge community. Not only that, but if you want, you get to collaborate, build, and present work with that community8.

πŸ€·πŸ»β€β™‚οΈ That's it…

I don't know about you, but lists are exhausting. I've only written about three things and I'm already done with everything and ready for a lie down. I do stand by this list though. I really thought about what to put on it, considering the various tools I have used, not only because I have to, but because I want to. I would choose these tools from the very start of a new project unlike some others I use that, while I like them, are specific to a technology (such as React Developer Tools), are only what I use because the circumstances call for it, or are not really that standout against alternatives that I could be using.

Of course, this is all my personal opinion drawn from my personal experience; you have absolutely no obligation to agree with me. In fact, you have every right to use anything but the things I mentioned above, remaining in your state of willful ignorance, knowing you are wrong, unwilling to accept the truth as a way of life 😈. Just kidding, these are development tools, not religions – what works for you, works for you. These work for me. Perhaps you agree and want to pat me on the back from my excellent choices, maybe you care to tell me your preferred alternatives or shout at me about mine, or perhaps you read the footnotes and really have something to say about privilege, toxicity, and portfolios – feel free to engage in the comments; let's talk πŸ€—.

And with that, I bid you well until the πŸŽ†New Year and all the productive software shenanigans that await us in 2020. πŸ™‡πŸ»β€β™‚οΈ

  1. Fear Of Missing Out – a most annoying acronym, I find; why? no idea []
  2. it's three, three tools []
  3. don't you roll your eyes at me []
  4. PHP? Ew! []
  5. you really should, it is to die for []
  6. mention-worthy, if only for the pun []
  7. before GitHub, it was SourceForge, before the DevShare debacle – https://en.wikipedia.org/wiki/SourceForge []
  8. Side Note: I think it is perfectly fine not to have a portfolio; some of the best developers I know do not have any public source, or fancy stuff to show off. This weird obsession some folks have with portfolios feels like another toxic manifestation of privilege in the software development world, and I don't care for it. Let's share what we want (and are able) to share, and accept that if we don't, that doesn't mean we're shit developers. πŸ’™ []

Why software bugs exist and how you can help

Numbers in software development are represented by fixed size variables represented in binary. These are usually 8, 16, 32 or 64 bits (each bit representsΒ a 1 or a 0). When we develop software, we choose which of these will provide enough space for the thing we are representing.

Recently, the Gangnam Style video on YouTube surpassedΒ 2,147,483,647 views and it appeared as though the view counter broke. That number is significant because it is the upper limit of a 32-bit signed integer. It turns out that the video view countΒ was being representedΒ usingΒ a 32-bit signed integer β€” a signed value1Β can represent whole numbers in the range -2,147,483,648 through 2,147,483,647; it cannot represent any number outside that range.

Though, according to YouTube, this turned out to be an Easter egg2, the bug was there before they updated the counter to 64-bitΒ andΒ it certainly is not the first time a number has pushed the limits. For example, the use of two digits to represent a year that contributedΒ to the infamous fizzle that was Y2K.

But why? Why are there bugs at all?

Although it may seem like software bugs are there just to ruin your day, they were not intentionally put there or maliciously inserted to give you a reason to "Office Space" your device. As software engineers we have to consider a variety of constraints on the software we are developing. How much space does it need to run? How much space will there be on the deviceΒ on which it is to run? How fast does it have to be? Β How many years will the software be in use3? What other software will be running? AndΒ we have deadlines by which our work has to be completed. In fact, software engineersΒ tend to consider a whole host of things such as the requirements of theΒ software (functional, spatial, and temporal4), the specification of the system on which it is to execute, project deadlines and budgets, and the expectations of the end user.

Almost always, there has to be compromise. Even though aΒ solution might be possible that accommodates all considerations, we have to deliver software in a time frame that people will pay for and some things just take too long or cost too much. That is not to say that all software bugs are because of time and money, some exist because of mistakes and as a consequence of poor design.

What does it all mean?

Software engineers like myself do not want you to encounter bugs. We work very hard andΒ theΒ QA teams work very hard to ensure that you do not get buggy software; if we see a problem, we do what we can to address it. To find these bugs, we tryΒ to consider all the ways our software might be used and test them. Unfortunately, most bugs doΒ notΒ advertise their existence quite so obviously or politely as YouTube's view counter bug. For example, when in comes to the infinite ways any one device might be configured with different peripherals and apps installed, we just cannot test them all; the system is too complex5.

Β Good developers welcome user feedback. We need your help.

Next time you encounter a bug in the software you use, whether it is a mobile app, a website, an ATM, a desktop application, or some other device, spare a thought for the software engineers. Remember, good developers welcome user feedback. Take a moment to tell themΒ or the publishers of the software about the problem.

  • What did you type, touch, or click?
  • What else was running on your device?
  • What part of the software were you in?
  • What Internet browser orΒ operating system were you running?
  • What versions?

Be as detailed as you can. All these details and more can help a software engineer track down, reproduce and ultimately fix that bug.

There is no malice in a software bug. It was not put there specifically to ruin your day. However, without your help, it will not go away. So, reach out to the developers and tell them, they will thank you for it.

Today's featured image is based on Software Bugs byΒ Martin Maciaszek.

  1. signed means it can be positive or negative []
  2. An Easter Egg is a hidden feature often added to software as an amusementΒ for users who find it. Examples include the "barrel roll" in Google or the flight simulator in Excel []
  3. Underestimation of this was a big contributor to Y2K []
  4. i.e. how it works, what space it needs, and how long it takes to run and for how long it has to run []
  5. That's a discussion for another time []

CodeMash 2.0.1.4

Adventure

It is almost nine years since I first set foot in the US. It was through that experience that I rediscovered the joy in challenging myself and embracing change, something I had not so strongly felt since I first started singing in a band. So, while I had faced challenges before as a result of my own decisions, none had been bigger. Even though the opportunity had been provided by someone else, it had been my choice to take it and to see it through1.

It took me a while to settle in to my new home (or even to acknowledge it as home), but I eventually joined the developer community in Ann Arbor and the wider mid-west region. The interaction with other developers has continued to provide challenging opportunities and encourage positive change within my career, as well other aspects of my life. It was through the basic act of attending one local Ann Arbor .NET Developers Group meeting and the people I met there that I learned about CodeMash.

CodeMash

CodeMash v2.0.1.4 logo
 
The CodeMash conference – a community-organizedΒ event held annually in Sandusky, Ohio – never fails to provide unique experiences or challenges. My first CodeMash, CodeMash v2.0.1.2 was unique because I had never attended a developer conference before (or any other conference), and CodeMash v2.0.1.3 provided a completely new experience when, after attending a fantastic workshop on public speaking, I went on to win the PechaKucha contest.

This year, I wasΒ guaranteed yet another unique experienceΒ when I was accepted to be a speaker. I am extremely grateful to friends, mentors and othersΒ for their support and encouragement leading up to speaking at CodeMash v2.0.14. It was a wonderful honor that I thoroughly enjoyed, and while it changed my CodeMash experience with the added anxiety of speaking and subsequent release when my session ended, I would definitely do it again if the chance arose.

ToΒ those that attended my talk on AngularJS for XAML developers, thank you. I Β hope that you found it valuable. If you were there or if you have an interest, you can find my slide deck and code on GitHub (Deck|Code).

I am very grateful to the volunteers that organize and run CodeMash each year, as well as the many friends and mentors that have guided my own CodeMash experiences and the many other experiences within the developer community. Without these people, I would not have had such amazing opportunities, nor would I have learned how important it is to challenge myself and strive for new experiences. It is always uncomfortable to embrace change, but the rewardsΒ of doing so are often worth the pain.

To close, I encourage you to challenge yourself this year. Make sure to let me know in the comments below how you will challenge yourself and perhaps we can follow-up at the end of the year.

  1. Of course, there were many times in the weeks between being offered the position and setting foot in the US when I considered changing my mind, including just after the plane doors closed []

How I got started with computers

I, like many others, enjoy the ramblings of Scott Hanselman. Recently, Scott posted a blog on how he got started in computers and programming and I thought I'd share my own story of getting started.

Domesday

It all began in the distant past (don't worry, the story isn't as long as it sounds) when I was at primary school (elementary school for those Americans reading). We were very fortunate in the UK during the 80s; the BBC was working hard to promote computer literacy. This culminated in a number of things, most notable (at least for this story) were the BBC Domesday Project and the BBC Micro.

The Domesday Project was a partnership between the BBC, Acorn Computers and various others to mark the 900th anniversary of the original Domesday Book, an 11th century census of England. It resulted in our school library having a laserdisc that gave us an unprecedented interactive view of the country.

The BBC Micro was the computing platform that formed a part of the Domesday Project and my formative programming experience thanks to the BBC's efforts to get one in every primary school in the UK.

A Domesday system at the Vintage Computer Festival 2010, Bletchley, UK
A Domesday system at the Vintage Computer Festival 2010, Bletchley, UK

We have lift-off!

It was a year or so after the Domesday Project had visited our school library. A BBC Micro sat conspicuously in my classroom day after day. I don't remember exactly how it started, but at some point I went from playing educational games on it to writing small programs in BASIC. I suspect it had a lot to do with a very inspirational teacher I had (Mr. Garbutt, I believe). He read fascinating books to us, he played guitar to us, he had us writing and remembering poetry and eventually, he had me writing software.

It was towards the end of my final year, shortly before my leap to high school, when I created my most elaborate program yet. It was a picture of a space shuttle complete with scaffold and a car with stickman owner for scale. It even had NASA written down the side (for someone who still struggled with some geometry at age 10, I am impressed with myself for rotating those letters). The program itself was more a feat of effort than it was of programming ingenuity; it was several hundred lines of MOVE and DRAW commands. However, that effort earned me a Β£10 book token and a printout of the drawing and the code used to create it. The printout has since been lost, but the book I purchased has journeyed with me and sits in my bookcase at home, inside it is taped the card that had contained the prize.

The book I purchased with my prize
The book I purchased with my prize

Inscription that accompanied my book token
Inscription that accompanied my book token

The Theory of Relativity

If it were not for the support and sacrifices of my family, that may well have been that. I would have left primary school and perhaps programming, behind. However, my parents recognized my interest and bought a home computer. It was a Tatung Einstein, a little known microcomputer and it was perfect for me to while away hours at home gaming and coding (now I come to think of it, this may be how I got my start with videogames too).

I wrote a whole host of programs for my Einstein including electronic versions of "choose your own adventure" books, an electronic Beatles album and a timetable manager for me and my classmates to use for who knows what. I even remember using the Einstein for our stall at a school business fair (I seem to recall it was some sort of murder mystery thing though I don't remember for sure).

Tatung Einstein and monitor
Tatung Einstein and monitor

Friend and Family

As my Tatung Einstein started to suffer from technical problems I set my sights on something grander; a Commodore Amiga 500. My parents sold our piano to afford this computer, much to the chagrin of my sister (and probably my piano teacher, although I'd already found my lack of talent by then). Meanwhile, at school I gained access to a 286 PC and an Apple Macintosh. The former was part of my science work and often included some lunchtime visits to Sid Meier's Civilisation with a very supportive science teacher, Dr. Stec; the latter helped me to write legible schoolwork for various classes (thanks, Mr. Simpson), assist in the publication of the school newspaper and learn about e-mail for the first time.

An Amiga 500 computer system, with 1084S RGB monitor and second A1010 floppy disk drive
An Amiga 500 computer system, with 1084S RGB monitor and second A1010 floppy disk drive (Β© Bill Bertram 2006)

And The Rest Is History

By the time I finished high school, my career aspirations were set and I headed off to get a degree in Computer Systems Engineering leading to my job as a software engineer. Along the way, I've had the opportunity to work with some amazing people on some great projects in some diverse circumstances and I owe it all to the opportunities I was given by the BBC, my schools, my teachers and my family. I will always be grateful for their support and the sacrifices that were made so that I could follow my ambitions.