- Razer Phone 2 – With great power comes great responsibility!Posted 3 months ago
- Gear Diary Spring 2019Posted 3 months ago
- Cuts Clothing – A Cut above the Rest!Posted 3 months ago
- N-Range – Boost Your Cell Signal!Posted 3 months ago
- Heshi Designer SocksPosted 6 months ago
- FLXCUF – Roll them sleeves right!Posted 6 months ago
- Gantri – Designer 3D Printed LightsPosted 6 months ago
- Gaze Lab Wireless Charging AccessoriesPosted 7 months ago
- Earin m2 earphonesPosted 7 months ago
- Som SleepPosted 7 months ago
- Origaudio Wrapsody Bluetooth EarphonesPosted 7 months ago
- Tmbr SunglassesPosted 9 months ago
- Google Pixel 3 and 3XL – Three times the charm!Posted 9 months ago
- Moshi – Premium Accessories and PeripheralsPosted 9 months ago
- Tap – Wearable Keyboard and MousePosted 9 months ago
- Botta-Design TRES 24 Titan WatchPosted 10 months ago
- Fall Gear Guide 2018Posted 10 months ago
- Arc’teryx Fall 2018Posted 10 months ago
- Ionbox 20m – Negative Ion GeneratorPosted 12 months ago
- Must Have Summer Essentials 2018Posted 12 months ago
Reading, Writing, Arithmetic, and Programming?
The Three “R’s” Plus One “P”
For centuries the British Education System was founded on the basic literacy and numeracy concepts of Reading, Writing and Arithmetic (also known as the 3Rs). Ever since its implementation in Victorian times, this compulsory learning program has gone largely unchallenged — That is until last year, when computer programming was incorporated into the 2014 School Curriculum as a fourth core subject. Hence, it is now mandatory for every child in Britain from the age of five upwards to learn how to program a computer. By raising this subject to the same status as English and Math, the British government has come to recognize Computer Programming as a fundamental 21st century life skill; one which shares the same level of importance as the 3R’s.
Not everyone agrees with this philosophy though; some experts such as Linus Torvalds the founder of the Linux operating system do not believe everybody needs to learn how to program a computer. When posed this question at a Q&A session for Business Insider, Torvalds is quoted as saying — “I think it’s reasonably specialized, and nobody really expects most people to have to do it. It’s not like knowing how to read and write and do basic math”.
However, there are other influential figures in the Information Technology (IT) sphere who strongly disagree with Torvalds point of view. Bill Gates the co-founder of Microsoft is quoted as saying — “Learning to write programs stretches your mind, and helps you think better, creates a way of thinking about things that I think is helpful in all domains.” Gates is not alone in his thinking here, there are other prominent figures in the industry such as Mark Zuckerberg the founder and creator of Facebook who have joined him in donating millions of dollars to Code.org — a non profit organization that believes every student should be given the opportunity to learn how to program.
BBC: Teaching Kids to code in the UK
Whether or not you agree with the viewpoint that says learning to program has become as fundamental as reading and writing in the age of information. It cannot be denied that by changing many aspects of business performed by the workforce, technology now dominates every area of Industry and Commerce. Yes it may be true that not everyone is going to end up working as a programmer; however, advances in technology are spawning new employment opportunities that were never heard of several decades ago.
An article published in Pew Research states there were an estimated 165,100 Americans working as Computer Network Support Specialists in 2013. In addition to this, 141,270 worked as Computer Network Architects and 78,020 as Information Security Analysts. None of these occupations existed in their own right in 1999, yet each one either requires or would benefit greatly from at least some knowledge of computer programming.
Contrary to popular belief, programming is much more than just producing lines of error free code; it requires a specific set of skills, many of which can be easily transferred into other areas of the workforce. Indeed, the demand for these type of skills is steadily growing outside the realms of programming, as technology continues to change the way many tasks are performed. According to a Forbes Magazine publication; the top 10 skills most sought after by employers in millennials are as follows:
- Ability to work in a team
- Ability to make decisions and solve problems
- Ability to plan,organize and prioritize work
- Ability to communicate verbally with people inside and outside the organization
- Ability to obtain and process information
- Ability analyze quantitative data
- Technical knowledge related to the job
- Proficiency with computer software programs
- Ability to create and/or edit written reports
- Ability to sell and influence others
Programming Requires a Complete Change of Mindset
Software development is based upon algorithms which are formulae comprised of a precise set of instructions for solving a particular problem. Some of the simplest examples of algorithms used in everyday life include — the list of ingredients and instructions required to follow a recipe, or a pattern which used for knitting an item of clothing. In learning how to create computer based algorithms, the discipline of precision and attention to detail become second nature to the individual.
Transitioning from a natural language such as English or French, to learning a computer language requires a significant paradigm shift. In learning how to program you have to think the same way a computer does, and for most people this change in thought process does not come easily. So often is the case when people become overly optimistic by the instant gratification they receive from writing simple programs such as printing their name on the screen; only to quickly fall into despondency when they attempt to write more complex programs involving many more lines of code. As the compiler or interpreter stubbornly throws out errors on what appears to be a perfectly valid piece of code, it quickly becomes apparent that except for the very simplest of programs, it requires much more than just learning the syntax of a computer language to become a competent programmer.
Its not enough just being syntactically correct down to the last punctuation symbol, programs must also be semantically correct as well — and they must be given the correct type of data to work with in order to avoid logical errors. For example if a program is given the value “ten” instead of 10 to add to another number, the compiler will generate an error at runtime — since it is not smart enough to interpret the word “ten” as the digital value 10. In contrast when we humans communicate in natural language, we need not be so concerned about following the rules with such austere. An individual reading the word “ten” understands well enough that it is a representation of the digital value 10, and hence should have no problem following the instruction “Add ten to the previous number”.
In natural language, the occasional omission of a period or misspelt word does not spell disaster either, since we can usually figure out what a person means pretty easily — we can even play around with the syntax of a sentence and still get the correct interpretation. In a text message we could either say, “ Hi just wondering if you are still free for lunch today”, or maybe “Hello was wondering if ur still free 4 lunch Tday”. Using either of these narratives we could accomplish our communication goal and the recipient would probably understand what we mean without getting upset with us.
The Importance of Good Design
Problem solving is a major skill that every serious programmer needs to learn, and one which is reflected in the programmer’s ability to produce good program designs, which are capable of solving a particular problem in the most efficient way. For example in deciding which data structure to use for storing the flight schedule information that is displayed on the monitors at airports — An array would probably be the easiest method to implement, however given the dynamic nature of this application it would not be the optimal choice for updating this information quickly, a linked List would probably serve this purpose better.
In Programming: Patience is Much More Than a Virtue
The life of a programmer is a roller-coaster of highs and lows; the times when your program runs perfectly and produces the correct output, fills you with feelings of sheer exhilaration and accomplishment. However, along with this experience of Utopia there will inevitably be more than occasional bouts of frustration — as you meticulously search through hundreds of lines of code trying to locate the bug which is wreaking havoc with your program. Frequently the problem lies in your lack of attention to detail, such as when a variable has been referenced incorrectly, because the programmer failed to capitalize the first letter of the variable name and hence the compiler was not able to recognize it. Although this might seem like a very minor error to a novice, it is one that costs many hours of debugging time, and one for which even the most experienced programmers can fall foul.
One of the most soul destroying experiences in a programmer’s life is when you write what you perceive to be the perfect piece of code, and to your absolute sheer delight it produces the correct output on every test you perform — so you proudly hand it over to be further tested by others; only to discover that it crashes on the very first run. The problem was that you got ahead of yourself by failing to anticipate the possibility that the user might do something they shouldn’t, like entering bad data; and therefore you never bother to build any contingency into your program. Over half the code of a well designed robust program consists of “Insurance Code”— that is to say, lines of code that are designed to allow a program to recover from an unexpected error rather than choke and die. Unfortunately this part of the job holds the least amount of appeal for most programmers who are eager to focus on solving the problem itself; nonetheless, exception handling as this is known is a critical component of every well designed software program, and it encourages programmers to think not only in terms of solving the problem, but also how users interact with their program.
Developing Good People Skills
If there is one universal skill that every person needs to develop in order to become successful in any type of career it has to be the art of understanding people; individuals who are lacking in this area are guaranteed problems in the workplace. For the modern programmer this is no exception, who in contrast to earlier times no longer acts as a lone wolf, but is assigned to a project team.
Programmers will be challenged with every possible type of personality trait; from narcissists, manipulators, back-stabbers, and the painfully shy and timid, to the more reasonable traits of humanity such as honesty, integrity and excellent team play. As a team player there will be many times when the quality of your work is dependent upon the magnitude of effort exerted by others in the team. This is the nature of teams, whereby diverse personality types are expected to come together and work through their differences for the sake of the whole team– in learning the art of diplomacy you will need to know when to speak up and when to keep your mouth closed.
Written Communication to the Highest Level
Programmers must interact with others using multiple forms of communication, hence the ability to produce clear and concise narrative is an integral part of the job. Theoretically, a unit of code can be developed by several programmers over time, which is frequently the case; and in order for the successor to come up to speed quickly requires sound quality documentation, which should be available from their predecessor.
A significant portion of communication in the workplace now comes through emails, which being of a written form does not come with the benefit of tone or facial expressions, and therefore can easily become open to misinterpretation. In order to reduce this risk, it is necessary to avoid vague and cryptic narrative which only serves to bring confusion and often times causes unintended offence — in a nutshell professional emails and texts need to be constructed with great care, to ensure that they are conveying the correct message.
Adhering to Standards
Coding standards are important for many reasons; firstly they specify a universal format for program code and comments — this allows programmers to easily share code and ideas with other programmers. Secondly standards facilitate the reading and understanding of someone else’s code; for example by using proper indentation when writing Program Loops and helping to identify variables by preceding them with an underscore. A well defined coding standard can give a software project the edge, but can only be beneficial if everyone adheres to the standard. Programmers therefore need to be made accountable as it encourages them to become better coders.
The Ability to Break Down a Problem Into its Constituent Parts
The majority of software projects being developed today are inherently complex; therefore in order to make them more manageable, they must be decomposed into smaller discrete units of logic. Once a system has been broken down into independent objects, each logical entity is independently developed and tested before being connected together as a complete system. This procedure is not as easy as it sounds, but is one which every software professional needs to master, including not only Programmers, but also Systems Analysts, and Database Designers. It calls for the correct balance of logical analysis and creative thinking, in order to define the right components which can be developed and tested as an autonomous unit, and then connected seamlessly to other parts of the system. The expertise required to achieve this task is nothing short of a highly competent “Digital Surgeon” if you will.
As a software system evolves there are usually multiple versions that are being developed simultaneously; once a system component has been Unit Tested it is then added into the next version for Integration Testing. Should there be a problem with the system at any time, a diagnostic check can be made by checking the system log to determine which units of code have recently been added to the software version in question, thus making it easier to track down errors.
In order to help them design the correct logical components that make up an entire system, Systems Analysts, and Programmers use a technique known as Object Orientation (OO) — a set of techniques used to model the real world, by creating insulated objects consisting of data structures and the program code (known as Methods) that operate on the data.
The Earlier the Better
As a general rule, proficiency in any domain usually comes quicker and more easily if it is learned at an early age rather than later on in life. This can be clearly evidenced by studying young children who are bilingual — watch in fascination as they effortlessly transition from one language to another without confusion. However, this is not the case for high school students who have not had the benefit of being raised in a bilingual environment, and often experience great difficulty mastering a secondary language such as French or German.
Scientists have discovered a critical period in the development of the brain’s Cerebral Cortex, this timeline is present in all young animals (including humans). During this limited window of opportunity, babies and young infants are able to advance much quicker in learning than any other time in their life, after this optimum period has passed leaning becomes increasingly more difficult. Consider that when VCR’s first appeared in the 80’s,it was the children who quickly became adroit at recording television programs, as their parents failed to figure out for themselves how to set the correct date time and channel.
Berkley Scientists Study Baby Brain Power
During the 90’s when Graphical User Interfaces (GUI’s) started to take hold in mainstream software development, this gave the user more control in deciding how the program was executed. Traditionally programs were executed in a sequential manner, and were controlled by a central piece of code in the program known as a Main Paragraph. Many conventional programmers who were used to programming in this way experienced great difficulty in making the transition over to Object Orientation programming. In contrast, new students of Computer Science in this era, those who were void of any kind of program design experience, readily embraced this new concept of modeling the real world in a more natural way through autonomous objects.
The world is a rapidly changing place, and never more so than in the realm of technology, in response to the predicted future shortage of Information Technology (IT) expertise — a select few nations are taking the initiative now, by honing the next generation of potential talent at the earliest possible age. Could these pioneering techies of grade school age and upwards be the first of a new breed of learners — those who take to mastering the art of programming as easily and naturally as learning their ABC’s or multiplication tables?
There is no consensus as to whether an investment in compulsory programming education in schools will bring a worthwhile “Return on Investment” (ROI) in the future. Those like Kevin Maney believe the rise of Artificial Intelligence (AI) will render programmers obsolete in the near future, while others such as Andrew Mellinger maintain that programmers will always be in demand.
For decades the United States has been able to maintain its dominant position as the number one leader in technology, despite a decline in the number of high school students graduating with credits in computer science. A region stretching from the San Francisco bay area to San Jose in California known as Silicon Valley is home to some of the most powerful global high tech companies in the world.
However if we go back in history a little to the beginning of the Dot-Com boom, we can observe how the crippling shortage of technical expertise in the US forced a mass import of foreign talent into the country. These migrants who came in droves from places like the UK, the Philippines and India were able to command extortionate compensation, as demand for their services outstripped supply.
In 2012, “ComputerWorld” magazine published an article in which US officials predicted a 22% increase in demand for programming jobs through 2020. Will history repeat itself once again, where America will be forced to look towards the rest of the world in order to fulfill its technological manpower — or could America avoid a repeat of the Dot-Com era debacle by taking the same initiative as one of its own public school authorities? The Chicago Public Schools (CPS) district has taken the lead by becoming the first urban district in the nation to integrate Computer Science into its core curriculum?
Following a review at the turn of the century, Israel the country that Britain is attempting to emulate has already established one of the world’s most rigorous computer science curricula for high schools. In a report published by Bloomberg Business, Israel is now one of the top tech hubs of the world, and according to Ernst & Young, “Israel tech companies attract more venture capital and private-equity cash than any other European country”.
A solid investment in the technological future is analogous to an insurance policy, where an attempt is made to cover every conceivable outcome of the future. In any event, a sound investment in programming skills will at the very least equip the individual with a plethora of transferable skills (as described above); for which they can apply to almost any type of job. And should (as predicted by many), the demand for programmers take on a sharp increase in the future; it will be the countries that have invested in the next generation of workers who will be in a position to fulfill a larger portion of their own citizen’s employment needs, before having to look abroad for their future technology requirements.
- Desilver, Drew, “Reshaping the workplace: Tech-related jobs that didn’t exist (officially, at least) 15 years ago”, Pew Research Center 8th Aug 2014, Web 04/15/2015: Reshaping the Workforce Tech Related Jobs.
- Adams, Susan “The 10 Skills Employers Most Want In 20-Somethings”, Forbes Magazine 11th Oct 2013, Web 02/06/2015: The Ten Most Sought After Skills.
- Crow, Dan “Why Every Child Should Learn How to Program”, The Guardian News 7th Feb 2014, Web11/06/2014: Why every child should learn how to program.
- Katcher, Beatrice, Should Journalists Learn how to Code?” Newsroom 14 09/26/2014 Web 04/29/2015: http://newsroom14.journalists.org/hack-the-planet/.
- Grant, Alexis, “Six Ways the World Work is Changing”, US news Sept 28th 2011. Web 11/06/2014: Six different ways in which the world is changing.
- Shein, Esther “Should Everyone Learn to Code?”, Communications of the ACM, Web 04/27/2014: Does Everyone Need to Learn Coding?.
- Lederman, Doug “The Pulse: Learning to Code”, Inside Higher Ed 04/03/2015 , Web 04/27/2015: Learning to Code
- CNN News,,“Why Chicago is Mandating Coding Education” CNN Money 10/20/2014 Web 04/29/2015: Why the Chicago Coding Mandate?.
- Noyes, Katherine “Should Everyone Learn to Code?”, Linuxinsider 06/23/2014 Web 04/29/2015: Should Everyone Learn How to Code?.
- Eldredge, Barbara “Should Everyone Learn How to Code?”, Real Art, Web 04/29/2015: Does Everyone Need to Learn Coding?.