Post #05 Part 2/3
In part one of this series talked about the pros and cons of attending college/university to gain the credentials we need. In Part 2, we’ll discuss how necessary those credentials are when becoming a software developer and, the process, benefits, downfalls, and anything else you can expect when teaching yourself to code.
When I decided software development was what I was going to do with my life to put the bacon on the table, or for that matter to buy the table in the first place, I immediately thought a career transition meant another round of sitting in a college or university classroom. I’m going to become a software engineer, I said to myself. Engineer? That term never once crossed my mind when going through grade school. Becoming any kind of engineer to my knowledge meant 5 years and tens of thousands of dollars in debt paying to sit through countless courses and the beer required to suffer it. I figured I’d save that for the smart, ambitious, and those who didn’t mind, what I think is insurmountable debt. Now I want to become something with engineer in the title? Great. The two years of grade 12 academic math probably wasn’t going to help me out very much on this one. Nevertheless, I started looking at colleges and university seems remotely relevant to software development. Computer science degree, 4-years, masters, another bunch on time and money, no good. I wanted something I could get through quickly and affordably. One because I’m cheap and, at the time was ready to get the hell out of my current position and make some money yesterday, not in four years.
So, college I thought might have something if I was lucky. Check around all the local colleges I’d be willing to attend and search for programs for engineers. Nothing. No software engineering courses here. Mechanical, electrical, civil, structural, all kinds of engineers but no software engineers. I looked and finally came across a college program entitled software development. “Learn to build, test, and implement software using ….” Read the course description. Sounded an awful lot like software engineering.
I might burst a couple of bubbles here but for any of you wondering how can you teach yourself how to become an engineer or for that matter do it in something like a 2-year college course? Well, you can’t. Being a software engineer doesn’t mean you’re an engineer. Frankly, I look at the term software engineer something that a software developer calls themselves to either feel more important, smarter, feel better about the term used to describe the occupation or, just to get the point across to someone less technical that you sit behind a computer and engineer computer stuff without a bombardment of questions. You might have a degree in computer science, you might have a masters or Ph.D. or even be able to make the most elegant software in the world but you’re not really an official engineer. I think you’d be hard-pressed to find someone with a paper from some university with software engineer on it. If you think about it, the definition of a software engineer is the same as a software developer because they’re really the same thing. That definition boiling down to essentially, you can write software. It’s not hard to write your first “Hello world” program and sure you can argue that you structured, planned or engineered that software into existence, I wouldn’t argue that I’m an engineer.
I don’t say all this engineer stuff to make anyone feel bad or for anyone to think less of what they do. I do say it because if you’re like me, just the term engineer meant debt and years of learning. That’s true of any other engineering occupation you might go for but don’t let the term software engineer scare you. If you call yourself a software engineer, I say power to you. I think the world needs more excellent software engineers, developers, ninjas or whatever you want to call it. The point I tried to get across in a roundabout way was in software, the term engineer isn’t inherently attached to years of university and debt.
CAN YOU BE SUCCESSFUL WITHOUT SCHOOL?
There’s a ton of different credentials anyone can get related to software development ranging from PhDs to a certificate from a website that offers a two-hour video course. The question then becomes, what do you really need to become a successful developer?
This question sparks debate from the software development community. I imagine it’s because of the broadness and vagueness of the question. Who do you consider to be a software developer? What do you consider success and how do you know you’ve gotten there? My opinion is, if you can get the job you want as an employee or self-employed, you build software, you’re able to do it well, and you live a financially satisfactory life then you are a successful software developer.
Success means different things to different people and is achieved in different ways so the answer to that question will vary from person to person so let me break it down for you. The saying; It’s not what you know it’s what you can prove in court, goes a long way in describing how much a degree or other software development credential matters when you’re out looking for a job. In most cases, it’s not what you know, it’s what you can prove you know. Meaning that for the most part, it doesn’t matter what kind of credentials you have, but rather how well you can put that knowledge to use.
You don’t need any piece of paper saying that you can code if you’ve made some software that proves that you do have the skills you claim to have. Generally, employers are more interested in what you can do rather than what some paper says you should be able to do.
Imagine for a second you own a business and you need developers. Two people submit resumes, and both seem equal in skill. Person A had a college certification from a software development program the went through, listing all the skills they’ve learned along the way. Person B has “self-starter” written on his resume, listing all his proclaimed skills they’ve taught themselves and a portfolio of programs they’ve written or contributed to for your viewing pleasure. You pull person A in for an interview and ask him run of the mill technical questions and seem confident in the theory of software development and the more scientific things which is great! I’m sure no employer out there would turn someone down because they really know the ins and outs of something even if it is above and beyond what you’re looking for. Person B also shows impressive knowledge behind the skills they’ve learned, a little less science-focused but still a great candidate. Then you ask them each to solve a simple problem on the whiteboard such as fizz buzz so you can see their problem-solving skills. Person B logically works out the problem, writing lines of code explaining why they’re doing what they’re doing and within a few minutes solves the problem to meet your specifications. Person A, however, thinks longer on the problem. Trying to figure out how the most efficient way to make the program run, as a result, over-complicating the solution but eventually, coming to a conclusion that solves your problem but took 10 minutes more than person B.
Who would you rather hire? The person that shows an excellent understanding of how to logically solve a problem they’re presented with, meet the requirements of the project, and do it in a timely manner? Or, the person that spent far longer focusing on how to make the program run faster but was a little shaky on the logical problem solving and seemed less confident in their abilities?
In most cases, the person that can understand a problem shows good problem-solving skills, and has the skills required to solve the task in a timely fashion to meet the needs of the client is going to get hired. There are thousands of online resources at your disposal to help you learn to code all on your own and there’s no reason why you cannot become proficient in the skills required for you to land a good-paying job or clients of your own.
In some cases though, the opposite is true. The tech giants of the world do need their software developers to have the ability to know the science ins and outs of software. That’s simply the nature of their business. They need their programs to run at 110% peak performance, not just get the job done. If you consider landing a job with the top tech companies of the world then the answer to our question changes. You will need some sort of university credentials to become successful. Teaching yourself to code in this case, won’t be the best option for you. You’d probably be more interested in reading the previous post about the pros and cons of going to college/university to become a software developer.
This isn’t to say that teaching yourself code isn’t without its benefits. There’s a wide range of things that you might find hugely appealing. I know the thought of learning to become a developer who could make 70k+ a year for the low cost of free was tempting.
cost
It would be an awesome world we lived in if we didn’t have to worry about what something might cost. It’s a nice thought but I’m still getting up and going to work on Tuesday morning just like you. Unfortunately, money is a concern for all of us and some others are not able to pay for a lengthy college or university program especially if it means giving up our source of income. If paying for school or going deep into debt simply isn’t on the table for you, teaching yourself to become a software developer offers a huge advantage. Today there are thousands, probably tens of thousands of resources available to you online. There are just as many thousands of paid online resources as there are free. The beauty of this is you can essentially pay whatever you feel is necessary to obtain the skills you want. I would be willing to bet that someone could learn to become a software developer as good as anyone graduating for a college or university totally free.
If you take my circumstance for example before I signed up for the first of seven college courses, I was about to enroll I did some self-teaching of my own. My line of thinking here was less teaching myself to become a full-fledge developer but more to see if I would enjoy what software development was. So, I decided to find an online course that was about 16 hours of tutorial videos structured for and containing complete beginner-friendly information. What I learned in the first half of those 16 hours was valued by my college at just shy of $600. Of course, I practiced what I learned in the videos a little bit but just let that sink in. I learned all the information and more, I needed to complete my first $600 Java programming course and spend almost zero time going through the course material instead, just jumping to the assignments and completing them and I did this FOR FREE. (minus the $600 college robbery fee for the course) Not only was the info I learned free and just as useful as the information in my course, but it was also taught in a far better way. It made my college course look like absolute crap. It was at this moment I realized I made a huge mistake in paying for schooling. Not only did I just throw away $600 to the college for something I could have learned for absolutely free, but I had to go through Business Analytics, SQL Fundamentals, and Software Development Fundamentals (all $520 each) just to get to this point. Didn’t I get bent and taken for a ride…
I then enrolled in another course offered by the same website except for this time I paid just shy of $15 and again learned more in those 80 hours of material than I probably will for the rest of my schooling. This time, in Java-2 (I figure, already halfway through my bend and ride I’m in for a penny in for a pound) I skip the course material, go to the assignments, go to my course and learn what’s required to complete my assignment probably in 1/5 the time I would otherwise. Yes, I realize I’m the idiot paying for an online course to complete a college course, but my point is, you can learn the skills you need very cheaply or free if you can find the right resources. Just think of the material I could have paid for with just the cost of one of my seven courses. I could teach the damn program after I was done.
time
Unlike the other two options, teaching comes with another huge freedom and that is time. Do you work a 9-5 job and can’t attend a classroom or months of coding bootcamp? Have kids to take care of and can’t afford a babysitter for you to go off and spend a bunch more money trying to learn something? Well teaching yourself to code comes with the biggest benefit which is you’re doing it yourself. You don’t have to be in a certain place for a certain length of time. You don’t have to be taken away from your responsibilities or anything else.
When you’re teaching yourself to code, you’re the king or queen of your learning kingdom. Not only does teaching yourself to code offer the ability to sit down and learn whenever you feel like doing so, but you don’t have to sit down and suffer through listening to your teacher for 8 hours a day. You can start, stop, take a break, go wash the dishes (LOL), or whatever else you want to do whenever you want to do it. You’re totally in charge when teaching yourself to code.
Being in charge sounds like the best thing anyone could ever ask for when learning how to do something but with great power… or, freedom comes great responsibility. When you’re doing it by yourself it’s up to you to set your own goals, deadlines, and material you want to learn. Being able to hold yourself accountable, and not get distracted and turn on the latest episode of your favourite show is a hard thing to do. It takes a particular kind of person to be able to hold themselves accountable for the long period of time it takes to teach yourself to become a competent coder.
credentials
We talked above about the importance of school given credentials. In teaching yourself code you won’t see any credentials from a certified educational institute. You’re not going to see any piece of paper with “Computer Science”, degree, or diploma on it. There are however other certificates and credentials you can obtain even when learning how to code on your own. Take the programming language Java for example. You can teach yourself how to program using Java, and you might even learn to become better than your average college graduate. The difference being the college grad has a diploma or certificate saying that they’re a competent Java developer. You on the other hand only have the knowledge and ability to use Java without and piece of paper from some school saying that you can. That doesn’t mean there are no credentials out there that a self-starter can get saying they know Java. Companies that developed a language or technology often have their certificates you can obtain online through an exam process. You can teach yourself Java, go to the Oracle website, take an exam and get an “Official as they come” credential. If the people who own or developed a programming language give you a piece of paper saying “(Insert name here) completed the senior developer exam for (Insert technology here)” I would argue that’s just as good as anything else you might get through school. There are other credentials that you can get as well outside of those offered by the creator of a technology however, I think those would carry more weight. Websites like Udemy, and Lynda, in some cases, offer certificates of completion when you complete one of their online video courses. I’m not sure how valuable these are to put on your resume though. If I was an employer and seen something like “Completed Java Programming for Intermediate Developers by Joe Blow on Udemy”, wouldn’t hold much weight. That’s not to say that these courses are invaluable, I think they’re an outstanding resource but the certificates probably don’t mean much.
In place of credentials, someone teaching themselves to code I think would rely more heavily on building a portfolio. If you teach yourself how to use Java as good as the best of them, you still don’t have any real proof of that ability. Enter your portfolio. Build some application that shows off your ability to use a technology. Build something impressive that has a real-world application using real-world methodologies and technologies. I think having a strong portfolio is just as valuable, if not more valuable than having some piece of paper saying you can do something. Instead, you have a project that you built or contributed to proving that you know how to put what you’ve learned to good use. This allows an employer to see your work and see what they can expect from you as an employee or contractor. They’ll be able to see what problems you needed to solve, you ability to use software to solve those problems, the technologies you use, how well you use those technologies, how well you can communicate your ideas and thoughts about how and why you did what you did and many more things that some piece of paper simply doesn’t show someone. Frankly, I think that a piece of paper saying you can do something doesn’t mean squat if you can’t prove it.
learning options
I mentioned before that one of the downsides of going to college or university is the inability or lack of freedom you have when choosing what technologies you want to learn. Again, teaching yourself to code offers you the freedom to learn whatever technology floats your boat. Generally, when going through school you have the option to either learn Java or Java (no that wasn’t a typo). There’s not a whole lot of options when talking about what languages you’re going to learn when if you go through school. Not only are there limited options as to what technologies you’re going to learn in school but whatever you do end up learning is most likely going to be a little bit out of date. The example I gave before was the Java course I’m taking in college now is teaching Java 7 when the current version is Java 12. When you’re teaching yourself to code you can learn whatever you this is relevant. You can learn the latest and greatest technologies. You can look up jobs and see what tech they’re using and lean that stack. Learning specific skills that employers are looking for, in combination with some portfolio projects that use those technologies suddenly place you as a front-running candidate for the job. I, on the other hand, going through college, will have to learn the ins and outs of the latest Java version, the more up to date frameworks and whatever other newer technologies employers are looking for that I’m simply not going to be taught in school.
When teaching yourself to code you have the option to learn everything or anything required to land the job you want. What might come as a downside to this though is staying focused on the technologies or stack you’re trying to learn to obtain your goal. There are so many kick-ass cool technologies that do different things in different ways that you’re going to want to forget learning ruby on rails and learn this really cool machine learning thing or whatever piques your interest. As a beginner and especially when self-teaching, I’d try to avoid the shiny new things that don’t directly relate to what you’ve already set to learning. If you spend two months learning thing A and see this shiny new thing B and start learning that and keep jumping around, you’ll quickly become a jack of all trades and the master of none.
Learning and understanding different technologies is never a bad thing in my opinion except for when you’re just starting. When you’re learning to code for the first time I recommend sticking to the same thing until you have a really good understanding of what it is you’re doing. Jumping form technology to technology isn’t putting you on the fast track to getting work. But, once you do understand the skills you need to land your first job, I’d encourage anyone to branch out and learn different things. Afterall technology is changing all the time and there are so many cool things out there you can’t stay stagnant. As a matter of fact, that’s the last thing you want to do. Standing still while the rest of the tech world is moving forward is very bad. You always want to be learning different skills but just starting out, stick with learning the skills you need to land your first job and then branch out.
to sum it all up
Teaching yourself to code offers a ton of options and opens up a way to become a professional developer to people who are time and money restricted. You can pay what you want when teaching yourself to code because of the massive amounts of free and paid resources readily available online or otherwise. If you don’t have the money to pay for traditional schooling or code camps this way of learning is financially easily accessible and the money you do decide to spend can go farther than it would when paying for school. Not only does teaching yourself to code come at a much more affordable cost, the lost income you would experience when going through traditional school is gone! Self-teaching affords you the ability to learn when you want. You can take care of whatever responsibilities you may have and sit down at the end of the day and learn software development for a couple of hours a day. Even one hour a day is enough to make progress that you can be proud of. Check out the 100 Days of Coding challenge. With the freedom of learning when you want comes an added responsibility of keeping yourself on task and sticking to a learning schedule and not being distracted by what’s going on around you when you sit down and do some learning.
Not only can you learn when you want but self-starting also affords you the ability to learn what you want. Schools have a very limited array of technologies that will be taught and, are most times out of date to some degree. You can learn whatever skills you think you need to learn to enter into a specific development field or even a specific job in a very focused way.
Even though self-starters don’t get the credentials they would if they went through a traditional school that’s not to say there are no certifications available that are any less meaningful. Gaining credentials from the developers of a language or technology goes a long way in showing that you do have the skills you claim you have. That along with a strong portfolio of projects you’ve built or contributed to make a strong case to any employer that you are the person they’re looking for. With that being said, some doors will be closed because of the inability to get a computer science degree or other credentials from traditional schooling so, you have to know what your goal is for work when deciding which path you’re going to take to learn software development. Self-teaching comes with huge perks but, with every action comes an equal and opposite reaction. It takes a special kind of person to overcome the challenges we’ve talked about but, if you can, I think it shows your determination and drive to enter the software development field.
If you see something I didn’t touch on in this article, want to share some thoughts or your own personal story of teaching yourself to code, topics you’d like to see in future articles or anything else that’s on your mind leave a comment or contact me via the contact page, I’d love to hear from you! If there’s anyone else you think might enjoy the read don’t forget to share with friends and follow our Twitter page to keep up to date with what JTSD is doing. Until the next article where we continue this three-part series, remember, keep learning, coding and creating!
-Dorian
2 thoughts on “Ways to Learn Software Development: Self-Starting”