What should I learn first CS or Coding?

Hi, all

I’m a little confusing with what should I learn first ? learn programming and coding or learn computer science ?

I know it’s contentious issue between all people, but when I start solving Intermediate Algorithm and react challenges. I felt I’m very confusing and there is a lot of details that I can’t understand like “extend on React” class component…etc, and I can’t solve any challenge in Intermediate Algorithm by myself.

So is that better to learn CS first or I can continue to learn from here and skip those problems ?

Note : I did a complex project (maybe it’s just for me :smile: ) using HTML, CSS, JS

It’s project to help learn English word and the same time with attractive user UI and effective way learn word.

So what I want to say I can coding small project and I understand JS and didn’t have any problem with it

But what about Algorithm ? react ? redux ?

Sorry but I’m really confusing and can’t decide anything and need your support that can put me on the right way !!
Also sorry about my English as you see I’m still learning


Hey @eslam.

I personally think that for self learners, it is best to focus on programming your own projects first, and once you have that down pretty well, learn more theory as you need it.
It’s a little like learning to use a hammer and nail, you can learn all the theory you want, but until you actually start hitting a nail with a hammer, you will have nothing to apply that knowledge to.

Also, that’s a really impressive project you have created. It looks like you are already doing well with coding so I would suggest sticking with it and learning as you need to.

I got stuck into the same thoughts of, “There are so many things people are talking about that look important, I must need to learn them too!”

While this is normal, it can be really harmful to someone who is getting sidetracked by it all (I know I have).

So, I would learn hold off learning difficult and deep theory and technologies like react/redux until you really need them.


To be clear I don’t believe there is a way to learn just Computer Science, without learning some concepts of coding, same for the other way around, where I don’t believe there is a way to learn coding without learning CS.

Generally try to learn both, but be ready to jump between the two to really get a gasp of programming.

You can focus on learning one or the other, but both requires the other, so there will be some overlap and “extra learning” no matter what. I think you want to ask which one to focus on first and it depends on what your currently having problems on, and identifying if its a CS issue or a coding issue.

If you have issues understanding what the code does or means, its a coding/syntax problem, read about what class and extends means (mdn is a good resource) in the language, and go off from there. CS concepts like OOP concepts are language independent, but might be represented differently depending on the language. Identifying what the syntax means in a CS context is the knowledge you use to “bridge” the two domains that is only learned once you get a good grasp of both domains (CS and the language of your choice, like JS).

If your having issues understanding how to approach a given problem, its a mix of CS and coding, where you need to first understand the underlying problem, and how to program the solution with the given language. Programming/coding is more than knowing the syntax of the language, knowing how to wield it is where CS concepts come in. Knowledge of the language might improve your coding, but knowing how to solve a given problem is more generic than how to “just code it”

I’d compare programming to learning to write a poem or papper. You can learn more words (learning the language syntax), but that doesn’t mean you can write a great poem, as that require’s more knowledge of the subject and experience from writing.

PS. On a similar note I dislike the word “coding”. When I think of code, I think of morse-code, enigma-code and secret codes, it gives in to the idea that “programming code” is hard to read, secret, and difficult to understand, which I think is the wrong way to think. Programming is more generic, more generic than code itself, in the sense you the programmer can make something do something based on instructions. One of the first programmers, Ada Lovelace was writing “code” for physical computers. The ideas underlying languages today are the same ones underlying languages from yesterday. Knowing how a given language’s syntax applies to Computer Science concepts is the key to learning new languages and understanding most problems.

Goodluck, keep at it :smile:


For me coding/programming and computer science theory go together.
Studying CS without programming will take you to not grasp the concept well or to lose that knowledge over time because you don’t reinforce the learning with practice.
Programming without the study of CS does give results but they are usually poor ones, since you won’t have the knowledge of certain topics.

I think that some of the “must” of CS to study are:

  • Algorithms and data structures: here you can learn structures like list, stack, queue, hashmap, dictionaries, binary-trees and so on. Most of them are implemented natively in the programming languages or are available through libraries. Knowing them is important to make your application more performant and anyway will allow you to “not reinvent wheel”.
  • Object-oriented Programming methodology: Learning the concepts behind oop (abstraction, encapsulation, inheritance and polymorphism) will make your code more maintainable and will allow you to understand most programs written with the OOP paradigm.
  • Relational databases and SQL: sooner or later you’ll have to deal with databases and the relational ones still play a huge part among companies (despite the rise of non relational ones). It’s important to know how to deal with them (creation/modification/deletion/reading of database/tables). It’s also important to know how to structure them well, to avoid repetition and to make good relationships between the table entities.

The more you start to write complex applications, the more you’ll also need to tackle topics like:

  • Concurrent (parallel) and distributed programming: you’ll learn what are some of techniques to use to make your code faster by using more than a process at a time (parallel) or by making it run on more than one device (distributed).
  • Design patterns: they are tested ways to solve some of the problems that arise with the growing complexity of systems. It’s better to tackle it once you have a good grasp of OOP.

Ofc you don’t have to learn them all at once :sweat_smile:
But when you do, I strongly advise to code along to reinforce the knowledge you are getting.

I hope it helps :smiley:


I also don’t like “coding” almost for opposite reasons… getting folks to do the equivalent of learning a math formula, plugging it in and going wow!!! without understanding any of the logic… isn’t really learning.
I see potential for sneaking in logical thinking to people who would be afraid of “math,” though …

1 Like

The things you’re talking about are language syntax, not abstract CS concepts. You aren’t able to read and fully understand the code because you don’t quite understand the syntax of the given language (JavaScript).

CS is (or should be) more abstract than that – it’s about understanding underlying concepts like data structures and algorithms rather than what the symbols in a given programming language mean. So CS is immensely useful in understanding how and why things work, but not having a CS background will not prevent you building your application in any way.

1 Like

Well, let me start with @simonebogni and @bradtaniguchi
OK I have to admit that I should learn CS and Programming but what I’ll trying to say that what will help me to understand the other ? Is the CS help me to understand programming faster ? or Programming help me to understand CS ? ??

Is OK to learn programming then learn CS ?
Is OK to learn CS (but it’ll take a lot of time) then learn programming ?
or should I learn both in the same time ?

@simonebogni That’s exactly what I mean. You know something like Algorithms and data structures you can’t learn them from coding !! and it’s very important for my career and of course OOP as well.

And that exactly what push me to talk about this point
It’s better to learn Algorithms and data structures FIRST OR Learn programming ?

@DanCouper : Thanks for your comment but I don’t know if you really understand my question or not

I don’t really have any problem with JS SYNTAX I don’t have really any problem with REACT itself since I can understand the main idea of react (to write your code as a components and mix the HTML with JS) but the point is the concept that behind react like OOP …etc and my question is “It’s better to stop programming and learn CS concept like OOP Algorithms”

Thanks for every one It’s a really helpful comments and of course it helped me.

But, I have a question that will help me put my hand on the right way

I have to way and I want to make a decision :

1 | To learn CS first from here Computer Science! | OSSU
and then learn programming.

2 | To continue learn programming through FCC (I stopped on react and Intermediate Algorithm) and then back to First one (Computer Science!)

and my career goal is to work as Full Stack developer.
What well help me to get my goal ?

Thank you again and please forgiven me about my bad English :blush:

1 Like

I’m afraid the answer is probably “it depends” :slight_smile: but I would lean towards learning about OOP… I am thinking if you go in and do practice building things without that knowledge then you will have to unlearn your ways of thinking. I would totally keep dabbling in FCC while learning the OOP stuff, per what @simonebogni said.

1 Like

You’re missing what I mean I think. It’s unlikely to directly help you as much as you maybe think it is. I would suggest that you do have some issues with syntax, with an ability to use the tools at your disposal and that it’s not necessarily CS that will be useful to allow you to get past that block, rather that understanding more of the principles of software engineering would be more useful.
The algorithm challenges here are all completely doable with very basic, non-complex JS, all of which has been taught.

Having a strong knowledge of data structures/algorithm is a very, very useful thing, but it’s not in any way necessary. If you want to understand underlying concepts, then go for it, it’s a Good Thing. But that’s your choice, there isn’t a correct answer here: if you want to be a “full stack developer” (whatever you classify that as), CS is not a prerequisite. Learning CS is not going to magically make you understand how to use this given tool (JS) – though it should help with becoming better at breaking the underlying problems down.

Specifically re OOP: it is a software engineering paradigm; it’s a way of structuring how software is built, often implemented at a language level. It’s not really a thing you’re likely to learn deeply about if you go to learn CS. Same with API design, or clean code, or testing. These things are important practically, from an “actually writing software” perspective, but they’re not that important from a CS perspective.

[Class-based] OOP means you attach functions to some data stored in a thing called an object you glue the two things together in one package. Classes themselves are a way of templating those data-plus-functions packages. There you go, there’s your CS course material for OOP, now back to writing a compiler and learning linear algebra. I’m being a flippant, but expecting CS material to go into it in detail it is kind of akin to expecting a chemistry degree to give you detailed knowledge of Bunsen burners and test tubes

I always link these because they’re very good:

systematic program design (and the book how to design programs)

1 Like

My view on “coding” is that it’s just one of the tasks programmers do: writing code. Programmers also analyze requirements (“stories” in agile), design systems, document code, or sometimes just stare at existing code until it makes sense.

Using “codes” to refer to source code makes my eyebrow twitch, however.


Thank for every one leave a comment that help me to find my way
It’s very helpful comment, all of them, So I can’t pick a comment and make it as a solution.

And this is my decision I’ll go back to FCC and then if I have some time in future I will learn some courses of computer science.

Thanks again :blush:

A quote from Alice in the Wonderland: “If you don’t know where you want to go, then it doesn’t matter which path you take.”


Hi @eslam,

I can’t solve any challenge in Intermediate Algorithm by myself …
Note : I did a complex project (maybe it’s just for me :smile: ) using HTML, CSS, JS

IMHO, the difference lays in the problem domain[0]:

  • A “challenge” most of the time is just a puzzle, and most puzzles are pretty “closed” (the puzzle is solved by a restricted set of solutions). The problem domain is “closed” or “specific” (for example: “Sum All Odd Fibonacci Numbers”)

  • The complex project in your example is “open”: the project is solved when can be used.
    In your example: when you can use it to learn an English word.

This difference is important, when you write a program you need to take decisions in order to create a simulation/abstraction of the problem and the solution:

This graphic is from the HTDP course[1]

With “closed” challenges you have less freedom.

There is also the syntax/JavaScript part:
Most of the time you need to “explore” the problem domain in order to take decisions, and JavaScript can make the process more difficult (often pen and paper is a better tool).

For that reason I think that is not a good idea to try to learn the syntax of JavaScript and at the same time learn about a problem domain, is just too much.

IMHO, A better approach is used in the book “C Programming Language”[2]:

  1. concept/idea:
    A description of the problem domain, with enough details to make unnecessary further “exploration”.

  2. algorithm/pseudo code:
    Again, expressed in detail

  3. code:
    An implementation of the algoritm/pseudo code

  4. exercises:
    Mostly write modifications/optimizations of the existing code

Is the CS help me to understand programming faster ?
or Programming help me to understand CS ? ??

I’m reading some CS books (“structural stage”[3], I really don’t have the time to study) and at the moment I can say that the less CS the topic is better:

  1. My first recommendation is HTDP[1]:

The idea is simple, you can write programs in a systematic way[4]:

  • Design a Program:

  • Design a Function:

  1. Essential of programming languages[5]:
    Is like “JavaScript: Understanding the Weird Parts”, but more general.

  2. Structure and Interpretation of Computer Programs[7]
    The part about “Data Abstraction” is really interesting.

Cheers and happy coding :slight_smile:

[0] https://en.wikipedia.org/wiki/Problem_domain

A problem domain is the area of expertise or application that needs to be examined to solve a problem.

[1] How to Design Programs:

Systematic Programming Design

How to Design Programs, Second Edition

[2] C Programming Language, 2nd Edition 2nd Edition


[3] How to read a Book

[4] https://htdp.org/2018-01-06/Book/part_preface.html

[5] http://www.eopl3.com/

[6] “JavaScript: Understanding the Weird Parts”

[7] Structure and Interpretation of Computer Programs


Thanks; this is useful to me. I’m doing a “sort of open” project to guide people through learning their times tables… and yesterday’s contemplation was the assorted things a quiz would do, and the different versions of it… the “design a function” framework is a handy sequence…

1 Like

Hi eslam!
A very good question you asked here at FCC. I am also straggling on what to learn first and what to learn later. I want to become a FullStuck developer.

The replies you got helped me a lot on how to sort things out. Thanks to all those who take a few moments to answer these questions, it helps really. Most of us out here have these same questions but we never dare to ask.

About your English, eslam :-)!
My advice to You, and also other FCC members, is that you grab some English books to read, eg. Novels of any kind, English articles, English weekly magazines and read during your free time, as well as you are learning writing codes/programming, etc.
English is a global language even if where you are in the world. Speaking from experience, i think you will have a lot to gain, if you try to master it as much as possible, in addition to mother languages.

I hope my message is understandable and that it helps you on your way to further learning.

Good luck.-).

1 Like

@eslam, I’ll summarize for you:
Just (1) build stuff, (2) read books and (3) try to connect dots between 1 and 2.

Here’s a learning algorithm for you, try to understand what I mean:
"Learn any topic breadth-first with the queue of max size of 2 (or 3 if you’re younger than 22) where you would store unknown terms. If you haven’t finished reading about topic and your queue reached limit - this topic is too advanced for you at the moment, find less advanced topic. Else, if you finished topic, proceed with the terms in the queue (applying same algorithm).

Don’t learn depth-first, it’s very very deep!"


Exactly! It’s a wonderful advice!
That really helps a lot because the more you read in that language, the more you’ll be able to remember things and it will boost your learning by a ton.
Also, if you want to improve the listening part, you can watch movies in English (or whatever other language you want to learn).
Now, I don’t know how it works where you live, but here in Italy ALL the movies get dubbed in Italian and I find it very detrimental for the learning of the English language (no wonder we speak it terribly here).
In other non-english speaking countries I’ve been to, in the cinemas they had the movie in the original language with the local language subtitles (and their English is much better than ours).
In Finland I was amazed when an old lady at a corner store started to talk to me in English. It would have been impossible where I live :joy:

1 Like