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?"
The tao of programming (Score:5, Funny)
Give someone a program, frustrate them for a day. Teach someone to program, frustrate them for a lifetime.
Re: (Score:2)
I don't know... with crap like this: http://www.jasig.org/cas [jasig.org]
a program will frustrate them for years to come try tying it to every other piece of software they use.
Re: (Score:2, Funny)
You're obviously not trying hard enough if you only frustrate them a single day with a program.
PostgreSQL a better choice for database (Score:5, Insightful)
I wouldn't start with database stuff until you have a programming language or two mastered, but when you do learn one, learn PostgreSQL. MySQL's SQL flavour is messed up and because their parser doesn't handle relational calculus well, you're stuck with a language that's unusuable for much of SQL without syntactic contortions.
I wouldn't start with web stuff either - you want a classic programming background (which will be a bit depth-first) to see if you can handle it. If you can't, you probably should find another hobby - the world is full of bad code written by people who don't know what they're doing.
Re: (Score:2)
That's funny - I thought you were going to mention PostgreSQL over MySQL because of Oracle's interesting takeover leaving the future of MySQL uncertain.
Re: (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
Re: (Score:2)
Nah - iirc, it's opensource, meaning that if need be, MySQL's development will be reconstituted under other leadership.
That's true however postgresql is much freer than mysql. In particular mysql's client access libraries are under the GPL (with a few exceptions, e.g. for php). So if you want to write propietry apps against it (either now or in the future) you need a license that only oracle can sell you. IIRC at one point they were even trying to claim the GPL applied to the wire protocol.
It's not an issue
Re: (Score:2)
Re: (Score:3, Insightful)
Re: (Score:3, Insightful)
It is- but *learning* sql via MySQL is a horrible idea. It allows a lot of shortcuts that are both wrong and dangerous if you're not very sure of what you're doing; learners are much better off with *any* database that's more standards-oriented.
Re:PostgreSQL a better choice for database (Score:5, Insightful)
Re: (Score:3, Insightful)
Uh, handling of nulls, empty strings, and default values are not the same as in anything else. They're also absolutely horrible practice and encouraging new users to learn them is flat out retarded.
Also, I very pointedly didn't mention PostgreSQL. I advocated any standards-compliant DB. MySQL does not fit that bill.
Don't box the guy in! (Score:5, Insightful)
Writing "I want to be a programmer" is like saying "I want to be a doctor!". There are a million different sub-fields, from orthopedics (EG: fixing borken bones) to orthodontics (fixing teeth) and there's a million details to know for each field.
Programming is a big, big field and covers everything from hacking firmware in assembler to writing SQL queries to using macros in Excel. Laugh all you want to, but the lowly Excel macro quite literally runs Billion-dollar enterprises, and is legitimately a programming art, just as much as assembler or kernel coders in that it gets the job that's needed, done.
Start with finding out what you are trying to accomplish, and then work from there! My goal was to build and sell information management tools, and for me, PHP and SQL seemed like good tools for the job. They haven't disappointed me, for my focus, but then, I'm not trying to build a 3D FPS, either!
Then, get the right tool for the job, and roll with it.
Re:Don't box the guy in! (Score:5, Insightful)
So very true, regardless of what you're trying to learn. If it doesn't relate back to something you're already interested in you're not going to be able stick with it over the long haul.
Re: (Score:3, Funny)
So what you're saying is, don't box the guy in, even though it's really, really large box that he'll never see the sides of?
Re: (Score:2)
I wouldn't start with database stuff until you have a programming language or two mastered
I would start with either database or with programming languages. Procedural programming requires a different mindset than the set logic of databases. Experienced professional programmers can have a hard time dealing with database sets properly never mind someone who is trying to just dabble in both.
But to the original question, you could read a simple book on SQL like "Sam's teach yourself sql in 10
Re: (Score:2)
Oracle must've improved by leaps and bounds - last I used it (some years ago), it was one of the hardest databases to install casually, and its tools were relatively user-unfriendly.
Re: (Score:2)
Google is your friend. (Score:2)
Honestly some of the best help online is online follow along Examples by tech experts who want to build a name for themselves. Couple that with the forums that get indexed rather highly and you can read up on a discussion about what you need to do.
I can't name anything specific because it all depends on the rankings this month. But self teaching yourself is as easy as entering "[what you want to do] Tutorial"
If anything confuses you in the tutorial, such as terminology, Google that! Need help setting up a c
In my opinion (Score:5, Insightful)
In my opinion, as someone who's learned a few programming languages in his lifetime, the best way to learn a programming language (or any new technique, really) is to pick a task for yourself using that technique and figure out what you need to do to get that task done. For instance, I learned Javascript primarily because I wanted to query a couple of Sharepoint sites and display the resulting information somewhere else, and Javascript was as reasonable way of doing that as any. I learned Perl because I had a bunch of information in XML files, and I wanted to apply an XSLT transformation to all of them and concatenate the result together (that's also how I started learning XLST). I learned Java Applets because I was bored in a high school computer science class, and decided to make a 2D gravity simulation thing. I learned C++ because my dad had written his own custom version of tcpreplay, and offered me $20 to port it to Windows.
Just pick something that sounds like fun, figure out how to do it in the language of your choice, and do it.
Re: (Score:2)
I completely agree: the best way to learn programming is to be born to a parent who has programming experience. Given that the world supply of programming experience was probably thirty or forty person-years on the day I was born, I understandably failed at this.
Your odds are better nowadays, of course, but still you only get one shot at it. What I am trying to say is that your experience is probably still not that helpful for most people.
They shouldn't (Score:3, Insightful)
No, really... They shouldn't. Programming is a way of thinking, computer science even more so and if you haven't got that way of thinking, you shouldn't touch it. I'm really sorry. My wife doesn't understand a thing I do professionally (but it brings in the bucks, so we can eat) and I tried explaining. It just isn't her world and even the basic maths behind it are beyond her. Of course, I don't understand a thing about art, which is her thing.
This is akin to the question "I have $YOUNG_FAMILY_MEMBER who likes to game, how do I get him/her programming." You don't... Unless they show real interest it's a waste of time.
Re: (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 Ru
Re: (Score:3, Insightful)
Have to heartily agree here. I'm a techie, I understand code easily. It's natural for me.
However, I do agree with the OP that people in not-directly-technical roles should have more confidence with technology. Whether this comes from mucking around with SQL or HTML, or from just learning that most mistakes can be undone with ctrl-z, I think that gaining confidence through doing something that they actually want to accomplish is excellent.
For example, I gained confidence in home improvements by actually
Re: (Score:2, Insightful)
"Computer science is no more about computers than astronomy is about telescopes." --Edsger Dijkstra
You don't have to be a computer scientist to write a program or learn programming.
Computer programming is a vocational skill. Programming is not computer science.
Although methods of computer programming, and algorithms are subjects of study in computer science; practitioners / engineers do not require a knowledge of CS, only knowledge of the right APIs for their environment (which implement the algo
Re: (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 s
Re: They shouldn't (Score:2)
No, really... They shouldn't.
Yeah, the question seemed a bit ill-formed. If you can program you *are* a techie, so it might sound like asking how a non-techie becomes a techie. But it was phrased as if the person in question would remain a non-techie.
Re: (Score:2)
Yes, it is a way of thinking but that's a reason it should be taught. Even if they are a non-techie and never going to become a programmer there's still merit in teaching them a new way of thinking. Anyone can learn the basics and as most programming books illustrate it's really no different than creating a recipe. So it really is a good idea to teach people the basics of programming.
Especially in this case where people are asking to be taught.
I like the PHP suggestion. (Score:2, Insightful)
I like the suggestion to use PHP, it's perhaps the closest we have to oldfashioned BASIC. You hardly need anything to get started, apart from web hosting, an FTP client and Notepad. The language is well documented, its error messages are often helpful (except for that crazy hebrew one), and you get immediate reward and feedback when you refresh the page. It also has real world uses. Programming goes naturally from there, if you're curious and stick with it.
Re: (Score:2)
You don't even need webhosting or an FTP client if you use EasyPHP - just go through localhost in your browser:
http://www.easyphp.org/ [easyphp.org]
Otherwise it's a pig to keep reuploading to test for bugs etc.
Re:I like the PHP suggestion. (Score:4, Insightful)
Re: (Score:3, Informative)
error messages (the fact that there even *is* a crazy hebrew one in PHP makes this laughable but ok...), check
I should explain this for anyone who is perplexed as to why PHP has an error message in hebrew: it doesn't. The name used by the parser to refer to one of its operators ("::") is taken from hebrew ("Paamayim Nekudotayim", meaning "double colon"). This is what happens when your parser is developed by Israelis. The error message is, however, in english, only the operator name is not.
Re: (Score:2)
You hardly need anything to get started, apart from web hosting, an FTP client and Notepad.
Compare that to say, perl where all you need is . . . perl, or c where all you need is gcc (or any other compiler).
The point being: web hosting is not something the average non-techie has sitting around for when he decides to give it a go, nor is it something he is going to be likely to get in a matter of minutes.
If you have a half-decent linux distro you have the tools to start writing c, c++, perl, or python on your computer right now, if you don't have a decent distro, those tools are a command away.
!Programming (Score:3, Insightful)
What you are describing is not programming; it's web design and database administration. They may contain elements of programming, and they're both (typically) done on computers, but they're generally regarded as separate skill sets these days.
Just the basics.. (Score:2)
You might start with something like Scratch to learn the concepts.
Then I'd dive into PHP or Python. PHP is good because you feel like you are really doing something since it shows up on the web. Python on the other hand produces faster programs and has a very clean syntax. HTML, Javascript, and CSS are good if you're learning PHP anyway but do yourself a favor and avoid mixing HTML, CSS, Javascript, SQL, and PHP together. Learn to separate your code right from the start. SQL is always useful to know and has
Do you have a specific goal in mind? (Score:2)
It really depends on what exactly you want to do and what you have. Apple's automator will be good to learn some things. Those Lego kits are a great way to combine programming with real world results and not just get on screen results. Dylan is an easy language. Scheme is more to teach language theory. Lisp is a diiferent way to think of things. C is the great-granddaddy of the other major family of langaues and need-to-know if one gets into programming. Later major languaes will be a hybrid of ideas
Re: (Score:2)
Automator is actually pretty awesome. Yesterday fricken iTunes got stuck wanting me to hit 'Replace', for each of the 2000+ iOS apps I have, when cleaning up my library. No cancel button. No do for all button. (Doh. C'mon Apple iTunes is so beneath your standards.) I pulled up Automator and recorded clicking the button and told it to loop over it. In a couple seconds I had a script that kept pressing that damn button until it was done. So Apple sucks for iTunes but is awesome for Automator.
Most web designer
Q: How should a non-techie learn programming? (Score:2)
A: The same way as a techie. Long answer: Learn C, Haskell, Scheme, or whatever suits your needs by writing a lot of small to mid-sized programs. Learn about data structures and how they are internally represented on your machine. Sit down and actually do something instead of messing around with drag & drop RAD tools. That's how you learn it. (In my opinion, at least.)
Re: (Score:3, Insightful)
what do they want to do? (Score:3, Informative)
I've been working in programming for over a decade and haven't had to deal with CSS or database work at all. The last website stuff I did from scratch was pure HTML. Arguably this isn't great from a generalization point of view, but I've got most of a decade of experience with low-level linux kernel and application coding, high performance networking, high reliability system design, etc.
As others have said...the place to start depends totally on what they want to accomplish. I started out as a kid typing in simple games in BASIC from a magazine, then debugging them trying to find the typos when they didn't work right away. Now maybe it might make sense to create a simple iPhone app (or the equivalent for whatever other phone one may own).
Re: (Score:2)
Basic scripting? (Score:2)
Plethora of Options (Score:5, Informative)
1. You have to get your mind in the 'programming' mindset. Learning programming isn't necessarily purely about being a techie. You need to have solid logic skills. Much of programming is spent just getting logic right. Check out Boolean Logic [wikipedia.org] for an launch point. The knowledge you gain from briefing this area will carryover into many, many programming languages. Programming *is* logic.
2. Learn what you want to program for. Pick a startup project. Is it a website you want to make? HTML & CSS is very different than learning C or C++, likewise, SQL is very different than assembly. Not that certain concepts don't carry over, but much of being a jack of all trades is simply having the ability to have good conditional logic skills, and the ability to Google things quickly and learn to apply them as you go. You don't have to become a master of all languages, or hell, even one language, but if you are truly *interested* (thats the keyword, if your not interested, its just not going to happen), and you have done a little programming in a couple of simple languages, then you will be in a good position to progress to more difficult projects.
3. Learn what you want to program for. Again. Repeated point. There are hundreds of programming languages, platforms, architectures, styles, libraries, etc. Pick something you are interested in, read about it a little bit, and if it looks like the learning curve isn't too ridiculous, start there. Perhaps a simple text based JavaScript browser game. At the end of the day you will know a bit of CSS, HTML, and JavaScript if you put your mind to it. But thats just one example.
4. W3C. This [w3schools.com] website is a good starting point for all things web.
5. Chrome Experiments [chromeexperiments.com] If you really like web, check out the future of browser bling. Heavy JavaScript and HTML5
6. Databases. Not the most mentally entertaining, but you will need the knowhow to connect, select, insert, update, and delete data if you are doing anything with data. I am a Microsoft guy, and I can tell you that the Express Editions [microsoft.com] of Visual Studio are a greating starting point for a newbie, at zero price-point, and bundled with SQL Express [microsoft.com], thats a good place to begin.
7. Also, places like CodeProject [codeproject.com], StackOverflow [stackoverflow.com], and CodePlex [codeplex.com] are great tools for questions ranging from the most basic to the most advanced of topics, and downloading sample code and live projects for tinkering around with.
introductory course at community college? (Score:2)
I've seen the same kind of courses offered at community colleges. Some techies like myself can read an instruction manual and just do it. Other people prefer the structure of a taught course.
learn the standard way (Score:2, Interesting)
Re:learn the standard way (Score:5, Funny)
High School/Jr.High
10 PRINT "HELLO WORLD"
20 END
First year in College
program Hello(input, output)
begin
writeln('Hello World')
end.
Senior year in College
(defun hello
(print
(cons 'Hello (list 'World))))
New professional
#include
void main(void)
{
char *message[] = {"Hello ", "World"};
int i;
for(i = 0; i = 0) {
while(defined($arg=shift(@ARGV))) {
$outfilename = $arg;
open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
print (FILE $msg);
close(FILE) || die "Can't close $arg: $!\n";
}
} else {
print ($msg);
}
1;
Experienced Hacker
#include
#define S "Hello, World\n"
main(){exit(printf(S) strlen(S) ? 0 : 1);}
Seasoned Hacker
% cc -o a.out ~/src/misc/hw/hw.c
% a.out
Guru Hacker
% cat
Hello, world.
^D
New Manager
10 PRINT "HELLO WORLD"
20 END
Middle Manager
mail -s "Hello, world." bob@b12
Bob, could you please write me a program that prints "Hello, world."?
I need it by tomorrow.
^D
Senior Manager
% zmail jim
I need a "Hello, world." program by this afternoon.
Chief Executive
% letter
letter: Command not found.
% mail
To: ^X ^F ^C
% help mail
help: Command not found.
% damn!
!: Event unrecognized
% logout
Re:learn the standard way (Score:5, Informative)
And if you want the whole thing:
http://www.gnu.org/fun/jokes/helloworld.html [gnu.org]
Re: (Score:2)
Re: (Score:3, Informative)
Leaning an assembler is a good place to start, but for a beginner to learn the x86 thoroughly is a bad idea. The principles of an assembler and its relation to hardware is important, the minefield that is the x86 design is discouraging.
Learning K&R C, which is now obsolete, is a mistake. Learn ANSI C and something of the best extensions.
But why? (Score:5, Insightful)
They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.
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.
Re: (Score:3, Insightful)
Re:But why? (Score:4, Insightful)
if the OP was asking how to learn some basic PC maintenance, save on a couple easy repair calls, maybe even set up a simple LAN, sure. but he is asking about how to do things that are well beyond the skill level of a "handy guy". if he is unable to distinguish between the "simple fix, save a buck" stuff and the "you probably suck if you haven't been doing this every day for 10 years, and maybe even then" stuff... well all the more reason to discourage him from going further.
Number crunching you say? Learn excel then vba (Score:2)
Excel almost feels like writing a mini program in one cell. One cell can have several if conditions and check multiple conditions and return a result.
This will teach them logic and how to assess data and get out of it what they want.
Then as they get more comfortable and then realize they are doing the same stuff in excel over and over, they can branch out into vba.
And for learning it, they can record macros and see how functional (albeit bloated) code works and modify it to their liking. Tell me another e
Learn Unix (Score:5, Insightful)
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.
It's like.... (Score:2)
It's like asking: How can I learn to be a ( surgeon, lawyer ) in a few days? After all, I can carve a turkey already and I've watched every season of "LA Law".
Programming may seem easy-- after all, it's just typing, right?
Well, surprise, surprise, it's a lot harder than those "[Language X] For Dummies" books let on.
In fact some of us went to school for 4 years and just learned the basics. Maybe after another ten years you get good at it. No shortcuts.
Re: (Score:2)
That's the fundamental misconception I always try to address with non-programmers. Programming APPEARS to be about typing. It is REALLY about thinking.
About thinking (Score:2)
I may sound cynical.... (Score:3, Insightful)
....but the "non-technical" person that starts with this type of mindset, I suspect, won't get too far. Learning anything complex and new requires enduring efforts and a strong will, plus a certain degree of intellectual curiosity, and a sense of purpose.
"Let's start learning something about X", especially if X is as broad as "technology" is too generic an intention, to fit what above.
It reminds me of man who goes at the library and says: "I have decided to get an education. Which books will get me educated?"
HTML, Notepad (Score:3, Insightful)
Odds are you'll never have enough time to learn programming at the depth that someone who is very good at it knows it.
Start small. Learn how to write a static web page using nothing but Notepad in Windows. Then, when you've mastered that, try using CSS to change the way it looks.
At this point, you can get into Javascript, which is a fantastic language for learning. Try to make something on the web page change when you mouse over it. Experiment with changing text fields in Javascript.
Then, write a simple "desktop" calculator as a web page.
This will likely take you a few months or weeks if you spend a lot of time at it. Remember, use Notepad only. Don't worry about making it work in anything but Internet Explorer (or your browser of choice) because that will make you insane.
When you can write Tetris [sourceforge.net], then you're ready to work with databases and servers.
Don't use MySQL, it's an abomination. If you have Microsoft Access, start with that. Make a project in that that real people will use. If maintaining it becomes difficult, it's because you don't know enough database theory. Figure out on your own why you want data to be fully normalized and only flattened with many saved SELECT queries. Try to figure out how to write the queries in SQL using the (excellent) query editor. Write UNION queries.
Now you're ready for a server and web site.
Re: (Score:2)
Shoot, sorry to reply to myself, but the alternative to MySQL is PostgreSQL, and it's much, much better. Trust me on that. Nobody gets it at first, but anyone who spends any significant amount of time using RDBM's properly will end up wondering why MySQL even exists.
name your pleasure (Score:3)
In watercraft, there are two sides to the tree: watercraft where buoyancy is independent of orientation (e.g. Zodiac) and watercraft where orientation is everything. In the second group, you have canoes/kayaks with great initial stability and terrible final stability, and you also have the converse. For propulsion, you have gas eating outboards, propulsion by environmental agents, and self propulsion. And you have a choice between artificial materials and natural materials.
C is instructive if you stay close to the shoreline. LISP is a kayak. You can roll over and come up the other side. Some people like that. Python is a reasonably nimble rowboat with room for a picnic cooler. PHP is a powerboat with an onboard mini-bar in a deadhead lagoon. Java is a twin Zodiac catamaran. Never sinks in the water, but watch out for the trees. C++ is a canoe with two gun decks and side mounted chainsaws (sorry, Bjarne). Name your pleasure.
I'm partial to the wood-canvas Chestnut Prospector, paddling solo in a sheltered bay. The one thing an amateur absolutely needs to avoid is going bow up against a cross-wind.
It's easy (Score:2)
Visit your local Barnes and Noble. Find books on the programming language of your choice. Buy them. And instead of leaving them lying around - READ them.
Get your hands on a compiler for the language of your choice, try out the examples in those books (DO NOT use the included CD's, that's the lazy man's way). Pay attention to the code you are typing. Compile, run, try to figure out what's happening. Look for tutorials on the internet, and do the same.
Finally, assign yourself SIMPLE projects and try to write
Seems simple to me... (Score:2)
I've heard that there are these places called community colleges that supposedly have these "class" things. If you don't want that, you could probably read a book or a website or something.
Worst. Ask Slashdot. Ever.
Re: (Score:2)
Worst. Ask Slashdot. Ever.
You are either trolling, or have short memory, for I am fairly positive that How To Get a Game-Obsessed Teenager Into Coding? [slashdot.org] falls much closer towards your categorization. At least this question focuses on self-betterment, whereas the previous question is about casually pointing somebody towards an orange, although they currently enjoy apples.
R U Kidding ME? (Score:2)
First concepts visually, then boring text (Score:2)
That's an ambitious goal. (Score:2)
Most programmers (at least the ones I know, including myself) didn't start with such lofty goals. We also started very young - I started in middle school writing tiny little BASIC programs on a TRS-80. It took me several years, and lots of tiny, simple programs, before I even realized I had any sort of actual talent for it, much less the desire to do it for a living. Then I went to college and spent several more years learning programming at a purely academic level - again, lots of relatively small, simple
For Business/Marketing people? C# (Score:2)
Every application will have tools that are more or less appropriate for the task at hand. Even just the two you listed -- throwing up a small web site and doing serious number crunching, are
Codingbat (Score:2)
Learn to think first. (Score:3, Informative)
If you can't write programs better than you phrased your question you will be no good to anybody. Learn to think and write clearly.
I suggest you start with a book similar to, "Programming Logic and Design" by Farrell http://www.powells.com/biblio?inkey=17-9781418836337-0 [powells.com] . This approach teaches you how to think about solving problems using computers, and you will not be stuck in any specific language. There are already too many people out there who learned a computer language and jumped to the conclusion they were programmers.
When you do pick a language, pick a GOOD source for learning. I like the books written by Charles Petzold or the books produced by Deitel and Deitel. Pick a useful language like C/C++ if you can.
Make a list of all the things you would like to program if you could, then start with the smaller ones and work forward. Learning to program Excel spreadsheets will teach a a LOT about regular programming, including how to relate to a database. If you are serious about database applications read Joe Celko's books; they will save you LOTS of time and save you from writing too many embarrassing apps.
When you get so you can produce some decent programs, polish up and get some depth by learning Assembly and LISP.
With all this as a foundation, you will have a terrific overview and some solid competency in programming. You can do whatever you want. You will have the mental skills to learn any language and do good work.
You might wonder if you can actually learn programming by reading on your own; the answer is NO! You must program to attain the skill. I have a friend who used to be an electronic organ repairman. He saw that the future was not in his knowledge of electronics, but in swapping out cards in the organs. He took a job on an oil rig for six months and learned to program from Petzold's book on Windows Programming during his off time. Three years later he was earning over $200/hr as a contract programmer. Much of his success has to do with the high standards he sets for himself.
Since it won't happen overnight, you might want to think about short courses offered by DeVry or a similar institution.
Good Luck, and have fun.
What's the point? (Score:2)
Game Maker (Score:3, Informative)
I'll probably be vilified for this, but if you are using Windows (or Mac), try Game Maker (Mac version is beta). It's a good introduction to a lot of programming concepts using a construction set like metaphor. After you learn the basics, it's easy to move to just code. Game Maker is free, many schools use it, and it was developed by university professor as a teaching aid.
http://www.yoyogames.com/make [yoyogames.com]
Read the manual, do the tutorials, work your way up to GML code, take your questions to the GMC forums. Once you learn GML (which is similar to C and PHP, but allows Pascal style code as well), you'll be able to pick up other languages easily. Most programming languages are very similar.
There is also a book, The Game Maker's Apprentice, if you feel the need to purchase something.
http://book.gamemaker.nl/ [gamemaker.nl]
what problem are you try to solve? (Score:4, Insightful)
Don't (Score:5, Insightful)
I've been programming for 25 years.
Here's what you'll get. You will learn language A, become proficient in it, get a job using it and then eventually get laid off.
When you look for work, you'll find that Language A is no longer the "in thing". They want people that know language B, which was introduced 5 years ago.
The H.R. people will want only candidates that have 7 years experience in language B.
Then you'll learn B, but someone will come up with B#, B-, B++, B--, all basically the same thing, but with just enough differences that they can copyright it and irritate the hell out of you when trying to figure out where to put the semi-colon
The H.R. people won't accept experience in the B(variation) that you know, only the B(variation) that they want.
And then you'll have to deal with language bigots. You know B(variation) but not D? Well then, you are one or more of:
a) not as productive
b) not a "real" programmer"
c) you write buggy code.
Then the E bigots will dump on the D bigots while the database language "Seroquel" (many programmers know what this is are are probably taking it) bigots watch with amused expressions because they know only their language is a "real" language.
It gets worse.
At some point they will change the entire paradigm of application development to a new one where you have less control over how it looks, works differently depending on the user's browser preference and requires giant servers. Sure, you don't have to deal with Installers, but at the cost of submitting your program to the whims of the server, the network and the user's preference of browsers.
Oh...and H.R. now wants:
10+ years work experience as a Technical Lead working with the following languages, tools, and methodologies:
* Technical lead role
* Agile development
* Project management
* Implementing Microsoft technologies
* Web architecture design and implementation
* High volume system architecture design
* Hardware and software load balancing technologies
* Data replication / ETL technologies
* Multithreading, socket programming, distributed transaction processing
* System stress testing / performance testing framework
* Business process / rules modeling
* Business Intelligence tools
Responsibilities
* Lead technical teams in designing and prototyping technical solutions
* Create implementation proposals
* Review technical designs, code, test plans
* Create well-designed, reusable objects
* Create and execute project work plans for the technical team, revising as necessary to meet changing needs and requirements.
* Communicate and enforce best practice coding standards.
* Consistently deliver high-quality products and services to clients on schedule.
* Communicate difficult/sensitive information appropriately.
* Communicate with customers technical concepts in easy to understand language.
* Communicate effectively with stakeholders to identify needs and evaluate alternative business solutions with project management.
* Develop an understanding of clients' business and suggest effective programming solutions.
Personal Attributes
* Creativity and strong attention to detail
* Ability to work effectively on tight deadlines as necessary
* Effective oral and written communication skills
* Exceptional customer service skills, including the ability to interact professionally with a diverse group of customers
* Desire to learn new skills and improve
Required Skills:
* Experience as Technical Project Lead, Architect, Lead Developer or other position of major responsibility on mission critical software projects
* C#, ASP.NET, VB.NET,C++, C, and/or JavaScript
* Relational databases: DB2, MS SQL Server, and/or Oracle
* Experience designing and coding superior technical solutions, creating and executing well designed and reusable objects, efficient and logical databases for clients, project work plans, revising as necessary to meet changing needs and requir
Re:Don't (Score:4, Informative)
Yes, that is from a for real job requirement.
Re:Don't (Score:4, Insightful)
I can't help but notice that if you take the Microsoft-related technologies from the requirement list it starts to look adequate.
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:Don't (Score:4, Insightful)
I've only been in the programming game for a decade but I don't suffer from that. Why?
I never did program in anything fashionable or new. The language I use for 99% of the serious stuff is C, there are always loads of jobs in it for someone with a few years experience, and it was designed in the late 60s/early 70s so it seems to me it's unlikely to just up and die any time soon.
I'm not trying to get into a 'which language is best' flamewar here, but from a career perspective I've done very nicely out of it. I do learn bits and pieces of other stuff as needed, but having C as a base ensures I'm never out of date (or perhaps I'm always out of date :)
Re: (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.
configurable software toolkits, e.g. Excel (Score:2)
Re: (Score:2)
Re: (Score:3, Insightful)
So when your car stops in the middle of a desolate no-phone zone you have some prayer of at least getting it to limp to the next town? So when the mechanic tells you your car needs a new 'connuter valve' and it will cost $500, you know to take your business elsewhere? Because the guys at the quickee-loob are always forgetting to tighten the oil filter and put the drain plug back in? So you know that when the check engine light comes on it means eventually but the oil light means right now?
I'm not a doctor,
Re: (Score:2)
Re:Why should a non-techie learn programming? (Score:5, Insightful)
Small business want to save money by making websites on their own... unfortunately they don't have the know how nor the time to do it. Rather than learning to program, i would suggest learn to spot the technical BS. It is far better to pay a professional firm that does design and site programming since they are less likely to open some blatant security holes to the world. Knowing how to program does not equal knowing how to program well. When your livelihood is on the line, spending couple hundred bucks is much cheaper than having your business go under because the site you wrote over the weekend got hacked by some automated drone and all your client info were stolen.
Re:Why should a non-techie learn programming? (Score:4, Interesting)
Re: (Score:2)
Yes and no. If you're a kid in high school who wants to make some money on the weekends, knowing how to write web pages isn't a bad approach. It probably won't pay enough to really live on, though, let alone support a family on. If you already have a marketable but not computer-based skill set (business, accounting, sales, psychology, chiropractics, education, etc.) then learning to program a little is not likely to help your bottom line at all, and learning to program well is going to take time away from u
Re: (Score:2)
Seconding that with an example (Score:3, Interesting)
Re: (Score:2)
OK, I'll provide some specifics.
Let's say an artist wants to learn programming, let''s say because in certain applications, like the Cycling '74 products, or if you wanted to develop custom MIDI controllers or even with some of the Native Instruments applications, a basic grasp of scripting and programming would really allow you to use some of the deep power of those applications.
Or if you wanted to do some game programming in Flash (don't ask why) or animation where ther
Re: (Score:3, Informative)
THE classic C book is K&R [amazon.com], it does not have example applications, it has examples of techniques. If you take the (non-
Re:practice (Score:5, Insightful)
Maybe the best option is to take an introductory programming course at a community collage and see if you like it?
Re: (Score:2)
Maybe the best option is to take an introductory programming course at a community collage and see if you like it?
Don't do this. You can teach yourself anything you'd learn in an introductory community college just by sitting down and reading and practicing.
Re: (Score:2)
That's called "code re-use".
Re: (Score:3, Insightful)
My opinion is that you should learn programming first, basic command line stuff. Then move on to
Re: (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: (Score:2)
http://amplicate.com/hate/drupal [amplicate.com]
Re: (Score:2)
if it's just to learn I'd start by showing them something with as low a barrier to entry as possible- just for the basics.
The first language is of course the hardest.
Just to learn the basics like loops, variables, etc etc
On windows that would probably be vbscript(horribly horrible language though it may be) and on a mac or linux it'd be bash.
Bash would be my preference since the man pages are also there at your fingertips.
No compilers, no worrying about libraries, no servers, no client connections etc.
Just