Coding - where to start for people without a technical background

Coding - where to start for people without a technical background

“Should I learn to code?”

In recent months a number of friends have approached me for advice on how to acquire coding skills. Some wish to pivot their careers toward programming roles. Others look to augment their existing skill-set or professional lives with some software special sauce. While I’m certainly no expert and my experience in the field is limited, I’ve tried to answer some of their questions based on my own personal journey in the computer science world and some anecdotal familiarity with programmers that I’ve learned and worked with.

This is by no means an official guide or a ‘correct solution’ – it’s just my own personal opinions and advice as someone with a computer science degree working as a software developer at a large hi-tech firm.


Why coding skills are important

I think most people understand why technical skills are important in the 21st century economy. This crisis, with everybody moving all of their work online, only demonstrates this further.

There is high demand for people with strong software skills and there’s every reason to assume that this trend will continue. More and more disciplines are integrating with tech or using algorithms to solve problems: medicine, biology, economics, business development and law to name a few. Many existing fields will probably be automated in the coming decades and many new jobs and industries will appear.

All of these things require lines of code.

There are many great ideas out there but less people with the skills to actually build them.

Not everyone understands the present capabilities and limits of technology to gauge if an idea is realistic – whether now or in 5 years.

Having technical skills or at the very least acquiring a broad understanding of technology and current trends is a huge advantage in every respect.?

Even if you don’t end up transitioning to tech, you could probably find some way to integrate that newfound knowledge in your current field.


What are your goals?

There’s a reason why the threshold to enter the field is so high: it requires a massive time investment and learning curve. Most of the concepts in computer science are not trivial.

The first thing you need to determine before you set out on this path is: what do you plan to achieve? What is your end game?

Many people that I’ve spoken to only have a vague idea of their goals and less of an idea of what kind of skills they need.

Do you want to work in tech? Do you intend to pivot your career? Find an extra source of income? Learn out of curiosity? The answer to these questions will determine the amount of effort you need to put in.

If you want to transition into a technical role like software development or data engineering, you will need to be prepared to put in thousands of hours of learning and work to gain proficiency. Even then, it might be a slow, winding journey through multiple low-paying and junior-position jobs to get to where you want to be. For many people with other responsibilities such as work and kids, this can be very difficult.

There are some who have been able to do this later in life, but the impression I get from those that I work with, is that most software engineers begin learning in their teens or early 20s, usually through formal programs such as high school, university or an Intelligence Unit in their army service.

If you want to integrate some programming or big-data skills into an existing, non-technical profession, then you’ll need to determine which of these skills are truly necessary for your job.

For example, I have a friend that’s pursuing a doctorate in more of a social-sciences/humanities field and he wants to apply some machine-learning principles to his research.

What level of programming does he require? Does he need an in-depth understanding or just a broad conception? Does he want to be able to invent and program a machine learning algorithm from scratch, or can he plug in to an existing API such as TensorFlow? Should he put in the time investment to learn, or should he hire an expert computer scientist to do it for him? Is this a one-off project, or an opportunity to cultivate a long-term skill that will set him apart from his colleagues?

By answering these questions he’ll be able to determine what he should actually study -- and most importantly – where he should invest his time and effort.

If you’re looking for a quick solution for one project, then learning computer science skills probably isn’t the best way to go about it. Many don’t realize that there are lots of solutions out there to help people with non-technical backgrounds implement ideas that require technical skills. These includes website builders, e-commerce platform packages or even just hiring someone to help you with a job.

Often people are deterred by solutions require a financial investment. But before embarking on a steep learning curve (even if its ‘free’), consider that time-spent is also a financial investment.


Which language should I learn first?

The answer here depends on what your goal is.

Let’s assume that you want to get into software development.

Programming languages come in and out of vogue all the time. A language that is relevant today, might be unpopular tomorrow. That’s why you should start by studying the basic principles of programming which is common to all languages.

Someone once told me “if you know 3 languages, you know them all” and there’s some truth to it. The meaning behind it is that once you’ve seen all the different ways in which languages can be used, you recognize that most of them fall into the same few patterns.

People might assume that every coding language is different in the same way that human languages are different. In reality each programming language are more like dialects of one or two different languages. Once you understand the underlying concepts of how to achieve something through code, the overhead in picking up a new language involves simply looking up variations in syntax online.

The languages that I use at work are different to the languages that I learned at university. Most software developers I know seamlessly move between many different languages during their careers. I often find myself coding in 2-3 different languages every day.

The point is, one’s focus on learning a new language in my opinion should be less on mastering syntax (which can be easily auto completed for you by your IDE) and more on understanding the programming paradigms. The main paradigms that I’ve encountered both at school and at work are functional, procedural and object-oriented programming. To use the analogy from before, these programming paradigms are the actual ‘languages’, while the coding languages that most people are familiar with (such as Java and Python) are their ‘dialects’.

By familiarizing yourself with these paradigms, you’ll be able to quickly transition between most languages, and you won’t be at a disadvantage if your next job or assignment is in a language that’s unfamiliar to you.

Most of the popular languages in use today can applied to all three paradigms.

If you’re learning how to code from scratch, then I would probably pick a more intuitive language to begin with, such as Python. I would advise against starting with a machine-level language such as C. Learning to code already involves a huge learning curve to begin with. Machine-level languages like C make this curve even steeper by requiring an understanding of additional cryptic concepts such as memory management.

Think of it as the difference between learning how to drive on automatic vs manual. The increased control comes at the expense of a more intensive ramp up. C is like starting in manual. Python is like starting in automatic. Besides, you can also get to C after mastering Python.

Once you’ve acquired the fundamentals of programming and you want to pursue a specific direction, then you could probably look into some industry-specific languages and libraries.

For example, a lot Android development is done in Java. Python is used widely in server-side, and Javascript is popular in frontend.

The point is, if you’re seriously considering a transition into software development, then you should look int studying the fundamental principles of programming. These will ultimately benefit you more than becoming good at just one language.


Consider different technical roles

There are lots of different jobs and positions in the software field that require technical skills. Software development is just one example, but there are many others as well.

One example is Data Science which involves working with and analyzing big data sets. The technical aspect includes querying large databases and extracting relevant information. In most cases, this is done in the SQL programming language (or in one of its many derivatives). Once the data has been extracted, it needs to be interpreted and questioned and it will probably lead to some business or product decisions being made as a result.

Thus, a data scientist could find himself in in some blend of product management, marketing and business development. Since the job requires a synthesis of different fields, it could play to the strengths of someone with a social-sciences or humanities background.

For those looking to switch careers into hi-tech, finding a way to integrate an existing profession or ability with a new technical skill is the smartest starting point.


Do I need a degree to be a software developer?

The short answer is no. The long answer is: it depends on you.

Why you don’t need a degree:

Coding is one of the few skilled fields that don’t require a diploma to break into. That is very unlike other professional fields such as law, architecture and medicine – all of which require academic credentials for entry-level jobs. It doesn’t matter how talented I am at analyzing legal documents and filing property tax reports. No law firm would ever look at me if I don’t have a degree.

Your merit as a software engineer is not based on your degree nor on the name of the university that you went to. It’s all about hard skills and technical knowledge.

This means that the road into the tech-world is surprisingly open-ended.

Many of the software developers that I work with either have a degree or served in the 8200 Intelligence unit, however a lot of them don’t have either of those backgrounds. I also haven’t noticed any discernible difference in quality between developers from different ‘educational’ backgrounds. Some people are just brilliant programmers regardless of the road that led them there.

To demonstrate, on my team we have a gifted software developer that everyone comes to for help when they’ve exhausted all other options (including myself, the guys from 8200 and those with master’s degrees in CS). This developer doesn’t have a degree and he spent the formative years of his life studying in Yeshivah. He’s mostly self-taught, and he spends a lot of his spare time staying on top of the latest language updates and API releases.

There are many people like him, which shows that a degree isn’t for everyone and certainly isn’t a necessary prerequisite.

Why you may need a degree:

For many people (myself included) it is one of the traditional ways to enter the field.

The advantage of a degree is twofold:

1.????It’s a framework that will motivate you to put in hard hours of study and work.

2.????You get a piece of paper at the end that shows you have some experience.

If not for the structure provided by my computer science degree, I probably wouldn’t have found myself in the job that I have now. I’m just not so sure that I would’ve had the motivation necessary to put into self-study.

For example, sometimes I would be the last student to leave the CS lab at 4am, after beating my head against the keyboard for hours trying to figure out a bug in my code – all for a submission due that morning at 7am. How many people have that level of motivation to pursue such a strict study regimen on their own? I personally know of some who are capable but from what I’ve seen they are usually the exception to the rule.

In my personal experience, 80% of the learning curve for programming takes place through practical assignments and projects, while 20% is gleaned through understanding theory. It might take a couple of hours to flip through a CS textbook or manual, but completing those assignments and projects take days of work. Sitting, coding and debugging is where the actual learning took place for me.

It’s true that everything I learned in my degree is freely available online. There are millions of great courses, exercises, recorded lectures from top universities and textbooks in .pdf format all a Google search away.

But if you don’t have a structured framework, such as a degree, how will you push yourself to put in the time and effort required to take advantage of those resources?

Broadly speaking, my CS degree was evenly split into three different fields: math, programming and theoretical CS topics. My general feeling was that this syllabus was built to cultivate students towards academia.

Many of these theoretical courses, which are the bread-and-butter of CS degrees -- while interesting and enriching -- are simply not relevant to the day-to-day work of most software developers (feel free to disagree). These include courses such as “Theories of Computation”, “Algorithms”, “Computer Architecture” and “Operating Systems”. While there are a small group of researchers and developers, both in industry and academia, that utilize knowledge directly from these courses, from what I see in the day-to-day work of those around me, it’s uncharted territory.

The same is true for all the math subjects.?

There were however many industry-relevant areas that weren’t covered by my studies at all: these include front-end, UX and design principles, and Android / iOS development to name a few. These are all areas that I touch today on daily basis.

Unsurprisingly, I learned almost everything I need to know for my job, on the job. Being able to code is obviously a prerequisite and it is something that I learned through university. But did the theoretical knowledge from my degree help? Somewhat. Every piece of knowledge is a building block that rests on top of earlier foundations. Could I have succeeded without the theory? Yes. Sure, it would have just made the initial on-the-job learning curve steeper. But when I look at some of the brilliant developers that I work with – especially those that don’t have a degree and didn’t take those math courses – I don’t see that they’re at any disadvantage.

So that’s the catch-22 of the degree is this: it helps you land your first job by providing you with a ‘certificate of experience’, it gives you the initial skills to succeed and provides you with a solid foundation to learn what you actually need to know on the job. On the other hand, you don’t necessarily need it to acquire the initial skills and a lot of it isn’t relevant (in my humble opinion) to most day-to-day programming work.


What about short courses, technical colleges and coding workshops?

I haven’t attended one of these and I personally haven’t spoken to someone who has so I don’t have an informed opinion on the subject.

I assume that these hold a similar function to university degrees in the sense that they provide you with a disciplined framework, as well as a stamp of approval at the end of it. From what I understand these are more ‘industry focused’ and therefore the material you learn is more relevant to most industry jobs.

On the other hand, they are much shorter than a degree, more expensive (at least in Israel) and probably less well regarded amongst talent recruiters.

The paradox is that you don’t need credentials to be a great programmer, but you do need credentials to land your first job (and to make a good enough impression on the person reading your resume).

Some programs offer a guaranteed job at the end of the course, which may involve contracting for the school as it hires you out for projects at external companies. This provides a cushioned entry into the field, as you come out with both knowledge and practical experience. It also takes less time to start working. In such a case, when you apply for a job outside, you already have something on your resume. The flipside is that the initial pay while contracting is less than industry standards.

My hunch is that if you learn coding through quick program and you don’t have a job lined up at the end, then you’ll probably need some additional things on your resume to land your first software development position.

Good luck!!

Bina Hovav

?? Full Stack Web Developer | TypeScript, React, NodeJS, MongoDB | ? Enjoy Coding, Learning & Sharing Insights

6 个月

Great article! As a full-stack bootcamp graduate, I can say that indeed we learned *what we need* in order to work in the industry, but without a lot of depth about what goes on under the hood of the browser and of the computer (personally I completed some of it later), and without learning the math, data structures & algorithms, etc. The choice is very individual, and as you wrote, depends on many factors (age, professional background, personal status, financial situation etc.) and what the motivations are. An important point: I think it's very (!) important to tell people who are thinking about making the conversion into the hi-tech world about the market situation. It's not impossible to get in, but it's a very long journey until you land on your first job. Thanks for the article and the interesting insights :)

回复
Binyamin Lachkar

Fullstack Developer | JS+TS | Python | React | Angular | PHP | GitHub | mySQL | node.js | "Success is not final, failure is not fatal: It is the courage to continue that counts." - Winston Churchill

6 个月

Great article, thanks ! Well I did it, I took a course of Fullstack and now I am trying to start working fulltime as a junior. My 20 years experience in marketing can be seen as a hindrance, but it is in fact an advantage, I have a broader understanding and view than the average junior software engineer and now I need to convince recruiters :-)

回复
Jorge Michael Caballes

Top 8% Financial Advisor & Unit Manager at Sun Life PH

1 年

Hi, Avi, This may be a long shot. But my Facebook account was hacked and I BADLY NEED HELP. I've been in contact with Meta Support via email for several days already but I still could not access my account. Please! I need help :(

回复
Dan Epstein

PPC Campaign Manager @Mench Advertising | Growth Marketing | B2B Campaigns | Search Engine Marketing | Social Media Campaigns | Spreadsheet Whisperer | Content Strategy | Account Based Marketing | I am a proud commuter

4 年

I personally liked the paid content focused courses in Treehouse. I never became a coder however, I interacted much better with developers and QA teams afterwards, which is an upgrade to any marketing activity in my humble opinion.

回复

Hey Avi, nice to hear from you. Great article, thanks for sharing.

要查看或添加评论,请登录

Avi Lewis的更多文章

社区洞察

其他会员也浏览了