Internet and Social's Influence on Programming Evolution: Difference between revisions

From ETHW
mNo edit summary
No edit summary
Line 1: Line 1:
== Internet and Social's Influence on Programming Evolution  ==
== Internet and Social's Influence on Programming Evolution  ==
===What I plan to discover from my research===
How the internet and the influence of social media and social websites have influenced the growth, changes, and paradigm shifts in Programming. From the days of C++ only to how now we have hundreds of programming languages all focusing on web programming and social interaction. Along with the recent re-emergence of Functional Programming as a popular solution to handle massive data sets and processing.
===Research Plan===
* Search for factual information through Wikipedia's sources and various online websites
* Attempt to interview various people in the programming world, like the inventors of various programming languages and platforms. Node.js, Javascript, Python, Java, Ruby, etc.
* Find out how the general masses of programmers helped push these shifts into mainstream.
* Get more information on the various changes in thought that the internet and social media brought, how programmers adapted, and how it changed programmers priorities on what to use and what was needed.
By Yulian Kuncheff
By Yulian Kuncheff


Line 17: Line 6:
* Oct 23rd - Spent some time finding correlations
* Oct 23rd - Spent some time finding correlations
* Oct 23rd - Created progress powerpoint for class and solidified a bit of what I am going after.
* Oct 23rd - Created progress powerpoint for class and solidified a bit of what I am going after.
* Dec 11th - Removed powerpoint outline, research plan, goals for my resrarch, and added final write-up. Updated sources with new sources used.
==Report==
====Introduction====
As technology and science evolve, programmers and programming languages have had to grow and evolve along with it. Most of these changes have been influenced by demand by the consumers. As computers and technology became more widespread, consumers needed and wanted easier to use technology. This tasked programmers to create new ways of writing software, come up with languages to make it easier for themselves to create better and easier software to use. I will first do a quick rundown of how languages progressed and came into the scene.
====Early Days====
Before 1967, most languages did not really follow a paradigm. Languages were written to make programming easier, faster, and allow for more complex things to be done with them. Around 1967, languages started showing signs of following paradigms. Simula and Smalltalk were one of the first object-oriented languages, Prolog was one of the first Logical programming languages, ML and Scheme were some of the first functional languages, and B, C, Pascal, and Forth were some of the first Imperative languages.
Not much changed until the 80, when programming languages began to consolidate by paradigm and also began mixing. Generics, Object Orientation, and lazy evaluation spread amongst the languages as C++, Objective C, Common Lisp, Perl, Tcl, and Erlang come onto the scene. With the 90s, came the Internet and the landscape of programming started to change with the focus towards the Internet. Functional programming languages began to go on the rise and more RAD languages became popular featuring IDEs, garbage collection, and most were object oriented variations of past languages, including Object Pascal, Visual Basic, and Java. Along with those, Haskell, Python, Ruby, Lua, Javascript, PHP, and D, came onto the scene.
=====Last Decade=====
In the last 10 years, languages have become more Internet focused and feature many mixed paradigms and features. The goals of programming languages now is to make programming easier and quicker to use for programmers. This is to increase turn-around times and ROI of ideas. In this time span, C#, F#, Groovy, Scala, Factor, Clojure, and Go came out and brought with them rich multi-paradigm feature sets build on past languages and virtual machines. An example would be C#, it being an imperative, functional, and logical programming language based on how you use it.
=====Socialization=====
So how has the socialization of the Internet and computers affected how programmers and programming languages are used? Well, the primary thing, is that consumer expectations of how fast, and how easy to use something is has put a burden on programmers to squeeze as much power and ease out of programming in order to release their products quicker to the market with more features and polish. Languages now handle all the memory and grunt work of the system, so all that programmers need to do is to write the logic of their program. But as consumers, employers, and others learn of how these systems make it easier for the programmer, they now expect results faster with less errors. The room for error grows smaller and smaller.


==Outline of Powerpoint - (Will expand with more detail information)==
Along with this, in the early 2000, C and C++ were the defacto languages. If you didn’t know these, finding a job would be difficult as very few employers would be using anything else. Only a few years later, with the boom of social and Internet, people needed fast, scalable, and easy languages and platforms in order to build the massive socialized platforms that are in use now. Twitter, Facebook, LinkedIn and most social sites are written in garbage collected, high level languages that do all the memory work and are much easier to scale.


Image: http://www.tiobe.com/content/paperinfo/tpci/images/tpci_trends.png
An example would be Twitter. It is an application that was written with Ruby on Rails, and used a MySQL database as its backend. At first this was enough, but as the site grew to the size it is today, they had to explore more open and scalable technologies. While most of the site still runs on Ruby on Rails, and some parts are still on MySQL, they have begun switching to other technologies to handle the massive user base and traffic it sees daily. While Ruby on Rails is a high level language and is one of the many that came from the Internet age, newer and better technologies come out. Twitter has began to switch to Scala on the JVM. Only parts of the system were changed to it, but it allowed for Twitter to scale better with the high loads. Another technology they use is Lucene instead of MySQL for their searches. Lucene is a dedicated search application that can handle searches much better than a large set of MySQL queries. The final technology they employ is BitTorrent. They use its distributive processing nature to allow them to deploy to data centers faster and with error protection. All these would take much more work and code to achieve with lower level programming languages.


====What about before 2002?====
Another example is Geekli.st, a new social network building ontop of twitter for Geeks to show off their accomplishments. It runs on a very new, very scalable, and very powerful new platform called Node.js. It is a implementation of JavaScript on top of Google's V8 engine to run as a server-side application. It takes advantage of event-driven execution to provide a very scalable and lightweight server, able to easily handle many people with easy and minimal resources.
* Before 1967, nothing really followed a paradigm, languages just tried to make programming more accessible.
* 1967-1968 showed the first signs of paradigms.
** Simula & Smalltalk - Object Oriented
** Prolog - Logic
** ML & Scheme - Functional
** B, C, Pascal, Forth - Imperative


====Before 2002 (cont.)====
There do exist counter examples. A popular online dating site, OkCupid, runs their entire stack on C++. Their server daemons and web server are all custom built using C++. Their site seems to be scaling well and their userbase is growing steadily. Showing that is is possible to write it all in C++, but while you can, it might not be the most effective or scalable means of doing it.
* 1980s showed general consolidation to imperative languages along with a lot of overlap and mixing of paradigms.
* Generics, Object Orientation, and lazy evaluation spread amongst the languages
** C++, Obj-C, Common Lisp, Perl, Tcl, and Erlang come onto the scene.


* The 90s and the internet, new languages emerged and many were modified to adapt to this new radical platform.
=====The Cause=====
* Functional went on a rise, and more RAD languages became popular featureing IDEs, garbage collection, and most were object oriented variations of past languages.
So why has this focus changed? Well while C and C++ can probably handle the loads and features these sites require, the time and difficulty to write the software to do the same thing and scale the same way would be much much larger. Writing the same program in C and C++ would probably take thousands of more lines of code and implementations of coding functions that are already built into other languages. Along with this, with increasing hardware power and resilience, our computers can handle these high level languages with minimal difference from lower level languages. A great example is TinyP2P. It is a P2P program written in 15 lines of Python. Something that would normally take 100s of lines in other programming languages was achieved in 15. This is one of the major reasons, ease of programming.
** Object Pascal, Visual Basic, and Java
* Haskell, Python, Ruby, Lua, Java, Javascript, PHP, and D came onto the scene.


====Last 10 years====
The final aspect is money. It is much cheaper to pay 2-3 programmers to do the work in a month, than 6+ programmers to do the work in 6 months. There is also hardware and other things that allow for cheaper implementations because of the greater scalability that these languages have. Allows you to run more on less.
* In the last 10 years, languages have become more internet focused and feature many mixed paradigms and features. Goals are now to make languages easier for programmers with faster turn-around times.
* New languages: C#, F#, Groovy, Scala, Factor, Clojure, and Go
* These languages feature many paradigms, and features that are from various languages.  
An example of C# being imperitive, functional, and logic based depending on how you use it.


====How has Social affected us?====
Now to turn back a bit, in the early days of programming, most innovation was spurred by just wanting to see what they could do with computers. Programming languages weren’t well defined, and constantly changing. Programmers weren’t programming for consumers per say, but to push the boundaries of computing. As most programmers were also engineers, they had a more intimated knowledge of the workings of the technology, and were able to manipulate them with greater ease on the hardware level. It also allowed them to use rough, very low level languages without too much effort, as they understood what they were doing.
* The internet and social has affected the expectations of programmers and programming languages.
* Languages now need to support everything and handle all memory and grunt work, leaving the programmer to just write the logic that is needed.
* With these tools, programmers are now expected to achieve results faster with less problems.


* In Early 2000, C/C++ was the defacto language. If you did not know this, finding a job would have been difficult.
=====The Consumers Chime In=====
* Only a few years later, with the boom of social and internet, people needed fast, scalable, and easy languages and platforms in order to build the massive influx of socialized software.
But things began to shift, computers were starting to appear in more places, and general consumers began to want to do things easier. So focus for programmers and engineers began to shift slightly from breaking new boundaries to make computing easier. Now boundaries were being pushed through the process of making it easier, but it began to cater more to consumer needs. Once personal computing with Macs and PCs began to grow, it just kept shifting. Today, the primary focus of programming is to to create software for consumers. While there are plenty of researchers and programmers that are pushing the boundaries of technology to innovate, but the vast majority of the focus is now on social networks, websites, and software platforms to interconnect the masses and provide them an easy terminal into technology without the need of a vast knowledge of the inner workings of a computer or how any of it works.
* Twitter, Facebook, LinkedIn and most social sites are written in garbage collected, high level languages that do all the memory work for us and easily scalable.


====But why has this happened?====
Another example is that programming has become a field of its own. Computer Engineer is focused on hardware and programming that hardware. Computer Science has become the theoretical study of algorithms, paradigms, with large doses of math. This has shown that programming is now a whole beast of its own and that it has grown to be more than just controlling the hardware the engineers make.
* While C/C++ can probably handle the loads that social sites create, the time to write the software, make it scalable and in general fit what is needed takes much longer than if you would write it in a high-level language.
But in the early days, programming innovation and change was spurred by programmers just being fed up with the tools they had. They wanted easier, more powerful, and faster. So they sat down and did it. James Gosling was not happy with C and C++ so he and a group at Sun Microsystems sat down and wrote the Java Virtual Machine and the Java programming language. They spurred the innovation of object oriented programming, and the growth of the Java Virtual Machine to take over C and C++ programming. Today, Java is one of the most popular languages in the world, and the Java Virtual Machine has a home on many different operating systems due to its multi-platform goals.
* Hardware allows it. With memory, processor speeds, and SSD drives, it has become easier and easier to rely on high-level languages and ignore the minor performance benefits low-level languages provide.
* Money. Its cheaper to higher 2-3 programmers to do the work in a few months, then 5-6 that will do it in half a year.


====Further Research====
=====Conclusion & Predictions=====
* Why websites choose the technologies that have chosen and compare them to the reasons why older languages were chosen in the past.
Looking into the future, I can easily see programming growing into something the average user can do, using a drag and drop interface, and just a little bit of reasoning and logic. The technology to this already exists, and there are many projects in their infancy that aim to provide such an interface. The apps they create are not very unique or powerful, but these are the first steps. While I don’t see this type of programming taking over anytime in the near future, and the need for programmers well with Computer Science degrees to write software. I do foresee a day, when the average consumer will be the programmer. Then only the limits of the human imagination are our blockades.
* Are the the changes really by social or is it programmers taking advantage of upgraded technology?
* What trends seem to be happening now and how they will affect future programming.


=====Sources:=====
=====Sources:=====
*http://en.wikipedia.org/wiki/History_of_programming_languages
*Wikipedia on History of Languages [http://en.wikipedia.org/wiki/History_of_programming_languages]
*http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
*TIOBE Popularity Charts [http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html]
*Various social websites about pages and history. Twitter, Facebook, OkCupid, LinkedIn, *Geekli.st.
*Twitter on Scala [http://www.artima.com/scalazine/articles/twitter_on_scala.html]
*TinyP2P on About.com [http://python.about.com/b/2007/09/18/the-worlds-tiniest-p2p-program.htm]
*Murder: Fast Data Center Deploys using Bittorrent [http://engineering.twitter.com/2010/07/murder-fast-datacenter-code-deploys.html]
*Various social websites about pages and history.  
** Twitter About page [https://twitter.com/about]
** Facebook Resources [http://www.facebook.com/facebook?sk=app_10531514314]
** OkCupid About the Technology page [http://www.okcupid.com/about/technology]
** Geekli.st [http://geekli.st/about]


[[Category:Object_oriented_programming]]
[[Category:Object_oriented_programming]]
[[Category:Programming]]
[[Category:Programming]]
[[Category:Programming_profession]]
[[Category:Programming_profession]]

Revision as of 05:06, 12 December 2011

Internet and Social's Influence on Programming Evolution

By Yulian Kuncheff

Progress & Changelog:

  • Oct 22nd - Began indepth research
  • Oct 23rd - Spent some time finding correlations
  • Oct 23rd - Created progress powerpoint for class and solidified a bit of what I am going after.
  • Dec 11th - Removed powerpoint outline, research plan, goals for my resrarch, and added final write-up. Updated sources with new sources used.

Report

Introduction

As technology and science evolve, programmers and programming languages have had to grow and evolve along with it. Most of these changes have been influenced by demand by the consumers. As computers and technology became more widespread, consumers needed and wanted easier to use technology. This tasked programmers to create new ways of writing software, come up with languages to make it easier for themselves to create better and easier software to use. I will first do a quick rundown of how languages progressed and came into the scene.

Early Days

Before 1967, most languages did not really follow a paradigm. Languages were written to make programming easier, faster, and allow for more complex things to be done with them. Around 1967, languages started showing signs of following paradigms. Simula and Smalltalk were one of the first object-oriented languages, Prolog was one of the first Logical programming languages, ML and Scheme were some of the first functional languages, and B, C, Pascal, and Forth were some of the first Imperative languages.

Not much changed until the 80, when programming languages began to consolidate by paradigm and also began mixing. Generics, Object Orientation, and lazy evaluation spread amongst the languages as C++, Objective C, Common Lisp, Perl, Tcl, and Erlang come onto the scene. With the 90s, came the Internet and the landscape of programming started to change with the focus towards the Internet. Functional programming languages began to go on the rise and more RAD languages became popular featuring IDEs, garbage collection, and most were object oriented variations of past languages, including Object Pascal, Visual Basic, and Java. Along with those, Haskell, Python, Ruby, Lua, Javascript, PHP, and D, came onto the scene.

Last Decade

In the last 10 years, languages have become more Internet focused and feature many mixed paradigms and features. The goals of programming languages now is to make programming easier and quicker to use for programmers. This is to increase turn-around times and ROI of ideas. In this time span, C#, F#, Groovy, Scala, Factor, Clojure, and Go came out and brought with them rich multi-paradigm feature sets build on past languages and virtual machines. An example would be C#, it being an imperative, functional, and logical programming language based on how you use it.

Socialization

So how has the socialization of the Internet and computers affected how programmers and programming languages are used? Well, the primary thing, is that consumer expectations of how fast, and how easy to use something is has put a burden on programmers to squeeze as much power and ease out of programming in order to release their products quicker to the market with more features and polish. Languages now handle all the memory and grunt work of the system, so all that programmers need to do is to write the logic of their program. But as consumers, employers, and others learn of how these systems make it easier for the programmer, they now expect results faster with less errors. The room for error grows smaller and smaller.

Along with this, in the early 2000, C and C++ were the defacto languages. If you didn’t know these, finding a job would be difficult as very few employers would be using anything else. Only a few years later, with the boom of social and Internet, people needed fast, scalable, and easy languages and platforms in order to build the massive socialized platforms that are in use now. Twitter, Facebook, LinkedIn and most social sites are written in garbage collected, high level languages that do all the memory work and are much easier to scale.

An example would be Twitter. It is an application that was written with Ruby on Rails, and used a MySQL database as its backend. At first this was enough, but as the site grew to the size it is today, they had to explore more open and scalable technologies. While most of the site still runs on Ruby on Rails, and some parts are still on MySQL, they have begun switching to other technologies to handle the massive user base and traffic it sees daily. While Ruby on Rails is a high level language and is one of the many that came from the Internet age, newer and better technologies come out. Twitter has began to switch to Scala on the JVM. Only parts of the system were changed to it, but it allowed for Twitter to scale better with the high loads. Another technology they use is Lucene instead of MySQL for their searches. Lucene is a dedicated search application that can handle searches much better than a large set of MySQL queries. The final technology they employ is BitTorrent. They use its distributive processing nature to allow them to deploy to data centers faster and with error protection. All these would take much more work and code to achieve with lower level programming languages.

Another example is Geekli.st, a new social network building ontop of twitter for Geeks to show off their accomplishments. It runs on a very new, very scalable, and very powerful new platform called Node.js. It is a implementation of JavaScript on top of Google's V8 engine to run as a server-side application. It takes advantage of event-driven execution to provide a very scalable and lightweight server, able to easily handle many people with easy and minimal resources.

There do exist counter examples. A popular online dating site, OkCupid, runs their entire stack on C++. Their server daemons and web server are all custom built using C++. Their site seems to be scaling well and their userbase is growing steadily. Showing that is is possible to write it all in C++, but while you can, it might not be the most effective or scalable means of doing it.

The Cause

So why has this focus changed? Well while C and C++ can probably handle the loads and features these sites require, the time and difficulty to write the software to do the same thing and scale the same way would be much much larger. Writing the same program in C and C++ would probably take thousands of more lines of code and implementations of coding functions that are already built into other languages. Along with this, with increasing hardware power and resilience, our computers can handle these high level languages with minimal difference from lower level languages. A great example is TinyP2P. It is a P2P program written in 15 lines of Python. Something that would normally take 100s of lines in other programming languages was achieved in 15. This is one of the major reasons, ease of programming.

The final aspect is money. It is much cheaper to pay 2-3 programmers to do the work in a month, than 6+ programmers to do the work in 6 months. There is also hardware and other things that allow for cheaper implementations because of the greater scalability that these languages have. Allows you to run more on less.

Now to turn back a bit, in the early days of programming, most innovation was spurred by just wanting to see what they could do with computers. Programming languages weren’t well defined, and constantly changing. Programmers weren’t programming for consumers per say, but to push the boundaries of computing. As most programmers were also engineers, they had a more intimated knowledge of the workings of the technology, and were able to manipulate them with greater ease on the hardware level. It also allowed them to use rough, very low level languages without too much effort, as they understood what they were doing.

The Consumers Chime In

But things began to shift, computers were starting to appear in more places, and general consumers began to want to do things easier. So focus for programmers and engineers began to shift slightly from breaking new boundaries to make computing easier. Now boundaries were being pushed through the process of making it easier, but it began to cater more to consumer needs. Once personal computing with Macs and PCs began to grow, it just kept shifting. Today, the primary focus of programming is to to create software for consumers. While there are plenty of researchers and programmers that are pushing the boundaries of technology to innovate, but the vast majority of the focus is now on social networks, websites, and software platforms to interconnect the masses and provide them an easy terminal into technology without the need of a vast knowledge of the inner workings of a computer or how any of it works.

Another example is that programming has become a field of its own. Computer Engineer is focused on hardware and programming that hardware. Computer Science has become the theoretical study of algorithms, paradigms, with large doses of math. This has shown that programming is now a whole beast of its own and that it has grown to be more than just controlling the hardware the engineers make. But in the early days, programming innovation and change was spurred by programmers just being fed up with the tools they had. They wanted easier, more powerful, and faster. So they sat down and did it. James Gosling was not happy with C and C++ so he and a group at Sun Microsystems sat down and wrote the Java Virtual Machine and the Java programming language. They spurred the innovation of object oriented programming, and the growth of the Java Virtual Machine to take over C and C++ programming. Today, Java is one of the most popular languages in the world, and the Java Virtual Machine has a home on many different operating systems due to its multi-platform goals.

Conclusion & Predictions

Looking into the future, I can easily see programming growing into something the average user can do, using a drag and drop interface, and just a little bit of reasoning and logic. The technology to this already exists, and there are many projects in their infancy that aim to provide such an interface. The apps they create are not very unique or powerful, but these are the first steps. While I don’t see this type of programming taking over anytime in the near future, and the need for programmers well with Computer Science degrees to write software. I do foresee a day, when the average consumer will be the programmer. Then only the limits of the human imagination are our blockades.

Sources:
  • Wikipedia on History of Languages [1]
  • TIOBE Popularity Charts [2]
  • Twitter on Scala [3]
  • TinyP2P on About.com [4]
  • Murder: Fast Data Center Deploys using Bittorrent [5]
  • Various social websites about pages and history.
    • Twitter About page [6]
    • Facebook Resources [7]
    • OkCupid About the Technology page [8]
    • Geekli.st [9]