I surprised there was no mention in the blog post or the comments so far about the homework factor. It isn't just personal side projects that people are working on over the weekend. I am betting the relative percentage of CS students on the site is also much higher on the weekend. Tags like assembly, pointers, algorithm, recursion, class, and math are all rather vague. Those topics are all discussed at length in CS classes, but if you are working on a real world project in those fields, odds are you will tag it with a more specific technology you are using rather than the abstract theory behind it.
EDIT: On second look, Python, C, and C++ are also the go to languages for CS classes (along with Java but that is also a big enterprise language unlike the other three.) Almost this whole list seems to be schoolwork related.
Yup, seeing the top 10 list made me immediately think of homework assignments.
In the real world, programmers don't take their questions with "recursion" or "pointers" very often. Nor is Assembly a common language for side projects.
This definitely seems like a case of students simply being relatively overrepresented on weekends.
Suppose you have 10000 posts tagged with #MIPS #assembly, 8000 tagged with #x86 #assembly and 6000 tagged with #arm #assembly. Then you have 10000 tagged with #MIPS and 24000 tagged with #assembly.
Funny, when I saw the top 10, Edward Kmett came to my mind. He is likely the most prolific Haskell hacker, but he also recently started a side project writing some graphics shaders for VR in C (when he was younger, he was in the demoscene community).
What are you saying "no way" to? Of course there are classes using Unity but I am very certain the bulk of these questions are not school related. Just look at any of the big Indie Game groups on Facebook.
The first was part one of a graphics sequence. That class goes on for at least one more, although I stopped after the first one because it wasn't really my cup of tea. The second was one of the project courses required to finish the degree - it was also part of a two part series.
I went to ut austin and after a long time using haskell for intro classes the administrators succumbed to temptation (and possibly pressure from dell/ibm for wage slaves) maybe ~10 years ago and started using java.
It was kind of horrible because the professor for (at least one of the) intro classes reproduced cons, car and cdr from lisp and had us construct a bunch of data structures out of this monstrous java lisp hybrid.
point being probably only top tier cs depts use haskell.
It was around when Dijkstra died that UT switched away from Haskell to Java. And yes, from what I've heard from several faculty members around in that period, a lot of it was from external pressure from large regional employers (some of which you have mentioned).
Learning Haskell can teach students a lot of very important concepts that can shape their view of programming and problem solving for the better. It's not impossible to learn these things with other languages, and of course there are many things you might not learn using Haskell, but that's why you typically learn several programming languages in the course of a university education. In any case, it's not that hard to learn Java, and I would certainly look more closely at a resume that listed Haskell proficiency. Almost every resume I see lists Java.
Also I second another poster's point that universities are not trade schools. I think it's a little sad if a department stopped teaching Haskell because of industry pressure, because the goal of a CS program is to teach CS, not to teach whatever programming language is on top of TIOBE.
On a philosophical note, the goal of CS education is not to score Java internships.
On a practical note, learning a language like Java is not the hard part if you were taught properly. With a solid theory foundation (for which Haskell knowledge covers a great span of content), learning any production language to a practically useful degree should take a couple weeks at most.
I'd much rather hire an intern that has a solid Haskell background and never used Java before than the other way around. Even as a pure Java shop. Especially as a Java shop that is using Java 8.
In the absence of proper trade schools they end up adapting (or been forced into) offering something that looks a lot like a trade school.
I've maintained for years (since I was at college in the 2000's (UK meaning of college not US)) that programming education should be two tier, the theoretical tier at university and the practical tier using the traditional trade school model.
Taking another domain there is a lot of difference between the person doing the load bearing calculations on the bricks and structures and the person laying the actual bricks.
I've always fallen more into the latter camp naturally, I like to build things and I learn the applicable theory as and when I need to and you can get a long way with experience and a little theory when you can leverage the underpinning work of other people.
It's interesting to note that in the UK the apprentice/master model sorta exists already if you squint in the difference between junior/senior developer when done 'correctly' anyway though at the moment due to developer demand the meaning of 'senior' has degraded down to a couple of years commercial experience apparently.
Around here they always advertise themselves with slogans like "an education for the real world". I think they became trade schools but still haven't realized it.
Honestly, a statement about Haskell. Haskell just makes certain core concepts about programming and computer science really obvious and clear. Also the discipline Haskell's purity and type system forces on you leads some pretty good habits that I try to keep in mind no matter what language I'm programming in (which these days is 90+% python or JavaScript).
The predictable comment that learning Java is not necessarily an education is being repeatedly responded to here. I clearly should have included a response to this sort of argument in the original. Since I didn't, and since I can't edit now, I'll do it here.
1) Does learning Java keep you from learning CS concepts like pure functions and category theory? Obviously not. It may not be completely natural, but people do unnatural things in the name of an education all the time.
2) When you hire an intern these days, it's pretty expensive. The internship ends up being a trial employee, especially if they're a rising senior. The employer wants to get as much valuable information about the intern as they can. They may contribute actual production code, but probably not if it's Haskell. More importantly, you learn more about their ability to work with your environment (and they learn whether or not they want to work there) the closer you get to the internship being as close as possible to being a newgrad employee. Haskell is cool, but it will probably get in the way of many of the valuable things an internship can provide both parties. And I want to reiterate that these aren't cheap. You often end up paying the intern new grad wages normalized for the length of their internship, and it's not atypical to pay for housing on top of that, plus various events, time taken from to bring them up to speed on a team, etc.
3) MIT is teaching Python in its intro course. If having Haskell or any other academically "interesting" language is so important then they are doing a great disservice to their CS students. What are the chances this is true? I think it's much more likely that the MIT intro course language is either an uninteresting choice or very specifically chosen to be of interest to non-academics. Now, I don't think MIT is necessarily the be-all end-all in CS education, but is anyone prepared to argue they are worse than UPenn, which uses OCaml in a similar course? (I'm a fan of OCaml too, fwiw!)
> They may contribute actual production code, but probably not if it's Haskell.
Not only can interns learn new languages on the job, but any student worth hiring probably knows multiple languages already. The argument here is that theory courses should be in a theoretically sound language; that doesn't preclude students from learning corporate-approved languages as well.
For what it's worth, I picked up new languages in two of the internships I did in college. It never took me more than a week or two, and happened contemporaneously with me figuring out the codebase and dev environment. In at least one of those, which was a JavaScript codebase with many functional elements, having a strong functional background as well as a strong imperative background was what allowed me to comprehend it without too much effort.
> then they are doing a great disservice to their CS students.
I'm inclined to agree. This is, of course, a matter of opinion.
> It was kind of horrible because the professor for (at least one of the) intro classes reproduced cons, car and cdr from lisp and had us construct a bunch of data structures out of this monstrous java lisp hybrid.
What a creative (if hardcore) way to circumvent a bureucratic requirement :)
What proportion of people asking questions do you think are students vs professionals/other nonstudents?
Seeing as most people are only students for 4 years of their life, I would be surprised at how much students contribute to this change. I also can't think of a reason as to why students would be asking more questions on weekends vs weekdays.
Especially for the big difference in Haskell, I just can't imagine its largely caused by students since most students will probably only get to use it for one or two courses.
Students are much more likely to ask lots of questions. Far more difficult projects are often due on a Monday or Tuesday to give students the weekend to finish up, the exact kind of projects likely to elicit questions at the last minute.
At least when I was a student, I would be pretty unlikely to ask on Stack Overflow because I'd probably need answers quickly and not want to wait for a response, but I don't expect everyone to be like me.
I also don't even feel like my assignments were typically due on Monday or Tuesday. I remember often students would ask their teachers to make their assignments due Friday instead of Monday.
> At least when I was a student, I would be pretty unlikely to ask on Stack Overflow because I'd probably need answers quickly and not want to wait for a response, but I don't expect everyone to be like me.
Many classes have assignments over a week or two. It absolutely makes sense to ask SO for questions.
If anything, there was less urgency to my homework questions than there is to my current professional ones.
> I also don't even feel like my assignments were typically due on Monday or Tuesday.
While I had my fair share of assignments on Monday, that doesn't need to be true to explain this. Even if you assume that students work equally throughout the week on homework, they'd represent a larger percentage of developers during the weekend (when professionals are much less likely to be working).
I would have expected HW to be only a small proportion, but I'd also expect think terms like "pointers, algorithm, recursion" to be much more common for HW.
If Hw, would correlate annually with semesters (noting that SO is internationally popular, and different countries have different schedules).
Also, I'd have thought that with weekend projects you're more likely to find things out by experimentation and reading the documentation than by asking questions. With work or classroom projects, you have to work with a fixed spec, a prescribed technology, all sorts of Best Practices, and deadlines. Weekend projects give you much more freedom in all four respects.
Exactly and plausible Haskell weekend shift explanation may be that it's just difficult language and/or not many people are using it in real projects (during work week).
The funnel shape of the scatter plot immediately reminded me of an article on the insensitivity to sample size pitfall [0], which points out that you'll expect entities with smaller sample sizes to show up more often in the extremes because of the higher variance.
Looks like the tags with the biggest differences exemplify this pretty well.
I also saw that triangle shaped plot and had the same thought. I read a great paper about this recently [0] with some of the same examples as the link in the parent, but going a little further in depth.
I originally got on this topic when reading Bayesian Methods for Hackers [1]. I am still hunting for a good method to correct/compensate for this when I am doing these types of comparisons in my own work.
When I was writing my thesis I wanted to correct for that as well, and weighted my data by the log of the sample size. This made intuitive sense to me, and both my advisors seemed to agree, though neither of us found compelling papers for this.
It really doesn't matter - at least, not for the statistical error the parent is talking about. The effect isn't related to whether we are sampling from a larger population of programmers.
Suppose there were no difference between the usage of each language, and people just program on the weekends vs weekdays with some probability independent of language. Then, if a language has lots of users, it will likely have close to the average weekend/weekday proportion. The fewer users the language has, the more likely that it has an uneven weekend/weekday proportion just by chance. And if you plot the weekend/weekday proportions vs. the number of users, you expect a funnel shape just like the one in the article.
Therefore, the plot in the article - by itself - provides no evidence that there is any difference between the usage of different programming languages.
I think it's just that they are plotting sum vs ratio of two random variables. Try this (in R):
a <- runif(1000); b <- runif(1000); plot(a + b, log(a/b))
Also, they likely have a low-end cutoff (notice their x axis starts at 10^4. If you do the same to the above plot, you get even closer to that exact shape. Try:
It could also be that the most popular languages in the corporate world are a compromise somewhere in between enjoyable/exciting and horrible/boring. (My assumption is that a large weekend ratio correlates with enjoyable/exiting.)
The ratio of sample sizes in the OP also isn't that bad, and none of them are very small.
Can you normalise data like that based on a confidence interval? Just rescaling the graph to unify them seems wrong, (it would answer something like "what do we think the distribution would look like if we distrusted the low end?") but maybe there's a better way?
A confidence interval won't adjust the points (point estimates) but will give those points with a lower sample size wide confidence intervals (often covering zero).
Using an (empirical) Bayesian multilevel model can both attach uncertainty intervals to the point estimates and appropriately "shrink" the estimates towards zero at the low-sample-size end.
The latter is more directly interpretable, at the cost of slightly more complex modelling (/assumptions).
One way I use Stackoverflow’s dev stats is to make educated guesses about the easiness of finding developers in 2-3 years time to maintain now-greenfield projects. Does Ruby seem to go down while Python is in steady growth? Let's move away from Rails. Swift is picking up steam? It's safe to switch from Objective-C. This dataset seems to be just fantastic for that.
In my opinion, that's what's wrong with the world. Chasing tech, pick something solid and stick with it. I have seen developers barely get decent in one language only to drop it and learn a new language. Picking up the basics of a language is easy, but it's knowing the nuisance that separates the professional from the amateur.
> Picking up the basics of a language is easy, but it's knowing the nuisance that separates the professional from the amateur.
I disagree.
I went from C# to Node.js and back to C#. I learned the hell out of JavaScript, and yet I feel like nobody will ever care that I can explain some of its nuances and gotchas. Language nuances are constantly evolving anyway.
Learning Node.js unlocked whole paradigms I didn't understand in C#. I never really "got" functional programming. Switching between the two helped me understand the pros and cons of different approaches. I discovered a lot of the things I miss from JavaScript are actually there in C#, just a little off the beaten path. On the other hand, I can appreciate "the C# way" and breathe a sigh of relief that certain gotchas do not exist in that environment.
> Learning Node.js unlocked whole paradigms I didn't understand in C#. I never really "got" functional programming
Don't get me wrong, but I'm pretty sure you still don't get functional programming, because functional programming is not practiced within the Javascript / Node.js ecosystem.
Yes, there are some exceptions here and there, some libraries like Facebook's React have FP-inspired ideas in them (even though those components are modelled with state and hence have nothing to do with FP) and working with asynchronous results signalled by callbacks is so freaking horrible that people have began using Promise abstractions sort of inspired by FP, except most of them broken. But no, unless you're into one of the languages that actively promote FP, like ClojureScript, PureScript, Elm, Scala.js, then you're probably not doing FP.
As evidence, go to GitHub, pick any sampling of Javascript projects and witness how a vast majority have nothing to do with FP.
Furthermore I think that with this argument you're proving the parent's point. If you want FP, then take the time to learn and work with one of the languages that actively promote FP and be prepared to suffer because it's not easy.
Whilst it's true that one can program in a functional style in almost any language, I fail to see how javascript would help someone learn about functional programming.
It's true that you can program in a functional style in almost any language, but it's just simpler for Javascript. Functions are first-class objects in Javascript, and arrays have built-in forEach, map, reduce, and filter -- all useful for a beginner in functional programming. C++ and Java have lambdas and foreach, but they aren't as simple to use.
Functional Programming is about working with mathematical functions. Having "first-class functions" in the language is nice, but then passing function pointers around is nothing more than procedural programming [1] and yes, the difference is huge.
As for those utilities you mention, Javascript is the most broken of them all:
Why does functional programming have to be about math?
That is precisely the kind of insistence that prevents people from adopting functional languages for real world programming tasks.
JavaScript certainly lacks language level support for function composition, but it has the basic tools to allow you to build combinators and compositional functions yourself, and when dealing with functions as data you often find you can elegantly refactor code by building such a thing - so in terms of 'learning about functional programming' JS can be a great workbench to help procedural minded programmers discover those tools by discovering and building them.
So maybe JS doesn't teach functional programming, but it does at least introduce you to paradigms from which it is possible to see the benefits of a functional language.
Of course, if you then hear that those languages are only for doing math in then you'll stick with JavaScript.
> Why does functional programming have to be about math?
Because that's its definition. Change that definition and it becomes meaningless. Functional programming is about working with functions that always have the same output for a given input - the definition of mathematical functions and I wouldn't have to say mathematical if software developers wouldn't feel the need to overload technical terms. Pascal and other languages had great names for pieces of code taking arguments and that aren't functions: procedures, routines, subroutines, etc.
> That is precisely the kind of insistence that prevents people from adopting functional languages for real world programming tasks.
So let me get this straight, in order to get people to adopt something, you want the definition changed in such a way as to become meaningless?
Also, I do expect software developers to know at least high-school level math, because CS is math. Even if you lack a formal education, that's no excuse for ignoring theory that can help in your daily work, especially in this day and age with so many online resources available for free.
> Why does functional programming have to be about math?
You've misunderstood the GP's point. It's not that FP is about math, it's that you want to emphasize mathematical functions -- functions that don't rely on inputs other than their parameters and return values in a consistent co-domain. This is just good style to improve testability and minimize sources of potential bugs.
There is nothing wrong with map, reduce and filter, but I believe this is just conflating nice and usable APIs for iterators with functional programming.
the way JS does closures, and the mandatory async nature of everything, leads to a world where you're working with functions a lot more than you would be in languages in the same family (garbage collected, lenient, a la python and ruby). from there, functional programming concepts like partial application and currying start to pop up. if you dive into frameworks like react.js, you start to encounter pure functions and immutability. it's not what I would call a "functional programming language", but I find the concepts show up more than usual, and I think that's because functions are one of the more advanced primitives in the language
It's much easier to be a rockstar developer when the pool of developers is so small. The game of chasing the "best" technology is pretty much a ponzi scheme.
"Picking up the basics of a language is easy, but it's knowing the nuisance that separates the professional from the amateur."
From learning perspective correct. I don't think developers chase new languages, I think it's more, play 'catch up to latest language' to be more employable. You would hope companies, CTOs, lead techs choose languages to solve the unique business problems. Language choice looks more, to me, like taste. Like choosing something ^nice^ from a menu at a restaurant depending on what is palatable.
I can't tell, I know many developers today who are on the new shiny js thing, golang, elixir, scalar, rust train, but they never got really good in their first language be it Java, python, or php.
They use linux or OSX. But they don't know awk/sed/bash, give em a very simple problem, they would write 1000 line of OOP, united test code when a few line of scripts would solve it.
I know many programmers, who graduated with a CS degree, they go out of their way to implement ridiculous rule engines and overly complicated systems, when they can just use prolog and glue their app to prolog.
I've witnessed many so called fullstack developers who break out in cold sweat at the sight or thought of writing SQL. They want an ORM.
This is what I call chasing, new things, when the old things are rock solid. I see this today, where people cry about PHP, but yet don't even use it's good features. Go use NoSQL solutions but never even had a clue about their SQL DB.
> They use linux or OSX. But they don't know awk/sed/bash
Am I in the minority of developers then? I don't know awk and sed and I'm honestly not very interested in learning them. But bash I definitely agree with. I still use a cheatsheet to get the syntax right because it's weird as hell imo.
I don't think you are in the minority, assuming you have a reasonable way to quickly parse text. I think most developers just Google for one-liners or throw something together in Python to solve text-parsing tasks at hand, rather then trying to remember which tool uses which type of regex with which argument.
The primary point was one of mindset, but the second example in the cited section is a tailor-made sed example:
Let's say you're on my team, and I've decided I'm a real stickler for code formatting. But I've got peculiar tastes, and one day I decide I want to have all parentheses stand out very clearly in your code.
So let's say you've got a set of source files in C, C++, or Java. Your choice. And I want you to modify them so that in each source file, every open- and close-paren has exactly one space character before and after
Y'know - after thinking about it a little, I'd argue that this is a question that could serve a second purpose. The obvious out-of-the box implementations of this in sed/perl/etc. would all fail to properly handle open and close parens in strings and comments. Particularly multi-line comments and strings with escaped quotation marks inside of them.
I like sed. I like perl one-liners. I would consider it a mistake to try to do this on a real codebase in a batch manner with just a regexp. You'd be far better off googling to find a source code formatter that includes a real parser, like clang-format.
The question specification is such that you don't need special handling of comments, strings, etc. "every paren" isn't qualified as "that is part of the code".
The point of the question is more to gauge your understanding of/familiarity with available tools and ability to think laterally rather than immediately jump to "I've got to write some real code to solve this"
I'd probably reach for ANTLR to write a quick parser since working with such a stickler is likely to require more code formatting changes in the future.
As an aside, the stuff I used sed/awk for in the past have pretty much been replaced by Python for me. These days it's pretty rare to not have a default Python install on any Unixy box one spins up and in the rare cases I use Windows I tend to install Anaconda so it's also slightly more cross-platform for my use cases.
If you're getting along fine without awk then by all means, don't learn it. But just today I had to quickly get a raw list of all US area codes (and only area codes). After a short Google search, I realized the fastest way of downloading and formatting it without having to do a secondary step was this:
Now, could you use grep? Yeah, sure. But for really quick examples like this - things that lend themselves to it (e.g. a raw CSV with mostly crap you don't need but something you do), this is super fast. Anything more complicated and I'd break out a regex, though.
awk and sed are fantastic for command line processing of text. You really should take a look at them. All that said, if you don't find yourself trying to do something in bash and thinking "there must be an easier way" then you're problem sets may just not need them.
"I don't know awk and sed and I'm honestly not very interested in learning them. But bash I definitely agree with."
Awk/Sed are optimised for text/data processing.[0] While Bash might work, will the script work on all systems (and version)? [1] awk & predecessor sed are good for one liner programs and suitable for problems that need fast, reliable solutions.
reference
[0] Opening, closing files; reading, breaking and counting record fields.
Then again, sed works differently on different platforms, and awk is not the same as gawk or nawk, both of which have many more features than standard awk. If you're used to the GNU implementation, you might be surprised to find your script doesn't work on a system without the gawk implementation.
On Linux, I can use this sed command: sed -i ‘s/^”//’ example.txt
That deletes any quotation marks that are at the beginning of a line. It does it in-place, and while you have the option to rename the old file and replace it with a new file with the original name (using "sed -i.bak ‘s/^”//’ example.txt" would move the existing example.txt file to example.txt.bak and write a new one in-place), if you leave out the .bak, it just writes it in-place with no backup file.
On OS X, though, that command won't work. You have to specify a backup file, even if it's blank. "sed -i “” ‘s/^”//’ example.txt" would replace the text in-place without a backup. sed -i “.bak” ‘s/^”//’ example.txt would replace the file and move the original to "example.txt.bak".
Even with sed and awk, you still have to stop and wonder if it will work cross-platform.
This is why I have gripes about the OS X command line. I can't confidently use the scripts I do on Ubuntu/Mint/Debian. Like, get with the program, Apple. It infuriates me and I'm moving entirely off their platform as soon as my Mac kicks the bucket.
OS X is not Linux. It's a BSD-derivative, and doesn't use the GNU toolchain. It isn't that it's "not with the program." It's that it's not the operating system, or toolchain, you're familiar with. Install homebrew and GNU tools[1] if you want them.
If you used an operating system that shipped with BusyBox, you'd be similarly frustrated. But operating systems are tradeoffs with pros/cons. Using a different set of tools makes it distinct, not "out of date".
Well the beauty of one-liners is that they're quick and dirty. They don't need to be portable, you don't usually maintain a one-liner for years. If you need something portable, you should use a real cross-platform language like Perl, Python, etc. Something that's independent of the OS you're running.
There is no reason to use perl in situation when awk kicks its butt with clearer, shorter code free of distracting sigils and other line noise
Awk is also POSIX standard; a good remaining reason to use it (if it is a feasible alternative for a task) is that a script has to be portable outside of GNU/Linux.
I like Perl a lot better than awk, buy I do agree with the general sentiment of using the language that makes for the clearest code for the task at hand, especially the smaller ones. Which makes me a frequent awk proponent.
So I'm surprised at the following part of your comment:
> There is no reason to use perl in situation when awk kicks its butt with clearer, shorter code free of distracting author and other line noise
In my experience, the shorter ask code tends to be the one with sigils.
But in a lot of ways awk seems way more modern than Perl (Perl 5 at least). You actually have functions with parameters rather than having a weird @_ array that you need to shift values from. Honestly, if I didn't know otherwise, I'd think awk came after Perl.
I think that's fair enough, but I'm not sure I equate one to the other. Your examples are complaining about a lack of exposure to different kinds of tools that already exist rather than lack of depth in tools that the developers use.
Although grossly unfair, it's sometimes instructive to split people in two categories in order to consider a point. With that in mind, I notice that there are programmers who want to learn as little as possible in order to get the job done. They want tools to make things easy for them so they don't have to understand the underlying concepts. How many times over the decades have I had to unwind bad commits in source code repositories because some programmer refuses to learn how to use the software directly and leaves their IDE to do it for them? Same again for build systems. How many times have I worked with programmers who refuse to understand what a pointer is, because now that we have GC apparently we don't have to worry about leaking resources? How many programmers never bother to learn the syntax of the language, preferring to generate snippets and cut and paste from StackOverflow (or back in the old days, you would have entire applications built primarily from cutting and pasting examples from MSDN)?
Yeah, this is a problem (and has been a problem for as long as I've been a professional programmer -- i.e., a long time ;-) ). But the people who are chasing after the new shiny don't really exhibit that attitude for me. To the extent that everybody who wants to work tomorrow has to keep learning, no good developer is exempt from this. But I find the people who really chase new stuff without getting a proper grounding in the old stuff have a few overwhelming things in common. They are young (to the industry). They are excited. They want to learn.
My experience has been that if you show them the very, very cool things you can do with awk/sed/bash/prolog (Really? You use prolog!? I'm seriously impressed) they will get similarly excited by that.
I'm pretty new to the industry, being young, but as soon as I got a machine to run a Linux VM on, I spent hours reading docs and man pages and books on Bash and general *nix commands. Definitely helped me become a better programmer. It's amazing what you can do with simple POSIX commands. I didn't even know about sort until now, but it'll help me a bunch now.
Run `info coreutils` and get a general sense of the tools available. There are things you'll use all the time like sort, uniq and wc. Things you'll use occasionally (`foo | column -s $'\t' -t` reads all the lines of standard input, splits each on a tab and then lines everything up in nice columns) and things you might rarely need, but when you need them they're amazing: tsort, for example, is really useful for managing dependencies in certain circumstances.
Agreed for the most part, although we should acknowledge that those "new and shiny JS things" make for some extraordinary RAD times and generally don't take too long to learn (at least to become productive). They may have serious limitations, but for side-projects developers can get to an MVP with haste.
They probably meant nuance, but I think the biggest part of experience is knowing all the nuisances (especially in the accompanying development environment) and how to get around them.
Company I work in still uses Delphi 7. Professional environments don't want language hipsters, they want developers. Developers can and do adapt to the environment they happen to end up in, be it haskell, c or Delphi. And they can find pleasure at work once they are used to it.
Somewhat related, if you're looking to compare tags from StackOverflow, I made this site[1] a couple years ago to quickly visualize how many questions and answers are out there for given tags.
I use StackOverflow tag count as well as Google Trends and GitHub star count to get a rough feel for how much people are using certain things, such as version control software[2], databases, or view engines in Express[3].
The answer might be as simple as "people tend to work on games on the weekend", either as hobby projects or that professional game developers work weekends more often, skewing the weekend results away from serious enterprise apps. This would explain both the rise in low level languages but also things like OpenGL, Unity3D and Actionscript 3. It doesn't explain Haskell, of course, but I think the Haskell explanation in the article is accurate.
I don't think the number of questions asked correlate with which languages are used the most. My weekends are mainly Java, but I don't need to post on stack overflow because all of my questions have been already addressed.
Yeah, this is basically what I came to say. Haskell's search volume could be because it's more difficult to use than other languages, or is more poorly documented. It would certainly explain Sharepoint being so high during the work week, having struggled with Sharepoint Configuration Mountain before.
You're right. Score one for misleading graphs next to each other though. The X axis scale for the right one makes it look much more dramatic than the left side, which is actually the real story.
To be honest I find Haskell as one of the better documented languages. Hoogle + Hackage module documentation and being able to look straight at the source code is great.
I guess newbies will find some of the compile messages hard to understand compared to more standard languages, however.
Haskell is the land of deep concepts that lead to huge powers.
Hoogle will already tell you most of what you can learn to small, fact-focused, objective and unanimous explanations about real code. SO intellectual avoidance rules hit much before people can explain anything useful.
I don't see how this would matter. The datapoint is tag frequency on weekends for a given language compared to tag frequency on weekdays for the same language. It isn't using absolute numbers nor is it comparing cross-language.
> I don't think the number of questions asked correlate with which languages are used the most.
That's why the post works in ratios of weekend to weekday. Regardless of how much more or less likely someone is to ask about one language than another language (e.g. because they're already familiar with it), the numbers in the OP should still indicate relative usage amounts at different times.
...which means quite a few Saturday mornings in Asia have been counted as weekdays and many late Friday nights in the Americas have been counted as weekends.
It would be great if StackOverflow had information on the local timezone that the question was asked in. Seeing Mon-Fri 9-5 vs other times would be interesting.
If Stack Overflow doesn't retain the local time zone for posts, they could just use the subset of UTC weekend hours that don't overlap business hours in any time zone.
I can see room for lots of false assumptions when reading this data.
What if Haskell never changes the rate at which it is discussed - but all the entry programers doing the 9-5 job go away on the weekends helping Haskell to be "louder"? What if the people with homework ask more on the weekend than during the week?
What if certain developers don't post questions tagging a language - but rather tagging an algorithm knowing they can implement it in whatever language they need?
Sharepoint should have been a great product for small to medium businesses, as well as government departments but yeah, it had horrible, horrible implementation and deployment issues. How I wish it had less .Net centricity and more adaptability to build or consume services in other languages and protocols - it could have been a killer business platform...
I work for a pretty large organisation (multiple office sites, multiple countries etc). Our intranet runs on sharepoint and every time I've had to edit a page or create a new page etc I find it frustrating as hell and don't get me started on permissions problems.
From the users perspective it is pretty handy. There are a heap of non technical people (HR, accountants, operators etc.) Being able to drag and drop spreadsheets from a Windows desktop into a sharepoint library is almost a killer feature makes it very easy for non technical people to collaborate on documents across multiple sites (provided the aforementioned permissions problems do not occur).
Our plant operators use it to upload overtime spreadsheets and share them between shifts, people use it to share powerpoint slide decks for meetings and upload the minutes afterwards etc.
I'm from the generation before we had Sharepoint back then we used Mapped network shares to move documents around (or emails - but we had 50mb limit imposed by exchange) - permissions issue were even worse.
We recently started using Facebook's "Workplace" which is basically a private facebook instance for our organisation. People are starting to use that instead of sharepoint - from what I've seen anyone can make a "group" in workplace and it is so much easier then setting up a sharepoint page.
Adoption is pretty slow but some teams are starting to use workplace groups rather than sharepoint for recurring meetings etc. So I'm hoping it will finally kill Sharepoint here.
Even when you know .net it still feels alien. When it comes to custom development it's much easier to create an app from scratch than it is to integrate with sharepoint.
Unfortunately, when you move on to another job, your "much easier" app becomes an orphan. I have seem this happen multiple times.
The hot shot developer creates his own thing because it is too much of a hassle to do in SharePoint. Then the developer moves on. And the "much easier" app slides into a slow decline and one day dies because nobody know how to fix it.
One thing that caught my eye is that at least of the tags included in their scatter plot, there appear to be more weekend searches than weekday searches on average overall, especially for the most popular tags. (And note that the X axis is logarithmic, so those will have a much larger effect on total searches.) I wouldn't have expected that. Perhaps weekdays are more geared toward 'getting things done', so weekends are when people have time to learn.
Microsoft should really take note of that. That's a huge tick on their woefully uncool meter. Developers, developers, developers, developers don't want to use Microsoft gear unless they're being paid, it would seem.
I think part of their problem with weekend developers stems from dropping VB6. They used to be "the largest block of developers in the world" [1] and then around 2003 they made
"... Visual Basic.NET not backwards-compatible with VB 6.0. This was literally the first time in living memory that when you bought an upgrade to a Microsoft product, your old data (i.e. the code you had written in VB6) could not be imported perfectly and silently. It was the first time a Microsoft upgrade did not respect the work that users did using the previous version of a product." [2]
Personally I'd hate that stuff. Probably why most of the weekend languages are open source and can't be discontinued by some corporate overlord.
Take note of what exactly? That less people are asking questions about VS2012, now that VS2015 and VS2017 are out?
Also, amount of questions is not necessarily a good way of measuring a languages popularity. If a language is easy to use, it could have a large following, but not many questions. Hard to draw meaningful conclusions from the data posted imo.
If you are talking about Sharepoint specifically, then you should mention that in your post. Microsoft has a lot of products, just because one is losing popularity doesn't mean they have lost their focus.
Old Python, I like that. Sounds like my manager in a recent conversation: "Don't say [competing product name], say 'the legacy [product type]'. It drives home the idea that our product is the future and that product is the past."
I'm not making any judgement on the status of the Python community, just appreciating your choice of wording.
Haha, since Subversion was born in the height of XML frenzy, they figured it was a good idea for the built-in web interface to just output XML and a default XSLT. That way if anyone wanted to customize it, they could do so to their heart's content by just specifying a different XSLT.
I loved Subversion at the time, and so created the TortoiseSVN Menu plugin [1] for Firefox, and an accompanying XSLT to add lots of rich info and styling into the main UI.
It's something that should have been pretty simple but I remember spending lots of my free time back then to get it just right. Funny thing is, since I worked on it at home but mostly used it at work, I really could have used a good distributed VCS at the time :D
In my opinion, XSLT is a disappointing implementation of a great idea: a DSL for structurally transforming a data format, encoded in the same data format. I guess S-expressions fit the bill if you want to use a Lisp, but I wouldn’t mind having something similar for JSON.
I very much agree with your sentiment here. That's why I find Haskell lenses so fascinating. Although it's another level of challenge since it's done on a type level.
> something similar for JSON
And I've looked for this as well. Haven't really tried any solution in the trenches but this one might be interesting for you: https://github.com/mmckegg/json-query
I’m curious why it sounds painful to you. I didn’t mean to imply we should reimplement XSLT in JSON syntax, just that some JSON description of a stylesheet, to be applied to JSON data, could be useful.
It very well might be. My feeling was just more or less: I don't love JSON syntax or the tendency towards big, hierarchical JSON documents overmuch (though it's certainly been a massive real-world improvement on XML for most of the overlapping use cases I'm familiar with), so describing transformations on data in it sounds likely to be unpleasant.
Perhaps one of these decades I will actually learn a Lisp.
I get the feeling that some pieces of software constitute 100% billable / work time. Sharepoint would probably be pretty high on that list. I do confess to studying BizTalk Orchestrations on my own time, but that was for research into the area not the product specifically.
Not even a single Rust mention. Hmmm. Not sure if I'm a weekend-idiot or simply ahead of the crowd. Let's hope it's because of Rust developers both strongly disliking and never experiencing _stackoverflows_. ;+)
Probably because the "rust" keywoard hasn't yet the minimum mass to enter in the graph. It has only 6,000 questions* while only the tags with more than 20,000 are plotted.
Also somewhat related. I made this site to show you the popularity of programming languages on Stack Overflow by countries and US states: http://soversus.com
Python? If noyt it should, because there is no better prototyping/bootstrapping language and definitely there is no better culture than that which emerged around this language.
Only Scheme of old days could be compared to have similar similar balance of features and culture of careful attention to details, which, basically, defines a craft approaching (turned into) an art.
Oh that's a wonderful idea. Someone should - continue to - study the differences between weekday and weekend hacking. Programming languages, but also methods, productivity, value for customers, etc.
The way I would like the world is that the weekend hacking has way better methods, languages, productivity and value for customers.
Seriously, though, if you are going to post the following thing in your article then just reconsider:
"Warning: the following section involves googling usernames and reading the first page of results for the people involved. This may be unethical. I apologize in advance."
Obviously your apology means nothing if you are doing it anyway.
Sidenote: I always feel limiting that you cannot use Haskell in the weekend in your Android or iOS mobile phone or tablet. I think this is a natural environment for learning.
There are some Haskell apps in the app store but they are not official or they are using tricks like executing the code in a remote server.
I was going to comment on this as well. As someone who worked in AS3 heavily but left it years ago, i wonder the cause of this. My guess is not that adoption is increasing, but instead that the expertise has long since evacuated the field, leaving people who work in AS3 hard-pressed to find answers within their departments.
Adobe AIR / Flex Framework was probably also used for lots of intranet or business applications and not only browser based stuff. For these usecases AIR is still actively supported, and I guess a few companies still work on it and maintain their applications.
I also know of a few embedded systems that used Actionscript/AIR for their graphical user interface. These also have a long lifecycle and need to be maintained. Although I doubt that most of these would get any new features.
I haven't been able to find a better animation suite than Flash. You don't have to export to flv, you can make a video from it. But the drawing tools and the onion skin with the ability to layer frames on top of each other, I haven't found anything to compete with it.
And why draw everything by hand when you can script some of the animation with ActionScript?
My weekends are usually pretty rough and unstable, so I went with this one several months ago and it fits well into my life style:
https://en.wikipedia.org/wiki/Brainfuck
Coincidently I've just read several chapters from the Learn you a Haskell book. I couldn't write any serious Haskell project in near future, but learning it has been so much fun. No surprised when many other programmers are touching it on weekends.
LYAH is great for getting a first taste of Haskell! Once you want to write more serious programs, I'd highly recommend that you get http://haskellbook.com/ – it's very well structured and goes all the way to practical, real-world programs.
Wow I'm surprised to see ExtJS on a list of "most used" anything. I mean don't get me wrong it's great if you want to prototype something quick that uses data but for a great UX / real application it's dreadful to use IMO.
This is strange. My wild guess is that 2012 was around the time that every new programmer thought they could get rich making some shitty mobile app. Maybe this represents a temporary skew in web-vs-mobile popularity correcting itself?
Everyone is pointing out potential problems with the methodology, but really this matches up pretty well with experience. SQL, MS Office stuff, boring things like logging, and testing all show up as being about work. Haskell is actually infamous for having an evangelical following and limited real-world uses. And, yeah, your C-like languages work well for both work and side-projects. This all makes perfect sense. The only thing I'm surprised about is assembly being for pleasure (maybe hardware people?), and web stuff being as versatile.
> Haskell is actually infamous for having an evangelical following and limited real-world uses.
That may have been true 15 or more years ago but is not the case any more. I've been using Haskell almost exclusively for the last 7 years for everything from financial analysis to web back ends to, most recently, web front ends.
If anything, it might suggest that the knowledge base coverage is reaching a plateau. It would be interesting to watch how many questions are tagged as duplicates. The ratio is probably increasing.
Visualizations that are more accessible would be great. I have red-green deficiency so I can't differentiate the lines on the charts for the life of me..
Typically people post a question to StackOverflow because they are confused, but it seems unlikely that people are more/less confused about any given topic based on it being a weekday versus a weekend so relative usage makes sense.
This doesn't necessarily mean the most used languages. Probably these are the languages that developers are trying to learn and post the questions. And other languages such as C#, Java have reached certain state that people may not have lot of questions, so certainly the activity would decrease and doesn't mean lot of people don't use these languages.
I'd be more interested in Github commits on weekends vs. weekdays as that is likely to be a better indicator of side projects (due to the "homework factor"). Or maybe Gitlab commits or private Github commits since public Github commits are FLOSS and thus likely to include more side project commits than another data sets.
I didn't see the word "legacy" technology used in the article, but I think a lot of the stuff in the weekday column is exactly what people associate with the word legacy. I mean soap and xslt !? That is straight from the darkest era of bloated J2EE apps.
Actually back in the day, it was Microsoft who was pushing SOAP the hardest. Don Box, one of SOAP's creators, is a "technical fellow" at Microsoft. This is the same guy who coined the term "COM is love". Dark days indeed.
Using SOAP to do programming across networks was also part of their .net "vision" at least according to the marketing I saw, I think this was how it got the .net name in the first place. Then it eventually came out and the reaction was "oh, it's a java clone".
It may be better to group like languages/frameworks and compare them over time:
Django vs rails for example.
Comparing languages heavily used by acedemics may skew things since they often work on the weekends. Or game development languages vs webapp languages.
TL;DR: On weeekends people either do homework if they are students or play with the languages they would like to work with, if they work in some SharePoint salt mine during the week.
According to the infographic, most people spend their week struggling to
get a document out of SharePoint; whereas on weekends, they write cool
algorithms in Haskell, C, C++11 or assembler. This is a surprisingly
accurate reflection of the situation on the ground, from what I hear
from people around me.
Now the question is: how can we swap the weekend for the week, so that
more people can do more of the cool stuff?
I was expecting to see Rust - I thought it was a considerably 'hotter' language than reflected by its current use in the wild.
Also, I find SO's coverage of it lacking. So maybe it's more about people sourcing the information elsewhere - relatively good docs, active and helpful community in IRC, and more Q&A on Reddit (albeit mostly - again, anecdotally - out of date, but still) than SO.
> I was expecting to see Rust - I thought it was a considerably 'hotter' language than reflected by its current use in the wild.
Rust is pretty hot on Hacker News and r/programming, but even working in a systems-language-heavy field, I haven't seen too much mindshare (outside of some friends at Mozilla). It is kind of a shame, both Rust and D are doing really cool things, and I'd love to see more penetration!
I know rust is a systems language and that that can and should remain it's focus. But it does seem high level enough to use as an applications language (which c and c++ are still used for as well).
I'd did speak to a college recently that generally keeps up with new trends and he hadn't heard of rust though, so maybe the community is very small.
Unless I'm missing something that graph's all time - there's definitely tonnes of Python Q&A on SO, and as I (anecdotally) described above, not much Rust.
That graph would be better titled "Have people talked about it".
I realized one factor that might play a role. I came primarily from a C++ background, and back then, stackoverflow and google were paramount and used daily.
Now that I'm primarily using Go, I almost always get my answers from godoc.org (i.e., the documentation of packages), from source code, from the specification, and from trying things on playground. I don't remember using stackoverflow for Go programming questions in years, if ever.
I wonder if that's a property of Go language (great docusmentation, easily readable source, referenceable spec and viability of answering questions via playground experiments) that cause this, and if it applies to other people too.
EDIT: On second look, Python, C, and C++ are also the go to languages for CS classes (along with Java but that is also a big enterprise language unlike the other three.) Almost this whole list seems to be schoolwork related.