Little experience as programmer: where do I go from here?

  • Thread starter UR_Correct
  • Start date
  • Tags
    Experience
In summary, the speaker is a BS graduate in engineering - electrical who took an introductory C# course as part of their major but only learned basic concepts such as loops and if statements. They later became familiar with MATLAB and took an intro to microprocessors class, which they did not enjoy due to the use of assembly language. However, they loved a microcontroller applications class which used C and involved setting up registers for the controller. They feel like they have a limited understanding of programming and are unsure of where to go from here. They also ask for clarification on the differences between C, C#, and C++. The speaker suggests exploring different areas and perspectives in programming, including understanding how logical devices work at the lowest level, and working with distributed processing
  • #1
UR_Correct
37
0
Hello all! I am about to graduate with a BS in engineering - electrical.

For my major, it was required we take an introductory C# course. All I really got out of that was how to use for and while loops and if statements, and a little logic. There were topics on more involved stuff like classes and methods, but I didn't take much away from that, which I'm kicking myself for now.

Over the years, I got pretty familiar with MATLAB. I would write some programs for that for some classes, like doing discrete Fourier transforms, convolution, or numerical integration and differentiation. What language does MATLAB use? It seems like some derivative of C, but I can't really tell.

We had an intro to microprocessors course also that was a milestone for most kids. A lot would drop from the program because of that class. It was all programming in assembly which is a drag. I didn't do so well in that class. At that point, I wasn't really interested in programming, especially in assembly.

Finally, I just finished a microcontroller applications class, and I thoroughly loved it. Got one of the highest grades, even though most of the students were either computer engineers or kids that have already taken the class before. The class is held to be the hardest class in our major. It was kind of a continuation of the microprocessor class, but no assembly language! It was all in C, so the programming wasn't too bad. Again, a lot of if statements and loops. It was mainly setting up registers for the controller. The hardest part was debugging the hardware that we'd hook up (sensors, relays, switches, LEDs, etc), but that's beside the point. The programming was never too hard.

But, I loved it, and I don't know where to go from here. I don't feel like I have a firm grasp on programming like some of the computer engineers/scientist. I feel I can program fine if it is a simple task, but I tend to get lost when I look at more involved code. I didn't really understand classes or methods when i took the C# course, so maybe that's where I should start first?

Any suggestions?

Thanks!

EDIT: Also, I was wondering what the difference between C, C#, and C++ is? Is that a dumb question?
 
Last edited:
Technology news on Phys.org
  • #2
UR_Correct said:
Hello all! I am about to graduate with a BS in engineering - electrical.

For my major, it was required we take an introductory C# course. All I really got out of that was how to use for and while loops and if statements, and a little logic. There were topics on more involved stuff like classes and methods, but I didn't take much away from that, which I'm kicking myself for now.

Over the years, I got pretty familiar with MATLAB. I would write some programs for that for some classes, like doing discrete Fourier transforms, convolution, or numerical integration and differentiation. What language does MATLAB use? It seems like some derivative of C, but I can't really tell.

We had an intro to microprocessors course also that was a milestone for most kids. A lot would drop from the program because of that class. It was all programming in assembly which is a drag. I didn't do so well in that class. At that point, I wasn't really interested in programming, especially in assembly.

Finally, I just finished a microcontroller applications class, and I thoroughly loved it. Got one of the highest grades, even though most of the students were either computer engineers or kids that have already taken the class before. The class is held to be the hardest class in our major. It was kind of a continuation of the microprocessor class, but no assembly language! It was all in C, so the programming wasn't too bad. Again, a lot of if statements and loops. It was mainly setting up registers for the controller. The hardest part was debugging the hardware that we'd hook up (sensors, relays, switches, LEDs, etc), but that's beside the point. The programming was never too hard.

But, I loved it, and I don't know where to go from here. I don't feel like I have a firm grasp on programming like some of the computer engineers/scientist. I feel I can program fine if it is a simple task, but I tend to get lost when I look at more involved code. I didn't really understand classes or methods when i took the C# course, so maybe that's where I should start first?

Any suggestions?

Thanks!

EDIT: Also, I was wondering what the difference between C, C#, and C++ is? Is that a dumb question?

Hey there.

There are many different areas that you can become proficient into become a better programmer and it usually depends on the perspective you have and what kind of programming. I'll try and give my perspective about some things that you can investigate or at least think about to develop different perspectives and skills in programming.

Also I'm glad you've had exposure to an assembly language: I think its an important thing that people understand at some level how the logical devices actually work at the lowest level, but above that of physics: (ie know how given the instruction set of your hardware, how your program will run). It doesn't matter if you ever do much or any coding in assembler, but at least you know how things "work" at the lowest level a programmer needs to know.

The first thing I'll talk about is flow control.

You've mentioned that you've had experience with C# doing for and while loops so you probably already know about flow control in single threaded environments.

The extension to this is to work with code that distributes its processing in some fashion whether it be to another computer on a network or perhaps to another core on your CPU.

You said you have experience writing stuff in C for microcontrollers. If you had to do programming by say writing code for an interrupt service routine, then you have a pretty good idea what happens when everything is running all over the place and the potential for things to go wrong if you're not careful can be very high.

So I guess in short, learn about paradigms, tools, and standards that are used in distributed computing. Things are definitely moving in this direction with CPU's becoming multi-core devices, where design is moving from making the number of clock cycles bigger to parrallelizing activity and designing hardware to work kinda "by itself" if you know what I mean.

The next thing is state.

When you have a program that is say a couple of thousand lines, its pretty manageable and you probably know after a short while what the state of your variables will look like in your head.

As you move into working on programs with hundreds of thousands and possibly millions of lines of code, tracking state mentally could literally save you days of headaches trying to debug some obscure routine that has a call stack of dozens and dozens and dozens of functions deep.

So basically you need to learn some paradigms about how to handle the various states that can exist as well as what should be exported to other portions of code and what have to be kept private.

This also gets a little more complex when you are dealing with distributed systems. Everything has to be in sync and when you have dozens of threads accessing memory and you don't use the right devices like semaphores, it will be an absolute nightmare for you when something goes wrong.

The next thing is to get access to large repositories of code.

Get access to code repositories that are in your domain (ie science programs, simulation programs, etc) that are large and complex.

Why do I say this? It will take you a very very long time to become an architect of something that is complex and yet robust at the same time if you do it on your own, so the best thing to do is to get your feet wet and dive into something that is established and has a long history of development.

In a good repository you will see a host of things like design and architecture, optimizations, and also standards for code.

For example most production grade systems will be completely data driven. They will have unified architectures that process custom data in a format like XML purely because you can code an XML parser and executor that will never have to be modified, that allows easy extension through DLL's or some other extension mechanism, and as a result is great design since you can basically upgrade your data specs by introducing a new tag, and your whole thing is backwards compatible.

If you're interested in paradigms that focus on things like this, Microsoft has spent many many years researching and implementing various methodologies. Have a look at the Component Object Model, or if you like cross-platform look at CORBA which was developed by the Object Management Group (OMG).

Coming back to large repositories, apart from paradigms like the ones I just discussed, you will learn the principles behind design decisions for complex programs in your domain.

One example apart from the XML example is executable code that is interpreted (ie script code). Many good repositories have a design that effectively incorporates script code that allows the native code (C++ for example) to easily call script code and for the script code to effectively call native code.

To design such a mechanism is however very very complex, but remember the name of game is to be completely data driven.

The last thing is domain specific.

I'd say you have a bit of experience here as you mentioned that you did stuff in MATLAB like Fourier transforms, numerical integration and so forth.

The domain stuff is basically the other stuff that isn't part of general design, analysis, or other generic things that you cover in a computer science degree: basically things like say databases, computer graphics, networking, and so on.

I hope that gives you a few ideas to think about: there are a lot of different perspectives in programming, but hopefully the examples I gave are somewhat tangible and make sense.
 
  • #3
C# along with .net is Microsoft's alternative to Java and Java platform. I haven't used it so not sure how close to C it is.

C is a relatively low level language, and C++ adds a lot of extensions to C. C++'s main advantage is the larger library of functions and templates (similar to a library but implemented as an included source file).

For a typical windows program in C, you code a message handling function with a while() loop that waits for and receives messages, then typically use a switch / case statement to handle each message type, with a "default" case where you call the default handler.

For a typical windows program in C++, Microsoft has already written the message handling code, and includes a windows class with virtual functions to handle every message type. Your code inherits that windows class, and overrides the virtual functions you want your code to handle, while the unoverridden virtual functions go to their respective default handlers defined in the windows class.

Getting back to where do you do next, it depends on your near term and long term goals. If you're writing a non-windows program, you can continue writing ever more complex code in C. Most of the jobs I've had writting embedded code (firmware) for devices use C, some assembly, and some multi-tasking operating system. For windows programming you probably want to switch to C++.
 
  • #4
UR_Correct said:
What language does MATLAB use? It seems like some derivative of C, but I can't really tell.
Matlab is a special purpose programming language.The environment and interpreter are written in other languages (looking around, it seems like C and/or Java).
 
  • #5


First of all, congratulations on your upcoming graduation with a BS in engineering! It's great that you have some experience with programming, even if it's just basic concepts and a little bit of MATLAB.

As for where to go from here, there are a few things you can do to continue building your programming skills. One option is to take some online courses or tutorials in C#, since you mentioned that you didn't fully understand classes and methods when you took the introductory course. This will give you a better understanding of object-oriented programming and how to use classes and methods effectively.

Another option is to practice programming on your own, whether it's through personal projects or by participating in coding challenges and competitions. This will help you become more comfortable with coding and give you an opportunity to explore different programming languages and techniques.

In terms of the difference between C, C#, and C++, it's not a dumb question at all! C is a low-level, procedural programming language, while C# and C++ are both high-level, object-oriented languages. C# is more similar to C++ in terms of syntax, but it also has some features that make it easier to use, such as automatic memory management. It's worth exploring all three of these languages to see which one you prefer and which one is most commonly used in your field of engineering.

Overall, the key to improving your programming skills is practice and persistence. Don't be discouraged if you don't understand everything right away, and don't be afraid to ask for help or seek out additional resources. With dedication and effort, you can become a proficient programmer in no time! Best of luck to you in your future endeavors.
 

Related to Little experience as programmer: where do I go from here?

1. What are the necessary skills to become a programmer?

To become a programmer, you need to have a strong understanding of programming languages such as Java, C++, Python, and JavaScript. You should also have a good grasp of data structures, algorithms, and problem-solving abilities. Additionally, having knowledge of web development, software engineering, and database management can be beneficial.

2. How can I gain more experience as a programmer?

One of the best ways to gain experience as a programmer is to work on personal projects or contribute to open-source projects. This will not only help you practice your skills but also give you the opportunity to collaborate with other programmers. You can also consider attending coding bootcamps or taking online courses to learn new skills and gain practical experience.

3. What type of jobs can I get with little experience as a programmer?

With little experience as a programmer, you can apply for entry-level positions such as a junior software developer, web developer, or quality assurance analyst. These roles will allow you to gain practical experience and further develop your skills. You can also consider freelance work or internships to gain valuable experience.

4. How can I improve my programming skills?

The key to improving your programming skills is to practice consistently. The more you code, the better you will become. You can also read books, attend workshops, and take online courses to learn new languages and techniques. Additionally, it can be helpful to join online communities or attend coding meetups to connect with other programmers and learn from their experiences.

5. What career opportunities are available for programmers?

The demand for skilled programmers is constantly growing, and there are various career opportunities available. Some of the most common career paths for programmers include software development, web development, mobile application development, data science, and quality assurance. You can also consider pursuing a career in fields such as cybersecurity, artificial intelligence, or game development.

Similar threads

  • Programming and Computer Science
Replies
13
Views
970
  • Programming and Computer Science
Replies
8
Views
1K
  • Programming and Computer Science
Replies
16
Views
2K
  • Programming and Computer Science
Replies
6
Views
1K
  • Programming and Computer Science
Replies
6
Views
1K
  • Programming and Computer Science
2
Replies
69
Views
5K
  • Programming and Computer Science
3
Replies
86
Views
11K
  • STEM Academic Advising
2
Replies
40
Views
2K
  • STEM Academic Advising
Replies
3
Views
571
  • Programming and Computer Science
Replies
9
Views
2K
Back
Top