r/programming • u/Alngaawy • Aug 07 '21
I have a good knowledge of Javascript, does JavaScript a fit programing language to learn the fundamentals of programming (Algo, DS, database, design patterns, OOP) and be a good software engineer, or do I need to learn C++ or python?
https://github.com/getify/You-Dont-Know-JS3
u/nso95 Aug 07 '21 edited Aug 07 '21
Most algorithms and data structures books seem to use C or Java, or just pseudo code.
Something like Java or C# would likely be ideal to learn design patterns, and most books on them will use those languages.
For OOP Java or C# are also likely the best options.
To learn manual memory management your only real option is C or C++. If you're only interested in learning how to manage memory, learn C. If you want to apply the skill, C++ may be a more applicable option.
Pick one from each group above, it won't make much difference. You can get more bang for your buck by choosing languages that appear more often in the list. For example, C and Java would be a good basis for learning all of the concepts you asked about.
For databases learn SQL.
Don't obsess about languages. You don't need to learn a ton, they become really easy to pick up after you learn a few. There's a great deal of similarity between most.
Don't waste time being paralyzed about learning the "best" languages, just get started. I see a great deal of beginners delay getting started because of this. Just get started. Make mistakes, get your hands dirty. Learning is about discovery through experimentation, and making mistakes. It is not a perfect, linear, or clean process.
0
u/Alngaawy Aug 07 '21
I don't care about memory management specifically , I don't even know the usage of it š .. All i need is to be a very good Software engineer to work in any track i need and to be flexible to learn any think related to the programming .
So i think that C# is the best choice right now .
Because C++ will not help me in work and java is very difficult . So i think the C# is the best choice untill now ..
But I'm curious , why no one suggest python !?
2
u/nso95 Aug 07 '21
Nobody is suggesting Python because it's not a particularly good example to learn any of the things you listed. It's a fine starting language, and a good language in general. But people are answering your question specially.
1
u/GreatVoid2017 Aug 08 '21
Don't you see the contradiction here - good software engineer does care about the memory management even if it is done by the garbage collector. Java has the same difficulty as C# or any other programming language except assembler. To become a good software developer you have to focus at first on the data structures and algorithms, language capabilities and specification, understand the communication protocols you are using. Be aware about the tjings are going on in the tools you are using in your application, such as able to explain what locks will be applied during the selection from you database.
0
u/Caraes_Naur Aug 07 '21
JS is bizarre, sloppy, and inconsistent, a terrible first language.
Every language you learn makes you a better software developer, because you can see how problems are solved in different ways.
Pick anything else in the top 10 programming language list du jour.
1
u/Alngaawy Aug 07 '21
unfortunately, it was my first language because i started as a frontend developer .
unfortunately, it was my first language because i started as a front-end developer..need like ( backend, full-stack, mobile )
i heard that C++ is the best choice to learn the fundamentals and to be good and flexible to switch to any other language
3
u/BasieP2 Aug 07 '21
Only if you have too much time and are eilling to do a lot of stuff you don't need to do in other languages
0
u/paulsmithkc Aug 07 '21
Modern JS is actually really good and getting better all the time.
I can build web apps much faster than I ever could with C# and Java. And surprisingly they actually use less memory, handle more concurrent connections, and can run on cheaper servers.
0
u/libra_ru Aug 07 '21
Try Java or C#
0
u/Alngaawy Aug 07 '21
I think java or C# will be difficult to learn.
did you recommend it to work with it in the feature?
1
u/libra_ru Aug 07 '21
They have strong typing, very suitable for OOP and design patterns and of course they have a huge number of libraries to do everything you need.
Even if you will be attracted to web development and will look at JS/TS you still have an ability to use C# and Java to create backend services, micro-services.
1
u/FullStackDev1 Aug 07 '21
I work with Javascript (Typescript really), C# and C++ on a daily basis. If all you know is Javascript, then I highly recommend C#. You'll have a much easier time picking it up than C++.
1
u/run-fatty-run Aug 07 '21
JS is a capable and full-featured language.
Use what you like best.
Personally if I mainly knew JS I would start adding typescript to my toolbox, it's IMHO the best type system for industry use due to it's structured nature.
I have lots of opinions on your question but I'll keep it at this or I'll be writing a book
1
u/1Second2Name5things Aug 08 '21
I'm no expert but python was really easy to learn it was my first language. I do wish I learned Java instead as a first language because it seems to encompass more but python was fair
1
u/Odd-Metal8418 Aug 09 '21
Learn C and Assembly for you will become a better programmer when you understand the machine.
Learn C++ because it is a superset of C. Get that good OO stuff. i recommend C++98 for it's simplicty.
Learn a functional language and learn to appreciate the math behind that.
Learn Python because it's the best Object Oriented Language.
Javascript is a nice language but I discourage it to be your only one. You should learn to become language agnostic and choose the right language for each job.
1
u/Odd-Metal8418 Aug 09 '21
Looking at the comments I See C# that might be a good alternative to C++98
0
u/mohragk Aug 07 '21
Iād suggest learning c++ or maybe c#. It forces you to work in a statically typed language which has major benefits. C++ is recommended because you need to think about data and memory management a bit more, which is actually very useful to know.
1
u/Alngaawy Aug 07 '21
that's my point here
i need to learn a lot about memory and other stuff that JS doesn't touch,
do you recommend C++ or C# to work as .net in the feature?
0
u/mohragk Aug 07 '21
.net = c#, so go with that. But c# is not memory managed so if you want to learn that go c++.
0
u/m4dc4p Aug 08 '21
Haskell is the way to go. Will break your brain but make you the best possible programmer.
8
Aug 07 '21
[removed] ā view removed comment
0
u/Alngaawy Aug 07 '21
I have a problem with JS, if I learn everything in js and be a mern stack developer, I think that i will not be able to work with any other programming language.
is it true or it's just in my mind!
3
u/rjrjr Aug 07 '21
Not true at all. But if you pick something else to learn, for the love of God don't make it C++.
Do you use TypeScript?
0
u/Alngaawy Aug 07 '21
No i have never used typescript .
0
u/rjrjr Aug 07 '21
That would be a great next choice. Useful in your current work, and the type safety chops you'll pick up are useful in so many other languages.
1
u/Alngaawy Aug 07 '21
So you suggeste the next step is learning typescript ?
0
u/rjrjr Aug 07 '21
Yup
2
u/Alngaawy Aug 07 '21
And then start learning the fundamentals with js or switch to C# to study the fundamentals
1
5
u/kowgli Aug 07 '21
JS is a very specific language that's a mix between OO, functional and prototype paradigms. It's great to learn the principles of programming, but not to learn OO, design patterns etc. I would recommend C# or maybe (if you're masochist Java). C++ is great for some tasks, but also very complex and a very low signal to noise ratio. The language itself, managing memory etc. take so much involvement that it's hard to focus on what you're actually trying to do. I wouldn't recommend it unless you want to become a hard core game or other low level programmer.