How do I become a 'Software Developer' from scratch?

In summary, to become a qualified programmer without attending school or university, you should start by teaching yourself C++ and then move on to learning about computer science and software development through online courses and tutorials. It would also be beneficial to gain hands-on experience through open source projects, volunteering at a charity, or obtaining entry-level work. Additionally, learning assembly and a higher level language like C++ can help you understand the relationship between software and hardware, and thinking about software as a hierarchy of components can improve your problem-solving skills.
  • #1
AndyGlosta
3
0
I've recently made a final decision that 'Programming' is the career path i wish to take.
I've been playing around with Visual Basic for about a 6 months now and i wish to take it to a higher level. I've been reading online courses for C++ and watching video tutorials.
This, i realize, is nowhere near enough!
I continue to read through as much of this material as possible as I would like to become, shall we say 'fluent' in the language.
My question to the world is:
How can i get from where i am now to a qualified programmer by avoiding any schools or universities?
I am aware and prepared for the long, possibly frustrating, years to become fully knowledgeable in the subject, but i am in a position where i can only teach myself.
What sort of path should i take? e.g:
C++ Langauge >moving to> Computer Science Course >moving to> Software Developer Course.
I will be attempting to take the 'Courses' as home-study courses but would really like to know what kind of route i will need to take.

Thank you for your time.
 
Technology news on Phys.org
  • #2
AndyGlosta said:
How can i get from where i am now to a qualified programmer by avoiding any schools or universities?

You've got to teach yourself enough so that you can make valuable contributions to some open source project. Have a solid body of commits and you've got yourself some real experience. Use that to volunteer at some charity being their programmer and do some good work there. Yes, the non-school path will probably require a lot of free and/or very low paid work, but that's usually how most people get experience. C/C++ is the standard language in the open source world, but you've got to be good to join in. Start off with the exercises in the K&R book, work on some project euler problems, and just get yourself coding.

There's also the business app route: teach yourself enough Java to get certified and try to find a starter job and take it from there.
 
Last edited:
  • #3
Hi, that's for your 'extremely fast' reply. I appreciate it.

You say that C++ is the standard language out there.
So, in the idea that i go from learning this myself and doing basically 'free' programming work to start off with, which is fine because i know it will help me in the long run, what would you suggest to study after that? Long way away i know, i am just trying to get some kind of learning path for obvious reasons.

Thanks again..
 
  • #4
Last edited:
  • #5
AndyGlosta said:
what would you suggest to study after that?
After you've learned enough to usefully contribute (which will take a very long time), you've learned enough to do some entry level work. Then it's mostly about experience: the more projects you work on, the better you get at figuring out what separates a good program from a bad one. Basically, free work is near the end of your path, and you're still at the beginning.

There's all sorts of industry buzz/catch phrases revolving around programming frameworks and architectures and stuff, but that's stuff you mostly pick up by doing (even if you have taken the software engineering/software architecture courses offered by most colleges.) Basically, by that stage of the game you should know what comes next.

It seems slightly outdated, at least in regards to languages. Python's got a strong following in the teaching/academic community for being a good workhorse/jack of all trades languages, and it's pretty easy to learn. I code in it and am always advocating it as a good way to take some baby steps into serious coding.
 
  • #6
AndyGlosta said:
I've recently made a final decision that 'Programming' is the career path i wish to take.
I've been playing around with Visual Basic for about a 6 months now and i wish to take it to a higher level. I've been reading online courses for C++ and watching video tutorials.
This, i realize, is nowhere near enough!
I continue to read through as much of this material as possible as I would like to become, shall we say 'fluent' in the language.
My question to the world is:
How can i get from where i am now to a qualified programmer by avoiding any schools or universities?
I am aware and prepared for the long, possibly frustrating, years to become fully knowledgeable in the subject, but i am in a position where i can only teach myself.
What sort of path should i take? e.g:
C++ Langauge >moving to> Computer Science Course >moving to> Software Developer Course.
I will be attempting to take the 'Courses' as home-study courses but would really like to know what kind of route i will need to take.

Thank you for your time.

I used to be a programmer so I'll see if I can give you advice I wish I knew when I started out.

When you are developing you will end up knowing a lot of different perspectives about general development. There is a spectrum of perspective that on one end focuses on the platform to the other end that focuses on the application. To understand these issues you should learn some assembly for 32 and 64 bit platforms as well as a higher level language like C++. The assembler will help you understand the architecture of a particular platform and help you understand the relationship between the high level code you write in C++ and how that translates to instructions that are executed by the CPU.

After learning these two things you will learn how to think of software as a hierarchy of libraries, APIs, data structures, flow control, and other mechanisms that focus on how to "decompose" software in a logical way so that you can write software that is reusable, component and/or service based, and in other ways that more or less let others use it a
tool in a toolbox.

Once you've done this, you then have to learn specific things about the domain of what you are trying to program. Databases use SQL. Video games use a lot of math, custom compilers, computer graphics, AI, physics, numerical libraries, and a hell of a lot of other things.

Personally apart from domain specific knowledge, I think that you should focus on flow control in a variety of languages and platforms. Most is procedural meaning that you have your code in memory and basically the code goes from one instruction to the next unless its a) interrupted b) the code uses a software jump (conditional or unconditional) or a call statement. There are other models of computing but for your purpose I would become familiar with this.

Also knowing about flow control will help you debug. Once you get a feel for flow control and tracking the "state" of the machine you will be able to debug a lot more quickly and with ease.

Things like data structures are important but you should be comfortable with knowing about flow control and tracking a machines "state" before you do these. If you know what the state of the machine will look like then you are going to be a good programmer.

There is a lot of things that C++ will teach you. Templates is a great paradigm to learn as well as the object oriented stuff. A lot of good design will build on these but again going back to flow control and tracking of state, you will want to do a few things:

1) Recognize that for a piece of code, you will want to identify what "machine states" will be available to the rest of the machine and what will not be available.

You will need to do a course in operating systems to know the boundaries for things stored in memory. (For example processes can share information but its not setup the same way that threads in a process are setup where threads can access other thread information a lot more easier than in the case of a process)

2) Recognize the flow control of the entire system including details about external libraries and their associated context data, other threads, and the flow control of data in every device that uses it that is associated with your application.

If you're writing code that deals with sending data across networks you will more or less end up designing protocols in your application to deal with all the possible circumstances that your application needs to handle. This comes back to again knowing your state and flow control and handling and tracking everything relevant to your application.

I recommend you learn about networking when you learn about Operating Systems (it may be a part of it as it often is).

There is a lot of things to learn but that kind of thing is contextual to what you're doing and like any other subject you will build up this contextual knowledge with experience. If you are able to eventually look at large bodies of code and decompose them in a way that you can visualize what should happen and relate to what will or is happening then you are doing well.

Best of luck.
 
  • #7
It's worth noting, that while you are learning from courses, it's a good idea to have your own little side projects too.

I've found that, personally, I just can't learn from "teach yourself xxx" courses, and I learn by trial and error. My latest adventure was into programming for Android (which is in Java, with which I wasn't that familiar with - I came from VB6/.NET like you) I just thought things up, made them. They were stupid little crappy projects, but it got me learning how to do things quicker. Researching problems as I came across them usually led onto discovering things that I wasn't even looking for.

After a month of making little random crap, I decided to work on a larger project - there are plenty of open source projects out there you can learn from, don't just assume that because it's not in a book it isn't well crafted.

After a summer vacation of learning from websites and open source projects, I had built an OpenGL game engine, and had a successful commercial game released, bringing in enough money to the years rent.

If you don't want to go to school or university, and get a degree in this stuff, you should think about releasing a few things yourself, building up a portfolio. That'll help you get a foot in the door - certainly did me.
 
  • #8
(Also, screw assembly code, for now, just focus on learning a more powerful language)
 

1. How do I get started in learning programming?

To get started in learning programming, you should first choose a programming language to focus on. Some popular languages for software development include Java, Python, and C++. Next, you can find online resources such as tutorials, online courses, and coding challenges to practice and build your skills. It is also helpful to join online communities and forums to connect with other developers and seek guidance and advice.

2. Do I need a degree in computer science to become a software developer?

No, a degree in computer science is not required to become a software developer. Many successful developers are self-taught or have learned through online resources and bootcamps. However, having a degree can provide a strong foundation in computer science principles and can open up more job opportunities.

3. How much time does it take to become a software developer from scratch?

The amount of time it takes to become a software developer can vary depending on the individual's dedication and learning pace. Some may be able to learn the basics in a few months, while others may take a year or more to become proficient. It is important to consistently practice and build upon your skills to become a successful developer.

4. What are the essential skills needed to become a software developer?

The essential skills needed to become a software developer include a strong understanding of a programming language, problem-solving abilities, attention to detail, and the ability to work well in a team. Effective communication and time-management skills are also important for collaborating with others and meeting project deadlines.

5. How can I gain practical experience as a software developer?

There are many ways to gain practical experience as a software developer. You can work on personal projects, participate in hackathons or coding challenges, contribute to open-source projects, or complete internships or apprenticeships. These opportunities can not only help you build your skills but also provide valuable experience to add to your resume.

Similar threads

  • Programming and Computer Science
Replies
3
Views
1K
  • Programming and Computer Science
Replies
16
Views
1K
  • Programming and Computer Science
Replies
10
Views
3K
  • Programming and Computer Science
Replies
21
Views
2K
  • Programming and Computer Science
Replies
8
Views
1K
Replies
5
Views
3K
  • STEM Academic Advising
Replies
10
Views
1K
  • STEM Career Guidance
Replies
1
Views
1K
  • Programming and Computer Science
Replies
2
Views
1K
  • STEM Academic Advising
2
Replies
43
Views
4K
Back
Top