I’ve started a new blog, The Pragmatic Engineer. Please head over for software and mobile engineering related posts.
Software is changing the world and people coding software are at the very forefront of it all. There has never been a better time to learn coding – either to expand your skills or to change your career to develop software.
But how long does it actually take to properly learn to code? By properly I mean being able to create a website or mobile app from scratch. Being able to get a job full time as a software engineer – and to work with others on more complex and more interesting software.
If you have a good mentor/feedback I’m very confident in saying 500-700 hours. (…) On your own… your mileage will greatly vary. I’d wager doing it solo takes at least three times as long (1500+ hours).
Eric is pretty spot on. Based on my experience, it really does take about that much time until you can go from zero to a pretty confident coder.
Learning French vs learning to code
So it takes somewhere between 500 to 1,500 hours to learn to code fluently. The interesting thing? There’s something else that takes about this much effort to learn from scratch: a second language. As Gruff Davies, co-founder of a language learning app puts it:
Learning a language isn’t hard. It’s just LONG. (…) I think of learning a language a bit like climbing a mountain (a large but easy mountain, the sort that anyone can climb so long as they keep going).Here’s what most teachers won’t tell you: It takes 600+ hours of study & practice to reach fluency in French (unless you already speak another latin-based language – a so-called romance language).
There are a couple of striking similarities between learning to code and learning a second language.
Second, the time to learn to code fluently is roughly the same as learning French. After these similarities it should’t be a shocker that a couple of US states are considering replacing the foreign language requirement with learning to code instead.
Does it take short months – or long years?
Similarities with language learning don’t just end at the time required either, but the intensity to get the best results. Gruff says this about learning French:
Memory fades unless it’s used. Low-intensity studies (i.e. school French) are ineffective because their intensity is so low that you end up forgetting a large percentage of what you learn. So, try to learn as intensely as time will permit you to.
The same thing applies with learning to code. If you code regularly for more hours every day, you end up picking up more and forgetting less. Think about this. If you spend 2 hours per week learning coding, then in a year you’ll do 100 hours. It will take you 6 years at that rate to become fluent at coding – actually, probably longer because you will have forgotten a lot of the stuff from your earlier sessions.
However you can rack up 40 hours a week when at it full time – and it will take 3 months to get fluent. This is actually exactly the model that many of the code schools follow and why they have pretty good success rates. Of course you probably won’t have 3 months to give up to go full speed studying, but the idea is the same: the more intense you will study, the better the results will be.
Learning to code isn’t hard. You just need to get started.
While getting to a fluent level of coding definitely takes a lot of time, getting started has never been easier. There are tons of innovative startups like Khan Academy, CodeAcademy and many others who’s mission is to make getting started learning coding easier.
And after getting started, when feeling lost and confused during learning – remember you’re not alone. Everyone learning to code feels this way. And according to Gruff, even those learning French go through the same phase:
Expect a lot of fog and confusion for the first few hundred hours. It’s completely normal and you’re not stupid. EVERYONE feels this way, even the people who seem really gifted at languages. The difference is, anyone who’s already been through that and reached the sunlight expects this stage, and it doesn’t phase them because they know they’ll get there eventually. So, if you catch yourself saying things like, “I’m rubbish at French” or “I’m stupid” just stop for a moment and remind yourself that you’re neither and you will get it if you persevere.
Anyone can learn a new language. And anyone can learn how to code.
Since the announcement of Swift and XCode 6, Objective C and Swift files can be used together in within the same project. However even with XCode 7 out, using the two languages together is not very straightforward and the Apple documentation doesn’t provide a working example to demonstrate this usage.
As I’m working on production applications that use Swift and Objective C together, I put together an example project and documentation to demonstrate how to:
- Use Objective C classes from Swift (including unit testing Objective C components from Swift code)
- Use Swift classes from Objective C (including testing of Swift components with Objective C code)
See the full sample and documentation on GitHub – Using Objective C and Swift 2.0 together in a Mixed Project.
It’s been a great 2.5 years at Skype and today is my last day. I’m leaving to Skyscanner to build a new mobile product from scratch – something I have only done so far as side projects until now.
Skype has been an awesome place to work at. I’ve worked with all of you great people, learned tons, all while having a blast. I’ve collected some of the learnings that I’ll take with me from here for the road forward.
Writing good code matters. Writing code that solves the right problem matters even more. Taking an extra few minutes now to make sure you’re solving the right problem will save more than a few minutes minutes of coding later.
The most efficient meetings are not real meetings, they’re conversations. Like a chat on the hallway, pairing in front of a computer or a quick catch up with markers in one of the phone booths. I’ve come to avoid meetings – especially large ones – as much as I can in favor to these.
There are few things that bond a team better than being given authority and ownership to deliver more and better – and succeeding in doing so.
Nothing gives me as much a piece of mind when committing code as having a robust automation and deployment pipeline in place. Things could still go wrong, but there’s a much lower chance they will.
Thanks to one 3am call while doing devops I’ve gained more appreciation for automating failovers and planning for these than I had for years before.
The key to build software in an agile way isn’t about following the scrum or kanban process itself, keeping track of velocity or other metrics. It’s about continuously and consciously improving after every iteration at a personal and team level – and shipping faster and better we thought we could.
A must read book for every engineer: Clean code. A must use perk for everyone at Microsoft: MSLibrary.
On the most productive teams people don’t care about titles. Devs write tests, SDETs can and do write prod code, PMs do testing and everyone contributes to the spec. Teams where people are careful to only do work that is part of their role responsibility spend more time talking about who should do what and ultimately deliver slower.
I’ve yet to find a better and more fun way of solving a hard or complex problem then pairing with anyone on the team.
Working with a group of people you get along well matters. Working even on straightforward tasks with enthusiastic and fun people is always interesting and a good time.
If you feel you’re not learning or being stretched as much as you could be – challenge yourself more. I always feel excited and full of energy when starting something new and unknown – may this be using a new framework, tool, language, project, switching teams – or jobs!
Thanks for everything.
PS:Every time someone will stop me to talk about Skype I’ll feel proud to have been part of this team. Keep on building stuff that people use and love.
Why Learn WinJS?
Do you know what technology was used to build the email app on Windows 8.1? Skype? Music? Games? Video? Weather? News? Travel?
What’s In this Course?
The course aims to cover the basics of WinJS, concepts that almost all apps will use. These topics are:
- Introduction and WinJS Overview
- Classes and Namespaces
- Mixins and Events
WinJS introduces a powerful feature, mixins, to help with code and functionality reuse between classes. Mixins is a similar concept to multiple inheritance and event support for classes is easy to implement implemented using some of the built in mixins like eventMixin.
- Data Binding
Promises is an asynchronous programming concept which allows working with asynchronous operations in a nice and clean way. In WinJS, promises are a really important part of most applications, so because of this it is critical to understand them and know how to use them.
- Pages and Navigation
By using pages in our application, the app can be structured in a clean and modular way. In this module we’ll be going through the most important things to know on using pages and navigating between them.
If you’d like to watch this course, you can do here, on Pluralsight. If you don’t have a Pluraslight subscription, you can sign up for a free trial and watch most of the course using the trial period.
Other Resources to Learn WinJS
This course is meant to be to give solid understanding of the most important parts of WinJS. If you want to learn more or about different parts of WinJS, here are some further good resources:
- Craig Shoemaker has an excellent Pluralsight course, Building Windows 8 Applications with JavasScript and HTML
The latest version of Flashlight 7, v4.4 has added two exciting features: it now supports continuous LED light without flickering and has been fully translated to all 19 languages supported by Mango.
This makes Flashlight 7 the only app on the market to support constant LED light under the lock screen as well as probably the most feature rich and handy app available.
So grab the update now, what ever language you may have set your phone to:
- In English: Flashlight 7
- In French: Lampe de Poche 7
- In German: Taschenlampe 7
- In Spanish: Linterna 7
- In Italian: Torcia Elettrica 7
- In Portuguese: Lanterna 7
- In Chinese: 闪光灯7
- In Czech: Svítilna 7
- In Danish: Lommelygte 7
- In Dutch: Zaklamp 7
- In Finnish: Taskulamppu 7
- In Greek: Φακός 7
- In Hungarian: Zseblámpa 7
- In Japanese: 懐中電灯7
- In Korean: 플래쉬라이트 7
- In Norwegian: Lommelykt 7
- In Polish: Latarka 7
- In Russian: Фонарик 7
- In Swedish: Ficklampa 7
And here’s a screenshot of the LED:
I’m happy to announce that Flashlight 7, the – currently – most popular flashlight app has been updated for Mango and now has LED support. According to tests the LED works on all phones, except for HTC HD7, MTC Mozart and Dell Venue Pro – these models don’t seem to properly implement the API used to trigger the light on and off. The other features – such as police light, hypnosis, kaledioscope mode – have not been touched in this release, but expect some more fun modes in future releases.
And finally some pictures: the app running on a Samsung Omnia 7 and some screenshots of the application. Hope you enjoy the app, grab it from the Marketplace here, it’s free!
I’m happy to announce that I’ve finally finished and published the Edinburgh Bus Tracker application, Bus Tracker Edinburgh. It’s completely free, get it from the Marketplace now:
Main features of the application are:
- Find bus stops based on your location, by service number or by bus stop codes
- Mark stops as favorites and access them with a simple swipe on the main screen
- Acess the most recently viewed stops from the main screen
- Get automatic Lothian bus service alerts
- … all designed to blend perfectly with your Windows Phone with beautiful Metro design
(A note as to why I chose this name versus Edinburgh Bus Tracker or EdinBus: should you not pin the app to the start page it’s somewhat a drag to scroll all the way down to “E” to start the app. Changing the name to start with “B” seemed to put it at my fingertips in the long list app selector as well).
For more information and screenshots, visit the Bus Tracker Edinburgh home page.
If you’re an Edinburgh resident I hope you’ll find it useful on your everyday commute. (And if the lack of this application was stopping you getting a WP7 you can now reconsider it ) Enjoy!
I’ve finished creating an ad rotator control for Windows Phone 7 and have published it along with the source code here: Windows Phone 7 Ad Rotator on CodePlex.
I originally created the control so that I could dynamically configure ads appearing on Flashlight 7 based on ad culture. In the US I normally prefer using PubCenter as it usually has the highest eCPM, outside of the US I would switch between other providers (AdMob, InnerActive and AdDuplex for promoting of the app). The main reason for changing the ratios of ad providers was that I wanted to experiment how showing more AdDuplex ads impacts downloads of the app – with this little tool I can do so when eCPM has gone somewhat down (Note: I’ve actually found AdDuplex have a positive effect on app downloads and use it despite higher eCPMs as well).
The control allows setting up of ad probabilites based on culture, so its possible to configure (and update) such a configuration as this:
- US: 80% PubCenter, 10% InnerActive, 5% AdMob, 5% AdDuplex ads
- Germany: 80% AdMob, 10% PubCenter, 10% AdDuplex
- France: 100% AdMob
- Other: 25% PubCenter, 25% InnerActive, 25% AdMob, 25% AdDuplex
Hope you find this tool useful!