I recently spoke at BOBKonf 2017 in Berlin, Germany. With my co-speaker, Peter Schuck, I reported on performance improvements to ClojureScript’s hash map data structure based on a paper by Michael Steindorfer and Jurgen Vinju.

Peter implemented the paper’s CHAMP algorithm in ClojureScript resulting in 2x performance improvements for iteration and 10–100x improvements for equality checking.

That means that equality checking using the CHAMP algorithm in ClojureScript improves by an order of magnitude in the worst case, when hash maps don’t share structure, and by two orders of magnitude in the case where hash maps share the same structure. Coming from a background in biological sciences, it’s rare to see such definitive results!

You can find our talk on BOB’s YouTube page, alongside the other presentations on topics as varied as computing Bayesian classifiers on…

As the spring semester winds down, I’ve been getting meeting requests from soon-to-be grads to discuss how to get that all-important first programming job. I find myself giving the same advice over and over … which means it’s probably time for a blog post. So, these are my inside tips on how to have an advantage when trying to land your first full-time gig.

Background: Why is it so Hard to Hire a Junior Programmer?

Most employers will want to spend significant time on-boarding and mentoring junior devs before considering them independent contributors. Though junior developers are needed and employers want to provide a strong foundation, that ramp up time is expensive.

It’s easier to invest in a junior candidate if they demonstrate that the on-boarding period is money well spent. Dedicated, curious juniors are priceless. As bootcamps continue to saturate the market for junior developers, junior candidates of all stripes are wise to differentiate themselves. Here are some tips on how to have an edge.

N.B.: You don’t have to follow all of these…

iOS App Extensions are a great way to let your users take advantage of your app’s functionality while not in your app. For example, you could add a Share Extension to allow users to quickly share a link from Safari via your social media app. Or, you could add an Action Extension to allow users of your note-taking app to annotate an article she was reading in another app.

There are many different types of extensions you could write (see this Apple Programming Guide for more examples), but we’ll limit ourselves to looking at the more general Action Extension.

I put together a short guide to creating the Extensions here.

Originally published at www.promptworks.com on March 5, 2017.

I’ve had archetypes on the brain lately.

Carl Jung defines these as universal, mythic patterns of human elements that are steeped in our culture, our religions, our art, our dreams. They appear to us autonomously and sometimes hidden away, buried deep inside us. Archetypes sit in our collective unconscious, residing there quietly until they surface to consciousness where we deduce their existence through consistent patterns of behavior and interactions.

Deduce… pfft! Carl should have sat in on my meetings, where archetypes routinely run amok.

Agile practitioners, it’s important to know who’s in your meetings. We deal with stories daily, we design grand plans and schemes, we take…

One advantage you often hear about with writing React Native applications is the ability to drop down into the native code whenever necessary.

At first, the thought of having to write native modules intimidated me, but as it turns out, it’s pretty simple. This post aims to de-mystify writing native modules and show how easy it can be with React Native.

On a recent client project at PromptWorks, we needed to be able to prevent the user from performing an action that would play a sound if their volume was not turned up high enough. …

We’ll learn what a “verified commit” is in Git, and how you can verify your commits in GitHub using keys from your Keybase.io account.

At PromptWorks, we love using Keybase.io to easily share encrypted data, manage our public keys, and verify our online identities. Learn how to do it yourself, here.

Originally published at www.promptworks.com on February 13, 2017.

Our solution to encrypt and securely retrieve environment variables for use in Docker on the AWS EC2 Container Service has been enormously popular. We just made it easier.

Storing and distributing runtime secrets continues to be an area of focus for the DevOps community. AWS Key Management Service used in conjunction with S3 and IAM offers a lightweight option and eliminates the need for an additional deployment dependency. To make it easier for developers, we decided to wrap it up into a CLI so you can instantly get the benefits without having to understand the intricacies of AWS KMS and IAM. Check it out on GitHub.

How to Use


1 git clone -o github https://github.com/promptworks/aws-secrets
2 cd aws-secrets && make install

Encrypting keys

1 aws-secrets-init-resources my-app-name
2 echo "export SECRET_KEY=xyzzy" > my-app-env
3 aws-secrets-send…

Check out the Flatiron School’s interview, “Promptworks CTO on How He Hires Developers Who ‘Get Things Done,’” with Mike Nicholaides, CTO and co-founder of PromptWorks.

Mike was asked about our hiring process, what it takes to be a developer at PromptWorks, and what you should know before entering the tech industry.

“We look for people who ‘get things done.’ In other words, we’re looking for those who have a balance of pragmatism and perfectionism. Doing great work for our clients takes both. We want people who strive to write beautiful, maintainable, easy-to-understand code, but can still take a ball of mud inherited from another development shop and slowly work it into something great.”

Read the rest here.

Hi. We’re PromptWorks. We believe that a strong…

User experience literature is ripe with discussion of trust. Your software should always aim to gain the trust of your users to build a sense of credibility. This very important principle improves usability and quality.

All of our interactions are, in some sense, rooted within a particular stratum of trust. We interact with the coffee shop barista in a very different way than we do with our spouse or a stranger on the street. I’ve got nothing against Denise at the local Starbucks, but I’m just not going to share my deepest emotions with her, and (hopefully) nor will she share hers with me.

This social interaction analogy, however, reveals a missing component in the discussion of trust as it relates to UX. It’s always described as one-way.

We as software designers and developers need…

As we begin 2017, we see an exciting year ahead. Software enthusiasts should anticipate changes in software development languages, frameworks and tools, data interchange, infrastructure, and culture.

This is your chance to gaze into our crystal ball for a sneak peek at where we see technology headed in 2017 and beyond.

Software development language trends

Elixir and Phoenix will mature and become more widely adopted

So far we’ve completed a handful of projects in Elixir, and we’re finding Elixir and Phoenix to be at least as productive as Ruby and Python web frameworks. While the ecosystem hasn’t yet fully matured, we believe that Elixir will surpass competitors soon enough. Ruby and Rails are still great tools and have maintained the productivity advantages over PHP or Java that caused us to adopt them a decade ago, but the future looks brighter for Elixir and Phoenix.

Erlang, and by extension Elixir, reigns supreme when it comes to developing concurrent systems, which means we can handle more requests…


Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store