Chumbimba

Software Engineering Question

15 posts in this topic

I see a lot of people on here want to get into coding/software engineering. I am currently learning python and want to go really deep into that but I also want to be a jack of all trades. 

Swift- app development

 

Python- Backend Development  

 

Java- High Level language/ Multi-Purpose

 

C#/unity- Game Development

 

Linux- hacking and operating systems

 

am I stretching myself too far ? Should I just focus on one language and master that one ? Is it possible to learn all these languages 

Share this post


Link to post
Share on other sites

I see many undergrads at my university making the same mistake. You have to understand that coding/programming is not the essence of computer science. During the initial stages, yes, you need to learn a programming language - but you have to learn to view programming more as a means to achieve a goal, rather than the goal itself. Many leading software engineers don't necessarily know every piece of syntax of a programming language, but know enough to be able to make design-decisions.

With that being said, I would recommend starting with one language that is preferably low-level (C or C++), as that would put you through the grinder. With C especially, you have to get right down to the metal, and learn not only the syntax, but also to take care of memory leaks, responsible memory allocation, vulnerable libraries/functions, and buffer overflows. So you end up learning a lot more than just the language (which is absolutely essential). Once you learn C/C++, languages like Python or Java are hardly a challenge, and can be learnt easily. 

GNU/Linux is an operating system and not a language. I assume you're referring to Bash scripting, which is the default shell. GNU/Linux has other shells as well such as tcsh, csh, ksh etc. But yes, being able to set up Bash scripts is very important and can make your life much easier.

So I would recommend: C/C++ for practical uses and learning Operating Systems' concepts alongside Bash. Also try to gain a general idea of how compilers work (heavy subject though). The rest you can tackle later.


Release me.

Share this post


Link to post
Share on other sites

@John Doe Thank you for your advice ! I have actually done a c tutorial on YouTube and have gotten pretty good at syntax. Pointers are difficult for me though. 

When i said Linux I meant the command lines. I’m still confused on the whole computer science vs software development. I started taking this pursuit seriously maybe a month ago so I am still learning a ton 

Share this post


Link to post
Share on other sites

@John Doe A lot of good advice here.

@Chumbimba

I also started with C, but I would say that you can actually start with any other languages. Pointers, memory allocation, and buffer overflows are just concepts. It's possible to work with difficult concepts with both low-levels or high-levels programming languages. You can have very complex structures and projects that use high-level languages and that will push your cognitive abilities to their extreme much quicker than dealing with memory in C. It mostly depends on the project's complexity, so work on very difficult projects, even if you fail you will still learn.

For learning GNU/Linux, I have been using it every day for many years. I know good programmers that use only OSX or Windows. If you want to learn it, you can start with Ubuntu, if you don't want that's fine too, it mostly depends of what you want to do. Linux is useful notably in the web development sphere as more than 90% of web servers are using it.

I personally don't know a lot of different programming languages, I mostly use Javascript/Typescript with HTML/CSS (which are not even programming languages) because I mostly do web development. I used C, Java, Python, and PHP in the past, but now I barely know them. As a programmer, you will probably have one main language that you will use 80% - 90% of your time and use a few other ones from time to time. I think that it's a good idea to try different languages, select the one that you like the most according to what you want to do, and continue to work with this one.

In my experience, I feel like I lost a lot of time learning technologies in college that I'm not using now. If I had focussed 80% - 90% of my attention on just one main technology I would have been able to create very complex projects much quicker.

So, here's how to become rich as a programmer:

  • Determine what types of projects you want to work on
  • Choose a main programming language
  • Build your skills with this language so that you become extremely good at it
  • Be creative and create projects that will have a positive impact on the world
  • Earn the rewards, live your life to its fullest, and die in peace
  • The end

Share this post


Link to post
Share on other sites
On 5/26/2020 at 3:56 PM, Chumbimba said:

@John Doe Thank you for your advice ! I have actually done a c tutorial on YouTube and have gotten pretty good at syntax. Pointers are difficult for me though. 

When i said Linux I meant the command lines. I’m still confused on the whole computer science vs software development. I started taking this pursuit seriously maybe a month ago so I am still learning a ton 

@Chumbimba You're welcome. I know the difficulty with pointers. I can give you a tip to make it easy to work with. Try to visualize a two-dimensional grid of houses, separated by streets. Assume there is at-most one person living in each house, and each house, of course, has an address. Also, the house addresses here, instead of an alphanumeric string, we have a hexadecimal number such as '0x344ACF'. Now think of a function, that when given the name of the person, returns the address of the house they're in. Likewise, think of a function that when provided with the house address, returns the name of the person living in the house. This is the & and * operators respectively.

Learn to work with a lot of examples, that's without doubt the best way to learn pointers.


Release me.

Share this post


Link to post
Share on other sites

@John Doe so basically we are assigning the Hexadecimal to specific variable in C ?  I know C is low-level so it is easy for the computer to read.

I definitely get the analogy helped a lot, but practically what are the functions of pointers in C 

Share this post


Link to post
Share on other sites

Google Search: pointers are variables whose value is the address of another variable. where the memory is located. 

Share this post


Link to post
Share on other sites

I'm a software engineer. Right now I do iOS software development with Swift but I learned C, C++, and Java in college and a few other programming languages while on the Job (C#, Ruby, VB). Once you learn one language it's pretty easy to pick up another. However, like the others said here, I'd recommend learning one very well. C++ is good to get started because you can get low level just as you can with C but you also get object oriented programming.

I will tell you this, you really, really have to want to learn and you have to be willing to work hard. I would not recommend this path for anyone that is not good at or interested in math. To be successful you have to be both creative and love problem solving. If that sounds like you then you are on the right path.

The last thing I'll say is that it is very hard to get a software job unless you have a college degree. It can be done, I know two people that have done it, which is not a lot. But both were very smart, loved to learn, and worked very hard for a couple of years just to get their foot in the door.

Edited by ivory

Share this post


Link to post
Share on other sites

@ivory I am getting my degree in CS. I have developed a love for math since I have started this endeavor. I call it an endeavor because it is probably the hardest thing I have ever done. I am picking up the syntax of languages very quickly though its going to be learning algorithms and data structures and computer architecture where I will struggle 

Share this post


Link to post
Share on other sites

I think what really matters for software engineers to most is to learn about the same from different perspectives. In this context, it's called programming paradigms. What languages you've mentioned in this topic are imperative, object-oriented ones, or somewhere in between. But it can be enlightening to learn about others, such as the declarative programming. This one is especially interesting because it lets you focus on the mathematical / computer science side of a problem, which is actually closer to the way how humans generally think.

For example, besides pointers (aka. indirection) another important skill to master is understanding recursion, but these days, I'd also add purity or dealing with concurrency.

Share this post


Link to post
Share on other sites
13 hours ago, Chumbimba said:

@ivory I am getting my degree in CS. I have developed a love for math since I have started this endeavor. I call it an endeavor because it is probably the hardest thing I have ever done. I am picking up the syntax of languages very quickly though its going to be learning algorithms and data structures and computer architecture where I will struggle 

Oh you are getting your degree? Good stuff man, enjoy. To this day, algorithms and data structures are my weakest link.

Share this post


Link to post
Share on other sites
On 5/27/2020 at 11:30 PM, Chumbimba said:

@John Doe so basically we are assigning the Hexadecimal to specific variable in C ?  I know C is low-level so it is easy for the computer to read.

@Chumbimba Yes, you're exactly right about the second statement, low-level languages imply lesser steps in the compilation process.  As for the first one, memory addressing is represented using hexadecimal values. When a variable gets memory allocated for it, the address assigned to it is represented using hexadecimal values. Therefore, when you create a pointer and assign it to the address of a variable, it takes on a hexadecimal number. 

int var = 1;

int *ptr = &var; // Value of ptr is now 0x455AD7, which is the address of var.

// So ptr = &var = 0x455AD7

// *ptr = var = 1 which is the value of var.

On 5/27/2020 at 11:30 PM, Chumbimba said:

I definitely get the analogy helped a lot, but practically what are the functions of pointers in C 

Pointers are extremely useful with respect to dynamic memory allocation and memory management. As a good programmer, you should learn to minimize the amount of memory your programs are using. To perform this minimization process, pointers are very handy. For example, you might come across a scenario where a temporary variable might be defined, and you might be done using it, but notice that is it still holding up memory unnecessarily within its lifetime, in which case you might use free() to release the memory. Pointers are also useful in mitigating memory leaks. 

Wish you the best with getting your degree! Let me know if you have any other questions.

 


Release me.

Share this post


Link to post
Share on other sites

@John Doe my last question is where does the address come from, is it a random hexadecimal number or is it calculated from binary code ?

Share this post


Link to post
Share on other sites

@Chumbimba No it is not random. The new address value depends on the address stored in the Stack Pointer register. When a new function is called, all its local variables get their memories allocated. The Stack Pointer is incremented based on the amount of memory required by each variable - for example in the case of a signed char, the Stack Pointer is incremented by 1 byte, which determines the new address hex value.


Release me.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now