Excel is not a programming language; it is a bookkeeping tool with limited functionality for performing various logical and arithmatic operations and transformations. When people start trying to use it for real data manipulation or filtering, very bad things can occur, notwithstanding the near impossibility of debugging errors in poorly structured logic spread across dozens or more cells. Excel has a passable programming language interpreter buried in it (Visual Basic for Applications) which can be used to create more advanced structured algorithms (although it is not at all computationally efficient or memory-safe) but you are generally better off turning to any of a number of high level languages and tools specifically designed for data wrangling or text manipulation, such as Python/NumPy/SciPy, Perl/PDL, or Scala for anything much more complicated than a trade study or balancing your checkbook.
When we have non-programming students take our Introduction to Programming class, we need to separate programming knowledge from programming language. One is like speaking English, the other is writing and spelling English correctly. Do you want to learn programming, or a specific programming language?
Depending on what you hope to get out of this as a non-programmer, might I suggest two Python books: Python: Automate the Boring Stuff (which is also available online for free), and Python Playground. I’ve used the first book in our classes, and both books have some good real-world examples of what you can do with some programming. Look at these books’ Table of Contents to see if these are the kind of things you’d like to do; perhaps that will answer whether you’d find the effort worthwhile.
As a guy who develops software for a living, the answer is … it depends.
It depends on what you’re looking to get out of it. If you’re just trying to round out a resume, then of course it depends on what job(s) you’re considering. Now if you’re trying to pick up new skills just because, then programming can certainly teach you to think logically and algorithmically. And this really is something that some people simply cannot do.
Now with that being said, I would suggest as an alternative to teach yourself UNIX\Linux shell scripting. This is something that can be done very cheaply, will teach you some programming basics, and has a MUCH higher potential to be useful for any given job. At my workplace, I deal with systems, electrical, and test engineers as well technical writers, SME’s, etc. And not a damned one of them can write a single line of code in C/C++, Java, Python etc. However all of them are fairly proficient at 'Nix shell scripting. It comes in so handy so very often.
I agree that this is a real useful skill to have, but it is no substitute for a reasonable programming language. Another problem is that I ran into lots of good engineers who seem to have never seen a command line in their lives, and who were kind of scared of it.
I think shell programs are ugly, while command lines with four or five pipes are things of beauty.
When your basic needs are not an issue (you are healthy, you have friends, you make enough money that you don’t have to worry), then I suggest you do the things you honestly want to do, for the true reasons why you want to do them.
In other words, don’t try to cover prerequisites for things you’re not even sure you want to do. Instead, name the actual things you want to be doing, and do them right away.
Computer programming is a method of problem solving. If you have no computer problems that you need to solve, you don’t have any automatic reason to learn how.
However… If you really want to learn programming or programming languages just because that sounds like fun, then do it. Be very honest with yourself about your reasons, no matter what those are. Because once your actual needs are met and your responsibilities are covered, “… because I just feel like it” is a perfectly good reason to learn anything you want.
It’s not a full substitute, no, but it’ll cover a lot of the basics like variables, assignment, conditionals/logic, looping, branching, etc. The things you miss are stuff like memory management, atomic v/s abstract data types, pointers as well as any higher level concepts like OO or design patterns for example.
If you learn a language now and don’t continually use it, you’ll likely forget a lot over time. It’s like if you’ve ever learned a foreign language in school. After a few years of not using it, you only remember the basics. But the good thing is that you can pick it back up quickly. So if you take the time now to learn programming, if you ever need to program in the future you’ll be able to quickly review and get back up to speed rather than start from scratch when you’re trying to get something else done.
But based on how you describe what you like to do, I think you will enjoy programming and may even get into more projects where you are actually writing the who program yourself rather than using an app. The apps are great at quickly getting things created, but you are limited to what capabilities they offer. With programming, the application is a blank slate that you can make do whatever you want. Of course, some tasks are quite complicated (like 3D rendering) that you wouldn’t want to write yourself, but you can call out the libraries which do the hard work. Programming will give you the ability to write a program that does what you want as opposed to whatever the app exposes to you.
I wrote quite a long reply to this earlier today, which somehow didn’t upload to the site. (I’ll blame the programmers ������)
I was in a similar position to the OP. For a long time, I’ve wanted to learn to program, not for career purposes but as a hobby. I don’t really see it as any different to learning to play the guitar, or taking up golf - programming can be a fun pastime, but with the added bonus of being able to make your computer do stuff.
I’m down the road a bit now. It comes in fits and starts; I’ll make progress until real life intervenes for a while, and then I pick it up again (sometimes needing to relearn bits and pieces).
I had a Eureka moment recently. For reasons too dull to go into, I needed to download thousands of files from a remote server, one at a time. This would have been difficult or impossible to do manually, so I decided to write a program to do it. I didn’t know everything I needed to know, but by breaking it down into chunks I was able to produce a program that did the job (and I learned a lot, as well).
I’m sure proper programmers would write cleaner, more efficient code, and they’d do it in a fraction of the time - but the fact remains that I SOLVED A REAL WORLD PROBLEM WITH CODE. For someone who had only written “hello world” programs, with no real-time world application, that was a big moment. ������
The barriers to learning to code are very low. All you really need are a computer, time and learning resources which can be free or very cheap. OP, if you fancy it, why not grab a tutorial, set aside a few hours, and see how far you get?
Structured programming came in while I was in grad school, so I learned to program the old way. It is not a good way to start.
Back when PCs were just starting, my CS professor friends dreaded each fall when the kiddies who programmed in Basic on their C64s and PCs came in sure they knew all about this stuff. It was not pretty. When I was involved with teaching PDP-11 assembler we graded the first programming assignment (in Pascal) to scare the students into programming in a structured way, because otherwise they would never be able to write decent assembly code which requires you to write in a disciplined way. (We dropped the grade so as to not mess anyone up.)
It is far easier to go from good programming practices to something like shell or assembler than to go the other way.
I started out with machine language, then worked for short while with a Pascal compiler. One day, curious, I looked at the object code the compiler was producing and it was horrible. There were pointless extra loads and stores. Even if you wrote a tight expression, it expanded into this sluggish bloat that offended my sensibilities. But some time in the intervening decade, compilers have become wicked smart: you can write verbose source code that goes through four steps that would fit on one line and modern compilers will shave away the excess, reducing to tight machine code. It has turned inside out, which I think is a good thing, because verbose source is easier to manage and understand. That is, as long as we still have a few people who can handle manual optimization, for those rare times that it helps or is needed.
Learning a programming language does help you with analytical skills. So does playing chess. Keeps you sharp. As a useful tool, I too would recommend Excel. I’m a programmer and db designer myself, and have a general disdain for spreadsheets, but they can be very useful.
On a side note, check out Lynda.com. It is a training website with over 6000 courses. I get it for free through work. Some one mentioned Python, and I do use Python at work and have taken the Lynda.com courses. Some are better than others, I don’t know what Lynda.com costs.
Can anyone recommend one of those online visual GUI tools that teach programming concepts? They are often used in schools as a intro to programming for people who aren’t going into computer science. They’re not focused on teaching a real programming language, but instead are just presenting the basic concepts of computer programming in a visual manner.
I don’t know them specifically, but I’ve seen them occasionally. One example might be to have inject balls bouncing around a box. You write code to control how many balls are in the box, add triggers to do something when a ball hits the wall or another ball, add visual elements like blinking balls, and stuff like that. The pseudo-language that is used is pretty simple, but teaches the student how things like loops, conditionals, functions, etc. can be used.
For someone who is just learning programming for fun, starting out with a visual tool might be helpful for learning the basics of how a program is written. Then it might be easier to move to an real programming language where you write programs from scratch.
Yeah, Scratch is what I was going to recommend, too. It’s designed for making games, so that’s what it’s most useful for, but you could in principle do anything in it.
Oh, and since the OP mentioned 3d modeling, what are you working with for that? There’s probably some programming there, too, if you dig deep enough into it. For instance, in Tinkercad, the custom shape generators are all written in Javascript.
Which compiler? For my dissertation I rewrote the original Pascal compiler, by Wirth and Jensen, into one for the language I designed. The compiler was terrible! (I never looked at the intermediate code it generated.)
There are lots of people who are really into excessively tight code as a sign of hackerdom or something. You know, utilizing all the side effects you can get out of Perl, say. But I’m with you. I was happy to be relatively verbose, so that I can remember what I did when I went back to the code six months later.
About 3 decades ago, I bought a used Mac 512E. It strained my budget at the time, so I could not afford much software. Certainly not developer tools. Then I discovered the interrupt switch on the side. Using that and a decent knowledge of Mac OS and 68000, I worked from there to build a fully functional app (which was only somewhat more sophisticated than the interrupt display, but with mouse response, easy scrolling and, sorta, resource management) in a few months. It was great nerdly entertainment for my spare time.
Finally I could afford a Pascal for it. Which turned out to be nowhere near as much fun. All that time spent scraping the metal, writing tight code for a snug environment, gave a fairly good idea of optimal code (which, at the time, was far more straightforward than contemporary optimal machine code). So, when I looked at the Pascal output, I could see that it was utter shit.
I have a long history with machine code. I first learned programming concepts based on machine code from a hypertext book (it was well designed: teach for a page, ask a question, direct the reader to a subsequent page based on their answer). In our computer class, we had a basement-freezer-size Burroughs E4000 that could only be programmed that way (along with the TTY to the HP over on 102nd street).
Machine code/assembler can be interesting and instructive, but doing much with it is not very practical. And it can teach you bad habits. But starting near the bottom (e.g., C) can make it easier to learn higher-level languages. Except for, say, Haskell or Lisp. I notice no one have suggested exploring that kind of programming.
I have, for my TI-84 calculators, written a number of programs so as to help (or check) my students (even tho I know I can download many off of the 'net). I first learned Basic wayyy back in high school, more than 40 years ago. My latest magnum opus was penning one which would generate a polynomial of up to 6 degrees for my students to find its roots. Even tho this is technically for my job, in a way I consider it more as a hobby.
I certainly hope you did that by picking the roots first, and calculating out a*(x-b)*(x-c)…(x-g). Most 6th-degree polynomials, it’s going to be hopeless to try to find the roots in any way but numerically.
(and how many students realized that that’s the way you’re generating the problems?)
I was pleased to be able to write a factorial function for my HP33 that did not even use any of the memory. And, better than a built-in factorial, it worked for non-integers as well.