To all those who don’t have a CS degree and want to become a Software Developer

alaskanbowl
10 min readJun 28, 2021

--

Recently, I started taking courses like Business and Philosophy in community college and met many students who were from high school, when they came to know that I am a software developer, they were very curious in knowing what it takes to become a good programmer. I am part of multiple organizations where I often meet many people in their 30s (of non-technical backgrounds) wanting to become Software Engineers. Talking with them I feel their pains of working hard and giving their best on their coding skills and still not able to get a job. When I inquire about their learning strategies I often find some building blocks missing and I want to address those in this article. Coding interviews are a great way to understand how a person addresses a problem and writes a clean and efficient code. There is a lot that goes behind what solution you chose and why you chose and this is where the building blocks play a key role in shaping your solution. In this article, I will discuss those building blocks but before that, I will give a brief introduction on how to go about in the world of Software Development for someone who is a total newbie.

First of all, I want to say that it definitely can be an uphill process to get a job especially when you are competing with talents who are experienced software developers or are recent CS college grads. They have worked hard for years and dedicated their time to software development and it’s obviously easier for them to crack the interviews. They are miles ahead of you. So, understand that what you are getting into is a tough competition but with grit and working smartly towards honing your skills, you eventually can get there too.

If you are a complete newbie and never have coded before my suggestion to you would be to take some classes to test the water. There are so many classes online and it’s easy to get confused. My suggestion would be to take some courses in community colleges. Courses like ‘Introduction to Computer Science’, ‘Introduction to Python’, and ‘Introduction to HTML’ would be a good start. Make sure the professors taking the course are well rated. I took the ‘Learning Spanish 1’ course even though the professor wasn’t well rated, I dropped out of the course eventually as I really couldn’t find value in his teachings. A good teacher should be interactive, approachable, most importantly good with explanations, fun is a bonus! Community colleges provide interactive classes unlike some of the online courses that aren’t interactive. It’s much more fun to meet other students in the class, solve assignments with them and gain confidence.

If you can’t take community classes then you should take online courses offered by Standford, MIT, and other good schools. They aren’t interactive but definitely have good content and assignments.

Once you took some of the above courses and feel that software development can be your thing, and have time and money to invest in studies then maybe you can opt for Bachelor in Computer Science (4 years). Some community colleges offer you to transfer your courses to well-known universities. I did my Bachelor's and Master's in Computer Science and if I look back all that time spent was worth it. I made some great friends and learned a lot. Education like this will give you a great foundation and you can pick tough concepts easily when working on advanced problems.

I understand that many people are not in a position to either invest their time or money for a degree. I met many people who were wanting to (quickly) transition to Computer Science to make a better living. Although I feel everyone should do what they love to at times it’s hard to know what you love or there are times when situations are tough and you do what you got to. So, for all those people I feel you and I write this article for you.

By taking ‘Introduction to Computer Science’ I hope you get a good understanding of how a Computer works and basic programming. Even some basic knowledge about questions like ‘What’s an Operating System?’, ‘What’s a memory (RAM/ROM)?’, ‘What’s a database?’, ‘How does a CPU work?’, ‘How does internal and external hardware (keyboard/monitor, etc) talk with each other?’, ‘What’s a network?’, ‘When I run my program, what happens behind the scene?’. In Bachelors each of these questions can be a course in itself. They all are crucial to getting a good understanding of various parts of your machine and how it all works together to make your program do what you intend it to do. All of this might look intimidating but they aren’t. Trust me.

Now comes the programming part and that’s the bread and butter of all the developers! There are many streams (or disciplines) within Computer Science and each discipline uses some programming languages to make things happen. Some of the disciplines are Web Development, AI/ML, Big Data, Network Engineering, Computer Security, Operating Systems, Cloud Engineering, Database Engineering, DevOps, Gaming, etc. In this article, we will go over Web Development and see what it takes to become a front-end, back-end, and full-stack developer.

A front-end developer uses programming languages like HTML, CSS, JavaScript, React to create a graphical interface (user interface) that is the things (text, logo, button, pictures, etc) we see on a website. When you go to Google the nice-looking logos, textbox, are all aesthetically organized and built using front-end technologies. If you like aesthetics you might like it. Also, it’s pretty common for newbies to get skilled at front-end languages and get a job as a front-end engineer. If you are looking to try it out, I would suggest taking some courses on HTML, CSS, and JavaScript first. Understanding the concepts of how DOM works will take you a long way! Later, you may want to check out React, it is pretty cool and uses HTML, CSS, and JavaScript to build websites (ex. Facebook!). Its official website has nice documentation! Getting a good understanding of React concepts like ReactDOM, Components, Props, Hooks, and React Testing will help you write good code and answer commonly asked questions. Make sure you try writing the tutorial examples on your computer. Make mistakes and learn from them. Try removing a line from the code and see what happens :)

A back-end developer builds backend logic, something that is indirectly accessed by users. When you search on Google, your search request goes to Google’s servers that search for web links that are relevant to your search text and send them back. This operation that happens behind the scene (on Google’s server) is called a back-end operation. When the search results come back to your computer the front end then arranges the results based on the relevance and aesthetic. There must be a lot going behind the scene when Google searches the relevant web links for you. The backend developers have written logic that quickly (within a second) searches data for you from the amazingly huge dataset that’s stored in their servers. If I have to overly simplify the work of a back-end developer it is often to make network requests to a database or other systems, get some data back from them, work on the data and send it back to the front end. Building the logic is pretty fun! You can write this logic using many programming languages, some of the widely used are Python, Golang, JavaScript, Java, and C#. If you are a newbie, just pick one of them and get really better at it. Did you notice one thing though? JavaScript makes it in the list of both the front end and back end. JavaScript for a very long time since its inception has been used as a front-end language, but after the development of the Node.js server can be used as a back-end language as well. So, if you pick it then you can actually look for jobs that are full-stack (involving both front end and back end) in nature.

Maybe you are someone who read all the way till here and thinking I know how to code basic programs easily am I ready to interview? Not quite. Have you mastered the concepts of Data Structures, Object Oriented Programming (OOP), and Algorithms? It’s these building blocks that are often missing in so many candidates I have interviewed in the past and it’s due to these they were rejected by the panel. Once you know how to use loops (for, while), conditional statements (if-else, switch), operators, and functions, you can write basic programs like a calculator. However, to be an advanced programmer you should have a good grip on data structures like an array, linked list, stack, queue, map, tree, and graph. These are the structures that you use to store and retrieve data efficiently. When Google searches relevant results for you behind the scene it must be using these data structures to process the results quickly and using less memory.

OOP is a paradigm that many programming languages use to design software where the object is its core. If you understand the OOP concepts like objects, classes, and its 4 main pillars that are abstraction, encapsulation, polymorphism, and inheritance you will have a good foundation on writing maintainable and reusable code. For this reason, the interviewees are expected to know them well.

The study of algorithms will help you in developing efficient code. By using Big O notation you will classify algorithms according to how their run time or space requirements grow as the input size grows. You should know the various searching and sorting techniques, iteration vs recursion, depth-first search, and breadth-first search algorithms.

With these concepts, you can write performant and well maintainable code. But your code needs to live somewhere for it to accept requests and that’s where a web server comes into the picture. When you hit enter on Google, your search request is sent to Google’s web server, the server then forwards the request to the back end logic that then processes the request and sends it back via webserver to the front end. Understanding the concepts like ‘How a web server works?’, ‘What’s REST?’, ‘Why do we use async in code?’, ‘What’s multi-threading?’ will help you in building an end-to-end system. Websites like Google gets millions of requests every minute and so it’s important for their system to work all the time with no downtime and hence their system needs to be fault-tolerant and scalable. Experienced Web developers are expected to know ways to build a fault-tolerant and scalable website. As a newbie, you should have a basic understanding of it and know how various systems like a load balancer, caching (Redis/Memcached), stateless web servers, databases, and queues can help in building a scalable system.

Did I miss testing? Writing good tests is very important to make sure your code is robust. Try to break your code by writing tests and then fix it. You should know about Test Pyramid. Every language has nice libraries that help you write your tests easily. For React you can use React testing library, Pytest for Python, Gotests for Golang, and Jest for JavaScript.

The back-end is not complete without the knowledge of databases. When Google searches for relevant web links, it is basically searching them on its giant database (BigQuery). Data is the new oil and hence it's important for a software engineer to know how databases work and how you query to store and retrieve data. Simplistically there are two main types of databases SQL (relational) and NoSQL (non-relational). You should know the difference, their pros-cons, and when do you prefer one over the other. Some popular relational databases are MySQL and PostgreSQL, and non-relational databases are MongoDB and DynamoDB. You can get good hands-on MySQL and MongoDB by going through their tutorial and trying out their examples. This will give you a good understanding of both worlds. Questions like ‘Can you tell difference between NoSQL and SQL’, ‘What are joins?’, ‘What are indexes?’, ‘Given two tables, can you write a query that gets me this information?’, ‘Explain CAP theorem and ACID properties?’ are commonly asked. If you are like me you would love databases! They are cool. Getting a good grip on them can also help you get jobs like data analyst and data engineer.

Alright, we are almost there! Once you can answer many of the above questions, the next cool thing I highly suggest is building an end-to-end project that involves a front end, web server, backend logic, and database. Use your preferred languages and database. If you have no clue on what to build, how about building a to-do list webpage? As a user, I should be able to add and remove to-do items from the list. The removed items are shown as crossed. For every add and remove of the to-do item, the front end sends a request to the backend and backend then stores or updates the item in the database. If something isn’t working check the logs and troubleshoot. Take help online when you are getting issues. Make sure you are testing your code by writing nice tests! If you can make this project end to end, you are ready for the interviews! You should push your code in GitHub and make sure to flaunt your Github link on your resume!:)

With all this, you should now start interviewing! Start with those companies that you don’t want to join as chances are that you may be still raw and it is likely that you may get rejected. As you interview more you will get better with the feedback and gain more confidence and eventually start cracking interviews!

Lastly, internships and part-time jobs are nice ways to gain industry experience. Make sure you make a good profile on Linkedin, AngelList, and Indeed. Joining some local meetup groups is a nice way to help others and get help. You have got this and I am rooting for you!

--

--