Of course. I’ve even showed a few how it works.
I’ve found if you want to know a mathematical concept inside-out, writing a program for it is the ticket.
Of course. I’ve even showed a few how it works.
I’ve found if you want to know a mathematical concept inside-out, writing a program for it is the ticket.
Excel is a programming language. It is a superset of the VBA programming language, in exactly the same way that VB6 was.
Generally most people would be better off turning to Excel for their data-wrangling and test manipulation, but that isn’t an option for a lot of people.
I understand the utility of using what you’ve got. And if all you’ve got is Python/Perl/Scala, then that’s better than trying to learn a new language and a new environment. If your only co-workers are people who think that VBA is interpreted, then you’re better of using some other tool that they do understand.
Once you go past two dimensions, the advantages of Excel diminish pretty fast. Once you get to data sets that can’t fit on a set of spreadsheets, the advantages of Excel diminish pretty fast. That’s a lot of people who are better off not using Excel. It leaves a lot of people (most people) who would be generally better of using Excel for data wrangling and test manipulation
I’d say Excel contains a programming language. Or rather, multiple programming languages. Whomever decided to translate the functions should be forced to calculate the UN’s yearly budget by hand. On sandpaper.
Learning a couple of programming languages back when the world was young taught me several things which I’ve used at work, while never working as a programmer per se (much less in either of those languages):
eventually I also learned
4) how to make an object-oriented programmer pay attention, even if it is to shoot daggers at me (call something a “variable”)
My job only involves “programming” if one defines “using [del]vlookubusca[/del]chercherv” as programming, but that bit of programming work I did way back when makes it possible for me to act as an interface between end users and programmers without either party pulling their hair off.
Just…no. In no way, other than ease of use for very simple manipulation or data visualization such as bar or pie graphs, is Excel in any way preferable to a language or tool specifically designed for logical and mathematical data manipulation. Getting young engineers who have only had experience with using Excel because it was the only tool they used in school to use something, anything else for data analysis is like pulling teeth from an allegator, and yet to a person they have all come around to agreement that using Matlab or NumPy for handling large data sets is so much faster, more flexible, and less error-prone than using a spredsheet application. (I’ve given up on the older set who have only ever used Excel for everything including making stick figure diagrams…seriously!)
I had one young engineer who was trying to use it to perform digital filtering and fast fourier transformation; after allowing her to flounder for a week in her insistance that Excel was a suitable tool, I showed her how Matlab could do what she was trying to do in fifteen minutes with no errors and then plot the data in an easily reproducible template. I’ve shown others how to use Python and NumPy/SciPy to perform various data analyisi functions quickly and repeatably without having to cut and paste giant swaths of fomulas embedded in individual cells. I’ve had to recreate tools I’ve built in minutes with Matlab or Python in Excel for people who will only use Excel and it takes hours to set up and debug them, and they frequently break in anomalous ways because someone was sloppy with cut and paste. (And ues, I’ve used password protection on cells to prevent the logic from being modified but inserting new cells can break the underlying references.)
Excel is good for precisely two things, in my estimation of having used it before it was even a Microsoft product: building graphical logic tables for trade studies or analyses, and producing very simple graphs quickly. For everything else it is put to, from scheduling and labor estimation to statistical data analysis, it is crap even before you get to the numerous calculation errors that remain in even the most current version. (Hint: do not trust any results from the CHIDIST function, ever, without checking them against an independent reference.). And it is most certainly not any kind of structured programming language unless you actually fire up VBA, in which case you might as well install Anaconda Python, PDL, or a Scala interpreter, all of which will take about ten minutes if they aren’t already on your system (or you can use online versions) and gain access to functionality that Excel and VBA can’t even dream of.
Stranger
I just updated my esp8266/stm32duino home automation system via internet. I call it self-made although it is rather a collection of other coder’s code. Even this OTA update of firmware is only a couple of lines in code. What I’m trying to say is that a lot of programming nowadays equals a decent knowledge the good packages and libraries. I just had to mention these two architectures nodemcu and arm maple which are my favorites.
If you need a hobby, you can combine programming with electronics (embedded systems) and the Arduino IDE is a good starting point - although I hated everything about it at first, because I dazzled through my embedded world the hard way (WinAVR). Buy a 3.3V Arduino, a breadboard and a dozen of white LEDs (no resistors needed). You can follow your program flow through a serial monitor and can rely on the community support. You can download the IDE
https://www.arduino.cc/en/Main/Software
for Windows, MAC or Linux or use the Arduino Web editor.
I’m glad that you decided to mention Matlab instead of Scala, and to acknowledge that you are talking about “large data sets” instead of “generally”
Wait, you have someone who can’t do a DFT in any language, and after you show them how to do a DFT in Matlab, they can do a DFT in Matlab? That definitely shows the superiority of Matlab…in general…
But of course it’s not just that you are specifically talking about numerical analysis, the fact that you flounder in Excel is a factor too:
… having references that break when you insert cells is the moral equivalent of using i,j,k and n for all your variable names, but something you expect from a beginner…
Calm down Stranger: you never used Excel before it was a Microsoft product, and your knowledge of Multiplan and Lotus 123 is not relevant to the discussion. The functionality that you can’t dream of in Excel is functionality that I use as required.
I’ve used python since when it had to use it’s c library for floating point math, because nobody in the python community understood floating point, and it’s been good to see it gradually becoming generally useful. Matlab dominates it’s market. But of course both still have a long way to go to be as generally useful as Excel.
And sheesh, you have to suggest “Excel without VBA” to get something worse than Matlab and Numpy? They have their problems, but they aren’t that limited.
For fuck’s sake, I’m don’t “flounder” in Excel, I’m not “a beginner”, and I used Excel back when it was an outside product developed for the Machintosh and then acquired by Microsoft long before Microsoft Windows was more than an itch in Bill Gates amygdala, and no, I’m not referring to Multiplan or Lotus. I have used Excel on a regular basis for going on thirty years, and routinely help other people collegues out how to do more esoteric functions with conditional formatting, goal seeking quasi-optimization, and even trying to make it do thinks no sensible person should try to do in a spreadsheet. I’m morally certain I know as much or more about how Excel works than you do, and the ad hominem attempts to attack my credibility do nothing in service of trying to justify your claim.
Excel—the spreadsheet application, not the underlying Visual Basic for Applications interpreter—is not a programming language in any accepted sense of the term and it is not possible to write structured programs within it. A user can create a series of linking logical conditional statements that are evaluated by an event (changing the value in a cell) but it is not possible to create looping algorithims that are a key feature in any actual programming language, nor is it robust, numerically efficient, or readily capable of documentation and bug tracing or conditional interrupt. Excel is really good at a very limited set of tasks, such as basic logical comparison used in trade studies and simple analyses, or handling small data sets in tabular form, or visualizing data in simple charts. It is not suitable for doing analysis on even moderately complex data, has numerous and well-known problems with numerical accuracy and precision, and is frequently put to tasks at great effort that could be easily performed by a few lines of Python or PDL code instead of cutting and pasting formulae across thousands of cells. And it is not, under any accepted definition of the term, a “programming language”, period.
Stranger
Try your local library. If you have a card, you don’t have to actually go there; if you have an account, you may be able to use Lynda.com.
And I usually get angry at the people who do do this, and suggest that they should use Access instead. I’m not talking huge computational statistic loads, either; just massive amounts of data. Access isn’t even all that hard.
Except good programming practices largely are NOT a function of a language. There’s absolutely nothing stopping anyone from writing a 20,000 line main() or redefining the alphabet with macros or implementing ADTs and then never using them as anything but primitives (these are all real-world things I’ve seen “professionals” I’ve seen do in C++ btw). And on the other hand, in a shell script, there’s nothing stopping you from defining and invoking methods and documenting and indenting everything cleanly and scoping your variables properly.
I know there are things you’ll miss in a shell scripting language which I mentioned earlier. But a LOT of the basics are indeed there. And quite frankly you can go around and around on feature sets all day. Most kids coming out of college these days learned to program in Java which of course means their grasp of pointers and memory management is probably pretty shakey.
But if your only argument against learning a scripting language is that it doesn’t support clean structure, then I feel like you really haven’t kept up with the state of that art. Crack open a recent Bash book and see what I mean. The tools are all there to support structure or sloppiness. But as with any language, it’s up to the practitioner as to how those tools are used.
Perl is essentially a superset of shell scripting languages with the added advantage of having an enormous number of modules available that can perform specific types of tasks. If you can master Perl, shell scripting becomes pretty trivial to learn. And frankly, while most non-CS/CE majors have never spent much or any time in a command line shell, Perl is used all over the Internet in various ways, and can be written in a very structured and readily debuggable form, something that you rarely see in shell scripting.
I have to agree that Java is just every sort of terrible (hence why I referenced Scala, which is a far superior implementation of a language compiled to Java bytecode), I’m not sure that lacking a grasp of pointers and memory management is all that critical for the general programmer, and especially for someone for whom programming is just a hobby. The use of these features to write computationally lightweight and efficient code is critical for applications that have to run on bare metal such as video drivers, and for real time embedded systems for critical applications, but computer processors and memory are now so cheap and fast that the abstractions in compilers or interpreters that make applications memory safe don’t really take a giant performance hit in practical terms. If you are writing something like an application to play Spades or to perform digitial signal processing to convert all of your music collection to minor key because The Cure just didn’t produce enough emo music to feed your sense of despair, you can use standard libraries in Scala or Python to take care of optimizing the number crunching, and if you really need good computational efficiency for some particularly heavy lifting convert the necessary processing code to C or Cython and leave the remaining glue code in a higher level language.
Really high performance comes at the expense of good structure and readability, and a beginning programmer should focus first on making code readable and learning proper structure before cutting corners for the sake of efficiency, because while it is always possible to dig into well-written code and restructure it to be more efficient, the converse is not generally true. It’s like learning to drive; first, learn to do it well in good conditions and obey the speed limits, and then get out on the track or trail road and learn how to drive aggressively in less than ideal conditions.
Stranger
Perl would be another good choice as would Python. But really the reason I suggested shell scripting is because the cost of entry is so low. Quite literally any bare-metal install of any Linux distro has everything baked into it that you would need. And when I talk about basics, I really do mean the fundamentals of programming such as variables, scope, calling conventions, methods … the first few CS 101 lessons … they’re all there in bash scripts. Then once you’ve mastered those, I’d say look into moving into Perl or Python.
You’re assuming that most people have access to a Linux installation, but in fact, the majority of users are on some version of Microsoft Windows. There are a variety of Perl distributions and integrated development environments for Windows, but running a Linux shell in Windows, while certainly possible, is somewhat more involved. And you can write really, really simple programs in Perl (or pretty much any other high level language, for that matter), so starting with a shell scripting language is unnecessarily cumbersome and limiting.
It’s also the case that people are more engaged if they can move into doing something practical and/or graphically interesting quickly, which can be done with Perl using a variety of easily installed toolkits, but shell scripting is really designed for command line use and not intended for any kind of graphical functionality. (I say this having once created a Galaga-esque clone in vi for no good reason other than not having anything better to do while injured at school.) If you spend a lot of time working in a CLI on a *nix system, learning shell scripting and how to pipe commands together makes a lot of sense. If you are a typical Windows user looking to learn the basic elements of programming, going with a language that is actually designed to be used in a structured, functional is the better option. Just as long as it isn’t Java, because that language was designed by dyspeptic monkeys on meth.
Stranger
Actually, I’m not sure that’s true any more. Between chromebooks and especially smartphones, I suspect that there are now a greater number of users on assorted Linux-derived OSes than on Windows. Even more, if we also allow the FreeBSD-derived OSX and iOS.
You know the old adage that Fortran programmers can write Fortran code in any language and C programmers can write C code in any language? Well, back before the Dope, I was active in a set of IRC chatrooms, and I knew one guy who wrote C++ code, in the scripting language that was built into mIRC.
While that is technically true, virtually nobody is going to be writing shell scripts on their phone unless they are already a sophisticated user (and I say this as someone who writes Python and occasionally Scala on tablet applications). For most people, their Windows desktop, laptop, or tablet is going to be the device they use for entering the world of programming, and it is far easier to download and install a Perl or Python IDE than to set up to run a Linux emulation layer and work from a CLI shell.
Stranger
If you have access to a PC and the Internet, you have access to Linux. Period->. And these days having familiarity with 'Nix is a far more valuable skill than Windows. So you could say it’s a nice, unintended 2 for 1. And if you’re not comfortable getting out from a MS environment, then you just install Ming or even easier just go to any number of virtualized shell environments online like this…
https://www.tutorialspoint.com/execute_bash_online.php
Accessibility is only a problem if you make it one.
You are putting the cart way before the horse. Once again, I’m simply talking about picking up the basics of programming. IDEs, graphical debugging, GUIs, etc., while nice, will serve to muddy the waters for someone starting from ground-0 trying to learn to programming theory and not necessarily specific languages. There are certainly other ways to teach these concepts. Once again, I suggested shell scripting simply due to its ubiquity, low cost of entry, and marketability.
Just to give you an idea of where I’m coming from, when I interview people I give them a series of very simple series of programming challenges. These are things that can be done with 5-20ish lines of code that I could do 5 different ways in my sleep. And quite often I get people with 5, 10, 15+ years of experience that just completely freeze up when I ask them to scribble out some code on a whiteboard. You tell me why you think that happens.
If you honestly think it’s easier to setup an IDE than run a MinGW shell then … I guess we’re done here. That’s just ridiculous. :smack:
Anaconda Python: Install on Windows
Installing Strawberry Perl for Windows
There are both comprehensive distributions of Python and Perl that install binaries including all major toolkits in a few steps without requiring administrative access and are ready for turnkey operation. There are others, of course, but these are fully open source and come with tools for adding and updating other modules, including the aforementioned graphical toolkits. The only “ridiculous. :smack:” claim here is that shell scripting is easier and somehow more appealing to the amateur enthusiast looking to learn the basics of programming.
As for the supposed marketability of shell scripting, I can’t reacall that coming up in an interview, ever, even in a job where I would be predominantly working in a *nix environment going back through the early ‘Nineties on System V systems through modern Linux and FreeBSD. It is either assumed that I already know the basics or can pick it up. Whereas I have had people ask and test on fluency in C, Fortran, and Python, because those are skill sets of actual interest.
Stranger
You know just for s&g’s I timed how long it would take me to bring up a MinGW shell on a fresh Win7 install. I looked at the clock … 4:55p. Went to the MinGW site, clicked a few things, installed, opened up the console, looked at the clock again annnnnd … still said 4:55p.
So in less than 60 seconds, I had setup a shell that would properly interpret bash commands in a native Windows environment. Thus this BULLSHIT…
is, in 3 words, completely fucking ridiculous seeing as I could have someone punching out a script before you’re even halfway done downloading your IDE.
And no, before the inevitable accusation flies, I am not a graybeard stuck in a world of 37 vi sessions and a 2 MB .mk file. Most of my work these days either happens in Pycharm or Clion, which are both fantastic products from the brilliant folks at Jetbrains.
And if you’ll recall, my very first response to the original query was … it depends on what you want to get out of it. Once again, I offered up shell scripting…
“due to its ubiquity, low cost of entry, and marketability.”
You don’t agree. That’s fine, and that’s your right. It doesn’t however mean that I’m wrong when I say that you can indeed teach yourself many programming fundamentals from nothing more than shell scripting. Are there better ways? Sure, but the problem with jumping straight into an IDE without someone guiding you, is as I said … it can muddy the waters. Someone with no experience will often not be able to draw the distinction between what the language is capable of and what the IDE is doing for them. Think about your very first programming class. Were you dropping controls onto a form with a designer, or did you write the Hello World program?
Scripting languages are just fine.
The point is not that you can’t write structured code in assembler - I have - but that a new programmer given only an unstructured language is not going to be able to figure out how to do it.
The whole point of our exercise was to force our students to use structured techniques when writing in assembler, because otherwise their code would be impossible to understand, buggier than it would be structured, and tough to help them debug which we had to do.
Back then we didn’t even have adb. We let them run in a kind of sandbox so that they didn’t crash the machine when they screwed up, and so we could give them register and memory dumps when their code crashed.
Bottom line - some high school student back then writing Basic with no support is not going to write good structured code, even though it is possible.
GottaBeMeh, do you have some data on the marketability of shell scripting?
The resumes I used to get, all of which were from people working primarily on UNIX/Linux, never mentioned it as a skill, which makes me think it wasn’t considered all that valuable. The ones I hired knew it reasonably well. Like I said it is a useful skill, but I’d hate for anyone to try to find a job with shell scripting as their major talent.
I used to work for Sun, and there wasn’t much even there. And what was there was terrible.