StackOverflow came out with a 2015 summary today that showed many things. One of those things is which technologies people have the most questions about. What is interesting about these rankings is they may hint at those technologies most in use to build software. I picked up a few insights from the list.
I also found my way over to Quora with some questions of my own that others have asked about software development. Curious questions about the main software development technologies used by leading companies in information technology. I gather a few insights from this brief look at the surveys.
Learning a Language
I begin with Gruff Davies who, on Quora, is approaching 3,000 votes on his answer about learning a language in general. He says it is about intensity. You cannot spread out learning, you have to do it in a short, intense period of time and it must be about 600+ hours of effort. You will feel stupid sometimes but if you keep at it, you will break through.
You will want to prepare in advance. Life balance is important such as sleep and normal activity. His response on Quora contains many details worth a look. I see it as getting better at anything is about willingness, persistence, and the right life conditions to learn and then apply.
One of my Experiences in Learning a Programming Language
I think Gruff Davies is on to something. The memories need to fit together and that is more likely in a compressed window of time in which the activity is self reinforcing. That can apply for many areas of time.
I can attest to that in C# programming in which I became much better at it after 2 intense years of use where I built up thousands of hours of experience working overtime on C# projects. I had learned C# many years before, but it was a build up that accelerated through intense use that made a difference in how well I applied it.
In a slight digression, Vivek Nagarajan had a great comment on what constitutes the highest form of intelligence. His one sentence response receiving nearly 9,000 upvotes is spectacular.
Coding Something Others Already Have Done
Carlos Del Carpio presents a great tale of how Dropbox got funded. The founder of Dropbox reminded the investors that even though others did what Dropbox is attempting to do, his approach will be a better way. The point is that if you are drawn to do something, don’t let the fact that someone else is doing it deter you all other things considered. It may also prove to be the right journey for applying technology process in a way that is valuable in both understanding and shared practice.
The Hard Challenges in Software Development
Flaws can be inevitable in writing software. Some flaws require more effort and process than others. Brian Schmitz who interned at Google, responds with a list of problems that can be particularly intractable for those writing software to contend. The answer received 3,500 votes as of this writing and is a good list of real-world issues everyone will face if their solution ever gets enough use. Multiple answers each with greater than 4,000 votes was summarized in a post on Quora.com titled, What is a coder’s worst nightmare?
Career in Software Development
Michael O. Church has 2,000 votes on his statement about the career path for those who engineer software. The progression of his account about the path from the first job to a stable career is highly credible and worth a study for many.
A person I know who deals with technology careers told me that they are seeing fewer people go into software development. They wondered why. It seems more people are available for roles in systems administration and networking, but not software. The reality of why is clear to me but that is a topic for another day. Michael O. Church does put forward a good outline about a career doing code.
What the Top Tech Companies Use
The real reason for my visit to Quora was curiosity about what the big tech companies use. It is trivia I track every so often although I gave it a rest for a few years. It was time to update my understanding of which technologies have the momentum from the largest tech firms.
Java, and derivatives of such, is the most used language/platform for web development for request/response processing followed by PHP.
- Google’s top language internally seems to be C++ which is used to build the search engine, the foundation of Google. Jeff Nelson, stated as having invented Chromebook, says no language is higher in priority but I think the results speak for themselves. I have read other articles that are explicit that Google prefers C++. Jeff Nelson also mentions that Java is used heavily for things like the advertising network. Python is used across the board to fill in the blanks.
- Twitter’s top language internally is Ruby according to Jane Huang.
- Apple is heavily invested in C and C++ to keep iOS and OS X ticking as stated by Dan Zhang.
- LinkedIn is geared towards Java for the request/response side.
- Amazon uses Perl in a way similar to PHP whereas in other areas they are heavy users of C++ and Java according to a former employee of the name, Charlie Cheever.
A 2007 article talks about the growth of Amazon.com. I found the technological evolution to appear chaotic compared to corporate enterprise technology. However, the lesson is what works to build higher technology may not fit into the standard approaches used to support other kinds of technology processes.
Disdain for PHP
I am not against PHP. Some fall in love with technologies, they are all tools to me. I prefer tools that align with my goals of simplicity, speed, reliability, and flexibility to create results that are solid. As a tool, PHP is one of the languages I have studied. I never had the occasion to use it because the environments I have been in where better addressed with other things. I drift towards technologies that are a combination of highly structured, flexible, and efficient. Earlier versions of PHP and JSP did not fit those criteria for me, but as the years go on, a forth criteria of practical, in a broader context, means that PHP has a lot going for it.
Others may not have kind words for PHP. I have read many comments on PHP over the years. The majority of them are criticisms of the technology. I eventually discount criticisms of PHP on the following basis. It drives a majority of the Web.
Several attempts to answer why PHP has a bad reputation among certain groups is found in a post on Quora headed by Jordan Ambra. The statements are familar as are other comments on the post. The criticisms across multiple websites can be summarized as follows. Code aesthetics.
Front-end Web Development at Top Tech Companies
Front-end Web Development at Quora
An excellent post answered by the founders of Quora sheds light on why they went with Python despite some of them having worked at another large tech company that heavily use PHP. The bottom line was they were more comfortable with Python and that is often at the root of language choices.
They also point out some reasons why they did not go with C# and .NET even though Mono was available. They also contrasted Python with Java for their creation of Quora. The insights are useful to anyone wanting to understand the basis for certain technologies from the standpoint of high volume web sites as of this writing.
Their analysis and arguments in favor of combining Python and C++ for web development is compelling. I never thought about it that way, but their view point makes sense. That said, I do not think their approach is accessible even though they demonstrate that it works very well.
Future Backend Web Development Technologies
It seems that the best technologies to learn for the future will be Google Go or Python for server-side data processing. I came to this conclusion based on the well written post on Quora by Tikhon Jelvis describing Google Go versus C in which he clarifies that Google Go is actually a replacement for Java and Python.
Google’s Go language is often said to be a 21st century version of C. I don’t know about all that. What Google Go tries to do is be as simple as C which means it will be vastly easier to learn and apply but avoiding the structured programming gaffes others use to criticize PHP. One of the creators of Unix and C, Ken Thompson, also helped create Go. I imagine some of what he learned over the years exists in Go. That whole wave is going to be interesting.
I think it is fair to say Google is one of the largest web companies pushing the frontiers of web technology. They are making huge moves in the area of containers with their partnership with CoreOS to push Kuburnetes and cluster oriented philosophy for distributed computing. I thought Microsoft’s WCF programming technology would be a way in that direction, but it was not to be. Recent news about Google and CoreOS suggests to me that a great build up is on the way in terms of how systems are operated. A side-effect will be in software programming that will be more streamlined. Google Go and Python may be among the leading choices in such an effort.
C++ versus C
A trio of respondents collectively provide what I think is a good analysis of C++ versus C. I have written about this in the past, but I would like to refer to their comments on Quora for brevity. Philippe Roy, Vivek Nagarajan, and Loïc Caquelard do a great job summarizing the two languages. Basically, C is easier to learn, master and put to use but C++ has more features to use out-of-the-box that can speed up the creation of more complex programs.
The better language depends on your situation but C is at the foundation of many technologies. A more certain view is headed up by Joe Wezorek in which he and others indicate that C++ reduces the need to reinvent things as you would in C and if you want straightforward support for object-oriented programming, C++ gives you that. Then there is the productive capabilities of the STL. Other discussions about C++17 shows huge changes in store for the language.
Not on Quora, but something I viewed recently is another view comes from Scott Meyers. He gives a talk a great video presentation for the 2014 D Conference titled, The Last Thing D Needs. I reviewed one of his books and was interested in what he had to say to audience. I watched with great interest as he proceeded to concisely prove his views on C++ in the context of the D programming language.
A classic comparison of languages is offered by Costya Perepelitsa when discussing compilers. He goes down the rabbit hole from Java to electrons to explain why some use Java instead of C or electrons to write programs. None of that discounts the other choices, but is an exercise in pragmatic selection.
In the end, this is all great trivia but what really matters is what we do and why. I wrote an article some time ago titled, Microsoft WinRT and API Proliferation, that talked about the whirlwind of technology changes with Microsoft technology. I observed that the outward appearance and structure of technology can change but your progress, despite adopting the latest forms of technology, can often be no further advanced than in earlier versions of those technologies.
Essentially, you are keeping up with what can be termed innovation theater. I wanted to escape innovation theater and embrace solutions that had excellent longevity and evolution in which you go beyond perpetually learning tools for the sake of learning tools to learning better ways to apply those tools. Tools can be improved and genuine improvements can be useful to learn and apply. At the end of the day, it is about application. Taking a concept and making it a reality.
That is a question I sought to answer beginning in 2009 after 10 years (I started in web development in 1998) of trying various things. I spent a tremendous amount of time in 17 years as of this writing learning tools and processes. Looking forward, I think there is a better way. It involves a fundamentals first approach that strives not to stray too far in the direction of excessive design and perhaps reigning in your tools. Often, this is in contrast to the requirements for enterprise technology, but it can work well for technology requirements of start-ups or truly innovation oriented situations. It is the approach at the center of effective application of technology.