More people asking questions on Stackoverlfow is not necessarily a good thing; perhaps that means that it's too complicated for people to use in practice,
Everyone loves programming in Python! You disagree? But it's the fastest growing, says Stack Overflow
Python, which ranks consistently as one of the most popular programming languages, is the fastest growing major programming language, according to coding community site Stack Overflow. Stack Overflow's metric here is visits to website posts tagged "Python" compared to posts tagged with other programming languages – …
COMMENTS
-
-
Saturday 9th September 2017 03:49 GMT cdegroot
Also, not every language community needs/wants Stack Overflow. Reading through the blog post this is a pretty successful press release by SO, not a meaningful exercise in statistics.
(I like SO as much as the next developer because there are a lot of extremely useful answers on the site, but it does seem to me that 90% of the questions asked are by very junior people hacking away in their spare time; as such, Python might receive- probably deserved - laurels as a widespread beginner language; it doesn't say a lot about the industry, though)
-
Saturday 9th September 2017 06:13 GMT Anonymous Coward
Isn't this backwards?
Stack Overflow's metric here is visits to website posts tagged "Python" compared to posts tagged with other programming languages – specifically JavaScript, Java, C#, C++ and PHP.
I would read this as an indication that the language is simply being used for purposes it is not a good fit, and by people who think they can wield it without learning it first.
A little bit like that apocryphal guy who tried to write a visual text editor in FORTRAN-77, then switched to COBOL in frustration when it didn't work.
-
Sunday 10th September 2017 13:09 GMT bombastic bob
Re: Isn't this backwards?
"I would read this as an indication that the language is simply being used for purposes it is not a good fit, and by people who think they can wield it without learning it first."
that's a distinct possibility. I only hit 'Stack Overflow' when I'm trying to get past a particular problem without spending WAY too much time "learning" - I'd rather be SOLVING, thanks. And that's the point. To me Python is "yet another lingo" that I have to deal with because "customer decided" so there you go.
And given my experience with fixing existing python code, which looks like it was written by undergraduate students that learned to code in JAVA first, or worse, C-pound... given my experience with having to fix THAT code, I end up just writing an external C program to do the REAL work, then hit the search engines looking for "how do I run an external program from within python and return the result code and/or stdout back". And then I find out the magic code lines, and "make it so".
And _EVERYTHING_ _RUNS_ _BETTER_ _AFTERWARDS_! [amazing, right?]
But yeah, hacking out a working solution, especially without "paying the dues" with all of that UNNNECESSARY reading of documentation (from beginning to end) first, is what us hacker problem solvers do best.
yeah, the world really IS "results driven"
But as for using Python, it has its uses most certainly, but is _FAR_ from being a "panacea language" especially because it is SO inefficient for SO many things... [30 times faster when done in C in one specific case].
-
-
Saturday 9th September 2017 06:47 GMT Dr Mantis Toboggan
Python is a newbie language pushed as a good introduction to programming, of course there are going to be lots of questions...
Personally I think you would have to be bonkers to use python as a first path into programming, as it's totally at odds with real languages and what the real world uses..
-
Saturday 9th September 2017 08:14 GMT CheesyTheClown
While I have only ever used Python on the rare occasions where it's all I had available (labs on VPN connected systems) and I honestly have little love for language-of-the-month, I don't necessarily agree.
I have seen some great Python code written by great programmers... once in a very rare while. In some cases, this is true of the Open Stack project.
On the other hand, Python gains most of it's power from community contributed modules. As such, it, like PERL, PHP and Ruby before it have libraries for nearly everything. Unfortunately, most are implemented by "newbie programmers" building bits and bobs they need.
This results in about a million absolutely horrifying modules. We see the same happening to Node as well. Consider that Node has probably 40 different libraries in NPM to simply make a synchronous REST call. This makes the platform unusable in production code. When a language has a repository of so many poorly written modules that it is no longer possible to sort through them to find one that works, it becomes almost unusable.
See C++... I use Qt because it provides a high quality set of classes for everything from graphics to collections. The standard C++ library and heaven forbid boost are such a wreck that they have rendered C++ all but unusable.
See Java where even good intentions go horribly wrong. Java on the desktop was absolutely unusually for apps because there were simply too many reboots of the GUI toolkit. AWT was so bad that IBM OTI made SWT and Sun made a bigger mess trying to reboot their dominance with SWING and Google made their own... well let's just say that it didn't work.
I can go on... there should always be a beginner language for people to learn on and then enventually trash. Python is great for now. Maybe there will be something better later. Learning languages should be playgrounds where inexperienced developers can sew their oats before moving on. Cisco for example pushes Python and Ansible to network engineers who learn to code in 8 hours. Imagine if every network engineer or VMware engineer were to start destroying other languages? That would be a million people who have never read a programming book trashing those other languages' ecosystems.
-
Sunday 10th September 2017 04:01 GMT rmullen0
Too many competing libraries
I have noticed the same thing as CheesyTheClown. Namely, that open source is both good and bad. It's good that the source code is available to everything and it's good that it is open for everyone to contribute, but, I think this can be a drawback as well when there are too many competing ways to do things. This is what I hate about Java. Every developer has their own preferred libraries for doing this and that. I would rather just have one library for doing a given thing. One that is robust and works well and that everyone is using. I think this is what I actually hate the most about Java. For any given project, there is always someone using some old crapping library like Struts that should have died a long time ago. Or, you have 15 different ways of doing logging. It is ridiculous. No one just does things using Java EE. Also, I cannot stand frameworks like Spring and it's reflection hell. I honestly don't see how what it does is supposed to be good. It is totally out of hand. Historically, I have preferred .NET over Java for exactly this reason. You install .NET Framework and Visual Studio and you are basically set at that point. No Maven hell. However, now Microsoft has decided to parrot the cool kids, first by parroting Ruby On Rails with ASP.NET MVC and now with .NET Core and NuGet. Modularized isn't necessarily better IMHO. I am fine having things by somewhat monolithic if it means that I am able to implement an application from end to end in a simplified manner. That is not how things are trending. So, as far as I'm concerned the new cool way of doing things by cobbling an app together using 15 different libraries from all across the Internet isn't the superior way of doing things.
-
Sunday 10th September 2017 13:44 GMT bombastic bob
Re: Too many competing libraries
"as far as I'm concerned the new cool way of doing things by cobbling an app together using 15 different libraries from all across the Internet isn't the superior way of doing things."
I made a similar *kind* of point back in the 90's, regarding Visual Basic, and "cobbling together" an application by using VB with a bunch of plugins, modules, 3rd party components/libraries, etc..
And at the same time, rather than mangling my perfectly good C++ code to work with some 3rd party graphics library, I wrote some simple Windows GDI-based algorithms to create 3D looking bars and "did it right" so my bars looked better than their bars in a side by side comparison. And it took less time. yeah, so much for 3rd party library "make it fit" and having to pay a license fee...
[and I'd thumb-up your post except you said favorable things about ".Not" - ".Not" was one of the biggest reasons I shifted away from windows coding]
-
Monday 11th September 2017 13:30 GMT rmullen0
Re: Too many competing libraries
I agree with regard to simply writing code yourself in some cases. IMHO people are too dependent on "code reuse" and think they need to use a third party library for everything. I would rather write a few lines of code than pull in a huge library to do something simple. It is true that one shouldn't reinvent the wheel in general, but, I sometimes wonder if people even know how to code since they seem so obsessed with adding packages to a project.
-
-
-
Saturday 9th September 2017 11:15 GMT K
@Dr Mantis Toboggan
Let me guess, you just graduated? Now go make the tea little padawan!
There are 2 things you need to learn, and quickly:
1) There is no "beginner languages" or "real languages", each language has it uses and its a case of choosing the best for the intended purpose.
2) Elitest (aka newbie) developers who scream "my language is better", typically lack the skill, confidence or dexterity to recognise this, then often leave a mess when they depart as they lacked the insight to recognise point 1.
Broaden your skillset and widen your appeal (as well as salary), or forever be working on the same shit day after day, then when your "real language" goes out of vogue, start panicking that there are insufficient roles and two many "Elite developers" fighting for them.
-
Saturday 9th September 2017 20:59 GMT Just Enough
Extinct
Wow. A lot of elitist dinosaurs evident in these comments.
Python is a nice, clean language that extends to being really powerful when you need it. I've written in more computer languages than I can rightly remember, and there's a lot in Python that made me grin when I encountered it. Because it was almost always a tidy solution to the problem.
And now that it looks like they've finally put Python 2 to bed, I see no stopping Python 3's progress. The reliance on whitespace formatting is unusual at first, but once you learn how it works, it makes complete sense and ensures well presented code that doesn't look like shit.
I realise that some take pride in their code being dense and incomprehensible, but that doesn't impress me. Let them maintain their sniffy aloofness about Python not being a language for real programmers if they wish. But coders of the next decade will be in employment using it.
-
-
-
-
Thursday 14th September 2017 03:18 GMT Yes Me
Re: Extinct
99% of programmers, when they see this:
a[1] = 9
b[1] = 10
What is the value of a[1]?
would answer "9". In the example I gave, the correct answer is "10", because the previous statement a = b simply gives the array "b" an additional name "a". That may be logical within Pythonia but when you have to debug it, it's hardly clean.
-
-
-
Monday 11th September 2017 00:07 GMT ibmalone
Re: Extinct
You're explicitly creating a pointer to the object, it's clear what you're doing. Say you were using the C++ STL, you could create a vector with a copy of another vector explicitly. But in Python it's not particularly clear that what you're doing here is assigning an object reference so a and b apply to the same object (yes, once you're familiar with Python this is less surprising). And indeed the ways of actually copying an array are all a bit weird.
-
Monday 11th September 2017 11:25 GMT Brewster's Angle Grinder
Re: Extinct
"(yes, once you're familiar with Python this is less surprising)."
I'm more surprised when languages don't do that. Javascript and lua both do it, and PHP and perl quickly grew the ability to do it.
It's not just the performance -- references are a fundamental part of programming data structures and I can count on the fingers of one hand the number of times I've wanted to create a copy of an array (and all its subobjects, and all their subobjects...)
-
Monday 11th September 2017 19:33 GMT Richard Plinston
Re: Extinct
> But in Python it's not particularly clear that what you're doing here is assigning an object reference so a and b apply to the same object (yes, once you're familiar with Python this is less surprising).
It has always been very clearly stated that is what happens and was always obvious to me.
> And indeed the ways of actually copying an array are all a bit weird.
a = copy(b), how weird is that ?
or you can create a new list from the existing list with list()
>>> a = [1,2,3]
>>> b = list(a)
>>> b[0] =9
>>> a
[1, 2, 3]
>>> b
[9, 2, 3]
Of course references to complex objects within the list are copied as another reference to the same object, deepcopy() creates copies of the objects too.
I don't know why you think any of this is "weird", it is just like other programming languages.
-
-
Thursday 14th September 2017 03:26 GMT Yes Me
Re: Extinct
The difference is that little star in 'int * b = a' and the fact that that statement is clearly a declaration of a pointer.
In Python, if you write a = b and they are both integers you get a new variable a with the same value as b. If you write a = b and they are both compound objects, you get a new name for object b. That's a dramatically hard bug to find in a large program that relies in any way on dynamic typing. And it's not going to happen in C because (a) you have to declare and type your variables explicitly and (b) that * tells you it's a reference, not a value.
-
Monday 25th September 2017 18:49 GMT Richard Plinston
Re: Extinct
> In Python, if you write a = b and they are both integers you get a new variable a with the same value as b. If you write a = b and they are both compound objects, you get a new name for object b.
No, you are wrong. In Python 'b = 1' makes 'b' a reference to a PyIntObject that has ob_ival of 1. 'a = b' gives a new name to object 'b'. This is exactly the same as if they are any other type of object except that a number of int objects are precreated by the run time for performance reasons. So 'b = 1010' does create a new object but 'b = 1' does not.
> That's a dramatically hard bug to find in a large program that relies in any way on dynamic typing. And it's not going to happen in C because (a) you have to declare and type your variables explicitly and (b) that * tells you it's a reference, not a value.
No. In Python _everything_ is an object. There is no requirement to "tell you it's a reference, not a value" because there are no values.
https://www.laurentluce.com/posts/python-integer-objects-implementation/
-
-
-
-
Thursday 14th September 2017 03:35 GMT Yes Me
Re: Extinct
"Everything is assigned by reference"
True. But
x=1
y=x
assigns a reference to the constant "1" to y, so this behaves like an assignment in every other language I've ever seen. Whereas if x is (the name of) a compound object you get a reference to the object. If that's not what you want, you have to use copy or deepcopy or whatever.
I have no intellectual difficulty understanding this. But it really is a trap for the unwary.
-
-
-
Sunday 10th September 2017 13:22 GMT bombastic bob
Re: Extinct
"A lot of elitist dinosaurs evident in these comments"
get off my lawn, you young whippersnapper! [heh]
Seriously, don't use an interpretive programming language for ANYTHING that requires performance, especially one that has built-in garbage collection and "duck typing", regardless of whether it does 'just in time compiling to pseudo-code' or not.
And more often than not, "object oriented" is _HIGHLY_ overrated [especially when it comes to system performance]. This goes TRIPLE for VMs and shared hosting... "oh but it doesn't matter because CPUs are so fast these days, and memory so cheap" until you try and run a bunch o' stuff simultaneously in multiple VMs or shared hosts, and then you find out what kind of impact inefficient code has. Yeah.
I wouldn't write a massive system in Python. I'm having to FIX one, at the moment (uses Django) and it's seriously in need of a MASSIVE re-write. Fortunately, I quickly figured out how to invoke an external program [written in C], and that solved MOST of the performance issues.
Yeah, I _do_ keep saying that about Python invoking a C program. It _is_ 30 times faster this way, with that one specific example. And it makes a very valid point that I want to express to as many people as possible: Do NOT attempt to force Python into a 'C' shaped hole. You'll go bat-guano insane trying. Use a language that's more suited to the task, and Python as the glue if you want to [for which it works very, very well, in my opinion].
but writing a massive system in Python? I'm old enough to remember how *CRAPPY* RSTS/E was, and it was written in COMPILED BASIC. So, "NO" to 'massive system in Python'. That is, if you want PERFORMANCE out of it.
'children' icon because, youngins these days...
-
-
-
Saturday 9th September 2017 09:50 GMT Ken Hagan
"perhaps that means that it's too complicated"
Ease of programming is not necessarily a good thing.
When engineering a physical object you have to pay attention to tolerances. For simple objects, or with very clever engineering, those tolerances might be fairly generous. For the most complicated objects, the tolerances will usually vary from one part of the object to another but will often be very tight in the critical areas.
In programming, sometimes it is really important that you say exactly what you mean and definitely do not say anything that you don't mean. That's like an intelectual tolerance. Some languages are fairly relaxed and will execute almost anything you can type and will attempt to "do the right thing" based on heuristics. Others are fascist straight-jackets that demand bowing and scraping in the appropriate places, but which can then be trusted to do exactly and only what you have (finally) specified.
Obviously it is possible to have the worst of both worlds, with fascist syntax and DWIM semantics. However, I doubt it is possible to have the best of both worlds. At some point, you have to knuckle down and get particular.
-
Friday 28th September 2018 17:46 GMT danfus
I find myself spending a lot of time debugging python programs. Sure, the code's easy to write, but it's up to me to do all the hard work of consistently using types. Parallelizing python programs is a pain compared to some other languages ( Ruby & GO, for example ). At the end of the day, python's speed of development seems to be balanced out by debugging and bugfixing time.
Then there's the effort of deploying python programs across systems, especailly if those systems' OSes or versions are heterogenous. More complex librarys (cryptography for example) require C compiler and library sources. Trivial, simple, or perhaps just lucky programs might not need them, but they still require pip installs or vendored packages. It might seem silly to complain about deployment woes when discussing languages, but unless you're just playing around, you're going to need to deploy the application to at least one system to get any use of it.
I think it's interesting to compare this to Go in particular, which is undeniably a more difficult language to write. But once my programs are written, I find them working like I expected ( I'll not go deeply into the distribution and performance benefits, which are substantial).
-
-
Sunday 10th September 2017 00:29 GMT streaky
Yeah the flaw in logic is extreme, it means you have loads of people turning up asking for help might well be a stunning indictment of the language. It might just well be an indictment of the only way people feel they can get the help they need is to show up and repeatedly ask the same silly questions on SO.
Or it could just be related to popularity of the language or related to the kinds of people using it and the problems people are trying to solve with it. The reality is it doesn't really tell anybody anything.
Nice to see the defensive posts by people who obviously ask a lot of python questions on SO though heh.
-
Monday 11th September 2017 06:59 GMT ElReg!comments!Pierre
In the science / datascience field
Python is finally beginning to recover from the 2.x / 3.x schism, as more and more libraries get ported to 3.x which makes it trivial to port end-user applications. Yes, you got it right, a whole lot of core scientific library are just beginning to hit the 3.x repos. That sure made things difficult for science Python users, especially on Windows (ptouach') which lacks any kind of centralized package management (from the end user point of view at least) and meant either a lot of fiddling or the use of CygWin. Not terribly difficult, but an added barrier to adoption and growth nonetheless.
-
Friday 28th September 2018 17:45 GMT danfus
number of questions on stack overflow does not indicate language difficulty
The number of questions asked about python has no bearing on whether it's easy or difficult to program in python. I'd say it probably has a lot more to do with how many programming newbies are trying to learn python as a first programming language without much computer science background. I don't think there's a compelling reason to believe that "harder" languages have more questions asked.
-
-
Saturday 9th September 2017 02:33 GMT thames
The Right Tool for a Lot of Jobs
Python is growing fast mainly because it is heavily used in a lot of fast growing fields, including web applications, high performance computing, analysing big data sets, machine learning, system management, etc., etc About the only popular area it doesn't cover well is mobile client apps.
A lot of these fields have communities which have coalesced around open source libraries which implement the critical functions of that field. And one thing that Python does really, really, well, is let people wrap libraries written in other languages and interface them to Python. If there is an existing library written in C, Fortran, assembly language, or just about any other statically compiled language, you can probably interface it to Python without too much trouble and with little run-time overhead. Python doesn't force you to re-implement everything in itself in order to be able to use it like some other languages do.
CPython's single execution thread and reference counting memory management are big strengths here, because they don't force those other languages to conform to a specific threading or memory management model. This is why CPython is overwhelmingly the most widely used version, while the Python versions which incorporated JITs and eliminated their GIL struggle with a lack of library support.
The big advantage that Python has over languages like Matlab is that there are loads of libraries to do all the data handling and display that makes up the bulk of most programs. Just about everything you need to do already has an open source library to do it.
One common theme in a lot of these applications is that the software designers tend to think in terms of using multiple racks of hardware rather than just multiple cores. Multi-processing is another area where Python excels, with many good solutions, including in the standard library.
Python's weakest point is probably in the GUI space. It's not that there's a lack of GUI options, it's that there's so many that there has been no tendency to standardise on one widely used option. TkInter comes with the standard library, but it's limited and the out of the box theme lacks visual appeal. QT is great, but installation is a bit of a pain unless you are running Linux (and let the distro package manager handle everything seamlessly). Pygame is game oriented. Kivy focuses on mobile and isn't meant for desktop platforms. Etc., etc.
Overall though Python is well established on the server, and is particularly good at allowing developers to get the job done in fewer man hours than many of the alternatives, and so at lower cost. That has fit many of the fastest growing trends in the modern IT industry, and so accounts for the rapid growth. Python has actually been around longer than Java, but it has received so much attention now because it fits the current market.
On the other hand most Python developers will also tell you that there is no one size fits all when it comes to computer languages. Python is good for some jobs, while C is better for others, and Javascript is pretty much the only realistic option for web browsers.
In my opinion where the big problems tend to arise in software development is with people who only want to learn one language and then spend the rest of their careers attempting to pound square pegs into round holes. I've learned many computing languages over the years, and I don't believe in getting too attached to any one. Right now though, Python ticks a lot of the right boxes for most of what I need to do.
-
Saturday 9th September 2017 10:17 GMT Anonymous Coward
Re: The Right Tool for a Lot of Jobs
@thames
Good comment. I'm not sure about the observation that "Python's weakest point is probably in the GUI space." Much depends on individual taste for the look and feel of the resulting UI. Personally, I'm indifferent, so tkinter works fine for me, even though the result is pages and pages of VERY similar looking code! Much better (for me) is to use glade as a wrapper for GTK....less code plus the advantage of a GUI designer. No doubt others will have different views!
-
-
Monday 11th September 2017 19:16 GMT Richard Plinston
Re: The Right Tool for a Lot of Jobs
> I really do wish there was a better cross-platform GUI option for Python.
I found Glade/pygtk to be excellent with a designer for the interface that auto links to the code. I still have stuff that use EasyGUI which is really easy for dialog boxes. The real problem is that there are too many really good options.
https://wiki.python.org/moin/GuiProgramming
https://docs.python.org/3/faq/gui.html
https://wiki.python.org/moin/GUI%20Programming%20in%20Python
-
-
Saturday 9th September 2017 13:10 GMT Wensleydale Cheese
Re: The Right Tool for a Lot of Jobs
"And one thing that Python does really, really, well, is let people wrap libraries written in other languages and interface them to Python. If there is an existing library written in C, Fortran, assembly language, or just about any other statically compiled language, you can probably interface it to Python without too much trouble and with little run-time overhead."
With memories of how much work can be involved with that in other environments, this is truly useful.
-
Sunday 10th September 2017 13:59 GMT bombastic bob
Re: The Right Tool for a Lot of Jobs
"Python is growing fast mainly because it is heavily used in a lot of fast growing fields, including web applications, high performance computing, analysing big data sets, machine learning, system management, etc., etc "
not sure I like where this is going. And not because Python is a BAD language [it is, in fact, a GOOD language]. Python is just NOT SUITED for anything "high performance".
When you use some of those libraries, they're coded VERY inefficiently. There was one specific example I ran into, either in matplotlib or numpy. It was GROSSLY inefficient the way it was implemented. I basically re-wrote code to avoid using it as much as possible, and made a significant speedup just from that. I can't remember what it was (sorry) but I remember doing this. I shaved 15 or 20 seconds off of a file upload operation JUST doing that. Then I shaved OVER A MINUTE off by using the external C program. What WAS taking 2 minutes (or more) is now taking around 10 seconds [because I didn't want to re-write ALL of the python code in C, but if I had, it would probably take less than 2 seconds].
Now, for generating charts, other than matplotlib's hideous API, it's "convenient". Sort of. OK maybe not, and I might have to go to using something else like Cairo but still...
In any case, watch your CPU utilization. If you write Python code and are charged by cloud services for CPU utilization, you'll save a LOT of cash by going wiht a C language utility instead, at least for the parts that do the number crunching, "high performance", etc..
-
Sunday 10th September 2017 23:19 GMT Mark 65
Re: The Right Tool for a Lot of Jobs
@bb: I'd say for doing data analysis you'd want to know 2 languages - Python and R. This has been noted it various "what are you using" polls in the sector. Python give you excellent data munging capabilities but I'd much rather use R with data.table and ggplot2 for slice and dice and charting than the abortion that is matplotlib. Aspiring to MatLab's plotting capabilities is a low bar indeed.
-
Monday 11th September 2017 00:12 GMT ibmalone
Re: The Right Tool for a Lot of Jobs
ggplot2 is nice for lots of stuff, sometimes a bit hard to persuade it to do exactly what you want (though in those cases you sometimes realise what you want doesn't make sense). Data.table is a big improvement on standard R for performance, and lets you write some things very concisely, but R performance is generally very poor, even compared to other interpreted options like Matlab.
-
-
Friday 22nd September 2017 12:06 GMT nijam
Re: The Right Tool for a Lot of Jobs
> When you use some of those libraries, they're coded VERY inefficiently
Not really Python's fault though, is it?
If Python could be blamed at all, it's because it's made it easy for you to use those inefficient libraries. Unlike other languages, which would have made all libraries, including the inefficient ones, difficult to use.
-
-
-
-
Sunday 10th September 2017 07:57 GMT MrT
Back when I was at school, BASIC was the learner's starting point - not perfect, but you've got to start somewhere and variants of that were becoming the default built-in language of the more readily available computers. I preferred Pascal, then Delphi, but I've always recommended folk bet against me if they want guaranteed success... ;-)
These days, there's more choice, but learners still start with one or two from a smallish choice - Python's one of those (we use it on a VM where I teach). That boost could also be down to a rise in Computing Science numbers in schools, as well as coding clubs like CoderDojo and the like. More driven learners ask questions and find things out for themselves, and if that's at SO, then there's another reason...
-
Sunday 10th September 2017 20:48 GMT The Indomitable Gall
Ah, yield... generator functions are great.
A couple of years ago I was trying to do some text generation that included multiple correct solutions. As a total hack, I took my object model and added a toProlog method to each object and yes, seriously, I had part of the code convert everything to Prolog and then ran the search in Sicstus. It was a monumentally crazy hack and led to weeks of debugging. When I later realised that by shoving a yield statement and iterating on all results from the generator functions called from each function, I could do exact same thing in Python much quicker and with far fewer lines of code.
Generator functions are a good example of a core element of the Python design philosophy -- it enables you to work with datasets of virtually unlimited size, producing ad hoc code to process them.
-
-
Saturday 9th September 2017 05:10 GMT a_yank_lurker
Usefulness
Python has a couple of traits that make it very useful for those who program as a secondary function. Its syntax is relatively easy to understand, it has a lot of very good libraries available, and being an interpreted language it is easy to experiment with code to see what a fragment will do. Plus, it is not 'teaching' language like Basic or Pascal. It was designed to a general purpose language suitable for a wide range of programming problems.
But like any programming language there are areas that it sucks at.
-
Saturday 9th September 2017 07:11 GMT Pete 2
Re: Usefulness
> But like any programming language there are areas that it sucks at.
Although I use it a lot, I cannot respect a language where white space is a critical part of the syntax.
Move a line of code in or out by a space or two and it either becomes part of a preceding conditional clause, or is removed from it.
As for "pythonic"? In my book, if the code works, it works. Who cares whether it conforms to the "right" way of doing it.
-
-
Saturday 9th September 2017 09:41 GMT Ken Hagan
Re: Usefulness
"The poor fuckers who have to maintain your pile of shite code after you've been sacked, that's who!!!"
Matters of formatting can be sorted by automatic tools. Matters of implementation style are no more subtle in python than in any other language. The fact that the python community has coined the word pythonic when few other languages have coined anything similar is interesting from a social point of view but of no technical importance. I concur with the OP: Who cares whether it conforms to the "right" way of doing it.
-
Saturday 9th September 2017 11:15 GMT Tomato42
Re: Usefulness
"Matters of formatting can be sorted by automatic tools."
right, because checking out the code, formatting it to way you're used to, hacking on it and then reformatting it to the library/application standard before preparing pull request is such a convenient way to work.... /s
"Matters of implementation style are no more subtle in python than in any other language."
so you're saying that the automatic deformatting and reformatting may not work as painlessly as you're claiming? No wonder you are so irritated by people following a consistent standard that is just different to what you like...
"The fact that the python community has coined the word pythonic when few other languages have coined anything similar is interesting from a social point of view but of no technical importance."
Yes, other communities have things like IOCCC.
when you are working on software, it inevitably will grow and thus require new libraries, it's nice when that library has the same formatting and style as the code you work on every day. Makes it easier to fix issues and submit patches to it.
"I concur with the OP: Who cares whether it conforms to the "right" way of doing it."
Except there have been multiple studies that readability of code _matters_ and while no specific way to format code is better than other, _consistency_ matters.
So, I can only feel sorry for people that will have to work on your code after you've been sacked.
-
Saturday 9th September 2017 13:33 GMT FatGerman
Re: Usefulness
>> Except there have been multiple studies that readability of code _matters_
Yes it does. That's why there are different types of brackets used to delimit segments of code in every single other bloody language. It's clear and obvious and any editor worth using will do bracket matching so you can always tell at a glance which block of code you're working in.
Python, especially when you have to follow that ridiculous 80-column rule, might as well be random ASCII in comparison. I loathe it. The fact that it's actually quite useful means lots of people are prepared to overlook that, but it would be so much better if they'd just use some { }.
-
Sunday 10th September 2017 14:13 GMT bombastic bob
Re: Usefulness
"it would be so much better if they'd just use some { }"
yeah but if THAT happened, then a bunch of K&R extremists would put '{' on the same line as the control statement, and use syntax like "} else {" and it would drive ME (even more) insane, requiring me to re-format the code just so that I could read it... and YES, I do that. A *LOT* [even with JAVA code, take THAT you K&R extremists!]
I deliberately re-do the IDE settings in the Android IDE to look like Allman style. Then I set it as the project default. Then I reformat things as I go over stuff, or if I'm particularly frustrated, auto-reformat everything [once the right settings are in place]. I also get rid of the hard tabs, too, spaces only.
Anyway, those who aren't familiar:
https://en.wikipedia.org/wiki/Indent_style#Allman_style
And, in many ways, Python kinda reminds me of Allman Style. So yeah, let's leave it as-is.
[lousy coding practices and ABuse of "objects" and "signals" and member functions 3 miles deep and everything promiscuously playing with every other object's stuff are bad enough, but at least the pure language syntax is readable from a scoping perspective - the CRAP code itself can be dealt with in the usual manner. And I shouldn't need to reformat it in order to read it]
-
-
Saturday 9th September 2017 18:41 GMT Ken Hagan
Re: Usefulness
You can automate the re-formatting on checkout and checkin and if you work in a team that makes this a requirement then you wouldn't be much of a programmer if you didn't automate it.
The IOCCC contest is also of social interest but I'm not aware of anyone working professionally who writes that way. Likewise, if you deliberately indent something in C or C++ to align with the wrong block (the equivalent of adding space in Python) it will compile fine but you can expect a visit from your colleagues on the next dark night. Demanding that whitespace indentation corresponds to the actual block structure is an informal-but-rigid requirement in every (text-based) programming language I've ever used. Python actually bothers to enforce it, but even C and C++ enforce it if you have lint-like warnings on your compiler.
As regards external libraries, perhaps you missed the bit where re-formatting was automated. If it bothers you, reformat it, but actually I suspect that you will get used to all the styles that are common in your language and switch seamless from one to the next as you step through the debugger. The rest of us did at some point in our careers.
No-one is suggesting that multiple styles should be mixed within a given section of the codebase. (I bet that's what the "studies" were looking at, though. I've read plenty of "studies" in my time that I wouldn't wipe my arse with.) To assert that consistency is required across *all* code would be a much less plausible study result. It would, for one thing, be a compelling argument for never using more than one language in a project, which is certainly a proposition that people will dispute. It would also be an argument about never writing Windows programs in C or C++, since the Win32 and CRT house styles are different.
In the real world, outside of academia and internet flame wars, "readability" is not a matter of formatting or any other stylistic metric. It is about whether things have identifiable names, whether the algorithms are clear, whether things are done in the obvious order, whether violations of the first three are properly justified in an obvious fashion either in the code or in documentation, and whether those comments and that documentation are actually kept in step with the code. Your compiler can't check that, but by god it's important!
-
Saturday 9th September 2017 19:35 GMT Vanir
Re: Usefulness
@Tomato42
<Except there have been multiple studies that readability of code _matters_ and while no specific way to format code is better than other, _consistency_ matters.>
Not the whole truth. Equating readability of code with consistent formatting is not consistent with what a professional developer encounters in their day-to-day routine.
Code bases and coding guidelines. If a coder only deals with one code base and it's ordained style then they will find it jarring if they have to read and understand another code base written in another 'style'. A professional programmer should not have any difficulity with different code formatting styles.
A C++ contractor doesn't have a choice in this going from company to company with differing formatting styles. And don't professionall programmers read and have to understand open source code bases with different styles in their working day?
Readability and understandability of code is not just an issue of code formatting: is it?
Low coupling and high cohesion are 2 properties of a code base that promote understanding of it.
In C/C++ one could be nasty and strip out everything but the tokens: the misuse of maximal munches, I admit, would be a challange to find in this formatting style.
-
Sunday 10th September 2017 14:19 GMT bombastic bob
Re: Usefulness
"Readability and understandability of code is not just an issue of code formatting: is it?"
actually, it is. high level management, "dive in without seeing it before" contractors, and people who don't want to read piles of docs before getting something done, prefer "readable code".
The most readable style of all is Allman Style. It has a lot of white space in it, which means that you can clearly see where the boundaries are. It works best if you enforce curly braces around things like this:
if(something)
{
....do_this();
}
(using dots instead of white space - the editor doesn't represent them properly)
even though a lot of people might be tempted to:
if(something) do_this();
The first example is MORE READABLE. A coder might not like it because it "takes up too much space on the screen" but too bad. For someone skimming code [not reading every! single! line! and! detail!] it's a LOT easier to see things this way. It's *EFFICIENT* in other words, for reasons not obvious to the K&R fascists nor to the hard-tab nazis. Oh yeah, no hard tabs either. Then your tab settings won't affect what it looks like...
/me wants to be able to view it with 'less' and have everything line up EXACTLY! THE! SAME! as it does in an IDE, or a simple editor like 'nano', or a GUI editor like 'pluma', or something like vi, or whatever.
graphic being 'style nazi' alert this time
-
-
-
Saturday 9th September 2017 18:07 GMT Down not across
Re: Usefulness
he fact that the python community has coined the word pythonic when few other languages have coined anything similar is interesting from a social point of view but of no technical importance. I concur with the OP: Who cares whether it conforms to the "right" way of doing it.
I concur. Bunch of elitist bullshit really.
Perl: TIMTOWTDI
Python: There should be one — and preferably only one — obvious way to do it.
No wonder I prefer perl where what matters is that the task gets done, rather than getting hung up on how exactly.
As for whitespaces...yeah it worked for COBOL but at least there was a reason (punch cards) for it and AFAIK no modern compiler actually insists on that any more.
-
-
Saturday 9th September 2017 10:45 GMT Pete 2
Re: Usefulness
> The poor fuckers who have to maintain your pile of shite code after you've been sacked, that's who!!!
Any "support" coder who is only able to understand software that is written in one particular way is never going have either the flexibility to understand that "there is more than one way to do it", nor would they be experienced enough to reliably do general purpose software support.
One trick ponies!
-
-
Saturday 9th September 2017 13:03 GMT Wensleydale Cheese
Re: Usefulness
"Although I use it a lot, I cannot respect a language where white space is a critical part of the syntax."
In my early career I used programming languages where certain things had to go in certain columns (Fortran IV & 77, Cobol, and even more so RPG II), I really can't get worked up about this. Yes, it's different, but with some applied thought, it really isn't so difficult to comprehend.
"Move a line of code in or out by a space or two and it either becomes part of a preceding conditional clause, or is removed from it."
BTDT, but the run time diagnostics usually catch the mistakes I make. Regular commits with a version control system have saved a lot of grief there.
Also note that on the Mac platform, both TextWrangler and BBEdit give you the ability to take a time-stamped snapshot every time you save a file (not enabled out of the box - see Preferences -> Text files -> Backups for that). This is invaluable for those files which don't justify their own version control environment, although I'm increasingly finding myself using version control in areas I traditionally didn't (e.g, system configuration files).
-
Monday 11th September 2017 01:44 GMT Long John Brass
Re: Usefulness
@Wensleydale Cheese
RPG-II
I feel your pain. I remember using that god awful code ruler on program listings.
When I was young and stupid (as opposed to now; old and stupid) I had RPG-II buried in the fine print at the end of my CV. I had agents contantly calling asking if I was interested in RPG-II work... That was 10+ years since I had last touched it! Have long since removed the offending line, Don't need that amount of suffering in my life.
-
-
Sunday 10th September 2017 03:04 GMT a_yank_lurker
Re: Usefulness
@pete 2 - The Python formatting rules for blocks actually mirror what is consider good programming style in other languages. Where I work our default formatting is identical to the Python indentation for blocks. This is done to make following programming logic and scope easier to follow. All Guido did was to take best practice and make it a requirement for identifying block scope.
-
-
Sunday 10th September 2017 14:58 GMT Jason Hindle
Re: Usefulness
"Python has a couple of traits that make it very useful for those who program as a secondary function."
That would be me. I was originally a programmer by training, but it's now an occasional part of the job. Sure, I recently learned some Java for a specific set of tasks (nice enough language, btw), but Python is becoming the language I use when I just want to get stuff done.
I'm not sure if it's a good language for the beginner though. Call me old fashioned, but a good set of training wheels should be strongly typed.
-
-
Saturday 9th September 2017 06:33 GMT To Mars in Man Bras!
Best Description I Ever Read of Python....
..was:
"It's like pseudo-code that runs"
As a non-professional programmer who, every now and then, has to knock something together to accomplish a repetitive, long or tedious process, I love that aspect of Python.
I don't code regularly enough for huge chunks of the syntax, outside of the basics such as conditionals, loops, functions, etc to stick in my brain. But, most of the time, I can pretty much cobble together something that works well enough for my needs in pretty short order, because the syntax is so straightforward and there are usually already lots of modules out there which do all the things I need to do.
Very often, all I'm left with is the task of lashing a couple of modules together with string and sealing wax and setting it running.
-
Saturday 9th September 2017 10:02 GMT Naselus
Re: Best Description I Ever Read of Python....
"As a non-professional programmer who, every now and then, has to knock something together to accomplish a repetitive, long or tedious process, I love that aspect of Python."
This. Python's a great language for people who aren't programmers and never intend to become full-time programmers. I'm a systems engineer; I can knock shit together in Python fairly quickly and easily. I know network engineers who learn it. Hell, I know architects - not systems architects, actual building architects - who have learned a bit of python to help with scripting in Revit. Actual programmers who specialize in Python as their main job? Not so much.
And this is precisely the demographics which you'd expect to see lots of posts on Stack Overflow from - people with no formal training in coding, looking to do small things in addition to a main job that has little to do with writing programs, who lack the tools to work out how to do various things for themselves. It'd be interesting to see some metric of relative task complexity being asked about in the posts; I'd be willing to bet Python's volume of posts is matched by a relative simplicity in the questions being asked compared to, say, C++.
-
Saturday 9th September 2017 16:51 GMT Paddy
Re: Best Description I Ever Read of Python....
> I'd be willing to bet Python's volume of posts is matched by a relative
> simplicity in the questions being asked compared to, say, C++.
That might just tell you that, say, C++ solutions are overly complex.
There are a fair amount of scientists and engineers with gravitons to detect and medicines to design, etc, that use Python because the easy learning curve leaves them room to think more of their problem and its solution, rather than needing to become computer scientists (and so asking your famed "difficult" stackoverflow questions).
-
Monday 11th September 2017 11:04 GMT Tom 38
Re: Best Description I Ever Read of Python....
Python's a great language for people who aren't programmers and never intend to become full-time programmers. I'm a systems engineer; I can knock shit together in Python fairly quickly and easily. I know network engineers who learn it. Hell, I know architects - not systems architects, actual building architects - who have learned a bit of python to help with scripting in Revit. Actual programmers who specialize in Python as their main job? Not so much.
Well this is just wrong. Python's ease of use for the novice is a benefit for the pro as well. It is an extremely expressive language that allows you to write a lot of functionality with a small amount of code. You can prototype faster in python, and the expressiveness means that refactoring is simple and, if following the pythonic style, simple.
The speed of python is not really relevant in most scenarios as anything cpu intensive can be written as a C extension, with a pythonic API added over the top. This usually makes the underlying library much easier to use, for instance it is much easier (less typing and clearer to the reader) to write XML and XPath manipulations using the python lxml library than it is to use libxml2 in C, but the speed of operation of both is virtually identical - python is just the plumbing around the boiler.
I don't think the criticism of the python open source libraries is particularly fair, as it applies to all languages with lots of open source libraries; you have to assess the quality and reliability yourself before using it. There are a lot of rubbish ones, but there are a lot of good ones also.
PS: The term "pythonic"; lots of people don't seem to like it, but this is what it stands for (verbatim from the language spec):
* Beautiful is better than ugly
* Explicit is better than implicit
* Simple is better than complex
* Complex is better than complicated
* Readability counts
Argue against any of those points..I'm guessing bob will try
-
-
-
-
Saturday 9th September 2017 10:11 GMT kmac499
Re: dBase II...
OOh I loved Clipper.. I'm sure the comp-sci crew on here will be running for their pitchforks screaming "injection risk" but the ability to have scraps of code as text in the database which can be read in, dropped into a code block and executed was wonderful.
Multidimensional nested non typed arrays that could be constructed at run time, mimicing the discovered data structures not just parent child but multiple childrren as you walked the tables.
The -> operator with variables for the table name so you could access other tables at will
The simplicity of @SAY..GET with pre and post validation
NOW that was power.
-
Saturday 9th September 2017 10:29 GMT Anonymous Coward
Re: dBase II...
@CAPS LOCK
I've often wondered just how much xBASE code is out there in 2017. The problem seems to be that xBASE applications have lots of names (like the list in your original comment). There are quite a few others: dBase-IV, dBase-V, xHarbour, clip, FlagShip, Visual FoxPro, dBFast.....
*
So how much xBASE code is still out there, live and being maintained? Any ideas?
-
Saturday 9th September 2017 23:48 GMT Nick Ryan
Re: dBase II...
IMHE there is a lot of (x)base code still out there. On one hand, forced obsolence is crippling a lot of it with code no longer operable on modern systems (actually, a bad reflection of modern systems) but far too much of it is suffering because it was written by people who should never be let near a keyboard, let alone an applictaion/database system.
So it's great because it was accessible to many people while simultaneously not being great for the same reason... :)
-
-
-
Sunday 10th September 2017 13:38 GMT Jason Bloomberg
Re: Another contributing factor?
The Pi is what finally pushed me into using Python. I then discovered Python is an excellent "write once, run anywhere" environment; just copy the source code over and, as long as Python and any required libraries are installed, it mostly just works. There are a few platform specifics but not that many and not that hard to overcome.
It's not perfect; forgetting a closing parenthesis on one line can cause a misleading and time consuming syntax error on the next, a simple typo in a variable assignment can sometimes be hard to chase down, not throwing the error until run-time can be annoying. Because of those and other debugging issues I am not convinced it's a great beginner's language.
But overall 9/10.
-
-
Saturday 9th September 2017 17:31 GMT acid andy
"Fastest Growing"
Does anyone else feel like smirking cynically every time they hear the phrase "fastest growing"? Even worse of course is "We're one of the fastest growing...". It's used whenever marketing types need to hype up their product but cannot claim it's the biggest or most popular.
I mean, "one of the fastest growing" is basically meaningless. Even "the fastest growing" is meaningless if you don't know the context. When Python was brand new and went from zero users to one, that's an infinite rate of growth.
Why stop at "fastest growing"? If you can't claim that about your product, how about "it boasts one of the highest second derivatives of growth rate".
-
Saturday 9th September 2017 18:47 GMT Ken Hagan
Re: "Fastest Growing"
"When Python was brand new and went from zero users to one, that's an infinite rate of growth."
I think I'd argue that the initial number of Python users was one, not zero, since it is a bit silly to assert that there are no users (yet) of a language that doesn't exist (yet).
This approach also means that languages designed by committee experience slower initial growth than languages created by individuals, which strikes me as karma in operation right from the start.
-
-
-
Saturday 9th September 2017 19:43 GMT Vanir
Damn. I've been found out
@Herman
<Actually, the stats mean that Python is so crap that people have to ask lots of stupid questions.>
As c++ coder having to learn Python I was going to put this question on SO's Python section.
Does Python have a rule of zero?
It will now have to be:
Where's the best place to put '{' and '}'?
-
-
Saturday 9th September 2017 20:53 GMT sambaynham
Re: My thoughts on this ...
I hope my own personal efforts have contributed to this in some small way. Why? Well, because whenever I'm asked 'My lad/lass is interested in programmng, what language should they learn first?', I always answer : 'Python. It'll teach them good indenting habits.'
So far as I'm concerned, being a good n00b language is nothing to be ashamed of. I cut my teeth on PHP, but I wish it'd been Python.
-
Saturday 9th September 2017 22:38 GMT FlippingGerman
Python was my first language, and since I'm not a professional coder it's still my most used. I think it's been a wonderful language to learn with, and has some truly wonderful mechanisms that make many things easy.
That said, I don't like using it for moderately sized programs (i.e. longer than a few hundred lines) because I struggle to keep every last detail - like what type a function expects - in my head. A better IDE might help with that. Also decent error-checking such as gcc does - which presumably is difficult or impossible to do in Python - makes finding some types of bugs much easier.
Alternative headline that StackOverflow could have come up with: Python is the hardest programming language around, and it's getting harder.
-
Saturday 9th September 2017 23:24 GMT McBread
Nobody expects the Pythonese inquisition
Here's an interesting talk on how and why Python has exploded in the astrophysics/astronomy field.
https://www.youtube.com/watch?v=ZyjCqQEUa8o
Somewhere in the middle he's got a plot of programming language references from science papers and Python takes off massively somewhere around 2010.
-
Sunday 10th September 2017 04:05 GMT rmullen0
No thanks to any dynamic language
Personally, I do not like dynamic languages. I would rather use something that has static type checking so that errors are found at compile time rather that at runtime. And I would rather use something that has proper intellisense support. The fact that Python is dynamic makes it a fail in my book.
-
Sunday 10th September 2017 09:14 GMT Tom 7
Re: No thanks to any dynamic language
The thing about Python is it borrows most of its libraries for 'big things' are from C++ or Fortran so type checking is done before it gets round to doing the grunt work.
But if your types need checking then you can do that in python or most (any?) dynamic languages. Its all swings and roundabouts - the 1 second you save not having to declare a variable type in a dynamic language will be lost with hospitalisation due to the multiple injuries sustained from being hurled off the roundabout if you dont program safely.
-
-
Sunday 10th September 2017 09:15 GMT Fruit and Nutcase
Apply here...
Reg Event Geeks have often enjoyed a fractious relationship with non-techies, but nowhere near as toxic as their relationships with other geeks who dare to have slightly different tech preferences.
https://www.theregister.co.uk/2017/09/01/why_is_that_geeks_favourite_enemies_areother_geeks
-
Sunday 10th September 2017 14:56 GMT Milton
Very revealing
Very revealing, so many of the comments on this topic. I usually find myself moderately impressed with the overall quality of comments on most articles on El reg—certainly fewer nitwits and outright trolls than most other sites.
But there's a surprising amount of tosh been written BTL on the Python survey, and a lot of it smells like blinkered fanboi-ism on the one hand and poorly informed snobbery on the other. I don't see much justification for statements that are inordinately defensive of Python any more than for people saying it's newbie rubbish (often for reasons, when given, that don't stack up very well). I don't code much these days but have been through Basic, Pascal, Delphi, Clipper, C, Ada, C++, PHP and Python at different times for different tasks, just like many reading this now, I suspect.
Surely the point is that of a couple of dozen top languages, which span a number of different approaches and features with many varied strengths and some weaknesses, Python has its place? It has some excellent features, arguably ideal for quick, crisp development where sheer performance is not a priority but you still need versatility: it's at least a useful language to have in your back pocket, and for some development environments perhaps a perfectly reasonable first choice.
The vociferous polarisation of argument therefore seems frankly pointless. If you visit the workshop of an engineer, builder, carpenter, electronics engineer, they will have a big toolboard—many, many different tools which they know how to use for different and specific purposes. Look at any physicist and see how many different types of math s/he deploys to approach different problems, from tensors to topology and points between.
Why should coding be any different?
-
Sunday 10th September 2017 23:36 GMT Mark 65
Re: Very revealing
Why should coding be any different?
Because choice of language becomes a religious debate. You can see it in the comments that have come before yours. Anyone questioning aspects of Python or simply stating "not my cup of tea" for any reason are massively down-voted. That is cult like behaviour and displays all that is wrong with aspects of the IT community. Shit like that is simply counterproductive.
Python is great for some things and mediocre for others. It is likely popular because it is free and can lend its hand to pretty much anything given the frameworks available and ease of wrapping libraries written in other languages. It is a one stop shop and that will appeal to people. "I can do anything in Python". You certainly can, but it will be a Jack of all Trades though not necessarily master of none. Let us not forget that some time ago there was a cult of Java.
-
Monday 11th September 2017 08:58 GMT EddieD
Re: Very revealing
"Why should coding be any different?"
"Atari or Amiga?"
"PC or Mac?"
"Windows or Unix?"
(I'll get downvoted for that last one than a greyhound on steroids...)
Folk like to justify that which they have chosen as correct.
(For the record, I had an Atari, but missed the games on the Amiga, I don't see the distinction these days and have both, at home Windows for games, at work Unix for work...)
-
-
Sunday 10th September 2017 17:06 GMT Anonymous Coward
I'm not sure what it is...
A coder drone types in a trivial and "clever" subroutine, then too often goes all "I'm-An-Artist" full of themselves. Overthinking programming languages is a clear sign of the same sort of mindset. Photographers and their camera choices are the even-worse example of the same thing. Most other professions are less prone to this sort of thinking. I'm not sure what it is.
I mention this only in the hope that some might recognize it in themselves, and tone it down a bit.
-
Sunday 10th September 2017 22:35 GMT mmccul
Which airplanes flew back
Asking Stack Overflow which posts get tagged with which language is like looking at the airplanes that returned from battle in WWII to determine where more armor is needed. It looks at the wrong thing. SO is known as the place to get help with Python. If I'm looking for Perl help, I wouldn't go there, but a Perl forum. Similarly with a number of other languages.
In my career as a consultant, I go to new shops and have to ask what language I should be writing security and system admin scripts in. Thus far, I've never been *permitted* Python, because I was the only one who even began to know it, or it wasn't installed on the systems I needed to run code on. I've nearly always been allowed to use Perl because everyone knows it and it is consistently available on all systems. Those few times when Perl wasn't an option, POSIX awk + POSIX sh was the language pair I had to use.