A few years ago when I was working for Cambridge University, I attended a very interesting seminar on the architecture of microprocessors. At that time, the new Pentium 4 was just released and its innovative architecture was revolutionising not only the microchips architecture, but also the motherboard used in our personal computers and laptops. The speaker was so passionate about the design of CPUs, it made the talk so unforgettable, that I can now write about it 14 years later. Having a strong software engineering background, this seminar was enlightening on the developmental progress of these hardware platforms and how they contribute to improve the performance of our computers. Nowadays, it is possible to print your own circuit board in your bedroom.
The speaker was labelled as a “hardware man”; this labeling came from the “software people”. This differentiation between these two specific specialization is still an important factor in maintaining and designing computer systems. Computer scientists specializing in hardware tends to have more electronic knowledge; those involved in the design of circuit board and micro-processors should be aware of the material properties. These types of concerns would probably be uninteresting for their software peers. Those are more likely to be skilled in modelling and implementing information flow and processes from the real world into computer systems. Some others would bring the hardware and the software together to produce and maintain operating systems. All these computer scientists should have some understanding from each other specialization and probably at least have a good background in mathematics. In this article we are attempting to answer the following questions and we are hoping to open an interesting debate.
- Would these specialization in computer science work completely independently?
- How can computer scientists automatically invent new circuit boards and algorithms, that are human-competitive?
Collaboration can help to meet the demand
Many inventions are predicted to be useful and revolutionize the way we are living. Without its useful application in keeping our shoes firmly on our feet or keeping our belonging safe in our bags, the Velcro would have disappeared to oblivion. It is imaginable, without its useful capability of producing mathematical tables, the Difference machine would nowadays not be displayed in the computer science department of the University of York or in the Science Museum. It is similar for the Enigma machine. Its hardware was innovating at the time, but without its very clear purpose the invention would be useless. If any readers are interesting to know more about that key element that contributed to allies winning the second world war, then read about it on (http://www.bbc.co.uk/history/topics/enigma)
The readers will agree that as technology progresses and develops, the older ones becomes obsolete. The basis of our global economy drives us to consume and then through away. However, if the demand is low, this process exponentially increases. A clear example can be witnessed in the history of Apple Computers inc. products (see History of Apple Products). The company has undeniably contributed to the development of computing; many of its products innovatively pushes forward the boundaries of technologies. Some of these products have not received with the enthusiasm the company expected though. Remember the PDA, it has set the templates for such products, but the device was too heavy. The IPad, the ITunes, the IPod are successful examples how the collaboration between hardware and software works well together and drive for more demand. History will tell us about the life span of the Apple Watch. The innovation of the product is excellent, but will the demand exists or develop over time. The current market appears to be expending, but is the watch in its current format needs more refinements?
Without good quality hardware, software cannot solve efficiently its given purpose. Without good software, hardware becomes useless and without good functionality. So, any specialisations in computer science cannot work completely independently. It is fair to suggest the collaboration between many specialisms can drive and meet the demand of a product. Collaboration and demand may lessen the full independence, but without this symbiosis of skills, innovative technologies that can take on our imagination and are less likely to be developed. The more recent advance in hardware is the concept of open source hardware. This idea that originated from software is interesting a lot of people and making some others nervous. This is another innovative way to make computer science more integrated (see http://uk.businessinsider.com/facebook-open-compute-project-history-2015-6).
Innovation, how do we innovate?
Facebook provides a fine illustration of how people can innovate. In 2004, some students identified a major gap on the world wide web; nobody was using this ICT platform to engage online a group of friends; conversation using newsfeed, request and accept friendship had yet to be created. From a few discussions with some peers, Marc Zuckerberg developed the first version of what would be become Facebook. The use of the website was instantaneously adopted. More information can be found in the following websites [1, 2, 3, 4]
In this case, the world wide web already existed. Web browsers, html, http, https, web servers, TCP/IP, and the Internet were used to share information and complete commercial exchanged. The technology had yet to support the metaphor of a group of friends online. The younger reader may be excused to think it was some “prehistoric” times. The reader could also suggest that emails could achieve this purpose, but it required so much effort. Nowadays, an exchange of emails between two people are formatted like a conversation; it is much easier to read and follow all the information.
Marc Zuckerberg was quite confident in this development and was driven by his purpose to date a girl. Later on a more caring innovative process applied social media technologies to create MumsNet. This social network supports mothers through their early stage of motherhood and help them feeling less isolated than they may feel. This is a more caring approach to innovation as it was developed by women for women.
MumsNet, Facebook, the Enigma machine, the Difference machine and the Velcro have all be created to solve a specific need, then some skilled technologists applied existing invention to produce a suitable solution. The journey towards success has probably required a lot of thinking, research, discussions as well as thorough testing to discover a novel solution. At the end, more effective solutions using known technologies and applying science have been produced, which can only be a good thing.
Common factors shared by designing algorithms and designing circuits
If a circuit designer would like to design a combinatorial circuit, this person would needs first to define the problem to solve before assembling together the gates and others electronic components. This process is not dissimilar to a programmer coding a program. Unlike a circuit designer, a programmer has a wider language to design their programs to solve a specific problems. Both of these activities require time and patience. The elements (i.e. gates or primitives) are ordered and assembled. The combinations of operators resulting from this first process then solve the chosen problem. The solutions obtained should provide a good measure of the efficiency of the algorithm or the combinatorial circuit. The processes of designing and testing are repeated until solver has been written.
Both computer scientists will innovate by producing novel ways to solve their problems.
- For the circuit designers, the size of the circuits can be reduced. This will not only reduce the amount of material used, but also help to reduce the size its physical implementation. As devices are getting smaller and smaller, the size of the circuit becomes a requirement.
- For the programmer, the choice of primitives and their orders should optimise the performance of a programme. A Java programmer applies an object-oriented approach to effectively implement her/his algorithms. A C programmer is likely to use longer methods, so that the performance of its program is optimised. A Python programmer is likely to integrate different libraries together.
Innovation may be less obvious, but still important as circuits and algorithms are being improved. The problem solving skills and the intellectual activities required to succeed both need a strong logical and patience.
Can a machine innovate and achieve the same results?
The reader could interpret this question in many ways. Some thoughts brought to the reader’s mind may be negative and some others positive. It is important to keep an open-mind as computers may be able to assist in the design of circuits and algorithms.
The human brain can be easily shaped by its past experience and respond to its environment. “Sapiens the brief history of human kind” explains very well how homo Sapiens has adapted and shaped the planet to their needs. Their mind has developed a mechanism to create innovative solutions to specific problems through a trial-and-error process. If you think, as toddlers we have tried to get a certain balance on our own feet, before we could make our own first step. In this process, we have probably felt on our backside several times before succeeding.
Computer scientists also apply this trial and error process, when they combine and order gates or primitives. Then they test their design to solve their chosen problems. The solutions obtained from their humanly-written solvers assesses the quality of their intellectual work. If their design of circuits or algorithms solves well the problems in a novel way, then they will have innovated. They will need to repeat this process several times. Through time they develop a certain knowledge of the domain and can improve their solvers through thorough testing.
This type of discovery process may take a long time. Would it be nice if an automated design could identify successful combinations of primitives or gates as well as their optimum orders. It would be a great help to computer scientists and could improve the development of new programs in a much faster way. It could cut down the development time of circuits too in the long term.
Innovation by evolution
In this new light, the combination of operations (i.e. gates or primitives) becomes a combinatorial problem. Some of its solutions design should compute suitable solutions, some others not. To be effective, this automated process should be able to disregard any inefficient design solutions, but improves on the ones who can demonstrate some promising results. One possible method is to let an evolutionary algorithm to discover the best design solutions. Then these design solutions obtained from this process can be analysed by the programmers.
At that stage, the reader may wonder what is an evolutionary algorithm. This type of algorithms were discussed in our previous blog. We discussed how Darwinian or Lamarkian evolution is simulated. In each generation, some parents reproduce and create some offsprings; the genetic code of both parents is “mixed” and recombined randomly to create new offsprings. Also some genes are mutated randomly, so that the gene pools is renewed. The offsprings, the parents and others individuals of a population can survive to the next generations under certain rules. The application of probability during this discovery process contributes in finding individuals with unusual genetic makes up and hence could find design solutions that the humans have yet discovered and then innovate.
In this type of evolution, the order of the instructions makes the genetic code. Forming each combination would be infeasible, it would take for too much time. We would be back in the same situation of the human process. However, if the order of the sequences is randomly generated, suitable design solutions could be found in a much quicker fashion. Innovation by evolution is more likely to find new sequences that have yet been though of. The application of probability does not guarantee finding the same design twice or find the optimum combination. The advantage is this process can produce many designs quickly. In the opinion of the author, it is a fair compromise.
Hardware and software design reunited
To conclude we have discussed briefly how collaboration of specialization skills in computer science has helped to developed successful commercial products, that have revolutionise the way we are living. This type of development is likely to stay and continue as the new open source hardware demonstrates. With the automated design of circuits and algorithms, “hardware” and “software” people can both be assisted in designing innovative solvers. These solvers may not be easily understood by our human brains, as the machine discovery skills are less restricted by its environment than the human. It can assist in the design of circuits and algorithms by applying a test-and-error process much faster than human activities. A machine could produce design of solvers (hardware and software) that produces similar results. With more research, we are on the way of the rise of the machine.

