What is the next step for learning programming?

In summary, the author is undecided about whether to learn another language or move onto more advanced programming topics. They are interested in cyber security and want to learn more about apts and windows apps. They are unsure of what their next step should be and want advice on whether to learn more languages or focus on C++.
  • #1
yungman
5,718
240
So far, I almost finish chapter 10 in C++ book by Gaddis, have 3 to 4 more chapters to go. I want to start thinking about what is my next step to learn. Should I learn another language or move onto other parts of programming?

I have been thinking what is my interest, I am not into gaming at all, after thinking about firmware for micro controller, I don't think I want to go there at this moment as I have been designing hardware for those in my career, it's not something that I want to get into anymore. I am interested in cyber security and programs involve Windows. It's interesting watching tv on anti hacking, they even had a show called CSI Cyber a few years back. Like they look at the code and find the virus. Bottom line is I really don't know what I want, definitely not planning to go back to work, just for the fun of it.

Thanks
 
Technology news on Phys.org
  • #3
jack action said:
Maybe you need like Hacking for dummies?
Any specific language to read this kind of cyber security stuff?

Thanks
 
  • #4
How about writing apts for windows? What language they use?

I still don't have a clear idea what is the point of having different languages. Is it one is particular good for one purpose? Or it just choice of the programmer that is writing? From the little I read around, seems like all the most popular languages can do windows apts, most can do embedded firmware etc. Sounds more like it's subjective more than whether the language can do the job or not.

Is it like printed circuit board layout software? We have OrCad PCB, Power PCB(PADS), Allegro that are very popular. Of cause each has good points and bad points, but it's pretty much choice of each company what to use. They all can do the job and they all produce pcb at the end. You really can flip a coin and choose one and go with it.

My point is do I need to learn different languages OR get deep into C++ and then move onto more advance stuffs in programming and just use C++ all the way?

I choose C++ because it's the fastest, and also all the companies I worded for use C++ for hardware, firmware. I know if I am still working in my field, C++ is THE language to learn. But how about others like windows apts or cyber security stuffs?

I just read another post here that the OP only knows Python and he is working in a place that he supposed to use a program written in C and he has a hard time with it. I am sure one can write the same program completely in Python, but that's is how life is, those people use C and you can take it or leave it. That's the reason I want to know more about cyber security and windows apt and learn what people most commonly use. It would be a big disadvantage if I run into situation where I don't know the program and that's what most people use.
 
Last edited:
  • #5
yungman said:
How about writing apts for windows? What language they use?
That's apps, short for applications. It depends on what kind of app it is: whether it's run in a command prompt window or it's a full-blown windows app, with forms and menus and controls.

If it's just an app that is run in a command prompt, pretty much any language will do. If it's a full-featured Windows program, as described above, there are several choices of languages: Visual Basic, C, C++, Fortran, C#, F#, plus there are software libraries like Eclipse and Net Beans so that you can write the program in Java.
yungman said:
I still don't have a clear idea what is the point of having different languages. Is it one is particular good for one purpose? Or it just choice of the programmer that is writing?
IMO, it's a little of both. Some languages are better suited for some purposes than others. For example, I don't think Fortran is especially well suited to work with data bases, but it is very well suited for heavy duty numeric computations. C and C++ are not well suited for financial work, as their floating point type, float and double, aren't well suited for doing money calculations.

Also, a lot of programmers tend to favor the language they're most familiar with, so unless the application requirements mandate a particular language, they tend to write the code in what they're most comfortable with.
yungman said:
My point is do I need to learn different languages OR get deep into C++ and then move onto more advance stuffs in programming and just use C++ all the way?
My recommendation is to stay with C++. You've just scratched the surface so far, and haven't gotten to classes yet. I think you've been working with C++ for about a month so far, which isn't enough time to really get very far. If you continue your studies with data structures and algorithms, most of the books will be using C++ or maybe C.
 
  • Like
Likes yungman
  • #6
Mark44 said:
That's apps, short for applications. It depends on what kind of app it is: whether it's run in a command prompt window or it's a full-blown windows app, with forms and menus and controls.

If it's just an app that is run in a command prompt, pretty much any language will do. If it's a full-featured Windows program, as described above, there are several choices of languages: Visual Basic, C, C++, Fortran, C#, F#, plus there are software libraries like Eclipse and Net Beans so that you can write the program in Java.
IMO, it's a little of both. Some languages are better suited for some purposes than others. For example, I don't think Fortran is especially well suited to work with data bases, but it is very well suited for heavy duty numeric computations. C and C++ are not well suited for financial work, as their floating point type, float and double, aren't well suited for doing money calculations.

Also, a lot of programmers tend to favor the language they're most familiar with, so unless the application requirements mandate a particular language, they tend to write the code in what they're most comfortable with.
My recommendation is to stay with C++. You've just scratched the surface so far, and haven't gotten to classes yet. I think you've been working with C++ for about a month so far, which isn't enough time to really get very far. If you continue your studies with data structures and algorithms, most of the books will be using C++ or maybe C.
Thank you sir, this is music to my ears. I have not forgotten your suggestion and I am committed to study through middle of Chapter 14 until reaching overloading. I am more thinking beyond that. I have no intention to quit before that. Hell, that's only 3 1/2 more chapters to go, I went through 10 chapters already, what is 3 1/2 more! It'll be done by Thanks Giving or latest Christmas.

I am just thinking whether I should stop after that and study another language. But if most books on data structures and algorithms are based on C++, that is really music to my ears. Sounds like I should go beyond your minimum suggestion.

No, financial is ONE particular part I have NO interest in. Hell, if I were a programmer, I would change career if I have no choice but to work in financial related programming. It cannot be more clearer in my life.

Thanks so much for all your help.
 
  • #7
Mark44 said:
If you continue your studies with data structures and algorithms, most of the books will be using C++ or maybe C.

It's worth noting, in this connection, that most actual code that implements data structures and common algorithms is written in C or C++. A lot of that code lives inside interpreters for higher-level languages, like Python, so it might look like the data structures are higher-level language data structures; but under the hood, the code that is doing the grunt work of actually implementing the data structure and making it perform is C or C++ code. (Two good Python examples are the dict implementation and the implementation of the sort method of the list builtin. Both are heavily optimized C code that does a lot under the hood to make sure those data structures "just work" and give good performance as far as Python programs are concerned.)
 
  • #8
PeterDonis said:
It's worth noting, in this connection, that most actual code that implements data structures and common algorithms is written in C or C++. A lot of that code lives inside interpreters for higher-level languages, like Python, so it might look like the data structures are higher-level language data structures; but under the hood, the code that is doing the grunt work of actually implementing the data structure and making it perform is C or C++ code. (Two good Python examples are the dict implementation and the implementation of the sort method of the list builtin. Both are heavily optimized C code that does a lot under the hood to make sure those data structures "just work" and give good performance as far as Python programs are concerned.)
I just want to make sure when you said "It's worth noting, in this connection", that you are in agreement with Mark44. I don't want to guess anything.

Sounds like I should go deeper into C++ than my original plan of 13 1/2 chapters. Ha ha, I do have 4 books. My first book that I trashed before I move to Gaddis, does NOT look as bad as I learn more and more C++. I actually read the chapter on pointers and it's good.

I also have Beginning C++17 5th edition by Ivor Horton and Peter Van Weert.
https://www.amazon.com/gp/product/1484233654/?tag=pfamazon01-20
Infact, I have two of this book as they lost the first one and sent a second one to me. Then after 2 weeks, the one that was lost arrived. Gaddis is a beginner's book, I bet I need more than Gaddis.

It is music to my ears that it's not necessary to learn another language at this point. I hate names, last thing I want is to learn a new set of names. To me, after the names, programming is very similar give and take, it's the names! I am just very bad with names. So far, the only chapter that is more difficult is the pointers, other than that, it's very straight forward, just learn the names and syntax.
thanks
 
Last edited:
  • #9
In an ideal world, one would have a single universal language, that would be efficient and flexible to perform any task. From your posts I feel that you would like to hear from us that C/C++ are such universal languages. But the real world is much more complex and difficult.
For example, you can try to build web applications using C/C++, but I believe you would find it pretty cumbersome, and in the end you would do much better job using more appropriate set of languages. You would even found that some language is more efficient for back-ends, and other one for front-ends.
Good news is that once you master C/C++, it should not be a big issue to learn any high-level language quickly :cool: You just need to know what is your goal, and what kind of applications/programs you want to write..

yungman said:
I hate names, last thing I want is to learn a new set of names. To me, after the names, programming is very similar give and take, it's the names! I am just very bad with names.
You mean the keywords specific to particular language? It is not that bad, many of the popular languages use similar or same keywords.

yungman said:
How about writing apts for windows? What language they use?
As far as I know, Java and .NET (Visual Basic or C#) are still the most popular choices in this domain.
 
  • Like
Likes jack action and yungman
  • #10
yungman said:
I still don't have a clear idea what is the point of having different languages. Is it one is particular good for one purpose?

This was true 40 years ago too. You could take a list of languages you knew or knew of back in the day, and read their Wikipedia articles. Most explain why they were written. Some for ease of scientific/numerical calculation. Some for business applications like payroll. Some for ease of access to large databases. Some for teaching computer science.

lomidrevo said:
In an ideal world, one would have a single universal language, that would be efficient and flexible to perform any task. From your posts I feel that you would like to hear from us that C/C++ are such universal languages.

I agree with this. But if you went to the hardware store and told them you wanted to buy one single tool that would meet all your needs, they would probably give you a funny look.
 
  • Like
Likes sysprog
  • #11
yungman said:
I just want to make sure when you said "It's worth noting, in this connection", that you are in agreement with Mark44.

What I said is consistent with what @Mark44 said.
 
  • Like
Likes yungman
  • #12
yungman said:
I still don't have a clear idea what is the point of having different languages. Is it one is particular good for one purpose?

I'd say that yes, there good for particular purposes. C/C++ compiles to run fast. A plerhora of APIs exist for almost any task you'd want. Also C/C++ are definitely beter for heavy graphics. OpenGL and DirectX may have Java implementations, but in my experience Java's too slow. Perl, like Python and others works best as the glue between other programs. (again Python isn'the fastest language)...

Korn and BASH acts a little on *NIXes as DOS batch did on Windows although they're not really comparable. On *NIX you feel you actually have power at your fingertips.Functional languages are a an entirely kettle of fish. :)
 
  • Like
Likes sysprog and yungman
  • #13
PeterDonis said:
A lot of that code lives inside interpreters for higher-level languages, like Python, so it might look like the data structures are higher-level language data structures; but under the hood, the code that is doing the grunt work of actually implementing the data structure and making it perform is C or C++ code.
Note that C++ itself uses some of the standard data structures that are taught in a data-structures course, to implement various "container" classes in the C++ standard library. These are often referred to as the "Standard Template Library" (STL).

For example:
  • std::list is typically implemented internally as a doubly-linked list: a linked list that has both "forward" and "backward" links.
  • std::map is typically implemented internally as a red-black tree, or maybe a binary search tree.
  • std::unordered_map is (I think) typically implemented internally as a hash.
 
  • Like
Likes sysprog and yungman
  • #14
jtbell said:
Note that C++ itself uses some of the standard data structures that are taught in a data-structures course, to implement various "container" classes in the C++ standard library. These are often referred to as the "Standard Template Library" (STL)

I agree with this, but I think STL is much more. I think of it as a "library" (not in the .a/.so sense) of common things one might write. You mentioned doubly-linked lists. I might want a singly-linked list instead. That's OK, STL has forward_list. Or I might want to find the first instance of two consecutive elements that match - as an example of something I could easily write, but probably haven't written - STL has adjacent_find.

sbrothy said:
C/C++ compiles to run fast

While this is often true, C/C++ is not unique in this respect, and speed was not an overriding consideration in either language's purpose. C++ was intended to bring classes to C, as struct was really not powerful enough to do what people wanted to do. C was written to be truly general-purpose, in the sense that there would be little that could not be implemented in the language (painful as it may be). In particular, it was intended to be general-purpose enough that one could use it to write an application, an operating system utility, and the operating system itself. Speed is a concern, of course, but it was not the only concern. It could have been made faster if certain language features were not present.
 
  • Like
Likes sysprog
  • #15
jack action said:
Maybe you need like Hacking for dummies?
I am surprised there are so many books on hacking. I looked into the content of the book you suggested, it doesn't talk much about what language used. Is there any language specifically used? Or it's like IT type that you don't need to know languages, it's just a bunch of suggestions to look out?
 
  • #16
jtbell said:
Note that C++ itself uses some of the standard data structures that are taught in a data-structures course, to implement various "container" classes in the C++ standard library. These are often referred to as the "Standard Template Library" (STL).

For example:
  • std::list is typically implemented internally as a doubly-linked list: a linked list that has both "forward" and "backward" links.
  • std::map is typically implemented internally as a red-black tree, or maybe a binary search tree.
  • std::unordered_map is (I think) typically implemented internally as a hash.
So if I study Container Classes and STL, I am knocking on the door of data-structures already? So it's worth my while to study deeper into C++?

You mean other languages don't go this deep?
 
  • #17
yungman said:
I am surprised there are so many books on hacking. I looked into the content of the book you suggested, it doesn't talk much about what language used. Is there any language specifically used? Or it's like IT type that you don't need to know languages, it's just a bunch of suggestions to look out?
There are no special program languages for hacking. You just need to know the language of the program you want to hack.
 
  • #18
yungman said:
So if I study Container Classes and STL, I am knocking on the door of data-structures already?

More like trying to sneak in by a second-story window.
 
  • Like
Likes sbrothy
  • #19
Vanadium 50 said:
More like trying to sneak in by a second-story window.
Ha ha, at least I can sneak in! Seriously, I want to study data structure, if that helps, I will study that chapter, but if it's more efficient to just go to data structure, then I skip those.
 
  • #20
jack action said:
There are no special program languages for hacking. You just need to know the language of the program you want to hack.
I am not interested in hacking, but I want to learn Cyber security and want to know what languages are necessary. Sounds like they all come in different language, so I have to learn all of them to understand the hack.

One thing I still don't understand. The hack codes are in .exe, it's not exactly a language even if you look at the code. How can people know what to read as it's not going to look like source code that gives you all the variables and names and all?
 
  • #21
yungman said:
The hack codes are in .exe, it's not exactly a language even if you look at the code.
The code has been compiled to an exe file -- an executable. That's not a language -- it's just a file format.
 
  • #23
Hacking can be done in a lot of ways (just think about social hacking where programming is not necessary).

One way is to access the source code of a program. So you could study the source code for PHP (written in C) and try to find a vulnerability in the code. Once you found it, you can exploit it on millions of websites that are build with PHP.

Another way would be to create a program that will do a task impossible for a human, like trying to crack a password by trial and error. In such a case, you can use the program language of your choice to build the program. The .exe file is an executable file for Windows. Once you have created a program, you can create an executable file such that it can run by itself (no need for the basic program of the language to run it). Here's a method to compile such a file for a Python program.
 
  • #25
Mark44 said:
The code has been compiled to an exe file -- an executable. That's not a language -- it's just a file format.
Exactly, I always question how in the tv shows they can read the code and look at finger prints and all. Is it just in movie and tv, not real live?
 
  • #26
yungman said:
I just bought it from your suggestion.

Thanks
When you get to binary trees (Chapter 10 ) and search trees (Chapter 11) you might want to think about looking at database systems, which handle many such structures for you, via interfaces, e.g. SQL stored procedures.
 
  • Like
Likes yungman
  • #28
This one may already have been mentioned. Even so, it's worth mentioning again. This book is *the* bible of programming. It's also not tied to a particular language (though I think they use C++ in their examples. It's certainly worth both the money and effort:

"Design Patterns: Elements of Reusable Object-Oriented Software"
- - - - https://en.m.wikipedia.org/wiki/Design_Patterns
 
  • #29
The Windows operating system is written using C++. However, many or even most applications today are written using C#, an excellent standardized language that runs in a virtual machine (sheltering apps from which version of Windows is in use). It is now very high performance, and also contains functional programming constructs if you want them. If you are going to work with Windows extensively, knowing both languages would be essential.
 
Last edited:
  • Like
Likes sbrothy and Mark44
  • #30
Yeah. I totally forgot C#. I think Microsoft launched i in a respons to Java, but it's definitely "better". In my subjective opinion.

What I really love about C# is the way SQL is integrated in the language itself. That saved me quite some time coding up against RDMSs.
 
  • Like
Likes harborsparrow
  • #31
Someone talked about data trees didn't they? I still vividly remember having to replace a student's own implementation of a red/black data tree with one from standard libraries. I'm sure he had a lot of fun writing it, but it pretty much just amounted to him reinventing the wheel and failing at it. :)
 
  • Like
Likes harborsparrow
  • #32
Since sbrothy mentions the Design Patterns book, which is truly iconic, I'll point off to an article which will give someone an overview of that book. This was the article that I originally wrote about it in Wikipedia, but after being crowd-sourced in WP for many years (translation: chewed on by dogs), it's usefulness was diluted in WP. Of course, WP does do a good job of documenting each individual design pattern (which I never got to). Anyway, this Citizendium article is an overview of the important first section of the book, which gives guidance on how to use (and not use) the many features of a fully object-oriented language such as Java or C#. It might be worth a look:
https://en.citizendium.org/wiki/Design_Patterns
 
  • #33
sbrothy said:
What I really love about C# is the way SQL is integrated in the language itself.
Besides that, C# also includes classes for working with XML. I opted for C# last year in a program I wrote to parse a bunch of fairly large binary files whose structures were described by XML files.
 
  • Like
Likes sbrothy and harborsparrow
  • #34
Is it easy to learn C# after C++? I was going to learn C# as the CTO of the former company suggested as they are using it now. But I was thinking they use pc in their current project, not embedded controller. So I picked C++.
 
  • #35
C++ is IMO much the more difficult language, for one reason because it allows things like multiple inheritance, but also because it is C language and thus dependent on the machine's hardware architecture and does not so easily port between machines or OS versions. C# is more elegant, fully standardized, the the VM it runs on is highly optimized for performance. The tools are free. It's more like Java--memory is managed for you, although you still might need to know exactly what is happening in memory when objects are created and destroyed.
 

Similar threads

  • Programming and Computer Science
Replies
7
Views
679
  • Programming and Computer Science
Replies
15
Views
1K
  • Programming and Computer Science
2
Replies
54
Views
3K
  • Programming and Computer Science
12
Replies
397
Views
13K
  • Programming and Computer Science
Replies
1
Views
723
  • Programming and Computer Science
Replies
8
Views
867
  • Programming and Computer Science
Replies
13
Views
1K
  • Programming and Computer Science
Replies
32
Views
2K
  • Programming and Computer Science
Replies
16
Views
2K
  • Programming and Computer Science
2
Replies
69
Views
4K
Back
Top