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 simple 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 because that way if I failed to build the app, I could at least open source the spreadsheet and make 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. 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 after I had completed the above tutorials and by the end of November, the app was live.
Lessons Learned
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 throughout the project. 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 previous 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 novice, 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.
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.
Communities
Stack Overflow is an online community for developers. It’s a great place to learn and ask questions when you’re stuck. Unfortunately, it’s not always such a novice friendly place, but there are many stand up community members that will go out of their way to help you.
Ask questions, but don’t expect others to solve your problems. Keep working on 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.
Another great resource you should know about is CodePen, a social development environment for front-end designers and developers. I use CodePen for design inspiration and to view code snippets.
There are also Slack channels and other online communities that you can join to further your learning.
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.
As you complete these tasks, you will see real progress. This will help reduce your overwhelm and risk of losing interest. Don’t lose interest.
Tutorials
Don’t spend weeks or months ploughing through books, tutorials and screencasts, unless you prefer a more theoretical approach to learning.
Instead, focus on learning 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
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. For example, if you’re looking to lazy load images or remove unused CSS, you can find robust open source projects that are 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, take it apart, ask questions, and modify the code to fit 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 that you 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 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.
Technologies
Be prepared to learn multiple technologies as it will (probably) not be enough to learn only a programming language in order to build your app. You might end up using technologies such as Git, JavaScript and PostgreSQL.
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 weeks or months.
But, more importantly, you’ll have empowered yourself, and learned a new skill. Perhaps you’ll become a more valuable member in your workplace as you now understand code at a basic level and can communicate better with developers and 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 plus the domain. If you choose to outsource development, you’ll be in a stronger position to negotiate.
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.
Today: 972VC
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 ‘Tech for Good’.
If you’re part of the Startup Nation funding ecosystem and not on 972VC, join the community!
Resources
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
- Software package manager for OS X: Homebrew
- Code editor: Atom, Sublime Text, Vim and Visual Studio Code
- Tutorials: CSS-Tricks, Codecademy, Jumpstart Lab, RailsCasts, RubyMonk and The Ruby on Rails Tutorial
- Ruby on Rails open source projects: Open Source Rails
- Authentication: Devise
- Autocomplete: Algolia, jQuery UI, Select2, Selectize and typeahead.js
- CMS: Active Admin and RailsAdmin
- Front-end frameworks: Bootstrap, Foundation, Tachyons and Tailwind CSS
- Full text search: Algolia, Elasticsearch, PgSearch, Solr and Thinking Sphinx
- Icons: Font Awesome
- Pagination: Kaminari and will_paginate
- Pretty URLs: FriendlyId
- Database: MongoDB, MySQL and PostgreSQL
- Forums: SitePoint and Stack Overflow
- Code editors in your browser: CodePen and JSFiddle
- JavaScript to CoffeeScript compiler: Js2coffee
- Web based office suite: Google Docs
- Ruby style guide: Community-driven Ruby coding style guide
- Version control: Git
- Repository hosting service: GitHub and GitLab
- Web hosting services: AWS, Engine Yard and Heroku
- DNS and domain management: DNSimple
- Browser testing: BrowserStack
- Website security scanner: Detectify
- Load testing: Loader.io
- Analytics: Fathom, Google Analytics, Segment and Simple Analytics
- Newsletter: Mailchimp, Revue and Substack
- Privacy policy generator: iubenda
- Design tool: Figma, Sketch
- Domain generators: Domainr, NameMesh, NameRobot and Panabee
This is the first part in a two-part series. You can read the second part here.