How a Non-Techie Learned to Code from Scratch
My background is in business and apart from being intellectually curious and interested in technology, I have no previous programming, database or web design experience. Like most non-techies, I have lots of ideas (of varying quality), but lacked the technical know-how to execute and develop a minimum viable product (MVP) without outsourcing the technology.
As a non-technical founder, you can easily persuade yourself that your knowledge is the core product and technology is only a vehicle, and thus can be outsourced. Unfortunately, this reasoning will more often than not create an undesired outcome — months of interviewing software development houses, lots of paperwork, high costs, undiversifiable risk, unforeseen delays and quality control issues, and a working relationship where you are dependent on the availability and goodwill of your developer until you find someone else to takeover. And in the end, you may end up with nothing or a product that’s not what you envisioned, and as you failed as a result of your reliance on others, and not on your own accord, it makes it even worse.
In September 2014, I decided to teach myself Ruby on Rails and create a web application. I had a simple idea, to map out the entire Israeli funding ecosystem to help startups find potential funding and promote the Startup Nation. I focused on three things:
- Israeli investors and investors with a representative based in Israel;
- Completeness of data; and
- Search granularity to allow startups to find investors that match their location, industry, market and/or investment stage. For example, find venture capital companies in Tel Aviv that invest in early stage cyber security startups.
I created a spreadsheet and designed the schema: column headings (e.g. name, location, investment stage) and attributes (e.g. seed, early stage). I then began to curate the data and populate the spreadsheet, constantly refining the schema to keep it minimal and relevant. By the end of September, I had curated data for 250+ companies. I had intentionally begun with the data instead of learning how to code primarily because that way if I failed to build the app, I could at least open source the spreadsheet and provide a meaningful contribution to the startup community.
Now, it was time to learn how to code.
Step 1: HTML and CSS
I spent a weekend going through Codecademy’s tutorials on HTML and CSS. These exercises allow you to develop a basic understanding and quickly learn how to create layouts and style a web document. The objective is to understand what you can do with HTML and CSS, and get a feel for the syntax. Do not spend too much time on these tutorials.
Step 2: Command line interface
I began to familiarise myself with the command line interface on my computer (Terminal on a Mac). I learned a few basic commands: how to create directories; move, delete and rename files; navigate from one directory to another. The objective here is to demystify the command line interface and use it on a daily basis so that you’re comfortable with the tool once you start coding.
Step 3: Learn a programming language
There are several articles and in-depth forum posts that discuss which programming language you should learn and why. Unfortunately, I can’t tell you which language to learn, except that it probably doesn’t matter. If you choose to learn PHP or Ruby, that’s fine, or if you want to learn Swift or Objective-C to create iPhone apps, that’s fine too. Don’t spend time trying to find the optimal language for your project as most languages will do. Instead, focus on what you want to build in order to narrow down your options, review the syntax, read some material and start learning the language that resonates most with you. My only suggestion is that you select a language that has a sizeable online community and robust learning material. If you have a developer friend, seek their advice and listen.
I chose Ruby and spent a few days learning on Codecademy. These tutorials are nice and easy, and provide a good introduction to the language. You will even notice that with no prior knowledge, you will still be able to understand some of the language. Your objective should be on application and understanding rather than memorising syntax. For instance, you will learn different ways to create loops, but focus on why you may want to create a loop in the first place. The list of companies you see on the 972VC homepage pass through a loop. Again, think about application.
Step 4: Set up your coding environment
I found this to be the hardest step; it took several attempts over a weekend to get it right. I recommend you backup your hard drive as you might unintentionally remove system files or mess something up when installing the technologies you need for your project. I also suggest you install Homebrew, a software package management system, which will make installation easier if you’re on a Mac. This is where you’ll likely need a helping hand the most, so be sure to reach out if you have a developer friend or perhaps attend a Meetup.
You’ll also need to download a code editor. Choose the tool your friend uses or pick the editor you prefer.
Step 5: Learn Rails
After I set up my coding environment, I spent the next few days on the Blogger tutorial by Jumpstart Lab, which teaches the four basic functions — create, read, update and destroy (CRUD) — that you need to build a simple Ruby on Rails app.
The objective is similar to the other tutorials — focus on application and understanding, not on memorising syntax. Consider if you created any functionality during the tutorial that you can use for your project. It’s also important that you accept that it will take time before you understand what you’re doing during these tutorials. Just go with the flow and embrace uncertainty. Don’t get discouraged and give up.
Step 6: Start building your application
At this point, you’ve learned the basics: HTML, CSS and the language of your choice. You will also have familiarised yourself with the command line interface and set up your coding environment.
In October, I started working on 972VC by myself after I had completed the above tutorials and by the end of November, the app was live.
Learn how to search
During the first few days of development, I was unable to perform even the most basic tasks; in fact, I ended up spending more time on Google than coding. The same will happen to you, which is why you shouldn’t spend your time memorising syntax. Learn how to search effectively and be resourceful as this will be your most important skill.
Lean startup principles
You’re at a distinct advantage compared to an experienced developer. Since you have no coding knowledge or experience, you will need to strip your app idea down to its bare necessities. Focus on the core of your product and simplify wherever possible.
No strain, no gain
Don’t rely on others to develop your app for you.
You need to be persistent and tenacious. If you’re a non-techie, learning to code requires a different mindset than you’re used to, so of course it will be difficult. But by tinkering with a problem for several hours, you will gradually start to understand how everything (sort of) works. This will be the most valuable lesson during development. As your learning progresses, you will no longer be content with the first solution you find — you will start to look for better ways to solve your coding problems.
Stack Overflow is an online community and one of the best resources there is when you’re learning to code. Ask lots of questions, but don’t expect others to solve every problem. In order to advance your learning, you should be revisiting the issues you’re experiencing even if you’ve posted these on Stack Overflow. You might even end up answering some of your own questions and contributing to the community.
Coding is like a jigsaw puzzle
At a basic level, you can think of coding as an interactive jigsaw puzzle. Break your idea down into smaller manageable pieces that can be put together to build the app.
Don’t spend weeks or months ploughing through books, tutorials and screencasts. Instead, focus on understanding the programming language and the developer mindset, and learn by doing. This is why it’s important that from the start you have a clear idea of what you want to build. Use tutorials, blogs and other resources when you need to learn how to do something specific. And be sure to check out and learn from open source projects as well.
Open source can be the most wonderful discovery for non-techies learning to code as the functionality you seek has probably been open sourced so you don’t need to reinvent the wheel. If you need a content management system, you can find robust open source software that is freely available.
Consequently, you will often be engaged in a ‘dirty hands approach’ to learning: you’ll find code that solves your problem, try and get it to work in your app, and then take it apart, ask questions, and modify the code to your purpose.
Code daily and deploy frequently
Try to work on your app on a daily basis, even if it’s only for a few minutes, especially in the beginning of your project as it’s important to become comfortable with your coding environment. Don’t worry about best practices and conventions. In the beginning that’s just noise, but you’ll want to learn those principles as you progress.
I’d also suggest that you deploy your app on Heroku, AWS or another hosting service as soon as possible in order to avoid future issues. Deploying frequently will save you time when you’re finally prepared to launch your app.
Celebrate small victories
Learning how to code is hard and it’s even harder if you’re doing it by yourself. Therefore, you need to consider each step forward, regardless of how small, as a legitimate success.
Should you learn how to code even if you don’t want to be a developer?
By following the steps above and adapting them to fit your needs, you may end up building a simple application over a few months. But, more importantly, you’ll have empowered yourself, and become a more valuable member in your workplace. You’re no longer the clueless non-technical founder or team member, but someone who understands code at a basic level and can communicate with developers and web designers. You’ll also have the ability to execute your own ideas without spending large sums on outsourcing. In the case of 972VC, the total cost to build and launch the app was $9 (a RailsCasts pro subscription) plus the domain. Furthermore, if you then choose to outsource the technology to build an MVP, you’ll be in a stronger position to negotiate and oversee development.
And if you decide to take your MVP and go big (i.e., the do-it-yourself approach), you’ll learn all the different roles of a startup: how to incorporate a company, accounting, sales and marketing, engineering, UX/UI design, product management, business development and administration.
Since I launched 972VC, it has become one of the most comprehensive resources for Israeli startups that seek funding in relation to private equity and venture capital, and accelerator and incubator programmes. In addition, it offers information on angel investor groups, crowdfunding platforms, coworking spaces and nonprofits that embrace ‘Technology for Good’ and help startups and entrepreneurs that focus on social technology.
If you’re part of the Startup Nation funding ecosystem and not on 972VC, join the community!
On a side note, if you’re a startup looking for Israeli angel investors, have a look at Eden Shochat’s crowdsourced spreadsheet, and if you’re interested in the Israeli startup ecosystem, see Ben Lang’s Mapped in Israel.
I’ve compiled a list of resources to further help you on your journey to learn how to code and build your app. These are resources I either used or came across in building my app, and ultimately made 972VC possible. I hope they will be of equal benefit to you.
- Command line interface: Terminal Cheatsheet for Mac
- Installation guide: GoRails, thoughtbot
- Software package manager for OS X: Homebrew
- Code editor: Atom, Sublime Text, Vim
- Tutorials: CSS-Tricks, Code School, Codecademy, Jumpstart Lab, RailsCasts, RubyMonk, Tealeaf Academy, The Ruby on Rails Tutorial, Try Ruby, Tuts+, UT on Rails
- Ruby on Rails open source projects: Open Source Rails
- Authentication: Devise
- Autocomplete: jQuery UI, Select2, Selectize, typeahead.js
- CMS: Active Admin, RailsAdmin
- Front-end frameworks: Bootstrap, Foundation
- Full text search: Algolia, Elasticsearch, PgSearch, Solr, Thinking Sphinx
- Icons: Font Awesome
- Pagination: Kaminari, will_paginate
- Pretty URLs: FriendlyId
- Database: MongoDB, MySQL, PostgreSQL
- Forums: SitePoint, Stack Overflow
- Code editors in your browser: CodePen, JSFiddle
- Web based office suite: Google Docs
- Ruby style guide: Community-driven Ruby coding style guide
- Version control: Git
- Repository hosting service: GitHub
- Web hosting services: AWS, Engine Yard, Heroku (Nezumi for mobile and Adminium for your database backend), OpenShift, Rackspace
- DNS and domain management: DNSimple
- Browser testing: BrowserStack
- Website security scanner: Detectify
- Load testing: Loader.io
- Analytics: Google Analytics, Segment
- Newsletter: MailChimp, TinyLetter
- UI/UX tool: Sketch
- Domain generators: Domainr, NameMesh, NameRobot, Naminum, Panabee
This is the first part in a two-part series. You can read the second part here.
If you enjoyed this story, please click the 👏 a few times so other people can see it too.