- Revolving Door: MPAA Hires Chief USTR Negotiator Behind ACTA And TPP’s IP Chapter
- Copyright Maximalists’ Incredible Sense Of Entitlement: If It Challenges The Biz Model We Chose, It Must Be Illegal
- Turkey’s Prime Minister Sues His Own Country Over Twitter
- Picturefill 2
- Police File On Student ‘Bullied Into Committing Suicide’ Strangely Lacking In Evidence Of Bullying
- April 2014
- March 2014
- February 2014
- January 2014
- December 2013
- November 2013
- October 2013
- September 2013
- August 2013
- July 2013
- June 2013
- May 2013
- April 2013
- March 2013
- February 2013
- January 2013
- December 2012
- November 2012
- October 2012
- September 2012
- August 2012
- July 2012
- June 2012
- May 2012
- April 2012
- March 2012
- February 2012
- January 2012
- December 2011
- November 2011
- October 2011
- September 2011
- August 2011
- July 2011
- June 2011
- May 2011
- April 2011
- March 2011
- February 2011
- January 2011
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- December 2008
- November 2008
- October 2008
Category Archives: General Development
Web Hosting Related Articles You May Need
My recent post Contributions of Individual Programming Languages to Software Development has received numerous useful and informative responses that I highlight here. Because select posts to this blog are syndicated to JavaWorld, DZone/JavaLobby, and J… Continue reading
I’ve grown weary of the blog posts and forum rants stating why one programming language is better than another. I don’t mind when languages are compared to help see how they are different or even when one language is argued as better for a very specific situation for a specific reason. I have yet to find (and never expect to find) a programming language that is better than all other languages for all situations (and this includes HTML5). In fact, I have found the contrary to be true: although I definitely have my favorite handful of programming languages, I recognize that a much wider spectrum of programming languages (even some that I don’t personally like) have helped software development as a practice arrive where we are today.
In this blog post, I look at the contributions of several different programming languages to our discipline. In most cases, the listed language was not the very first to introduce the concept or feature, but was the first to make it popular or “mainstream.” The purpose of this post is NOT to state which programming language is best or why one is the best thing since sliced bread while another is the worse thing to ever happen to a software developer. I also don’t cover markup “languages” such as XML or HTML in this post, though they obviously have had significant influence on software development.
Most software developers I know have written some code in some form of BASIC (Beginner’s All Purpose Symbolic Instruction Code). I remember, long before public availability of the Internet or even mice on PCs, typing in Basic code from magazines I received in the mail with code listings for various simple games and PC utilities. Like many developers, Basic was the language that attracted my interest at a relatively young age to programming. It was from my Basic programming that I learned firsthand the dangers of the goto.
C may be the most influential of all programming languages on today’s software development. In Steve Yegge‘s well-known blog post The Next Big Language, Yegge’s #1 rule for the next big programming language is that it has “C-like syntax.” Many people’s favorite programming languages are themselves (interpreter or runtime environment) written in C and many of these languages provide mechanisms (JNI and XS are two examples) for “escaping” to C for performance gains. C also remains one of the most popular and highly used programming languages in the world despite its relatively old age. Wikipedia even has an entry devoted to C-based programming languages.
Although COBOL is not a language you read much about in blogs or articles these days, there is a huge amount of deployed code written in COBOL (Common Business-Oriented Language). In Cobol doesn’t belong in a museum, Ken Powell writes:
I believe that the spirit of Smithsonian’s Cobol debut is not an indication of its antiquity, but rather a testament to its past, as well as its continued success. Just as Edison’s light bulb was a game-changing invention in its day, Cobol has changed the face of computing, and continues to have a tremendous impact on our everyday lives.
John Breeden II also writes of Cobol’s impact on software development in A toast to Cobol, a true computing hero, stating, “Without Cobol, each early computer might have developed its own proprietary computing language. Instead, we started on a path to interoperability that would come in very handy later on.”
C#‘s status as flagship language of Microsoft’s .NET has made it influential out of the box. C#’s syntax and early features also paid homage to and provided evidence of the influence of C, C++, and Java. Although C# borrowed heavily from those languages in its early versions, it also brought its own advancements that were emulated by other languages (in particular by Java). It was Microsoft’s plan for migrating legacy Visual Basic applications to the .NET framework (and making use of C# libraries) that demonstrated on a large scale the advantages that the JVM already offered but were rarely used. The multiple language paradigm on the JVM has become huge in recent years, but Microsoft’s use of the CLR seemed to be the first to bring this idea to mainstream awareness even though the JVM existed before the CLR.
C++ was the object-oriented language for a while, is still heavily used, and has inspired other highly popular object-oriented languages such as C# and Java. C++ has dominated the “system programming” market and changed how many of us think about programming from completely procedural to object-oriented thinking. C++’s direct influence as a popular language in its own right and indirect influence via “child” languages that have reached their own popularity heights are proof of this language’s dramatic influence on software development.
The IBM article Fortran: The Pioneering Programming Language states that Fortran (FORMula TRANslator) “became the first computer language standard, ‘helped open the door to modern computing,’ and may well be the most influential software product in history.” This is an interesting read that I highly recommend for learning more about Fortran’s impact and influence on software development. Fortran has also been called “the first successful high level programming language.”
Along with Lisp, one of the first programming languages many of us think of when discussing functional programming is Haskell. As languages such as Scala, Clojure, and even Java 8 bring functional programming concepts to the JVM, it’s not difficult to see the roots of these features in languages such as Haskell and Lisp. The Why Haskell matters Wiki page states, “Haskell is a modern general purpose language developed to incorporate the collective wisdom of the functional programming community into one elegant, powerful and general language.” There’s even a free online book called Learn You a Haskell for Great Good!
David Chisnall calls Lisp “arguably the most influential programming language of all time” in his post Influential Programming Languages, Part 4: Lisp. Reasons he cites to justify this claim include Lisp being “the very first programming language to provide automatic garbage collection,” Lisp’s introducing “the idea of the read-evaluate-print loop (REPL),” Lisp’s early use of closures/lambdas, and Lisp’s “inspiration for pure functional languages” and “inspiration for a number of object-oriented languages.” In Why Lisp?, Peter Seibel states, “So, on one hand, Lisp is one of computer science’s “classical” languages, based on ideas that have stood the test of time. On the other, it’s a thoroughly modern, general-purpose language whose design reflects a deeply pragmatic approach to solving real problems as efficiently and robustly as possible.”
Like Basic, Pascal is influential on software development because of its wide use as a “learning language.” Aspects of Pascal are also seen in other languages. For example, the Oracle database procedural programming language PL/SQL has always felt eerily similar to Pascal. One might argue that Pascal’s influence is felt more today indirectly via languages such as PL/SQL than via direct use. On a personal note, Pascal is the first language that I used in more than hobbyist fashion (that was Basic’s role for me) as I had high school and college courses that used Pascal and I wrote my first “commercial” application (a sports trading card inventory control system) in Pascal. I still think Pascal offers numerous advantages as a “learning language.”
Perl has been a significant contributor in a wide variety of contexts, especially in early web development (CGI scripts) and in Unix/Linux scripting and development. Perl was often the first taste of a dynamic language for C-style language developers. It also helped many developers to realize the advantage of writing scripts in a language that could be used in all shells rather than using shell-specific scripts. Furthermore, it can be argued that Perl, perhaps more than any other language, has brought the power of regular expressions to the forefront of software development along with some powerful and concise features of sed and awk.
I have no evidence to back this, but it feels to me like Python is the language taking most developers away from using Perl for scripting. There are still countless scripts written in Perl and still be written in Perl, but Python seems to be gaining on the percentage of new scripts being written. There are Python libraries for all types of different domains. For example, in my post Significant Software Development Developments of 2013, I wrote about Python and Big Data. Python seems to appeal to a wide variety of developers in the Java, .NET, C/C++, and other development communities where Python is not the predominant language.
Ruby / Ruby on Rails
Although Ruby on Rails is a framework rather than a language, it is Ruby on Rails that seems to have made Ruby famous outside of Japan and so it’s difficult to talk about Ruby’s influence without considering Ruby on Rails’s influence. Ruby has popularized many object-oriented concepts that were available in other languages that never reached Ruby’s level of adoption. Ruby’s treatment of everything as an object (no primitives) and its powerful use of dynamic mechanisms in conjunction with object-oriented principles made combined object-oriented structure with a dynamic language in ways that Perl’s bolted-on object-orientation could not achieve. Ruby on Rails popularized the concept of configuration by exception that is prevalent today, but was lesser known (Maven, Hibernate, and JavaBeans for example) before Ruby on Rails and the specific and catchy nomenclature of “convention over configuration.”
If we were to measure programming languages by the ratio of influence on other languages and frameworks to existing code base written in that language, Smalltalk might have the highest ratio of them all (though ALGOL would give it a run for its money in terms of code still deployed today). For its relatively small deployed code base, Smalltalk has had tremendous influence of frameworks and much more widely used programming languages (including Java and other object-oriented languages). Smalltalk has influenced other languages’ syntax and concepts (such as everything is an object) and has had obvious influence of today’s IDEs.
I won’t talk much about Visual Basic here because I’ve already touched on it at least tangentially in the Basic and C# coverage, but it has been one of the world’s most popular programming languages at one time and influenced many developers who got their hobbyist and professional starts with that language. It has also influenced software development through early IDE innovations that provided a glimpse of what Java and other programming language IDEs could (and would) become.
The languages described in this section are descriptions I have added since the post was originally published.
Nicolas Frankel‘s (@nicolas_frankel and current DZone Dev of the Week) Tweet reminded me I had forgotten to include Java on my list (despite Java having the most personal influence on me of all the programming languages). I rectify that here with the paragraphs I intended to include in the original post.
Given Java’s ubiquity in academic and professional programming environments, numerous developers have written Java at one time or another and the sheer number of developers exposed to Java conveys its impact on software development in general. Many new language designers still compare and contrast their languages to Java.
Perhaps Java’s biggest influence on programming was its introduction of the JVM and the many benefits associated with a virtual machine. The JVM allowed for better support than most languages had been able to provide for the “write once run anywhere” paradigm. Not only did this increase the ease of portability of Java applications, but it helped many of us start to think that maybe it is best to have data types have the same memory size regardless of the platform for which the application is written. Java’s garbage collection mechanism was an almost-too-good-to-be-true feature for those of us who had primarily been using languages that required developers to carefully manage their own memory deallocation. The ability to manipulate Java byte code after compilation has led to numerous JVM-based dynamic languages and was one of the reasons that aspect-oriented programming was arguably best implemented in Java-based products such as AspectJ and the Spring Framework.
One of the first things that impressed me about Java was the Javadoc mechanism. I loved being able to include in-source comments that were generated into documentation viewable in a web browser. As internet use grew, the availability of the standard JDK API, Java EE API, and libraries’ and frameworks’ APIs online was a huge benefit and many other languages have since emulated this feature.
I had never considered the power of reflection or introspection until using Java. Java continues to add reflection capabilities such as method handles in Java 7 and the new java.lang.reflect.Parameter class in Java 8. The ability to programmtically access details about the internals of the virtual machine and even of running applications themselves was a concept introduced to me by Java’s Java Management Extensions (JMX).
Java’s emergence occurred in the era of we C++ developers (among others) grasping concepts covered in the Gang of Four‘s book Design Patterns: Elements of Reusable Object-Oriented Software. Java introduced features built into the language that formalized some of this book’s concepts for us. In particular, the Java interface makes implementing many of the patterns outlined in that book easier. Java also included features that have led developers to make decisions about coding based on practical experience rather than simply theory. The best example I can think of is Java’s introduction of checked exceptions. Whether loved or hated, Java’s implementation of checked exceptions and unchecked exceptions has helped many developers to form opinions based on actual experience on those concepts.
Thanks goes to Nathan Green and Valery Silaev for also pointing out that I neglected to mention Java. Valery emphasized the same VM advantages Java touted and emphasized trust and performance gains in a virtual machine environment. Nathan had the same thought of me about the virtues of documentation generation from source code that Java made mainstream with Javadoc. Nathan also points out that the JVM supported some (minor in my opinion) languages before .NET was born. I maintain that .NET’s (forced out of necessity but, as Nathan points out, not entirely successful) support of one of the world’s most widely used languages (Visual Basic) being able to call libraries written in the new hotness (C#) was what really helped us to see what was practical and commercially viable on large programs.
Other JVM Languages
I’m not going to single out languages other than Java that run in the JVM in this post, but they are unquestionably influencing software development, particularly among existing Java developers. Groovy has helped me to embrace my inner scripter and Scala has helped me see more clearly the dangers of mutable state and the value of functional programming. Clojure, Kotlin, and Ceylon are also challenging the ways Java developers think and introducing new concepts, some of which even make it into Java itself. These alternate JVM languages bring many of the concepts and influences of non-Java languages (Ruby, Lisp, Erlang, etc.) to the Java developer without leaving the comfort of the JVM. The best examples of this last point are JRuby (for Ruby) and Jython (for Python).
In my post Why PHP Will Be My Next Language, I wrote about some of the reasons I was giving PHP another chance after really not liking what I saw when I first looked at it in the late 1990s. In many ways, I think that same post is a reflection of how PHP has been positively impacted by developers’ experiences with other languages and cultures. There is no doubt that PHP has had a huge impact on web development. PHP has been a “gateway language” for many new web developers. It’s easy mixing of presentation and server side logic has irritated some of us, but been seen as an advantage to others. It has reminded me that no rules in software development are absolute.
Numerous major web platforms are built on PHP and provide PHP APIs. The ubiquity of these necessarily means that developers cannot help but use and be influenced by PHP as they write for these platforms. It is interesting to me that the web page Past programming languages and their influences on today’s languages and programming paradigms is powered by PHP even though PHP is not mentioned specifically in the article. It sounds something like a Java-oriented blog not featuring Java as one of its languages that has contributed to software development.
Thanks goes to Valery Silaev for mentioning my neglect of PHP in this original post.
The recent interview article “Security is one of the biggest problems for the IoT right now” reminded me that I missed Ada on my list. Although Ada today fits Jamie Ayre’s description in that article (“[Ada]’s certainly a niche language, it’s not C, it’s not Java”.), Ada was much bigger historically and has had tremendous impact on software development. AdaCore‘s description of Ada states, Ada is a modern programming language designed for large, long-lived applications – and embedded systems in particular – where reliability and efficiency are essential. … Ada 95 was the first internationally standardized (ISO) Object-Oriented Language.”
Erlang is described on its main web page as “a programming language used to build massively scalable soft real-time systems with requirements on high availability.” The Don’t Drink Too Much Kool-Aid section of Learn Us Some Elang for Great Good! does a nice job of contrasting what Erlang is good for with what it’s not as good for. Erlang’s concurrency-oriented models have influenced developers and other languages. Why Erlang Matters and Why I Program in Erlang are also interesting reads about Erlang and its influence on developers.
Software developers today have more programming languages to choose from than ever before. No one language is best in every situation and the variety of languages with different sets of advantages and disadvantages provides the consumer (developers) with many choices. Competition is good for the consumer and has driven improvements in the languages we use. One of the advantages of working with different programming languages is the ability to learn paradigms and concepts that can be applied to some degree in the work we do even with other programming languages. Although I definitely prefer some languages over others, I recognize that all major programming languages have their faults (or situations they aren’t the best fit for) and all major programming languages have their advantages (or situations where they are one of the best fits for).
I undoubtedly missed several important programming languages in this post and also undoubtedly missed several important features of some of the covered languages that have impacted software development in general. Feedback adding these languages or language features is greatly appreciated.
- The Most Influential Programming Languages of All Time
- The Graph of Programming Languages
- A Chronology of Influential Computer Languages
- Cobol Doesn’t Belong in a Museum
- Fortran: The Pioneering Programming Language
- Influential Programming Languages, Part 1: ALGOL
- Influential Programming Languages, Part 2: Simula
- Influential Programming Languages, Part 3: Smalltalk
- Influential Programming Languages, Part 4: Lisp
- Past programming languages and their influences on today’s languages and programming paradigms
Original posting available at http://marxsoftware.blogspot.com/ (Inspired by Actual Events)
Something to Consider as Java Tops the Programming Charts
By Dennis Chu, Senior Product Manager, Coverity
For development teams, it may be obvious: Java is one of the top programming languages today. Approximately 9 million developers are currently working in Java; it’s said to be running on three billion devices and the language continues to evolve almost as quickly as the changing technology landscape. But, as the story goes, the rise to the top isn’t always easy.
While Java continues to grow in popularity, it has also been linked to a number of vulnerabilities over the years – due in large part to hackers capitalizing on its widespread use. So much so that Apple moved to pull Java entirely from its Mac OS X and its products at the end of 2012.
Further, during the summer of 2013, flaws in Java were linked to growing security threats for some Android device users who owned the much-hyped digital currency Bitcoin. The vulnerability enabled hackers to tap into the digital wallets of these Bitcoin owners, exposing a serious risk for both the new monetary system and the Android operating system.
One of the most recent blows for Java came from its link to HealthCare.gov, the website that continues to make headlines as developers work to fix the programming errors that caused the site to come to a crawl – only about 5 percent of the expected 500,000 health insurance plan enrollments were able to occur in the first month of the site’s launch. HealthCare.gov was developed with Java on top of Tomcat, and while the causes of its errors are many and complex, coding and architecture design flaws were no doubt part of the problem.
Despite the shortcomings exposed over the years, Java has a large number of effective testing and development tools. But even so, given the persistence of issues, it’s become clear that these tools are not being leveraged properly. This is presumably due to poor development testing discipline or weak processes in place within organizations.
After reviewing a number of open source Java projects via our Coverity Scan service – which helps the open source development community evaluate and improve the quality and security of their software – we found similar levels of quality and security issues for Java relative to other languages, such as C and C++. So it turns out that just because Java is one of the most widely used computer languages, it doesn’t guarantee higher quality software.
Some advice for developers coding in Java, or any other computer programming language for that matter: be vigilant. Make an emphasis to select the right tools that will provide the right framework and process to allow your organization to test early and often. This will enable your organization to avoid potential nightmares down the road – for example after it’s been released to customers, when it’s too late.
Using the right technologies and best practices are still the best safeguards to ensure high-quality software. Fixing a flaw during the development process will cost only a small fraction of what it will cost to fix a defect after the product has been released – and that’s not including the damage to your brand and reputation.
On the road ahead, no matter what language tops the charts, it’s important to view testing as a critical investment rather than an unintended expense.
The article above was contributed by Dennis Chu of Coverity. I have published this contributed article because I think it brings up some interesting points of discussion. No payment or remuneration was received for publishing this article.
Original posting available at http://marxsoftware.blogspot.com/ (Inspired by Actual Events)
At the end of each calendar year, I like to summarize some of the most significant developments in the software development industry that happened during the year that is ending. The choice of these is entirely subjective and obviously colored by my own experience, background, perceptions, and preferences. Not worrying about the opinionated content of such a post, I now present the developments in software development that I consider most significant in 2013.
Gradle appeared to me to enter the mainstream consciousness of software developers in a big way in 2013. I have been watching Gradle’s development and playing with it a bit for some time now, but I have noticed that numerous open source projects now mention it prominently, it’s referenced in many recently published Java books that aren’t even about Gradle specifically, and Google selected Gradle to be delivered with its Android Studio product announced at Google I/O 2013. It took a while for Maven to breakthrough and compete with Ant and I think 2013 is seeing the beginning of Gradle’s breakthrough to challenge Maven and Ant for predominance in Java-based build systems. Three books devoted to Gradle (the short Gradle: Beyond the Basics, the more comprehensive Gradle in Action, and the German Gradle: Modernes Build-Management – Grundlagen und Praxiseinsatz) have listed 2013 publication dates.
Gradle‘s rapidly rising popularity is nearly matched by its torrid rate of new releases. Gradle 1.4 (“faster builds that use less heap space”), Gradle 1.5 (“optimizations to dependency resolution”), Gradle 1.6 (improved Task ordering, “JaCoCo plugin for test coverage,” and support for JUnit test categories), Gradle 1.7 (“fastest Gradle ever”), Gradle 1.8 (performance improvements and more native languages support), Gradle 1.9 (bug fixes and HTML dependency report), and Gradle 1.10 (“command-line usability features”) were all released in 2013.
Gradle’s success does not surprise me. It’s Groovy foundation alone offers numerous advantages: Groovy scripts are easier to write procedural build-style code than is XML, Groovy has numerous syntactic shortcuts, Groovy is easily learned and applied by Java developers, Groovy has full JVM access, and Groovy includes built-in Ant support. On top of its inherent advantages from being built on Groovy, Gradle builds many useful and attractive features of its own on top of that Groovy foundation. Gradle adheres to several Ant and Maven conventions and supports Ivy and Maven repositories, making it straightforward to move from Maven or Ant+Ivy to Gradle.
Ruby on Rails helped bring Ruby into mainstream international prominence and, to a lesser degree, Grails helped do the same thing for Groovy. Gradle has the potential to pick up where Grails left off and push Groovy even further into the spotlight.
9. Trend Toward Single Language Development
For several years now, there has been a definite trend toward polyglot programming (polyglot persistence was even on last year’s version of this post). Although this trend is likely to continue because some languages are better for scripting than others, some languages are better suited for web development than others, some languages are better suited for desktop development than others, some languages are better suited for realtime and embedded device development than others, some languages are better suited for scientific computing than others, and so on. However, I have seen indications of the pendulum swinging back at least a bit recently.
A final example of the trend back to a single language in many environments is the use of Python in scientific computing as covered in the post The homogenization of scientific computing, or why Python is steadily eating other languages’ lunch.
I also don’t want to imply that this is the end of polyglot programming. I don’t see any programming language that is the best fit in all cases and there is no doubt that the most valuable developers will be those familiar with more than one programming language.
8. Internet of Things
I first heard about the concept of the Internet of Things at JavaOne 2012 and it got even more attention at JavaOne 2013. Oracle is not the only company touting the Internet of Things. IBM is into the Internet of Things as are many others.
Some believe that 2014 will be the year of the Internet of Things. Tori Wieldt has called “Java and the Internet of Things” one of the “Top Java Stories of 2013.” In 2013, two series in Hinkmond Wong’s Weblog have focused on the Internet of Things with featured posts on a Thanksgiving Turkey Tweeter and on a Christmas Santa Detector.
Other useful articles with differing opinions on the Internet of Things include The Internet of Things: a tangled web, Here’s the Scariest Part of the Internet of Things, The Internet Of Things Will Be Huge—Just Not As Huge As The Hype, Five Challenges For The Internet of Things Ecosystem, The Internet of things will not arrive in 2014, CES 2013: The Break-Out Year For The Internet Of Things, and Here’s Why ‘The Internet Of Things’ Will Be Huge, And Drive Tremendous Value For People And Businesses.
On a lighter (or more dire, depending on your perspective) note related to The Internet of Things, Aaron Pressman writes, “The whole crazy ‘Internet of Things’ movement to put everything under network control seems tailor made for Hal” (2001: A Space Odyssey).
7. Mobile Development
6. Responsive Design
At the end of 2012, Pete Cashmore predicted that 2013 would be the “Year of Responsive Web Design” because of its “obvious benefits”: “You build a website once, and it works seamlessly across thousands of different screens.” I like Jordan Larkin‘s explanation of responsive web design:
The term “responsive web design” (or responsive mobile design) refers to websites that change and adapt their appearance for optimum viewing on all screen sizes, tablets, smartphones, ipods, kindles along with desktop and laptop computer screens. Occasionally, in the digital arts industry, it is called “fluid design”, “adaptive website design” or “RWD”. Unresponsive websites do not change to fit different screen sizes, which means they can be difficult to navigate and look at on smaller devices.
As a person who is using a smartphone for an increasing percentage of my daily online activities, but still uses the laptop frequently and the desktop occasionally, I am appreciating firsthand the web site authors whose web sites and pages work well on all of these devices. It’s often satisfactory to have two different web sites (one for mobile devices and one for everything else) from a consumer point of view, but this obviously means essentially duplicate code for the site developers. Even from a consumer point of view, there are times when I find the mobile version of a site lacking in features and in those cases it’d be preferable to have the regular site on all devices as long as that regular site appeared nicely on all devices.
2013 has been a big year for Node.js. There are numerous blogs and articles written on it on seemingly a daily basis. Some of these articles include What You Need To Know About Node.js and Node.js keeps stealing Rails’ thunder.
Big Data holds the same #4 spot on my list as it did last year. Apache Hadoop and the R Project are just two examples of popular products/languages riding the Big Data wave. Python too, is increasingly being chosen as the programming language of choice for working with big data sets.
Readers of java.net recently answered a survey regarding Big Data in which the closest thing to a consensus seemed to be that “Big Data Is Probably Significant, but not too Surprising.”
HTML5’s success is even evident in languages not considered part of HTML5 themselves. For example, one of the most heavily advertised new features of Java EE 7 is its HTML5 support. Recent versions of NetBeans IDE (considered primarily a Java IDE despite its multiple language support) have also seemed to emphasize HTML5 among their most important new features in 2013.
As more information is online and we depend increasingly on availability of our data online, security continues to be an important issue for software developers. The trend of highly visibility security incidents continued in 2013. These incidents affected Ruby on Rails, Java, and other languages. The increasing frequency of security patches led Oracle to change how it labels the versions of Java SE.
An early 2013 article, Safeguard your code: 17 security tips for developers, outlines tips developers can take to improve the security of their applications. An earlier article in 2013 spelled out the increasing security concerns companies face. The book Java Coding Guidelines: 75 Recommendations for Reliable and Secure Programs has also been published in 2013. The 10 Biggest Security Stories Of 2013 outlines some of the biggest security-related stories of 2013.
1. Technical Dysfunction
Sadly, from a software development perspective, 2013 may be most remembered for the high profile technical glitches that occurred. Words like “debacle,” “disaster,” and “meltdown” have been associated with these issues and, rightly or wrongly, have reflected poorly on our industry. The most high profile dysfunction has been the embarrassing United States healthcare site healthcare.org. However, the issues that affect reputations and customer confidence have not been limited to government. Wal-Mart and Target, two major retailers in the United States, have had notable web site issues in the latter part of 2013 as well. Cloud-impacting technical dysfunction has occurred in 2013 in several notable cases including Amazon Web Services (AWS) and Google (including the search engine).
There seems to be plenty of blame to go around, but it seems difficult to get a good read on exactly what has caused these high profile technical failures. With healthcare.org, for example, I’ve seen people blame all types of different culprits including not allotting enough time to the effort, not being agile enough, being too agile, failing for despite agile approaches, failing to estimate user load correctly, getting government involved, etc. Although the real reasons are probably multiple and varied in nature and probably interest software developers more than others, the perception of our industry has gotten dinged up in 2013.
Although the developments in software development listed below did not make my top ten, they are significant enough to me to make this “Honorable Mention” category (in no particular or implied order).
One of the benefits of XML many years now has been the ubiquity of XML support across different languages, tools, frameworks, and libraries. For example, I recently wrote about how easy it is to use Groovy to search Subversion logs because Subversion makes its log output available in XML format and Groovy knows XML well.
JSON has been very popular with developers for some time now, but there have been many cases where standard libraries and tools that supported XML did not support JSON, meaning that developers had to write custom writing/reading code for JSON when using those libraries and tools. I’m beginning to see a lot more JSON support with tools and libraries now. Programming languages are also providing nice JSON parsing/writing capabilities. For example, Groovy has had JSON support for some time and Java EE 7 (JAX-RS 2.0) includes JSON support via the Java API for JSON.
Java EE 7 Released
Java EE 7 was officially released in 2013. In a testament to Java EE’s current widespread use and expected potential use of Java EE 7, book publishers have already published several books on Java EE 7 including Java EE 7 First Look, Java EE 7 Essentials, Beginning Java EE 7, Java EE 7 Recipes: A Problem-Solution Approach, Introducing Java EE 7: A Look at What’s New, and Java EE 7 Developer Handbook.
Although I’ve never embraced JavaServer Faces (JSF), the feature of Java EE 7 that has been most interesting to me is the support for Faces Flows. I first read about this feature when reviewing Java EE 7 First Look and Neil Griffin‘s post Three Cheers for JSF 2.2 Faces Flows have reinforced my interest in this feature. In the post A Realistic JSF 2.2 Faces Flows Example, Reza Rahman supports my opinion that this is a key feature in Java EE 7 to watch with the quote, “Faces Flows are one of the best hidden gems in Java EE 7.” Michael and Faces Flows might persuade me to give JavaServer Faces another look.
A recent blog post shows integration of AngularJS with Java EE 7.
Single Page Applications
See the description of Meteor below for another nice explanation of how web development is moving toward what is essentially this concept of single-page applications.
At this point, famo.us is still in beta, but it could be big in 2014 if it is able to deliver on what is advertised in 2013.
There is a shift in the Web application platform, and specifically, people are starting to write a new kind of application, what we call a thick client, where most of the code is actually running inside the Web browser itself rather than in a data center. This is an architectural change from running the software in the data center and sending HTML on the wire to a model where we have data on the wire and the actual rendering, the displaying of the user interface, is happening on the client. … That’s why it feels more interactive. It’s not page-based like the old Web. It’s much more engaging.”
Having a witty acronym helped advertise and communicate the LAMP stack (Linux, Apache HTTP Server, MySQL/MariaDB, PHP/Perl/Python) and arguably contributed to the adoption of this combination of technologies. With this in mind, I found Valeri Karpov‘s post The MEAN Stack: MongoDB, ExpressJS, AngularJS and Node.js interesting. The post’s author is another who points out the productivity advantages that can be gained from using a single language throughout an application. There is already a book underway: Getting MEAN with Mongo, Express, Angular, and Node. It will be interesting to watch this newly minted terminology and see if the stack and its name come close to the success that the LAMP stack and its name have enjoyed.
Commercial Support Dropped for GlassFish 4
Although it took longer to happen than most people probably anticipated, Oracle’s dropping of commercial support for GlassFish 4 was formally announced in 2013 and is what most of us expected when we heard of Oracle purchasing Sun. The future of GlassFish is certainly cloudier now and expectations for GlassFish’s future range from it being essentially dead to it thriving as the reference implementation.
IntelliJ IDEA 13 was released earlier this month. The release announcement highlights support for Java EE 7, improved Spring Framework integration, improved Android support thanks to IntelliJ IDEA Community Edition being used as the basis for Android Studio, improved database handling, and “refined Gradle support.” Eclipse is often the IDE chosen for building a more specialized IDE such as Spring IDE (Spring Tool Suite), Scala IDE, or the new Ceylon IDE, so it’s a particularly big deal that Google chose IntelliJ IDEA as the basis of its Android Studio.
Speaking of Eclipse, the seemingly most used Java-based IDE (especially when you consider the IDEs derived from it or based on it) also saw new releases in 2013. Eclipse 4.3 (Kepler) was released in 2013. There were also numerous popular plugins for Eclipse released in 2013.
Visual Studio 2013
Groovy’s 2.0 release (including static compilation support) made 2012 a big year for Groovy. Although 2013 did not see as significant of enhancements in the Groovy language, the year did start out with the announcement of Groovy 2.1. Perhaps the biggest part of that 2.1 release was Groovy’s full incorporation of Java SE 7‘s invokedynamic, a major Java SE enhancement intended for non-Java languages like Groovy.
In The Groovy Conundrum, Andrew Binstock writes that “with the performance issues behind it, Groovy is a language primed for widespread use,” but warns that Groovy is a language that is “easy to learn, but hard to master.”
As is mentioned more than once in this post, Groovy has had a lot of additional exposure in 2013 thanks to Gradle’s rapidly rising popularity. I believe that Gradle will continue to introduce Groovy to developers not familiar with Groovy or will motivate developers who have not looked at Groovy for some time to look at it again.
It seems to me that Scala continues to gain popularity among Java developers. I continue to see Scala enthusiasts gushing about Scala on various Java and JVM blog comments and forums. One piece of evidence of Scala’s continuing and increasing popularity is the number of new books published in 2013 with Scala in their title. These include Scala in Action, Scala Cookbook: Recipes for Object-Oriented and Functional Programming, Functional Programming Patterns in Scala and Clojure: Write Lean Programs for the JVM, Scala Design Patterns: Patterns for Practical Reuse and Design, Play for Scala, Scala Object-Oriented Programming, and Getting Started with SBT for Scala.
The Go programming language has had strong backing from Google and continues to receive significant online coverage. Go 1.1 and Go 1.2 (with apparently improved performance) were both released in 2013. Of special interest to me is Go’s advertised source code backwards compatibility for all versions 1.x.
2013 was a big year for Apache Camel, the tool that “empowers you to define routing and mediation rules in a variety of domain-specific languages.” Camel-related developments in 2013 included the release of 2.11.0, release of 2.12.0, and release of 2.12.2. These frequent releases and the addition of a new committer and PMC member are among the signs of a healthy open source project.
The release of the Camel Essential Components (DZone Refcardz #170) kicked off 2013 for Camel. Camel got increased attention on software development social media sites in 2013. Zemian Deng‘s Getting started with Apache Camel using Java was syndicated on Java Code Geeks (as was his Apache Camel using Groovy Introduction) and Niraj Singh‘s Introduction to Apache Camel was also syndicated on Java Code Geeks. AndrejV‘s entire blog Just Did Some Code has so far (5 posts in 2013) been devoted to coverage of Camel!
It’s still early to tell because Spring Boot is currently only at version 0.5, but Spring Boot has potential to be be widely adopted and used in the future. It looks like Spring Boot is inspired by and takes advantage of some of the best ideas in Ruby on Rails and Groovy and applies them to easy generation of Spring Framework-based applications.
As stated earlier, Big Data is big and Python is getting a share of that Big Data action. The Continuum Analytics post Python for Big Data states, “Python is a powerful, flexible, open-source language that is easy to learn, easy to use, and has powerful libraries for data manipulation and analysis. … Python has a unique combination of being both a capable general-purpose programming language as well as being easy to use for analytical and quantitative computing.” Tal Yarkoni echoes this statement and observes that his “scientific computing toolbox been steadily homogenizing” on Python.
Python 3.3.1, Python 3.3.2, and Python 3.3.3 were all released in 2013. Cython has joined Pyrex as an alternative for easily writing C extensions with Python syntax and there is even a book on Learning Cython Programming.
The article Python 3.4.0 goes to beta with slew of new modules talks about some of the new features coming with Python 3.4.0 (beta) such as a standard enumeration construct. The article also points out that one of the biggest frustrations with Python remains: the two versions of the language (2.x and 3.x) and no easy route from 2.x to 3.x. From a Java development perspective, I find this interesting because there was a time when arguments like Bruce Eckel‘s (“People who don’t want to deal with these changes don’t upgrade, and those people tend not to upgrade anyway”) seemed logical and sensible. However, it’s not quite as easy as it sounds, particularly when one starts to realize the impact of this on the entire set of products, libraries, and frameworks written for a language that can be heavily impacted and perhaps not usable for some time if ever with the new language.
PHP and HHVM
At the beginning of 2013, Gabriel Manricks outlined reasons Why 2013 is the Year of PHP. Specifically Manricks described tools such as Laravel (including Eloquent ORM), Composer (dependency manager, including Packagist), and PHPUnit (test-driven development in PHP).
The Facebook project HHVM (HipHop Virtual Machine for PHP) was initially released in 2010, but seemed to see a lot more attention in 2013. The original HPHPc compiler compiled PHP into C++ and was another manifestation of the drive to use a single language for authoring an application even if its compiled form was different. The availability of the open source HipHop Virtual Machine (HHVM) for PHP should help address performance issues with PHP; that is seemingly Facebook’s primary reason for developing it.
Interest in cloud computing remained strong and continued to grow rapidly in 2013. Many of the other items discussed in this post (Big Data, security, technical dysfunctions, etc.) have strong relationships to cloud computing. For more on the biggest cloud stories on 2013, see The 10 Biggest Cloud Stories Of 2013.
Internet Explorer 11
I have not used Internet Explorer except when forced to for a number of years. For a long time, I used Firefox almost exclusively and in recent years I’ve used Google Chrome almost exclusively on PCs and Firefox on Linux. When I have been forced by a particular web site to use Internet Explorer, I have done reluctantly and am reminded of the much slower performance of the browser than I’m used to in terms of startup and even navigation. I have noticed over this Christmas break, however, when I had to install Internet Explorer 11 manually because the automatic process kept failing, that it’s a lot faster than even Internet Explorer 10 was. I still won’t make it my primary browser, but it’s nice that it performs much better when I do need to use it (such as to play Atari Arcade games without advertisements).
Internet Explorer 11 offers advantages for developers as well as users of the browser. Advertised benefits for developers (and by extension for users of these developers’ applications) are improved standards compatibility, new F12 developer tools,
It’s not all positive for Internet Explorer 11. Some people seem to want to downgrade to Explorer 10 and reportedly Internet Explorer 11 is presenting some problems for users of Microsoft’s own CRM application (after earlier reportedly breaking Google and Outlook access).
It surprises me a bit that the main Microsoft IE URL (http://windows.microsoft.com/en-us/internet-explorer/download-ie) referenced by the Internet Explorer 11 Guide for Developers still advertises downloading of Internet Explorer 9, a version of that browser that Google has already stated they will no longer support.
Windows 8 Not As Successful
Windows 8 seems to be experiencing similar disappointment after Windows 7 that Windows Vista experienced after Windows XP. In fact, The 10 Biggest Software Stories Of 2013 states, “So it looks like Windows 7 will become the new Windows XP — better get those downgrade rights ready.”
The Raspberry Pi continues to catch a lot of interest (2 million had been sold as of October of this year). There were seemingly endless posts on how to do a wide variety of things with the Raspberry Pi. Some of these that stood out most to me are Premium Mathematica software free on budget Raspberry Pi, GertDuino: An Arduino for Your Raspberry Pi, How an open-source computer kit for kids based on Raspberry Pi is taking over Kickstarter, Running OpenJFX on Raspberry Pi, and Simon Ritter: Do You Like Coffee with Your dessert? Java and the Raspberry Pi.
The 10 Biggest Software Stories Of 2013 points out that “Cisco, Google and VMware last year invested in Puppet Labs” and that “another DevOps player, Opscode, raised $32 million and changed its name to Chef, the name of its flagship product.”
The conversation of whether everybody should or code write code and develop software continued in 2013. Jessica Gross’s writes about 10 places where anyone can learn to code and Megan O’Neil’s article A Start-Up Aims to Teach Anyone to Write Computer Code features one of these places (Codecademy). Kevin Lindquist writes that software development isn’t just for coders anymore. Katie Elizabeth lists the reasons why everyone should learn to code while Ch Continue reading
From now through 3 January 2014, Packt Publishing is offering any of their extensive collection of books (they estimate the number as over 1700) in electronic format for $5 (USD) each (deal also applies to videos available on their site). This is simi… Continue reading
I find myself using analogies (or the closely related similes and metaphors) to illustrate points I am trying to make in various facets of software development, especially when talking with someone new to or less familiar with software development. The… Continue reading
I have written before (2007, 2008, 2009, 2010, 2011) on my biased perspective of the most significant developments in software development for that year. This post is the 2012 version with all my biases and skewed perspectives freely admitted.
10. Gr… Continue reading
Earlier this month, I decided I wanted to write a post on not all optimization being premature optimization after hearing more than one developer use this mantra as an excuse for not making a better decision in the same week. Bozhidar Bozhanov beat me … Continue reading
The 1994 book Design Patterns: Elements of Reusable Object-Oriented Software introduced many software developers to the concept of “a catalog of simple and succinct solutions to commonly occurring design problems” that nearly every object-oriented soft… Continue reading