Studio Zenkai


Bold and Clear, without excess • Kaizen 改善 • With Purpose


Studio Zenkai is dedicated to the craft of programming, photography and living sustainably. About me


Becoming a self-taught programmer

In six months I have shipped many apps, as an entrepreneur or as a freelancer. I have also contributed to open source projects and advised other projects. Yet I’m educated as an electrical engineer, not as a software engineer and consider myself largely self-taught in the area of programming.

Jeff Atwood : Geeks went from being social outsiders, outcasts, and rejects to.. part of the 1% power structure, with all that implies. Hard to adapt.

Just in Québec, there are about 7000 programmer or developer positions that are not filled every month. As a result, small and big companies are fighting to get the attention of programmers.

And it’s not just in Québec. Go in Toronto, New York city or in California. It seems you can find a highly rewarding job as long as you know how to code.

The trend has not gotten unnoticed. Smart people from all horizons are now learning and looking to land a job in the field.

This guide is for those people in arts, marketing and many other fields who are now looking for the best way to learn how to code in six months. Since time is limited, it is focused on producing practical code instead of abstract topics such as data structures or compiling. I assume however that it is just the beginning of a journey and you will have time later on to pick on formal learning.

Building a learning environment

Any laptop or desktop is good to learn. However, it cannot be a phone or a tablet (no programming on iPhones folks!). It doesn’t matter if it’s Mac, PC or Linux as long as you have admin access and you are able to install anything you need.

Interruptions kill productivity

Learning programming is in a quiet environment, with little to no interruptions. Set aside at the very minimum two hours per day, ideally a good five hours.

Self-taught programming in 2015 is done with a relatively decent Internet connection. It means you can download a 50MB package without interruptions.

Learn from the best

Contrary to perceptions, programming is best with social feedback, so make sure that you have a mentor who can give input and review your code. The stronger the feedback, the better!

You can also follow programmer’s blogs and read as part of your daily routine. Most don’t showcase code and instead explain how they design software or solve critical bugs, which is essential for your culture. I read Coding Horror, Daily WTF, the Netflix blog, igvita, Facebook Engineering, the Twitter engineering blog and a few others.

Online resources

Currently, the best resources are not books but online resources.

Without any background in programming, you can start with the free resource Code Academy. It’s important to follow each lesson and take your time.

I love CodeAcademy’s interactive tools. You can try new code directly in the browserYour goal should be on building a simple static site (such as this) in 2 or 3 weeks after your codeacademy course. I recommend you put your own online resume, with a few pictures, and links to your work. Pick a code editor (take a look at Atom), a graphic program, and you have the tools to ship your first site.

Up next are either CodeSchool, TeamTreeHouse or CodeAvengers. I especially like the guys at CodeSchool with their awesome service and amazing teachers, but others are also worth a look. At the end of the day, it’s important to choose one and stick to it. I would recommend at this point to pick one that has the best javascript course. Look at meteor or node-based frameworks.

An additional course to look at is Google’s python course for beginners. Schedule a week to learn about a SQL database, such as PostgreSQL.

Three months later, your goal should be on building a simple to-do list site after the first javascript course, and be able to deploy it on the Internet.

Peer Feedback

In Montréal, there are social meetups such as Ladies Learning code. From the beginning, it’s good to attend those meetups and see what others are doing. You can get encouraged or perhaps guided in a better direction. In other cities, you can look at meetup or eventbrite to look what is best for you.

Social feedback can be also in forms of freelancing. When/If you have delivered your first site, you can publish offers on Craigslist or your local small ads site on making basic HTML sites for small businesses. Having a customer will train you in project management, learn the value of code, how to deal with pressure, ship code that you have built from scratch, as well as being compensated. Of course, you will not be able to charge a lot of money but you can charge from $80 to $200 to do a simple business site with a handful of pages.

Hackathons are a good experience. They are single day or whole weekend experiences where you are challenged to design, develop and launch an app. After 3 months on your path, it’s a great challenge to sign up as a developer, and also a good way to meet other programmers. Hackathons are exponentially more difficult than building simple HTML sites but so rewarding!

If the timing is right and if your progress is fast, you can apply to go to Google summer of Code, especially if you have managed to develop one or two innovative projects in hackathons.

You can also start your social programming “life” online. StackOverflow is a good place to start. When stuck on CodeSchool, you can either search the site (recommended) or ask a question and get answers from the community. A few will laugh at your lack of experience but it’s important to persist.

Github is another major site. Start an account, browse repositories, try out frameworks, open issues and see if you can contribute. Many projects like Apache, node, Angular are also always looking for contributors.

The more you contribute publicly to Github, the higher the chances to be recruited!

Internships

Due to the lack of programmers, many small businesses are looking for programming hands to help in projects. You can use the programming experience you have gathered both in freelancing and in hackathons to land a 2 months internship in either front-end development. It can be in a web agency or a new startup.

You will be challenged in your lack of experience. You will wonder how to solve specific problems. But don’t worry. Experienced programmers also have the same issues, although on another level. Make sure to learn, ask peers, find answers on programmer forums, and deliver what you are asked.

When following your internship, make sure to stay involved in social programming meetups. You can also start contributing to open source projects and start focusing on a specific language you like.

A first job?

Congratulations! Nothing is more satisfying than a first well-paid job in programming. Due to your lack of university degree in Computer science or Engineering, you can forget banks, finance institutions, large companies and focus instead on small businesses. They are more forgiving. Startups especially are more focused on your immediate talent and practically none of them are asking for a formal degree.

What is your goal?

“Coding”. “Programming”. “Developing”. or “Hacking”

Then you hear words such as “Front-end”. “MySQL”. “node.js”. “Objective-C”. “Selenium”. “cloud server”. It seems programming has more trends than the fashion world in Milan or NYC. What’s up with that?

It is clear there are always new technologies. As such, it’s more important to learn fundamentals and learning how to learn, than learning a specific set of technologies.

As such, I recommend starting a blog and always write about the following:

  • Learn how to debug, i.e. how to find errors and test software,
  • Learn how to optimize performance, beginning by understanding performance issues, and learning where you can gain performance boosts
  • Learn how to design software, design algorithms and data structures
  • Learn how to work with other programmers, especially in the areas of code source control, documentation, unit testing

A blog will also help you “digest” what you have learnt in the past weeks, as well as establish your online brand as a programmer.

If you have comments or other resources, feel free to leave a note!