How Should a Non-Techie Learn Programming? 346
CurtMonash writes "Nontechnical people — for example marketers or small business owners — increasingly get the feeling they should know more about technology. And they're right. If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family. But how should they get started? I started a thread with the question on DBMS2, and some consistent themes emerged, including: Learn HTML + CSS early on; Learn a bit of SQL, but you needn't make that your focus; Have your first real programming language be one of the modern ones, such as PHP or Python; MySQL is a good vehicle to learn SQL; It's a great idea to start with a project you actually want to accomplish, and that can be done by modifying a starter set of sample code (e.g., a WordPress blog); Microsoft's technology stack is an interesting alternative to some of the other technology ideas. A variety of books and websites were suggested, most notably MIT's Scratch. But, frankly, it would really help to get more suggestions for sites and books that help one get started with HTML/CSS, or with MySQL, or with PHP. And so, techie studs and studdettes, I ask you — how should a non-techie go about learning some basic technological skills?"
practice (Score:1, Interesting)
Once a day for five days for a year they should practice with the programming language of their choice.
There is no magic bullet, you're not going to learn Java or Python in 20 days with those dunderheaded, oversized volumes.
Just work at it and you'll get better.
Also: http://norvig.com/21-days.html [norvig.com]
Simple! (Score:1, Interesting)
QuakeC.
Install Quake, get Progs106.zip and FrikQCC then go nuts making Quake into something that's not Quake. You'll learn a lot of fundamentals from the trial and error alone!
Hey, it's how the greats started.
Funny you should ask... (Score:1, Interesting)
Funny you should ask...
I was just watching a video or 7 at the Khan Academy [khanacademy.org], and I was saying to myself "Wow, it would be so easy for me to make 10 minute lectures about one of my chosen programming language!". As a collective, we could probably simplify all sorts of compsci information!
Other than that, I know a few colleges have free courses online. Like the MIT free course material [mit.edu]. I'm sure someone more informed here could provide you with some top-notch links.
Re:Division of labor? (Score:2, Interesting)
This is much too limiting. Changing careers can be a wonderful thing for people. I know someone who had no technical background and went from managing developers to being a developer and it was a great change for her. She found work to be more interesting, the problems challenging and finding solutions gave her a sense of accomplishment. In other words, a career change was much more fulfilling than simply sticking with what she knew.
And she did it around age 50.
Re:They shouldn't (Score:3, Interesting)
I think it really depends if they want to learn and are capable of grasping the material. I'll agree that not everybody can learn programming, it really takes a certain way of thinking, but I wouldn't say that trying wouldn't be useful. Even for people that ultimately are not going to be able to be programmers it is good to have some understanding of what goes on. Maybe then we can stop getting clients/employers that think it's like pulling up a word processor and typing a few buttons.
I think it was Rudy Rucker that said programming is like building a house of cards with invisible cards. There is some truth to that idea.
Re:Why should a non-techie learn programming? (Score:4, Interesting)
learn the standard way (Score:2, Interesting)
Re:PostgreSQL a better choice for database (Score:3, Interesting)
Nah - iirc, it's opensource, meaning that if need be, MySQL's development will be reconstituted under other leadership.
I've had the same issues with MySQL since I first had to use it, partly issues with its parser being ridiculously bad at handling relational calculus (meaning you're stuck with relational algebra if you want your queries to scale, and eventually they will), its SQL dialect being obscene (oh god why do I grant privileges to nonexistent users to make them exist?), it not handling locking well (although it has improved remarkably on this front over the years), and a few other smaller things.
Of relational databases, I learned Oracle first - maybe this makes my preferences a bit "stuffy", but it's been very rare that I've met systems people who, given a project using MySQL, won't say that they wish they had started it with PostgreSQL, Oracle, DB/2, or one of the other choices people have. MySQL is the PHP of databases.
Good Lord, No. (Score:3, Interesting)
"Nontechnical people — for example marketers or small business owners — increasingly get the feeling they should know more about technology. And they're right. If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family."
If you are running a small business, marketing, and supporting a family -- then at this point you don't remotely have the time to learn programming from the ground up. (All of HTML, CSS, SQL/MySQL, PHP/Python on a business-critical project?)
Learning programming to that extent takes several years of alone time.
Don't (Score:1, Interesting)
I advise non-techies to not learn programming. Unlike most slashdotters, I don't see programming as a useful tool that everyone should learn, I think of it more as being a doctor than a mechanic. Sure, it'd be nice if everyone could program well, but the bottom line is most people don't have the knack for programming that techies do. As such, if they learn to program, they'll do it poorly (likely) as they lack the passion techies have.
How many times have you guys had to clean up code after a beginner, idiot, or non-techie? Be honest.
Food for thought,
(first time poster, long time reader)
mod up! (Score:3, Interesting)
They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.
Best response posted so far.
Seconding that with an example (Score:3, Interesting)
Re:Don't (Score:4, Interesting)
So if someone is having the problems noted above, maybe they need a different attitude. Whining never solved anything. And when I hire people, I don't want excuses, I want someone who will dig it and get the job done.
Any decent programmer can learn a new language after they have been programing for years, it's just not that difficult. Unless someone isn't that good to begin with. Because no matter how much they tell you, basic programming really hasn't changed in 30 years. Oh sure, we use IDEs instead of card punches, and they'll talk about object oriented programming and the new paradigm, but it's really not much different than the old paradigm when you look under the covers. Computers still do things the same way they always did. Unless someone changed how binary works.
If someone doesn't want to be a programmer
Re:They shouldn't (Score:3, Interesting)
Similar. There are a lot of differences. It's like math vs engineering. Yes engineering does involve math, but most engineers don't actually spend that much time doing math in the real world.
A programmer could spend a fair bit of time thinking on topics like:
0) What's the "fastest" and "OK enough" way to _write_ the code (CS on the other hand is typically more about the best way the code should do stuff).
1) How can a hacker or user screw this up. How do I stop it?
2) What sort of exceptions/interrupts are possible at this point and what should be done about them?
3) Is this library portable? Is it ok to assume recent enough versions of it are available on every system, or do I bundle it (and check licensing).
4) Should I bother making this configurable? What's a suitable default value?
5) WTF do I name this item (variable, object, method, module, lib etc)?
I'm sure the more experienced and good coders out there can provide more and better examples.
And from what I see, most computer scientists hardly ever think about stuff like that. Maybe a few might descend from their ivory towers to touch on such mundane topics from time to time.
> I know computer science is way more than just programming.
And programming is way more than computer science.
There's overlap, but you can be a top computer scientist without being able to write a multiplayer game engine that's even half as good as the current ones on the market - easy to be licensed out to 3rd parties, performs well, great features, not ridden with security flaws etc.
And you might be a good programmer without being able to create sorting algorithms even half as good as the current ones known. You'd probably just look for convenient and suitable preexisting library/algorithm for your purposes. After all if the product is not out of the door soon enough, there may be zero customers to enjoy the benefits of your fancy latest research sorting algo.
Yes there's some overlap but they are two rather different fields. Then again to most people it's "Geeky/Nerdy" stuff, so depends on how far back you stand...
Re:Don't (Score:3, Interesting)
So, the best thing you can do is stay out of it and pay us lunatics that are dumb enough to go through all this crap.
Keeping up with the latest trendy languages is a path to burn-out. Find another path.
This flitting from thing to thing isn't right. It's like a heart surgeon changing to a ear, nose, and throat specialist, a radiographer, then a dentist, within 10 years.
Your career path expectations need calibration (Score:3, Interesting)
You're an artisan. As an artisan, you apprentice under a specialty with a short life, but exceedingly high payoff, which is it's own reward.
Increased tenure does not imply increased capability, unlike typical 'Professions', i.e., Plumber, Mechanic, Lawyer, Professor, Accountant, TV Producer..
Like the brick layer, you are a means to an end. A potentially cushy end, but an end nonetheless.
Assembly or DrScheme (Score:1, Interesting)
IF you want to know the inner workings of computers I recommend the book Assembly as a first language.
If you want to start with higher level languages MIT Press put there book "How To Design Programs", which uses DrScheme, a Lisp dialect used for teaching programming, online at htdp.org