Mastering hardware & programming at the same time -A dream will never come true? - Page 1
Forum section: electronics / general

author: bjdhjy888
author_rank: Regular Contributor
timestamp: September 03, 2019, 12:41:33 am
content: Speaking of programming, I learned VB and C++ at school. At my workplace, I learned C# and Unity.My interests are microcontrollers and Inertial Measurement Unit, so I learned Assembly, C, Keil and Visual Studio.As you can see, I've learned tons of languages and I do hands-on experiments with electronic parts, using tools like multimeter, oscilloscope, etc.The thing is, I feel I can masternoneof them. I could justusethem, but I feel I can never master one specific area like C#. Like being a guru on that topic.I can't master programming and hardware at the same time either. The scope of the skills and knowledge are just reallyhuge!Do you feel the same? How would you solve this issue?If we cannot master software and hardwareat the same time, would you not feel kindda nervous? It's like you will never be a PhD, or you could be a good doctor giving patients operations, but have very limited skills on biochemistry and molecular biology.

author: NiHaoMike
author_rank: Super Contributor
timestamp: September 03, 2019, 01:33:19 am
content: I find programming difficult at times, but I'm really good with hardware. My hobby started in hardware so I'm not surprised. I would go as far as to say that I learn programming simply because it offers too many benefits to ignore. I consider myself more on the hardware side, moreover, I can't think of anyone current who is more hardware biased than I am.Tiffany Yep is at the opposite end of the scale - really good at software but only basic hardware skills. She started programming in high school and found it a lot of fun. As far as hardware goes, she rarely has to do anything with it beyond plugging ready made modules together. (She does program a lot of Verilog which blurs the line - it's technically making hardware but it's coded like software is.)Micah Elizabeth Scott is very well balanced - really advanced with software and very skilled with hardware. She has done a lot of projects that involve both hardware and software. That brings up a point - knowing how to get the two working together is important for making a working project.

author: onesixright
author_rank: Frequent Contributor
timestamp: September 03, 2019, 09:57:01 am
content: Why you feel you need to be a guru?I think it depends on the application.If I would need to control (on my own) some sort of auto-pilot (aviation), I would get nervous. But then, these projects will never be done alone, but with team of experts (each in their own field).If you develop a commercial product, I think above largely applies as-well (depends more on the budget I guess). Anyway, design needs to be checked, tested and certified and small change you need to do all of it alone. But I'm sure some people here can tell you all about that.For home-brew stuff, well I would take a risk, but noting that I would be very cautious about any applications that use high voltage (110v/220v) stuff.I'm also a developer myself with love for electronics. SoonI realised I need to get to the analog stuff first, to at least grasp what certain circuits are doing. So I started with AvE + the Workbook and working my way (very slowly) through the examples to get a basic understanding why components are there how they operate, etc.In the end, if you want to master this (and I think the field of electronics is so huge that nobody will master all of it) you need to focus on a area and spend a lot of time, until you do feel comfortable. Cool thing about electronics, analog that is, is that the basics don't truly change. Unlike software where everyday there is something new

author: Karel
author_rank: Super Contributor
timestamp: September 03, 2019, 10:44:18 am
content: For myself, I solved this problem by limiting the scope of programming languages to C (and C++ when a GUI is needed using Qt).I also limited the operating systems I use to just one: Linux (for both desktop and embedded).This way I'm able to keep my knowledge up to date for the things that are within my scope (electronics design and firmware development).I simply refuse to accept any work that is outside of that scope. So far, I have never been fired because of that.

author: Mr. Scram
author_rank: Super Contributor
timestamp: September 03, 2019, 10:49:27 am
content: The problem with mastering something is that it becomes mundane and boring to you. It's useful to master a few things but probably more fun to linger in the "look at all these buttons phase" new things have.

author: Rerouter
author_rank: Super Contributor
timestamp: September 03, 2019, 10:54:13 am
content: They are tools, you don't need to be a master at using a saw to make good furniture, just good enough to get the job done,So you learn the parts of these tools that you use commonly, possibly brush up on nearby stuff occasionally, but unless there was some pressing need, its rare that a programmer would have a full and absolute understanding of every command and modifier in a given languageSame for hardware, they are divided into peripherals, why learn more than the general concepts of a peripheral that does not apply to what your trying to do, for actual circuit board hardware, you need to know a lot of it conceptually and how to at least simulate some of it, but you never need to master every part of electronics, I've been designing things for years, And I can't honestly say I have mastered any part of it.In most cases embedded design / programming is a game of divide and conquer, work out your limits, and cut things down into logical blocks to later assemble into the whole thing, If you don't have a code base for the hardware your using, then write it to the level you need to use it.

author: T3sl4co1l
author_rank: Super Contributor
timestamp: September 03, 2019, 11:41:00 am
content: The only real thing you need for mastery islearning to learn.Once you have a foundational understanding of how to grasp concepts, you need only reach out and find them -- the particulars of a situation are just another thing to learn.Even the masters are constantly looking up reference material and examples. There's just too much out there to memorize all at once. If you work an extended project, spending months or years in a given domain or medium or language, you will certainly pick up the most common structures and keywords and syntax, and your writing/design speed will improve. You will get more familiar with which interfaces or protocols or patterns are most commonly used, and see more connections between them -- the shortcuts, optimizations, and higher level patterns that evidence true mastery of a subject.Just starting out, all you can reason about is, you need to go from here to there, so you need some sort of function to perform that, and some kind of input and output interface. You'll spend your time learning the basics: the interface structure, the function syntax. You won't know enough yet to spot the higher level patterns, or infer what's going on at a lower level. That comes with practice and learning. Just remain patient; this can't happen overnight!This does assume the availability of documentation; failing that (or given documentation that bears little connection to the system as given!), you're left with good old fashioned hacking. Try something, get an error, try and figure out what the error means, try to work around it; eventually, you'll have explored enough of the space of keywords and syntax and so on, that you can derive some of the underlying functionality or structure, and start to actually do work with it.So the ability to fail often, and not get discouraged, is also a valuable trait.The ability to reason, is fundamental. It is possible to learn a subject through wrote learning and repetition, but it isn't very efficient. You can spend a lifetime walking through a forest and learn every species of tree and shrub, but still not understand the forest as such.Unfortunately, I don't know that reasoning itself can be learned, at least at a late age. People very quickly get set in their biases and thought patterns, and may never connect random-yet-somehow-related facts together, synthesizing new connections and inferences.Tim

author: nctnico
author_rank: Super Contributor
timestamp: September 03, 2019, 01:37:50 pm
content: Quote from: bjdhjy888 on September 03, 2019, 12:41:33 amIt is not impossible but it takes a huge amount of time and effort.

author: langwadt
author_rank: Super Contributor
timestamp: September 03, 2019, 03:00:37 pm
content: Voltaire: “The best is the enemy of the good.”Confucius: "Better a diamond with a flaw than a pebble without."Shakespeare: “Striving to better, oft we mar what's well.”

author: coppercone2
author_rank: Super Contributor
timestamp: September 04, 2019, 12:20:02 am
content: what is mastery of programming?it comes down to meeting a spec you have in mind. you can't tell how something will break. they still use pneumatic logic for some stuff.its one black box in series of boxes that makes a process work

author: MosherIV
author_rank: Super Contributor
timestamp: September 04, 2019, 07:11:22 am
content: QuoteYes, you have to fulfill the spec.However, good software is DESIGNED. There is software architecture.You divide up the parts of the system into logically cohesive modules.Software becomes more predictable and you can then easily find and fix bugs.Any fool can program! It takes skill to design a good system (both hardware and software)(By the way, this is my day job)

author: SiliconWizard
author_rank: Super Contributor
timestamp: September 04, 2019, 03:16:45 pm
content: Quote from: coppercone2 on September 04, 2019, 12:20:02 amThere have been hundreds, probably thousands of books written on the topic. Thousands of PhD thesis. Probably almost as many conferences.Does that mean that we have ended up knowing what it is? Not quite.But that gives a lot to read. So better start now.Of course if you want just a few references of things to look at: read some of Wirth, Knuth and Hoare books/papers. I'm not guaranteeing you'll be a master after that, but you will certainly have a better idea of what is good programming and what is not.

author: ddavidebor
author_rank: Super Contributor
timestamp: September 04, 2019, 03:25:24 pm
content: Quote from: bjdhjy888 on September 03, 2019, 12:41:33 amThere are family practitioners and there are hyper-specialized surgeons. Both can be as profitable depending on notoriety and target market. Both are respectable positions, one is cooler than the other. But if you want to be cool, italian shoes, english suit, 2 hours/day at the gym and a hair transplant are a quicker path to it.

author: tggzzz
author_rank: Super Contributor
timestamp: September 04, 2019, 03:33:11 pm
content: Quote from: bjdhjy888 on September 03, 2019, 12:41:33 amWelcome to engineering and life in general. Both require choices about what you donotunderstand and arenotgoing to do. That's one of the key differences between life as a kid and life as a adult.You need to decide:what interests you, and what doesn'twhat problems you want to attackfor such problems, what do you already know and what do you need to knowhow you are going to learn what you need to knowSuch learning will never end, fortunately.

author: Buriedcode
author_rank: Super Contributor
timestamp: September 04, 2019, 03:51:23 pm
content: Why do you wish to "master" something? or become a "guru" at it? Also, how do you measure such skill? If this could magically happen over night, what would change? And how would it benefit you? Would your personal projects get done quicker? or "better"?My point is, there does seem to be this kind of aspiration to become good at something for the sake of being good at it. It's like knowing everything about guitar, studying all music theory, the history, all the styles - but never bothering to learn one song.I don't believe software and hardware are somehow mutually exclusive, unless you spend your all your time studying one specific area, but who does that?? Why do you feel the need to pick and choose what areas of electronic engineering you should research whilst ignoring the rest?As for a "solution" : Pick projects that will have different areas of engineering, and learn as you go, when you need to. If you aren't too familiar with say, analogue filters, then eventually one of your projects will call for a low/high/band pass filter, and you can research it then. It helps if said projects have areas that are out of your comfort zone, without being overly ambitious (ie: I don't know much about task management, lets write a new OS!"). That way, you get something from every project, and the more you do, the more you learn: you'd be surprised at all the things you pick up on along the way.Also, don't be afraid to google. I don't know any software devs or hardware devs you don't constantly search for things, it is more useful to knowhowto find something out that to memorize it.