Path to a pro from being an intermediate

I am a mechanical engineer who graduated from India.I am not complaining here. But I studied in one of the technologically underprivileged government colleges. So, I dint hear about an Arduino or see an Arduino until I came to the US like 2 years ago.

I have self taught myself most of the basics of an Arduino. I can build basic circuits and write and understand basic codes. The little knowledge I had on C and Matlab, helped me.

But, I was recently working on an E- Ink display and had to tweak the library that somebody worked on. In the first instance, I could only understand about 30 percent of the code.
Even after working for more than 50 to 100 hours on the thing, I am able to understand only around 70 percent of the code and I was not able to get the thing running as I want.

It has been a little disappointing the past few weeks. I have decided to learn everything the right way, instead of having half knowledge on everything.

My goal is to be able to fully understand and even write my own libraries the way I want.

I know practice is what makes me get there.
I am willing to put in 8 to 10 hours after work everyday. But don't know what to do or where to start.

So, can somebody guide me what path to take to go from being an intermediate to a pro.

Thank you in advance for taking time to help me and reaching through my long story.

Don't kill yourself trying to learn too much in one go. "8 to 10 hours after work everyday" is not a good balance. Give it time and don't forget to have a life.

what's you goal ? career change or just being a better maker ?

invest in learning C++ formally, read about OOP, design patterns, learn about common algorithms.

On the hardware side, invest in the basics of electronics, common protocols (SPI, I2C, ...) etc...

There are books, on line courses, etc to do this.

it takes years (decades / a lifetime) to be a well rounded engineer - and you'll never know everything.

What's the code that's giving you trouble?

One of the things you'll see in libraries is that the author has optimized for size and/or speed, rather than readability. In particular you may find direct access to the CPU's registers going on, with the commensurate bit twiddling operations that are required to work with them.

In that regard, a library is a difficult place to start on expanding your skills, especially, as in this case I expect that knowledge of the display hardware and the protocols it used will be required.

It might be worth taking a look at the core Arduino libraries for a more gently introduction.

Hi @vikasrreddy

there is a good free online C++ course.
I recommend it for studies.

www.learncpp.com

Hey,
Thank you your suggestions Jackson. Honestly, I was propably a little over exaggerating when I said 8 hours after work. But, I might be able to get about 6 to 8 hours a day including my free time at work.

My aim is to become a better maker and build my own projects.

I will certainly try investing the time in the direction you suggested. . Thanks again.

Thank you very much @ruilviana. That was helpful. I will certainly go through the course.

Then build your projects and when you come across something you don't understand research it until you do. I'd say you have become a pro when you find that most of the teaching resources you find don't contain anything much you don't already understand. However, never stop reading new stuff, even if some book or web-site contains 95% stuff you already know the remaining 5% could be gold for you. There is no end to learning, there is more to know than one person could ever learn, so just don't stop.

Hey @wildbill First of all Thank you very much for trying to help me out.

I want to run my 10.3 inch display with IT8951 driver with ESP32 because of its low power consumption.

I found this below GITHUB library and was successfully able to get my display to work and displays a single image of upto 400*400 perfectly everywhere.

But, now when I want to have to load more than one image or a bigger image, I run out of memory(even if I declare PROGMEM). I want make a offline Eink photo frame that loads image arrays from the SD Card. The size of each is array is [123600] and the .ino file is around 800kb.

I am stuck now that I don't how to load large .ino arrays from the SD card. I tried searching everywhere, but I can't understand most of the answers in the forums.

Actually, I am not able to understand some of the answers in the forums with my half knowledge which led this question.

I'd guess that most Arduino users are not "experts" and most don't have a degree in programming or electronics and many are high school age or younger...

But, self-directed study is difficult. ...There is enough information on the Internet to learn brain surgery but in reality you have to go to medical school if you want to be a doctor.

If you want to do something specific with the Arduino you should be able to study-enough and research-enough to do it, or to learn if it's impossible with the Arduino.

With the Arudino you also need to understand electronics.

There is a rule-of-thumb that says it takes 10,000 hours to become an "expert" in any subject. So that's about 5 years working full-time.

But even expert programmers with more than 5 years of experience don't know everything... They are usually experts in a specialty area. An experienced programmer who's never seen an Arduino could pick it up pretty quickly but they would still have to study & research.

I have an electronics degree and I've been programming for a long-long time, mostly as a hobby, and I'm NOT an expert programmer. The "basic" C++ language for the Arduino was pretty easy for me to pick-up, but I've never even tried looking at the code for any additional libraries, nor have I studied any assembly programming or the internal structure/structure of the Atmega chip. (I have done some assembly/machine code programming for a couple other chips.)

I'm pretty sure some libraries use assembly language and manipulate internal chip registers,

Hey, @PerryBebbington . Thank you for your valuable advice. I couldn't agree more.

Hey @DVDdoug .
Thank you for your valuable feedback. I do understand your point.