Bringing real-world coding education to colleges

CodePath goes back to school

To bridge the gap between industry best practices and what’s taught in academia we plan to have CodePath classes running in hundreds of universities within the next three years. CodePath has spent years training senior engineers and designers inside of companies like Facebook, Dropbox, and Google on the latest technologies in mobile and web development. We believe that bringing the same classes to universities and introducing modern technologies like iOS, Android, and Node.js in the context of building practical apps will complement the traditional computer science curriculum.

As students near graduation, this can also help expose and prepare them for the thousands of opportunities in tech companies in Silicon Valley as well as other tech hubs. However, this program is not just for existing computer science students. We believe that introducing technology through building web and mobile apps will attract a diverse population who had not previously considered computer science.

The gap between school and industry

By the time I entered college as a Computer Engineering major, a nerd father, nerd summer camps, and years of nerd training prepared me well for my freshman year. With several programming languages under my belt, I felt at ease in the early logic and algorithm classes. And yet, in 1999, I had a vague sense that I was on the sidelines as my more adventurous friends were tackling PHP and throwing around words like “shopping cart” and “session cookies”. By the time I decided to explore more, it seemed like the crowd had already moved on to Cold Fusion and ASP. I still remember the general sense of frustration and confusion I felt after graduation as I was trying to understand the actual technical landscape that was so different from my textbooks.

This is not a condemnation of computer science programs. Critics of traditional degree programs will sometimes cite the fact that, in practice, most programmers don’t write compilers or operating systems or rebalance binary trees or route through graphs. While it’s true that web and mobile apps require a completely different set of tasks, I don’t regret learning the fundamentals. You can be a successful car mechanic without ever learning about the principles of combustion or aerodynamics, but you’ll probably never build your own race car.

However, there is a distinct gap between what’s taught in school and what’s practiced in industry. Our courses are designed to run in conjunction with university programs and bridge that gap. As students prepare for the transition into industry, the practical skills we give them will open thousands of doors. On the flip side, companies spend millions on university recruiting, focusing on only the top 50 schools and running interview drills that they know to be imperfect assessments. We hope that our program will pave the way for students from thousands of colleges and universities to discover and prepare for the opportunities they’re looking for.

“Started from the bottom, now I am an intermediate iOS developer. Bootcamp fulfilled all the promises Tim made. ”

– Stanford Student in Spring 2015 iOS Class

CodePath pilots iOS Class at Stanford

Earlier this year, we ran our first university class in iOS development for a group of 20 Stanford students sponsored by Andreessen Horowitz. Our instructor co-taught with a student instructor and a team of three TAs, and students participated either for independent study credits or no credits. We used the same policies that we have for our professional classes: unexcused absences or incomplete weekly projects will result in being withdrawn from the class. Despite having overburdened class schedules and other commitments, 15 students were able to successfully submit all projects and present a final group project which is an app they designed and built. Students in the program connected with senior iOS engineers from Wealthfront, Amazon, Linkedin, and Nest. Andreessen Horowitz also agreed to provide access to their portfolio of companies to all students in the program. To top it off, CodePath provided a $5,000 cash prize to the top student projects.

shop discount bridesmaid dresses,occasion dresses
CodePath Founder, Tim Lee, speaking to a student-led iOS class at Stanford University

This program is not just for senior computer science students. Over the past few years, we’ve run an extremely successful program teaching designers how to build native mobile apps that was initially created for Facebook. Even though the designers have limited or no programming experience, they’re driven to create the apps they can see in their imagination. The class isn’t just about building apps like the one shown below. Designers gain confidence in their ability to pursue their own ideas, can work more seamlessly with engineers, and earn greater respect from their more technical peers.

WorkDay

Workday Image
A productivity app built by designers in a CodePath class

Teaching designers successfully has helped us confirm that programming can be learned relatively quickly even by those with no prior experience. Unfortunately, in many universities there is a belief that only those who have been programming since childhood or with exceptional abilities in math or logic can learn new languages in a reasonable timeline. Furthermore, programming is rarely thought of as a field for those seeking to express creativity in their work.

We believe that a big part of the achievement gap in programming is in fact a motivation gap.

Most non-technical people are puzzled when programmers refer to themselves as the creative type or go on about the joys of seeing their ideas come to life. It doesn’t help that most introductory programming courses emphasize that the field is only for the ‘logical’ and the ‘gifted’. It’s no wonder that most creative, intelligent young people steer clear of dreary computer science classes. We believe that a big part of the achievement gap in programming is in fact a motivation gap. By motivating students with a clear vision of the things they can create, they’ll be inspired to learn more and to get through the difficult parts of the learning process. We’re in the early days of our university program, but we’re excited by the impact that we’ll have in this community and beyond.

It’s Time to Use Interface Builder

When I first learned Cocoa, I didn’t get Interface Builder. It seemed like a beginner’s tool that gets in the way of anything more complicated than a tip-calculator. For years I worked on big teams that decided IB was off the table.

Last year I reviewed CodePath’s curriculum, which starts students off with Interface Builder. Since classes are target senior engineers who wanted real-world experience, I considered killing IB and forcing everyone to go programmatic. But I knew I first had to give it an honest try.

Well now I’m an Interface Builder convert. It’s a great fit for most projects, even “at scale.” Not only is it a timesaver, but it’ll lead to fewer bugs than going purely programmatic. The advantages should outweigh most anxieties. While there are situation where it won’t fit, it should be the first tool an iOS developer reaches for, and it’s absolutely critical to master.

Auto Layout

Auto Layout is a powerful tool for dealing with device fragmentation, localization, and really anything with dynamic layout. However, for complex layouts, it’s hard to juggle all of a screen’s constraints in your head. With size classes in iOS 8, it’s only going to get worse.

If there’s one thing that’s tipped the scales toward Interface Builder, it’s real time feedback for Auto Layout. When you make mistakes programmatically, runtime errors are cryptic, and it’s frustrating to constantly re-running code in the simulator to test fixes. In IB, they’re actually highlighted. It’s a debugger for views.

Static Table Views

Every app has a setting screen. They all have some labels and text fields and switches, and they’re all powered by the same boilerplate code. You could waste an afternoon writing it code, slipping in some off-by-one errors. Or you could offload it to a library you wrote yourself, which you now have to maintain. Maybe there’s a third party library, but you’re back in the same position of offloading code to someone else. Why not give it to Apple, where it’s more battle tested?

WatchKit

While Apple has always Interface Builder, they’ve provided programmatic alternatives on equal footing. Things started to change in Xcode 6, when all new project templates used Storyboards.

Now, WatchKit apps require Storyboards. You cannot configure your UI programmatically.

The Trade Offs

It’s valid to have anxiety over Interface Builder, but I think it’s overblown.

My favorite part of teaching senior engineers from other platforms is getting a fresh perspective on problems. I asked them to play devil’s advocate after trying IB for a weeks.

“It Feels Magical.”

If you’ve used a “magical” framework on a successful project, you’ve been bit. Maybe the project changes direction, or you’ve been successful enough that scaling becomes an issue. In reality, you didn’t save time. You just delayed solving the problem.

While Interface Builder looks magical, it’s pretty simple. Anything you can do in IB, you can map 1:1 to code, and it’s straightforward to follow what IB files do. The Cappuccino team actually built a tool that convert XIBs for use with their web framework.

“What about performance?”

Performance can mean a few things. Memory?

The memory usage between methods should be nearly identical. There is a temporary memory usage increase for using nibs or storyboards, but it is likely very minor compared to the views themselves. Similarly while loading and parsing a file is not free, in many cases the cost of doing so is minor, and has absolutely no effect on the performance of the final generated UI.
– RinceWind, Apple Developer, on the Developer Forms

Performance could mean CPU Time, and Matt Gallagher benchmarked it. Out of the box, IB up to 17% faster than programmatic layout. After some tuning of the programmatic code, it was 5-10% faster. In his conclusions, he said:

Don’t assume that NIB files are always slower than generating views in code — it is not always true. While in general, generating user interface views in code appears to be 5-10% faster than loading from a NIB, the reality is that this difference is small enough that it doesn’t matter and there are certainly some views that load faster from a NIB than from code.

His deliberately contrived setup has a 1.8 second load time, and the difference was only about 100 milliseconds. It was also written in 2010. In real world apps on modern hardware, the difference will be negligible.

On top of this, consider that tableview cells are recycled. So even if it costs a few milliseconds, it’s paid when the screen loads. It should not impact scrolling performance.

Given the low risk, and how little it costs to implement, don’t worry about performance until you’ve benchmarked it in your own app.

“How will it scale?”

If you cram everything into Main.storyboard, you’re doing things wrong. It’s no different than if you try to fit all of your app inside one class in one file. Just like code, you refactor IB files.

As your app grows, split out flows into their own .storyboard files. Then load them programmatically.

let nav = UIStoryboard(name:"SignupFlow", bundle:nil).instantiateInitialViewController as! UINavigationController

When a single flow gets too complex, you can break things down until a storyboard contains a single screen. When that gets too big, generate the controller programmatically and load individual views via XIBs.

“What about merge conflicts?”

As we refactor our Storyboards into smaller IB files, we reduce the risk of conflicts. That said, there’s still a risk, and yes, hand-merging these formats carries risk.

As iOS developers, we have to contend with a much more dangerous file: Xcode projects. Most teams just deal with it. Big companies like Google worry about scaling it, so they built Generate Your Project, which generates IDE project files as part of a larger build process, taking its management out of the hand of the developers. It’s great for Google, but overkill for 99% of apps.

Beyond all that, we already deal with large opaque binaries in our apps: image assets. We don’t draw all our assets programmatically in the name of purity.

You may cringe with that comparison. “Image assets are a designer’s problem!” I wonder if layout should be, too.

Early video games were entirely developed through code. Today, game developers invest in level editors so artists can focus on the work. Today, many iOS teams expect designers to hand engineers an annotated PSD, and the engineer to transcribe it to code. So long as you clearly define boundaries, it seems better to let an artist build out the art and let the engineer focus on integration.

Conclusions

Obviously there apps where IB is the wrong tool for the job. I just think they’re in the minority.

Before you judge IB, ship a real project with it. Once you get past the learning curve, the productivity gains far outweigh the risks.

CodePath’s Last Demo Day of 2014

CodePath Fall 2014 Demo Day

by Michael Ellison on November 18th, 2014

10416604_10203155347670030_2798127871599900309_n IMG_3823 buy discount bridesmaid dresses at theluckybridal new collection bridesmaid dresses discount sale

On Monday, November 10th, we celebrated our last Demo Day of 2014 and allowed designers to compete for the grand prize for the first time.

Over 120 engineers and designers from more than 60 companies including Apple, Google, Facebook, Dropbox, and Box competed for over $15k in cash prizes and presented to an all female panel of senior technology leaders.

iOS for Design Winner

Dogma by Jeff Smith, Kyle Pickering, Loren Heiman

Android Winner

Walk With Me by by Rebecca Rich, Maryam Quadir, and Debangsu Sengupta

iOS Winner

Parkway by Sanket Patel, Swaroop Butala, Andrew Chao

Event Recap:

Special thanks to our amazing judging panel!

shop beach and destination wedding dresses