It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
I want to switch my career to the IT field, is Data structures and algorithms good to learn? Now I am BPO field but want to change my career to core IT and wish to be a developer. If anyone can guide me on a path, how I can achieve my goal?
Post edited October 05, 2022 by vishalshah
Speaking as a person with a Master in computer science:

Data Structures and Algorithms is a general field independent of programming languages. You will learn about O-notation, basic search- and sorting-algorithms, runtime, complexity and such.

Next step is algorithmic geometry. You will learn about sweep line algorithms, finding the convex hull of a point cloud and so on, all the way up to calculating whether a polygon is planar (and thus valid) or not. Triangles, vectors aso.

Whereas data structures will teach you about the fundamentals of databases, not just relational but all databases.

None of those fields care for programming languages, you will “program” on paper using a pencil. This is the case for everything in "applied informatics", as they used to call it. I have taken part in seminars where "some" programming was required, like visualization of algorithms. But those mix and match the tools as they see fit.

Learning about programming languages is part of a different field, called "practical informatics". Particularly Object Oriented Programming, which was its own course when I was at university. The latter was rather good, as it taught not one language, but all. Each construct was introduced by comparing the syntax in at least five different OO languages. Perhaps it would be best to acquire some lecture notes and go from there.

Concerning specialization: Python is a scripting language with minimal support for complex structures. It has some application in cloud processing using Hadoop/spark clusters, for example. But it isn't the best language to learn how to program at all. C++ is the opposite. However, it's so old-school, you'll be writing a ton of boilerplate code. It starts too close to the machine.

For learning on a high level, I would rather start with Java or C# and branch out from there once you have a solid understanding of basic concepts like classes, interfaces, inheritance, visibility, patterns, et cetera.
avatar
Nervensaegen: -words-
I applaud your idealistic tenacity, but that's just some spam with curry on the side.

Edit: Since people will happily discuss around the robot in the room. I'm going to suggest Rust. It's not a flash in the pan or a fad, it's quite here to stay, yet it is opportune with new ideas to be tested and run, and conversions of old software.
Post edited October 06, 2022 by Darvond
avatar
vishalshah: I want to switch my career to the IT field, is Data structures and algorithms good to learn? Now I am BPO field but want to change my career to core IT and wish to be a developer. If anyone can guide me on a path, how I can achieve my goal?
It really depends on what kind of developer you want to be. C++ is a lot harder to grasp than Python, but faster and more powerful - that comes with more headaches for you as a programmer. Python is a lot more elegant and forgiving, but slower and may give you some bad habits (by doing a lot for you transparently. without you having to worry).

You will find jobs requiring either, sometimes even both. Python is highly used in data analytics and AI inference models, for example.

If you want to start off easy and later dive deeper if you feel like it, I'd start with Python. If you're feeling brave and think you'll want to work on high-performance real-time applications (think game engines, database backends, drivers etc.) then C++ is unavoidable.

P.S.: Also have a master in computer science and automatic process control, if that's relevant in any way.
avatar
Nervensaegen: Concerning specialization: Python is a scripting language with minimal support for complex structures.
You've obviously not worked with numpy a lot.
Post edited October 05, 2022 by WinterSnowfall
avatar
vishalshah: I want to switch my career to the IT field, is Data structures and algorithms good to learn? Now I am BPO field but want to change my career to core IT and wish to be a developer. If anyone can guide me on a path, how I can achieve my goal?
Both are terrible choices for that goal.

You don't start with a script language or a low(er) level language if you want to learn how to structurize data.

As a Java programmer I can agree that Java and C# are the way to go.

If you want to use a scripting language however, Python is not your only option. While it is very common for software run in a shell, you don't see it often used integrated in larget software projects. In our company we use mostly TypeScript for that (not saying it is necessarily the best option, it's just an example).
Why on earth would someone make a new account just to ask this question here? On GOG forum of all places?

Most likely this is just spam attempt.

But funny to see the responses. What language you use for practicing algorithms & structures is largely irrelevant. Any mainstream or general purpose language will do.
avatar
clarry: What language you use for practicing algorithms & structures is largely irrelevant. Any mainstream or general purpose language will do.
Actually, +1. This is the ultimate truth.

But I suspect OP was asking us to pick between A and B, probably because he has some options to pick a course on either. Funny to see people jumping in and saying: "No, use C and D!", but then again everyone has a favorite programming language they will defend with the very core of their being :P.
Python is a fine language to start with. You might hit a performance problem in some domains that will force you to look elsewhere, but you can do most things in Python, despite what the naysayers calling it "a scripting language" are saying. There are shops doing their entire stacks in Python and they are doing just fine.

C++ is pretty low level. It's fine, but you might also want to investigate Rust. It's not as well established, but from what I learned so far about it so far, it's probably a safer programming language. You are less likely to shoot yourself in the foot with it.

It's more minimalistic than a lot of other programming languages, but I'm getting rather fond of Golang. It's like the Python of compiled languages: Simple, straightforward, no-nonsence, gels with your brain. Nothing is impossible, but you are less likely to hit a codebase that got overengineered to hell way beyond the complexity of the problem it was trying to solve in Golang. In terms of ecosystem, it's mostly established for devops tooling, self-contained commmand line binaries and microservices.

I used to be a fan of Javascript, but I think the influx of people wanting to turn it into their other favorite programming language made its ecosystem a hot mess. Still fun to do a home project with ES5 and ramdaJS, but if you end up working with JS as part of a larger team, they'll probably impose many layers of complexity on you that you won't much care for. They lost me at the part where they wanted a transpilation layer completely separate from the core programming language that transpiles your thing in the original language just to get some work done. You want a compiled language with types (not strictly necessary imo, but I know some people get religious about that)? Just use a compiled language with types already!

The Java programming language, when taken on its own, is fine. However, its ecosystem (JVM, Spring, Hibernate, whatever is the latest enterprisy server framework of the day) is a mess in runaway complexity. If you want to work in large companies, it will open many doors (however, expect to be working more on maintaining older established codebases rather than new greenfields projects), but if you want to "change the world" or just work with things that are elegant, stay away.

I haven't touched C# since pre-2010, so can't comment. It's fine, probably, I guess.
Post edited October 05, 2022 by Magnitus
avatar
Nervensaegen: Concerning specialization: Python is a scripting language with minimal support for complex structures.
avatar
WinterSnowfall: You've obviously not worked with numpy a lot.
Native language features, not libraries.

When learning OOP it is best to start with a language that has an actual "interface" keyword, true "abstract" methods and classes, proper "private" members, and doesn't rely on duck-typing. So you can follow lectures more easily.

Python's idea of OOP strays too far from the path to be a good tool to train the plain vanilla concepts.
Post edited October 05, 2022 by Nervensaegen
avatar
WinterSnowfall: You've obviously not worked with numpy a lot.
avatar
Nervensaegen: Native language features, not libraries.

When learning OOP it is best to start with a language that has an actual "interface" keyword, true "abstract" methods and classes, proper "private" members, and doesn't rely on duck-typing. So you can follow lectures more easily.

Python's idea of OOP strays too far from the path to be a good tool to train the plain vanilla concepts.
Personally, I think people have overdone with with OOP. It's very easy to make it a 10 meters thick mess of runaway abstractions. I've seen it on the ground.

Otherwise, I think if you want to get things done in the real world, you can't just look at a programming language in a vacuum. Unless you want to reinvent the wheel, you got to look at the extended ecosystem of the language you want to use and see if it meshes well with the problem domain you want to solve.
Post edited October 05, 2022 by Magnitus
There is one difference between these two languages that's rather critical when looking at data structures, and that's the way memory management is handled.

In Python, reference counts and garbage collection are used. This prevents many types of bugs from occurring, making it easier to work with. This approach does, however, have some drawbacks when it comes to performance and resource use, and may cause problems in real-time situations (in particular, I would never do hard real-time stuff in Python).

In C++, however, the programmer is expected to handle memory management. This, in particular, means that it is necessary for the programmer to allocate and free memory as needed. A mistake made here can result in either memory leaking (if you forget to free it) or memory corruption (if you free it too soon, or if you free it more than once). This makes it harder to avoid problems, and sometimes it can be hard to debug such programs (as the errors don't show up until run-time, and even then may not be obvious; they may show up in a completely different part of the code). This issue is so commonplace that there exist specialized tools, such as valgrind, to aide with debugging such issues. On the other hand, having to do manual memory management, particularly in the context of data structures, is a great way to learn about this.

Of these two choices, I would suggest C++ for data structures, because it will help you learn about memory management. While you're doing so, I do suggest learning how to use tools such as gdb (or another debugger) and valgrind to debug the errors you encounter, and you *will* encounter them. If you finish data structures in C++ without ever getting a segmentation fault (or the Windows equivalent), then I don't believe the claim of having finished data structures in C++.
avatar
Nervensaegen: When learning OOP it is best to start with a language that has an actual "interface" keyword, true "abstract" methods and classes, proper "private" members, and doesn't rely on duck-typing. So you can follow lectures more easily.
Well, if you really insist on all that, then sure, no place better than Java :).

avatar
Magnitus: Personally, I think people have overdone with with OOP. There are other things.
Wholeheartedly agree. It irks me beyond reason when I see people using OOP where it makes no sense to use it, just because it's the thing they've been taught to worship.
avatar
Magnitus: C++ is pretty low level. It's fine, but you might also want to investigate Rust. It's not as well established, but from what I learned so far about it so far, it's probably a safer programming language. You are less likely to shoot yourself in the foot with it.
Rust is nice in this context because it does turn certain errors that would be hard-to-debug errors in C++ into compiler errors.

However, there are a couple catches:
* Some data structures, particularly those involving circular structure, require unsafe code to work, and when you use unsafe, you're throwing away the safety advantages of Rust for that bit of code.
* Safe Rust code can still leak memory, as it's been decided that leaking memory is still "safe". (Memory corruption, on the other hand, isn't considered safe.)
avatar
Magnitus: It's more minimalistic than a lot of other programming languages, but I'm getting rather fond of Golang. It's like the Python of compiled languages: Simple, straightforward, no-nonsence, gels with your brain. Nothing is impossible, but you are less likely to hit a codebase that got overengineered to hell way beyond the complexity of the problem it was trying to solve in Golang. In terms of ecosystem, it's mostly established for devops tooling, self-contained commmand line binaries and microservices.

I used to be a fan of Javascript, but I think the influx of people wanting to turn it into their other favorite programming language made its ecosystem a hot mess. Still fun to do a home project with ES5 and ramdaJS, but if you end up working with JS as part of a larger team, they'll probably impose many layers of complexity on you that you won't much care for. They lost me at the part where they wanted a transpilation layer completely separate from the core programming language that transpiles your thing in the original language just to get some work done. You want a compiled language with types (not strictly necessary imo, but I know some people get religious about that)? Just use a compiled language with types already!

The Java programming language, when taken on its own, is fine. However, its ecosystem (JVM, Spring, Hibernate, whatever is the latest enterprisy server framework of the day) is a mess in runaway complexity. If you want to work in large companies, it will open many doors (however, expect to be working more on maintaining older established codebases rather than new greenfields projects), but if you want to "change the world" or just work with things that are elegant, stay away.

I haven't touched C# since pre-2010, so can't comment. It's fine, probably, I guess.
Worth noting that these are all garbage collected languages, and are therefore in the same situation as Python.
avatar
Magnitus: Personally, I think people have overdone with with OOP. There are other things.
avatar
WinterSnowfall: Wholeheartedly agree. It irks me beyond reason when I see people using OOP where it makes no sense to use it, just because it's the thing they've been taught to worship.
https://gist.github.com/lolzballs/2152bc0f31ee0286b722
avatar
Magnitus: I used to be a fan of Javascript, but I think the influx of people wanting to turn it into their other favorite programming language made its ecosystem a hot mess. Still fun to do a home project with ES5 and ramdaJS, but if you end up working with JS as part of a larger team, they'll probably impose many layers of complexity on you that you won't much care for. They lost me at the part where they wanted a transpilation layer completely separate from the core programming language that transpiles your thing in the original language just to get some work done. You want a compiled language with types (not strictly necessary imo, but I know some people get religious about that)? Just use a compiled language with types already!
The issue is that, on the web, you really don't have a choice. Web browsers understand JavaScript (and WebAssembly); they don't understand any other programming language. So, when writing front-end web code, you have to use JavaScript or a language that can transpile to it.

With that said, with WebAssembly it is possible to use other languages (in my current project, I use pyodide to run Python code in the web browser), but doing so can be sub-optimal, and you'll still need to have some JavaScript code in there somewhere.
Post edited October 05, 2022 by dtgreene
avatar
Magnitus: They lost me at the part where they wanted a transpilation layer completely separate from the core programming language that transpiles your thing in the original language just to get some work done. You want a compiled language with types (not strictly necessary imo, but I know some people get religious about that)? Just use a compiled language with types already!
I wouldn't look at it so negatively. Arguably they are using "a compiled language with types" already. Transpilation = compilation. That the typed language happens to compile to javascript (rather than assembly or something else) is but an implementation detail.

C++ also originally "transpiled" to C, which would "transpile" to assembly and then machine code.. and many of the modern languages compile to some sort of bytecode that may or may not JIT to machine code at run time. (Also, compiled/interpreted isn't so much a language feature as it is an implementation feature..)
Post edited October 05, 2022 by clarry
Who would've ever imagined a spammer ever starting a productive thread. I don't remember if we have a programming thread but this thread not being locked or deleted could even be useful outside of the info already posted here.

Who knows, maybe it can help catch this guy's other accounts that'll probably start shilling here once they're are mature enough.