The Student Room Group

Is it possible to become a professional programmer through self learning?

no university or colleage, just watching youtube, reading books and doing some freelance projects. What are the chances for you to get employed this way?
Yes of course it's possible. However, if you're starting afresh as a novice programmer, then the amount of effort you will need to put in will be about the same as the amount of effort you'd need to put in for a 2-3 year degree course - there's really aren't any "shortcuts". Teaching yourself anything is hard work; it requires a lot of persistence, a lot of trial-and-error, and a lot of time.

Employers are primarily looking for strong evidence of technical and problem solving ability - a degree is only one way to show evidence of this.

With or without a degree, you need to be able to show that you are competent in a fairly broad range of "bread n butter" programming skills (Many which you would normally pick up as part of a degree). The reality is that you can pick up all of them by working on your own projects (and working on other peoples' open source projects), and by spending time online following tutorials, online courses, videos, books, etc. Even on a degree course, most of the things you'll learn are really "self taught" - the only difference with a degree is that you have better access to resources and lecturers. (But without a degree, you still have google, forums, StackOverflow, etc.)

The kinds of things you need to learn includes most or all of the following:

Be "fluent" and confident using at least one widely-used high-level general-purpose programming language (e.g Java, Python, C#, C++).

Have a working knowledge of large parts of the standard library for whichever language you're proficient with.

Understand how to troubleshoot problems using your developer tools; particularly the debugger.

Confidently able to explain OO tools and concepts (Inheritance, Polymorphism, Encapsulation, Abstraction, SOLID Principles, GoF Design Patterns)

Demonstrate logical thinking and the ability to trace through some non-trivial code on pen&paper

Understanding some more advanced programming topics such as concurrency, asynchrony and networking

Some exposure to databases and SQL - understand 3NF and entity relationship modelling

Know how to use data formats such as XML or JSON.

Be able to parse text data, particularly RegEx is useful to know, but common operations such as string splitting, matching, trimming, etc are important

Grasp common fundamental data types and how those work in different situations - particularly IEEE floating point types, characters, integers, arrays.

Understand binary, hexadecimal, and be able to apply bitwise operations in code

Know common data structures and algorithms such as Linked Lists, Binary Trees, Sorting, Searching, Hashing, etc.

Be able to write automated tests / unit tests in whichever language you use

Demonstrate some "front end" knowledge - Ideally using a UI framework app (e.g. for mobile or desktop), but just being able to use HTML/CSS/JavaScript to create dynamic web pages would cover some of those skills.

Exposure to common development tools - particularly version control systems like git or SVN.

Able to express ideas using common design notations (which programmers understand) such as flowcharts, UML, ERM diagrams, Pseudocode etc.



There are several stages to applying for a programming job - the first is to make sure that your CV demonstrates that you're technically competent. If you can confidently and truthfully (i.e. without exaggerating the truth) put most or all of those things on your CV, then that's a good start which should get you noticed. Being able to write about any personal projects or open source projects which you've been part of is also helpful.

The second stage is often a technical test where employers are likely to want you to answer questions about code, explain (using your own words) the technical concepts you understand, and probably also write some code to solve a problem. Most worthwhile programming jobs involve these sorts of tests in an interview.

Employers generally look for general signs that you will be able to cope with complexity, and that you will be able to code in a commercial environment - they'll want to know that you understand why coding standards are important, why code needs to be readable, maintainable, that you understand the importance of testing, that you aren't the sort of person who just "re-invents the wheel", can look at some vague high-level requirements and be able to elaborate on those until you have enough information to write software which meets those requirements.

Lastly, it's important to remember that a degree often covers various other aspects of software development aside from the code, and those things are also important. In reality, you will never find a job which expects you to work 'just' as a programmer - nearly all programming jobs require you to do various other tasks related to programming as well, and employers want to know that you can do those - companies don't like hiring "code monkeys" (if they want code monkeys, they can outsource to a low-wage country like India or Ukraine instead). Companies like to hire well-rounded software engineers who solve real problems, so you'll need to demonstrate that you are able to think for yourself when it comes to looking at problems, and that you're capable of being able to work with requirements, design, etc.

Remember that when you're applying for any skilled job, the most important questions any employer will be asking themselves is whether the candidate they're interviewing is actually capable of doing the job, that they're not just going to end up hiring somebody who sits staring blankly into a screen, and that the person they're hiring is able to work on getting on with tasks by themselves without needing to have their hand held.
(edited 6 years ago)
Original post by winterscoming
Yes of course it's possible. However, if you're starting afresh as a novice programmer, then the amount of effort you will need to put in will be about the same as the amount of effort you'd need to put in for a 2-3 year degree course - there's really aren't any "shortcuts". Teaching yourself anything is hard work; it requires a lot of persistence, a lot of trial-and-error, and a lot of time.

Employers are primarily looking for strong evidence of technical and problem solving ability - a degree is only one way to show evidence of this.

With or without a degree, you need to be able to show that you are competent in a fairly broad range of "bread n butter" programming skills (Many which you would normally pick up as part of a degree). The reality is that you can pick up all of them by working on your own projects (and working on other peoples' open source projects), and by spending time online following tutorials, online courses, videos, books, etc. Even on a degree course, most of the things you'll learn are really "self taught" - the only difference with a degree is that you have better access to resources and lecturers. (But without a degree, you still have google, forums, StackOverflow, etc.)

The kinds of things you need to learn includes most or all of the following:

Be "fluent" and confident using at least one widely-used high-level general-purpose programming language (e.g Java, Python, C#, C++).

Have a working knowledge of large parts of the standard library for whichever language you're proficient with.

Understand how to troubleshoot problems using your developer tools; particularly the debugger.

Confidently able to explain OO tools and concepts (Inheritance, Polymorphism, Encapsulation, Abstraction, SOLID Principles, GoF Design Patterns)

Demonstrate logical thinking and the ability to trace through some non-trivial code on pen&paper

Understanding some more advanced programming topics such as concurrency, asynchrony and networking

Some exposure to databases and SQL - understand 3NF and entity relationship modelling

Know how to use data formats such as XML or JSON.

Be able to parse text data, particularly RegEx is useful to know, but common operations such as string splitting, matching, trimming, etc are important

Grasp common fundamental data types and how those work in different situations - particularly IEEE floating point types, characters, integers, arrays.

Understand binary, hexadecimal, and be able to apply bitwise operations in code

Know common data structures and algorithms such as Linked Lists, Binary Trees, Sorting, Searching, Hashing, etc.

Be able to write automated tests / unit tests in whichever language you use

Demonstrate some "front end" knowledge - Ideally using a UI framework app (e.g. for mobile or desktop), but just being able to use HTML/CSS/JavaScript to create dynamic web pages would cover some of those skills.

Exposure to common development tools - particularly version control systems like git or SVN.

Able to express ideas using common design notations (which programmers understand) such as flowcharts, UML, ERM diagrams, Pseudocode etc.



There are several stages to applying for a programming job - the first is to make sure that your CV demonstrates that you're technically competent. If you can confidently and truthfully (i.e. without exaggerating the truth) put most or all of those things on your CV, then that's a good start which should get you noticed. Being able to write about any personal projects or open source projects which you've been part of is also helpful.

The second stage is often a technical test where employers are likely to want you to answer questions about code, explain (using your own words) the technical concepts you understand, and probably also write some code to solve a problem. Most worthwhile programming jobs involve these sorts of tests in an interview.

Employers generally look for general signs that you will be able to cope with complexity, and that you will be able to code in a commercial environment - they'll want to know that you understand why coding standards are important, why code needs to be readable, maintainable, that you understand the importance of testing, that you aren't the sort of person who just "re-invents the wheel", can look at some vague high-level requirements and be able to elaborate on those until you have enough information to write software which meets those requirements.

Lastly, it's important to remember that a degree often covers various other aspects of software development aside from the code, and those things are also important. In reality, you will never find a job which expects you to work 'just' as a programmer - nearly all programming jobs require you to do various other tasks related to programming as well, and employers want to know that you can do those - companies don't like hiring "code monkeys" (if they want code monkeys, they can outsource to a low-wage country like India or Ukraine instead). Companies like to hire well-rounded software engineers who solve real problems, so you'll need to demonstrate that you are able to think for yourself when it comes to looking at problems, and that you're capable of being able to work with requirements, design, etc.

Remember that when you're applying for any skilled job, the most important questions any employer will be asking themselves is whether the candidate they're interviewing is actually capable of doing the job, that they're not just going to end up hiring somebody who sits staring blankly into a screen, and that the person they're hiring is able to work on getting on with tasks by themselves without needing to have their hand held.


ok i have a further question. Most of the jobs i browser through requires 2-3 years experience.

Well i have no experience and i got to start somewhere..

Can I start with freelancing and will it count as experience?
(edited 5 years ago)
Original post by HucktheForde
ok i have a further question. Most of the jobs i browser through requires 2-3 years experience.

Well i have no experience and i got to start somewhere..

Does freelancing counts?

Where are you looking? Even if the job description itself mentions the term 'graduate' or lists a degree in the requirements, it's worth applying if you have the equivalent skills and a few decent, large/non-trivial personal projects under your belt. It's really all about making sure you have the skills and the evidence to back it up - a strong CV with a solid list of self-taught skills and details of projects you've worked on (or even certificates if you end up completing the courses on websites like TeamTreehouse, EdX, Udacity etc.) are all good things to present to an employer or recruiter to be taken seriously.

Here's a UK-wide search on CWJobs at the moment https://www.cwjobs.co.uk/jobs/junior-developer
And more on TechnoJobs: https://www.technojobs.co.uk/junior-software-developer-jobs
Obviously these lists change all the time - your only problem may be that you'll need to battle against the IT recruitment agencies who are sitting in front of many of those jobs

As far as Freelancing is concerned, it depends what you mean; if you're still starting out then you've got a long way to go before you get there yet. There's a lot of contract work around, but recruiters are generally looking for the same thing as they would for hiring a permanent employee.

If you're going to seek projects through dedicated freelancing websites, then focus on good quality projects which are suitably large and complex enough to get you learning worthwhile skills. Don't bother with "rent-a-hacker" type projects where people bid £50 for you to bodge together a dirty prototype in a weekend - you're unlikely to get anything really worthwhile to include in a portfolio from odd jobs like that; the kind of experience you want is the type which involves working on larger projects - ideally with other developers. (This is one reason why open source projects are often pretty good for picking up decent experience).

Remember the goal is to be able to have something worthwhile to put on your CV and is going to stretch your abilities. So anything non-trivial, using well-defined requirements, and hopefully having the chance to use a lot of that time to learn new skills (e.g. a UI framework or a web framework). In terms of scale, consider the kind of projects you might expect to do as your FYP for a degree - i.e. something which you'd work on full-time for 3+ months while learning the skills to do it along the way. Don't forget the kinds of projects you'd get from courses like Treehouse/EdX, or even personal projects - a few projects like this using a decent range of tools/technologies gives you a lot more substance to put on your CV.

Since I didn't mention these in my previous posts, here's some good links. If you're going to do all of this yourself, then free online courses written by top universities and top tech firms will be a lot better than relying on blogs and youtube, because online courses are more likely to give you better depth of understanding, better projects/challenges to complete, and more coverage of tools like Git, debugging, deployment, etc:

Excellent free intro to programming and problem solving from Harvard - the problem sets are excellent, and so are the lectures - it focuses heavily on using programming to learn computational thinking and problem solving. (The paid certificate is optional):


Free Microsoft C# Courses (again, paid certificates are optional):

SQL Databases (again, free by Microsoft - no need to pay for the certificiate):


Treehouse - Good (cheap, not free) online courses - a lot of decent courses for all kinds of skills, web development especially:

Udacity - Mix of free and paid-for courses from various large tech firms - includes a lot of free courses by Google for Java and Android, but lots of other Software engineering courses too on subjects like git/source control
(edited 5 years ago)
Reply 4
Original post by HucktheForde
no university or colleage, just watching youtube, reading books and doing some freelance projects. What are the chances for you to get employed this way?


Yes is the short answer. The key is to love what you do and the rest will follow...good luck!
Yup. Didn't do a CS degree but I code for a living - all self taught!

Quick Reply

Latest

Trending

Trending