Sunteți pe pagina 1din 77

7 Critical Tips to Learn Programming Faster – #3 Will Land You a Job

Posted onDecember 12, 2014

Whether you’re currently pursuing a degree in computer science, a veteran using the GI Bill to choose
their mext mission, an aspiring self-taught developer, or a coding boot camp student, mastering the craft
of programming is a perpetual struggle. To assist in your learning – courtesy of the Coding Dojo
instructors – here are seven tips on how to learn programming faster.

1. Learn by doing. Always play with the code while learning

Learn Programming faster

With every new subject, the sooner you start playing with the code, the faster you will learn the given
concepts. Even if you blaze through an entire chapter of reading and a topic like for loops seems
straightforward – so straightforward even a monkey could do it – you’ll still be scratching your head
when tasked to implement the code for the first time. You’ll think, “wait, what was that one piece of
syntax again?” As the saying goes, you need to “use it or lose it”, because despite the evolution of
technology, this ole’ proverb holds true when learning to code.

Hint: Build a project as you go through the material. A personal project is often the best starting point.

2. Grasp the fundamentals for long-term benefits

Learn programming faster 1

As elementary as they may appear at first, programming fundamentals always need to come first: the
better you understand them, the easier it is to learn more advanced concepts. From our experience at
Coding Dojo, students who rush through the beginning of our courses – where we focus most on web
development fundamentals – are often the first to get stuck as we transition into more advanced
material, such as back-end programming. So before you ditch the first class of computer science 101, or
skip chapter one of an online tutorial, keep in mind that you are overlooking the most important step in
your learning.
Hint: Read this great article about the 5 Basic Concepts of Any Programming Language

3. Code by hand. It sharpens proficiency and you’ll need it to get a job

Learn programming faster

Computer monitors become thinner, hard drives lighter, and programming languages more powerful, but
coding-by-hand still remains one of the most effective methods to learn how to program. Be it on a
whiteboard or notebook, coding-by-hand requires further caution, precision, and intent behind every
line of code. Because unlike on a computer, you can’t run hand-written code midway through the sheet
to check if the work is correct. Although more time consuming, this restriction will mold you into a more
fundamentally sound developer, both in the classroom and the job market. For college exams and
technical interviews – a critical component of the job interview process – you will have to code-by-hand,
because not only is this good for learning, but it’s universally known to be the ultimate test for a
programmer’s proficiency. So start early and get used to this old-school practice.

4. Ask for help. You’ll need it

Learn programming faster

As awesome as it would be to become the next Steve Jobs on your own, the reality is that people learn
faster with mentors and peer feedback. What may seem like an immovable bug or an unlearnable topic
could be quickly alleviated by a fresh pair of eyes or a new interpretation of the subject. Whether it’s
online or in-person, ignore the trolls and don’t be afraid to ask for help, because every programmer has
been in your shoes before. Besides, most developers love to code, and if there’s one thing that
passionate individuals enjoy, it’s to share their knowledge with others.

Word of Warning: At Coding Dojo we suggest using the 20 minute rule. Take at least 20 minutes to figure
something out on your own before asking for help. There’s a good chance that the answer is already in
front of you, and besides, struggling makes you a better programmer overall.

Hint: Stackoverlfow and reddit’s learn programming subreddit are gold mines for online programming
assistance.

5. Seek out more online resources. There’s a wealth of content

Learn programming faster

If a particular concept doesn’t make sense, be it on codeacademy, in a textbook, or during class lecture,
maintain your confidence and look for alternate online resources to learn the same content. Everyone
learns differently, and just because one source doesn’t make sense, doesn’t mean there’s something
wrong with you. It means that you’re not clicking with the delivery of the material. The online resources
to learn computer programming are endless, and there’s always a reddit post, youtube tutorial, or blog
explanation that will make the material-at-hand crystal clear.

Hint: Don’t underestimate the power of google search.

6. Don’t just read the sample code. Tinker with it!

Learn programming faster

Reading sample code is not enough to understand how it works. To develop a true understanding, you
need to actually run the code and tinker with it. With the additions of comments and instructions,
sample code is packaged to be easily digestible by the reader; but in reality, it’s pretty difficult to
replicate from scratch. Reading is not the same as understanding, and actually trying to write the code
yourself, or at least running it, will facilitate the learning process much more.
7. Take breaks when debugging

Learn programming faster

When debugging, it’s easy to go down the rabbit hole for hours, and there’s no guarantee that you will
fix the problem. To avoid this, it’s best to step away from the bug for a few hours, and return with a fresh
perspective. Not only is this a guaranteed way to help solve the problem, but you’ll also save yourself
hours of headache. So if help isn’t available – to touch on our previous tip about seeking advice –
consider taking a break to clear your mind and return later. In the meantime, the bug won’t be going
anywhere, and you’ll at least restore some needed sanity to improve productivity.

Conclusion: Keep Calm and Keep On Coding

Despite these 7 tips, the most important ingredient to learn programming faster is to remain confident.
To do so, you should expect to fail repeatedly and be patient with your progress; because becoming an
expert at anything requires hard work and time. And if a single doubt ever clouds your mind, remember
that every programmer has walked this path before – none of them more destined to become a
developer than you. Whichever path you are currently on, be it college or coding boot camp, the only
barrier to success is your work ethic and confidence to persevere.

A lots of people ask me, how to learn programming from scratch. Every day i read comments of such
kind. For example, someone is working in different area, and wants to become software tester. Or,
he/she works in IT, but wants to jump on a new level and start programming. All these people have one
thing in common. They want to start the programming journey. But this area is so broad, they don’t
know how to start. And everyone tells other things about how to do it.

From this answer you will learn how to start programming from scratch. You will also receive some
advice that will help you in the progress. So, lets begin:
To learn how to code you need to follow these steps:

1. Look around

Currently programming is a very broad area. So it’s good to look around and see in what directions you
can go. Because if you know possible ways, you can choose the right one for you. It also helps to choose
technologies you should learn.

For starters i can tell about website programmers. These are people, who use for example Wordpress, or
other content management system (CMS) and with help of their skills, they adjust website so it works
like the client expects it to. To do it such people need to know mostly JavaScript, HTML and CSS.

Website developer - this is supposably the most popular interpretation of a “programmer” in the world.

But programming is not only about Wordpress websites. It is much much more. Programming is divided
into several reals. First, i will give you three examples of frontend realms. Frontend programming is
programming of something that the user / client sees. An interface. In short words:

Webapp programming - building business online apps (such as your bank app, or movie comparision
app). These are specific applications that fill needs of specific group of users. They don’t serve to manage
content (like Wordpress) but to manage processes (that is: so that people can, in short words, complete
some tasks). In addition to JavaScript, HTML and CSS programmers needs to know some additional
technologies for webapp programming. It depends on a project, for example: SCSS, TypeScript and any of
the following frameworks: Ember, Angular, Vue or React. (Framework is a skeleton of an application with
build it features).

Desktop app programming - like above, but it is about programming applications you can install for
example on a Windows system. This group differs from the previous one. It uses other technologies. For
example programming for Windows can use C# language and .NET Framework.

Mobile app programming - it is about writing apps installed on mobile devices. Mainly on devices with
Android and iOS operating systems. Programming for Android uses mostly Java programming language
and for iOS: Swift language. For each system there are different frameworks. There are also frameworks
for both systems.

These were examples of frontend reals. Now lets move on to backend realms. Backend is, more or less,
programming something, client / user does not see, but is essencial for the system to work:

Database programming - databases like MySQL and MSSQL. Database is, more or, less, an advanced
spreadsheet. Database stores thus more data, and allows to manipulate it programatically. Add data,
remove them, change. Additionally it allows to set up different ways of handling data. For example reject
incomplete data, or gather data from different tables. Database systems use their variations of SQL
language (for example T-SQL for MSSQL). The language allows to code various operations on the data.
There are also databases that don’t use SQL language. They use a mystical name: NoSQL.

Backend programming - backend developer processes data between database and frontend, or between
different systems that need to cooperate. Almost every programming language can be used for backend
purposes. But since backend has specific use cases people tend to use different languages than for
frontend. For example: PHP, Ruby, Python, Java, but also JavaScipt.

Most of programmers divide into frontend and backend developers. But there are also fullstack
developers. Fullstack developer is a person, who knows frontend and backend technologies. He/she can
take care of everything to set up an application: database, backend and user interface.

But these are not all realms. And in most of such overviews other realms are omitted. We have more and
more advanced devices, sensors, that provide data to information systems. These need to be
programmed also. This is called embedded programing. Embedded programming is done mostly in C and
C++ languages, because these languages give the programmer access to low level abstraction. It saves
resources of these small devices.

Another thriving realm of programming is data analysis. Developers of data analysis use large data sets in
companies and prepare results for business conclusions to be made upon them. Such programmers use
diffent sets of languages, including Python and R (yes, this is a name of a programming language, just a
letter R. Where is the world coming to right?).
Another realm is legacy programming. Legacy developers know technologies that were used to build
systems, but are not popular anymore. They support legacy systems, that need to function, but were
build years ago.

There are a lots of other programming reals. I won’t write about all of these here. But it is possible to
find them.

This is the end of this point. Why it is so important? If you know what area you are interested in, you can
choose technologies, you should learn. And it is easier to learn a few of technologies than 200 of these.

Lets assume you already know what area you are interested in, shall we? What is next?

2. Choose technologies

To move further you need to make an informed decision about technologies you should learn. But
honestly it is hard to get a good advice about it. You could ask someone, or go to studies or a bootcamp.
But either way, you will end up learning: a) what is popular b) what is know by the person who teaches
you c) what uses person who answers. And often it is not a good choice. But i have good news. You can
do it better and do it good.

Read about what technologies are used by companies that work in area, you are interested in. Search for
job offers, see what technologies reoccur. Don’t loose enthusiasm because there are 20 technologies
there. It’s a fiction. People write things that are not required later for the job.

Often, i read that people know a little bit of this, a little bit of that. And they still don’t know how to
become a programmer. They are lost. It’s totally true. Programming is a very broad area, and you can not
learn everything. You need to choose direction and stick to it. That way you increase your chance to
succeed.

3. Choose learning method


This point is very important and i will write why. Everyone has their opinion how a developer should
learn. If you was looking for the answer online, you will find a lots of ideas what is right. One will advice
to use YouTube videos. Other will tell book is the way to go. Other person will tell a bootcamp is the best.
Software developer learns from a documentation! Some developers say also, that college education is
useless. I am sad about such statements.

You don’t know what is best. And it’s completely natural. Everyone tells different things. Personally i
could recommend ebooks and video tutorials, because i like these. But this would not a proper nor
helpful answer.

In reality, it does not matter how you learn. As long as you learn. And do you remember how did you
learn at school? How did it look like? Did a teach ask you to learn a little bit of this, a little bit of that.
Things that have no connection between? No. And in school you learn complicated stuff. Stuff that didn’t
matter to you. But everyone remembered a little bit from this.

It’s because learning in schools is systematic and methodical. Step after step. The system was developed
through hundreds years of experience. If you think it is not good enough: ask yourself: how to make a
potato battery? This system is that good!

You are interested in learning programming. The best thing you can do for yourself is to choose a method
that is methodical and systematical. So lets answer to ourselves, what is the most methodical and
systematical method of learning? Obviously it is a high school education. High school teaching staff
knows methodical and systematical education very well. It will be hard, but you will learn programming.

Another way to learn are books and books. With a little bit of carefullness you will find a book that
teaches stuff step by step. From easy to difficult things. From A to Z. But you need to like to read.

Video tutorials and online courses - these can be great if the autor prepared it methodically - it will help
you with learning. Especially if you like to watch and learn.

Bootcamp - an intensive programming training. You can also benefit from this. It is a good solution if you
like to work with people in a group.

Only thing i want to make you aware of to not use non-methodical, non-systematical and incomplete
ways to learn programming. Imagin you learned 50% of a topic from a YouTube video course (because it’s
free). But there is no latter part. You search for other course. But in other course there are things you
don’t know. Also some things you know. And topic is explained in totally different way. It is so down-
spirit! So for starters: content that covers topic from A to Z.

Reaching soon the end of this point i wanted also to notice one issue that is extremely important. I read
that people advice beginners to use english content to learn. These people don’t know what they are
doing. When you are a beginner - don’t make your life hard. If you have content in your native language -
use it. Why you should learn programming in foreign language? It is an utter garbage. You could also
learn spanish from german book while speaking english, or polish from canadian book while speaking
japan. is it possible? Yes. But why?

4. Set a goal

Setting goals is often omitted in planning a work career. People start to learn one course, than stop, then
go to a bootcamp while the time inevitably passes. After several months you don’t remember what you
have learned before. It seems you learned something, but what precisely did you acomplish?

To make learning easier it is a good idea to set a goal. For example you can swear you will read a 800-
page long book in a month. Or, you will end up graduate studies, or find a junior developer job in 6
months.

Everything goes better, if you will set a goal. It is someting about our nature, that goals make life easier.
Learning is not easy. Programming i not easy. Learning programming is off the charts. That is why a goal
is so important. And satisfaction from reaching it gives motivation for further work.

5. Learn systematically
When you already have a goal, next step is to make a learning schedule. Every day one hour. But every
day, always one hour. And not to take another video tutorial or read an article, but to learn something
meaningful.

Is there a way to make it easier? Mind focus is required to learn programming. A lots of mind focus. Try
this out. Announce to everyone: at 6pm i will learn programming for an hour and please don’t disturb
me. Switch off the phone, log out from Facebook. Give children to parents-in-law. Give dog to a
neighbour.

Observe how much you will learn! You need to cut yourself off from the world, to really grasp the
understending of programming.

6. Code yourself

I am following a awesome beginner software developer on LinkedIn. She found a great way to practice
programming. Every day she puts up a goal to code something. For example: one day: simple calculator.
Next day: simple page with movie covers. She creates a animated GIF with what she did and puts it on
LinkedIn. She writes what she have learned during the day. I love to follow her. She creates some brilliant
mini-projects. Above of this, in early days i have also did what she does. What every good software
developer i know did. Devising tasks and programming. This is how you become a software developer.

Obviously, it is easier when you are studying, working, or joining a bootcamp, or having a book with
example tasks. Because you don’t need to figure out tasks on your own. This is also a good method. But
sometimes such tasks are boring, don’t force you to go outside of your comfort zone. And what if you
figure out a task by yourself? Than you will hit some obstacles, that will pinpoint what you should learn
to go further with your practice.

7. Ask for help

Since we are talking about problems. It is hard to articulate with what you have problems in early
programming days. For example, when a bug occurs in an appliction. How to translate the problem into
words? How to ask for it? Sometimes is so hard, people don’t know what phrase to put into a
DuckDuckGo search. Years ago it was easier. There was StackOverflow and support groups, where you
was able to ask any question. You could count on help from others.

Today you can face such answers like “search the internet”, or “this was asked before” or “again”. This is
frustrating. Unfortunately. Internet is filled with answers. What advanced software developers don’t
comprehend is that it is hard to name a problem if you are beginner programmer. Even if they had
exactly the same problem! I can assure you of this!

Thus, i strongly urge you to ask questions. Find a nice place on the internet for software developers, or
find a mentor. And ask ask ask. Sometimes you will stumble upon a hesitation. But it shall not bring you
down. And if so, find other place that is nicer.

The more you will ask, the easier it will become to articulate what you have problem with. While the
time will pass, your questions will become better and better, answers will show up faster and faster. And
later, you will discover, some problems can be solved just by the act of formulating a proper question.

8. Find work fast

I often read that people postpone searching for a job until they learn something more. And half of year
passes by. Software development is a field where you need to renew your knowledge all the time. Lets
say you have learned 3–4 technologies that you need. You start to search for a job, and get into trouble.
You could search a job for several months! And while doing it, you will forget half of things you have
learned.

So my advice is that you should start searching for a job more or less in the halfway of your learning
path. For several good reasons. First of all if you take an intern position, or junior job, your employer
assumes you know almost nothing. Secondly, recrutation process takes time itself. Before you will fine
tune your CV, before you will learn premade, available online, test questions time will pass. It will pass
while you will sharpen your recrutation talk without jitters. Finding a job is also something you need to
learn.

So in halfway of the learning path start to looking around for a job. Send CVs, schedule meetings, get
used to it. Than your technical readiness will meet with recrutation readiness and there won’t be any
lags.
9. Ask for more complicated tasks

Now you have a work position. But the biggest trap of programming is ahead of you. Since you have a
job, you can put books on shelves and just do what you are asked to be done.

It is not like this! Be aware, that often interns/juniors are not asked to do complicated tasks, but very
easy. You will notice soon, these take less and less time to be completed, and start to become boring. If
you won’t do anything about it, you loose time. You can learn new things. Not run around in circles.

Above of that, your employer sees when intern/junior stands still. I am am employer, it is as clear as the
sky. And no one wants to have timeless internet/junior.

So, when you see, you are getting better, ask your supervisor for more complicated tasks. He/she should
know to give you someting more comples. This is important to continue learning and development at the
work.

As an intern/junior you need to learn a lots, a lots of more. I am 100% sure you don’t want to become
one of these guys on the internet that say intern/junior position didn’t give them anything, learned
nothing. They didn’t learn, because they didn’t want to go further. They waster their and their employer
time.

10. Master new technologies

Programming is an awesome field, but it changes all the time. What you have learned today, will become
outdated in one year. And obsolete in 5. When you will find a job, and feel comfortable with it, master
something new. Expand your skills. Don’t stand still with your professional development. If you quit
studies, maybe it’s worth to go back. Attend a bootcamp, read a book, participate in an online course.
Whatever that will allow you to be up to date with technologies.

It is all you need to learn to start programming from scratch. This was a really long article, and i am really
amazed you have reached the end of it. I am sure 99% of people didn’t do it. It looks like you care about
becoming a software developer. Caring is 99% of a success. I wish you all the luck. Programming is
awesome and gives a lots of professional satisfaction. Don’t loose your heart for it. Go on. Step by step.

Programming is the most sought-after skill today. According to Indeed, “Software Engineer” is the top in-
demand position in the industry. Considering the huge demand for skilled programmers, it makes sense
for job-seekers to learn to programme.

Learning programming seems difficult to many. This is often because of the wrong approach they apply
to learn to code. People aspire to make complex applications, and they often don’t even know basic
programming. This happened to me too. I attended an Android workshop in college, even without
knowing the basics of Java. It wasn’t surprising that most of it went beyond my understanding at that
time. There are many people who might have had similar experiences, and hence thought that
programming is difficult.

Now, when I reflect on that incident, I realize that this is a very common problem. Hence, I would like to
share an approach to learning programming which is a lot less frustrating, and is, in fact, fun! The whole
premise of this article is that learning programming can be fun if done the right way!

How to learn programming?

In this article, we’ll see how to learn to programme in a proper manner. This article would be useful for
both, the job-seekers and students. Here is the roadmap of how to learn to code that can act as your
beginner's 101 guide:

1. Get familiar with a programming language

Getting comfortable with a programming language is the first step towards learning programming.
People often start with C, C++, Java, or Python. I personally prefer C++ in the beginning as it is neither
too simple (like Python is), nor too deficient in terms of libraries (like C is). C++ is pretty fast and has a
good library support too - best of both worlds! Also, C++ is a good choice for competitive programming
because it is pretty fast and has the support of Standard Template Library (STL). The choice of the first
language is highly subjective based on your interests and goals. You may be interested in front-end, back-
end, mobile app development, game development, data science, etc. If your main aim is to get a job
then do check out our article on which programming language is best for getting a job?
You can start with learning the basics - syntax, data types, variables, loops, arrays, etc. Try to solve simple
implementation-based questions so as to get familiar with these basic concepts.

2. Learn Data Structures and Algorithms

Once you are comfortable with any of the languages mentioned in the above section, the next thing you
should do is learning data structures and algorithms. Data structures and algorithms help in building the
right aptitude required for programming. Knowledge about the data structures will help you in choosing
the right one for the problem you are solving - not all data structures can be used everywhere. When
you learn about the algorithms, you will be able to understand the working mechanism of many library
functions, which, otherwise, would come across to you as black boxes.

There are many good online courses that you can study from. Algorithms part 1 and part 2 are good
courses to start with. It is important that you spend time thinking about the implementation of these
data structures and algorithms so as to get comfortable with them. You may think that learning their
implementation might not be important as ultimately the library functions are used. This is one of the
most common misconceptions people have. Understanding the implementation will help you in
assessing the time complexity, which will help you in further optimizing your code. There is an amazing
website, Visualgo, where you can actually visualize the working of the various data structures and
algorithms.

hackr-plus

3. Get your hands dirty with competitive programming

Once you have learned data structures and algorithms, you should start solving problems on websites
like SPOJ, Codechef, Codeforces, Topcoder, Hackerrank, Geeksforgeeks etc. The more problems you solve,
the better it is. It is better, though, to solve problems in increasing order of difficulty. You can sort the
problems in descending order of the number of submitted solutions and start solving. After solving
around 100 mixed variety problems, you will become confident about your programming skills.

After you have become comfortable with solving the questions and coding the solutions, you can then
start participating in various online programming contests. Doing this will enhance your programming
skills a lot.
4. Make a project

Now that you have enhanced your problem-solving and programming skills, it is time to create some
useful applications. You can pick up some popular web development framework (Django, Flask, Ruby on
Rails, etc.) and make a project using it. Making an application will give you a feel of actual software
development, which is what most of the programmers do.

Once you have made some web development projects, you may like to try your hand at Android or iOS
development. Don’t restrict yourself - learn whatever you want to!

5. Explore

Once you are confident about your programming skills and have made some projects, you should now go
on to explore the various domains of Computer Science and see what fascinates you the most.

Computer Science is a vast and rich field, with many interesting sub-fields. Some of the popular domains
of Computer Science are Artificial Intelligence, Machine Learning, Cryptography, Cloud Computing,
Systems Programming, Computer Vision, Natural Language Processing, Blockchain, Virtual Reality, Web
Development, Mobile App Development, and many more. You should try to explore as many fields as
you can so as to know where your interest lies.

Nowadays, there are plenty of online resources to study any of the above-mentioned fields. But with a
plethora of available resources, it’s difficult for a beginner to find a great tutorial out of so many options.
Whatever is your interest, you can find the best tutorials, recommended by the programming
community, for that language/framework on Hackr.io. Apart from the tutorials and courses, you can also
find the best books and exercises/projects/ practice-problems on Hackr.

Once you study something, try to do a project related to it. Projects help in strengthening the concepts
that have been learned. Also, they are good from the perspective of making a resume.

In this article, we saw an approach to learning programming. This is how I learnt to code:) Since you are
reading this article, I presume that you are serious about learning programming, which is a good thing!
Hope you found this article to be helpful. All the best for your journey of learning!
A lots of people ask me, how to learn programming from scratch. Every day i read comments of such
kind. For example, someone is working in different area, and wants to become software tester. Or,
he/she works in IT, but wants to jump on a new level and start programming. All these people have one
thing in common. They want to start the programming journey. But this area is so broad, they don’t
know how to start. And everyone tells other things about how to do it.

From this answer you will learn how to start programming from scratch. You will also receive some
advice that will help you in the progress. So, lets begin:

To learn how to code you need to follow these steps:

1. Look around

Currently programming is a very broad area. So it’s good to look around and see in what directions you
can go. Because if you know possible ways, you can choose the right one for you. It also helps to choose
technologies you should learn.

For starters i can tell about website programmers. These are people, who use for example Wordpress, or
other content management system (CMS) and with help of their skills, they adjust website so it works
like the client expects it to. To do it such people need to know mostly JavaScript, HTML and CSS.

Website developer - this is supposably the most popular interpretation of a “programmer” in the world.

But programming is not only about Wordpress websites. It is much much more. Programming is divided
into several reals. First, i will give you three examples of frontend realms. Frontend programming is
programming of something that the user / client sees. An interface. In short words:

Webapp programming - building business online apps (such as your bank app, or movie comparision
app). These are specific applications that fill needs of specific group of users. They don’t serve to manage
content (like Wordpress) but to manage processes (that is: so that people can, in short words, complete
some tasks). In addition to JavaScript, HTML and CSS programmers needs to know some additional
technologies for webapp programming. It depends on a project, for example: SCSS, TypeScript and any of
the following frameworks: Ember, Angular, Vue or React. (Framework is a skeleton of an application with
build it features).

Desktop app programming - like above, but it is about programming applications you can install for
example on a Windows system. This group differs from the previous one. It uses other technologies. For
example programming for Windows can use C# language and .NET Framework.

Mobile app programming - it is about writing apps installed on mobile devices. Mainly on devices with
Android and iOS operating systems. Programming for Android uses mostly Java programming language
and for iOS: Swift language. For each system there are different frameworks. There are also frameworks
for both systems.

These were examples of frontend reals. Now lets move on to backend realms. Backend is, more or less,
programming something, client / user does not see, but is essencial for the system to work:

Database programming - databases like MySQL and MSSQL. Database is, more or, less, an advanced
spreadsheet. Database stores thus more data, and allows to manipulate it programatically. Add data,
remove them, change. Additionally it allows to set up different ways of handling data. For example reject
incomplete data, or gather data from different tables. Database systems use their variations of SQL
language (for example T-SQL for MSSQL). The language allows to code various operations on the data.
There are also databases that don’t use SQL language. They use a mystical name: NoSQL.

Backend programming - backend developer processes data between database and frontend, or between
different systems that need to cooperate. Almost every programming language can be used for backend
purposes. But since backend has specific use cases people tend to use different languages than for
frontend. For example: PHP, Ruby, Python, Java, but also JavaScipt.

Most of programmers divide into frontend and backend developers. But there are also fullstack
developers. Fullstack developer is a person, who knows frontend and backend technologies. He/she can
take care of everything to set up an application: database, backend and user interface.

But these are not all realms. And in most of such overviews other realms are omitted. We have more and
more advanced devices, sensors, that provide data to information systems. These need to be
programmed also. This is called embedded programing. Embedded programming is done mostly in C and
C++ languages, because these languages give the programmer access to low level abstraction. It saves
resources of these small devices.

Another thriving realm of programming is data analysis. Developers of data analysis use large data sets in
companies and prepare results for business conclusions to be made upon them. Such programmers use
diffent sets of languages, including Python and R (yes, this is a name of a programming language, just a
letter R. Where is the world coming to right?).

Another realm is legacy programming. Legacy developers know technologies that were used to build
systems, but are not popular anymore. They support legacy systems, that need to function, but were
build years ago.

There are a lots of other programming reals. I won’t write about all of these here. But it is possible to
find them.

This is the end of this point. Why it is so important? If you know what area you are interested in, you can
choose technologies, you should learn. And it is easier to learn a few of technologies than 200 of these.

Lets assume you already know what area you are interested in, shall we? What is next?

2. Choose technologies

To move further you need to make an informed decision about technologies you should learn. But
honestly it is hard to get a good advice about it. You could ask someone, or go to studies or a bootcamp.
But either way, you will end up learning: a) what is popular b) what is know by the person who teaches
you c) what uses person who answers. And often it is not a good choice. But i have good news. You can
do it better and do it good.

Read about what technologies are used by companies that work in area, you are interested in. Search for
job offers, see what technologies reoccur. Don’t loose enthusiasm because there are 20 technologies
there. It’s a fiction. People write things that are not required later for the job.

Often, i read that people know a little bit of this, a little bit of that. And they still don’t know how to
become a programmer. They are lost. It’s totally true. Programming is a very broad area, and you can not
learn everything. You need to choose direction and stick to it. That way you increase your chance to
succeed.

3. Choose learning method

This point is very important and i will write why. Everyone has their opinion how a developer should
learn. If you was looking for the answer online, you will find a lots of ideas what is right. One will advice
to use YouTube videos. Other will tell book is the way to go. Other person will tell a bootcamp is the best.
Software developer learns from a documentation! Some developers say also, that college education is
useless. I am sad about such statements.

You don’t know what is best. And it’s completely natural. Everyone tells different things. Personally i
could recommend ebooks and video tutorials, because i like these. But this would not a proper nor
helpful answer.

In reality, it does not matter how you learn. As long as you learn. And do you remember how did you
learn at school? How did it look like? Did a teach ask you to learn a little bit of this, a little bit of that.
Things that have no connection between? No. And in school you learn complicated stuff. Stuff that didn’t
matter to you. But everyone remembered a little bit from this.

It’s because learning in schools is systematic and methodical. Step after step. The system was developed
through hundreds years of experience. If you think it is not good enough: ask yourself: how to make a
potato battery? This system is that good!

You are interested in learning programming. The best thing you can do for yourself is to choose a method
that is methodical and systematical. So lets answer to ourselves, what is the most methodical and
systematical method of learning? Obviously it is a high school education. High school teaching staff
knows methodical and systematical education very well. It will be hard, but you will learn programming.
Another way to learn are books and books. With a little bit of carefullness you will find a book that
teaches stuff step by step. From easy to difficult things. From A to Z. But you need to like to read.

Video tutorials and online courses - these can be great if the autor prepared it methodically - it will help
you with learning. Especially if you like to watch and learn.

Bootcamp - an intensive programming training. You can also benefit from this. It is a good solution if you
like to work with people in a group.

Only thing i want to make you aware of to not use non-methodical, non-systematical and incomplete
ways to learn programming. Imagin you learned 50% of a topic from a YouTube video course (because it’s
free). But there is no latter part. You search for other course. But in other course there are things you
don’t know. Also some things you know. And topic is explained in totally different way. It is so down-
spirit! So for starters: content that covers topic from A to Z.

Reaching soon the end of this point i wanted also to notice one issue that is extremely important. I read
that people advice beginners to use english content to learn. These people don’t know what they are
doing. When you are a beginner - don’t make your life hard. If you have content in your native language -
use it. Why you should learn programming in foreign language? It is an utter garbage. You could also
learn spanish from german book while speaking english, or polish from canadian book while speaking
japan. is it possible? Yes. But why?

4. Set a goal

Setting goals is often omitted in planning a work career. People start to learn one course, than stop, then
go to a bootcamp while the time inevitably passes. After several months you don’t remember what you
have learned before. It seems you learned something, but what precisely did you acomplish?

To make learning easier it is a good idea to set a goal. For example you can swear you will read a 800-
page long book in a month. Or, you will end up graduate studies, or find a junior developer job in 6
months.
Everything goes better, if you will set a goal. It is someting about our nature, that goals make life easier.
Learning is not easy. Programming i not easy. Learning programming is off the charts. That is why a goal
is so important. And satisfaction from reaching it gives motivation for further work.

5. Learn systematically

When you already have a goal, next step is to make a learning schedule. Every day one hour. But every
day, always one hour. And not to take another video tutorial or read an article, but to learn something
meaningful.

Is there a way to make it easier? Mind focus is required to learn programming. A lots of mind focus. Try
this out. Announce to everyone: at 6pm i will learn programming for an hour and please don’t disturb
me. Switch off the phone, log out from Facebook. Give children to parents-in-law. Give dog to a
neighbour.

Observe how much you will learn! You need to cut yourself off from the world, to really grasp the
understending of programming.

6. Code yourself

I am following a awesome beginner software developer on LinkedIn. She found a great way to practice
programming. Every day she puts up a goal to code something. For example: one day: simple calculator.
Next day: simple page with movie covers. She creates a animated GIF with what she did and puts it on
LinkedIn. She writes what she have learned during the day. I love to follow her. She creates some brilliant
mini-projects. Above of this, in early days i have also did what she does. What every good software
developer i know did. Devising tasks and programming. This is how you become a software developer.

Obviously, it is easier when you are studying, working, or joining a bootcamp, or having a book with
example tasks. Because you don’t need to figure out tasks on your own. This is also a good method. But
sometimes such tasks are boring, don’t force you to go outside of your comfort zone. And what if you
figure out a task by yourself? Than you will hit some obstacles, that will pinpoint what you should learn
to go further with your practice.

7. Ask for help

Since we are talking about problems. It is hard to articulate with what you have problems in early
programming days. For example, when a bug occurs in an appliction. How to translate the problem into
words? How to ask for it? Sometimes is so hard, people don’t know what phrase to put into a
DuckDuckGo search. Years ago it was easier. There was StackOverflow and support groups, where you
was able to ask any question. You could count on help from others.

Today you can face such answers like “search the internet”, or “this was asked before” or “again”. This is
frustrating. Unfortunately. Internet is filled with answers. What advanced software developers don’t
comprehend is that it is hard to name a problem if you are beginner programmer. Even if they had
exactly the same problem! I can assure you of this!

Thus, i strongly urge you to ask questions. Find a nice place on the internet for software developers, or
find a mentor. And ask ask ask. Sometimes you will stumble upon a hesitation. But it shall not bring you
down. And if so, find other place that is nicer.

The more you will ask, the easier it will become to articulate what you have problem with. While the
time will pass, your questions will become better and better, answers will show up faster and faster. And
later, you will discover, some problems can be solved just by the act of formulating a proper question.

8. Find work fast

I often read that people postpone searching for a job until they learn something more. And half of year
passes by. Software development is a field where you need to renew your knowledge all the time. Lets
say you have learned 3–4 technologies that you need. You start to search for a job, and get into trouble.
You could search a job for several months! And while doing it, you will forget half of things you have
learned.
So my advice is that you should start searching for a job more or less in the halfway of your learning
path. For several good reasons. First of all if you take an intern position, or junior job, your employer
assumes you know almost nothing. Secondly, recrutation process takes time itself. Before you will fine
tune your CV, before you will learn premade, available online, test questions time will pass. It will pass
while you will sharpen your recrutation talk without jitters. Finding a job is also something you need to
learn.

So in halfway of the learning path start to looking around for a job. Send CVs, schedule meetings, get
used to it. Than your technical readiness will meet with recrutation readiness and there won’t be any
lags.

9. Ask for more complicated tasks

Now you have a work position. But the biggest trap of programming is ahead of you. Since you have a
job, you can put books on shelves and just do what you are asked to be done.

It is not like this! Be aware, that often interns/juniors are not asked to do complicated tasks, but very
easy. You will notice soon, these take less and less time to be completed, and start to become boring. If
you won’t do anything about it, you loose time. You can learn new things. Not run around in circles.

Above of that, your employer sees when intern/junior stands still. I am am employer, it is as clear as the
sky. And no one wants to have timeless internet/junior.

So, when you see, you are getting better, ask your supervisor for more complicated tasks. He/she should
know to give you someting more comples. This is important to continue learning and development at the
work.

As an intern/junior you need to learn a lots, a lots of more. I am 100% sure you don’t want to become
one of these guys on the internet that say intern/junior position didn’t give them anything, learned
nothing. They didn’t learn, because they didn’t want to go further. They waster their and their employer
time.
10. Master new technologies

Programming is an awesome field, but it changes all the time. What you have learned today, will become
outdated in one year. And obsolete in 5. When you will find a job, and feel comfortable with it, master
something new. Expand your skills. Don’t stand still with your professional development. If you quit
studies, maybe it’s worth to go back. Attend a bootcamp, read a book, participate in an online course.
Whatever that will allow you to be up to date with technologies.

It is all you need to learn to start programming from scratch. This was a really long article, and i am really
amazed you have reached the end of it. I am sure 99% of people didn’t do it. It looks like you care about
becoming a software developer. Caring is 99% of a success. I wish you all the luck. Programming is
awesome and gives a lots of professional satisfaction. Don’t loose your heart for it. Go on. StePerhaps
the best way to learn how to code is to write code. What applies to mathematics applies to programming
as well. It is only by solving problems that you can learn to get better at it.

The difficulty for a lot of beginners is contending with syntax and understanding why something works
the way it works. I honestly feel that it would be simpler for a lot of people if people focused on what
needed to be done to solve a problem, and how the tools that programming languages give you can be
used to systematically construct a solution. This may mean using a certain kind of variable or data
structure to store information or manipulate it, or it may mean constructing a certain model of a real
world or hypothetical object. It may mean writing a function that converts a variable or object (or
indeed, another function) to some result.

One key lesson I’ve learned about programming and learning programming is to start with the simple
languages first. When you have simple languages with clear and readable syntax, you are more likely to
respond to a problem solving situation in a productive way. This is the reason Python is taught to many
beginners, since it has a clear, readable syntax. The first language I was ever exposed to was BASIC, and
subsequently, I learnt C. C didn’t make any sense to me - partly because of the quality of faculty that
taught me C in and outside college - but after trying simple programs in C and then C++ out for several
years, I was able write what can be considered full fledged C++ code, using my own types, complex
functions that include recursion and calls by reference, data structures inside the program which
influenced the design of other data structures, and so on. But this took time - a few years - to happen,
and I had to chip away and try to use the tools the language gave me to build abstractions, data
structures, functions and other ways to manipulate data and objects.
I know a lot of people who start off by asking a lot of questions at the start. Some things in programming
don’t make sense right away. If you’re learning a language other Python which requires you to type
“public static void main” in a function definition for printing something as simple as “Hello World” on the
command line, you will be perplexed by the number of answers you won’t get at the very start. This is
why it is important to start with simpler languages and learn them well on the road to learning complex
and/or powerful languages. So if you’re a beginner, avoid a language like Java (which, despite its power,
is not a language suitable to beginners), and start with something like Python. When you learn a simpler
language and its components, you have a shorter learning curve. The reason is that the language
abstracts away some of the complexity and allows you to focus on the problem solving - and in the long
run, this means you can think about problems rather than syntax.

Once you can solve simple problems in a (dynamically typed, interpreted) language like Python, consider
learning a language with a strong type system, which support different programming styles, and which
has a wide range of high level libraries. A good “statically typed” language, such as Java or C++, will
become more accessible to you once you can get the logic of problem solving right, and when you can
start reasoning with the tools of common programming languages.

One observation I’ve made about myself and programming languages is that it is very easy to lose touch
of a language that you don’t use regularly. It is in this sense almost like speaking a language, and if you
don’t speak it often enough, your brain finds better uses for those neurons and the connections between
them. So, one key aspect of becoming a good programmer is probably to constantly try to solve
problems.

Parting thought: It is often said that some people are naturally gifted or talented programmers - but I
know many colleagues and others who have learnt programming well into their work life, and have
become good at it by practice and thinking analytically. So, a good attitude and a willingness to learn,
explore and solve problems definitely helps more than just sheer intelligence. :)

There is nothing magical about learning to code but I would suggest a few guidelines:

1) Less is more

2) Practice

3) Keep learning
Less is More

Start small. Ruby, Python, C, Javascript are all great. Skip the frameworks (Rails, Django etc.) for now.
Skip HTML, CSS, Apache, IIS, AWS etc. You want to learn how to program so learn how to write a
program. There are lots of intro books and websites for those languages, start there. If you add in
frameworks, databases, markup languages and virtual environments, your head is going to explode. You
don't learn by drinking from a firehose, you just get soaked (but you might not be thirsty anymore).

Practice

Since you are learning a programming language like Ruby, write lots of small programs. Seriously, write
10-15 programs with 10 or more lines of code. Each one should do something very straightforward,
ideally a single sentence should describe what it does: reverse the output of any input, add up a series of
numbers, print out the lines of a file etc. Work up to something like a command line calculator or search
a web site for keyboards etc. The typical getting started books have lots of these types of programs for
you to work on.

The most important part is you HAVE to write these programs. You cannot learn to program by only
reading about it.

The goal is to be able to start with a blank editor screen and write a program that does something
meaningful (think a subset of "cat", "grep", "curl" or whatever) without having to use the browser to
copy and paste an answer from someone else. Checking the syntax on a command is okay (does the file
go in the second or third parameter) but not how to write a loop or check a condition.

Keep Learning

So you can create your subset of a tool like "grep," now what? Well guess what? You have learned how
to program. You were successful because you focused on learning one thing.

Now is a time to add in something else. Let's go with learn HTML (skip Javascript, CSS and the various
frameworks). Learn the HTML tags, build a few static pages and look at them in the browser. Nothing
fancy but it is HTML. Now modify your grep tool to output HTML instead of of text. Get comfortable with
this by building a couple of programs to output HTML, again, nothing fancy, the value is doing it
repeatedly and being successful rather than inventing the next Facebook.

So you are "comfortable" with a programming language, HTML and generating HTML output? Well, if
you are comfortable with structured data from spreadsheets or a tool like Access, you can start with a
framework like Rails, otherwise, you need an introduction to structure data and databases. A getting
started guide to MySQL, Postgres or Redis (maybe) would be a good place to go).

Once you are at the framework level, you can start to focus on "real" problems. This approach works
regardless of web, app or desktop development, the only difference is the tools and frameworks. Break it
down and learn the basics before trying to go to the next level. It is really hard to do bike stunts if you
can't even ride a bike.

Expect to spend lots of time in the Keep Learning phase. That part never stops.

What exactly is programming ?

Now lets get to what is the best way to learn programming.

Put in simple words, computer programming is nothing but a way to instruct/ command a computer to
perform a set of instruction.

You program a computer to perform a certain task, simple or complicated.

Henceforth you must know a way to communicate effectively with the computer.

In general as with human beings if you have the ability to communicate effectively with other people,
you might be able to convince them to do whatever you want.

Same is the case with computers, the more you are good at communicating with a computer the better it
will respond to your request.

Hence to get better at communicating with computers, you need to learn their language.

Hence your first step would be to learn any language which allows you to communicate with the
machine.

Step 1: Choosing a programming language.


Python is a great language to get started with as a beginner.

If you want to know how you can get started with Python then I would highly recommend you to go
through this answer: Saurav Sharma's answer to How should I start learning Python?

In here, I’ve listed detailed steps so as to how you can get started with learning Python today!

2. Step 2: Getting better at solving problems.

Now you have learned a programming language and now can effectively communicate with the
computer.

But that does not mean you are a programmer yet.

Knowing a language and its grammar wont make you a poet, in a similar way knowing a programming
language does not make you a programmer.

Always remember, programming is like poetry.

No matter how good you are with it, you can still get better.

You become a programmer by being able to solve a problem. Hence to become a good programmer,
solve a ton of problems.

Programming problems can be as simple as printing our a fibonacci series or as complex as predicting
election results based on tweets.
3. Step 3: Getting efficient.

In programming there are hundred ways to solve a single problem.

Once you get good at solving problems you now want to get good at finding the finding the best
alternative to solve a problem.

This is where your critical thinking abilities come into picture and you can only get good at it by practice.

No matter how intelligent of a person you are, there is no way getting around it except for practice.

4. Step 4: Don’t just write code, read it as well.

If you want to be a great poet/writer, you must also read a lot.

Same is the case with programming as well, you will also need to read a lot of code from other
developers who are better than you.

Reading other people’s code will give you a perspective of how they think and how others approach the
same problem.

It will also allow you to compare your code to other’s so that you can find what exactly were you missing.

Thankfully we have Github which allows you to peep into other people’s code.

5. Take action:
I can’t emphasis this enough, don’t just read this answer.

Instead take action and get started today.

I come across so many aspiring developers who are so busy in gathering information about programming
that they are left with no time to actually code.

If you want, go through this answer again, take notes and start right now.

According to me It's no secret that software development has exploded in the past 20 years.

It then follows that a lot of people think software development is a good career choice and are afraid of
missing out on a lot of great opportunities.

Software developers are, in general, pretty opinionated. I doubt this is unique to developers, but it gets
tiresome when you've dealt with it for years. If we're not fighting over what operating system is better,
then it's what language is better. If it's not that, then it's code editors, or databases, or frameworks, or
bug trackers, or development processes, or...or...or. It's like we enjoy fighting.

In a time where more and more people are becoming developers, it's not enough to be just "a
developer" anymore. No, to feel superior now, developers need to somehow differentiate themselves
from both the non-developer “rabble” and their fellow developers.

This mentality has lead to more coding languages being developed that purport to "fix" issues with other
languages. New frameworks are built to "fix" issues with previous frameworks. And on and on.

All this leads to a huge amount of choices, opinions, and resources. Naturally, that makes starting to
learn, daunting.

Since I'm a developer too, I'm susceptible to the same opinions and biases that I just railed against. The
difference is, I'm right. I'm kidding, seriously, calm down everybody. Here are my suggestions.

Choose your

weapon

language

As someone once said: “the weapon doesn’t make the man.” It’s probably a quote from some B martial
arts movie or Dragonball Z, but the philosophy holds true for programming languages. A good developer
is a good developer regardless of language. Learning anylanguage will help you understand the core
concepts of programming. However, you need to start someplace, and if you pick your first language
wisely, you’ll drastically shorten the time to hit your goal.

Picking a language boils down to what you want to do. This is a quick list of general development goals
and what language(s) are your best options to get there (NOTE: this is not meant to indicate that these
are the only languages that you can use for a given domain, just my suggestion on what to start with):

Front-end web development (user interface and interaction): Javascript, HTML & CSS

Back-end web development (services that front-end web apps and mobile apps call out to): Ruby,
Python, Javascript, or PHP

Mobile development: Swift (iOS) or Java (Android)

Windows development: C#

MacOS development: Swift or Objective-C

Operating systems, file systems, embedded systems, etc: C/C++

Game development: (C++, Unity and C#)

Data Science: R

🖤
First off, you have never programmed before. Focus on learning how to program and forget about the
industry for now. Program for a few months and then think ahead.

Choice of language:

Programming can become boring if you are not creating anything useful. You absolutely don't want that.
Pick up something that you can actually use in the early stages. The language should have powerful
libraries (pre-written modules) to help you create something without a lot of hiccups.

Python is a really great language for beginners especially if you haven't done programming before as
mentioned in your question. You will also have some introductory programming courses in your
curriculum.

Adaptability:

It is not at all difficult to switch to something else.

Adaptability will actually help you later on. Most of the time you will be working with a technology you
do not have previous experience in. Do not get tied to any language. Be open to learning anything new.
Whatever you choose, make sure to produce something useful with it. This might be difficult if you start
with C++. I will not go into the details since you have never done programming before.

A note on HTML and CSS:

Should I start with C++, Java, Python, HTML5, CSS or something else?

HTML and CSS are markup languages and not programming languages. The basis of programming is
manipulating the bits in the storage area. How easily you can do this depends on the level of the
language: low level assembly is closer to the machine while a high level language like Python gives you
enough abstractions to make it easier for a programmer to produce something useful.

HTML doesn't do that. It just has tags that tell the browser how to display a particular text. For example,
writing <b> Hello World </b> will display Hello World in bold. You are not manipulating the data storage,
you are not programming anything. If you want to learn how to program, do not start with HTML.
Even if you want to go into web development, I will still suggest you to start with Python.

Web development basically needs these 4 technologies:

1. HTML and CSS for the user interface that loads up on the browser.

2. JavaScript which helps dynamically change the looks and information on the webpage. (JavaScript is
different from Java, in case you are wondering). If you have picked up Python, learning JavaScript should
be easy.

3. A server side language - you can use python, java, ruby, etc.

4. A database language to store the data on the server.

Resources:

I am planning to start learning programming online

For Python, you can look into Udacity and Coursera. I remember there was a good introductory
programming course that used Python and taught a lot of programming concepts. Try to look for it on
mit ocw. There is also the learnpythonthehardway.

First, congratulations for your keen interest to learn to code.

To START OVER, select any programming language. Let’s say you go with JAVA or PYTHON, the learn the
basics of them from either youtube or from any website, look for two things mainly :

Syntax formation for any particular language as every language has its own syntax declaration. Do not go
into deep but learn basics like how to declare a variable, how to manage variables, how to run loops like
for, foreach, while, do while etc.

The logic which is required for the code as syntax may change for languages but logic remains same.

Once you are comfortable with the basics of the language, now is the turn for the hard part but the most
fun part, SELECT ANY PROJECT and try to develop and code it in the language you were learning.

The live project will make you help to learn the deep concepts of the language as well as programming,
then try to complete the project as it will boosts your confidence and do not worry, i repeat do not worry
even if you will not be able to complete the 100% of it, try to complete it by 70% as by then you will be
able to grasp major things in that language as well as your logic will be super developed.
Once you are go with that, you have many options, you can contribute to open source, learn various
frameworks of that programming language and be an amazing software developer, etc.

All it takes is dedication, a little bit passion and amazing cup of coffee.

Instead of telling you what are some of the fastest ways, I will tell you which one is THE fastest, with the
second one being orders of magnitude slower.

So the fastest way is:

Pick any language, and then pick a simple goal, like “write a program that….” where what follows is
something simple like giving a date, find what day (Mon, Tue, etc) was on that date. Or write a program
that asks for a sentence with a length of at least 5 words, and then replace every word in that sentence
that contains exactly two of the same vowel token (e.g. exactly two ‘a’) with the word poop. You get the
idea. Some stuff that are VERY simple.

Then on a piece of paper, you should write what you think the steps to achieve your goal are or should
be.

For example, the first step would be to ask the user for an input.

You should now use any search engine to figure out how exactly you do that in the language you have
chosen. It does not matter if you understand at this point why you have to do it this or that way… All that
matters is that you just do it. Copy paste what they tell you that it is you need to do to ask for a user’s
input.

Repeat this process of figuring out how to do each of the steps in your list, for every one of the steps that
you had on the paper. If during this process you discover that you needed one step in between two of
the steps, just add it, on the list.

Eventually, you will have wondered about how to do a bunch of things, and you will have found solutions
for EACH one of them.
You know what?

This is programming.

Now you may think that you cheated because you were googling stuff, but you did not. This is how you
will learn. At some point, you will discover that you do NOT need to be googling at all. You will remember
how you did this or that and you will just do it. Also, you won't be afraid or intimidated by small project
ideas anymore.

This won't be 3 years or 3 months away or 3 weeks away.

Do something like 3–5 such small “projects” and what you will notice is that what I just described is
already happening. If you do that in 3 days, it WILL happen in 3 days. Do that in one day, and it will
happen in one day. i.e the speed is up to you.

At that point, just enjoy your new skill.

The more you do it, the better you will become at it, and the less afraid of - and more willing to tackle -
more complex stuff. You will literally be a programmer.

Good luck!

The objective of this article is to make learning programming accessible to anyone.

Frequently Asked Questions

As a mentor, I am constantly asked the following:

“Which programming language should I learn if I’m new?”

“Which programming language is most in-demand for jobs?”

“What’s the most popular programming language?”

Top Programming Languages

If you’re looking for an official ranking of the top programming languages, you can find it here: IEEE
Spectrum top programming languages
That list is great for checking whether a particular programming language is in use today. However, if
you’re new to programming, I don’t recommend choosing a language solely based on a list.

How to choose a programming language

Computer science is an entirely cumulative field of study. That means, each successive topic builds off
prior topics.

If you have previously attempted to learn programming (or any STEM field) in school, tried your best, but
failed — you weren’t the problem. A good professor of any cumulative subject carefully curates the
curriculum. Provided that each student has sufficiently prepared and satisfied the prerequisites, the
expectations for the students’ prior knowledge should be clear. A good professor understands the
expectations and assumes no knowledge beyond that scope. Anything outside of the expectations must
be taught. Each topic in the curriculum is ordered sequentially, respective to the other topics.

When a subject is cumulative, meticulous attention must be paid when designing a course curriculum or
learning path. With that said, don’t choose a language for its ranking; choose a language for which you
have a complete learning path that makes no assumptions about prior knowledge.

A few words of advice

Before you begin learning how to code, it’s important to reflect on the point I made above: everything in
computer science is cumulative.

I like to reiterate this because the biggest mistake you can make as an aspiring programmer is giving up
because you don’t think you’re smart enough to learn programming. Learning to code has nothing to do
with your intelligence. Yes, it’s difficult to learn programming, not because of who you are, but because
there are a lot of topics to learn.

First rule, accept that the following scenario is going to happen: you’re introduced to a new topic that
makes absolutely no sense to you.

That scenario is going to happen over and over again. How you handle that situation, each time it
happens, is the only factor that will determine your success.

If the current topic you’re learning doesn’t make sense to you, stay where you are. Do not proceed to the
next topic. To reiterate, the topics are cumulative. Skipping ahead is like trying to attach a roof to a house
that lacks a frame, walls, and a foundation.

I find myself in this situation all the time. I often have to rewatch the same lecture of a video tutorial
several times for me to grasp what I’m learning. Don’t get discouraged if you find yourself in my shoes.

If the tutorial (or book) you’re using didn’t sufficiently explain the topic, you’re going to have to find
other resources that work for you. There’s no excuse for giving up just because your tutorial’s coverage
of a topic didn’t work for you. You can find just about anything you’re looking to learn for free on
YouTube. Figure out what to search for (e.g., [the topic] in [your programming language] + any other
helpful keywords).

If you’re searching on YouTube for educational tutorials, check the stats first. Take a quick look at the
rating and/or the view count. If you’re still unsure if a video is worth your time, read some of the
comments to gage others’ opinions.

A lot of topics aren’t going to make sense the first time around. So, refrain from the negative self-
thoughts.

The goal is to be conscious of your comprehension as you’re learning. As you progress through the
learning path, you need to self-reflect. For each topic you cover, ask yourself questions such as:

“Does this topic make sense to me?”

“Was there any new terminology? If so, was a formal definition provided for each new term?”

“Were there any new skills? Do I understand how each new skill is used in application? Can I
demonstrate my understanding of this skill by solving practice problems?”

“Will I remember what I just learned tomorrow? And the day after? If not, how am I going to commit it
to memory?”

One last piece of advice: never underestimate the power of memorization. Memorization is a totally
underutilized approach in learning. Yes, comprehension of a topic is the ultimate goal. However,
comprehension may take time. If you are really struggling to grasp a topic, break down the topic and
memorize the important terms. If you can’t comprehend how something works, your immediate goal
should be memorization. If you need tips on how to tackle memorization, consider using the study card
technique. You can read more about how I use this technique in my Interview Prep document.

1 — Computer Science Fundamentals

The first step is learning computer science fundamentals, which I cover in my article: Intro to Computer
Science Terminology. This article is written specifically with my audience in mind — everyone. I
intentionally created this so that it is easy to understand for anyone with no background in computers.

The concepts covered in the article are predominantly definitional. You can casually read through the
article, and that’s fine it that suffices for you. I recommend committing these terms to memory.
Approach each term as though you’re in school and you need to be able to recall each term’s definition
for an exam. You don’t have to commit yourself so thoroughly if you don’t want to. However, the more of
these concepts that you can commit to memory, the easier it will be to understand later topics.

2 — Propositional Logic (optional)

No, you don’t have to be strong in math to be a programmer. Math skills can be helpful, but they’re not
necessary.

If you’re insecure about your math abilities, I recommend learning propositional logic. The principles
covered in propositional logic are the building blocks of programming.

You can learn propositional logic from this YouTube tutorial: Basic Concepts in Propositional Logic.

3 — Java Programming

After you’ve learned the basics of computer science, you’ll be ready to learn a programming language.

I have put a lot of thought and effort into designing a path that is suitable for everyone, regardless of
their background. I chose Java for this learning path because Java is the language that I am most
experienced in.

Java is one of the most in-demand programming languages. It’s classified as an object-oriented
programming language (you’ll learn what this means later on) and it’s used to make desktop, web, and
mobile applications.

If you prefer learning from a book, I recommend the following: Head First Java.

If you’re looking for a video tutorial, I recommend watching videos #1–19, 31–33, 88, and 93 in the Java
YouTube tutorial by Derek Banas: Java Video Tutorial.

The first video in the YouTube tutorial will direct you to download a computer program called Eclipse.
Eclipse is an Integrated Development Environment (IDE). You can think of an IDE as a fancy term for a
word editor that is made for programmers. It’s just a computer application that provides a text editor for
programming, along with other tools for running your programs. Here’s the link to Derek Banas’s
YouTube video on how to download Eclipse: Install Eclipse for Java.

4 — Algorithms and Data Structures

An algorithm is a set of instructions (or steps) for performing a specific task, where each step must be
clearly defined, capable of being executed, and finite (meaning, it doesn’t continue executing infinitely).

A data structure is a way of organizing data in memory.

Algorithms and data structures are two of the most challenging topics of programming. You don’t need
to learn algorithms for basic competency in programming. However, if you aspire to work as a software
engineer at a reputable tech company, you will be expected to demonstrate comprehension of
algorithms and data structures during the interviews.

On a personal note, the tutorial below is what took my algorithm skills from novice to expert: Udemy
tutorial on Algorithms and Data Structures. I’ve purchased a lot of tutorials on algorithms. This was by far
the most comprehensive one that I’ve come across. Whether you want to learn algorithms and data
structures or prepare for technical interviews, this tutorial is your best bet for success.

Note: the course is expensive, but essential. I was able to get in contact with the instructor, and she has
generously offered a coupon code which reduces the cost from $50 to $10. The coupon code will be
applied automatically when you click the link.
I recommend using the following tutorial alongside the Udemy tutorial: VisuAlgo. VisuAlgo is a free
resource that shows visuals of how the values input into an algorithm change throughout its execution.

5— Android development

Android development is, in my opinion, one of the most fun applications of Java programming. Android
apps are predominantly programmed in Java, so once you learn Java, you’re ready to learn Android.

Here is the best free video tutorial to start learning Android: Udacity-Android Development for
Beginners.

After you complete the Udacity course above, you have a couple options where to go from there. There
should be an extension to the above course that is taught by the same group of Google employees. The
additional lectures should become visible once you get through the course (if you can’t find it, search for
it on Udacity). That is a good option, especially since it’s free.

However, if you are willing to spend money on an outstanding book, I highly recommend the following:
Head First Android Development: A Brain-Friendly Guide. This book gives detailed explanations and
helpful visuals to really help you learn the underlying concepts of Android. Each chapter walks you
through an example application. Everything is explained thoroughly, using words and diagrams that
anyone can understand.

Helpful Resources

Stack Overflow is a website where programmers can get free help with their code. If you get stuck and
want to ask a question, search for it first. If you can’t find your question, create an account and post the
question yourself!

There are a ton of educational sites where you can find programming tutorials. Some of my favorites are
Codecademy, Udemy, Udacity, Team Treehouse, and Khan Academy.

7 Critical Tips to Learn Programming Faster – #3 Will Land You a Job

Posted onDecember 12, 2014

Whether you’re currently pursuing a degree in computer science, a veteran using the GI Bill to choose
their mext mission, an aspiring self-taught developer, or a coding boot camp student, mastering the craft
of programming is a perpetual struggle. To assist in your learning – courtesy of the Coding Dojo
instructors – here are seven tips on how to learn programming faster.

1. Learn by doing. Always play with the code while learning

Learn Programming faster


With every new subject, the sooner you start playing with the code, the faster you will learn the given
concepts. Even if you blaze through an entire chapter of reading and a topic like for loops seems
straightforward – so straightforward even a monkey could do it – you’ll still be scratching your head
when tasked to implement the code for the first time. You’ll think, “wait, what was that one piece of
syntax again?” As the saying goes, you need to “use it or lose it”, because despite the evolution of
technology, this ole’ proverb holds true when learning to code.

Hint: Build a project as you go through the material. A personal project is often the best starting point.

2. Grasp the fundamentals for long-term benefits

Learn programming faster 1

As elementary as they may appear at first, programming fundamentals always need to come first: the
better you understand them, the easier it is to learn more advanced concepts. From our experience at
Coding Dojo, students who rush through the beginning of our courses – where we focus most on web
development fundamentals – are often the first to get stuck as we transition into more advanced
material, such as back-end programming. So before you ditch the first class of computer science 101, or
skip chapter one of an online tutorial, keep in mind that you are overlooking the most important step in
your learning.

Hint: Read this great article about the 5 Basic Concepts of Any Programming Language

3. Code by hand. It sharpens proficiency and you’ll need it to get a job

Learn programming faster

Computer monitors become thinner, hard drives lighter, and programming languages more powerful, but
coding-by-hand still remains one of the most effective methods to learn how to program. Be it on a
whiteboard or notebook, coding-by-hand requires further caution, precision, and intent behind every
line of code. Because unlike on a computer, you can’t run hand-written code midway through the sheet
to check if the work is correct. Although more time consuming, this restriction will mold you into a more
fundamentally sound developer, both in the classroom and the job market. For college exams and
technical interviews – a critical component of the job interview process – you will have to code-by-hand,
because not only is this good for learning, but it’s universally known to be the ultimate test for a
programmer’s proficiency. So start early and get used to this old-school practice.

4. Ask for help. You’ll need it

Learn programming faster

As awesome as it would be to become the next Steve Jobs on your own, the reality is that people learn
faster with mentors and peer feedback. What may seem like an immovable bug or an unlearnable topic
could be quickly alleviated by a fresh pair of eyes or a new interpretation of the subject. Whether it’s
online or in-person, ignore the trolls and don’t be afraid to ask for help, because every programmer has
been in your shoes before. Besides, most developers love to code, and if there’s one thing that
passionate individuals enjoy, it’s to share their knowledge with others.

Word of Warning: At Coding Dojo we suggest using the 20 minute rule. Take at least 20 minutes to figure
something out on your own before asking for help. There’s a good chance that the answer is already in
front of you, and besides, struggling makes you a better programmer overall.

Hint: Stackoverlfow and reddit’s learn programming subreddit are gold mines for online programming
assistance.

5. Seek out more online resources. There’s a wealth of content


Learn programming faster

If a particular concept doesn’t make sense, be it on codeacademy, in a textbook, or during class lecture,
maintain your confidence and look for alternate online resources to learn the same content. Everyone
learns differently, and just because one source doesn’t make sense, doesn’t mean there’s something
wrong with you. It means that you’re not clicking with the delivery of the material. The online resources
to learn computer programming are endless, and there’s always a reddit post, youtube tutorial, or blog
explanation that will make the material-at-hand crystal clear.

Hint: Don’t underestimate the power of google search.

6. Don’t just read the sample code. Tinker with it!

Learn programming faster

Reading sample code is not enough to understand how it works. To develop a true understanding, you
need to actually run the code and tinker with it. With the additions of comments and instructions,
sample code is packaged to be easily digestible by the reader; but in reality, it’s pretty difficult to
replicate from scratch. Reading is not the same as understanding, and actually trying to write the code
yourself, or at least running it, will facilitate the learning process much more.

7. Take breaks when debugging

Learn programming faster

When debugging, it’s easy to go down the rabbit hole for hours, and there’s no guarantee that you will
fix the problem. To avoid this, it’s best to step away from the bug for a few hours, and return with a fresh
perspective. Not only is this a guaranteed way to help solve the problem, but you’ll also save yourself
hours of headache. So if help isn’t available – to touch on our previous tip about seeking advice –
consider taking a break to clear your mind and return later. In the meantime, the bug won’t be going
anywhere, and you’ll at least restore some needed sanity to improve productivity.

Conclusion: Keep Calm and Keep On Coding

Despite these 7 tips, the most important ingredient to learn programming faster is to remain confident.
To do so, you should expect to fail repeatedly and be patient with your progress; because becoming an
expert at anything requires hard work and time. And if a single doubt ever clouds your mind, remember
that every programmer has walked this path before – none of them more destined to become a
developer than you. Whichever path you are currently on, be it college or coding boot camp, the only
barrier to success is your work ethic and confidence to persevere.

The Best Way To Learn How To Code

Tutorial

The thing that really frustrated me when I first started learning to code was what I now call the “foggy
bridge”. It’s a long and dark bridge where everything on the left is too easy and everything on the right is
too hard. So you’re stuck aimlessly stumbling across this damn bridge not knowing what you don’t know.

Most people new to programming suffer from an inability to find intermediate tasks and sources of
knowledge to bridge the gap between being a beginner and becoming a proficient coder. The people
who make it across the bridge do it by endlessly grinding through simple tasks or hitting their head
against the wall of a project that’s probably way beyond their current ability.

This results in the vast majority of beginners getting frustrated and giving up before they should. They
burn out. Not because coding is hard (it’s not), but because learning to code is hard. And it really
shouldn’t be.

So, is there a better way?

For over a year, I was literally obsessed with finding an answer to that question. What’s the best
approach to learn to code? It’s a deceptively simple question and the answer, as it turns out, perfectly
explains why learning to code is so difficult in the first place. Or perhaps I should say why explaining to
others how to learn is so misleading.

If you were to ask five developers what the best way to learn programming is, you’d probably get five
very different answers. One guy will confidently say you have to start building real applications. Another
guy will give you a huge list of links to blog posts, YouTube videos and online courses. There will be the
guy who says his brother went to such-and-such bootcamp and it’s apparently awesome. The really
nerdy looking guy will give you a .edu link to an introductory computer science course and somebody
else will undoubtedly mention a well respected book or two.

You know what’s really frustrating about those responses? They’re all legitimately great answers. So why
are you still left with that same feeling of discouragement you had when you first asked the question?

Here’s why: Learning to code is easiest when done in a particular order. When you try to learn it out of
sequence, you’ll get really frustrated or really bored. Like trying to ride a bike without first using training
wheels or learning your ABCs when you can already read and write.

The best way to cross the foggy bridge is to break it up into three separate but distinct segments. Think
of these segments like you would think of borders on a map. They’re helpful for navigating but they
aren’t real.

Learn syntax

Solve problems

Make stuff

Each segment is a prerequisite for what comes after, yet none of the segments are mutually exclusive. In
other words, crossing the foggy bridge won’t be a strictly linear process. While each segment reinforces
the others (independent of order) you should focus primarily on one segment at a time. If you do it that
way, you’ll make it across the bridge faster, easier and with much less of a headache.

Let’s take a look at each segment in greater detail.

Learn syntax

This segment gives you a false sense of confidence which will quickly disappear when you move to
problem solving. It’s the realm of countless introductory books, videos and courses. A lot of money is
made in this segment because most people learn a bit of syntax and never go any further with it (not
their fault, but I’ll get to that in just a sec).

There really isn’t anything lacking in this area. The market for learning the basics is so massive and so
few people go beyond it, you’ll find an almost endless supply of material. Don’t get caught in the
common trap of continuously learning and relearning syntax. Once you’ve read two decent beginner
books on your language of choice, call it good and move on to solving problems.

Solve problems

Now this is an area desperately in need of some attention. It’s almost completely overlooked and I
believe that’s the main reason so few people get past learning syntax. They have no direction other than
vague advice to start making things, which is kind of like trying to ride a bike without ever having used
training wheels. It’s possible but far from an ideal way to learn.

When you can take the syntax from the first segment and apply it without being told what to do, you’re
in the problem solving segment. This is the very essence of thinking like a programmer and it is by far the
most difficult and important part on your journey across the foggy bridge. In fact, It’s what I’ve spent the
past six months of my life working on.

Beginners simply don’t have a source of intermediate tasks and resources to bridge the gap between
knowing basic syntax and actually building stuff with it. They’re left with no other choice but to stumble
across the foggy bridge until eventually they start figuring things out through sheer brute force alone.
Make stuff

Pretty much every developer I know went straight from learning syntax to making stuff (or… trying to).
It’s very frustrating because not only are you learning to think like a programmer, you’re also learning
about frameworks, all the jargon that goes along with frameworks, how to use an IDE and a bunch of
other things I won’t get into.

Once you understand syntax and can actually solve basic coding problems on your own, it’s time to
either contribute to open source projects or work on some hair brained idea you’ve got. Build stuff that
makes you excited to get out of bed in the morning and prevents you from falling asleep at night. Passion
will get you past the remaining hard parts.

The reason so many people get frustrated and ultimately give up on learning to code isn’t because
coding is hard. It’s because learning to code is hard. It’s messy, loaded with jargon and it leads to
extreme information overload. There’s just so much stuff you need to learn. So at the very least, keep
your approach simple.

Learn syntax

Solve problems

Make stuff

Generally in that order.

For those who find themselves trapped on the foggy bridge, start with these interactive coding
challenges.
EDIT: This sub apparently gives out gold like it's candy. Thanks stranger.

174 Comments

Share

Save

Hide

Report

95% Upvoted

This thread is archived

New comments cannot be posted and votes cannot be cast

SORT BY

BEST

level 1

desrtfx

514 points

2 years ago

Gold
In general, your post is very encouraging and nicely written.

It just irks me when people mix two distinct things (like you do as well):

learning a programming language

learning to program

The two items above are distinct and not the same in any matter. Especially beginners often confuse
learning a programming language (in syntax and grammar) with learning to program (the actual, difficult
part).

Sure, in order to be able to program, one needs both, a language and knowing how to program.

Your order of things:

Learn syntax

Solve problems

Make stuff

is definitely not the worst approach, but it brings one major problem:

Learning out of context is more difficult than learning with relatable context.
If you just initially focus on the syntax, you learn without context - you memorize and memorizing and
programming don't go together. Memorizing kills programming creativity because after having
memorized the general syntax (which up to a certain degree is a necessary evil), many beginners start
memorizing algorithms in the context of their current programming language - and here is exactly where
the problem lies. It doesn't make sense to memorize an algorithm in a certain programming language -
algorithms need to be understood on a conceptual, abstract level independent from programming
languages.

As an example:

In Java, you use a Scanner instance to obtain keyboard input, so people will write something along:

Scanner keyboard = new Scanner(System.in);

// more code

int value = keyboard.nextInt();

A beginner might want to memorize the above snippet for later reuse.

Rather than memorizing the code, it is essential to understand what the code does and why it does what
it does in a certain way.

So, instead of memorizing the code, it is better to memorize:

When I need input from a keyboard, I need some object that can acquire that input

When I need a certain value, I use one of the methods of the object above to obtain what I need
This abstract concept transfers well across many languages. Once understood, all that needs to be done
is to translate the concept into the actual implementation in the required language. Be it Java, C#, C++,
or any other language.

Another example:

I want to iterate through an array:

for(int i = 0; i <= myArray.length, i++) {

// do something with myArray[i]

Again, the actual code is secondary. I only need to know that I need a way to access each and every
element in the array. How exactly I do that depends on the language implementation.

This abstract or conceptual learning becomes even more important with data structures and algorithms.
It is hardly ever necessary to be able to recite the implementation of any algorithm in any language, but
it is very important to understand the algorithm on a conceptual level so that it can be implemented in
any given language.

Your item #2: Solve problems is where most people drop out of programming.

Why?

Because solving problems requires to learn a different way of thinking - thinking in algorithms or abstract
thinking. This is a purely acquired and trained skill that initially requires lots and lots of effort and is very
hard. It definitely gets easier over time and with more practice.

Especially in this step, beginners often make one major mistake: They give up too quickly ("I've been on
that problem for half an hour and can't come up with a solution") and resort to resources on the
internet, which, in turn frustrates them because often the solution is either very easy, or way over their
head.

When I learned programming, there was no internet and there were hardly any knowledgeable people
around that could be asked, so I was forced to struggle and find the solutions on my own. Often, it took
days to come up with something useful, but there was no other choice.

The internet with all its benefits has made people too much dependent and lots less self-sustaining.
Instead of really biting through a problem it is way easier to fire up our good and essential friend, Dr.
Google, and get the solution in a matter of seconds. Then, they implement the solution without
spending time to actually understand it (copy-paste code monkey style) - which is a huge red flag. It is
fine to look at other's code, but only as a reference and help to understand it. Especially beginners
should write every piece of code on their own. This trains problem solving and analysing skills.

I am definitely stating that the more and longer you struggle with a problem, the better you will become
as a programmer because you rely less on external sources.

Another issue:

When attacking a new problem or task, beginners often directly rush to the keyboard and start
programming away. Again, this is the wrong approach. Before even thinking about going near the
computer, especially beginners should spend considerable time to analyse the problem and to devise a
solution on paper (not necessarily in a real programming language). The time spent planning and
thinking about the task is not wasted, rather the contrary is the case. The better a problem is analysed,
the more time is spent on consideration, the better the final result will be.

Again, back when I learned to program (before I bought my own computer), access to computers was
extremely limited. I could access our school's Apple ][ Europlus for two hours per week in a single
session. So, the majority of my programming was done offline - without access to a computer. I planned,
I wrote my code, I debugged the code in my mind, and then, when I was sure that it would work and
produce the desired output, I used my session to actually type in the program. Most of the time, the
programs worked without problems - besides occasional syntax errors produced during typing.
IMO, learning to produce and trace code without a computer is an essential skill in the toolbelt of a
programmer. This way, again, a programmer becomes self-sustaining.

level 2

dontworryimnotacop

71 points

2 years ago

Actually I disagree, for beginners it's not important to know why Scanner works the way it does. They'll
be more rewarded by progress if they come back to the implementation details after thoroughly
understanding the usage and behavior.

I see too many beginners get lost when advanced devs try to explain why things work the way they do.
The approach I usually use is "here is this cool thing that does X, try and use it to accomplish Y". Then
they use it 4 or 5 different ways until they understand how to use it, then they can go and understand
the reasoning behind its implementation.

Of course once you become more advanced you tend to do things the other way around. If you're using
a simple library it's often faster to read the source rather than the docs. For beginners however, it's often
too discouraging to try and wrap their heads around obscure implementations before learning how to
build simple, rewarding things.

Basically my argument boils down to:

learn how to build a simple thing

feel rewarded by implementing several simple things


learn a harder thing

feel rewarded by implementing several harder things

learn how the simple thing works (it seems easy now because of contrast)

learn how the hard thing works

level up

Memorizing the syntax allows beginners to explore the usage and implementation at much greater
speed, because they don't have to continuously translate implementation->syntax in their head. It allows
them to get over the discouraging foggy bridge faster.

Continue this thread

level 2

SteelApple

9 points

2 years ago

Thank you, this has been very helpful. You have helped me solve problems before and I'm genuinely
grateful to you for what you do and your helpfulness.
level 2

max_p0wer

2 points

2 years ago

This is true for more than just coding - it's true for just about anything.

level 2

Danshock

2 points

2 years ago

Beautifully written and inspiring (for a beginner like me).

level 2

Truth_Be_Told

2 points

2 years ago
·

edited 2 years ago

You make some excellent points! Two in particular;

the more and longer you struggle with a problem, the better you will become as a programmer because
you rely less on external sources.

This is very very true. Unless you train yourself to retain stuff in your head as opposed to looking it up on
the net immediately, nothing will stay with you. The key is to focus on retaining important overarching
conceptual stuff along with one specific implementation rather than all the various
libraries/APIs/frameworks. Eg: Understand "Threading" concurrency (HW and SW) with "pthreads" API
(or any other). You can then easily pickup and correctly code using various "Threading" APIs in C+
+11/Java/C# etc. as reqd.

learning to produce and trace code without a computer is an essential skill in the toolbelt of a
programmer

Again, very very true. Sitting down with pen and paper and struggling through any algorithm will clarify it
like no computer can. The key here is that you are "playing" the computer in "free form" with no
restrictions whatever. This frees you up to use any and all symbols, diagrams and text that you need to
understand things on a personal level. Eg: I once followed a C implementation of AVL tree balancing
using pen and paper to understand it.

However i disagree majorly with one thing;

It doesn't make sense to memorize an algorithm in a certain programming language - algorithms need to
be understood on a conceptual, abstract level independent from programming languages.

"Abstraction" is hard for us Humans. Often it is conflated with "lack of clarity" and "hand waving" over
issues. "Generalization" leading to "Abstraction" always follows a bunch of "Concrete"
examples/datapoints. If you are taught the "non-trivial Abstractions" directly, you will not "get" it (the
main problem with Modern Mathematics). Hence you need to walk through a concrete implementation
(i.e. computer runnable) of an algorithm before generalizing it. This is the reason most students have
difficulty with "pseudo-code" algorithms. It takes a certain maturity to learn this way. Instead it is far
better to learn the algorithm in one specific language, then understand it on a deeper level and map it to
a different language. Eg: A recursive binary search tree traversal in C (procedural) vs Erlang (functional).

level 2

JBob250

3 points

2 years ago

edited 2 years ago

I was on the fence about trying to learn coding, but I think your post put me over the hump. Do you have
any thoughts on learning sql in particular? That'd be particularly useful in my line of work . Thanks.

E: my company uses Netsuite. It seems that searches may be sql, and scripting may be java. I feel
hopeless because I can't even figure out which language to learn

Continue this thread

level 2

tyuijvhvhcfcjf

2 points
·

2 years ago

Your comment has finally given me the desire to learn to program. Thank you

level 2

ELFAHBEHT_SOOP

1 point

2 years ago

I really like your last point, and it's something I try to really make a point of to beginning programmers. If
you don't do this, your big programs will turn into big clumps of strangely coupled code that hurts to
modify. Planning really helps with that, and hopefully leads to a more "tear-free" learning environment.

level 2

[deleted]

1 point

2 years ago

really good addition to the OP. Thanks!


level 2

Nomad-Web-Dev

1 point

2 years ago

As I was reading this I thought this sounds like something desrtfx would say so I scroll back up and sure
enough. :) Words of wisdom right here folks.

level 2

[deleted]

1 point

2 years ago

Supremely useful -- bookmarking this for sure

level 1

Horn2DFoliage

82 points

2 years ago

Learning solid approaches to problem solving, making them become second nature, then approaching
problem solving. Makes learning a language significantly easier.
Understanding the problem, pulling it apart, putting it back together again, knowing how to solve the
problem in a more familiar setting (physical world, maths, etc.), then translating the steps of that
solution into pseudo-code, followed by translating pseudo-code into an actual algorithm. Then it is a
case of ironing out bugs, or going back and forth for a bit until your solution works.

The same goes for making things. Break the project down into easily digestible chunks, find similarities
between these chunks and pre-existing experiences/knowledge. Then follow the problem solving steps,
gradually adding those chunks together. Until you suddenly find you have made what you set out to
make, or more often than not, something much better.

All the time while doing these you are learning your language naturally. As you would learn anything
else, through experience and curiosity.

level 2

HAL9000000

33 points

2 years ago

edited 2 years ago

There's a problem that I still see here in your post and in OP's post. And maybe it's an inherent,
unavoidable problem and nothing you are doing wrong.

The problem is that all of this advice is very conceptual rather than operational.

Example: ~ "Understand the problem, pull it apart, put it back together again, knowing how to solve the
problem, translating the steps into pseudo-code, then translating that into algorithm."

As someone still working through this stuff and at about an intermediate level, the thing I see missing in
this advice is a lack of very concrete, specific guidance which says something like "Here are 2 or 3 specific
online courses you should take to get acclimated to the syntax for this language, and you absolutely must
spend X number of hours per day or per week if you expect to learn. And then here are 2 or 3 specific
courses you should take to start solving problems with this language, and then here are some specific
things you can do to start making your own stuff."

I realize that it's very difficult and perhaps even problematic to guide people to resources that may not
work for their needs though, so I'm not saying I have everything exactly right here. The basic point is that
I think people need more direct, tangible instructions that tell them to start with specific resources...at
least in the beginning, and tell them that they must focus a certain amount of minimal time, routinely, so
that they can cumulatively learn. After all, we now have what I would consider to be a "poverty of
choice" in terms of options for learning -- so many options that it seems overwhelming to choose or
know if one or another is better or not.

And it's also clear to me that you can't take a break for like a month or even 2 weeks from learning and
expect to really ever learn enough to truly become a coder/programmer (this is likely true for learning
most things, but it might be especially relevant here because I think many people see it as something
they can just dabble with in their spare time and eventually figure out).

So perhaps what would be interesting would be to have a way to see examples of concretely what kind
of time commitment and specific resources that people have used to learn. It would also be interesting
to have some kind of interactive resource that would give customized advice to people that will ask them
what they want to learn and try to guide them to the best resources for this.

Anyway, I'm not saying you're wrong about anything, just wanted to add that.

Continue this thread


level 2

desrtfx

3 points

2 years ago

Well spoken indeed.

level 2

DapDaGenius

1 point

2 years ago

Thanks for this. I've been thinking about going into programming. I started this free course from this
company called The Iron Yard(have you heard of them? If so, do you recommend them?). I was learning
JavaScript and I couldn't help but feel like they were skipping something. Like they were treating me as if
i was a bit more advanced.

level 1

[deleted]

11 points

2 years ago
Thank you, this helps a great deal, god damn this bridge seems to go on forever!

level 2

desrtfx

12 points

2 years ago

god damn this bridge seems to go on forever!

It does. It only gets easier to trod along.

Programming is a domain where you can never stop learning, even if you only stick to one single
programming language.

Continue this thread

level 1

desrtfx

32 points

2 years ago

Please, no hidden advertisements!


Otherwise, I am forced to remove this, generally good, content.

level 2

MRH2

15 points

2 years ago

AMEN!

/u/memystic , your site might be good (I haven't really looked at it), but there are also many other ones
out there too: codingbat.com is one that comes to mind immediately (no, I don't have anything to do
with it).

Continue this thread

level 2

memystic

7 points

2 years ago

Hmm, I wasn't intending on this post being an advertisement. I wrote it because I've actually spent the
past year (probably more) thinking about this problem and also working on what I believe is a good
solution. I've been living and breathing this problem. I can remove the link in #2 if you like?

Continue this thread

level 1

Antielectronic

21 points

2 years ago

No one tells me how to learn.

level 1

mkss89

7 points

2 years ago

You are right, the gap between beginner and making own stuff is very, very hard. But I think you have to
learn syntax along with solving problems. The problem is (again:)) that most beginners rush into
progressing with book, course etc. and don't take time to solve exercises diligently. Also some books
need more exercises. Good leraning curve with difficulity of exercises is crucial - you need challenge, so
you can build your knowledge blocks, but too hard is frustrating and doesn't really allow you to learn
that much.
level 2

memystic

3 points

2 years ago

Yes exactly, the challenge difficulty must be accurately ranked so the beginner can start with very easy
challenges and progress from there.

level 1

ketchupisgood

15 points

2 years ago

The reason why people struggle to get over the "syntax" stage is the same reason why people "suck" at
math.

People are too lazy to practice problems and power through adversity. Instead they rely on crutches and
shortcuts that limit the development of their intuition. As a result, their skills are incongruent with the
time they put into "learning programming". These very same people conclude that "programming" is not
for them.

This is why people who practice mathematics pick up programming quite easily. They understand that CS
like math, is not a spectator sport. They understand that you can't just read code and memorize
syntax/solutions/recipes. I suspect that the vast majority of people trying to pick up CS in a non-
traditional setting come from a non-quantitative background and are generally math phobic. Therefore,
they have limited experience with quantitative subjects and apply learning strategies from past domains,
resulting in subpar learning outcomes.

From my experience TAing math/stats/cs courses and talking to my professors about my frustrations,
there's no easy way around this. Some might hit a wall earlier than others but eventually, everyone runs
into it.

level 2

metatron207

26 points

2 years ago

Actually, rather than explain why many people are math-phobic, I think you've just demonstrated why.

Many people, whether through nature or nurture, don't have the kind of mind that seems to naturally
pick up on mathematical concepts and understand them deeply. People like this may do well with math
in the earliest grades, when it's limited to things they can easily see (addition and subtraction to 20,
multiplication to 5x5 or 10x10, very simple division). Then they reach a point where the teacher shows a
procedure or algorithm, and one step or another doesn't make sense. They ask their teacher why we do
that step, and the teacher gives a half-assed explanation (or no explanation at all) and follows up with "if
you do more problems, it will make sense." The student continues trying, and maybe memorizes that
algorithm, but has a lingering concern that the reasoning never really clicked. Then they move on to
more complex algorithms, often building off of previous knowledge, and that doesn't make sense. They
eventually decide (or get told) that they can't do math. They keep being forced to do it, and they struggle
through, maybe getting passed with 70s by well-meaning teachers, until they don't have to take math
classes anymore or until their luck runs out and they leave school without a degree/diploma.

Why does this happen? Because young students have a need to understand, conceptually, what they're
doing and why. When they're repeatedly frustrated in their efforts to understand why something works,
and/or are shamed for not understanding, they eventually give up and internalize the idea that there's
something innate about them that makes them bad at math. So, to go a level deeper, why would
teachers tell them to just keep doing problems until it makes sense, when clearly that approach isn't
working? Because many math teachers, and an even greater number of elementary teachers giving math
lessons, have one of two fatal flaws that makes it difficult to impossible for them to answer a student
asking "why":

The teacher is very good at math, and has trouble seeing their student's perspective, recognizing what
doesn't make sense. You see this a lot in upper-level math courses and in related disciplines like
computer science, where instructors and professors tend to be self-selected based on math aptitude.
"Why do we carry a number when multiplying? Because we just do, how is that even a question?" It can
be difficult to explain what seems intuitive.

The teacher has a grasp of procedure, but doesn't actually understand conceptually themselves, and so
cannot explain why that specific procedure is followed. This is, I think, extremely common at the
elementary and possibly middle levels, when teachers who aren't "math types" are forced to teach at
least some math. Teachers often don't like to be asked a question that they don't know the answer to;
their job is to impart knowledge, so when they're asked for a particular piece of knowledge and they
don't have it, that can cause a variety of negative emotions.

From reading your post, I'm guessing you would fall into the first category. You were probably a good-to-
great math student, and even when you didn't understand something at first, eventually you were able
to understand it by practicing it, even in totally abstract problem sets that didn't relate to the real world
at all. When you're always able to power through adversity, you never become afraid of it. Not to bury
the lede several paragraphs deep, but when teachers, professors, and TAs hold the belief that students
are simply too lazy and aren't pushing through adversity, they're often missing a deep struggle under the
surface that they could be helping to fix, restoring a sense of confidence to their students.

If this seems like an overly-long reply, it's because this is something that's extremely important to me.
I'm a math teacher by profession, in a setting where most of my students have significant gaps in their
math learning. Perhaps this tints my view of math instruction in public K-12, but I have too many friends
who "are no good at math" and have seen enough other teachers, in professional development
workshops, have their own "a ha" moments to believe that this isn't a major problem. Personally, I was
in the first camp when I started teaching math. Things always made sense to me, and I never struggled in
math through calc. (I took one semester of calc in college before radically changing my direction.) At first,
it was difficult finding ways to explain things to people when they should just make sense. I saw my
students try and try and try, and still not make a connection that seemed obvious to me. It frustrated me
almost as much as it did them.

Eventually, I started seeing this as a problem-solving opportunity in and of itself: finding ways to explain
"basic" math concepts that made them click for people who don't like math. I don't know if I've
succeeded or not, but I like to think I've gotten better since I started teaching math. When I put the onus
on myself, rather than my students, it seemed to change things for the better.

tl;dr: The way around the wall of frustration is to better tie syntax to conceptual understanding, and to
give constant reinforcement to learners who haven't yet given up.

Continue this thread

level 2

theworldisyours96

1 point

2 years ago

I'm hitting this right now. Commenting to save

Continue this thread

level 1

rexonology
5 points

2 years ago

I truly believe that all of this can be very well tackled by learning coding or anything in general through
reputable books.

Im no coding pro, but when I was trying to even grasp the basics of C programming and other topics like
arduino/ AVR hardware through " free and fun " online websites, I just didnt progress at all.

That all changed when I began reading reputable books on those topics aimed at beginners. Now, I am
learning at a rate I could have never imagined myself achieving before.

Books in general simply go through a lot more revisions and professional vetting ( even by teachers who
are skilled at making learning structured and understandable ) with a much larger team. The content is
generally very significantly more polished and pleasant. Especially when they have to go through nitty
gritty stuff. Books will unravel them nicely whereas websites tend to skim over them to keep the content
"not boring".

Of course, theres a time and place for self directed "google learning". But I believe that should be done
after you have achieved a good grasp of the concept and are simply using the internet to cover some
gaps or find further project inspiration. Another exception is if you have a experienced mentor who can
guide you along the content that you find on the internet.

Books are really irreplaceable man.

level 2

[deleted]
4 points

2 years ago

Any good book recommendations?

Continue this thread

level 2

no1name

3 points

2 years ago

edited 2 years ago

Hmmmm ... books for learning, such as Head First series, make a thin path through a dense forest,
without much background on why you are walking this path and what to do when you accidentally, or
deliberately leave the path.

I don't like them so much. You need mentoring by another programmer, someone who can say, "try it
like this" or "you are wrong here, here is a nicer way to write code". Then you actually learn and develop.

For example I drill into my students how to make pure methods in C# (inputs only through parameters,
outputs only through Returns). Why? Once you know how to do it, your code becomes cleaner, you can
unit test it, use it in classes, etc. Its a big step in writing code. It tidies up so many other points, of
learning. Yet you can't really learn it in a book, you could write one just on that alone.
For my own learning I love Pluralsight.com.

level 1

PM_ME_YOUR_JIZZ

6 points

2 years ago

OMG you're the creator of SAIG! So nice to find someone outside the sub <3

This is great advice. I've just started learning how to code and I'll definitely keep this in mind.

level 2

memystic

3 points

2 years ago

I'm reddit famous! haha I handed that sub off to some great mods and they've done a fantastic job with
it. I still stop by about once a week to see what's up. Still waiting for the sequel to appear on Netflix.
Should be a wonderful maze of illogical batshit craziness! :P

Continue this thread


level 1

[deleted]

5 points

2 years ago

When I was about 13, I started making websites from scratch with html and css. I didn't find it hard at all.
However, as I got older I wanted to start building programs. I could never get over that hump, and still
haven't. However, I'm taking an engineering programming course at school at the moment and what has
absolutely changed the game for me is having to solve very challenging assignment problems using our
code. The act of pounding through, experimenting different methods to accomplish tasks, then finally
figuring out what needs to be done and finishing the problem is what has given me the true
understanding of the code, and how to think on almost a mechanical level on what the code needs to do
to solve the problem. Writing out an algorithm sheet to get started really helps when it comes time to
write the code. Write out a sequence on what you think needs to happen, list the variables that you
know, list out what you're trying to find, and determine what variables your missing, and how you can
get from what you know to what you need to know in a sequential order. Anyways, rambling on, but
really enjoying my programming class and it's all because we are given actual problems to solve. In the
beginning its hard to conceptualize something that you can go try to accomplish with what you know. It
helps being given assignments. This is something I haven't found much of when it comes to learning
these languages online and such on your own.

level 1

rabanodwin

4 points

2 years ago

Well apparently I've been doing it completely backwards all along, since I learned syntax by making stuff.
I'm a natural problem solver so never needed to learn that part at all, it's just something I do
automatically.

What I'm saying is, this may be the best way for you and people who are like you, but it will fail others. It
would have failed me, and will fail people like me, because that's not how some of us learn.

level 2

Mr-Yellow

6 points

2 years ago

Problem -> Solution.

For me, there is no step before defining a problem. Without a problem you can't begin on a solution, so
you can't even think about picking up a tool.

While... You won't remember shit unless you "learn by doing", this isn't some high-school designed in
1880 where you parrot things ad nauseum.

level 1

rabid_god

5 points

·
2 years ago

I feel like a step is missing here. I'd call it 1.a. Dissect code.

I have found, for me, it is necessary to spend some time looking at others' completed code to figure out
what it is actually doing and why. After that I break it down into sections and modify it to see what it
does. Sometimes I even remove or add new code. Tweak, test, rinse and repeat. Once I understand the
effects of my changes on the code it becomes easier for me to understand how to use it to then solve
problems.

Hope that helps.

level 2

memystic

3 points

2 years ago

I agree. Come to think of it, I did the same thing.

level 1

Astrokiwi

3 points

2 years ago
Pretty much every developer I know went from learning syntax to making things (or trying to). It’s very
frustrating because not only are you learning to think like a programmer, you’re also learning about
frameworks, all the jargon that goes along with frameworks, how to use an IDE and a bunch of other
things I won’t get into.

You really don't have to do all that at once though. If you're just learning how to program in general, you
could mess around with making text-based games in Java or C or whatever using notepad++. If you know
basic text-based I/O, and how to deal with variables and basic control structures, you can start messing
about and making simple things. Later you can start thinking about more intense data structures and
algorithms and graphics and frameworks and other libraries, but the frustrating part is not "making stuff"
- it's trying to make stuff that's way beyond your level. You can Make Stuff as soon as you've finished
Hello World, and that's probably the best way to practise and learn how to program.

level 1

grifftaur

3 points

2 years ago

I started learning to code recently. Started in Python and switched to Ruby. My company uses it and our
lead dev offered to answer questions or help if I need any, so it made sense to switch over. Plus I have
two other junior devs I can ask. So far it's going good. That month I spent with Python didn't feel wasted
which was nice. I'm going through Code Academy, Skills Crush, and looking through two books. My goal
is to get a good handle of the fundamentals until I go off and start really building anything on my own. Is
this a bad approach? When I get to a good place having learned Ruby and Rails, the lead dev was going
to have me help with tiny things, even bugs to get some real experience. I've always had a desire to
learn, but was never motivated in the past. This month and a half i've been very motivated. It helps
having people who are willing to help and root you on.

I will say Python Tutor has been helping me with seeing the step by step process of how computer reads
the code.
level 1

Comment deleted by user

2 years ago

level 2

stutx

2 points

2 years ago

This gives me hope, thanks.

level 1

my_coding_account

3 points

2 years ago

Hmm... again, my experience has really differed from this. I think that because I came from a mathy I
found steps 1 and 2 much, much more straight-forward then step 3. To learn a language or algorithmic
thinking, this was basically a step in just sitting down and solving lots of algorithm problems. For
someone who had done this a lot, but with math and physics problems, this wasn't that different, just a
different type of error checking.

However, once I started trying to build things, there is a very different thing going on --- in the first two
steps, I'm doing everything from scratch so I can understand all the pieces. Once I started making my
own things people would point out how I should use such and such library and coding goes from thinking
algorithmically to and problem solving connecting all of these arcane boxes. Often when I have a bug
now, I go to get help solving a bug from stack overflow or a co-worker, and it is a total black box how the
actual system works. Often I don't understand how I would have been able to find the problem as the
error source was 5 files away on a totally different layer of abstraction.

I've think that the steps are correct. learn syntax, solve problems, make stuff. However I've found that it
looks like this:

Learn syntax - trivial, simple problems w/ simple solutions

Solve problems --- difficult, solutions and bugs can be found by close analysis

Make stuff --- Make simple stuff (your own code + 1 library) --- decent learning curve, good, debugging
might be interesting --- making something that isn't an exercise but something useful --- overwhelmingly
difficult

Or, there seems to be some sort of weird thing going on where other programmers assume that because
I'm good at math, I must be amazing at making stuff, but in reality I'm just a beginner at the coding
portion. I probably have some other problem though since I do seem to have way more difficulty
breaking down larger projects than other people.

S-ar putea să vă placă și