If you’re entering college or looking for a career change, now is the time to considered programming. Not only is it an exciting, relatively new field, job growth in this sector is projected to grow by 8% from 2012 to 2022. Additionally, several fields of computer programming have been included in the Best Jobs of 2015 by US News & World Report. If you’re sold, then here’s everything you need to know about becoming a programmer.
A computer programmer, also known as a coder or software developer, is someone who writes in a language the computer can understand to allow it to solve a problem. This is an essential part of technology, because without the proper coding our computers, smartphones, apps, and websites wouldn’t work properly.
One way to think of a programmer is as an author of a book. The author uses words to put together sentence structures that make up the content of the book, a programmer puts together ‘sentences’ that give tell the computer what to do.
Programmers usually have a specialization in one language, such as XML, PHP,Perl, HTML, or SQL. There are some programmers who are more generalist and are familiar with several different code languages.
On top of writing and creating programs, computer programmers are also responsible for testing, debugging/troubleshooting, and maintaining the source code of computer programs.
Throughout the process of writing source code, programmers are often experts in many different subjects. This can include knowledge of the application domain, specialized algorithms, and formal logic.
Unlike many other technical professions, programmers do necessarily need to be licensed or even pass any standardized certification tests in order to identify themselves a “programmer” or even a “software engineer”. However, it is illegal for someone to call themselves a “professional software engineer” without a license from an accredited institution in many parts of the world.
Since programming encompasses many different areas, there is a debate as to whether licensing is required or not.
Generally speaking, programming is self-governed by the entities which require the programming.
If you want to learn how to become a programmer, here the best way to achieve that goal is by either attending an educational institution, participating in online classes or bootcamps, or learning on your own.
According to U.S. and World Report, “Since there is no single, universal programming language, mastering multiple languages is a vital component of earning your computer science degree.”
Here are the top computer science schools for programming language training.
Carnegie Mellon University - Globally recognized as a leader in computer science and offers specializations in programming languages, artificial intelligence, systems, and theory.
University of California - Berkeley - This is the largest department at Cal and focuses on developing technological solutions to societal-scale problems such as sustainable energy, healthcare, and safety and security.
Stanford University - Since its founding in 1965, the Stanford Computer Science (CS) Department is a leader computer science research and education.
Massachusetts Institute of Technology - The Electrical Engineering and Computer Science Department happens to be the largest department at MIT and prepares students to become leaders in diverse career fields ranging from academia, biomedical technology, finance, consulting, law, and nanotechnology.
Princeton University - The Department of Computer Science focuses on theory, networks/systems, graphics/ vision, programming languages, security/policy, machine learning, and computational biology.
Cornell University - This Department of Computer Science teaches everything from theory, programming languages, robotics, database systems, artificial intelligence, and graphics.
University of Pennsylvania - America’s first university research opportunities in robotics, vision, natural language processing, databases, formal methods, real- time systems, computer architecture, machine learning, programming languages, graphics, network security, software engineering, and bioinformatics.
University of Texas - Austin - UTCS offers research areas ranging from AI, graphics, data mining, programming languages, security, computer architecture, and formal methods.
University of Illinois - Urbana- Champaign - This innovative program covers all aspects of computer science, such as systems and networking, artificial intelligence, database systems, information retrieval, and graphics.
University of Wisconsin— Madison - As one of the oldest, and most respected, computer science programs in the country, students have the opportunity to research, study, or develop their professional computer science skills.
If you want to learn computer programming or enhance your skills on a budget, and in a shorter amount of time, you can also attend one of the following coding bootcamps.
Grand Circus (Detroit) - iOS
The Flatiron School (New York) - Ruby on Rails
Tech.co has a total of 33 recommended coding bootcamps if the camps listed above do not have the subjects you’re interested in or are not near your location.
You can also attend a bootcamp remotely through CareerFoundry, Treehouse, Udacity, Tealeaf Academy, or Firehose.
If money is an issue, you can also learn how to code for 100% free by visiting one of the following websites.
Coursera - Provides more than 100 free computer programming courses. Also has specializations from the University of Washington and Stanford.
Udemy - Video courses in areas like Programming for Entrepreneurs - HTML & CSS or Introduction To Python Programming.
edX - Offers free courses like Introduction to Computer Science from Harvard University.
HTML5 Rocks - A Google project that lets you play around with HTML5 code.
MIT Open Courseware - Offers introductory courses and even a course on the theory or coding.
Hack.pledge() - Learn from a community of leading programmers.
Whether you attended a university, bootcamp, online course, or learned how to program on your own, you can learn the skills it takes to become a programmer. But, how exactly do you get your career started?
As you’re probably already aware, programmers usually fall into one of the following categories:
While learning how to become a programmer, you probably focused on one of those areas. Even if you learned several skill sets, you should at primarily focus in one specialization that you’re the best at while getting started and looking for work. In other words, you want to become an expert in one field.
No matter on what niche you settle on, make sure you can continue to learn and stay up-to-date on the latest industry trends. Technology is constantly evolving, which changes the programming world frequently. If you can’t stay on-top of the latest innovations, then how can you expect to be competitive?
As a freelancer, you’ll probably be working from work. Unlike a fellow freelancers like blogger, programmers require a desktop, large monitors (some even prefer a dual-monitor setup), and a reliable keyboard, such as a mechanical keyboard. This means you can’t take all of your gear and work in the nearest coffee shop. So, you need a room large enough to accommodate your equipment.
Your workplace should also be free of distractions. If you have roommates or a family, then your workplace should be in a seperate section of the house. Other distractions like your phone, emails, meetings with clients, and almost any other background, like air conditioning vents, can distract you while working. Make sure your workplace is quiet and that you schedule times for emails and conference calls during the hours when you’re not coding.
If you do have to share an office, conference room, or your home is too noisy, you could invest in some noise-cancelling headphones so you won’t get distracted from ambient sounds.
Your website will provide potential clients with a glimpse into your work and how to contact you. It’s also one of the best ways to brand yourself. On top of a logo and business cards, your website proves that you’re a talented professional - if you can’t design your own website how can you handle coding a client’s site?
When coming up with your website domain, make sure that it’s easy to remember and spell and describes what you’re doing. For example, johnsmithcoder.com would be more effective than johnsincredibleprogrammingsite.com.
As for the actual site, make sure that it has an introduction on who you are, what services you provide, examples of your previous work, and your contact details.
One of the most important components of your website will be your portfolio. Not only does this highlight your previous work, it’s a project that will be continually worked on - which means that while you’re working on your portfolio, you’re continuing to develop your skills and expand upon your ideas.
Jacco Blankenspoor from Sitepoint suggests you keep the following in mind:
You can start building your portfolio through sites like WordPress, Behance, or Dribbble.
You have built your website and your portfolio, now it’s time to promote yourself so you can entice others to hire you. For starters, you have to realize you may not get ranked in Google for your name - a common name like John Smith, for example, may be tough to rank for. If that’s the case, then you should be more concerned with getting your name out there socially and through your niche. You can use social media platforms to accomplish this by engaging industry influencers on Twitter, creating instructional YouTube videos in your area of expertise, or answering questions on sites like Quora. Not only does interaction with like-minded people increase your chances of getting recognized, it also helps prove that you’re an expert in your niche. Additionally, if you could become a guest blogger on a leading publication or blog, such as Smashing Magazine or Inc.com, you could reach an even larger audience while continuing to share your knowledge.
Besides networking on social media networks and sharing your expertise by guest blogging, you also need to network both online and offline. You should become active on online communities like Designer News or r/webdev. You also need to attend industry events where you can meet influencers and potential clients face-to-face. You can use Meetup to find a programming event near you.
Another great way to get your name out there is by working for free. Whether it’s do some programming for a friend, family member, early stage startup, or local nonprofit, this is a chance for you to work on your skills, add to your portfolio, and potentially land a couple of referrals or testimonials if they’re satisfied with your work.
Finally, you can contribute to open source projects as a way to promote your brand. While there are well-known open-source sites out there like GitHub, you can also discover exciting open projects on Open Hub or from lists created by Opensource.com and InfoWorld.
One of the most important things to remember as a freelancer is that you can’t always expect clients to come to you. You have to go out there and find gigs on your own if you want to bring in a decent income. But, where do you begin with job search?
Do you have a friend or family member who has a website that could use a major overhaul? You could reach out to them and offer your services - even if it’s free at charge or at a discounted price. You could also go through your contacts and get in touch with former colleagues, local business owners, your attorney or accountant, or even previous clients if you have them.
You can also leverage your social media connections. LinkedIn, for example, is a great location for freelancers to find work. Even if your contact isn’t in need of your services, they may know of someone who could use a programmer. Your existing network should be one of the first places to turn to when it’s time to start finding work. There’s always a possibility that someone you know could use your skills, so it’s worth your time and effort to reach out to them and let them know what programming skills you’re currently providing.
Outside of your contacts, freelancing websites and job boards are also perfect locations to secure work. There are a lot of sites dedicated to connecting freelance programmers with clients, but are some of the best recommendations.
Upwork - Offers both short-term and long-term jobs for beginners and experts.
Elance - With over 94,000 job postings every 30 days, Elance is one of the largest freelancer job sites.
Toptal - Matches seasoned programmers with clients like AirBnb to up and coming startups.
Freelancer - Here you can compete with fellow programmers to land a job.
Guru - Gives you chance to showcase your work and get matched with prospective clients daily.
Krop - Not only does Krop have a portfolio builder, there’s also a job board that can be narrowed down to location.
GetACoder - GetACoder offers millions of smaller-scale projects for programmers from across the world.
StackOverflow - Not only is this a leader Q&A site for programmers, there’s also a job posting section that connects companies with programmers.
Envato Studio - Freelancers can name their price.
WordPress - This job board from WordPress has openings in areas ranging from design to plugin development.
Smashing Jobs - An excellent job portal from Smashing Magazine.
GitHub - Programmers can use the popular open- source site to find jobs based on niche or location.
Project4Hire - Here you can secure a job based on your skill set.
Crew - You can apply for the projects that apply to you.
SimplyHired - You can find a programming job based on your location.
Because programming is a booming industry right now, leading programmers may now be able to be represented by agents. For example, 10x Management has connections with major companies like Google, Live Nation, and American Express. In-demand programmers could then strike-up a deal with one of these companies.
If you happen to be an extremely skilled programmer, you may be contacted by an agency.
You’ve just landed a couple of clients. Now it’s up to you to properly manage them so that they’ll become recurring clients or will be more than willing to refer you to their contacts. Inc.com had put together a ‘Super Six’ list that can help strengthen your relationship with clients.
1. Develop a personal relationship with your clients. Go beyond simply a working relationship and learn information like their family situation and what their interests are.
2. Communicate frequently. Communication can prevent any misunderstandings and help make projects run more smoothly. Keep your clients updated on the process of a project and don’t hesitate to them when you’re not available and what can or can’t be done.
3. Agree on all goals, timelines, strategy, and budget. In short, both parties need to agree on everything --- in writing --- prior to the launch of the project to prevent any setbacks using a scope-of-work document or something similar.
4. Be a counselor. Offer your client advice when appropriate to you skills, even if you weren’t hired for that project. It helps prove your value.
5. Listen. Being a good listener can also prevent any misunderstandings and setbacks.
6. Be Honest With the Budget - You have to be open and honest when discussing your budget with a client. The last thing you want is to argue with a client over payment.
One of the most important parts of client management is tracking the time you spend on a project. Tracking the time will help you view your progress, manage costs, and is an essential part of invoicing. Because time tracking is so important, it’s often been called the “programmer’s secret weapon.”
When you track your coding time, you first want to break down the tasks involved with the project. This can be either by the various languages you’ll be working with or by dividing tasks, such as development or testing. You’ll also need a method for tracking these times. Believe it or not, this doesn’t have to be complex. You could use a pen and paper or easy-to-use software.
Due.com is one company that provides simple time tracking software. It comes with a timer that pops out so you can continue working in a separate window. Because you can use Due.com for billing as well, you can easily import time information into your invoice.
According to the Bureau of Labor Statistics, the median annual wage for computer programmers in 2012 was $74,280, which would come out to $35.71 per hour. However, depending on your field and location, programmers could make anywhere from $43,640 to $123,490.
US News reports some of the top earning positions related to this field include software developer, civil engineer, database engineer, computer programmer, and web developer.
The best paying cities for computer programmers include Bethesda, Maryland, Anniston, Alabama, Boulder, Colorado, Santa Fe, New Mexico, and Seattle, Washington.
As a freelancer, however, you probably won’t be able to rely on a yearly salary. This means that you’re going to settle on a rate that you charge clients. Freelancers Union has a simple mathematical equation to help you figure your rate:
(annual salary + annual expenses + annual profit) ÷ annual billable work hours = your base hourly rate
When determining your rate, keep the following in the mind:
Freelancers must also determine if they want to be paid hourly, daily, or by project. Here’s some advice on how to figure out which rate to use.
Chron.com recommends using this method :
Multiply the number of weeks per year by 40, the number of hours per week, to find the number of hours worked per year. In this example, multiply 40 by 52 to find the total hours for the year equals 2,080. Divide the annual salary for the employee by the number of hours to find the hourly rate.
The benefits of hourly are that it’s easy to figure determine and to negotiate. It can also accommodate various job scopes. You should use hourly rates for long-term projects, when timelines aren’t defined, and when you’re unsure that you’ll be paid for project changes.
If you’re working on a smaller project that doesn’t require much of your time, you may want to consider getting paid daily. It may not be the most cost-effective route, but it does prevent you from doing a bunch of negotiating. Choosing daily rate will most likely depend up on the project, for example, if you are asked to work in house for a short period of time.
If you charge different rates for different clients, maximize productivity, working with a client on a budget, and know that you can complete the project quickly, you may want to get paid on a project rate. This rate can be tailored for the scope of the project and can help you budget more efficiently since you can predict how much money you’ll be bringing in.
Project rates can sometimes be difficult to determine, but they can also help you establish flat package fees.
One of the best ways to decide on a project rate is to do some research and figure out much time you’ll be spending on the project. You can then multiply the hours it will take you to complete the project by your hourly rate.
Keep in mind, even though you have determined the rates for your projects, the longer you’re a programmer, the more skilled and in-demand you’ll become. This means that you’ll have to eventually raise your rates. It’s recommended that when you receive a new client, you raise your rates by 20%.
Now that you’ve settled on a rate and have some clients under your belt, it’s time to focus on arguably one of the most important tasks for each and every freelancer: getting paid. When creating an invoice, be certain to include the following basic components in your invoice:
Date - This is the date that you’re sending out the bill. Also include the date you expect it to be paid. Most invoices are to be paid within 30, 60, or 90 days after the invoice is sent.
Amount - This is the total amount that you’re charging the client for your services.
Invoice Number - Numbering your invoice is an effective way to manage your invoices by seeing which invoices have been paid and which ones are pending. It’s also useful for tax purposes, such as situations like being audited. A consistent sequential order, such as 001, is perfectly acceptable to use.
Contact Details - Don’t forget to add the name, address, and contact information for both you and your client. This makes it easy to get in touch with each other if there are any questions or concerns involving the invoice.
Description of Work - This should be an itemized list that describes all of the work that you performed for the client.
When you signed a contract with your client, this should have been covered. If you don’t have it in writing, then you should at least have some sort of confirmation on how and when you’ll be paid for your services - email correspondence should be can be an acceptable form of evidence in case you have to seek legal action.
Payment policies should detail the percentage you charge for late payments, if you offer discounts for early payments, if you’ll be compensated for any additional work, and how money you need in advance prior to starting a project.
Another important policy is the discussion of when you hand over your work. Most freelancers do not turn the final project into the client until they are paid in full.
How do you preferred to get paid? Do you accept checks, credit cards, or payments from third-party payment gateways like PayPal? Accepting a number of payment options makes it easier for your client to pay you more quickly. Your client should be aware of all possible payment options when discussing your payment policies. Services like Due.com allow you to choose several payments, such as credit cards and PayPal - which comes in handy if you know that your client only accepts PayPal.
Not all freelancer have to be concerned about a business structure, but what happens if your business takes off and you have to start a company? If that’s the case, you may to form a LLC, Corporation or Partnership, which is important for legal and tax purposes. However, most states exempt services from sales tax.
Even if you’re a sole proprietor, you’re still responsible for paying taxes. So make sure when billing that you set aside money to pay your taxes every quarter.
Give your invoices a touch of professionalism, and make them stand out, by branding them. Due.com allows you to add your logo, which could be something as simple as your initials in an interesting font and color. With Due.com you can also select the template that best suits your brand.
There are a number of invoicing software platforms that give you the ability to create and send invoices quickly. Since you’re busy programming, services like Due.com can save you a ton of time and stress since you can make an invoice in a just a matter of minutes.
Another perk of using software like Due.com is that you can store your clients information, such as their contact details and payment options. This is helpful if you work with them again in the future.
Now that you know how to create invoices, it’s time to figure out how you’re going to get your bill paid on-time - or even faster.
Invoicing should be a priority for your business, which is why you should bill immediately after the completion of a project. But, what if you have multiple clients? Taking the time out of your hectic day to invoice can be a problem. That’s why you need to create an invoicing schedule.
When you decide to invoice your clients is completely up to you. You can bill weekly, bi-weekly, or monthly. Just keep in mind that the sooner you invoice, the sooner you’ll get paid. However, you may also have to consider the bill schedule of your clients. If they conduct their billing only on the first of the month, then you may to build your schedule around their cycle.
When you establish your payment policies, your client should inform you where to send your invoice. Just because they’re managing the project doesn’t mean that they’ll be the person responsible for paying your invoice. That may be handled by the client’s accounting department or even an outside accountant.
If your client is paying your invoice, then you need to know where you’re going to send the invoice, such as their physical address or email address. If you’re getting paid through PayPal, for example, then you need to have the client’s email address.
You’ve probably noticed that a lot of invoices use the term “net.” The problem with that is not everyone is familiar with the term. Avoid any confusion by using a phrase like “payment due within 30 days” as opposed to “net 30”.
Did you know that being polite can actually increase your chances of getting paid on time by 5%? By including polite terms like “please” and “thank you” at the bottom of your invoice you’re improving your chances of getting more quickly.
If you have frequent clients, then you may want to consider recurring billing. This means that you can automate your invoices. With software like Due.com you can set it up so that your client’s credit card or bank account is automatically charged on the same day of each month - which also prevent a client from not paying your bill. Not only does this ensure a faster payment, it saves you time since you don’t have to create an invoice. It also makes bookkeeping easier since you know how much money you’re bringing in on a specified date.
If you’re working on a larger project, then you should discuss a deposit with your client. For example, you could require a 25% deposit upfront, 25% during the halfway point, and the final 50% upon completion. By having a deposit or a payment upfront can help you cover any overhead costs during the course of the project and prevents you from getting completely stuck with a bill if the client.
Becoming a programmer can be an exciting and profitable career choice. Before embarking on your journey, make sure that you learn and maintain a set of specialized skills, build an online portfolio to showcase your work, promote your services, determine your pay rate, and invoice properly.