I use the Microsoft Sculpt ergonomic keyboard. Since it’s made by Microsoft, it has keys laid out for Windows. Left of the spacebar you have Alt, Windows, and Control, whereas a typical Mac user would expect Command, Option, Control. The names don’t match, nor does the functionality.

To reset the keys to work using typical Mac keyboard muscle memory, one would go into System Preferences -> Keyboard -> Modifier Keys -> Microsoft 2.4Ghz Transeiver vX.0 and swap Command and Option.

However, when Apple updated OS X to 10.11.2 they broke the keyboard modifier key settings in System Preferences. They no longer persist between sessions. If I unplug the transeiver, the keys are reset.

I did my duty and filed a radar, please go and submit a similar one if you’re running into this issue as well.

I got tired of resetting it each time I plugged my Mac into my display with the transeiver plugged into it. So I used Karabiner, a great tool for key remapping, to swap the two.

If you’re in a similar situation, here’s how you do it:

  1. Download and install Karabiner. It works on a low level, and will ask you for potentially scary permissions. But it’s a pretty commonly used tool, well supported, and well regarded by Mac power users.

  2. Open the ‘private.xml’ file to enter your custom key remapping. You can find the ‘private.xml’ file by choosing the Misc & Uninstall tab.

  3. Add the keyboard definition and the two items included below. Your entire file should look similar to:

<?xml version="1.0"?>



    <name>Remap Sculpt Alt to Command</name>
    <appendix>This maps the Microsoft Sculpt's ALT Key to Command.</appendix>




    <name>Remap Sculpt Windows to Option</name>
    <appendix>This maps the Microsoft Sculpt's Windows Key to Option.</appendix>





  1. Open Karabiner again to the main ‘Change Key’ tab and tap ‘Reload XML’, you will now be presented with two options at the top (the two items we just added to Karabiner’s options).

  2. Enable both options, go and test that it works

  3. Move on happily knowing that you won’t have to wait for Apple to release an update to fix this obscure bug

I’ve spent the past 10 years in education. Two years in Uruguay co-teaching small groups and large congregations with living conditions well beneath the poverty line. Five years in public secondary education with 35-40 student teenagers. And the past six months working with adults at a software development bootcamp in Utah.

I’ve seen many learning environments: Groups of all sizes. Students from all backgrounds. Teachers with all kinds of experience. Learning environments of all types.

In all of these different scenarios, I’ve found two essential ingredients for high-level learning:

Both the teacher and the learner must have a clear understanding of what the learner should know, and what he/she actually knows.

The teacher needs to know what to teach. The learner must know what she is trying to learn. Both should know when that learning has occurred.

Missing this ingredient causes learning to break down in 3 ways. The teacher works toward the wrong goal. The learner ends up distracted, discouraged, or bored. Both end up disappointed with the unsuccessful results.

Assessment is required. It can be formal or informal, but the teacher and the learner need to know what is missing. Great assessments don’t summarize achievement, they drive instruction. Great teachers use assessment data to direct the next learning opportunity.

Teachers and learners must be working towards the same goal.

The learner needs a willing and able mentor to bridge that gap.

Sometimes this mentor is the teacher. Unfortunately, one teacher doesn’t scale beyond a very small group. This is why people complain about large classroom sizes. This is why MOOCs don’t work. This is why a teacher can’t just regurgitate the same Powerpoint presentation for a decade and expect great outcomes.

In the most successful learning environments, a specific mentor works with individuals or very small groups. A great mentor knows what the student can do (assessment), where the student is headed (objective), and how to guide him there (teaching).

What This Means for Teachers

A teacher’s job is not to stand in front of a group and deliver content.

A teacher’s job is to craft a learning environment with clear learning targets, positive learning activities, reliable assessments, and mindful mentorship interactions.

It works in small groups and large groups. It works with students from all backgrounds. And it works in every learning environment. No one is excluded or excused.

What This Means for Learners

Learning is not a passive activity.

A learner’s job is to find an opportunity where teachers set clear learning targets, create positive learning activities, use reliable assessments, and fosters mindful mentorship interactions.

Furthermore, a learner’s job is to understand those expectations, participate in positive learning activities, self-assess progress, and foster mentor relationships.

A Two Way Street

I believe in the learning process. It is an essential element of a happy and successful life. We can all benefit from understanding how we can teach and learn better.

If you’re a teacher or a learner, consider the two essential ingredients to a positive learning experience. Make them an integral part of that experience. Do it, and I guarantee a positive outcome. Both teacher and student will leave better for the effort.

I’m Caleb Hicks, a 27 year old junior high teacher out of Utah. I’ve been a DevMountain student for the past 10 weeks, here’s what I’ve learned.

A Non-technical Junior High Teacher

I’ve been playing with technology for 20 years. I graduated from Game Boys, home-built PCs, and Geocities sites to smartphones, a Macbook Pro, and Wordpress sites. I read TechCrunch, The Verge, and am a seasoned Twitter user. I’m the guy everyone turns to when technology fails them. Sound familiar?

So to say I’m entirely non-technical may be unfair. It just depends on the context. Neighborhood barbecue? Technical. Startup Weekend? Non-technical.

Why a Coding Bootcamp?

My high school C++ teacher took a new job right as we started digging in. I had done really well in the class, but the program was shut down shortly afterwards. Without a teacher or mentor to continue learning from, my interests shifted elsewhere.

I sometimes wonder how my life would be different if I had kept learning 12 years ago. So when one of my friends got involved with DevMountain, a coding bootcamp based in nearby Provo, I looked into it and decided to take a shot.

I had a few big questions before I committed to DevMountain.

  • What would I be able to learn over 12 weeks part-time?
  • Would I be able to build something cool?
  • Would I be embarrassed?
  • Would it be worth the price?

Now that I’m almost finished with my 12 weeks, I wanted to answer those questions for anyone else who has the same.

What would I be able to learn over 12 weeks?

DevMountain’s goal is to get students prepared to enter the workforce as Junior Developers. The first rung on a tall ladder to proficient software engineering.

I was under no illusions. A 12 week part-time coding bootcamp wasn’t going to put me on the same level as someone who has dedicated years to refining her practice as a software engineer. But having worked hard over 3 months, I’m able to speak coherently and work alongside many senior developers as I continue learning.

Specifically, here are a few of the things that I learned during the iOS Summer Cohort:

  • UIKit. Putting labels, textfields, tables and buttons on the screen using storyboards and programmatically.
  • Data Persistence. Saving data between app launches using NSUserDefaults, Core Data, and network services.
  • Networking. Working with data through open APIs, accessing Twitter feeds, World Cup match info, or custom APIs using Parse, NSURLSessions, and AFNetworking.
  • iOS Frameworks. Mapkit. Message center. Location services. Push notifications.
  • Best Practices. Version control. Github. Unit testing. Project architecture. MVC. Pair programming. And more.

I am not a master of any of those concepts. But I have experience and exposure to every one of them and I can use them to piece together some pretty cool apps.

Think about what you can build on iOS if you can put stuff on the screen, save data, use network services, and command the iPhone’s capabilities for sound, location, or Bluetooth LE. All of a sudden ‘I have an app idea’ turns into ‘I have a cool project I’m working on’.

Would I be able to build something cool?

Once people heard that I was learning to make apps for iOS, I started to hear one phrase over and over again.

‘Hey, I have an idea for an app’

In mid-June, about halfway through the cohort, I heard the first idea that I thought ‘Cool, I could build that!’ So I did.

I want an app that only counts down my son’s piano practice time when he’s actually playing the piano.

My first app, Piano Practice Timer, went live on the App Store two weeks ago. It hasn’t been a smashing consumer success but it is a technical success. I built an app that recorded audio from the microphone, sampled it in real time, and counted down a timer if the sound was loud enough to be a piano playing. I built a persistent settings screen, with options for practice length, timer type, e-mail reports, and a feedback form. And I built it all from scratch.

Pretty cool for 6-8 weeks of experience.

Noise Timer for iOS

Would I be embarrassed?

When I first looked into DevMountain, I was worried I would hold up the class. That I would get lost and be that guy who asks the dumb questions.

Turns out, no one in the class was experienced. That’s why they were in the class! So there was no reason to worry about being embarrassed or slow. Those of us who put in the time and effort got a ton out of the class, and no one was holding us up. Anyone who puts in the time and effort will get as much out of the class as I did.

Would it be worth the price?

Anyone who’s paid college tuition is used to spending thousands of dollars on education. Thinking back to my college experience, this is much better. A few reasons: I’m more interested in the subject than I am about American History. The teachers are full-time developers working in the field. The small cohort was a better environment for individualized learning. I had two great mentors ready and willing to help. And the curriculum was project-based, so we learned by doing.

Before I applied, my wife and I debated if the tuition was worth me finding out if I enjoyed software development. And I can wholeheartedly say that it was.

What’s Next?

I introduced you to my first app earlier. I’ve spent the last month working on my second app. It’s called Wired In, a modern productivity tool for Mac, iOS, and your desk. I’ve built the iOS component with UIKit, Core Data, iCloud syncing, Parse, submodules, and Core Bluetooth to communicate with an RFDuino hardware prototype I put together.

We Are Wired In

It’s not quite ready to go yet, but I’m hoping to announce the app launch soon. That will be followed up by an announcement for the Wired In desktop sign, to let your coworkers know that you’re in the zone and to come back when you’re on a break. I’m thrilled with the feedback I’ve gotten so far on the app and sign. If you want to learn more or get an e-mail when we launch, check it out at We Are Wired In.

If you have any questions about DevMountain, the iOS Cohort, or my experience in a coding Bootcamp, send me an e-mail, hit me up on Twitter, or ask me to answer your question on Quora anytime. I’d love to hear from you.

My Background

I’m a teacher by profession. I teach business, marketing, and technology to teenagers in Lehi, Utah. I’ve run a few websites in the past, and done some Wordpress consulting on the side, but prior to this summer my only real coding experience was a C++ class in high school that went from awesome to painful when the teacher took an industry job midway through the semester.

I often wondered what different paths my life would have taken if that teacher had stuck around and I had continued to develop my embryonic programming skills.

With development bootcamps sprouting up around Utah, I felt like that would be the right way to catch a glimpse of my missed opportunity.

I enrolled in the Web Development course through DevMountain for my summer break, but when they announced the iOS Course and I learned that my good friend Joshua would be writing the curriculum for it, I jumped at the chance and transferred.

I had done some work that ended up in the App Store before. I founded Lift Media, a niche third-party ad network with Joshua in 2011. I also collaborated with him on a couple of apps in late 2011 and early 2012. But my contributions were always web-related.

Class started 9 weeks ago, and today my first app went live in the App Store.

Piano Timer - A Noise Activated Piano Practice Timer

The first 4-6 weeks of class were great. Hard, but great. The first and most important thing we learned was how to learn the iOS frameworks.

We worked on class projects, with great sample code and solution comparisons. We learned UIKit, data persistence, basic MVC, Core Data and networking. But what I remember most from those first weeks of class was learning where I could go to learn more and turn my ideas into code.

My first real experience building something extracurricular was building a simple little pomodoro app. It had started as a class project, but I built it up into a working pomodoro with project time tracking using Core Data. It was spaghetti code, and terrible, but I was proud of it.

I never released it (story for another post). But I was hunting for something new to build alongside the classwork. I asked around for ideas at a family reunion when three people told me independently that they wanted an app that would help time their kids’ piano practices. Not just a straight timer, but one that only counted down the time when the piano was playing.

My gut reaction was ‘not a huge market, but definitely an interesting project for my current skill level’. So I got to work.

Building the App

I looked around online, I learned how to sample audio from the microphone for specific decibel levels, I built my basic timer view, and I had a label updating with the current decibel values before I went to bed that night.

‘I’ll have this done in a week!,’ I thought. Naïvete at it’s finest.

I kept at it. Refining my Timer class. Adding a settings page. Persisting those settings for each launch of the app. Building my own Onboarding Controller and views. Adding reporting and timer options. Putting in hours of learning, experimenting, fixing bugs, refactoring, and then doing it all over again for each change and new feature.

After a couple of weeks, I had something ready to submit to the store.

The Value of a Boot Camp

A quick aside for a moment. As I’ve gone through the bootcamp, I’ve been asked if I was really learning how to code in 12 weeks. The answer is no. You can’t master programming in 12 weeks in a part-time night class.

The value of the boot camp is building a foundation, working with other students on the same level, having access to mentors who can help you along the way, and most importantly… spending your own time outside of class to hone and develop those skills. You get out of it what you put into it.

Let me say that again. You’ll get out of a bootcamp what you put into the bootcamp.

Don’t expect to show up, have the instructor’s words wash over you, and start cashing checks from your high paying development job. It won’t happen. You’ll get frustrated and drop out. I promise.

What About Swift?

I was sitting with a talented group of iOS developers when Apple announced their new programming language, Swift. Initial reactions ranged from wild excitement to soul-searching introspection. One of them said:

My entire career just got deprecated.

I wondered the same thing. I was 5 weeks into my fancy iOS bootcamp! Was it all wasted? Should I toss everything out the window and start over with Swift?


Swift is cool. I’m excited to do more with it. But Swift is the language for the next 30 years of Apple. The language of the past 30 years isn’t going to just fade away into irrelevance in the next 12 months.

As I’ve learned while building Noise Timer and my current capstone project… iOS development isn’t about the language. It’s about the frameworks. It’s about how Cocoa works. The language is an implementation detail. The most important things I learned still apply whether it’s Objective C or Swift.

App Review

Back to Piano Timer. I had the skeleton of an app that I felt was ready to submit to the app store. But as I got ready to submit I realized that I didn’t have an interesting user interface, a logo, an icon, or a written description for the app.

I was running out of time I could spend on this side-project app, because I needed to get to work on my capstone project. In a world where Delight is in the Details, I was hesitant to push it live without spending more time on the little things. But, real artists ship, and it was time to move on to my next project. So I quickly put together the missing pieces, uploaded them to iTunes Connect, and submitted the app.

That was about a week ago. This morning the app went into review, and without a hitch was processed to go live on the store.

I’m happy to present my first iOS app, Piano Timer. Check it out in the App Store.

So What’s Next

I’m nose-to-the-grindstone on my capstone project, which I will be presenting during Demo Night at the Adobe Building in Lehi next week. DevMountain has an Eventbrite page set up for it, it’s free to attend, and I’d love to see you there.

I’m not sure where iOS development will take me in the future. But I’m thrilled with my experience so far. I’ve learned a lot. Most importantly, I’ve learned that development is something I truly enjoy. And even though it’s 12 years after my first failed development experiment, better late than never.

If you have any feedback, questions about how I learned, DevMountain, bootcamps, or anything else, I’m @calebhicks on Twitter. I’d love to hear from you.

I’ve been on the outskirts of web development for the better part of 15 years. I’ve built websites, I’ve managed servers, I’ve done side projects. If you take the entire population, I’m probably in the 98th percentile of experience with web development.

Which basically means I don’t know anything.

I’ve spent a decade and a half dipping my toes into this practice. And now it’s time for me to dive in. Sink or swim. And I’m writing today to invite you to join me.

The DevMountain Web Core boot camp begins on May 6th, promising to introduce students to building their own web apps using Node, Express, Angular, etc. The 12 week course takes place on Tuesday, Wednesday, and Thursday nights from 6-9pm and Saturdays from 9am-2pm.

12 Intense Weeks of Pure Code

This course isn’t for those who want to dabble or experiment. It’s a 12 week boot camp. Sure, the classes are at night, so it’s convenient for those of us who have full-time jobs. But if all you do is show up to class, you won’t get much out of it. Every bit of additional effort will pay huge dividends.

As a teacher, I get summers off. So this is a great time for me to really get deep into this stuff.

It’s not cheap. But it is.

Tuition starts at $3900 for the web core, or $4500 for the newly announced iOS core. This isn’t a $39 ebook or $25 video series. There are teachers, mentors, a professional learning network to continue learning once the class is over. There is face-to-face discussions, code reviews, and Q&A time. And as a reward for those willing to make the cash and time investments required, DevMountain has a 95% placement rate for those wanting to get development jobs.

You know what the average junior developer in Utah is getting paid right now? $3900 is a great investment.

So are you leaving teaching?

Not now. No. While the 2x salary is intriguing, I enjoy what I do too much to bail on it right now. I wake up excited to go to work. I get to work with kids wanting to learn technology and entrepreneurship, two things I love. I’m working on a Digital Citizenship program to get kids more involved with creating, connecting, and sharing online. I get 2 weeks off for Christmas, a week for Spring Break, and 2.5 months in the summer. I get to make a difference every day.

I’m not ready to give that up.

So why are you doing it again?

I want to learn this stuff. I want to be able to build functional prototypes of ideas I have. I want to get to know more people in this space. I want to be able to tell students more about what’s out there. Who knows, maybe I’ll end up teaching it at the junior high sometime 1.

You Said ‘Come Learn With Me’…

Yes. I learn better when I know people who are in the trenches with me. So I want anyone and everyone I know to come join me at DevMountain this summer. We can learn to build stuff together.

Oh, and if you use this special link to register, I get a little bit of a kickback on my tuition, and I’ll use the savings to take us both to a nice dinner:

Register for DevMountain

Maybe you’re already signed up for DevMountain, but we don’t know each other yet. We should meet up! E-mail me, hit me up on Twitter, let’s do lunch. I’d love to know someone before the first day of class.

  1. We already have an awesome Computer Science teacher at Lehi Junior. But he’s super old and bound to retire any day. Hi Mike!