It’s no secret that software development has exploded in the past 20 years. New software startups pop up like dandelions in the spring. It then follows that a lot of people think software development is a good career choice and are afraid of missing out on a lot of great opportunities.
Software developers are, in general, pretty opinionated. I doubt this is unique to developers, but it gets tiresome when you’ve dealt with it for years.
If we’re not fighting over what operating system is better, then it’s what language is better. If it’s not that, then it’s code editors, or databases, or frameworks, or bug trackers, or development processes, or…or…or. It’s like we enjoy fighting.
In a time where more and more people are becoming developers, it’s not enough to be just “a developer” anymore. No, to feel superior now, developers need to somehow differentiate themselves from both the non-developer “rabble” and their fellow developers.
This mentality has lead to more coding languages being developed that purport to “fix” issues with other languages. New frameworks are built to “fix” issues with previous frameworks. And on and on.
All this leads to a huge amount of choices, opinions, and resources. Naturally, that makes starting to learn, daunting.
Since I’m a developer too, I’m susceptible to the same opinions and biases that I just railed against.
The difference is, I’m right.
I’m kidding, seriously, calm down everybody. Here are my suggestions.
Choose your weapon language
As someone once said: “the weapon doesn’t make the man.” It’s probably a quote from some B martial arts movie or Dragonball Z, but the philosophy holds true for programming languages.
A good developer is a good developer regardless of language. Learning any language will help you understand the core concepts of programming.
However, you need to start someplace, and if you pick your first language wisely, you’ll drastically shorten the time to hit your goal.
Picking a language boils down to what you want to do.
This is a quick list of general development goals and what language(s) are your best options to get there:
(NOTE: this is not meant to indicate that these are the only languages that you can use for a given domain, just my suggestion on what to start with)
- Front-end web development (user interface and interaction): JavaScript, HTML & CSS
- Back-end web development (services that front-end web apps and mobile apps call out to): Ruby, Python, JavaScript, or PHP
- Mobile development: Swift (iOS) or Java (Android)
- Windows development: C#
- MacOS development: Swift or Objective-C
- Operating systems, file systems, embedded systems, etc: C/C++
- Game development: (C++, Unity and C#)
- Data Science: R
Naturally, there are other options for each of these. Javascript is useful for items 1-5, for instance. But the list is a good starting place as-is.
NOTE: A number of people contacted me and mentioned that in certain places, especially outside the US, the above list is different for back-end web development. In those locations, C# and Java are used more often than Python or Ruby. The suggestion is to check job postings where you plan (or hope) to work for the job and companies you want to work in and see what languages they require.
How to Find Good Resources to Start Learning
There are a ton of resources to learn to code out on the web. How do you sift through the chaff and find the real gems
Most resources fall into the following categories
- Books
- Videos
- Blogs/tutorials
- Courses
Books are the traditional go-to resource. Search Amazon.com for your topic and read reviews. Make sure that any books you’re considering are new. Languages change and older books could slow your progress.
A lot of people have gravitated to videos to learn coding and other topics. YouTube is the first place most people look.
Fair warning, this is going to turn up a bunch of crap. Look at how many subscribers a given instructor has, and watch some videos to see if their style and method works for you.
Another possible issue is that because the video is more difficult to update for new versions of a language (or corresponding tools), some videos might be outdated
For blogs and tutorials, a simple Google search like “best python tutorial” or “best swift tutorial for beginners” is a great place to start. As with videos, you’ll have to try a few to see how they work with your learning style.
Online courses are the newest resource on the scene. Codecademy is one that a lot of people find immediately.
However, after I talked to a lot of people who tried it, none really thought it did a good job. Free Code Camp or The Odin Project are both highly regarded for web development.
Udacity, Coursera, Udemy all have courses in different genres. Each has reviews so you can compare and only look at ones that helped others. My specific examples follow in the next section.
Where You Should Start, Specifically
Each development goal in the above list is different enough to require different starting points.
I’ll list the place that I’d recommend you start for each one. I have not personally tried all of them, but have come across them when doing research. There also might be better ones, and so if you know of any, let me know and I’ll update this list
- Front-end web development: Free Code Camp
- Back-end web development: Ruby (for Rails), Python (for Django), Javascript (for Node), PHP The Right Way, for places where C# and Java are used more often, see Windows development and Mobile (Java) development respectively for resources.
- Mobile development: Swift Lynda’s Swift Essentials (check your local library to see if you get a free Lynda account with a library card) or Flatiron school’s free Swift course, Swift Programming book or Java Head First Java, University of Helsinki’s MOOC, or Guru99
- Windows development: Head First C#, Pluralsight’s C# course
- MacOS development: Cocoa programming for OS X, or the same courses for mobile Swift
- Operating systems, filesystems, embedded systems: C++ How to Program book, C++ Tutorial for Complete Beginners
- Game development: See previous for C++, and Windows development for C#
- Data Science: R – Springboard, Swirl or Coursera’s R course
Once you pick your language and starting point and you start learning, some things will be obvious, but others will be difficult to understand.
You’re going to run into trouble and with concepts and code errors. That’s normal. We’ve all been there. Getting unstuck takes practice too.
How to Get Unstuck Once You’ve Started
Once you start learning to code, you’re going to run into problems that you don’t know how to solve.
This is normal and part of the process.
You don’t really learn unless you struggle through it. That said, you won’t always be able to move forward without some help. So how do you find that help?
First off, forget books. They aren’t a great place to start here, because the number and types of errors they can cover are so small.
Online is the easiest place to find help. Most devs look for solutions on StackOverflow or just google the error message (if they have one). Other solutions are to find newsgroups or forums dedicated to the language you’re using.
How to Use Google to Get Unstuck
When you first try to google an answer to your problem, you’re going to run into the issue of what to search for.
Experienced developers are really good at this part, but unfortunately, it’s hard for beginners, who need it the most. So here I’ll give you some expert hints on how to improve your search results.
- Always include the name of the language you’re using. If you’re using a specific tool, database, or framework, include that as well. Don’t include all of them, just the ones that you believe are relevant. This will take practice.
- If you’re getting an error message, include that in quotes. Edit the message to contain only the core of the message so it doesn’t reference any files, classes, paths, or filenames that are specific to your program or computer. The trick here is to make the error message as specific as possible while still being general enough to apply to others who are using the same language/tool/etc. but in a different context.
- If you’re working through a publicly published problem from a book or course, add that information to the search.
- Explain what you’re trying to do, with the fewest words. This is tough for developers of all levels. For a beginner, you may have trouble coming up with the right terminology. This is where the books, tutorials, and course materials come in handy. They should use the right language if you’re doing something similar to what’s covered in them. If not, you’re going to need to try some different wording. Remember, other beginners, are going to be having problems too and might explain the problem the same way.
A few examples I’ve used (minus the quotes):
- ‘ruby rails form helper checkbox’ – I included ‘rails’ because I knew the form_helpers were part of Rails. I could remove ‘ruby’ here since ‘rails’ is ruby-specific and should narrow the search fine. And yes, I know it’s “Ruby on Rails” but searching google for ‘on’ just doesn’t help.
- ‘ruby devises inevitable after invited path’ – Here ‘devise_invitable’ is a gem, a Ruby code library (collection of reusable code) and I wanted to know more about its
after_invited_path
method. Google usually gives better results when you remove the underscores, ‘_’. If not, try adding them in and enclosing the underscored words in quotes: “devise_invitable”, “after_invited_path”. - ‘java “cannot refer to a non-final variable”‘ – The error I was getting included “cannot refer to a non-final variable” but referred to files specific to my project before that phrase, so I didn’t include those parts.
Once you find a solution, DO NOT COPY AND PASTE!
This is a huge no-no. Copying code verbatim from the web is a good way to slow your progress and keep you from becoming a better developer.
You need to understand the code, adapt it to your situation, try it, and rinse and repeat.
There’s a risk of copying bad or wrong code, but you also may find yourself going deeper down the rabbit hole.
If the code you copy or adapt doesn’t fix the errors or creates new ones, you could be making your code more complicated and harder to understand all while trying to fix a problem.
So go slow, understand the changes you’re making, and don’t be afraid to back out and try a different solution. Sometimes the problem you’re seeing is caused by multiple issues, but not usually.
Getting Help From a Person
Since googling for a solution is an art that takes practice, it’s easier and quicker just to ask someone.
That assumes you have access to someone, of course.
A couple of ways to find someone to ask are, starting with the best:
- Friends or family, or friends of friends or family
- Local meet-ups, a la meetup.com, or user groups (google for ‘ruby user groups near me’ or similar). This is a great idea anyway, in order to build a network of peers, mentors, and possible employers. * campus groups if you’re in or near a college campus
- Reddit.com (naturally) – r/learnprogramming is a good place to start or language-specific subreddits like r/learnjava
- Local, virtual groups on Slack. Google for something like ‘tech slack <my city>’ or ‘developer slack <my city>’
- IRC, Internet Relay Chat. This is what slack has modernized and has been around for decades. A surprising number of tech companies have a presence on IRC. Google ‘<my language> IRC channel’ to find one. * Facebook groups (although I’ve found these to usually be lower-quality)
If You Work Better With More Accountability and People, There Are Other Options
Self-teaching is great but it takes a lot of work.
You have to figure out what to learn and where to learn it from.
You need to understand how to get unstuck and what projects to do and how to find people to meet to build relationships with.
Furthermore, you’re not held to any commitments other than your own. For some people, that’s enough. Others, myself included, work better when held accountable to others.
There are 2 main alternatives to self-teaching that address most of the difficulties, albeit for a price:
- Degree programs at universities
- Coding boot camps
Which is best for you is too big a topic for this post, but if you’re interested you can direct message me or add a comment and we can chat.
I hope this is useful. If there are parts that are unclear, or you feel something is missing, let me know and I’ll revise it.
Let me know what you think about this article in the comments section below.
If you find this article helpful, please share it with others and subscribe to the blog to support me, and receive a bi-monthly-ish e-mail notification on my latest articles.