Solved

hardware versus software

Posted on 2016-09-16
14
63 Views
Last Modified: 2016-10-09
I had this question after viewing basic hardware to learn oop advanced design patterns.


This is a related question where I want to know if software requires hardware knowledge to learn.

Or should I spend more time starting with software

add more zones
0
Comment
Question by:rgb192
  • 4
  • 3
  • 2
  • +4
14 Comments
 
LVL 26

Accepted Solution

by:
dpearson earned 84 total points (awarded by participants)
ID: 41802449
There's no need to understand how hardware works in order to write software.

It's like driving.  You can learn how an internal combustion engine works before you learn to drive, but you can also just learn how the pedals and the steering wheel works and go no deeper than that.

Software is the same way.  You can learn how a computer works or just treat it like a black box.

Doug
0
 
LVL 93

Assisted Solution

by:John Hurst
John Hurst earned 84 total points (awarded by participants)
ID: 41802476
I largely agree with that.

Now an Intel i7 6600 CPU is matched with an Intel 520 Graphics GPU and an Intel 750 1 TB PCIe SSD drive.

You would absolutely have to know the hardware for the above to write software for it.

So as always, it depends.

Driver and firmware software - you need to know the hardware.
Database and Office software - probably not.
0
 
LVL 77

Assisted Solution

by:arnold
arnold earned 83 total points (awarded by participants)
ID: 41802667
Adding to the prior two great comments, is the only time you need to know hardware is when you specify the minimum hardware requirement for your application..
I.e. OS, Processor, Memory, storage, network to make your application work at certain performance level.

Other than that, your programing/development will interface with the OS and the OS will handle the interaction with the HW.
Depending on what your software is supposed to do, you would need to use checks within the install package to validate your minimum requirements.  Or build-in validation within the application to make sure what resources the application needs it has.
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
LVL 28

Assisted Solution

by:serialband
serialband earned 83 total points (awarded by participants)
ID: 41803110
In addition to drivers, as mentioned above, if you're programming for IoT devices, you probably do need to know your hardware to get your code to fit and work efficiently.  As in the old days, you did need to know hardware to be able to optimize code to run faster or more efficiently on the system.

For other types of software, today's compilers can recognize and optimize code better than the vast majority of people on the much more complex hardware.  You really don't need to learn hardware to do that anymore.  Optimizing now code is more about optimizing your algorithms to fit into Memory and storage spaces and finding the code that does the majority of the work and trimming that down to run in fewer cycles.
0
 
LVL 48

Assisted Solution

by:dbrunton
dbrunton earned 83 total points (awarded by participants)
ID: 41803467
I'm probably just adding to what the others have said.

When you start programming you (generally) don't need to know about your hardware.  You'll be programming for a basic standard computer system.

If you go further (a lot further), then you may need to know about the hardware you are going to write for, or the hardware your application expects to be there.  Rough examples:  memory management, how much memory available for use, graphics capability, free hard disk space, networking capability, cpu processors available.
0
 
LVL 52

Assisted Solution

by:Scott Fell, EE MVE
Scott Fell,  EE MVE earned 83 total points (awarded by participants)
ID: 41805611
> the only time you need to know hardware is when you specify the minimum hardware requirement for your application.

or you had minimum hardware

https://github.com/chrislgarry/Apollo-11
1
 
LVL 77

Expert Comment

by:arnold
ID: 41805703
Scott, It varies based on the interpretation of the question. The person seems to be gearing up for software writing so I am not sure other than a slower performance of the OS/compiler/software, how having "minimal" hardware will prevent the learning of software methodologies/consideration.  IMHO, it is quite contrary, a user who learns to code based on tight resources, is "likely to learn more efficient techniques, resource management" then one that starts with "unlimited" resources, memory, CPU, GPU, etc.

I.e. person has a system with top of the Line Processor, 128Gb of ram, 4G GDDR GPU, etc. So they code with ...
versus a person having to develop the same software to operate at a minimum hardware requirement of a dual core Core duo 1.9GHz, 2GB of RAM, Windows 7 and newer........ ...
0
 
LVL 52

Expert Comment

by:Scott Fell, EE MVE
ID: 41805843
My interpretation is  this is a web development question based on topics of php and java.

If you are writing software using those tools, you do need to understand what your app is doing and expected usage or load.  That will dictate the amount of memory, processor and disk space you require.  The other missing piece is hosting service and capabilities.
0
 
LVL 77

Expert Comment

by:arnold
ID: 41805848
Scott, I think we have the same conclusion, but I do not understand your reference in the prior comment "or you had minimum hardware"
0
 
LVL 52

Expert Comment

by:Scott Fell, EE MVE
ID: 41805853
> "or you had minimum hardware"

Tongue and cheek referencing there was very minimal hardware on Apollo 11 guidance computer https://en.wikipedia.org/wiki/Apollo_Guidance_Computer
0
 
LVL 26

Expert Comment

by:dpearson
ID: 41805868
It's probably for the OP to clarify what they mean by "hardware knowledge" but for me - RAM and CPU usage is not "hardware knowledge".  That's still very much at the software level of understanding, treating the hardware as a black box without needing to really understand it.

To go back to my analogy of a car - you can still understand what speed and mileage you get with your car, without understanding how the car actually functions - how gas is turned into forward propulsion.

For me, hardware knowledge means actually understanding how hardware works - which means how a CPU functions, which operations are executed sequentially and which in parallel on a modern processor - what the difference between an L1 cache and an L2 cache is and what the memory model is at the processor level and how it effects multicore processing.  That sort of thing.

To me, that knowledge is potentially beneficial, but entirely optional.

You can be a completely successful software developer without ever delving into that level of understanding.

However, if "hardware knowledge" is taken to mean understanding how much RAM your process is consuming, then sure, that level is definitely something you need to know :)

Doug
0
 
LVL 77

Expert Comment

by:arnold
ID: 41805881
Scott, could not figure out where you were going with the prior Apollo link. Side track .......


Doug, One who needs only to get from point A to point B need only the knowledge to open door, enter car, make car go.
One need not know whether engine is steam, gas, diesel, electrical, manual (ped-propelled) etc. but the distance it could travel until another action needs to be taken.

But I get the point, each approached this question based on their own interpretation of the Asker.
0
 
LVL 27

Expert Comment

by:tliotta
ID: 41805944
It depends...

There wasn't much choice when I started. First training was with sorters, then reproducers, interpreters, etc., including hard-wiring logic boards for them. Next was machine language on an IBM 1401 (w/8K main memory plus 4K expansion box; and yes, those are "K" values). Then on to Autocoder (a kind of assembler), and into IOCS/DIOCS macros because the system had a 2.5MB external disk enclosure. (Watched IBM upgrade the drive to 5MB by essentially removing a stop-screw to allow the disk arm to move across the full surface area.)

From there, training went to COBOL, Fortran, RPG, PL/1, systems analysis, and more... in a two year program a number of decades ago.  And I've gone on to more languages/technologies than I can recall nowadays. A year or so after the training, I went back and took a year of basic electronics.

Possibly all of it could have been done with no hardware familiarity at all. I certainly have known many software developers who really know little beyond basic reading of hardware specs. However it seems to me there's a different "feel" to them.

As training went level to level, building on the last, things became more and more abstract. Yet I could use previous learned pieces to make almost immediate sense of things being presented. E.g., memory addresses were seen clearly as physical locations on a logic board. Incrementing a register, using result as an offset to get to a new address, viewing the new address as an element in an array, immediately grasping pointers and pointer manipulation, all of it just followed naturally from seeing how changing wires on a board affected results.

Is hardware knowledge needed? For the vast majority, no. Can it provide a foundation that can make everything in learning software development easier for years to come? Almost certainly yes.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
3 proven steps to speed up Magento powered sites. The article focus is on optimizing time to first byte (TTFB), full page caching and configuring server for optimal performance.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question