Improving With Experience: Machine Learning in the Modern World

MLND-blog-post

In the elevators and the stairwells, at desks and in conference rooms, by the coffee machine and in the library, everyone at Udacity is talking about machine learning. Why? Because we’re launching a brand-new Machine Learning Engineer Nanodegree program, and everyone is very excited!

Machine learning is a truly unique field, in that it can seem both very complicated, and very simple. For example, compare the following two descriptions:

“Machine learning is a subfield of computer science that evolved from the study of pattern recognition and computational learning theory in artificial intelligence. Machine learning explores the study and construction of algorithms that can learn from and make predictions on data.”

and

“Machine learning is the science of getting computers to act without being explicitly programmed.”

The first is from Wikipedia, the second is from a Stanford course description. Somewhat different flavor, no? So how can Machine Learning be both so complicated and so simple? The answer lies in its omnipresence. Machine Learning is literally everywhere.

But what IS Machine Learning?

Where did it come from, what does it mean, and why is it important?

At its core, machine learning is about making sense of large quantities of data. And note: by ‘large’, we mean LARGE—literally millions of just about everything you can count, quantify, and analyze: millions of patients, millions of students, millions of trades, millions of tweets. The sheer volume of data the modern world now produces is what makes machine learning both necessary, and possible.

Of course fields like statistics and algorithms have long aimed to summarize data for making decisions and predictions, and many of the formulas and techniques used in machine learning were developed by mathematicians centuries ago. What is new is the quantity. Increases in computational power allow us to perform analyses in hours that would have taken centuries by hand.

The result: a billion times more data than we’ve ever had before, and a billion times more power to make sense of it. How is this all made possible? Machine learning! Literally, a machine “learning” concepts from data. It learns like we do every day: it looks at experiences and observations and discerns useful information. But while we can do that based on a couple dozen experiences, machine learning can do it based on millions of experiences, all rigorously and numerically defined.

So what do machine learning engineers actually do?

Simple! Machine learning engineers build programs that dynamically perform the analyses that data scientists used to perform manually. And why is this important? Think for a moment of all the fields where data is very important. Healthcare, education, astronomy, finance, robotics, and more. Machine learning is already impacting them all, and in fact, there is virtually no field that machine learning won’t impact!

This is one of the key reasons why machine learning is so fascinating, because it’s everywhere. Often, it’s operating when we don’t even realize it. Ever used Google Translate? How about Siri? Your Facebook News Feed? All made possible through machine learning! If you know a bit about Udacity, you’ll know that our founder and CEO Sebastian Thrun himself has a long and remarkable history in the field, from founding a Master’s program at Carnegie-Mellon that evolved into a Machine Learning PhD program, to being director of the Artificial Intelligence Laboratory at Stanford University, to leading the development of the Google driverless car.

Google Translate may in fact be one of the most famous (and most utilized!) examples of machine learning in action, and Google’s description of how it works makes for a pretty classic illustration of the concepts at play:

Machine Translation is a great example of how cutting edge research and world class infrastructure come together at Google. We focus our research efforts towards developing statistical translation techniques that improve with more data and generalize well to new languages. Our large scale computing infrastructure allows us to rapidly experiment with new models trained on web-scale data to significantly improve translation quality.

The key sentence here is “techniques that improve with more data.” This is really the essence of machine learning.

In 2006, Tom Mitchell published The Discipline of Machine Learning. In it he posed the following question:

“How can we build computer systems that automatically improve with experience?”

Machine learning is the answer to this question, and it’s why we’re launching our new Machine Learning Engineer Nanodegree Program!

 

The Difference Between Programming and Software Engineering

“When I graduated from my programming bootcamp, I had the skills to be a great programmer,” Lindsey starts. “But it wasn’t until I joined Udacity that I realized I still had a lot to learn about being a software engineer.”

The terms Programmer and Software Engineer, contrary to popular belief, are not interchangeable. A programmer knows how to code and may have the technical skills needed to build meaningful products. A software engineer follows a systematic process of understanding requirements, working with stakeholders and developing a solution that fulfills their needs. A programmer tends to work alone. A software engineer is part of a larger team.

Lindsey realized this difference when she graduated from a prestigious bootcamp in San Francisco and started working at a company (with us!). From learning GitHub workflows to more involved testing (“I always questioned the importance of testing,” Lindsey explains, “with individual projects, I knew what it was supposed to do since I build most of it. Now, since all the parts interact with each other, I need to be very careful to test my code”), Lindsey had to pick up a lot of skills as she transitioned into this new role.

photo1-2

Udacity’s Software Development Life Cycles will help make the transition from programmer to software engineer easier for everyone. Taught by esteemed Georgia Tech Professor Alex Orso, SDLC explores software phases, requirements engineering and software testing methods.

P1L3 Lesson Overview

Through Professor Orso’s engaging practical examples and interviews with industry insiders, you will learn how to select and implement the ideal software process for your development project. Our goal is to equip you with the skills necessary to define requirements, set up an integrated development environment (IDE), learn Git (and Github!) and use Unified Modeling Language (UML) to design and build an Android application.

We will also examine several testing practices and refactoring techniques that are helpful before the launch of your software project.

P3L2 Debriefing

Ready to get started? Enroll for the full course experience or view the free courseware now.

Check Out the Course

Coffee Break EP31 [VIDEO]: Solve Problems with Clicks Not Code

In Udacity’s new Intro to Salesforce App Development course, you’ll build a business app using point-and-click development. And you’ll learn more than that! You’ll also learn to think like a developer about solving big, abstract problems.

If you’re interested in learning to program, and you want to think about big picture questions before you dive into syntax details of coding, this course is for you!

https://youtube.com/watch?v=VYvAoe4ynUQ%3Flist%3DSPAwxTw4SYaPnzPUHKPi_XQLaEpLezJwyJ

What do you want to build? Let us know in the comments. See you in class!

New Engineer’s Resume & Portfolio

Tamir
Tamir

Meet Tamir, a Udacian and a software engineer. Tamir hasn’t always been a software engineer — he switched career tracks from mechanical to software engineering in 2012. Way to go, Tamir!

Tamir was working as a mechanical engineer when he discovered Udacity, had a blast with coding, and realized he wanted to pursue a career in programming. “The nice thing about programming is you don’t need to memorize a bunch of stuff; you need to be able to reason about the things in front of you.”

Amir took Applied Cryptography, Artificial Intelligence for Robotics, Web Development, Design of Computer Programs, and Intro to Computer Science — and updated his resume (and LinkedIn profile) with these courses, along with a description of the specific topics he studied. This extra information helped to demonstrate his effectiveness as a programmer with concrete skills and a passion for learning:

CS387 ‐ Applied Cryptography (David Evans)
Topics covered included: one‐time pad, symmetric encryption, block ciphers, stream ciphers, hash functions, password salting, Diffie–Hellman key exchange, asymmetric encryption, RSA, SSL & TLS, onion routing, and garbled circuits.

Coursework included defeating weak implementations of: OTP, hashing, D‐H (exploiting timing side‐ channel), RSA, and TLS.

CS373 ‐ Programming a Robotic Car (Sebastian Thrun)Topics covered included: monte‐carlo localization, kalman filter tracking, particle filter localization, A* planning & search, and PID control.

Coursework included implementation of all topics covered and a final project required integration of concepts to program a simple autonomous robot.

CS253 ‐ Web Application Engineering (Steve Huffman)
Topics covered included: HTTP, GET & POST, HTML forms, persistent storage & caching, SQL & GQL (Google Datastore), User authentication (password hashing & salting, secure cookies), web APIs (Google Maps & Geolocation), deployment & PaaS, and analytics.

Coursework included implementation of concepts on Google App Engine.

CS212 ‐ Design of Computer Programs (Peter Norvig)Topics covered included: design process, clarity & generality, correctness, simulation, design tradeoffs, decomposition & modularity, efficiency, optimization, and complexity management.
Coursework included heavy practice in all covered topics with many homework problems and challenging exam problems. Select exam solutions are available on GitHub: https://github.com/tamird/CS212.

Tamir currently works as a software engineer at Square. He says, “I really enjoy working with experienced people, and I feel like a strong Ruby on Rails developer now. It’s nice to be around people I can be in awe of, and to feel like my product means something and makes an impact on the world.”

Tamir has three pieces of advice for you:

  1. Have fun!
  2. Don’t be intimidated. The internet is a great equalizer. If you don’t know something, just go to the internet, and don’t be afraid to dive in.
  3. Tersify. Structuring your thoughts in a way the computer can understand you will also make them easier for humans to consume.

Improve as a Programmer After Your First Online Course

Roberto
Roberto

Roberto is a software engineer at HireArt, a jobs marketplace that uses online challenge-based interviews to match applicants and companies.

A common question people ask after their first programming course is: “How do I keep getting better?” My answer is to pursue projects that allow you to make your unknown unknowns into known unknowns.

What do I mean by this?

First, let me tell you a little about my experience. Before I knew anything about programming everything about it was mysterious to me; everything was an unknown unknown. How does a word processor work? When I open a website, where does the information come from? I had no idea how to get a full answer. It all seemed like magic and the task of understanding how it all worked appeared overwhelming.

During your first course you acquired a great deal of knowledge. For example, you learned that programs are written in clearly defined programming languages. You learned that, before a program runs, it gets translated into instructions a computer can understand. You also found out about if-statements, loops, functions and how assemble them into complete programs. In other words, many unknown unknowns — things you didn’t know existed — turned into known knowns.

But on top of that, some unknown unknowns became known unknowns. You most likely learned that there are special programs called compilers and interpreters that take care of converting the code you write into something a computer can execute. This is remarkable, because now you know that later you can learn about something called compilers and understand exactly how they work.

Why is this a good thing?

Great developers don’t understand every single thing there is to know about programming. Rather, they have a clear, high-level picture of how the different tools at their disposal work in concert. For example, an expert web developer might not know a great deal about cryptography, but she’s aware that it’s hard, and she understands that it’s better to use code created by people who have studied a lot of cryptography instead of trying to write it herself. Without this known unknown, she could have made some serious mistakes. At HireArt, as in any other tech startup, we are constantly faced with new technical challenges. Sometimes the right solution isn’t obvious, but having a very good general picture of the solution space helps us get to it quicker. For example, we use machine learning to improve the way we screen candidates for a specific job. None of us had a deep background in machine learning, but we knew of it, and that it could help us, so we were able to find the right technique quite quickly.

What’s a good way of practicing this approach? Start working on a project.

Now, sooner or later you’ll have to use other people’s code in your own projects. Programmers often encounter the same problems, so they build libraries, pre-packaged solutions to these problems, that they can use in many different contexts. Moreover, these libraries are commonly open source, which means that anyone can read their code and understand how they work.

Libraries work best when they hide their inner workings and let you stay focused on what you’re trying to build. A secret to improve as a programmer is, once in a while, to let your curiosity run free and allow yourself take a peek under the hood.

So choose a library that accomplishes something you’re curious about (say, user authentication) and read through the code. You’ll probably have a hard time understanding all of what’s going on, but soon you’ll recognize the broad strokes of the solution. These are unknown knowns becoming known unknowns before your very eyes!

So remember to keep broadening your picture of the programming world by figuring out first what you don’t know. Then you’ll have a good map to guide you when you’re later looking for detailed answers.

Roberto Thais
Software engineer, HireArt

Etsy Engineer on Real World Programming

Fiona
Fiona

Hello! I’m Fiona, and I am a software engineer at Etsy. I love my job as much as I loved being a student, but I’ve been constantly surprised at how different professional software engineering is from academic programming. These are the biggest differences I’ve experienced:

Collaborative Coding

Working in an established codebase means you’re not always writing code from scratch like you usually do when you’re learning. I spend a lot of time writing code that extends or interacts with another developer’s code, which means spending a lot of time reading code to build context.

I’ve heard it said that a great engineer is the one people go to with their questions, but I don’t think this applies to questions like, “Why on earth did you write this function like this?” I know somebody is probably going to read and change my code down the line, so I budget mental resources for ensuring my code’s readability and reliability.

Scalability

Scalability is the most obvious difference between writing proof-of-concept code and working on a web application with real users. I have to make my changes with an eye to how they might affect the flow our user base of millions, especially if they’re part of an experiment, and ensure that nothing’s exploitable from a security standpoint. There are many seemingly tangential angles to worry about in the context of a real life web app, but it’s a necessary part of writing software that real people use.

Real-world Impact

It takes a lot of energy to share a codebase with hundreds of other engineers and to manage the overhead of building a scalable, secure application. That said, working on a platform used by a real life community is rewarding on a level I didn’t expect when I was learning to program. Now that I’m comfortable getting my code down, I’m not thinking as hard about syntax or programming idioms, but I’m thinking a lot about how we can design aspects of our platform to best serve our sellers and our buyers, and how we can express our values through our work.

In a way, learning to program is like learning a new spoken language. You start out spending a lot of time learning new vocab and grammar rules–some of which can fundamentally change your understanding of language itself. But once you’ve built fluency, using that language is a different game. It’s about being part of a conversation, and it’s about having something to say.

Fiona Condon
Software Engineer, Etsy

Career Tip of the Day: Get Recognized for your Online Learning on LinkedIn

UPDATED for 2015!

You’ve put in the time and effort to advance your skills and build cool projects with Udacity — proudly share what you’ve accomplished on LinkedIn with your network and potential employers.

You’ve heard from tech recruiters on our blog that employers value continued learning, online portfolios showcasing relevant projects, and active community profiles.  Update the Education, Courses & Certifications sections on your LinkedIn profile to highlight the skills you’ve gained and make your CV more attractive to recruiters.

Update Your Education Section

Choose Udacity as your university, then add your field of study or specific Nanodegree in the respective fields.  Add more detail by listing what courses you’ve taken and what you’ve learned with us.

what-learned

Add Relevant Coursework

You can highlight individual Udacity courses you’ve taken that are relevant to the jobs you want.  If the Courses section is not available as you scroll through your profile, go to the top of your profile to add a new section from the choices listed.  You may need to open up more options by clicking on the View More dropdown.

add-courses

List Udacity Certificates

Add your Udacity certificates to your profile as well — you’ve worked hard to receive certificates, so show them off to colleagues, friends, employers, and recruiters!  A Udacity Nanodegree would be a great addition to this section.

add-certifications

The Bottom Line

Everyone — Udacity, employers, your network — is excited for the new skills that you’re gaining through online education. Updating your LinkedIn profile is a great way to let everyone know it’s time to cheer you on (or offer you a job advancement!) as you level up your skill set, so make sure to update today.

For more from Udacity on LinkedIn, follow Udacity’s LinkedIn page for updates around job readiness, and join our Crowding Around Udacity group for discussions around professional advancement.  We love hearing from you, so please let us know how you’re using Udacity to further your career, and what we can do to help you on your journey!