How much memorization is needed to learn embedded systems?

In summary: Many people who learn to program with scripting languages lack a specific set of knowledge tools that learning an "actual" (please don't kill me, scripting gurus) programming language will provide. The result is often an excellent scripting person who has difficulty troubleshooting issues with scripts, because they don't recognize what actions "under the hood" are occurring when the script runs, and they don't necessarily recognize other ways to handle the same task that aren't the "normal" way of handling that task in that scripting language.This is a generalization that is not always accurate. Some programmers are excellent at understanding the syntax of a language, while others are better at understanding the concepts behind the language.
  • #1
Avatrin
245
6
Hi

I have a bachelor in mathematics with a minor in physics, and my plan for the future is to move on to computational science and robotics. However, before I can do that, I need to work a few years due to bad personal finance.

In my city, the easiest route is programming. I already knew Python and I moved on to web development because I thought it would be relatively easy. I learned Javascript, jQuery, CSS and HTML. However, at this point, to make myself marketable, it seems like I am just memorizing tons of frameworks and their syntax (React, Node, Django etc.). It's a bit too much.

I was told by a potential employer to learn C regardless of what I decide to do (because it will help me understand all the rest). I know a lot of embedded systems are written in C. How much memorization is needed to learn embedded systems? I don't really care how difficult the algorithms are; I just don't want to memorize tons of frameworks and packages. Also, embedded systems is relevant for what I want to do in the future.
 
Computer science news on Phys.org
  • #2
For embedded systems, I would think you should study algorithms and data structures in C as everything done in C will use those ideas somewhere in the code (more likely everywhere in the code).

Start writing tool applications ala the theme of the Kernighan & Ritchie C Programming book and do it on Linux getting familiar with all the features of Linux. Many embedded systems today use Linux or Windows CE as a base although there are also many more compact single program custom systems ala Arduino applications that do one task fast and really well.

Read this wikipedia article to get an idea of the kinds systems out there:

https://en.wikipedia.org/wiki/Embedded_system

Arduino might be a good first step to start playing in this environment as it would introduce you to C and how you would debug a problem in an embedded system.
 
Last edited:
  • Like
Likes Avatrin
  • #3
I wrote this post three times before giving up and writing it the way I want to.

Many people who learn to program with scripting languages lack a specific set of knowledge tools that learning an "actual" (please don't kill me, scripting gurus) programming language will provide. The result is often an excellent scripting person who has difficulty troubleshooting issues with scripts, because they don't recognize what actions "under the hood" are occurring when the script runs, and they don't necessarily recognize other ways to handle the same task that aren't the "normal" way of handling that task in that scripting language.

Please don't take this as an affront to your clearly impressive skill set - I wish I had the wherewithal to have a bachelors in Mathematics and a minor in Physics. But if someone suggested you learn C, I suspect that was after they asked you a set of follow-up questions about a scripting issue that you couldn't provide any possible routes to resolve.
 
  • #4
What is your experience in programming?

rkolter said:
Many people who learn to program with scripting languages lack a specific set of knowledge tools that learning an "actual" (please don't kill me, scripting gurus) programming language will provide. The result is often an excellent scripting person who has difficulty troubleshooting issues with scripts, because they don't recognize what actions "under the hood" are occurring when the script runs, and they don't necessarily recognize other ways to handle the same task that aren't the "normal" way of handling that task in that scripting language.

Your view of scripting folks is due to either lack of experience with scripting or a general naivety on your part. Programmers aren't either or here. You use scripting to glue things together and to get things done quickly so you can get on with bigger issues. Often scripts are essential in setting up the programming environment for your application (esp java based applications) and for making it easier to invoke. Other times scripts are used to automate a seldom invoked process of reorganizing your environment, deleting files... and many other mundane tasks.

If you're thinking of system admins or database admins, this may be true as many of their tasks require knowledge of arcane system commands and their work is very much one off jobs or very mundane periodic system cleanup, archival work...

In any event, I can see why you were hesitant to post but perhaps your inner voice was telling you not to.
 
  • #5
I try not to memorize a language. I have coded in C then C++ and focused on creative ways to solve problems . After a while Software developed of applications and embedded systems became an art. I used my imagination to guide me with the development of test plans and the design of the system. I have always felt computer languages is learn the concepts kind of thing
 
  • #6
jedishrfu said:
In any event, I can see why you were hesitant to post but perhaps your inner voice was telling you not to.

Actually, my hesitation was because the OP made it a point to list the languages he has learned and his entry into website development. But website development skills don't directly correlate to embedded system programming, and not one of the languages he mentioned is a high level programming language. His actual question was "How much memorization is needed to learn embedded systems". This implies a lack of understanding about the scope or skills required to program embedded systems. I suspect strongly that the potential employer who told him to learn C saw he did not have the skill set he required (right now) and was trying to be helpful.

My best advice to the OP - learn C. It will help you in any programming you do in the future and will help you directly with embedded system programming regardless of what hardware you are programming for, and for your goal of getting into computational science and robotics in the future.
 
  • Like
Likes jedishrfu
  • #7
rkolter said:
Actually, my hesitation was because the OP made it a point to list the languages he has learned and his entry into website development. But website development skills don't directly correlate to embedded system programming, and not one of the languages he mentioned is a high level programming language. His actual question was "How much memorization is needed to learn embedded systems". This implies a lack of understanding about the scope or skills required to program embedded systems. I suspect strongly that the potential employer who told him to learn C saw he did not have the skill set he required (right now) and was trying to be helpful.

My best advice to the OP - learn C. It will help you in any programming you do in the future and will help you directly with embedded system programming regardless of what hardware you are programming for, and for your goal of getting into computational science and robotics in the future.

The potential employer does not work with embedded systems. He does not work with any hardware at all. He told me I should learn C because that will give me a deeper understanding of the languages I listed above since they are all inspired by C to some extent.

So, if I am going to learn C anyhow, I want to practice with embedded systems and be a bit better prepared for the subject (which I know is an option in the masters program). However, I don't want to do that if I have to memorize a lot of syntax. I don't mind memorizing the syntax needed to learn C, but I don't want to use more time memorizing frameworks like I did for web development (React, JQuery, Node etc).

I like mathematics and physics because I don't have to memorize a lot; It's mostly deduction. Web development, on the other hand, has almost entirely been about memorizing the syntax of several frameworks. I asked if learning embedded systems is going to be the same. Am I embarking on a path which will involve learning 5+ frameworks and languages just to make one product? (like how, to make a website, I probably have to know HTML, CSS, Javascript alongside frameworks like Bootstrap, JQuery, Node and others)
 
  • #8
Avatrin said:
The potential employer does not work with embedded systems. He does not work with any hardware at all. He told me I should learn C because that will give me a deeper understanding of the languages I listed above since they are all inspired by C to some extent.

So, if I am going to learn C anyhow, I want to practice with embedded systems and be a bit better prepared for the subject (which I know is an option in the masters program). However, I don't want to do that if I have to memorize a lot of syntax. I don't mind memorizing the syntax needed to learn C, but I don't want to use more time memorizing frameworks like I did for web development (React, JQuery, Node etc).

I like mathematics and physics because I don't have to memorize a lot; It's mostly deduction. Web development, on the other hand, has almost entirely been about memorizing the syntax of several frameworks. I asked if learning embedded systems is going to be the same. Am I embarking on a path which will involve learning 5+ frameworks and languages just to make one product? (like how, to make a website, I probably have to know HTML, CSS, Javascript alongside frameworks like Bootstrap, JQuery, Node and others)
You don't have to know everything, in a company there are different programmers for different tasks. I'd say focus on what you like the most, and learn the rest if you need.
To learn C, which it's going to be easier than what you've did so far, you should maybe read a book or other resource initially, and when you're more comfortable, do a project on something that interests you and learn as you go. At least, that's how it works better for me - if I don't have an exam to study for, I'm not going to do hard studying on things that don't interest me
 
  • Like
Likes stoomart
  • #9
Why can't I just get an answer to the question I asked? Or, if that is not possible, no answer? Why are people making assumptions about my life? I did not ask for life advice, and none of you know me.
 
  • #10
Nobody assumed anything about your life buddy. You should try those things for yourself, it depends on what you want to do.
 
  • #11
Tosh5457 said:
Nobody assumed anything about your life buddy. You should try those things for yourself, it depends on what you want to do.
Well, you made the assumption that I am trying to learn everything a company will need. Moreover, considering you answered a question I never asked, I guess you must've made a few implicit assumptions.

rkolter made a few assumptions regarding the job I am applying for and more. Again, I got a whole bunch of answers I never asked for.

The first reply is the only answer I got although it was not completely what I was looking for. Then again, if nobody here works with embedded systems, this may be the wrong forum to ask this question.

So, essentially, I'll entirely rephrase this question later today to try to get the answer I was actually looking for.
 
  • #12
If you want to start to play with some embedded system. A good start would be Arduino uno board. open source and open hardware https://www.arduino.cc/
a good site for parts and learning is adafruit.com
 
  • Like
Likes jedishrfu
  • #13
Not to be critical here, but when it comes to programming, learning concepts of language in conjunction with the syntax is best. Just because you have the syntax memorized that does not automatically mean you can write code skillfully. The syntax knowledge comes with the practice. For example if you memorize what casting a variable is, that does not necessarily help you visualize and understand what effect that has on a casted variable. Same thing comes up with pointer variables and understanding single and double indirection. Pointers can be hard for some people to understand. Come up with a software project and define the requirements and a unit test plan to test the requirements. Being a former C/C++ programmer for desktop applications and development of hardware using Assembly Langauge on the 8051, I have found that more is learned by failure and success and having an adequate unit test plan that includes regression testing. Further, practicing writing good code and treating your coding as a craft will allow your projects to reliable. It also helps to learn from bad code others have developed in this craft. Hope this helps
 
  • #14
Inventive said:
Not to be critical here, but when it comes to programming, learning concepts of language in conjunction with the syntax is best. Just because you have the syntax memorized that does not automatically mean you can write code skillfully. The syntax knowledge comes with the practice. For example if you memorize what casting a variable is, that does not necessarily help you visualize and understand what effect that has on a casted variable. Same thing comes up with pointer variables and understanding single and double indirection. Pointers can be hard for some people to understand. Come up with a software project and define the requirements and a unit test plan to test the requirements. Being a former C/C++ programmer for desktop applications and development of hardware using Assembly Langauge on the 8051, I have found that more is learned by failure and success and having an adequate unit test plan that includes regression testing. Further, practicing writing good code and treating your coding as a craft will allow your projects to reliable. It also helps to learn from bad code others have developed in this craft. Hope this helps
Again, I get an answer for a question I did not ask.The idea that I am trying to memorize programming languages without understanding them has already been implied above.

Actually, I wish you'd be critical. Constructive criticism would've been a much better answer. However, you are not answering the question I asked.

A certain level of memorization is needed in every field. My issue is that programming sometimes feels too much. So, let's try rephrasing my original post:

I have been playing around with web development, and that was full of frameworks that I needed to memorize. Learning Javascript, HTML and CSS only took a few days. Of course, proficiency comes much later, and that is assuming I continue down that road for a few years. That is a path I would've gladly taken if it hadn't been for every framework I have to know to be employable; At a bare minimum, I have to know jQuery, Node and Angular/React.

However, my background is in mathematics and physics. Working with hardware seems like something that would be more enjoyable to me. My question was how much is needed to work in this field. I already know you have to know some programming language like C and some hardware description language like VHDL. What else?

I asked how much learning programming for embedded systems would correlate with my experience in trying to learn web development. In terms of sheer volume, how much will I have to learn?
 
  • #15
Languages like VHDL are used to design hardware chips.

Embedded programming covers a wide range of programming. Most embedded systems are multi-threaded / multi-processor, with some kernels based on a variation of Linux, while others use a smaller kernel, often called RTOS (real time operating system). For the Linux systems, you could be writing device drivers for the components in the hardware, or something equivalent to an application that runs on the embedded system. Consider the case of a hard drive. There's an algorithm used for seeking and following a track (servo). There is code to calibrate and setup the hardware used to read and write data (channel). There's code to communicate with the host interface (such as SATA). There's the code that does all the buffering, reading, and writing of data, although this is usually automated in the hardware once it's setup (for performance). There's error correction code, but that is sometimes supplied by outside sources that make specific components or VHDL fragments to handle the error correction (since this is a very specialized field). In the case of smart phones, most of the programming is related to phone applications, and it's probably a small percentage of programmers that work on the low level stuff like the phones kernel, or the phones equivalent of device drivers. Almost all of this, except for the phone apps, is usually written in C.
 
Last edited:
  • #16
When I was in college, I used assembly language to write copy protection software. That software controlled a 4 phase stepper motor in a hard drive. I would position the read/write head to read and write encrypted on the disk sometimes using a 1/4, 1/2, or 3/4 track recording scheme. Each track was offset by 1 track. I.e. track 1/4, 1-1/4, 2-1/4, etc due to risk of overwriting data just written. Data validation was done through a CRC checksum for each track read/write.
 
  • #17
Avatrin said:
I asked how much learning programming for embedded systems would correlate with my experience in trying to learn web development. In terms of sheer volume, how much will I have to learn?
You have not mentioned electronics specifically. Even if you will not be working directly (hands on) with the actual hardware itself, it would still be very beneficial for you to have a good understanding of active and passive electronic components and how they work. If you do not have this knowledge or experience then I would say that the learning curve would be a little greater than what you are familiar with in web development. This is coming from someone who has done a little of both.

If you do have the electronics background then it's mostly a matter of learning the chip architecture, instruction set, and programming language. As far as the "sheer volume" question goes, well that's difficult to answer. As someone has already mentioned, this is a very broad field. Just as in web development, to be successful at it does not require you to know it all. And how much you need to know is variable.

I'm not familiar with having to memorize things. So that you know where I'm coming from, most of my past work in web development has been on a freelance basis. I learn what I need to learn to get the job done. If I can't remember something then I just look it up. Most of my work with microcontrollers has been as a hobby. But my acquired skills in this area has at times bled over into my work environment. Most of my past work experience has been with PLCs (programmable logic controllers) and motion controller programming used in industrial automation.
 

1. What is an embedded system?

An embedded system is a computer system that is designed to perform a specific function within a larger system. It is typically a combination of hardware and software that is built into a device or machine and is responsible for controlling its operation.

2. What are some common applications of embedded systems?

Embedded systems are used in a wide range of applications, including consumer electronics such as smartphones and smart home devices, industrial machinery, medical equipment, and transportation systems such as cars and airplanes.

3. What skills are required for working with embedded systems?

To work with embedded systems, one needs a strong understanding of computer hardware and software, as well as knowledge of programming languages such as C and assembly. Familiarity with electronics and circuit design is also beneficial.

4. What are some common challenges when working with embedded systems?

Some common challenges when working with embedded systems include limited resources such as memory and processing power, real-time constraints, and the need for low power consumption. Debugging can also be more difficult in embedded systems compared to traditional software development.

5. How can one improve their skills in working with embedded systems?

One can improve their skills in working with embedded systems by staying updated on the latest technologies and developments in the field, practicing hands-on projects, and networking with other professionals in the industry. Taking courses or attending workshops can also be helpful in gaining new skills and knowledge.

Similar threads

Replies
10
Views
2K
  • Programming and Computer Science
4
Replies
107
Views
5K
  • Programming and Computer Science
Replies
1
Views
705
  • Computing and Technology
Replies
10
Views
2K
  • Programming and Computer Science
Replies
11
Views
1K
  • STEM Academic Advising
Replies
12
Views
1K
Replies
4
Views
4K
  • Programming and Computer Science
Replies
1
Views
2K
Replies
9
Views
2K
  • Programming and Computer Science
Replies
8
Views
832
Back
Top